@osvi-ai/chat 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -3
  3. package/dist/core.js +10 -0
  4. package/dist/core.js.map +1 -0
  5. package/dist/index-HWHyM4-l.js +1331 -0
  6. package/dist/index-HWHyM4-l.js.map +1 -0
  7. package/dist/types/core/client.d.ts +67 -0
  8. package/dist/types/core/connection.d.ts +78 -0
  9. package/dist/types/core/errors.d.ts +14 -0
  10. package/dist/types/core/http.d.ts +38 -0
  11. package/dist/types/core/index.d.ts +7 -0
  12. package/dist/types/core/interactions.d.ts +50 -0
  13. package/dist/types/core/protocol/envelope.d.ts +2 -0
  14. package/dist/types/core/protocol/readers.d.ts +14 -0
  15. package/dist/types/core/protocol/types.d.ts +118 -0
  16. package/dist/types/core/protocol/validators.d.ts +10 -0
  17. package/dist/types/core/state.d.ts +23 -0
  18. package/dist/types/core/storage.d.ts +10 -0
  19. package/dist/types/core/version.d.ts +1 -0
  20. package/dist/types/ui/define.d.ts +1 -0
  21. package/dist/types/ui/icons.d.ts +9 -0
  22. package/dist/types/ui/index.d.ts +9 -0
  23. package/dist/types/ui/osvi-chat.d.ts +70 -0
  24. package/dist/types/ui/panel/attrs.d.ts +6 -0
  25. package/dist/types/ui/panel/composer.d.ts +10 -0
  26. package/dist/types/ui/panel/linkify.d.ts +7 -0
  27. package/dist/types/ui/panel/transcript.d.ts +4 -0
  28. package/dist/types/ui/strings.d.ts +27 -0
  29. package/dist/types/ui/styles.d.ts +1 -0
  30. package/dist/types/ui/theme.d.ts +22 -0
  31. package/dist/types/ui/tools/base.d.ts +14 -0
  32. package/dist/types/ui/tools/osvi-buttons.d.ts +10 -0
  33. package/dist/types/ui/tools/osvi-carousel.d.ts +16 -0
  34. package/dist/types/ui/tools/osvi-date-picker.d.ts +17 -0
  35. package/dist/types/widget/config.d.ts +23 -0
  36. package/dist/types/widget/index.d.ts +1 -0
  37. package/dist/types/widget/launcher.d.ts +35 -0
  38. package/dist/types/widget/widget.d.ts +13 -0
  39. package/dist/ui.js +109 -0
  40. package/dist/ui.js.map +1 -0
  41. package/dist/ui.mjs +646 -0
  42. package/dist/ui.mjs.map +1 -0
  43. package/dist/widget.js +132 -0
  44. package/dist/widget.js.map +1 -0
  45. package/package.json +60 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget.js","sources":["../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/lit-html/lit-html.js","../node_modules/lit-element/lit-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../src/core/version.ts","../src/core/errors.ts","../src/core/http.ts","../src/core/protocol/types.ts","../src/core/protocol/validators.ts","../src/core/protocol/readers.ts","../src/core/interactions.ts","../src/core/protocol/envelope.ts","../src/core/connection.ts","../src/core/storage.ts","../src/core/client.ts","../src/ui/theme.ts","../src/ui/strings.ts","../src/ui/panel/attrs.ts","../node_modules/lit-html/directive.js","../node_modules/lit-html/directive-helpers.js","../node_modules/lit-html/directives/repeat.js","../src/ui/panel/linkify.ts","../src/ui/panel/transcript.ts","../node_modules/lit-html/directives/live.js","../src/ui/icons.ts","../src/ui/panel/composer.ts","../src/ui/osvi-chat.ts","../src/ui/define.ts","../src/ui/styles.ts","../src/ui/tools/base.ts","../src/ui/tools/osvi-buttons.ts","../src/ui/tools/osvi-carousel.ts","../src/ui/tools/osvi-date-picker.ts","../src/ui/index.ts","../src/widget/config.ts","../src/widget/launcher.ts","../src/widget/widget.ts","../src/widget/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.3\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","declare const __SDK_VERSION__: string;\nexport const SDK_VERSION: string = __SDK_VERSION__;\n","export type ChatErrorCode = 'origin_not_allowed' | 'agent_inactive' | 'agent_archived' | 'agent_not_found'\n | 'session_not_found' | 'session_closed' | 'invalid_customer_id' | 'invalid_token' | 'session_unavailable'\n | 'stream_unavailable' | 'token_failed' | 'rate_limited' | 'network' | 'interaction_not_pending'\n | 'interaction_suspended' | 'invalid_interaction' | 'unknown';\n\nexport interface ChatError {\n code: ChatErrorCode;\n message: string;\n retryable: boolean;\n retryAfterSeconds?: number;\n origin?: string;\n}\n\nconst CODES = new Set<ChatErrorCode>(['origin_not_allowed', 'agent_inactive', 'agent_archived', 'agent_not_found',\n 'session_not_found', 'session_closed', 'invalid_customer_id', 'invalid_token', 'session_unavailable',\n 'stream_unavailable', 'token_failed', 'rate_limited', 'network', 'interaction_not_pending',\n 'interaction_suspended', 'invalid_interaction', 'unknown']);\nconst RETRYABLE = new Set<ChatErrorCode>(['rate_limited', 'network', 'session_unavailable', 'stream_unavailable', 'token_failed']);\n\nexport function toChatError(code: string | undefined, message?: string): ChatError {\n const known = (code && CODES.has(code as ChatErrorCode) ? code : 'unknown') as ChatErrorCode;\n return { code: known, message: message || known, retryable: RETRYABLE.has(known) };\n}\n\nexport class ChatRequestError extends Error {\n constructor(public readonly error: ChatError, public readonly status: number) {\n super(error.message);\n this.name = 'ChatRequestError';\n }\n}\n","import { ChatRequestError, toChatError } from './errors';\n\nexport interface MintedToken { token: string; wsUrl: string; expiresAt: number }\nexport interface PublicSession { id: string; mode: string; status: string; help_requested?: boolean; created_at?: string }\nexport interface Snapshot {\n session: PublicSession | null;\n messages: unknown[];\n active_interaction?: unknown;\n interaction_cursor?: string;\n interaction_response_message?: unknown;\n}\nexport interface Bootstrap extends Snapshot { agent: { agent_uuid: string; name: string; features: string[] } }\n\nconst DEFAULT_TTL_MS = 300_000;\n\nexport function normalizeExpiry(expiresAt: number | undefined, now: number = Date.now()): number {\n if (typeof expiresAt !== 'number' || !Number.isFinite(expiresAt)) return now + DEFAULT_TTL_MS;\n return expiresAt < 1e12 ? expiresAt * 1000 : expiresAt;\n}\n\nexport class HttpClient {\n private readonly base: string;\n\n constructor(baseUrl: string, private readonly fetchImpl: typeof fetch = (...a) => globalThis.fetch.bind(globalThis)(...a)) {\n this.base = baseUrl.replace(/\\/+$/, '');\n }\n\n resolveUrl(path: string): string {\n return `${this.base}${path}`;\n }\n\n bootstrap(agentId: string, customerId: string, signal?: AbortSignal): Promise<Bootstrap> {\n const q = `?customer_id=${encodeURIComponent(customerId)}`;\n return this.request<Bootstrap>(`/public/chat/agents/${encodeURIComponent(agentId)}/bootstrap${q}`, { signal });\n }\n\n createSession(agentId: string, customerId: string): Promise<PublicSession> {\n return this.request<PublicSession>(`/public/chat/agents/${encodeURIComponent(agentId)}/session`, {\n method: 'POST', body: JSON.stringify({ customer_id: customerId }),\n });\n }\n\n async mintPublicToken(sessionId: string): Promise<MintedToken> {\n const d = await this.request<{ token?: string; ws_url?: string; expires_at?: number }>(\n `/public/chat/session/${encodeURIComponent(sessionId)}/ws_token`, { method: 'POST', body: '{}' });\n if (!d?.token || !d?.ws_url) throw new ChatRequestError(toChatError('stream_unavailable'), 200);\n return { token: d.token, wsUrl: d.ws_url, expiresAt: normalizeExpiry(d.expires_at) };\n }\n\n snapshot(sessionId: string, token: string): Promise<Snapshot> {\n return this.request<Snapshot>(`/public/chat/session/${encodeURIComponent(sessionId)}/snapshot`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n }\n\n private async request<T>(path: string, init: RequestInit = {}): Promise<T> {\n let response: Response;\n try {\n const f = this.fetchImpl; // local call: a method call would bind `this` to the client\n const headers: Record<string, string> = { ...(init.headers as Record<string, string> | undefined) };\n if (init.body !== undefined) headers['Content-Type'] = 'application/json';\n response = await f(this.resolveUrl(path), { ...init, credentials: 'omit', headers });\n } catch (e) {\n if ((e as { name?: string })?.name === 'AbortError') throw e;\n throw new ChatRequestError(toChatError('network', 'Network error'), 0);\n }\n let body: Record<string, unknown> | null = null;\n try { body = (await response.json()) as Record<string, unknown>; } catch { body = null; }\n if (!response.ok || body?.success === false) {\n const error = toChatError(typeof body?.error === 'string' ? body.error : undefined,\n typeof body?.message === 'string' ? body.message : undefined);\n if (typeof body?.origin === 'string') error.origin = body.origin;\n if (response.status === 429) {\n error.code = 'rate_limited';\n error.retryable = true;\n const header = Number(response.headers.get('Retry-After'));\n const fromBody = Number(body?.retry_after);\n const seconds = Number.isFinite(header) && header > 0 ? header : fromBody;\n if (Number.isFinite(seconds) && seconds > 0) error.retryAfterSeconds = seconds;\n }\n throw new ChatRequestError(error, response.status);\n }\n return ((body?.data ?? body) as T);\n }\n}\n","export interface InteractionCapability {\n tool_type: string;\n schema_version: number;\n}\n\nexport interface ChoiceOption {\n id: string;\n label: string;\n description?: string;\n allow_input?: true;\n input_placeholder?: string;\n}\n\nexport interface ChoicePresentation {\n label: string;\n description?: string;\n options: ChoiceOption[];\n}\n\nexport interface CarouselImage {\n url: string;\n alt: string;\n}\n\nexport interface CarouselItem {\n id: string;\n title: string;\n description?: string;\n image?: CarouselImage;\n action_label?: string;\n}\n\nexport interface CarouselPresentation {\n label: string;\n description?: string;\n items: CarouselItem[];\n}\n\nexport interface DatePickerPresentation {\n label: string;\n description?: string;\n selection_mode: 'single' | 'range';\n min_date?: string;\n max_date?: string;\n confirm_label?: string;\n}\n\nexport type InteractionPresentation =\n | ChoicePresentation\n | CarouselPresentation\n | DatePickerPresentation;\n\nexport type InteractionResponse =\n | { kind: 'selection'; value: string }\n | { kind: 'text'; value: string }\n | { kind: 'date'; value: string }\n | { kind: 'date_range'; value: { start_date: string; end_date: string } };\n\nexport interface InteractionMessage {\n id: string;\n type: 'interaction';\n role: string;\n content: string;\n created_at?: string;\n interaction_id: string;\n tool_type: string;\n schema_version: number;\n presentation: InteractionPresentation;\n interaction_status: 'preparing' | 'pending' | 'accepted' | 'resumed' | 'cancelled' | 'expired';\n interaction_revision: number;\n selected_option_id?: string | null;\n response_payload?: InteractionResponse | null;\n}\n\nexport const SUPPORTED_INTERACTIONS = [\n { tool_type: 'ui_buttons', schema_version: 1 },\n { tool_type: 'ui_buttons', schema_version: 2 },\n { tool_type: 'ui_carousel', schema_version: 1 },\n { tool_type: 'ui_date_picker', schema_version: 1 },\n] as const;\n\nexport interface WireEnvelope {\n type: string;\n session_id?: string;\n account_id?: number | string;\n ts?: string;\n event_id?: string | number;\n payload: Record<string, unknown>;\n}\n\nexport type WriteState = 'accepted' | 'merged' | 'done' | 'failed' | 'busy' | 'invalid' | 'error';\n\nexport interface WriteResult {\n state: WriteState;\n error?: string;\n message_id?: string;\n turn_id?: string;\n interaction_id?: string;\n merged_into?: string;\n}\n\nexport interface WireMessage {\n id: string;\n role: 'user' | 'ai' | 'assistant' | 'operator' | 'support' | 'system';\n content: string;\n created_at?: string;\n type?: 'message' | 'interaction';\n}\n\nexport interface PublicRow extends Partial<Omit<InteractionMessage, 'id' | 'role' | 'content' | 'type' | 'presentation'>> {\n id: string;\n role: 'assistant' | 'user' | 'operator' | 'system';\n content: string;\n ts: string;\n type?: 'message' | 'interaction';\n presentation?: unknown;\n local?: true;\n}\n","import type {\n CarouselPresentation,\n ChoicePresentation,\n DatePickerPresentation,\n InteractionCapability,\n InteractionPresentation,\n InteractionResponse,\n} from './types';\n\nconst PRESENTATION_BYTES = 65_536;\nconst RESPONSE_TEXT_CODE_POINTS = 2_000;\nconst RESPONSE_TEXT_BYTES = 8_192;\nconst URL_CHARACTERS = 2_048;\nconst IDENTIFIER = /^[A-Za-z0-9_-]{1,64}$/;\n\nconst object = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === 'object' && !Array.isArray(value);\nconst only = (value: Record<string, unknown>, keys: readonly string[]) =>\n Object.keys(value).every((key) => keys.includes(key));\nconst codePoints = (value: string) => [...value].length;\nconst bytes = (value: string) => new TextEncoder().encode(value).length;\nconst hasDisallowedControl = (value: string) =>\n [...value].some((character) => {\n const code = character.codePointAt(0) ?? 0;\n return code === 127 || (code < 32 && code !== 9 && code !== 10 && code !== 13);\n });\nconst hasUrlWhitespaceOrControl = (value: string) =>\n [...value].some((character) => {\n const code = character.codePointAt(0) ?? 0;\n return code <= 32 || code === 127;\n });\nconst text = (value: unknown, maximum: number, required = false): value is string =>\n typeof value === 'string' && codePoints(value) <= maximum && !hasDisallowedControl(value) &&\n (!required || value.trim().length > 0);\nconst canonical = (value: unknown): unknown =>\n Array.isArray(value) ? value.map(canonical) : object(value)\n ? Object.fromEntries(Object.keys(value).sort().map((key) => [key, canonical(value[key])])) : value;\nconst withinPresentationBudget = (value: unknown) => {\n try {\n return bytes(JSON.stringify(canonical(value))) <= PRESENTATION_BYTES;\n } catch {\n return false;\n }\n};\n\nexport function isProxyImageUrl(value: unknown): value is string {\n return typeof value === 'string' && /^\\/public\\/chat\\/images\\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\/(?:0|[1-9][0-9]*)$/i.test(value);\n}\n\nexport function isPublicHttpsUrl(value: unknown): value is string {\n if (typeof value !== 'string' || value.length === 0 || value.length > URL_CHARACTERS || hasUrlWhitespaceOrControl(value)) return false;\n try {\n const url = new URL(value);\n const hostname = url.hostname.toLowerCase();\n if (url.protocol !== 'https:' || url.username || url.password || url.hash || url.port) return false;\n if (!hostname || hostname === 'localhost' || hostname.endsWith('.localhost') || hostname.endsWith('.local') || hostname.endsWith('.internal')) return false;\n if (hostname.startsWith('[') || /^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(hostname)) return false;\n return url.toString().length <= URL_CHARACTERS;\n } catch {\n return false;\n }\n}\n\nexport function isChoicePresentation(value: unknown, maximum?: number): value is ChoicePresentation {\n if (!object(value) || !only(value, ['label', 'description', 'options']) || !text(value.label, 160, true) ||\n ('description' in value && value.description !== undefined && !text(value.description, 240)) || !Array.isArray(value.options) || value.options.length === 0 ||\n (maximum !== undefined && value.options.length > maximum)) return false;\n const ids = new Set<string>();\n let typedOptions = 0;\n for (const option of value.options) {\n if (!object(option) || !only(option, ['id', 'label', 'description', 'allow_input', 'input_placeholder']) ||\n typeof option.id !== 'string' || !IDENTIFIER.test(option.id) || ids.has(option.id) || !text(option.label, 80, true) ||\n ('description' in option && option.description !== undefined && !text(option.description, 240))) return false;\n const allowsInput = option.allow_input === true;\n if ('allow_input' in option && !allowsInput) return false;\n if ('input_placeholder' in option && (!allowsInput || !text(option.input_placeholder, 160, true))) return false;\n if (allowsInput) typedOptions += 1;\n if (typedOptions > 1) return false;\n ids.add(option.id);\n }\n return withinPresentationBudget(value);\n}\n\nexport function isButtonsV1Presentation(value: unknown, maximum?: number): value is ChoicePresentation {\n return isChoicePresentation(value, maximum) && value.options.every((option) =>\n !Object.prototype.hasOwnProperty.call(option, 'allow_input') &&\n !Object.prototype.hasOwnProperty.call(option, 'input_placeholder'));\n}\n\nexport function isCarouselPresentation(value: unknown, maximum?: number, allowProxy = false): value is CarouselPresentation {\n if (!object(value) || !only(value, ['label', 'description', 'items']) || !text(value.label, 160, true) ||\n ('description' in value && value.description !== undefined && !text(value.description, 240)) || !Array.isArray(value.items) || value.items.length === 0 ||\n (maximum !== undefined && value.items.length > maximum)) return false;\n const ids = new Set<string>();\n for (const item of value.items) {\n if (!object(item) || !only(item, ['id', 'title', 'description', 'image', 'action_label']) ||\n typeof item.id !== 'string' || !IDENTIFIER.test(item.id) || ids.has(item.id) || !text(item.title, 120, true) ||\n ('description' in item && item.description !== undefined && !text(item.description, 500)) ||\n ('action_label' in item && item.action_label !== undefined && !text(item.action_label, 80, true))) return false;\n if ('image' in item && item.image !== undefined) {\n if (!object(item.image) || !only(item.image, ['url', 'alt']) ||\n !(isPublicHttpsUrl(item.image.url) || (allowProxy && isProxyImageUrl(item.image.url))) || !text(item.image.alt, 240, true)) return false;\n }\n ids.add(item.id);\n }\n return withinPresentationBudget(value);\n}\n\nexport function isCalendarDate(value: unknown): value is string {\n if (typeof value !== 'string' || !/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(value)) return false;\n const year = Number(value.slice(0, 4));\n const month = Number(value.slice(5, 7));\n const day = Number(value.slice(8, 10));\n if (year < 1 || year > 9999 || month < 1 || month > 12 || day < 1) return false;\n const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n const monthDays = [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n return day <= monthDays[month - 1]!;\n}\n\nexport function isDatePickerPresentation(value: unknown): value is DatePickerPresentation {\n if (!object(value) || !only(value, ['label', 'description', 'min_date', 'max_date', 'confirm_label', 'selection_mode']) || !text(value.label, 160, true) ||\n !['single', 'range'].includes(String(value.selection_mode)) ||\n ('description' in value && value.description !== undefined && !text(value.description, 240)) ||\n ('confirm_label' in value && value.confirm_label !== undefined && !text(value.confirm_label, 80, true)) ||\n ('min_date' in value && value.min_date !== undefined && !isCalendarDate(value.min_date)) ||\n ('max_date' in value && value.max_date !== undefined && !isCalendarDate(value.max_date))) return false;\n if (typeof value.min_date === 'string' && typeof value.max_date === 'string' && value.min_date > value.max_date) return false;\n return withinPresentationBudget(value);\n}\n\nexport function isInteractionPresentation(pair: InteractionCapability, value: unknown): value is InteractionPresentation {\n if (pair.tool_type === 'ui_buttons' && pair.schema_version === 1) return isButtonsV1Presentation(value);\n if (pair.tool_type === 'ui_buttons' && pair.schema_version === 2) return isChoicePresentation(value);\n if (pair.tool_type === 'ui_carousel' && pair.schema_version === 1) return isCarouselPresentation(value, undefined, true);\n if (pair.tool_type === 'ui_date_picker' && pair.schema_version === 1) return isDatePickerPresentation(value);\n return false;\n}\n\nexport function isInteractionResponse(pair: InteractionCapability, value: unknown): value is InteractionResponse {\n if (!object(value) || !only(value, ['kind', 'value']) || Object.keys(value).length !== 2) return false;\n if (value.kind === 'date_range') {\n return pair.tool_type === 'ui_date_picker' && pair.schema_version === 1 && object(value.value) &&\n only(value.value, ['start_date', 'end_date']) && Object.keys(value.value).length === 2 &&\n isCalendarDate(value.value.start_date) && isCalendarDate(value.value.end_date) &&\n value.value.start_date < value.value.end_date;\n }\n if (typeof value.value !== 'string') return false;\n if (value.kind === 'selection') return (pair.tool_type === 'ui_buttons' || pair.tool_type === 'ui_carousel') && IDENTIFIER.test(value.value);\n if (value.kind === 'text') return pair.tool_type === 'ui_buttons' && pair.schema_version === 2 && value.value === value.value.trim() &&\n text(value.value, RESPONSE_TEXT_CODE_POINTS, true) && bytes(value.value) <= RESPONSE_TEXT_BYTES;\n if (value.kind === 'date') return pair.tool_type === 'ui_date_picker' && pair.schema_version === 1 && isCalendarDate(value.value);\n return false;\n}\n\n","import type { InteractionMessage, PublicRow, WireMessage } from './types';\nimport { isInteractionResponse } from './validators';\n\nconst object = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value);\nconst statuses = new Set(['preparing', 'pending', 'accepted', 'resumed', 'cancelled', 'expired']);\n\nexport function readInteraction(value: unknown): (InteractionMessage & { role: 'assistant' }) | null {\n if (!object(value) || value.type !== 'interaction' || typeof value.id !== 'string' || !value.id ||\n value.role !== 'assistant' || typeof value.content !== 'string' ||\n typeof value.interaction_id !== 'string' || !value.interaction_id ||\n typeof value.tool_type !== 'string' || !Number.isSafeInteger(value.schema_version) || Number(value.schema_version) < 1 ||\n !Number.isSafeInteger(value.interaction_revision) || Number(value.interaction_revision) < 1 ||\n !statuses.has(String(value.interaction_status)) || !object(value.presentation)) return null;\n const pair = { tool_type: value.tool_type, schema_version: Number(value.schema_version) };\n const responsePayload = value.response_payload;\n if (responsePayload !== undefined && responsePayload !== null && !isInteractionResponse(pair, responsePayload)) return null;\n return {\n id: value.id, type: 'interaction', role: 'assistant', content: value.content,\n interaction_id: value.interaction_id, tool_type: value.tool_type, schema_version: Number(value.schema_version),\n presentation: value.presentation as unknown as InteractionMessage['presentation'],\n interaction_status: value.interaction_status as InteractionMessage['interaction_status'],\n interaction_revision: Number(value.interaction_revision),\n ...(typeof value.created_at === 'string' ? { created_at: value.created_at } : {}),\n ...(typeof value.selected_option_id === 'string' ? { selected_option_id: value.selected_option_id } : {}),\n ...(responsePayload !== undefined ? { response_payload: responsePayload as InteractionMessage['response_payload'] } : {}),\n };\n}\n\nexport function readPublicMessage(value: unknown): PublicRow | null {\n if (!object(value) || (typeof value.id !== 'string' && typeof value.id !== 'number') ||\n typeof value.content !== 'string' || !['assistant', 'user', 'operator', 'system'].includes(String(value.role))) return null;\n const interaction = readInteraction({ ...value, id: String(value.id) });\n return {\n id: String(value.id), content: value.content,\n type: value.type === 'interaction' ? 'interaction' : 'message',\n ts: typeof value.created_at === 'string' ? value.created_at : typeof value.ts === 'string' ? value.ts : new Date().toISOString(),\n ...(interaction ?? {}),\n role: value.role as PublicRow['role'],\n };\n}\n\nexport function interactionCursor(value: unknown): string | null {\n return typeof value === 'string' && /^\\d+$/.test(value) ? value.replace(/^0+(?=\\d)/, '') : null;\n}\n\nexport function compareCursors(left: string, right: string): number {\n return left.length === right.length ? (left === right ? 0 : left > right ? 1 : -1) : left.length > right.length ? 1 : -1;\n}\n\nexport function mergeItems<T extends { id: string; interaction_id?: string; interaction_revision?: number; interaction_status?: string }>(current: T[], additions: T[]): T[] {\n const result = [...current];\n for (const message of additions) {\n const index = result.findIndex((row) => row.id === message.id ||\n (message.interaction_id && row.interaction_id === message.interaction_id));\n if (index < 0) result.push(message);\n else {\n const previous = result[index]!;\n const lifecycleRank = (row: T) => row.interaction_status === 'preparing' ? 0 :\n row.interaction_status === 'pending' ? 1 : row.interaction_status === 'accepted' ? 2 : 3;\n const equalRevisionDowngrade = message.interaction_revision === previous.interaction_revision &&\n lifecycleRank(message) < lifecycleRank(previous);\n if (!equalRevisionDowngrade && (!message.interaction_revision || !previous.interaction_revision ||\n message.interaction_revision >= previous.interaction_revision)) result[index] = { ...previous, ...message };\n }\n }\n return result;\n}\n\nconst WIRE_ROLES = new Set(['user', 'ai', 'assistant', 'operator', 'support', 'system']);\n\nexport function readWireMessage(v: unknown): WireMessage | null {\n if (!v || typeof v !== 'object') return null;\n const o = v as Record<string, unknown>;\n const id = typeof o.id === 'number' ? String(o.id) : o.id;\n if (typeof id !== 'string' || id === '') return null;\n if (typeof o.content !== 'string') return null;\n if (typeof o.role !== 'string' || !WIRE_ROLES.has(o.role)) return null;\n const out: WireMessage = { id, role: o.role as WireMessage['role'], content: o.content };\n if (typeof o.created_at === 'string') out.created_at = o.created_at;\n if (o.type === 'interaction' || o.type === 'message') out.type = o.type;\n return out;\n}\n","import type { Snapshot } from './http';\nimport type { TranscriptItem, Message } from './state';\nimport { SUPPORTED_INTERACTIONS, type InteractionMessage, type InteractionResponse, type PublicRow, type WireEnvelope, type WriteResult } from './protocol/types';\nimport { compareCursors, interactionCursor, mergeItems, readInteraction, readPublicMessage } from './protocol/readers';\nimport { isButtonsV1Presentation, isCarouselPresentation, isChoicePresentation, isDatePickerPresentation, isInteractionResponse } from './protocol/validators';\nexport interface InteractionHost {\n sessionId(): string | null;\n humanConnected(): boolean;\n sendFrame(frame: Record<string, unknown>): boolean;\n updateItems(fn: (items: TranscriptItem[]) => TranscriptItem[]): void;\n refreshSnapshot(): Promise<Snapshot | null>;\n onChange(): void;\n newId(): string;\n}\nexport type InteractionError = { code: 'interaction_not_pending' | 'interaction_suspended' | 'invalid_interaction' | 'network'; message: string };\ninterface Selection {\n interactionId: string;\n messageId: string;\n original: InteractionMessage;\n frame: Record<string, unknown>;\n acknowledged: boolean;\n sent: boolean;\n}\n\nconst activeOffer = (offer: InteractionMessage) => ['pending', 'accepted'].includes(offer.interaction_status);\nexport class InteractionController {\n private _active: InteractionMessage | null = null;\n private _cursor = '0';\n private _pending = false;\n private _error: InteractionError | null = null;\n private operations = new Map<string, Selection>();\n private operation: Selection | null = null;\n private generation = 0;\n private refreshInFlight = false;\n private recoveryCursor: string | null = null;\n constructor(private readonly host: InteractionHost) {}\n get active(): InteractionMessage | null { return this._active; }\n get cursor(): string { return this._cursor; }\n get pending(): boolean { return this._pending; }\n get error(): InteractionError | null { return this._error; }\n private setActive(value: InteractionMessage | null): void { this._active = value; this.host.onChange(); }\n private setCursor(value: string): void { this._cursor = value; this.host.onChange(); }\n private setSelectionPending(value: boolean): void { this._pending = value; this.host.onChange(); }\n private setInteractionError(value: InteractionError | null): void { this._error = value; this.host.onChange(); }\n private setRows(fn: (rows: PublicRow[]) => PublicRow[]): void {\n this.host.updateItems((items) => {\n let cut = items.length;\n while (cut > 0 && items[cut - 1]!.kind !== 'divider') cut -= 1;\n const tail = items.slice(cut);\n return [...items.slice(0, cut), ...fromRows(fn(toRows(tail)), tail)];\n });\n }\n reset() {\n this.generation += 1;\n this.refreshInFlight = false;\n this.recoveryCursor = null;\n this.setActive(null);\n this._cursor = '0';\n this.setCursor('0');\n this.operations.clear();\n this.operation = null;\n this.setSelectionPending(false);\n this.setInteractionError(null);\n }\n\n private reject(operation: Selection, reason: InteractionError) {\n this.operations.delete(operation.interactionId);\n if (this.operations.size === 0) this.recoveryCursor = null;\n if (this.operation === operation) this.operation = null;\n this.setSelectionPending(false);\n this.setInteractionError(reason);\n const current = this._active;\n const restore = current?.interaction_id === operation.interactionId &&\n current.interaction_revision <= operation.original.interaction_revision;\n if (restore) this.setActive(operation.original);\n this.setRows((rows) => rows.filter((row) => row.id !== operation.messageId)\n .map((row) => restore && row.interaction_id === operation.interactionId ? readPublicMessage(operation.original)! : row));\n }\n\n private mergeProjection(offer: InteractionMessage | null, answer: unknown) {\n const response = readPublicMessage(answer);\n const operation = offer && this.operations.get(offer.interaction_id);\n if (operation && response?.role === 'user') {\n this.operations.delete(operation.interactionId);\n if (this.operations.size === 0) this.recoveryCursor = null;\n if (this.operation === operation) this.operation = null;\n this.setSelectionPending(false);\n this.setInteractionError(null);\n }\n const rows = [offer && readPublicMessage(offer), response?.role === 'user' ? response : null].filter((row): row is PublicRow => row !== null);\n this.setRows((current) => {\n // The continuation can arrive before the accepted-choice event. Replace\n // the optimistic answer in place so reconciliation cannot move it below\n // the assistant's reply, and discard any earlier canonical echo.\n const reconciled = operation && response?.role === 'user' &&\n current.some((row) => row.id === operation.messageId)\n ? current.flatMap((row) => row.id === operation.messageId ? [response] :\n row.id === response.id ? [] : [row])\n : current;\n return mergeItems(reconciled, rows);\n });\n }\n\n private refreshMissingOutcome(minimumCursor: string) {\n if (this.operations.size === 0) {\n this.recoveryCursor = null;\n return;\n }\n if (this.recoveryCursor === null || compareCursors(minimumCursor, this.recoveryCursor) > 0) {\n this.recoveryCursor = minimumCursor;\n }\n if (this.refreshInFlight) return;\n const requestedCursor = this.recoveryCursor;\n const requestedOperations = [...this.operations.values()];\n const stillUnresolved = (operation: Selection) => this.operations.get(operation.interactionId) === operation;\n const scope = this.generation;\n const sessionId = this.host.sessionId();\n this.refreshInFlight = true;\n this.setSelectionPending(true);\n void this.host.refreshSnapshot().then((snapshot) => {\n if (!snapshot) throw new Error(\"Snapshot unavailable\");\n if (scope !== this.generation || sessionId !== this.host.sessionId() || (snapshot.session !== null && snapshot.session.id !== sessionId)) return;\n if (!requestedOperations.some(stillUnresolved)) return;\n const nextCursor = interactionCursor(snapshot.interaction_cursor);\n if (nextCursor === null || compareCursors(nextCursor, this.recoveryCursor ?? requestedCursor) < 0 || compareCursors(nextCursor, this._cursor) < 0) return;\n const offer = snapshot.active_interaction === null ? null : readInteraction(snapshot.active_interaction);\n if (snapshot.active_interaction !== null && (!offer || !activeOffer(offer))) return;\n const canonical = snapshot.messages.map(readPublicMessage).filter((row): row is PublicRow => row !== null);\n const linked = readPublicMessage(snapshot.interaction_response_message);\n if (offer) canonical.push(readPublicMessage(offer)!);\n if (linked?.role === 'user') canonical.push(linked);\n const settled = requestedOperations.filter((operation) => stillUnresolved(operation) &&\n (offer?.interaction_id !== operation.interactionId || (offer.interaction_status === 'accepted' && linked?.role === 'user')));\n const optimisticIds = new Set(settled.map((operation) => operation.messageId));\n this.setRows((rows) => mergeItems(rows.filter((row) => !optimisticIds.has(row.id)), canonical)\n .sort((left, right) => (Date.parse(left.ts) - Date.parse(right.ts)) || 0));\n settled.forEach((operation) => this.operations.delete(operation.interactionId));\n if (this.operation && settled.includes(this.operation)) this.operation = null;\n this._cursor = nextCursor;\n this.recoveryCursor = null;\n this.setCursor(nextCursor);\n this.setActive(offer);\n this.setSelectionPending(this.operation !== null);\n this.setInteractionError(null);\n }).catch(() => {\n if (scope === this.generation && requestedOperations.some(stillUnresolved)) {\n this.setInteractionError({ code: 'network', message: 'Reconnecting to confirm your selection…' });\n }\n }).finally(() => {\n if (scope === this.generation) {\n this.refreshInFlight = false;\n if (this.operations.size === 0) {\n this.recoveryCursor = null;\n return;\n }\n // A lifecycle event received during this request raises the required\n // snapshot cursor; never lose it behind the in-flight request guard.\n const required = this.recoveryCursor;\n if (required !== null && compareCursors(required, requestedCursor) > 0) this.refreshMissingOutcome(required);\n }\n });\n }\n\n private hasMissingOutcome(offer: InteractionMessage | null): boolean { return [...this.operations.values()].some((operation) => !offer || operation.interactionId !== offer.interaction_id); }\n\n applySnapshot(snapshot: Snapshot) {\n const nextCursor = interactionCursor(snapshot.interaction_cursor);\n if (nextCursor === null || !Object.prototype.hasOwnProperty.call(snapshot, 'active_interaction')) return;\n const order = compareCursors(nextCursor, this._cursor);\n if (order < 0) return;\n const offer = snapshot.active_interaction === null ? null : readInteraction(snapshot.active_interaction);\n if (snapshot.active_interaction !== null && (!offer || !activeOffer(offer))) return;\n if (order > 0 && this.hasMissingOutcome(offer)) {\n this.refreshMissingOutcome(nextCursor);\n return;\n }\n // Equal-revision polls cannot undo a local selection still awaiting its outcome.\n if (order === 0 && (this.operation || (offer && this.operations.has(offer.interaction_id)) ||\n (offer === null && this._active))) return;\n this._cursor = nextCursor;\n this.setCursor(nextCursor);\n this.setActive(offer);\n this.mergeProjection(offer, snapshot.interaction_response_message);\n if (!offer || this.operation?.interactionId !== offer.interaction_id) {\n this.operation = null;\n this.setSelectionPending(false);\n }\n }\n\n applyEvent(event: WireEnvelope): boolean {\n if (!['interaction_published', 'interaction_updated', 'interaction_closed'].includes(event.type)) return false;\n if (event.session_id && event.session_id !== this.host.sessionId()) return true;\n const nextCursor = interactionCursor(event.payload.interaction_cursor);\n const offer = readInteraction(event.payload);\n if (!offer || offer.interaction_status === 'preparing' || nextCursor === null || compareCursors(nextCursor, this._cursor) <= 0) return true;\n if (this.hasMissingOutcome(offer) || (!activeOffer(offer) && this.operations.has(offer.interaction_id) &&\n !readPublicMessage(event.payload.interaction_response_message))) {\n this.refreshMissingOutcome(nextCursor);\n return true;\n }\n this._cursor = nextCursor;\n this.setCursor(nextCursor);\n this.mergeProjection(offer, event.payload.interaction_response_message);\n if (activeOffer(offer)) this.setActive(offer);\n else if (this._active?.interaction_id === offer.interaction_id) this.setActive(null);\n if (this.operation && (this.operation.interactionId !== offer.interaction_id || !activeOffer(offer))) {\n this.operation = null;\n this.setSelectionPending(false);\n }\n return true;\n }\n\n handleWriteResult(result: WriteResult): boolean {\n const payload = result as unknown as Record<string, unknown>;\n const operation = [...this.operations.values()].find((item) => item.messageId === payload.message_id);\n if (!operation) return false;\n if (payload.error || ['refused', 'failed', 'error', 'busy'].includes(String(payload.state))) {\n const code = ['interaction_not_pending', 'interaction_suspended', 'invalid_interaction', 'network'].includes(String(payload.error)) ? payload.error as InteractionError['code'] : 'invalid_interaction';\n this.reject(operation, { code, message: String(payload.error || payload.reason || 'The selection was not accepted. Please try again.') });\n } else {\n operation.acknowledged = true;\n if (this.operation === operation) this.operation = null;\n this.setSelectionPending(false);\n this.setInteractionError(null);\n }\n return true;\n }\n\n respond(interactionId: string, response: InteractionResponse): boolean {\n const offer = this._active;\n if (!this.host.sessionId() || this.host.humanConnected() || this.operation || !offer ||\n offer.interaction_id !== interactionId || offer.interaction_status !== 'pending' ||\n !SUPPORTED_INTERACTIONS.some((pair) => pair.tool_type === offer.tool_type && pair.schema_version === offer.schema_version) ||\n !isInteractionResponse(offer, response)) return false;\n const legacy = offer.tool_type === 'ui_buttons' && offer.schema_version === 1;\n let displayText: string | null = null;\n if (legacy && response.kind === 'selection' && isButtonsV1Presentation(offer.presentation)) {\n displayText = offer.presentation.options.find((option) => option.id === response.value)?.label ?? null;\n } else if (!legacy && response.kind === 'text' && offer.tool_type === 'ui_buttons' && isChoicePresentation(offer.presentation)) {\n displayText = response.value;\n } else if (!legacy && response.kind === 'selection' && offer.tool_type === 'ui_buttons' && isChoicePresentation(offer.presentation)) {\n displayText = offer.presentation.options.find((option) => option.id === response.value)?.label ?? null;\n } else if (response.kind === 'selection' && offer.tool_type === 'ui_carousel' && isCarouselPresentation(offer.presentation, undefined, true)) {\n displayText = offer.presentation.items.find((item) => item.id === response.value)?.title ?? null;\n } else if (response.kind === 'date' && offer.tool_type === 'ui_date_picker' && offer.schema_version === 1 &&\n isDatePickerPresentation(offer.presentation) && offer.presentation.selection_mode === 'single') {\n if ((!offer.presentation.min_date || response.value >= offer.presentation.min_date) &&\n (!offer.presentation.max_date || response.value <= offer.presentation.max_date)) displayText = response.value;\n } else if (response.kind === 'date_range' && offer.tool_type === 'ui_date_picker' && offer.schema_version === 1 &&\n isDatePickerPresentation(offer.presentation) && offer.presentation.selection_mode === 'range') {\n const { start_date: start, end_date: end } = response.value;\n if ((!offer.presentation.min_date || start >= offer.presentation.min_date) &&\n (!offer.presentation.max_date || end <= offer.presentation.max_date)) displayText = `${start} to ${end}`;\n }\n if (!displayText) return false;\n const messageId = this.host.newId();\n const operation: Selection = {\n interactionId, messageId, original: offer, acknowledged: false, sent: false,\n frame: { type: 'interaction_response', interaction_id: interactionId,\n ...(legacy ? { option_id: response.value } : { response }),\n message_id: messageId, idempotency_key: this.host.newId(), supported_interactions: SUPPORTED_INTERACTIONS },\n };\n this.operations.set(interactionId, operation);\n this.operation = operation;\n this.setSelectionPending(true);\n this.setInteractionError(null);\n const optimistic: InteractionMessage = { ...offer, interaction_status: 'accepted',\n ...(legacy ? { selected_option_id: response.value as string } : { response_payload: response }) };\n this.setActive(optimistic);\n this.setRows((rows) => mergeItems(rows, [readPublicMessage(optimistic)!,\n { id: messageId, type: 'message', role: 'user', content: displayText!, ts: new Date().toISOString(), local: true }]));\n operation.sent = this.host.sendFrame(operation.frame);\n return true;\n }\n\n onConnectionOpen(): void {\n const operation = this.operation;\n if (operation && !operation.acknowledged && !this.host.humanConnected()) {\n operation.sent = this.host.sendFrame(operation.frame);\n }\n }\n}\n\nexport function toRows(items: TranscriptItem[]): PublicRow[] {\n const rows: PublicRow[] = [];\n for (const item of items) {\n if (item.kind === 'interaction') rows.push(readPublicMessage(item.interaction)!);\n else if (item.kind === 'message') {\n rows.push({ id: item.serverId ?? item.id, type: 'message', role: item.role === 'human' ? 'operator' : item.role,\n content: item.content, ts: item.createdAt });\n }\n }\n return rows;\n}\n\nexport function fromRows(rows: PublicRow[], previous: TranscriptItem[]): TranscriptItem[] {\n const known = new Map<string, Message>();\n for (const item of previous) if (item.kind === 'message') { known.set(item.id, item); if (item.serverId) known.set(item.serverId, item); }\n const out: TranscriptItem[] = [];\n for (const row of rows) {\n if (row.type === 'interaction' && row.interaction_id) {\n const interaction = readInteraction(row);\n if (interaction) out.push({ kind: 'interaction', id: row.interaction_id, interaction });\n continue;\n }\n if (row.role === 'system') continue;\n const prev = known.get(row.id);\n if (prev) { out.push(prev.content === row.content ? prev : { ...prev, content: row.content }); continue; }\n if (row.local) {\n out.push({ kind: 'message', id: row.id, role: 'user', content: row.content, createdAt: row.ts, status: 'sending' });\n continue;\n }\n out.push({ kind: 'message', id: `srv:${row.id}`, serverId: row.id, role: row.role === 'operator' ? 'human' : row.role,\n content: row.content, createdAt: row.ts, status: 'sent' });\n }\n return out;\n}\n","import type { WireEnvelope } from './types';\n\nexport function parseEnvelope(data: unknown): WireEnvelope | null {\n let raw: unknown = data;\n if (typeof data === 'string') {\n try { raw = JSON.parse(data); } catch { return null; }\n }\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return null;\n const o = raw as Record<string, unknown>;\n if (typeof o.type !== 'string') return null;\n const payload = o.payload && typeof o.payload === 'object' && !Array.isArray(o.payload)\n ? (o.payload as Record<string, unknown>) : {};\n return { ...(o as object), type: o.type, payload } as WireEnvelope;\n}\n","import { ChatRequestError, toChatError, type ChatError } from './errors';\nimport type { MintedToken } from './http';\nimport { parseEnvelope } from './protocol/envelope';\nimport type { WireEnvelope } from './protocol/types';\n\nexport type ConnectionStatus = 'connecting' | 'open' | 'recovering' | 'offline';\nexport interface PageSignals {\n isVisible(): boolean;\n onVisible(cb: () => void): () => void;\n onOnline(cb: () => void): () => void;\n}\nexport interface ConnectionOptions {\n mint: () => Promise<MintedToken>;\n sdkVersion: string;\n onFrame: (env: WireEnvelope) => void;\n onStatus: (status: ConnectionStatus) => void;\n onOpen: () => void;\n onReconnected: () => void;\n onError: (error: ChatError) => void;\n onClosed: (reason: string) => void;\n WebSocketImpl?: typeof WebSocket;\n page?: PageSignals;\n random?: () => number;\n}\n\nexport const PING_INTERVAL_MS = 25_000;\nexport const SILENCE_LIMIT_MS = 60_000;\nexport const ROTATE_LEAD_MS = 30_000;\nexport const AGENT_INACTIVE_RETRY_MS = 60_000;\nexport const BACKOFF_MS = [1000, 2000, 4000, 8000, 16000, 30000];\nconst ROTATE_RETRY_MS = 10_000;\nconst CLIENT_ROTATE = 4000;\nconst MAX_AUTH_CLOSES = 2;\nconst TERMINAL_MINT_CODES = new Set(['invalid_token', 'session_not_found', 'session_closed', 'origin_not_allowed', 'agent_archived', 'agent_not_found']);\n\nexport function browserPage(): PageSignals {\n return {\n isVisible: () => typeof document === 'undefined' || document.visibilityState !== 'hidden',\n onVisible: (cb) => {\n const h = () => { if (document.visibilityState !== 'hidden') cb(); };\n if (typeof document === 'undefined') return () => {};\n document.addEventListener('visibilitychange', h);\n return () => document.removeEventListener('visibilitychange', h);\n },\n onOnline: (cb) => {\n if (typeof window === 'undefined') return () => {};\n window.addEventListener('online', cb);\n return () => window.removeEventListener('online', cb);\n },\n };\n}\n\nfunction detach(s: WebSocket | null): void {\n if (!s) return;\n s.onopen = null; s.onmessage = null; s.onclose = null; s.onerror = null;\n}\n\nexport class StreamConnection {\n private socket: WebSocket | null = null; // current socket\n private next: WebSocket | null = null; // rotation socket, not yet open\n private stopped = false;\n private started = false;\n private everOpened = false;\n private failures = 0;\n private authCloses = 0; // consecutive 4401 closes without a successful open\n private epoch = 0; // bumped on every close of the current socket\n private rotating = false;\n private pingSupported = true;\n private lastInbound = 0;\n private lastPingSentAt = 0;\n private expiresAt = 0;\n private timers = new Set<ReturnType<typeof setTimeout>>();\n private pingTimer: ReturnType<typeof setInterval> | null = null;\n private waitingForPage = new Set<() => void>();\n private readonly page: PageSignals;\n private readonly WS: typeof WebSocket;\n private readonly random: () => number;\n\n constructor(private readonly opts: ConnectionOptions) {\n this.page = opts.page ?? browserPage();\n this.WS = opts.WebSocketImpl ?? WebSocket;\n this.random = opts.random ?? Math.random;\n }\n\n get isOpen(): boolean {\n return !this.stopped && this.socket?.readyState === 1;\n }\n\n start(): void {\n if (this.started || this.stopped) return;\n this.started = true;\n this.opts.onStatus('connecting');\n void this.connect();\n }\n\n send(frame: Record<string, unknown>): boolean {\n if (!this.isOpen) return false;\n this.socket!.send(JSON.stringify(frame));\n return true;\n }\n\n stop(): void {\n this.stopped = true;\n this.epoch += 1;\n this.clearTimers();\n this.stopPings();\n this.waitingForPage.forEach((off) => off());\n this.waitingForPage.clear();\n this.abandon(this.next); this.next = null;\n this.abandon(this.socket); this.socket = null;\n }\n\n private abandon(s: WebSocket | null): void {\n detach(s);\n try { s?.close(1000, 'client-stop'); } catch { /* already closed */ }\n }\n\n private recoveringStatus(): ConnectionStatus {\n return this.everOpened ? 'recovering' : 'connecting';\n }\n\n private urlFor(m: MintedToken): string {\n const sep = m.wsUrl.includes('?') ? '&' : '?';\n return `${m.wsUrl}${sep}token=${encodeURIComponent(m.token)}&sdk=${encodeURIComponent(this.opts.sdkVersion)}`;\n }\n\n private async connect(): Promise<void> {\n if (this.stopped) return;\n const epoch = this.epoch;\n let minted: MintedToken;\n try {\n minted = await this.opts.mint();\n } catch (e) {\n if (this.stopped || epoch !== this.epoch) return;\n this.handleMintFailure(e);\n return;\n }\n if (this.stopped || epoch !== this.epoch) return;\n try { this.openSocket(minted, false); } catch (e) { this.handleMintFailure(e); }\n }\n\n // Handlers are bound to `s`: events from a socket that is no longer current are ignored.\n private openSocket(minted: MintedToken, rotation: boolean): void {\n const s = new this.WS(this.urlFor(minted));\n if (rotation) this.next = s; else { this.socket = s; this.expiresAt = minted.expiresAt; }\n s.onopen = () => {\n if (this.stopped) return;\n if (rotation) { if (this.next === s) this.swapIn(s, minted.expiresAt); } else if (this.socket === s) this.handleOpen();\n };\n s.onmessage = (e: MessageEvent) => { if (this.socket === s) this.handleMessage(e.data); };\n s.onclose = (e: CloseEvent) => {\n if (this.stopped) return;\n if (this.next === s) { // rotation socket died before opening: keep the current one, retry later\n detach(s);\n this.next = null;\n this.later(ROTATE_RETRY_MS, () => this.whenVisible(() => void this.rotate()));\n return;\n }\n if (this.socket === s) this.handleClose(e.code, e.reason);\n };\n }\n\n private handleOpen(): void {\n const reconnect = this.everOpened;\n this.everOpened = true;\n this.failures = 0;\n this.authCloses = 0;\n this.pingSupported = true;\n this.lastInbound = Date.now();\n this.opts.onStatus('open');\n if (this.stopped) return;\n this.startPings();\n this.scheduleRotation();\n if (this.stopped) return;\n this.opts.onOpen();\n if (reconnect && !this.stopped) this.opts.onReconnected();\n }\n\n private swapIn(s: WebSocket, expiresAt: number): void {\n const old = this.socket;\n this.next = null;\n this.socket = s;\n this.expiresAt = expiresAt;\n this.failures = 0;\n this.authCloses = 0;\n this.pingSupported = true;\n detach(old);\n try { old?.close(CLIENT_ROTATE, 'token-refresh'); } catch { /* already closed */ }\n this.clearTimers();\n this.lastInbound = Date.now();\n this.startPings();\n this.scheduleRotation();\n this.opts.onOpen(); // client resends unacked frames\n if (!this.stopped) this.opts.onReconnected(); // client reconciles; status stays 'open'\n }\n\n private handleMessage(data: unknown): void {\n if (this.stopped) return;\n this.lastInbound = Date.now();\n const env = parseEnvelope(data);\n if (!env) return;\n if (env.type === 'ws_write_result' && env.payload.error === 'invalid_input_type' && !env.payload.message_id) {\n this.pingSupported = false; // engine predates ping; rely on reconnects\n this.stopPings();\n return;\n }\n this.opts.onFrame(env);\n }\n\n private handleClose(code: number, reason: string): void {\n if (this.stopped) return;\n this.epoch += 1;\n detach(this.socket);\n this.socket = null;\n this.abandon(this.next); this.next = null;\n this.rotating = false;\n this.stopPings();\n this.clearTimers();\n this.clearPageListeners();\n if (code === 4401) {\n this.authCloses += 1;\n if (this.authCloses > MAX_AUTH_CLOSES) { // reconnecting is not fixing it\n this.opts.onError(toChatError('invalid_token'));\n this.scheduleBackoff();\n return;\n }\n this.opts.onStatus(this.recoveringStatus());\n this.whenVisible(() => this.reconnectNow());\n return;\n }\n if (code === 1008 && reason === 'agent_inactive') {\n this.opts.onError(toChatError('agent_inactive'));\n if (!this.stopped) this.opts.onStatus(this.recoveringStatus());\n this.later(AGENT_INACTIVE_RETRY_MS, () => this.reconnectNow());\n return;\n }\n if (code === 1008) { this.terminate(reason || 'policy'); return; }\n this.scheduleBackoff();\n }\n\n private handleMintFailure(e: unknown): void {\n const err = e instanceof ChatRequestError ? e.error : toChatError('network');\n if (err.code === 'agent_inactive') {\n this.opts.onError(err);\n if (!this.stopped) this.opts.onStatus(this.recoveringStatus());\n this.later(AGENT_INACTIVE_RETRY_MS, () => this.reconnectNow());\n return;\n }\n if (TERMINAL_MINT_CODES.has(err.code)) { this.terminate(err.code); return; }\n if (err.code === 'rate_limited' && err.retryAfterSeconds) {\n this.opts.onError(err);\n if (!this.stopped) this.opts.onStatus(this.recoveringStatus());\n this.later(err.retryAfterSeconds * 1000, () => this.reconnectNow());\n return;\n }\n this.scheduleBackoff();\n }\n\n private reconnectNow(): void {\n if (this.stopped) return;\n this.opts.onStatus(this.recoveringStatus());\n void this.connect();\n }\n\n private scheduleBackoff(): void {\n if (this.stopped) return;\n const index = Math.min(this.failures, BACKOFF_MS.length - 1);\n this.failures += 1;\n if (this.failures > BACKOFF_MS.length) { // the 7th consecutive failure\n this.opts.onStatus('offline');\n this.retryWhenReachable();\n return;\n }\n this.opts.onStatus(this.recoveringStatus());\n const delay = Math.round(BACKOFF_MS[index]! * (0.8 + 0.4 * this.random()));\n this.later(delay, () => void this.connect());\n }\n\n // First of online / visible / 30 s timer wins and cancels the other two.\n private retryWhenReachable(): void {\n if (this.stopped) return;\n let fired = false;\n const cancel = () => { clearTimeout(timer); this.timers.delete(timer); offVisible(); offOnline(); this.waitingForPage.delete(cancel); };\n const retry = () => { if (fired || this.stopped) return; fired = true; cancel(); this.reconnectNow(); };\n const offVisible = this.page.onVisible(retry);\n const offOnline = this.page.onOnline(retry);\n const timer = setTimeout(() => { if (!this.stopped) retry(); }, BACKOFF_MS[BACKOFF_MS.length - 1]);\n this.timers.add(timer);\n this.waitingForPage.add(cancel);\n }\n\n private whenVisible(fn: () => void): void {\n if (this.stopped) return;\n if (this.page.isVisible()) { fn(); return; }\n let fired = false;\n const off = this.page.onVisible(() => {\n if (fired || this.stopped || !this.page.isVisible()) return;\n fired = true; off(); this.waitingForPage.delete(off); fn();\n });\n this.waitingForPage.add(off);\n }\n\n private startPings(): void {\n this.stopPings();\n this.lastPingSentAt = 0;\n this.pingTimer = setInterval(() => {\n if (this.stopped || !this.isOpen || !this.pingSupported) return;\n const now = Date.now();\n const pingedSinceInbound = this.lastPingSentAt > this.lastInbound;\n if (this.page.isVisible() && pingedSinceInbound && now - this.lastInbound >= SILENCE_LIMIT_MS) {\n this.declareDead();\n return;\n }\n if (this.send({ type: 'ping' })) this.lastPingSentAt = now;\n }, PING_INTERVAL_MS);\n }\n\n private declareDead(): void {\n const s = this.socket;\n if (!s) return;\n detach(s);\n try { s.close(4001, 'silent'); } catch { /* already dead */ }\n this.handleClose(4001, 'silent'); // do not wait for an onclose that may never come\n }\n\n private stopPings(): void {\n if (this.pingTimer !== null) clearInterval(this.pingTimer);\n this.pingTimer = null;\n }\n\n private scheduleRotation(): void {\n const delay = Math.max(5_000, this.expiresAt - Date.now() - ROTATE_LEAD_MS);\n this.later(delay, () => this.whenVisible(() => void this.rotate()));\n }\n\n // Mint first, open the new socket, close the old one only once the new one is open.\n private async rotate(): Promise<void> {\n if (this.stopped || this.rotating || !this.isOpen || this.next) return;\n this.rotating = true;\n const epoch = this.epoch;\n let minted: MintedToken;\n try {\n minted = await this.opts.mint();\n } catch (e) {\n if (this.stopped || epoch !== this.epoch) return;\n this.rotating = false;\n const err = e instanceof ChatRequestError ? e.error : toChatError('network');\n if (TERMINAL_MINT_CODES.has(err.code)) { this.terminate(err.code); return; }\n const wait = err.retryAfterSeconds ? err.retryAfterSeconds * 1000 : ROTATE_RETRY_MS;\n this.later(wait, () => this.whenVisible(() => void this.rotate())); // current socket stays open\n return;\n }\n if (this.stopped || epoch !== this.epoch) return; // socket closed meanwhile; its own reconnect mints\n this.rotating = false;\n try { this.openSocket(minted, true); } catch {\n this.later(ROTATE_RETRY_MS, () => this.whenVisible(() => void this.rotate()));\n }\n }\n\n private terminate(reason: string): void {\n this.stop();\n this.opts.onClosed(reason);\n }\n\n private later(ms: number, fn: () => void): void {\n if (this.stopped) return;\n const t = setTimeout(() => { this.timers.delete(t); if (!this.stopped) fn(); }, ms);\n this.timers.add(t);\n }\n\n private clearPageListeners(): void {\n this.waitingForPage.forEach((off) => off());\n this.waitingForPage.clear();\n }\n\n private clearTimers(): void {\n this.timers.forEach(clearTimeout);\n this.timers.clear();\n }\n}\n","export interface KeyValueStore {\n get(key: string): string | null;\n set(key: string, value: string): void;\n remove(key: string): void;\n}\n\nexport const VISITOR_KEY = 'osvi.chat.visitor';\nconst VISITOR_FORMAT = /^web:[0-9a-f]{32}$/;\n\nexport function memoryStore(): KeyValueStore {\n const values = new Map<string, string>();\n return {\n get: (key) => values.get(key) ?? null,\n set: (key, value) => void values.set(key, value),\n remove: (key) => void values.delete(key),\n };\n}\n\nexport function browserStore(): KeyValueStore {\n const memory = memoryStore();\n let broken = false;\n const attempt = <T>(operation: () => T, fallback: () => T): T => {\n if (broken) return fallback();\n try {\n return operation();\n } catch {\n broken = true;\n return fallback();\n }\n };\n\n return {\n get: (key) => attempt(() => window.localStorage.getItem(key), () => memory.get(key)),\n set: (key, value) => attempt(() => window.localStorage.setItem(key, value), () => memory.set(key, value)),\n remove: (key) => attempt(() => window.localStorage.removeItem(key), () => memory.remove(key)),\n };\n}\n\nconst toVisitorId = (bytes: Uint8Array): string =>\n `web:${Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('')}`;\n\nlet ephemeralId: string | null = null;\n\nexport function getVisitorId(store: KeyValueStore, random?: () => Uint8Array): string {\n const existing = store.get(VISITOR_KEY);\n if (existing && VISITOR_FORMAT.test(existing)) return existing;\n if (existing !== null) store.remove(VISITOR_KEY);\n\n let bytes: Uint8Array | undefined;\n if (random) {\n bytes = random();\n } else {\n try {\n bytes = globalThis.crypto?.getRandomValues?.(new Uint8Array(16));\n } catch {\n // Some browsers expose crypto but deny access to its random source.\n }\n }\n\n if (bytes) {\n const id = toVisitorId(bytes);\n store.set(VISITOR_KEY, id);\n return id;\n }\n\n if (!ephemeralId) {\n const weak = new Uint8Array(16);\n for (let index = 0; index < weak.length; index += 1) {\n weak[index] = Math.floor(Math.random() * 256);\n }\n ephemeralId = toVisitorId(weak);\n }\n\n return ephemeralId;\n}\n\nexport function sessionHintKey(agentId: string): string {\n return `osvi.chat.session.${agentId}`;\n}\n","import { ChatRequestError, toChatError, type ChatError } from './errors';\nimport { HttpClient, normalizeExpiry, type MintedToken, type Snapshot } from './http';\nimport { InteractionController } from './interactions';\nimport { browserPage, StreamConnection, type PageSignals } from './connection';\nimport { readInteraction, readWireMessage } from './protocol/readers';\nimport { SUPPORTED_INTERACTIONS, type InteractionMessage, type InteractionResponse, type WireEnvelope, type WriteResult } from './protocol/types';\nimport type { Divider, Message, TranscriptItem } from './state';\nimport { browserStore, getVisitorId, sessionHintKey, type KeyValueStore } from './storage';\nimport { SDK_VERSION } from './version';\n\nexport const DEFAULT_BASE_URL = 'https://api.osvi.ai';\nexport const AWAITING_REPLY_TIMEOUT_MS = 120_000;\nexport const SEND_ACK_TIMEOUT_MS = 15_000;\nconst BUSY_DELAYS_MS = [1000, 2000, 4000, 8000, 16000];\nconst SEEN_EVENT_CAP = 2048;\nconst QUIET_END_REASONS = new Set(['session_closed', 'session_dormant', 'new_session']);\n\nexport interface ServerToken { sessionId: string; token: string; wsUrl: string; expiresAt: number }\nexport type ChatAuth = { mode: 'anonymous' } | { mode: 'server'; getToken: (opts?: { newSession?: boolean }) => Promise<ServerToken> };\nexport interface ChatClientOptions {\n agentId: string; baseUrl?: string; auth?: ChatAuth;\n fetch?: typeof fetch; WebSocketImpl?: typeof WebSocket; store?: KeyValueStore; page?: PageSignals; random?: () => number;\n}\nexport type ChatStatus = 'idle' | 'connecting' | 'open' | 'recovering' | 'offline' | 'closed';\nexport interface ChatState {\n status: ChatStatus;\n mode: 'ai' | 'human';\n awaitingReply: boolean;\n items: TranscriptItem[];\n activeInteraction: InteractionMessage | null;\n interactionPending: boolean;\n agent: { agentId: string; name: string } | null;\n error: ChatError | null;\n}\nexport type SendOutcome = { ok: true; messageId: string } | { ok: false; reason: 'empty' | 'destroyed' | 'awaiting_interaction' | 'unavailable' };\nexport interface ChatClient {\n start(): Promise<void>;\n send(text: string): Promise<SendOutcome>;\n respond(interactionId: string, response: InteractionResponse): Promise<boolean>;\n retry(messageId: string): Promise<boolean>;\n newSession(opts?: { keepHistory?: boolean }): Promise<boolean>; // keepHistory defaults to true\n subscribe(listener: (state: ChatState) => void): () => void;\n getState(): ChatState;\n resolveUrl(path: string): string;\n destroy(): void;\n}\n\ninterface PendingSend {\n frame: Record<string, unknown>;\n attempts: number;\n gen: number; // socket generation this frame was last written on (-1: never)\n ackTimer: ReturnType<typeof setTimeout> | null;\n}\n\n// Message ids and idempotency keys are not secrets, so the last-resort fallback is allowed here.\n// Anything security-relevant (the visitor id, D4) never falls back to Math.random.\nfunction uuid(): string {\n const c = globalThis.crypto;\n if (c?.randomUUID) return c.randomUUID();\n if (c?.getRandomValues) {\n const b = c.getRandomValues(new Uint8Array(16));\n b[6] = (b[6]! & 0x0f) | 0x40; b[8] = (b[8]! & 0x3f) | 0x80;\n const h = Array.from(b, (x) => x.toString(16).padStart(2, '0')).join('');\n return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`;\n }\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;\n}\n\nconst emptyState = (): ChatState => ({ status: 'idle', mode: 'ai', awaitingReply: false, items: [], activeInteraction: null,\n interactionPending: false, agent: null, error: null });\n\nconst ROLE_MAP: Record<string, Message['role'] | undefined> = {\n user: 'user', ai: 'assistant', assistant: 'assistant', operator: 'human', support: 'human',\n};\n\nclass Client implements ChatClient {\n private state: ChatState = emptyState();\n private readonly listeners = new Set<(s: ChatState) => void>();\n private readonly http: HttpClient;\n private readonly store: KeyValueStore;\n private readonly page: PageSignals;\n private readonly interactions: InteractionController;\n private conn: StreamConnection | null = null;\n private sessionId: string | null = null;\n private latestToken: string | null = null;\n private chain: Promise<unknown> = Promise.resolve(); // serializes start / ensureSession / newSession\n private startP: Promise<void> | null = null;\n private ensureP: Promise<string | null> | null = null;\n private readonly pending = new Map<string, PendingSend>(); // sends not yet acked/echoed, in send order\n private openGen = 0;\n private sessionGeneration = 0;\n private seen: string[] = [];\n private readonly seenSet = new Set<string>();\n private readonly timers = new Set<ReturnType<typeof setTimeout>>();\n private awaitingTimer: ReturnType<typeof setTimeout> | null = null;\n private destroyed = false;\n private wantNewServerSession = false;\n private switchTo: ServerToken | null = null; // server mode: rotation returned a different session\n\n constructor(private readonly opts: ChatClientOptions) {\n this.http = new HttpClient(opts.baseUrl ?? DEFAULT_BASE_URL, opts.fetch);\n this.store = opts.store ?? browserStore();\n this.page = opts.page ?? browserPage();\n this.interactions = new InteractionController({\n sessionId: () => this.sessionId,\n humanConnected: () => this.state.mode === 'human',\n sendFrame: (frame) => this.conn?.send(frame) ?? false,\n updateItems: (fn) => this.patch({ items: fn(this.state.items) }),\n refreshSnapshot: () => this.fetchSnapshot(),\n onChange: () => this.patch({}),\n newId: uuid,\n });\n }\n\n private get serverMode(): boolean { return this.opts.auth?.mode === 'server'; }\n\n private serialize<T>(fn: () => Promise<T>): Promise<T> {\n const run = this.chain.then(fn);\n this.chain = run.catch(() => undefined);\n return run;\n }\n\n // ---------- public API ----------\n\n start(): Promise<void> {\n if (this.destroyed) return Promise.resolve();\n if (!this.startP) this.startP = this.serialize(() => this.doStart()).finally(() => { this.startP = null; });\n return this.startP;\n }\n\n private async doStart(): Promise<void> {\n if (this.destroyed || (this.sessionId && this.conn)) return;\n if (this.serverMode) { await this.openServerSession(); return; }\n try {\n const boot = await this.http.bootstrap(this.opts.agentId, getVisitorId(this.store));\n if (this.destroyed) return;\n this.patch({ agent: { agentId: this.opts.agentId, name: boot.agent?.name ?? '' } });\n if (boot.session?.id && boot.session.status === 'active') this.adopt(boot.session.id, boot, this.pending.size ? 'append' : 'replace');\n else this.store.remove(sessionHintKey(this.opts.agentId));\n } catch (e) {\n this.fail(e, false); // a network blip must not lock the composer\n }\n }\n\n async send(text: string): Promise<SendOutcome> {\n if (this.destroyed) return { ok: false, reason: 'destroyed' };\n const content = text.trim();\n if (!content) return { ok: false, reason: 'empty' };\n if (this.state.mode === 'ai' && (this.interactions.pending || this.interactions.active?.interaction_status === 'pending')) {\n return { ok: false, reason: 'awaiting_interaction' };\n }\n const id = uuid();\n const key = uuid();\n const message: Message = { kind: 'message', id, role: 'user', content, createdAt: new Date().toISOString(),\n status: 'sending', idempotencyKey: key };\n this.patch({ items: [...this.state.items, message] });\n this.pending.set(id, { frame: this.frameFor(message), attempts: 0, gen: -1, ackTimer: null });\n const sid = await this.ensureSession();\n if (!sid) {\n this.dropPending(id);\n this.setMessage(id, { status: 'failed' });\n return { ok: false, reason: 'unavailable' };\n }\n this.transmit(id);\n return { ok: true, messageId: id };\n }\n\n async respond(interactionId: string, response: InteractionResponse): Promise<boolean> {\n if (this.destroyed) return false;\n return this.interactions.respond(interactionId, response);\n }\n\n async retry(messageId: string): Promise<boolean> {\n const item = this.state.items.find((i): i is Message => i.kind === 'message' && i.id === messageId);\n if (!item || item.status !== 'failed' || !item.idempotencyKey || this.destroyed) return false;\n this.dropPending(messageId);\n this.pending.set(messageId, { frame: this.frameFor(item), attempts: 0, gen: -1, ackTimer: null }); // stored key, never a new one\n this.setMessage(messageId, { status: 'sending' });\n if (!(await this.ensureSession())) {\n this.dropPending(messageId);\n this.setMessage(messageId, { status: 'failed' });\n return false;\n }\n this.transmit(messageId);\n return true;\n }\n\n newSession(opts: { keepHistory?: boolean } = {}): Promise<boolean> {\n if (this.destroyed) return Promise.resolve(false);\n // A send already provisioning the first session satisfies a concurrent New chat.\n if (!this.sessionId && this.ensureP) return this.ensureP.then((sid) => sid !== null);\n return this.serialize(async () => {\n if (this.destroyed) return false;\n if (this.sessionId) this.endSession('new_session');\n if (opts.keepHistory === false) this.patch({ items: [] });\n if (this.serverMode) {\n this.wantNewServerSession = true;\n return (await this.openServerSession()) !== null;\n }\n try {\n const created = await this.http.createSession(this.opts.agentId, getVisitorId(this.store));\n if (this.destroyed) return false;\n this.adopt(created.id, null, 'keep');\n return true;\n } catch (e) {\n this.fail(e, false);\n return false;\n }\n });\n }\n\n subscribe(listener: (state: ChatState) => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n getState(): ChatState { return this.state; }\n\n resolveUrl(path: string): string { return this.http.resolveUrl(path); }\n\n destroy(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n this.sessionGeneration += 1;\n this.conn?.stop();\n this.conn = null;\n this.timers.forEach(clearTimeout);\n this.timers.clear();\n this.pending.forEach((e) => { if (e.ackTimer) clearTimeout(e.ackTimer); });\n this.pending.clear();\n if (this.awaitingTimer) clearTimeout(this.awaitingTimer);\n this.interactions.reset();\n this.sessionId = null;\n this.latestToken = null;\n this.switchTo = null;\n this.state = emptyState(); // drops every in-memory item; listeners are not notified\n this.listeners.clear();\n }\n\n // ---------- sessions ----------\n\n private ensureSession(): Promise<string | null> {\n if (this.ensureP) return this.ensureP;\n this.ensureP = this.serialize(async () => {\n if (this.destroyed) return null;\n if (this.sessionId) return this.sessionId;\n return this.serverMode ? this.openServerSession() : this.openAnonymousSession();\n }).finally(() => { this.ensureP = null; });\n return this.ensureP;\n }\n\n private async openAnonymousSession(): Promise<string | null> {\n try {\n const visitor = getVisitorId(this.store);\n const boot = await this.http.bootstrap(this.opts.agentId, visitor);\n if (this.destroyed) return null;\n this.patch({ agent: { agentId: this.opts.agentId, name: boot.agent?.name ?? '' } });\n if (boot.session?.id && boot.session.status === 'active') {\n this.adopt(boot.session.id, boot, 'append');\n return this.sessionId;\n }\n const created = await this.http.createSession(this.opts.agentId, visitor);\n if (this.destroyed) return null;\n this.adopt(created.id, null, 'keep');\n return this.sessionId;\n } catch (e) {\n this.fail(e, false);\n return null;\n }\n }\n\n private async openServerSession(given?: ServerToken): Promise<string | null> {\n const generation = this.sessionGeneration;\n try {\n let first = given ? this.accept(given) : await this.serverToken(generation);\n this.assertCurrent(generation);\n this.latestToken = first.token;\n let snap: Snapshot;\n try { snap = await this.http.snapshot(first.sessionId, first.token); }\n catch (e) {\n this.assertCurrent(generation);\n if (!(e instanceof ChatRequestError) || e.error.code !== 'invalid_token') throw e;\n first = await this.serverToken(generation);\n this.assertCurrent(generation);\n this.latestToken = first.token;\n snap = await this.http.snapshot(first.sessionId, first.token);\n }\n this.assertCurrent(generation);\n this.adopt(first.sessionId, snap, this.state.items.length ? 'append' : 'replace', first);\n return this.sessionId;\n } catch (e) {\n if (this.isCurrent(generation)) this.fail(e, true);\n return null;\n }\n }\n\n private async serverToken(generation = this.sessionGeneration): Promise<ServerToken> {\n this.assertCurrent(generation);\n if (this.opts.auth?.mode !== 'server') throw new Error('not server mode');\n let t: ServerToken;\n const fresh = this.wantNewServerSession;\n this.wantNewServerSession = false;\n try { t = await (fresh ? this.opts.auth.getToken({ newSession: true }) : this.opts.auth.getToken()); }\n catch { throw new ChatRequestError(toChatError('token_failed', 'getToken failed'), 0); }\n this.assertCurrent(generation);\n try { return this.accept(t); }\n catch (e) { if (this.isCurrent(generation)) this.fail(e, false); throw e; }\n }\n\n private accept(t: ServerToken): ServerToken {\n this.checkWsUrl(t.wsUrl);\n return { ...t, expiresAt: normalizeExpiry(t.expiresAt) };\n }\n\n // wss: only (ws: for localhost during development); anything else is a token failure.\n private checkWsUrl(url: string): void {\n let u: URL | null = null;\n try { u = new URL(url); } catch { /* invalid */ }\n const local = u?.hostname === 'localhost' || u?.hostname === '127.0.0.1';\n if (u && (u.protocol === 'wss:' || (u.protocol === 'ws:' && local))) return;\n const error = toChatError('token_failed', 'The chat stream URL must use wss://');\n throw new ChatRequestError(error, 0);\n }\n\n private isCurrent(generation: number, sessionId?: string): boolean {\n return !this.destroyed && this.sessionGeneration === generation &&\n (sessionId === undefined || this.sessionId === sessionId);\n }\n\n private assertCurrent(generation: number, sessionId?: string): void {\n if (!this.isCurrent(generation, sessionId)) throw new ChatRequestError(toChatError('session_closed'), 0);\n }\n\n /** Bind to a session; `firstToken` lets server mode reuse the token it just fetched. */\n private adopt(sessionId: string, snapshot: Snapshot | null, merge: 'replace' | 'append' | 'keep', firstToken?: ServerToken, allowInitialReplacement = true): void {\n if (this.sessionId === sessionId && this.conn) return; // already bound: never open a second socket\n this.conn?.stop();\n this.conn = null;\n this.sessionId = sessionId;\n const generation = ++this.sessionGeneration;\n if (!this.serverMode) this.store.set(sessionHintKey(this.opts.agentId), sessionId);\n if (snapshot) this.applySnapshot(snapshot, merge);\n let reuse = firstToken ?? null;\n const visitor = this.serverMode ? null : getVisitorId(this.store);\n let initialMint = true;\n let replaceInitialSession = false;\n const mint = async (): Promise<MintedToken> => {\n this.assertCurrent(generation, sessionId);\n if (reuse) { const t = reuse; reuse = null; this.latestToken = t.token; return t; }\n if (this.serverMode) {\n const t = await this.serverToken(generation);\n this.assertCurrent(generation, sessionId);\n if (t.sessionId !== sessionId) { // the host's backend moved this user to another session\n this.switchTo = t;\n throw new ChatRequestError(toChatError('session_closed'), 0);\n }\n this.latestToken = t.token;\n return t;\n }\n const firstMint = initialMint;\n initialMint = false;\n let t: MintedToken;\n try { t = await this.http.mintPublicToken(sessionId); }\n catch (e) {\n replaceInitialSession = firstMint && allowInitialReplacement && this.isCurrent(generation, sessionId) &&\n e instanceof ChatRequestError && e.status === 404 && e.error.code === 'session_not_found' &&\n [...this.pending.values()].every((entry) => entry.gen === -1);\n throw e;\n }\n this.assertCurrent(generation, sessionId);\n try { this.checkWsUrl(t.wsUrl); }\n catch (e) { this.fail(e, false); throw e; }\n this.latestToken = t.token;\n return t;\n };\n this.conn = new StreamConnection({\n mint, sdkVersion: SDK_VERSION, page: this.page, random: this.opts.random, WebSocketImpl: this.opts.WebSocketImpl,\n onFrame: (env) => this.onFrame(env),\n onStatus: (status) => this.patch({ status, ...(status === 'open' ? { error: null } : {}) }),\n onOpen: () => this.onOpen(),\n onReconnected: () => void this.recover(),\n onError: (error) => this.patch({ error }),\n onClosed: (reason) => {\n if (!this.isCurrent(generation, sessionId)) return;\n if (replaceInitialSession && visitor && reason === 'session_not_found') {\n replaceInitialSession = false;\n void this.serialize(() => this.replaceBeforeFirstWrite(generation, sessionId, visitor));\n return;\n }\n const next = this.switchTo;\n this.switchTo = null;\n this.endSession(reason);\n if (next) void this.serialize(() => this.openServerSession(next));\n },\n });\n this.conn.start();\n }\n\n /** An initial mint can lose to a sibling tab before this tab has written anything. */\n private async replaceBeforeFirstWrite(generation: number, predecessor: string, visitor: string): Promise<void> {\n if (!this.isCurrent(generation, predecessor)) return;\n try {\n const boot = await this.http.bootstrap(this.opts.agentId, visitor);\n if (!this.isCurrent(generation, predecessor)) return;\n const session = boot?.session;\n const identity = session as unknown as Record<string, unknown> | null;\n const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n if (boot?.agent?.agent_uuid !== this.opts.agentId || !Array.isArray(boot.messages) ||\n !session || typeof session.id !== 'string' || !uuidPattern.test(session.id) ||\n session.id === predecessor || session.status !== 'active' ||\n (session.mode !== 'ai' && session.mode !== 'support') ||\n (identity && 'customer_id' in identity && identity.customer_id !== visitor) ||\n (identity && 'agent_uuid' in identity && identity.agent_uuid !== this.opts.agentId) ||\n [...this.pending.values()].some((entry) => entry.gen !== -1)) {\n this.endSession('session_not_found');\n return;\n }\n // Keep the original pending frames and forbid another replacement on its initial mint.\n this.adopt(session.id, boot, 'append', undefined, false);\n } catch {\n if (this.isCurrent(generation, predecessor)) this.endSession('session_not_found');\n }\n }\n\n // Every socket that becomes current (first open, reconnect, rotation): resend what is unacked.\n private onOpen(): void {\n this.openGen += 1;\n this.seen = [];\n this.seenSet.clear();\n for (const id of [...this.pending.keys()]) this.write(id);\n this.interactions.onConnectionOpen();\n }\n\n private async recover(): Promise<void> {\n const sid = this.sessionId;\n const generation = this.sessionGeneration;\n const snap = await this.fetchSnapshot();\n if (snap && sid && this.isCurrent(generation, sid)) this.applySnapshot(snap, 'reconcile');\n }\n\n private async fetchSnapshot(): Promise<Snapshot | null> {\n if (this.destroyed) return null;\n const sid = this.sessionId;\n const generation = this.sessionGeneration;\n if (!sid) return null;\n try {\n try {\n const snapshot = await this.http.snapshot(sid, this.latestToken ?? (await this.mintFresh(sid)));\n return this.isCurrent(generation, sid) ? snapshot : null;\n } catch (e) {\n this.assertCurrent(generation, sid);\n if (!(e instanceof ChatRequestError) || e.error.code !== 'invalid_token') throw e;\n const snapshot = await this.http.snapshot(sid, await this.mintFresh(sid)); // mint once, retry once\n return this.isCurrent(generation, sid) ? snapshot : null;\n }\n } catch (e) {\n if (e instanceof ChatRequestError && e.error.code === 'session_not_found') {\n if (!this.isCurrent(generation, sid)) return null;\n this.endSession('session_closed'); // not an error to show: a sibling tab may have replaced it\n if (!this.serverMode) void this.readoptAfterReplacement();\n }\n return null;\n }\n }\n\n private async mintFresh(sessionId: string): Promise<string> {\n const generation = this.sessionGeneration;\n this.assertCurrent(generation, sessionId);\n if (this.serverMode) {\n const t = await this.serverToken(generation);\n this.assertCurrent(generation, sessionId);\n this.latestToken = t.token;\n return t.token;\n }\n const t = await this.http.mintPublicToken(sessionId);\n this.assertCurrent(generation, sessionId);\n this.checkWsUrl(t.wsUrl);\n this.latestToken = t.token;\n return t.token;\n }\n\n private async readoptAfterReplacement(): Promise<void> {\n try {\n const boot = await this.http.bootstrap(this.opts.agentId, getVisitorId(this.store));\n if (!this.destroyed && !this.sessionId && boot.session?.id && boot.session.status === 'active') {\n this.adopt(boot.session.id, boot, 'append');\n }\n } catch { /* stays closed; next send re-bootstraps */ }\n }\n\n private endSession(reason: string): void {\n if (this.destroyed) return;\n this.sessionGeneration += 1;\n this.conn?.stop();\n this.conn = null;\n this.sessionId = null;\n this.latestToken = null;\n if (!this.serverMode) this.store.remove(sessionHintKey(this.opts.agentId));\n this.interactions.reset();\n this.pending.forEach((e) => { if (e.ackTimer) clearTimeout(e.ackTimer); });\n this.pending.clear();\n // Every send still in flight has an unknown outcome: failed, and retry() reuses its key.\n const settled = this.state.items.map((i) => (i.kind === 'message' && i.status === 'sending' ? { ...i, status: 'failed' as const } : i));\n const last = settled[settled.length - 1];\n const divider: Divider = { kind: 'divider', id: uuid(), reason: 'session_ended' };\n this.setAwaiting(false);\n this.patch({\n status: 'closed', mode: 'ai',\n items: settled.length && last?.kind !== 'divider' ? [...settled, divider] : settled,\n ...(QUIET_END_REASONS.has(reason) ? {} : { error: toChatError(reason) }),\n });\n }\n\n // ---------- frames ----------\n\n private onFrame(env: WireEnvelope): void {\n if (this.destroyed) return;\n if (env.event_id !== undefined) {\n const key = String(env.event_id);\n if (this.seenSet.has(key)) return;\n this.seenSet.add(key);\n this.seen.push(key);\n if (this.seen.length > SEEN_EVENT_CAP) this.seenSet.delete(this.seen.shift()!);\n }\n const p = env.payload;\n switch (env.type) {\n case 'ws_write_result':\n if (!this.interactions.handleWriteResult(p as unknown as WriteResult)) this.onWriteResult(p as unknown as WriteResult);\n return;\n case 'message_received': {\n if (p.type === 'interaction') return;\n const msg = readWireMessage(p);\n if (!msg) return;\n if (msg.role === 'user') this.onUserEcho(msg.id, msg.content, msg.created_at, typeof p.message_id === 'string' ? p.message_id : undefined);\n else this.appendRemote(msg.id, msg.role, msg.content, msg.created_at);\n return;\n }\n case 'operator_message': {\n const msg = readWireMessage({ ...p, role: 'operator' });\n if (msg) this.appendRemote(msg.id, 'operator', msg.content, msg.created_at);\n return;\n }\n case 'mode_changed':\n if (p.to === 'support') this.setMode('human');\n else if (p.to === 'ai') this.setMode('ai');\n return;\n case 'takeover_started': this.setMode('human'); return;\n case 'takeover_ended': this.setMode('ai'); return;\n case 'interaction_published':\n case 'interaction_updated':\n case 'interaction_closed':\n if (this.interactions.applyEvent(env) && env.type === 'interaction_published') this.setAwaiting(false);\n this.patch({});\n return;\n case 'turn_result':\n if (p.state === 'failed' || p.state === 'error') {\n this.setAwaiting(false);\n this.patch({ error: { code: 'unknown', message: 'The assistant could not reply', retryable: true } });\n }\n return;\n case 'session_closed':\n case 'session_dormant':\n this.endSession(env.type);\n return;\n default:\n return;\n }\n }\n\n private onWriteResult(r: WriteResult): void {\n const id = r.message_id;\n if (!id) return;\n const entry = this.pending.get(id);\n if (!entry) return;\n if (entry.ackTimer) { clearTimeout(entry.ackTimer); entry.ackTimer = null; }\n if (r.state === 'accepted' || r.state === 'merged' || r.state === 'done') {\n this.pending.delete(id);\n this.setMessage(id, { status: 'sent' });\n this.setAwaiting(true);\n return;\n }\n if (r.state === 'busy' && entry.attempts < BUSY_DELAYS_MS.length) {\n const delay = BUSY_DELAYS_MS[entry.attempts]!;\n entry.attempts += 1;\n this.later(delay, () => {\n if (this.pending.get(id) !== entry) return;\n entry.gen = -1;\n this.transmit(id);\n });\n return;\n }\n this.pending.delete(id);\n this.setMessage(id, { status: 'failed' });\n this.patch({ error: toChatError(r.error, r.error) });\n }\n\n /** Our own message comes back as a user echo: adopt it (by client message_id, else by content on an older engine). */\n private onUserEcho(serverId: string, content: string, createdAt?: string, clientId?: string): void {\n const items = this.state.items;\n if (items.some((i) => i.kind === 'message' && i.serverId === serverId)) return;\n const own = clientId\n ? items.findIndex((i) => i.kind === 'message' && i.role === 'user' && i.id === clientId)\n : items.findIndex((i) => i.kind === 'message' && i.role === 'user' && !i.serverId && i.status !== 'failed' && i.content === content);\n if (own >= 0) {\n const next = items.slice();\n const mine = next[own] as Message;\n next[own] = { ...mine, serverId, status: 'sent' };\n this.dropPending(mine.id);\n this.patch({ items: next });\n return;\n }\n this.appendRemote(serverId, 'user', content, createdAt);\n }\n\n private appendRemote(serverId: string, wireRole: string, content: string, createdAt?: string): void {\n const role = ROLE_MAP[wireRole];\n if (!role) return;\n if (this.state.items.some((i) => i.kind === 'message' && i.serverId === serverId)) return;\n const item: Message = { kind: 'message', id: `srv:${serverId}`, serverId, role, content,\n createdAt: createdAt ?? new Date().toISOString(), status: 'sent' };\n this.patch({ items: [...this.state.items, item] });\n if (role !== 'user') this.setAwaiting(false);\n }\n\n // ---------- snapshot → items ----------\n\n private applySnapshot(snapshot: Snapshot, merge: 'replace' | 'append' | 'keep' | 'reconcile'): void {\n if (this.destroyed) return;\n const incoming: TranscriptItem[] = [];\n const clientIds = new Map<string, string>(); // serverId -> client message_id, when the snapshot carries it\n for (const raw of snapshot.messages ?? []) {\n const offer = readInteraction(raw);\n if (offer) { incoming.push({ kind: 'interaction', id: offer.interaction_id, interaction: offer }); continue; }\n const m = readWireMessage(raw);\n const role = m ? ROLE_MAP[m.role] : undefined;\n if (m && role) {\n incoming.push({ kind: 'message', id: `srv:${m.id}`, serverId: m.id, role, content: m.content,\n createdAt: m.created_at ?? new Date().toISOString(), status: 'sent' });\n const cid = (raw as Record<string, unknown>).message_id;\n if (typeof cid === 'string') clientIds.set(m.id, cid);\n }\n }\n let items = this.state.items;\n if (merge === 'replace') items = incoming;\n else if (merge === 'append') {\n // New session history goes after what is shown (endSession already added the divider)\n // but before this tab's still-unsent messages, which belong to the new session.\n let cut = items.length;\n while (cut > 0) {\n const i = items[cut - 1]!;\n if (i.kind === 'message' && i.role === 'user' && i.status === 'sending' && !i.serverId) cut -= 1;\n else break;\n }\n items = [...items.slice(0, cut), ...incoming, ...items.slice(cut)];\n } else if (merge === 'reconcile') {\n const known = new Set(items.flatMap((i) => (i.kind === 'message' ? [i.serverId] : i.kind === 'interaction' ? [i.id] : [])));\n for (const item of incoming) {\n const key = item.kind === 'message' ? item.serverId : item.id;\n if (item.kind === 'message' && item.role === 'user' && !known.has(key)) {\n const cid = clientIds.get(item.serverId!);\n const own = items.findIndex((i) => i.kind === 'message' && i.role === 'user' && !i.serverId &&\n (cid ? i.id === cid : i.content === item.content));\n if (own >= 0) {\n const mine = items[own] as Message;\n items = items.slice();\n items[own] = { ...mine, serverId: item.serverId, status: 'sent' };\n this.dropPending(mine.id);\n known.add(key);\n continue;\n }\n }\n if (!known.has(key)) { items = [...items, item]; known.add(key); }\n }\n }\n const session = snapshot.session;\n this.patch({ items, ...(session ? { mode: session.mode === 'support' ? 'human' : 'ai' } : {}) });\n this.interactions.applySnapshot(snapshot);\n const last = items.filter((i) => i.kind !== 'divider').at(-1);\n if (last && !(last.kind === 'message' && last.role === 'user')) this.setAwaiting(false);\n this.patch({});\n }\n\n // ---------- sends ----------\n\n private frameFor(m: Message): Record<string, unknown> {\n return { type: 'message', content: m.content, message_id: m.id, idempotency_key: m.idempotencyKey,\n supported_interactions: SUPPORTED_INTERACTIONS };\n }\n\n private transmit(id: string): void {\n this.write(id); // when the socket is not open the entry waits in `pending`; onOpen() writes it\n }\n\n // Write once per socket generation; an ack timer starts with every write.\n private write(id: string): void {\n const entry = this.pending.get(id);\n if (!entry || !this.conn?.isOpen || entry.gen === this.openGen) return;\n if (!this.conn.send(entry.frame)) return;\n entry.gen = this.openGen;\n if (entry.ackTimer) clearTimeout(entry.ackTimer);\n entry.ackTimer = setTimeout(() => void this.onAckTimeout(id), SEND_ACK_TIMEOUT_MS);\n }\n\n // No ack within 15 s: reconcile with the server; if the message is still unconfirmed, it failed (retry reuses the key).\n private async onAckTimeout(id: string): Promise<void> {\n const entry = this.pending.get(id);\n if (!entry || this.destroyed) return;\n entry.ackTimer = null;\n if (!this.conn?.isOpen) return; // a reopen will resend and re-arm\n const generation = this.openGen;\n await this.recover();\n if (this.destroyed || this.pending.get(id) !== entry || !this.conn?.isOpen || generation !== this.openGen) return;\n this.dropPending(id);\n this.setMessage(id, { status: 'failed' });\n this.patch({ error: toChatError('network', 'The message could not be confirmed') });\n }\n\n private dropPending(id: string): void {\n const entry = this.pending.get(id);\n if (entry?.ackTimer) clearTimeout(entry.ackTimer);\n this.pending.delete(id);\n }\n\n // ---------- helpers ----------\n\n private setMode(mode: 'ai' | 'human'): void {\n this.setAwaiting(false);\n this.patch({ mode });\n }\n\n private setAwaiting(on: boolean): void {\n if (this.awaitingTimer) { clearTimeout(this.awaitingTimer); this.awaitingTimer = null; }\n if (on) this.awaitingTimer = setTimeout(() => { this.awaitingTimer = null; this.patch({ awaitingReply: false }); }, AWAITING_REPLY_TIMEOUT_MS);\n if (this.state.awaitingReply !== on) this.patch({ awaitingReply: on });\n }\n\n private setMessage(id: string, change: Partial<Message>): void {\n this.patch({ items: this.state.items.map((i) => (i.kind === 'message' && i.id === id ? { ...i, ...change } : i)) });\n }\n\n private fail(e: unknown, terminal: boolean): void {\n const error = e instanceof ChatRequestError ? e.error : toChatError('network', 'Network error');\n this.patch({ error, ...(terminal || !error.retryable ? { status: 'closed' as const } : {}) });\n }\n\n private later(ms: number, fn: () => void): void {\n const t = setTimeout(() => { this.timers.delete(t); if (!this.destroyed) fn(); }, ms);\n this.timers.add(t);\n }\n\n private patch(change: Partial<ChatState>): void {\n if (this.destroyed) return;\n const next: ChatState = {\n ...this.state, ...change,\n activeInteraction: this.interactions.active,\n interactionPending: this.interactions.pending,\n };\n const changed = (Object.keys(next) as (keyof ChatState)[]).some((k) => next[k] !== this.state[k]);\n if (!changed) return;\n this.state = next;\n this.listeners.forEach((l) => l(next));\n }\n}\n\nexport function createChatClient(options: ChatClientOptions): ChatClient {\n return new Client(options);\n}\n","export interface ChatTheme {\n colors?: Partial<Record<'primary' | 'background' | 'surface' | 'text' | 'userBubble' | 'assistantBubble', string>>;\n radius?: 'none' | 'sm' | 'md' | 'lg' | 'full' | number;\n mode?: 'light' | 'dark';\n}\nexport interface Variants { buttons?: 'chips' | 'list'; carousel?: 'slider' | 'list' }\nconst LIGHT = { primary: '#4f46e5', background: '#ffffff', surface: '#f4f4f5', text: '#18181b', userBubble: '#4f46e5', assistantBubble: '#f4f4f5' };\nconst DARK = { primary: '#6366f1', background: '#0a0a12', surface: '#1c1c27', text: '#f4f4f5', userBubble: '#6366f1', assistantBubble: '#1f1f2b' };\nconst RADII = { none: '0px', sm: '6px', md: '10px', lg: '16px', full: '9999px' };\nconst VAR = { primary: '--osvi-color-primary', background: '--osvi-color-background', surface: '--osvi-color-surface', text: '--osvi-color-text', userBubble: '--osvi-color-user-bubble', assistantBubble: '--osvi-color-assistant-bubble' };\nexport const cssVar = (key: keyof typeof LIGHT): string => `var(${VAR[key]}, ${LIGHT[key]})`;\nexport function themeVariables(theme: ChatTheme | undefined): Record<string, string> {\n const colors = { ...(theme?.mode === 'dark' ? DARK : LIGHT), ...theme?.colors };\n // The user's bubble is brand-coloured unless the customer picks it separately.\n if (!theme?.colors?.userBubble && theme?.colors?.primary) colors.userBubble = theme.colors.primary;\n const out: Record<string, string> = {};\n for (const key of Object.keys(VAR) as (keyof typeof LIGHT)[]) out[VAR[key]] = colors[key];\n const radius = theme?.radius ?? 'md';\n out['--osvi-radius'] = typeof radius === 'number' ? `${radius}px` : RADII[radius];\n return out;\n}\nexport function explicitThemeVariables(theme: ChatTheme | undefined): Record<string, string> {\n if (!theme) return {};\n if (theme.mode) return themeVariables(theme);\n const full = themeVariables(theme), out: Record<string, string> = {};\n for (const key of Object.keys(theme.colors ?? {}) as (keyof typeof LIGHT)[]) out[VAR[key]] = full[VAR[key]]!;\n if (theme.radius !== undefined) out['--osvi-radius'] = full['--osvi-radius']!;\n return out;\n}\nconst applied = new WeakMap<HTMLElement, string[]>();\nexport function applyTheme(host: HTMLElement, theme: ChatTheme | undefined): void {\n for (const key of applied.get(host) ?? []) host.style.removeProperty(key);\n const variables = explicitThemeVariables(theme);\n for (const [key, value] of Object.entries(variables)) host.style.setProperty(key, value);\n applied.set(host, Object.keys(variables));\n}\n","export const DEFAULT_STRINGS = {\nplaceholder: 'Type your message…', send: 'Send', typing: 'Typing…', humanJoined: 'A team member has joined', chooseOption: 'Choose an option to continue.', typeAnswer: 'Type your answer below, then press Send.', sending: 'Sending your response…', pausedForHuman: 'Choices are paused while a team member is connected.', sendFailed: 'Message not sent.', retry: 'Retry', sessionEnded: 'Conversation ended', reconnecting: 'Reconnecting…', offline: 'You are offline. We will reconnect automatically.', unavailable: 'This chat is unavailable.', originBlocked: 'This chat is not enabled for this website.', rateLimited: 'Too many requests. Please try again in a few minutes.', tryAgain: 'Try again', closeChat: 'Close chat', poweredBy: 'Powered by Osvi AI', newChat: 'New chat', emptyState: 'Send a message to start chatting.', defaultTitle: 'Chat',\n};\nexport type ChatStrings = { [K in keyof typeof DEFAULT_STRINGS]: string };\n","import type { ChatTheme } from '../theme';\nconst warned = new Set<string>();\nfunction warnOnce(name: string, message: string) { if (!warned.has(name)) { warned.add(name); console.warn(`[osvi-chat] ${message}`); } }\nexport function oneOf<T extends string>(value: string | null | undefined, allowed: readonly T[]): T | undefined { return value != null && (allowed as readonly string[]).includes(value) ? value as T : undefined; }\nexport function parseRadius(value: string | null | undefined): ChatTheme['radius'] | undefined {\n if (value == null) return undefined;\n return oneOf(value, ['none', 'sm', 'md', 'lg', 'full'] as const) ?? (/^\\d{1,2}(?:px)?$/.test(value) ? Number(value.replace(/px$/, '')) : undefined);\n}\nexport function safeBaseUrl(value: string | null | undefined): string | undefined {\n if (!value) return undefined;\n try { const u = new URL(value); if (!u.username && !u.password && (u.protocol === 'https:' || u.protocol === 'http:' && ['localhost', '127.0.0.1'].includes(u.hostname))) return value.replace(/\\/+$/, ''); } catch { /* ignored */ }\n warnOnce('base-url', 'ignored an invalid base-url (https required, http only for localhost)'); return undefined;\n}\nexport function safeAvatar(value: string | null | undefined): string | undefined {\n if (!value) return undefined;\n if (/^data:image\\/(png|jpeg|gif|webp);base64,[a-z0-9+/]+={0,2}$/i.test(value)) return value;\n try { const u = new URL(value); if (u.protocol === 'https:' && !u.username && !u.password) return value; } catch { /* ignored */ }\n return undefined;\n}\nexport function parseJsonAttr(name: string, value: string | null | undefined): Record<string, unknown> | undefined {\n if (!value) return undefined;\n try { const parsed: unknown = JSON.parse(value); if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) return parsed as Record<string, unknown>; } catch { /* warn below */ }\n warnOnce(name, `ignored invalid JSON in the ${name} attribute`); return undefined;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>o,n=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,e={HTML:1,SVG:2,MATHML:3},l=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,d=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,f=o=>o?._$litDirective$,r=o=>void 0===o.strings,s=()=>document.createComment(\"\"),v=(o,n,e)=>{const l=o._$AA.parentNode,d=void 0===n?o._$AB:n._$AA;if(void 0===e){const i=l.insertBefore(s(),d),n=l.insertBefore(s(),d);e=new t(i,n,o,o.options)}else{const t=e._$AB.nextSibling,n=e._$AM,c=n!==o;if(c){let t;e._$AQ?.(o),e._$AM=o,void 0!==e._$AP&&(t=o._$AU)!==n._$AU&&e._$AP(t)}if(t!==d||c){let o=e._$AA;for(;o!==t;){const t=i(o).nextSibling;i(l).insertBefore(o,d),o=t}}}return e},u=(o,t,i=o)=>(o._$AI(t,i),o),m={},p=(o,t=m)=>o._$AH=t,M=o=>o._$AH,h=o=>{o._$AR(),o._$AA.remove()},j=o=>{o._$AR()};export{e as TemplateResultType,j as clearPart,M as getCommittedValue,f as getDirectiveClass,v as insertPart,d as isCompiledTemplateResult,c as isDirectiveResult,n as isPrimitive,r as isSingleExpression,l as isTemplateResult,h as removePart,u as setChildPartValue,p as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){const d=l(s),{values:p,keys:a}=this.dt(t,r,c);if(!Array.isArray(d))return this.ut=a,p;const h=this.ut??=[],v=[];let m,y,x=0,j=d.length-1,k=0,w=p.length-1;for(;x<=j&&k<=w;)if(null===d[x])x++;else if(null===d[j])j--;else if(h[x]===a[k])v[k]=o(d[x],p[k]),x++,k++;else if(h[j]===a[w])v[w]=o(d[j],p[w]),j--,w--;else if(h[x]===a[w])v[w]=o(d[x],p[w]),i(s,v[w+1],d[x]),x++,w--;else if(h[j]===a[k])v[k]=o(d[j],p[k]),i(s,d[x],d[j]),j--,k++;else if(void 0===m&&(m=u(a,k,w),y=u(h,x,j)),m.has(h[x]))if(m.has(h[j])){const e=y.get(a[k]),t=void 0!==e?d[e]:null;if(null===t){const e=i(s,d[x]);o(e,p[k]),v[k]=e}else v[k]=o(t,p[k]),i(s,d[x],t),d[e]=null;k++}else n(d[j]),j--;else n(d[x]),x++;for(;k<=w;){const e=i(s,v[w+1]);o(e,p[k]),v[k++]=e}for(;x<=j;){const e=d[x++];null!==e&&n(e)}return this.ut=a,f(s,v),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","export type LinkPart = { text: string } | { href: string; text: string };\nconst URL_RE = /https?:\\/\\/[^\\s<>\"']+/g;\nconst count = (s: string, ch: string) => s.split(ch).length - 1;\nfunction trimUrl(url: string): string {\n for (;;) { const c = url[url.length - 1];\n if (c && '.,!?;:'.includes(c) || c === ')' && count(url, ')') > count(url, '(') || c === ']' && count(url, ']') > count(url, '[')) { url = url.slice(0, -1); continue; } return url; }\n}\nexport function linkify(text: string): LinkPart[] {\n const out: LinkPart[] = []; let last = 0;\n for (const m of text.matchAll(URL_RE)) { const url = trimUrl(m[0]), start = m.index!;\n try { const u = new URL(url); if (!['http:', 'https:'].includes(u.protocol)) continue; } catch { continue; }\n if (start > last) out.push({ text: text.slice(last, start) }); out.push({ href: url, text: url }); last = start + url.length; }\n if (last < text.length) out.push({ text: text.slice(last) }); return out.length ? out : [{ text }];\n}\n","import { html, nothing } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { ChatState } from '../../core';\nimport type { ChatStrings } from '../strings';\nimport type { Variants } from '../theme';\nimport { linkify } from './linkify';\nexport function renderTranscript(state: ChatState, strings: ChatStrings, variants: Variants, baseUrl: string, retry: (id: string) => void) {\n return html`${state.items.length ? repeat(state.items, item => item.id, item => {\n if (item.kind === 'divider') return html`<p class=\"divider\">${strings.sessionEnded}</p>`;\n if (item.kind === 'message') return html`<article class=${`bubble ${item.role}`}>${item.role === 'human' ? html`<small class=\"team\">Team</small>` : nothing}<p>${linkify(item.content).map(p => 'href' in p ? html`<a href=${p.href} target=\"_blank\" rel=\"noopener noreferrer\">${p.text}</a>` : p.text)}</p>${item.role === 'user' && item.status === 'failed' ? html`<span class=\"failed\"><span>${strings.sendFailed}</span><button type=\"button\" @click=${() => retry(item.id)}>${strings.retry}</button></span>` : nothing}</article>`;\n const i = item.interaction, live = i.interaction_id === state.activeInteraction?.interaction_id && i.interaction_status === 'pending';\n const disabled = !live || state.interactionPending || state.mode === 'human';\n switch (i.tool_type) {\n case 'ui_buttons': return html`<osvi-buttons data-live=${live ? 'true' : 'false'} .interaction=${i} .disabled=${disabled} .variant=${variants.buttons ?? 'chips'} base-url=${baseUrl}></osvi-buttons>`;\n case 'ui_carousel': return html`<osvi-carousel data-live=${live ? 'true' : 'false'} .interaction=${i} .disabled=${disabled} .variant=${variants.carousel ?? 'slider'} base-url=${baseUrl}></osvi-carousel>`;\n case 'ui_date_picker': return html`<osvi-date-picker data-live=${live ? 'true' : 'false'} .interaction=${i} .disabled=${disabled} base-url=${baseUrl}></osvi-date-picker>`;\n default: return html`<p>${i.content}</p>`;\n }\n }) : html`<p class=\"empty\">${strings.emptyState}</p>`}${state.awaitingReply ? html`<div class=\"typing\" role=\"img\" aria-label=${strings.typing}><i></i><i></i><i></i></div>` : nothing}`;\n}\n","import{noChange as r,nothing as e}from\"../lit-html.js\";import{directive as i,Directive as t,PartType as n}from\"../directive.js\";import{isSingleExpression as o,setCommittedValue as s}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const l=i(class extends t{constructor(r){if(super(r),r.type!==n.PROPERTY&&r.type!==n.ATTRIBUTE&&r.type!==n.BOOLEAN_ATTRIBUTE)throw Error(\"The `live` directive is not allowed on child or event bindings\");if(!o(r))throw Error(\"`live` bindings can only contain a single expression\")}render(r){return r}update(i,[t]){if(t===r||t===e)return t;const o=i.element,l=i.name;if(i.type===n.PROPERTY){if(t===o[l])return r}else if(i.type===n.BOOLEAN_ATTRIBUTE){if(!!t===o.hasAttribute(l))return r}else if(i.type===n.ATTRIBUTE&&o.getAttribute(l)===t+\"\")return r;return s(i),t}});export{l as live};\n//# sourceMappingURL=live.js.map\n","import { svg } from 'lit';\n\n// Inline icons (no network, no font). Each SVG is decorative; buttons carry their own text label.\nconst stroke = (d: unknown, cls = '') => svg`<svg class=${cls} viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${d}</svg>`;\nexport const chatIcon = stroke(svg`<path d=\"M4 5.5A2.5 2.5 0 0 1 6.5 3h11A2.5 2.5 0 0 1 20 5.5v8a2.5 2.5 0 0 1-2.5 2.5H10l-4.2 3.6c-.5.4-1.3.1-1.3-.6V16A2.5 2.5 0 0 1 4 13.5z\"/><path d=\"M8.5 8.5h7M8.5 11.5h4\"/>`);\nexport const newChatIcon = stroke(svg`<path d=\"M4 5.5A2.5 2.5 0 0 1 6.5 3h11A2.5 2.5 0 0 1 20 5.5v8a2.5 2.5 0 0 1-2.5 2.5H10l-4.2 3.6c-.5.4-1.3.1-1.3-.6V16A2.5 2.5 0 0 1 4 13.5z\"/><path d=\"M12 6.5v6M9 9.5h6\"/>`);\nexport const closeIcon = stroke(svg`<path d=\"M6 6l12 12M18 6L6 18\"/>`);\nexport const launcherChatIcon = stroke(svg`<path d=\"M4 5.5A2.5 2.5 0 0 1 6.5 3h11A2.5 2.5 0 0 1 20 5.5v8a2.5 2.5 0 0 1-2.5 2.5H10l-4.2 3.6c-.5.4-1.3.1-1.3-.6V16A2.5 2.5 0 0 1 4 13.5z\"/><path d=\"M8.5 8.5h7M8.5 11.5h4\"/>`, 'chat');\nexport const launcherCloseIcon = stroke(svg`<path d=\"M6 6l12 12M18 6L6 18\"/>`, 'close');\nexport const sendIcon = stroke(svg`<path d=\"M12 19V5M5.5 11.5L12 5l6.5 6.5\"/>`);\nexport const leftIcon = stroke(svg`<path d=\"M15 6l-6 6 6 6\"/>`);\nexport const rightIcon = stroke(svg`<path d=\"M9 6l6 6-6 6\"/>`);\n\n// Osvi AI mark. Ids are scoped by the shadow root each copy renders into.\nexport const osviLogo = svg`<svg viewBox=\"0 0 134 134\" aria-hidden=\"true\" focusable=\"false\"><defs><linearGradient id=\"osvi-g\" x1=\"-36.28\" y1=\"32.2\" x2=\"161.98\" y2=\"93.64\" gradientUnits=\"userSpaceOnUse\"><stop offset=\".304\" stop-color=\"#155DFC\"/><stop offset=\".822\" stop-color=\"#353333\"/></linearGradient><mask id=\"osvi-m\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"-7\" y=\"-6\" width=\"149\" height=\"150\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#0F0F0F\" d=\"M141.385 114.008L141.622 108.411V29.4704L141.385 23.8743C139.964 7.44314 126.224 -5.41602 109.523 -5.41602H25.3094C8.60869 -5.41602 -5.13083 7.44314 -6.55216 23.8743L-6.78906 29.4704V108.411L-6.55216 114.008C-5.13083 130.439 8.60869 143.298 25.3094 143.298H109.523C126.224 143.298 139.964 130.439 141.385 114.008ZM25.3094 102.339C9.55625 102.339 65.7059 83.8874 53.6176 66.6191C42.3654 50.5452 93.7703 32.6852 109.523 32.6852C125.277 32.6852 73.161 54.1172 81.4521 80.9071C86.1899 96.2156 40.944 102.339 25.3094 102.339Z\"/></mask></defs><g mask=\"url(#osvi-m)\"><ellipse cx=\"66.88\" cy=\"66.79\" rx=\"67.22\" ry=\"66.81\" fill=\"url(#osvi-g)\"/></g></svg>`;\n","import { html } from 'lit';\nimport { live } from 'lit/directives/live.js';\nimport type { ChatStrings } from '../strings';\nimport { sendIcon } from '../icons';\nexport interface ComposerOptions { strings: ChatStrings; draft: string; placeholder: string; disabled: boolean; input: (event: Event) => void; send: () => void }\nexport function renderComposer(o: ComposerOptions) {\n return html`<div class=\"composer\"><textarea rows=\"1\" aria-label=\"Message\" placeholder=${o.placeholder} .value=${live(o.draft)} ?disabled=${o.disabled} @input=${(e: Event) => { const ta = e.target as HTMLTextAreaElement; ta.style.height = 'auto'; ta.style.height = `${Math.min(ta.scrollHeight, 120)}px`; o.input(e); }} @keydown=${(e: KeyboardEvent) => { if (e.key === 'Enter' && !e.shiftKey && !e.isComposing && !o.disabled) { e.preventDefault(); o.send(); } }}></textarea><button type=\"button\" class=\"send\" title=${o.strings.send} aria-label=${o.strings.send} ?disabled=${o.disabled || !o.draft.trim()} @click=${o.send}>${sendIcon}<span class=\"sr\">${o.strings.send}</span></button></div>`;\n}\n","import { LitElement, css, html, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { createChatClient, type ChatClient, type ChatState, type InteractionResponse } from '../core';\nimport { applyTheme, type ChatTheme, type Variants } from './theme';\nimport { DEFAULT_STRINGS, type ChatStrings } from './strings';\nimport { oneOf, parseJsonAttr, parseRadius, safeAvatar, safeBaseUrl } from './panel/attrs';\nimport { renderTranscript } from './panel/transcript';\nimport { renderComposer } from './panel/composer';\nimport { closeIcon, newChatIcon, osviLogo } from './icons';\nconst emptyState = (): ChatState => ({ status: 'idle', mode: 'ai', awaitingReply: false, items: [], activeInteraction: null, interactionPending: false, agent: null, error: null });\nconst bool = { fromAttribute: (v: string | null) => v !== 'false' };\nexport class OsviChat extends LitElement {\n static clientFactory = createChatClient;\n static properties = { themeAttribute: { attribute: 'theme' }, stringsAttribute: { attribute: 'strings' } };\n static styles = css`\n :host { --p:var(--osvi-color-primary,#4f46e5); --bg:var(--osvi-color-background,#fff); --surface:var(--osvi-color-surface,#f4f4f5); --text:var(--osvi-color-text,#18181b);\n --ub:var(--osvi-color-user-bubble,var(--p)); --ab:var(--osvi-color-assistant-bubble,var(--surface)); --r:var(--osvi-radius,14px);\n --sub:color-mix(in srgb,var(--text) 58%,var(--bg)); --line:color-mix(in srgb,var(--text) 11%,var(--bg));\n display:flex; flex-direction:column; height:100%; min-height:260px; color:var(--text); background:var(--bg); font-family:inherit; font-size:14px; line-height:1.5; border-radius:var(--r); overflow:hidden; }\n * { box-sizing:border-box; } h2,p { margin:0; }\n button,textarea { font:inherit; color:inherit; } button { cursor:pointer; } button:disabled { cursor:default; opacity:.45; }\n button:focus-visible,textarea:focus-visible,a:focus-visible { outline:3px solid color-mix(in srgb,var(--p) 55%,transparent); outline-offset:2px; }\n .sr { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }\n header { display:flex; align-items:center; gap:12px; padding:14px 12px 14px 16px; border-bottom:1px solid var(--line); }\n .avatar { width:38px; height:38px; border-radius:50%; flex:none; object-fit:cover; display:grid; place-items:center; background:var(--p); color:#fff; font-weight:700; font-size:15px; }\n .heading { flex:1; min-width:0; } h2 { font-size:15px; line-height:1.3; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n .heading p,.heading small { display:block; font-size:12.5px; color:var(--sub); }\n .heading small { color:var(--p); font-weight:600; }\n .icon { width:34px; height:34px; border:0; border-radius:10px; background:transparent; color:var(--sub); display:grid; place-items:center; flex:none; }\n .icon:hover:not(:disabled) { background:var(--surface); color:var(--text); } .icon svg { width:18px; height:18px; }\n .transcript { flex:1; overflow:auto; padding:18px 16px; min-height:0; display:flex; flex-direction:column; gap:10px; }\n .empty { margin:auto; color:var(--sub); text-align:center; }\n .bubble { width:fit-content; max-width:84%; padding:10px 14px; border-radius:var(--r); border-bottom-left-radius:6px; background:var(--ab); overflow-wrap:anywhere; white-space:pre-wrap; }\n .bubble.user { align-self:flex-end; color:#fff; background:var(--ub); border-bottom-left-radius:var(--r); border-bottom-right-radius:6px; }\n .bubble a { color:inherit; } .team { display:block; font-size:11px; font-weight:600; color:var(--p); margin-bottom:2px; }\n .failed { display:flex; align-items:center; gap:8px; font-size:12px; margin-top:6px; } .failed button { border:0; background:rgb(255 255 255/.2); border-radius:8px; padding:2px 8px; }\n .divider { display:flex; align-items:center; gap:10px; color:var(--sub); font-size:12px; } .divider::before,.divider::after { content:\"\"; flex:1; height:1px; background:var(--line); }\n .typing { display:inline-flex; gap:4px; padding:12px 14px; background:var(--ab); border-radius:var(--r); border-bottom-left-radius:6px; width:fit-content; }\n .typing i { width:6px; height:6px; border-radius:50%; background:var(--sub); animation:osvi-dot 1.2s infinite; } .typing i:nth-child(2) { animation-delay:.15s; } .typing i:nth-child(3) { animation-delay:.3s; }\n @keyframes osvi-dot { 0%,60%,100% { opacity:.35; transform:none; } 30% { opacity:1; transform:translateY(-3px); } }\n osvi-buttons,osvi-carousel,osvi-date-picker { display:block; max-width:100%; }\n .status { padding:0 16px; font-size:12.5px; color:var(--sub); display:flex; gap:8px; align-items:center; } .status:empty { display:none; }\n .status button { border:1px solid var(--line); background:var(--bg); border-radius:8px; padding:3px 10px; }\n .composer { margin:10px 12px; display:flex; align-items:flex-end; gap:8px; border:1px solid var(--line); border-radius:18px; padding:6px 6px 6px 14px; background:var(--surface); }\n .composer:focus-within { border-color:var(--p); box-shadow:0 0 0 3px color-mix(in srgb,var(--p) 18%,transparent); }\n textarea { flex:1; min-width:0; border:0; outline:0; background:transparent; resize:none; min-height:24px; max-height:120px; padding:6px 0; field-sizing:content; }\n textarea::placeholder { color:var(--sub); } textarea:focus-visible { outline:0; }\n .send { width:36px; height:36px; border:0; border-radius:50%; background:var(--p); color:#fff; display:grid; place-items:center; flex:none; } .send svg { width:17px; height:17px; }\n footer { padding:0 16px 12px; text-align:center; font-size:11.5px; } footer a { color:var(--sub); text-decoration:none; display:inline-flex; align-items:center; gap:6px; }\n footer a:hover { color:var(--text); } footer svg { width:14px; height:14px; flex:none; }\n @media (prefers-reduced-motion:reduce) { .typing i { animation:none; } }\n `;\n @property({ attribute: 'agent-id' }) agentId = '';\n @property({ attribute: 'base-url' }) baseUrl = '';\n @property({ attribute: false }) client: ChatClient | null = null;\n @property({ attribute: false }) theme: ChatTheme = {};\n @property({ attribute: false }) variants: Variants = {};\n @property({ attribute: false }) strings: Partial<ChatStrings> = {};\n @property({ attribute: 'powered-by', converter: bool }) poweredBy = true;\n @property({ attribute: 'new-chat', converter: bool }) newChat = true;\n @property({ attribute: 'new-chat-history' }) newChatHistory: string | undefined; // 'clear' (default) | 'keep'\n @property({ attribute: false }) header: { title?: string; subtitle?: string; avatarUrl?: string } = {};\n @property({ type: Boolean }) closable = false;\n @property({ attribute: 'header-title' }) headerTitle: string | undefined;\n @property({ attribute: 'header-subtitle' }) headerSubtitle: string | undefined;\n @property({ attribute: 'header-avatar' }) headerAvatar: string | undefined;\n @property({ attribute: 'primary-color' }) primaryColor: string | undefined;\n @property() radius: string | undefined;\n @property() mode: string | undefined;\n @property() buttons: string | undefined;\n @property() carousel: string | undefined;\n declare themeAttribute: string | undefined;\n declare stringsAttribute: string | undefined;\n @state() private chatState = emptyState();\n @state() private draft = '';\n @state() private busy = false;\n @state() private typed: { id: string; placeholder?: string; previousDraft: string } | null = null;\n private ownClient: ChatClient | null = null;\n private boundClient: ChatClient | null = null;\n private ownKey = '';\n private unsubscribe: (() => void) | undefined;\n private generation = 0;\n private followBottom = true;\n private focusedInteraction: string | null = null;\n connectedCallback() { super.connectedCallback(); this.syncClient(); }\n disconnectedCallback() { super.disconnectedCallback(); this.releaseClient(); }\n private releaseClient() {\n ++this.generation; this.unsubscribe?.(); this.unsubscribe = undefined;\n this.boundClient = null; const own = this.ownClient; this.ownClient = null; this.ownKey = '';\n own?.destroy(); this.busy = false; this.typed = null; this.focusedInteraction = null; this.requestUpdate();\n }\n private syncClient() {\n if (!this.isConnected) return;\n if (!this.client && !this.agentId && !this.boundClient) return;\n const key = JSON.stringify([this.agentId, safeBaseUrl(this.baseUrl)]);\n if (this.client ? this.boundClient === this.client && !this.ownClient : this.ownClient && key === this.ownKey) return;\n this.releaseClient(); this.chatState = emptyState();\n if (!this.client && !this.agentId) return;\n const own = !this.client;\n const client = this.client ?? OsviChat.clientFactory({ agentId: this.agentId, baseUrl: safeBaseUrl(this.baseUrl) });\n this.boundClient = client;\n if (own) { this.ownClient = client; this.ownKey = key; }\n const generation = this.generation;\n this.chatState = client.getState(); this.requestUpdate();\n this.unsubscribe = client.subscribe(state => {\n if (this.generation !== generation || this.boundClient !== client) return;\n this.chatState = state; this.requestUpdate();\n if (this.typed && (state.mode === 'human' || state.activeInteraction?.interaction_id !== this.typed.id || state.activeInteraction.interaction_status !== 'pending')) this.restoreDraft();\n });\n if (own) void this.run(() => client.start());\n }\n protected willUpdate() { this.syncClient(); applyTheme(this, this.mergedTheme()); }\n private mergedTheme(): ChatTheme {\n const attr = parseJsonAttr('theme', this.themeAttribute);\n const colors: NonNullable<ChatTheme['colors']> = {};\n const rawColors = attr?.colors;\n if (rawColors && typeof rawColors === 'object' && !Array.isArray(rawColors)) {\n for (const key of ['primary', 'background', 'surface', 'text', 'userBubble', 'assistantBubble'] as const) {\n const value = (rawColors as Record<string, unknown>)[key]; if (typeof value === 'string') colors[key] = value;\n }\n }\n if (typeof this.primaryColor === 'string') colors.primary = this.primaryColor;\n const radius = parseRadius(this.radius) ?? (typeof attr?.radius === 'number' && Number.isInteger(attr.radius) && attr.radius >= 0 && attr.radius <= 99 ? attr.radius : typeof attr?.radius === 'string' ? parseRadius(attr.radius) : undefined);\n const mode = oneOf(this.mode, ['light', 'dark'] as const) ?? oneOf(typeof attr?.mode === 'string' ? attr.mode : undefined, ['light', 'dark'] as const);\n return { ...this.theme, colors: { ...this.theme?.colors, ...colors }, ...(radius === undefined ? {} : { radius }), ...(mode === undefined ? {} : { mode }) };\n }\n private get labels(): ChatStrings {\n const out = { ...DEFAULT_STRINGS };\n for (const source of [this.strings, parseJsonAttr('strings', this.stringsAttribute)]) {\n for (const key of Object.keys(DEFAULT_STRINGS) as (keyof ChatStrings)[]) if (typeof source?.[key] === 'string') out[key] = source[key] as string;\n }\n return out;\n }\n private get blocked() {\n const s = this.chatState;\n return !this.boundClient || this.busy || s.status === 'connecting' || s.status === 'closed' && !!s.error && !s.error.retryable || s.mode === 'ai' && (s.interactionPending || s.activeInteraction?.interaction_status === 'pending' && !this.typed);\n }\n private get sessionBusy() { return this.busy || this.chatState.status === 'connecting' || this.chatState.interactionPending || this.chatState.items.some(i => i.kind === 'message' && i.status === 'sending'); }\n private async run(action: () => unknown): Promise<void> {\n if (this.busy || !this.boundClient) return;\n const generation = this.generation; this.busy = true; this.requestUpdate();\n try { await action(); } catch { /* Client state owns errors; prevent unhandled rejections from host callbacks. */ }\n finally { if (this.generation === generation) { this.busy = false; this.requestUpdate(); } }\n }\n private restoreDraft() { if (this.typed) { this.draft = this.typed.previousDraft; this.typed = null; this.requestUpdate(); } }\n private send = () => {\n if (this.blocked || !this.draft.trim() || !this.boundClient) return;\n const client = this.boundClient, value = this.draft.trim(), typed = this.typed;\n this.draft = ''; if (typed) this.restoreDraft(); this.requestUpdate();\n const box = this.renderRoot.querySelector<HTMLTextAreaElement>('textarea'); if (box) box.style.height = '';\n void this.run(() => typed ? client.respond(typed.id, { kind: 'text', value }) : client.send(value));\n };\n private respond = (event: CustomEvent<{ interactionId: string; response: InteractionResponse }>) => {\n const d = event.detail, s = this.chatState;\n if (!d || this.busy || s.mode !== 'ai' || s.interactionPending || s.activeInteraction?.interaction_status !== 'pending' || d.interactionId !== s.activeInteraction.interaction_id) return;\n event.stopPropagation(); const client = this.boundClient; if (client) void this.run(() => client.respond(d.interactionId, d.response));\n };\n private requestInput = (event: CustomEvent<{ interactionId: string; placeholder?: string }>) => {\n const d = event.detail, s = this.chatState;\n if (!d || this.busy || s.mode !== 'ai' || s.interactionPending || s.activeInteraction?.interaction_status !== 'pending' || d.interactionId !== s.activeInteraction.interaction_id) return;\n event.stopPropagation();\n this.typed = { id: d.interactionId, placeholder: typeof d.placeholder === 'string' ? d.placeholder : undefined, previousDraft: this.typed?.previousDraft ?? this.draft };\n this.draft = ''; this.requestUpdate(); void this.updateComplete.then(() => this.renderRoot.querySelector('textarea')?.focus());\n };\n async focusActiveInteraction(): Promise<void> {\n await this.updateComplete;\n if (!this.isConnected || this.chatState.activeInteraction?.interaction_status !== 'pending') return;\n const tool = this.renderRoot.querySelector<LitElement>('[data-live=\"true\"]');\n if (!tool) return; const id = this.chatState.activeInteraction.interaction_id;\n await tool.updateComplete;\n if (!this.isConnected || this.chatState.activeInteraction?.interaction_id !== id) return;\n tool.shadowRoot?.querySelector<HTMLElement>('button:not(:disabled),input:not(:disabled),select:not(:disabled),textarea:not(:disabled),[tabindex=\"0\"]')?.focus();\n }\n protected updated() {\n const log = this.renderRoot.querySelector<HTMLElement>('.transcript');\n if (log && this.followBottom) log.scrollTop = log.scrollHeight;\n const id = this.chatState.activeInteraction?.interaction_status === 'pending' ? this.chatState.activeInteraction.interaction_id : null;\n if (id !== this.focusedInteraction) {\n this.focusedInteraction = id;\n if (id && this.isConnected && !this.hidden && document.visibilityState !== 'hidden') void this.focusActiveInteraction();\n }\n }\n private statusText(strings: ChatStrings): string {\n const s = this.chatState;\n if (s.error?.code === 'origin_not_allowed') return strings.originBlocked;\n if (s.error && ['agent_inactive', 'agent_archived', 'agent_not_found'].includes(s.error.code)) return strings.unavailable;\n if (s.error?.code === 'rate_limited') return strings.rateLimited;\n if (s.error?.code === 'token_failed') return s.error.message;\n if (s.status === 'recovering') return strings.reconnecting;\n if (s.status === 'offline') return strings.offline;\n if (s.interactionPending || this.busy && this.typed) return strings.sending;\n if (s.activeInteraction?.interaction_status === 'pending') return s.mode === 'human' ? strings.pausedForHuman : this.typed ? strings.typeAnswer : strings.chooseOption;\n if (s.status === 'closed') return strings.sessionEnded;\n return '';\n }\n render() {\n const strings = this.labels, s = this.chatState, client = this.boundClient;\n const avatar = safeAvatar(this.headerAvatar ?? this.header.avatarUrl);\n const variants: Variants = { ...this.variants, ...(oneOf(this.buttons, ['chips', 'list'] as const) ? { buttons: oneOf(this.buttons, ['chips', 'list'] as const) } : {}), ...(oneOf(this.carousel, ['slider', 'list'] as const) ? { carousel: oneOf(this.carousel, ['slider', 'list'] as const) } : {}) };\n const title = this.headerTitle ?? this.header.title ?? s.agent?.name ?? strings.defaultTitle;\n return html`<header>${avatar ? html`<img class=\"avatar\" src=${avatar} alt=\"\" referrerpolicy=\"no-referrer\">` : html`<span class=\"avatar\" aria-hidden=\"true\">${title.trim().charAt(0).toUpperCase()}</span>`}<div class=\"heading\"><h2>${title}</h2>${this.headerSubtitle ?? this.header.subtitle ? html`<p>${this.headerSubtitle ?? this.header.subtitle}</p>` : nothing}${s.mode === 'human' ? html`<small>${strings.humanJoined}</small>` : nothing}</div>\n ${this.newChat ? html`<button type=\"button\" class=\"icon\" title=${strings.newChat} ?disabled=${!client || this.sessionBusy} @click=${() => client && !this.sessionBusy && void this.run(() => client.newSession({ keepHistory: this.newChatHistory === 'keep' }))}>${newChatIcon}<span class=\"sr\">${strings.newChat}</span></button>` : nothing}\n ${this.closable ? html`<button type=\"button\" class=\"icon\" title=${strings.closeChat} aria-label=${strings.closeChat} @click=${() => this.dispatchEvent(new CustomEvent('osvi-close', { bubbles: true, composed: true }))}>${closeIcon}</button>` : nothing}</header>\n <div class=\"transcript\" role=\"log\" aria-live=\"polite\" aria-label=\"Conversation\" @scroll=${(e: Event) => { const el = e.currentTarget as HTMLElement; this.followBottom = el.scrollHeight - el.scrollTop - el.clientHeight <= 80; }} @osvi-respond=${this.respond} @osvi-request-input=${this.requestInput}>${renderTranscript(s, strings, variants, client?.resolveUrl('') ?? '', id => { if (client) void this.run(() => client.retry(id)); })}</div>\n <div class=\"status\" role=\"status\">${this.statusText(strings)}${s.error?.retryable && (s.status === 'idle' || s.status === 'closed') ? html`<button type=\"button\" ?disabled=${this.busy || !client} @click=${() => client && void this.run(() => client.start())}>${strings.tryAgain}</button>` : nothing}</div>\n ${renderComposer({ strings, draft: this.draft, placeholder: this.typed?.placeholder ?? strings.placeholder, disabled: this.blocked, input: e => { this.draft = (e.target as HTMLTextAreaElement).value; this.requestUpdate(); }, send: this.send })}\n ${this.poweredBy ? html`<footer><a href=\"https://osvi.ai\" target=\"_blank\" rel=\"noopener noreferrer\">${osviLogo}<span>${strings.poweredBy}</span></a></footer>` : nothing}`;\n }\n}\n","export function defineOnce(name: string, ctor: CustomElementConstructor): void {\n if (typeof customElements === 'undefined' || customElements.get(name)) return;\n customElements.define(name, ctor);\n}\n","import { css, unsafeCSS } from 'lit';\nimport { cssVar } from './theme';\nconst v = (k: Parameters<typeof cssVar>[0]) => unsafeCSS(cssVar(k));\nexport const toolStyles = css`\n :host { --p:${v('primary')}; --bg:${v('background')}; --surface:${v('surface')}; --text:${v('text')}; --r:var(--osvi-radius,14px);\n --sub:color-mix(in srgb,var(--text) 58%,var(--bg)); --line:color-mix(in srgb,var(--text) 11%,var(--bg));\n display:block; font:inherit; color:var(--text); }\n * { box-sizing:border-box; }\n p { margin:0 0 6px; } .label { font-weight:600; } .description { color:var(--sub); font-size:13px; }\n .answer { display:inline-block; margin-top:2px; padding:4px 10px; border-radius:999px; background:color-mix(in srgb,var(--p) 12%,var(--bg)); color:var(--p); font-weight:600; font-size:13px; }\n .sr { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }\n button { font:inherit; color:inherit; cursor:pointer; }\n button:focus-visible { outline:3px solid color-mix(in srgb,var(--p) 55%,transparent); outline-offset:2px; }\n button:disabled { opacity:.45; cursor:default; }\n small { display:block; color:var(--sub); font-size:12px; font-weight:400; }\n .chips { display:flex; flex-wrap:wrap; gap:8px; }\n .chips button { border:1.5px solid color-mix(in srgb,var(--p) 55%,var(--line)); background:var(--bg); color:var(--p); border-radius:999px; padding:7px 14px; font-weight:600; font-size:13px; text-align:center; }\n .chips button:hover:not(:disabled) { background:color-mix(in srgb,var(--p) 10%,var(--bg)); }\n .text { display:grid; gap:1px; min-width:0; }\n .chips small { color:inherit; opacity:.8; }\n .list { display:grid; gap:6px; }\n .list > button { display:flex; justify-content:space-between; align-items:center; gap:10px; width:100%; text-align:left; border:1px solid var(--line); background:var(--bg); border-radius:12px; padding:10px 12px; }\n .list > button:hover:not(:disabled) { border-color:var(--p); }\n .list > button svg { width:16px; height:16px; flex:none; color:var(--sub); }\n .card { background:var(--bg); border:1px solid var(--line); border-radius:var(--r); overflow:hidden; box-shadow:0 6px 18px -10px rgb(16 18 30/.35); }\n .card .body { padding:10px 12px 12px; display:grid; gap:4px; } .card h3 { margin:0; font-size:14px; } .card p { margin:0; color:var(--sub); font-size:12.5px; }\n .image { aspect-ratio:16 / 9; max-width:100%; display:grid; place-items:center; overflow:hidden; background:var(--surface); color:var(--sub); font-size:12px; }\n .image img { width:100%; height:100%; object-fit:cover; display:block; }\n .primary { justify-self:start; margin-top:6px; border:0; border-radius:10px; background:var(--p); color:#fff; font-weight:600; font-size:13px; padding:8px 14px; }\n .list .card { display:grid; grid-template-columns:minmax(0,88px) 1fr; } .list .card .image { aspect-ratio:auto; height:100%; min-height:88px; }\n .list .card:not(:has(.image)) { grid-template-columns:1fr; }\n .navigation { display:flex; align-items:center; justify-content:space-between; gap:8px; margin:10px 0 0; }\n .round { width:32px; height:32px; border-radius:50%; border:1px solid var(--line); background:var(--bg); display:grid; place-items:center; padding:0; flex:none; }\n .round:hover:not(:disabled) { border-color:var(--p); } .round svg { width:15px; height:15px; }\n .dots { display:flex; gap:5px; align-items:center; } .dots i { width:6px; height:6px; border-radius:3px; background:var(--line); transition:width .2s; } .dots i.on { width:16px; background:var(--p); }\n .calendar { border:1px solid var(--line); border-radius:var(--r); padding:10px; background:var(--bg); display:grid; gap:6px; }\n .calendar .navigation { margin:0; font-weight:600; font-size:13px; }\n .days, .weekdays { display:grid; grid-template-columns:repeat(7, minmax(0, 1fr)); gap:2px 0; text-align:center; }\n .weekdays { color:var(--sub); font-size:11px; }\n .days button { border:0; background:transparent; height:30px; border-radius:8px; padding:0; font-size:12.5px; font-variant-numeric:tabular-nums; }\n .days button:hover:not(:disabled) { background:var(--surface); }\n .days button.today { box-shadow:inset 0 0 0 1.5px var(--line); }\n .days button.in { background:color-mix(in srgb,var(--p) 14%,transparent); border-radius:0; }\n .days button[aria-pressed=\"true\"] { background:var(--p); color:#fff; }\n .days button.start:not(.end) { border-radius:8px 0 0 8px; } .days button.end:not(.start) { border-radius:0 8px 8px 0; }\n .hint { color:var(--sub); font-size:12px; margin:0; }\n @media (prefers-reduced-motion:reduce) { .dots i { transition:none; } }\n`;\n","import { LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport type { InteractionMessage, InteractionResponse } from '../../core/protocol/types';\nimport { isInteractionPresentation } from '../../core/protocol/validators';\nimport { applyTheme, type ChatTheme } from '../theme';\nexport abstract class ToolElement extends LitElement {\n @property({ attribute: false }) interaction: InteractionMessage | null = null;\n @property({ type: Boolean }) disabled = false;\n @property({ attribute: false }) theme: ChatTheme | undefined;\n @property({ attribute: 'base-url' }) baseUrl = '';\n protected abstract readonly toolType: string;\n protected get live(): boolean { return !this.disabled && this.interaction?.interaction_status === 'pending'; }\n protected get valid(): boolean {\n const i = this.interaction;\n return !!i && i.tool_type === this.toolType && isInteractionPresentation(i, i.presentation);\n }\n protected respond(response: InteractionResponse): void {\n if (!this.interaction || !this.live || !this.valid) return;\n this.dispatchEvent(new CustomEvent('osvi-respond', { bubbles: true, composed: true, detail: { interactionId: this.interaction.interaction_id, response } }));\n }\n protected updated(changed: Map<PropertyKey, unknown>): void { if (changed.has('theme')) applyTheme(this, this.theme); }\n}\n","import { html, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport type { ChoicePresentation } from '../../core/protocol/types';\nimport { toolStyles } from '../styles';\nimport { ToolElement } from './base';\nimport { rightIcon } from '../icons';\nexport class OsviButtons extends ToolElement {\n static styles = toolStyles;\n protected readonly toolType = 'ui_buttons';\n @property() variant: 'chips' | 'list' = 'chips';\n render() {\n const i = this.interaction;\n if (!i) return nothing;\n if (!this.valid) return html`<p>${i.content}</p>`;\n const p = i.presentation as ChoicePresentation;\n const chosen = i.response_payload?.kind === 'text' ? i.response_payload.value : p.options.find(o => o.id === (i.response_payload?.kind === 'selection' ? i.response_payload.value : i.selected_option_id))?.label;\n return html`<p class=\"label\">${p.label}</p>${p.description ? html`<p class=\"description\">${p.description}</p>` : nothing}\n ${this.live ? html`<div role=\"group\" aria-label=\"Options\" class=${this.variant} @keydown=${this.onKey}>\n ${p.options.map(o => html`<button type=\"button\" @click=${() => this.pick(o.id, o.allow_input, o.input_placeholder)}><span class=\"text\"><span>${o.label}</span>${o.description ? html`<small>${o.description}</small>` : nothing}</span>${this.variant === 'list' ? rightIcon : nothing}</button>`)}\n </div>` : chosen ? html`<p class=\"answer\">${chosen}</p>` : nothing}`;\n }\n private pick(id: string, allowInput?: true, placeholder?: string) {\n if (!this.live || !this.valid || !this.interaction) return;\n if (this.interaction.schema_version === 2 && allowInput) {\n this.dispatchEvent(new CustomEvent('osvi-request-input', { bubbles: true, composed: true, detail: { interactionId: this.interaction.interaction_id, placeholder } }));\n } else this.respond({ kind: 'selection', value: id });\n }\n private onKey(e: KeyboardEvent) {\n if (!['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft'].includes(e.key)) return;\n const list = [...this.renderRoot.querySelectorAll('button')];\n const at = list.indexOf((this.renderRoot as ShadowRoot).activeElement as HTMLButtonElement);\n const step = e.key === 'ArrowDown' || e.key === 'ArrowRight' ? 1 : -1;\n list[(at + step + list.length) % list.length]?.focus(); e.preventDefault();\n }\n}\n","import { html, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport type { CarouselItem, CarouselPresentation } from '../../core/protocol/types';\nimport { isProxyImageUrl } from '../../core/protocol/validators';\nimport { toolStyles } from '../styles';\nimport { ToolElement } from './base';\nimport { leftIcon, rightIcon } from '../icons';\nexport class OsviCarousel extends ToolElement {\n static styles = toolStyles;\n protected readonly toolType = 'ui_carousel';\n @property() variant: 'slider' | 'list' = 'slider';\n @state() private index = 0;\n @state() private imageFailed = new Set<number>();\n private pointerStart: number | undefined;\n private suppressPointerClick = false;\n protected willUpdate(changed: Map<PropertyKey, unknown>) {\n if (changed.has('interaction')) { this.index = 0; this.imageFailed = new Set(); this.pointerStart = undefined; this.suppressPointerClick = false; }\n }\n render() {\n const i = this.interaction;\n if (!i) return nothing;\n if (!this.valid) return html`<p>${i.content}</p>`;\n const p = i.presentation as CarouselPresentation;\n const chosen = p.items.find(item => item.id === (i.response_payload?.kind === 'selection' ? i.response_payload.value : i.selected_option_id));\n return html`<p class=\"label\">${p.label}</p>${p.description ? html`<p class=\"description\">${p.description}</p>` : nothing}\n ${!this.live ? chosen ? html`<p class=\"answer\">${chosen.title}</p>` : nothing : this.variant === 'list'\n ? html`<div class=\"list\">${p.items.map((item, n) => this.card(item, n))}</div>`\n : html`<div @pointerdown=${(e: PointerEvent) => { this.pointerStart = e.clientX; this.suppressPointerClick = false; }} @pointerup=${(e: PointerEvent) => {\n if (this.pointerStart !== undefined && Math.abs(e.clientX - this.pointerStart) > 40) {\n this.suppressPointerClick = true;\n this.navigate(e.clientX < this.pointerStart ? 1 : -1, p.items.length);\n }\n this.pointerStart = undefined;\n }} @pointercancel=${() => { this.pointerStart = undefined; }}>${this.card(p.items[this.index]!, this.index)}</div>\n <div class=\"navigation\"><button type=\"button\" class=\"round\" aria-label=\"Previous card\" ?disabled=${this.index === 0} @click=${() => this.navigate(-1, p.items.length)}>${leftIcon}</button>\n <span class=\"dots\" aria-hidden=\"true\">${p.items.map((_, n) => html`<i class=${n === this.index ? 'on' : ''}></i>`)}</span><span class=\"sr\" aria-live=\"polite\">${this.index + 1} of ${p.items.length}</span>\n <button type=\"button\" class=\"round\" aria-label=\"Next card\" ?disabled=${this.index === p.items.length - 1} @click=${() => this.navigate(1, p.items.length)}>${rightIcon}</button></div>`}`;\n }\n private navigate(delta: number, length: number) { this.index = Math.max(0, Math.min(length - 1, this.index + delta)); }\n private select(event: MouseEvent, id: string) {\n // Keyboard activation has detail 0; a swipe's synthesized pointer click must not select.\n if (this.suppressPointerClick && event.detail !== 0) {\n this.suppressPointerClick = false;\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.respond({ kind: 'selection', value: id });\n }\n private card(item: CarouselItem, index: number) {\n const image = item.image;\n return html`<article class=\"card\">${image && isProxyImageUrl(image.url) ? html`<div class=\"image\">${this.imageFailed.has(index)\n ? html`<span role=\"img\" aria-label=\"Image unavailable\">Image unavailable</span>`\n : html`<img src=${this.baseUrl.replace(/\\/$/, '') + image.url} alt=${image.alt} referrerpolicy=\"no-referrer\" loading=\"lazy\" @error=${() => { this.imageFailed = new Set([...this.imageFailed, index]); }}>`}</div>` : nothing}\n <div class=\"body\"><h3>${item.title}</h3>${item.description ? html`<p>${item.description}</p>` : nothing}\n <button type=\"button\" class=\"primary\" @click=${(e: MouseEvent) => this.select(e, item.id)}>${item.action_label ?? 'Select'}</button></div></article>`;\n }\n}\n","import { html, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport type { DatePickerPresentation } from '../../core/protocol/types';\nimport { isCalendarDate } from '../../core/protocol/validators';\nimport { toolStyles } from '../styles';\nimport { ToolElement } from './base';\nimport { leftIcon, rightIcon } from '../icons';\nconst toIso = (d: Date) => `${String(d.getFullYear()).padStart(4, '0')}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\nconst today = () => toIso(new Date());\nconst parseDate = (iso: string) => { const d = new Date(0); d.setHours(0, 0, 0, 0); d.setFullYear(Number(iso.slice(0, 4)), Number(iso.slice(5, 7)) - 1, Number(iso.slice(8, 10))); return d; };\nconst monthOf = (iso: string) => iso.slice(0, 7);\nexport class OsviDatePicker extends ToolElement {\n static styles = toolStyles;\n protected readonly toolType = 'ui_date_picker';\n @property() variant = 'grid';\n @state() private month = monthOf(today());\n @state() private start = '';\n @state() private end = '';\n private earliest(p: DatePickerPresentation) { return p.min_date && p.min_date > today() ? p.min_date : today(); }\n protected willUpdate(changed: Map<PropertyKey, unknown>) {\n if (changed.has('interaction')) {\n this.start = ''; this.end = '';\n if (this.valid) this.month = monthOf(this.earliest(this.interaction!.presentation as DatePickerPresentation));\n }\n }\n render() {\n const i = this.interaction;\n if (!i) return nothing;\n if (!this.valid) return html`<p>${i.content}</p>`;\n const p = i.presentation as DatePickerPresentation;\n const response = i.response_payload;\n const chosen = response?.kind === 'date_range' ? `${response.value.start_date} – ${response.value.end_date}` : response?.kind === 'date' || response?.kind === 'text' ? response.value : i.selected_option_id;\n if (!this.live) return html`<p class=\"label\">${p.label}</p>${p.description ? html`<p class=\"description\">${p.description}</p>` : nothing}${chosen ? html`<p class=\"answer\">${chosen}</p>` : nothing}`;\n const first = parseDate(`${this.month}-01`);\n const last = new Date(first); last.setMonth(last.getMonth() + 1, 0);\n const earliest = this.earliest(p);\n const days = Array.from({ length: last.getDate() }, (_, n) => `${this.month}-${String(n + 1).padStart(2, '0')}`);\n const hint = p.selection_mode === 'range' ? !this.start ? 'Choose check-in, then check-out.' : !this.end ? `Check-in: ${this.start}. Choose check-out.` : `${this.start} – ${this.end}` : this.start;\n const now = today();\n return html`<p class=\"label\">${p.label}</p>${p.description ? html`<p class=\"description\">${p.description}</p>` : nothing}\n <div class=\"calendar\"><div class=\"navigation\"><button type=\"button\" class=\"round\" aria-label=\"Previous month\" ?disabled=${this.month <= monthOf(earliest)} @click=${() => this.moveMonth(-1, p)}>${leftIcon}</button>\n <span aria-live=\"polite\">${first.toLocaleDateString(undefined, { month: 'long', year: 'numeric' })}</span>\n <button type=\"button\" class=\"round\" aria-label=\"Next month\" ?disabled=${!!p.max_date && this.month >= monthOf(p.max_date)} @click=${() => this.moveMonth(1, p)}>${rightIcon}</button></div>\n <div class=\"weekdays\" aria-hidden=\"true\">${['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'].map(day => html`<span>${day}</span>`)}</div>\n <div class=\"days\" role=\"group\" aria-label=\"Choose date\" @keydown=${this.onKey}>\n ${Array.from({ length: first.getDay() }, () => html`<span></span>`)}\n ${days.map((day, n) => html`<button type=\"button\" class=${[day === now ? 'today' : '', day === this.start ? 'start' : '', day === this.end ? 'end' : '', this.start && this.end && day > this.start && day < this.end ? 'in' : ''].filter(Boolean).join(' ')} aria-label=${day} aria-pressed=${day === this.start || day === this.end} ?disabled=${day < earliest || !!p.max_date && day > p.max_date} @click=${() => this.pick(day, p)}>${n + 1}</button>`)}\n </div><p class=\"hint\" aria-live=\"polite\">${hint}</p>\n <button type=\"button\" class=\"primary\" ?disabled=${!this.start || p.selection_mode === 'range' && (!this.end || this.start >= this.end)} @click=${() => this.confirm(p)}>${p.confirm_label ?? 'Confirm date'}</button></div>`;\n }\n private moveMonth(delta: number, p: DatePickerPresentation) {\n const date = parseDate(`${this.month}-01`); date.setMonth(date.getMonth() + delta);\n const next = monthOf(toIso(date));\n if (next >= monthOf(this.earliest(p)) && (!p.max_date || next <= monthOf(p.max_date))) this.month = next;\n }\n private pick(day: string, p: DatePickerPresentation) {\n if (!this.live || !this.valid || !isCalendarDate(day) || day < this.earliest(p) || p.max_date && day > p.max_date) return;\n if (p.selection_mode === 'single' || !this.start || this.end || day <= this.start) { this.start = day; this.end = ''; }\n else this.end = day;\n }\n private confirm(p: DatePickerPresentation) {\n if (!isCalendarDate(this.start) || this.start < this.earliest(p) || p.max_date && this.start > p.max_date) return;\n if (p.selection_mode === 'single') this.respond({ kind: 'date', value: this.start });\n else if (isCalendarDate(this.end) && this.start < this.end && (!p.max_date || this.end <= p.max_date)) this.respond({ kind: 'date_range', value: { start_date: this.start, end_date: this.end } });\n }\n private onKey(e: KeyboardEvent) {\n const steps: Record<string, number> = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -7, ArrowDown: 7 };\n const step = steps[e.key]; if (step === undefined) return;\n const buttons = [...this.renderRoot.querySelectorAll<HTMLButtonElement>('.days button')];\n const at = buttons.indexOf((this.renderRoot as ShadowRoot).activeElement as HTMLButtonElement);\n if (at < 0) return;\n let next = at + step;\n while (next >= 0 && next < buttons.length && buttons[next]?.disabled) next += step > 0 ? 1 : -1;\n buttons[next]?.focus(); e.preventDefault();\n }\n}\n","import { OsviChat } from './osvi-chat';\nimport { defineOnce } from './define';\nimport { OsviButtons } from './tools/osvi-buttons';\nimport { OsviCarousel } from './tools/osvi-carousel';\nimport { OsviDatePicker } from './tools/osvi-date-picker';\ndefineOnce('osvi-chat', OsviChat);\ndefineOnce('osvi-buttons', OsviButtons);\ndefineOnce('osvi-carousel', OsviCarousel);\ndefineOnce('osvi-date-picker', OsviDatePicker);\nexport { OsviButtons, OsviCarousel, OsviDatePicker };\nexport { defineOnce } from './define';\nexport { themeVariables, explicitThemeVariables, applyTheme, cssVar, type ChatTheme, type Variants } from './theme';\n\nexport { OsviChat };\nexport { DEFAULT_STRINGS, type ChatStrings } from './strings';\n","import type { ChatAuth } from '../core';\nimport type { ChatTheme, Variants } from '../ui/theme';\nimport type { ChatStrings } from '../ui/strings';\nimport { oneOf, parseRadius, safeAvatar, safeBaseUrl } from '../ui/panel/attrs';\n\nexport interface WidgetConfig {\n agentId: string; baseUrl?: string; position?: 'right' | 'left'; launcher?: 'bubble' | 'none';\n greeting?: string; theme?: ChatTheme; variants?: Variants; strings?: Partial<ChatStrings>;\n poweredBy?: boolean; newChat?: boolean; newChatHistory?: 'clear' | 'keep'; header?: { title?: string; subtitle?: string; avatarUrl?: string }; auth?: ChatAuth;\n}\nconst text = (v: unknown): string | undefined => typeof v === 'string' ? v : undefined;\nconst record = (v: unknown): Record<string, unknown> => v && typeof v === 'object' && !Array.isArray(v) ? v as Record<string, unknown> : {};\nconst boolean = (v: unknown): boolean | undefined => v === true || v === 'true' ? true : v === false || v === 'false' ? false : undefined;\nexport function readConfig(script: HTMLScriptElement | null, global: unknown): WidgetConfig {\n const g = record(global), d = script?.dataset ?? {}, theme = record(g.theme), variants = record(g.variants), header = record(g.header);\n const colors: NonNullable<ChatTheme['colors']> = {};\n const rawColors = record(theme.colors);\n for (const key of ['primary', 'background', 'surface', 'text', 'userBubble', 'assistantBubble'] as const) {\n const value = text(rawColors[key]); if (value !== undefined) colors[key] = value;\n }\n if (d.primaryColor) colors.primary = d.primaryColor;\n const radius = parseRadius(d.radius) ?? (typeof theme.radius === 'number' && Number.isInteger(theme.radius) && theme.radius >= 0 && theme.radius <= 99 ? theme.radius : parseRadius(text(theme.radius)));\n const mode = oneOf(d.mode, ['light', 'dark'] as const) ?? oneOf(text(theme.mode), ['light', 'dark'] as const);\n const strings: Partial<ChatStrings> = {};\n for (const [key, value] of Object.entries(record(g.strings))) if (typeof value === 'string') (strings as Record<string, string>)[key] = value;\n return {\n agentId: d.agent ?? text(g.agentId) ?? '',\n baseUrl: safeBaseUrl(d.baseUrl) ?? safeBaseUrl(text(g.baseUrl)),\n position: oneOf(d.position, ['right', 'left'] as const) ?? oneOf(text(g.position), ['right', 'left'] as const) ?? 'right',\n launcher: oneOf(d.launcher, ['bubble', 'none'] as const) ?? oneOf(text(g.launcher), ['bubble', 'none'] as const) ?? 'bubble',\n greeting: d.greeting ?? text(g.greeting),\n theme: { colors, ...(radius !== undefined ? { radius } : {}), ...(mode ? { mode } : {}) },\n variants: { buttons: oneOf(d.buttons, ['chips', 'list'] as const) ?? oneOf(text(variants.buttons), ['chips', 'list'] as const), carousel: oneOf(d.carousel, ['slider', 'list'] as const) ?? oneOf(text(variants.carousel), ['slider', 'list'] as const) },\n strings, poweredBy: boolean(d.poweredBy) ?? boolean(g.poweredBy) ?? true, newChat: boolean(d.newChat) ?? boolean(g.newChat) ?? true,\n newChatHistory: oneOf(d.newChatHistory, ['clear', 'keep'] as const) ?? oneOf(text(g.newChatHistory), ['clear', 'keep'] as const) ?? 'clear',\n header: { title: d.title ?? text(header.title), subtitle: d.subtitle ?? text(header.subtitle), avatarUrl: safeAvatar(d.avatar) ?? safeAvatar(text(header.avatarUrl)) },\n auth: g.auth as ChatAuth | undefined,\n };\n}\n","import { LitElement, css, html, nothing } from 'lit';\nimport type { ChatClient } from '../core';\nimport type { OsviChat } from '../ui/osvi-chat';\nimport type { WidgetConfig } from './config';\nimport { closeIcon, launcherChatIcon, launcherCloseIcon } from '../ui/icons';\n\nexport class OsviChatWidget extends LitElement {\n static properties = { config: { attribute: false }, client: { attribute: false }, opened: { type: Boolean }, badge: { type: Number }, greetingDismissed: { type: Boolean } };\n config: WidgetConfig = { agentId: '' };\n client: ChatClient | null = null;\n opened = false;\n badge = 0;\n greetingDismissed = false;\n onToggle: () => void = () => {};\n onClose: () => void = () => {};\n onDismiss: () => void = () => {};\n static styles = css`\n :host { --p:var(--osvi-color-primary,#4f46e5); position:fixed; bottom:20px; right:20px; z-index:2147483000; font-family:inherit; font-size:14px; line-height:1.5; display:flex; flex-direction:column; align-items:flex-end; }\n :host([position=\"left\"]) { right:auto; left:20px; align-items:flex-start; }\n * { box-sizing:border-box; } button { font:inherit; cursor:pointer; }\n button:focus-visible { outline:3px solid color-mix(in srgb,var(--p) 55%,transparent); outline-offset:3px; }\n .launcher { position:relative; border:0; border-radius:50%; width:58px; height:58px; background:var(--p); color:#fff; display:grid; place-items:center;\n box-shadow:0 10px 24px -6px color-mix(in srgb,var(--p) 60%,transparent),0 2px 6px rgb(0 0 0/.18); transition:transform .15s ease; }\n .launcher:hover { transform:scale(1.06); } .launcher:active { transform:scale(.96); }\n .launcher svg { width:26px; height:26px; }\n .badge { position:absolute; top:-2px; right:-2px; min-width:20px; height:20px; border-radius:10px; background:#ef4444; color:#fff; font:700 11px/20px system-ui,sans-serif; text-align:center; padding:0 5px; border:2px solid #fff; }\n .greeting { position:relative; background:#fff; color:#16171d; border-radius:14px; padding:10px 14px; margin-bottom:12px; max-width:240px; font-size:13px;\n box-shadow:0 10px 30px -10px rgb(16 18 30/.35),0 0 0 1px rgb(16 18 30/.08); }\n .greeting button { position:absolute; top:-8px; left:-8px; width:22px; height:22px; border:0; border-radius:50%; background:#fff; color:#555; box-shadow:0 1px 4px rgb(0 0 0/.25); display:grid; place-items:center; padding:0; }\n .greeting button svg { width:12px; height:12px; }\n .panel { position:absolute; bottom:76px; right:0; width:380px; height:min(620px,calc(100dvh - 100px)); border-radius:20px; overflow:hidden;\n box-shadow:0 24px 60px -12px rgb(16 18 30/.32),0 0 0 1px rgb(16 18 30/.08); animation:osvi-in .18s ease-out; }\n :host([position=\"left\"]) .panel { right:auto; left:0; } .panel[hidden] { display:none; }\n .panel osvi-chat { border-radius:0; }\n @keyframes osvi-in { from { opacity:0; transform:translateY(8px) scale(.98); } to { opacity:1; transform:none; } }\n @media (prefers-reduced-motion:reduce) { .launcher,.panel { transition:none; animation:none; } }\n @media(max-width:639px) { .panel,:host([position=\"left\"]) .panel { position:fixed; inset:0; width:100%; height:100dvh; border-radius:0; box-shadow:none; } }\n `;\n get panel(): OsviChat | null { return this.renderRoot.querySelector<OsviChat>('osvi-chat'); }\n focusLauncher(): void { this.renderRoot.querySelector<HTMLButtonElement>('.launcher')?.focus(); }\n render() {\n const c = this.config;\n return html`${c.greeting && !this.greetingDismissed && !this.opened ? html`<div class=\"greeting\" part=\"greeting\">${c.greeting}<button type=\"button\" aria-label=\"Dismiss greeting\" @click=${this.onDismiss}>${closeIcon}</button></div>` : nothing}\n ${c.launcher !== 'none' ? html`<button class=\"launcher\" part=\"launcher\" type=\"button\" aria-label=${this.opened ? 'Close chat' : 'Open chat'} aria-expanded=${this.opened} @click=${this.onToggle}>${this.opened ? launcherCloseIcon : launcherChatIcon}${this.badge > 0 && !this.opened ? html`<span class=\"badge\" part=\"badge\" role=\"status\" aria-label=${`${this.badge} unread messages`}>${this.badge}</span>` : nothing}</button>` : nothing}\n ${this.client ? html`<div class=\"panel\" part=\"panel\" ?hidden=${!this.opened}><osvi-chat .client=${this.client} .theme=${c.theme ?? {}} .variants=${c.variants ?? {}} .strings=${c.strings ?? {}} .header=${c.header ?? {}} .poweredBy=${c.poweredBy ?? true} .newChat=${c.newChat ?? true} .newChatHistory=${c.newChatHistory ?? 'clear'} closable ?hidden=${!this.opened} @osvi-close=${this.onClose}></osvi-chat></div>` : nothing}`;\n }\n}\nif (!customElements.get('osvi-chat-widget')) customElements.define('osvi-chat-widget', OsviChatWidget);\n","import { defineOnce, OsviChat, OsviButtons, OsviCarousel, OsviDatePicker } from '../ui/index';\nimport { createChatClient, DEFAULT_BASE_URL, type ChatClient, type ChatState } from '../core';\nimport { HttpClient } from '../core/http';\nimport { browserStore, memoryStore, getVisitorId, sessionHintKey } from '../core/storage';\nimport { compareCursors, interactionCursor } from '../core/protocol/readers';\nimport { applyTheme } from '../ui/theme';\nimport { readConfig, type WidgetConfig } from './config';\nimport { OsviChatWidget } from './launcher';\n\nexport interface WidgetApi { open(): void; close(): void; toggle(): void; destroy(): void; init(config?: Partial<WidgetConfig>): void }\nexport const GREETING_KEY = (agentId: string): string => `osvi.chat.greetingDismissed.${agentId}`;\nexport const SEEN_KEY = (agentId: string): string => `osvi.chat.seen.${agentId}`;\nexport const BADGE_RECHECK_MS = 30_000;\nlet activeApi: WidgetApi | null = null;\nexport function unmountWidget(): void { activeApi?.destroy(); }\nexport function mountWidget(initial: WidgetConfig): WidgetApi {\n // Runtime references keep registrations in bundles even when source modules\n // are considered side-effect free by the package's bundler metadata.\n defineOnce('osvi-chat', OsviChat);\n defineOnce('osvi-buttons', OsviButtons);\n defineOnce('osvi-carousel', OsviCarousel);\n defineOnce('osvi-date-picker', OsviDatePicker);\n defineOnce('osvi-chat-widget', OsviChatWidget);\n if (activeApi) return activeApi;\n let config = readConfig(null, initial), host: OsviChatWidget | null = null, client: ChatClient | null = null;\n let unsubscribe: (() => void) | undefined, opened = false, everOpened = false, lastCheck = -Infinity, generation = 0, checkSequence = 0;\n let previousOverflow: string | null = null;\n const anonymousStore = browserStore();\n let store = memoryStore();\n let known = new Set<string>(), unread = new Set<string>();\n const keys = (state: ChatState): Set<string> => new Set([\n ...state.items.flatMap(i => i.kind === 'message' && i.role !== 'user' ? [`message:${i.serverId ?? i.id}`] : []),\n ...(state.activeInteraction ? [`interaction:${state.activeInteraction.interaction_id}`] : []),\n ]);\n const updateState = (state: ChatState): void => {\n if (!host) return;\n const next = keys(state);\n if (opened) {\n let maximum = interactionCursor(store.get(SEEN_KEY(config.agentId)));\n for (const item of state.items) {\n const id = interactionCursor(item.kind === 'message' && item.role !== 'user' ? item.serverId : item.kind === 'interaction' ? item.interaction.id : undefined);\n if (id !== null && (maximum === null || compareCursors(id, maximum) > 0)) maximum = id;\n }\n const seen = interactionCursor(store.get(SEEN_KEY(config.agentId)));\n if (maximum !== null && (seen === null || compareCursors(maximum, seen) > 0)) store.set(SEEN_KEY(config.agentId), maximum);\n unread.clear(); host.badge = 0;\n } else {\n const seen = interactionCursor(store.get(SEEN_KEY(config.agentId)));\n const eligible = new Set(state.items.flatMap(item => {\n if (item.kind !== 'message' || item.role === 'user') return [];\n const id = interactionCursor(item.serverId);\n return id !== null && seen !== null && compareCursors(id, seen) <= 0 ? [] : [`message:${item.serverId ?? item.id}`];\n }));\n if (state.activeInteraction) {\n const id = interactionCursor(state.activeInteraction.id);\n if (id === null || seen === null || compareCursors(id, seen) > 0) eligible.add(`interaction:${state.activeInteraction.interaction_id}`);\n }\n for (const key of next) if (!known.has(key) && eligible.has(key)) unread.add(key);\n host.badge = unread.size;\n }\n known = next;\n };\n const checkUnread = async (): Promise<void> => {\n if (config.auth?.mode === 'server' || !host || everOpened || !store.get(sessionHintKey(config.agentId))) return;\n lastCheck = Date.now(); const current = generation, sequence = ++checkSequence;\n try {\n const boot = await new HttpClient(config.baseUrl ?? DEFAULT_BASE_URL).bootstrap(config.agentId, getVisitorId(store));\n if (!host || generation !== current || sequence !== checkSequence || everOpened) return;\n const seen = interactionCursor(store.get(SEEN_KEY(config.agentId)));\n host.badge = seen === null ? 0 : (boot.messages ?? []).filter(row => {\n if (!row || typeof row !== 'object') return false;\n const r = row as Record<string, unknown>, id = interactionCursor(r.id);\n return r.role !== 'user' && r.role !== 'system' && id !== null && compareCursors(id, seen) > 0;\n }).length;\n } catch { if (host && generation === current && sequence === checkSequence && !everOpened) host.badge = 0; }\n };\n const visibility = (): void => { if (document.visibilityState === 'visible' && Date.now() - lastCheck >= BADGE_RECHECK_MS) void checkUnread(); };\n const resize = (): void => {\n if (opened && window.innerWidth < 640) { if (previousOverflow === null) previousOverflow = document.documentElement.style.overflow; document.documentElement.style.overflow = 'hidden'; }\n else if (previousOverflow !== null) { document.documentElement.style.overflow = previousOverflow; previousOverflow = null; }\n };\n const escape = (event: KeyboardEvent): void => { if (event.key === 'Escape' && opened) { api.close(); host?.focusLauncher(); } };\n const api: WidgetApi = {\n open() {\n if (!host || opened) return;\n opened = true; everOpened = true; host.opened = true; host.badge = 0; unread.clear(); resize();\n if (!client) {\n client = createChatClient({ agentId: config.agentId, baseUrl: config.baseUrl, auth: config.auth, store });\n host.client = client; known = keys(client.getState()); unsubscribe = client.subscribe(updateState);\n void client.start().catch(() => {});\n }\n updateState(client.getState());\n const target = host; void target.updateComplete.then(() => { if (host === target && opened) void target.panel?.focusActiveInteraction(); });\n },\n close() { if (!host || !opened) return; opened = false; host.opened = false; resize(); host.focusLauncher(); },\n toggle() { if (opened) api.close(); else api.open(); },\n destroy() {\n api.close(); ++generation; unsubscribe?.(); unsubscribe = undefined; client?.destroy(); client = null;\n host?.remove(); host = null; document.removeEventListener('visibilitychange', visibility); document.removeEventListener('keydown', escape); window.removeEventListener('resize', resize);\n delete (window as Window & { __osviChatWidget?: boolean }).__osviChatWidget;\n if (activeApi === api) activeApi = null;\n },\n init(next = {}) {\n if (host) return;\n if (activeApi && activeApi !== api) return;\n config = readConfig(null, { ...config, ...next });\n if (!config.agentId) { console.error('[osvi-chat] data-agent is required'); return; }\n store = config.auth?.mode === 'server' ? memoryStore() : anonymousStore;\n opened = false; everOpened = false; lastCheck = -Infinity; known = new Set(); unread = new Set(); ++generation;\n host = document.createElement('osvi-chat-widget') as OsviChatWidget; host.config = config;\n host.setAttribute('position', config.position ?? 'right'); applyTheme(host, config.theme);\n host.greetingDismissed = !!store.get(GREETING_KEY(config.agentId)); host.onToggle = api.toggle; host.onClose = api.close;\n host.onDismiss = () => { if (host) { host.greetingDismissed = true; store.set(GREETING_KEY(config.agentId), 'true'); } };\n document.body.append(host); activeApi = api; (window as Window & { __osviChatWidget?: boolean }).__osviChatWidget = true;\n document.addEventListener('visibilitychange', visibility); document.addEventListener('keydown', escape); window.addEventListener('resize', resize); void checkUnread();\n },\n };\n api.init(); return api;\n}\n","import '../ui/index';\nimport { readConfig } from './config';\nimport { mountWidget, type WidgetApi } from './widget';\n\nconst w = window as unknown as { __osviChatWidget?: boolean; OsviChatConfig?: unknown; OsviChat?: WidgetApi & { q?: unknown[][] } };\nconst script = document.currentScript as HTMLScriptElement | null;\nif (!w.__osviChatWidget) {\n const config = readConfig(script, w.OsviChatConfig);\n if (!config.agentId) console.error('[osvi-chat] data-agent is required');\n else {\n const queued = Array.isArray(w.OsviChat?.q) ? [...w.OsviChat.q] : [];\n const api = mountWidget(config); w.OsviChat = api;\n for (const entry of queued) {\n if (!Array.isArray(entry)) continue;\n const method = entry[0];\n if (method === 'open' || method === 'close' || method === 'toggle') api[method]();\n }\n }\n}\n"],"names":["t","e","s","o","n$3","r","n","i","S","c","h","a","l","p","d","u","f","b","y$1","y","v","_","m","g","$","x","w","A","C","P","V","N","I","L","z","H","M","R","k","Z","j","B","D","_a","SDK_VERSION","CODES","RETRYABLE","toChatError","code","message","known","ChatRequestError","error","status","DEFAULT_TTL_MS","normalizeExpiry","expiresAt","now","HttpClient","baseUrl","fetchImpl","path","agentId","customerId","signal","q","sessionId","token","init","response","headers","body","header","fromBody","seconds","SUPPORTED_INTERACTIONS","PRESENTATION_BYTES","RESPONSE_TEXT_CODE_POINTS","RESPONSE_TEXT_BYTES","URL_CHARACTERS","IDENTIFIER","object","value","only","keys","key","codePoints","bytes","hasDisallowedControl","character","hasUrlWhitespaceOrControl","text","maximum","required","canonical","withinPresentationBudget","isProxyImageUrl","isPublicHttpsUrl","url","hostname","isChoicePresentation","ids","typedOptions","option","allowsInput","isButtonsV1Presentation","isCarouselPresentation","allowProxy","item","isCalendarDate","year","month","day","monthDays","isDatePickerPresentation","isInteractionPresentation","pair","isInteractionResponse","statuses","readInteraction","responsePayload","readPublicMessage","interaction","interactionCursor","compareCursors","left","right","mergeItems","current","additions","result","index","row","previous","lifecycleRank","WIRE_ROLES","readWireMessage","id","out","activeOffer","offer","InteractionController","host","fn","items","cut","tail","fromRows","toRows","operation","reason","restore","rows","answer","reconciled","minimumCursor","requestedCursor","requestedOperations","stillUnresolved","scope","snapshot","nextCursor","linked","settled","optimisticIds","order","event","payload","interactionId","legacy","displayText","start","end","messageId","optimistic","prev","parseEnvelope","data","raw","PING_INTERVAL_MS","SILENCE_LIMIT_MS","ROTATE_LEAD_MS","AGENT_INACTIVE_RETRY_MS","BACKOFF_MS","ROTATE_RETRY_MS","CLIENT_ROTATE","MAX_AUTH_CLOSES","TERMINAL_MINT_CODES","browserPage","cb","detach","StreamConnection","opts","frame","off","sep","epoch","minted","rotation","reconnect","old","env","err","delay","fired","cancel","timer","offVisible","offOnline","retry","pingedSinceInbound","wait","ms","VISITOR_KEY","VISITOR_FORMAT","memoryStore","values","browserStore","memory","broken","attempt","fallback","toVisitorId","byte","ephemeralId","getVisitorId","store","random","existing","weak","sessionHintKey","DEFAULT_BASE_URL","AWAITING_REPLY_TIMEOUT_MS","SEND_ACK_TIMEOUT_MS","BUSY_DELAYS_MS","SEEN_EVENT_CAP","QUIET_END_REASONS","uuid","emptyState","ROLE_MAP","Client","run","boot","content","sid","created","listener","visitor","given","generation","first","snap","fresh","local","merge","firstToken","allowInitialReplacement","reuse","initialMint","replaceInitialSession","mint","firstMint","entry","next","predecessor","session","identity","uuidPattern","last","divider","msg","serverId","createdAt","clientId","own","mine","wireRole","role","incoming","clientIds","cid","mode","on","change","terminal","createChatClient","options","LIGHT","DARK","RADII","VAR","cssVar","themeVariables","theme","colors","radius","explicitThemeVariables","full","applied","applyTheme","variables","DEFAULT_STRINGS","warned","warnOnce","name","oneOf","allowed","parseRadius","safeBaseUrl","safeAvatar","parseJsonAttr","parsed","i$1","URL_RE","count","ch","trimUrl","linkify","renderTranscript","state","strings","variants","html","repeat","nothing","live","disabled","stroke","cls","svg","newChatIcon","closeIcon","launcherChatIcon","launcherCloseIcon","sendIcon","leftIcon","rightIcon","osviLogo","renderComposer","ta","bool","_OsviChat","LitElement","client","typed","box","attr","rawColors","source","action","tool","log","avatar","title","el","css","__decorateClass","property","OsviChat","defineOnce","ctor","unsafeCSS","toolStyles","ToolElement","changed","_OsviButtons","chosen","allowInput","placeholder","list","at","step","OsviButtons","_OsviCarousel","delta","length","image","OsviCarousel","toIso","today","parseDate","iso","monthOf","_OsviDatePicker","earliest","days","hint","date","buttons","OsviDatePicker","record","boolean","readConfig","script","global","_OsviChatWidget","OsviChatWidget","GREETING_KEY","SEEN_KEY","BADGE_RECHECK_MS","activeApi","mountWidget","initial","config","unsubscribe","opened","everOpened","lastCheck","checkSequence","previousOverflow","anonymousStore","unread","updateState","seen","eligible","checkUnread","sequence","visibility","resize","escape","api","target","queued","method"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,20,21,22,25]}