@osvi-ai/chat 0.1.0 → 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.
- package/dist/core.js +1 -1
- package/dist/{index-BsRyQwUM.js → index-HWHyM4-l.js} +9 -9
- package/dist/index-HWHyM4-l.js.map +1 -0
- package/dist/types/core/client.d.ts +3 -1
- package/dist/types/ui/icons.d.ts +9 -0
- package/dist/types/ui/osvi-chat.d.ts +1 -0
- package/dist/types/widget/config.d.ts +1 -0
- package/dist/ui.js +103 -43
- package/dist/ui.js.map +1 -1
- package/dist/ui.mjs +363 -287
- package/dist/ui.mjs.map +1 -1
- package/dist/widget.js +129 -56
- package/dist/widget.js.map +1 -1
- package/package.json +2 -2
- package/dist/index-BsRyQwUM.js.map +0 -1
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.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/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"],"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(): Promise<boolean>;\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(): 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 (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 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', 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>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>${strings.sendFailed}</span><button type=\"button\" @click=${() => retry(item.id)}>${strings.retry}</button>` : 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>${strings.emptyState}</p>`}${state.awaitingReply ? html`<p aria-label=${strings.typing}>${strings.typing}<span aria-hidden=\"true\"> •••</span></p>` : 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 { html } from 'lit';\nimport { live } from 'lit/directives/live.js';\nimport type { ChatStrings } from '../strings';\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 aria-label=\"Message\" placeholder=${o.placeholder} .value=${live(o.draft)} ?disabled=${o.disabled} @input=${o.input} @keydown=${(e: KeyboardEvent) => { if (e.key === 'Enter' && !e.shiftKey && !e.isComposing && !o.disabled) { e.preventDefault(); o.send(); } }}></textarea><button type=\"button\" aria-label=${o.strings.send} ?disabled=${o.disabled || !o.draft.trim()} @click=${o.send}>${o.strings.send}</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';\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 { display:flex; flex-direction:column; height:100%; min-height:260px; color:var(--osvi-color-text,#18181b); background:var(--osvi-color-background,#fff); font:14px/1.5 system-ui,sans-serif; border-radius:var(--osvi-radius,10px); overflow:hidden; }\n header { display:flex; align-items:center; gap:10px; padding:14px; border-bottom:1px solid var(--osvi-color-surface,#f4f4f5); } header img { width:36px; height:36px; border-radius:50%; } .heading { flex:1; } h2,p { margin:0; } h2 { font-size:16px; } small { display:block; }\n .transcript { flex:1; overflow:auto; padding:16px; min-height:0; } .bubble { width:fit-content; max-width:85%; padding:10px 14px; margin:8px 0; border-radius:var(--osvi-radius,10px); background:var(--osvi-color-assistant-bubble,#f4f4f5); overflow-wrap:anywhere; white-space:pre-wrap; } .user { margin-left:auto; color:#fff; background:var(--osvi-color-user-bubble,#4f46e5); } .bubble a { color:inherit; } .divider { text-align:center; } .status { padding:0 14px; } .composer { display:flex; gap:8px; padding:14px; } textarea { flex:1; resize:vertical; min-width:0; } button,textarea { font:inherit; } button { cursor:pointer; } button:disabled { cursor:default; } footer { padding:0 14px 10px; text-align:center; } footer a { color:inherit; } osvi-buttons,osvi-carousel,osvi-date-picker { display:block; margin:8px 0; }\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: 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 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 return html`<header>${avatar ? html`<img src=${avatar} alt=\"\" referrerpolicy=\"no-referrer\">` : nothing}<div class=\"heading\"><h2>${this.headerTitle ?? this.header.title ?? s.agent?.name ?? strings.defaultTitle}</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\" ?disabled=${!client || this.sessionBusy} @click=${() => client && !this.sessionBusy && void this.run(() => client.newSession())}>${strings.newChat}</button>` : nothing}\n ${this.closable ? html`<button type=\"button\" aria-label=${strings.closeChat} @click=${() => this.dispatchEvent(new CustomEvent('osvi-close', { bubbles: true, composed: true }))}>×</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\">${strings.poweredBy}</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';\nexport const toolStyles = css`\n :host { display: block; font: inherit; color: ${unsafeCSS(cssVar('text'))}; background: ${unsafeCSS(cssVar('background'))}; }\n * { box-sizing: border-box; }\n button { font: inherit; color: inherit; background: ${unsafeCSS(cssVar('surface'))}; border: 1px solid currentColor; border-radius: var(--osvi-radius, 10px); padding: 10px 14px; cursor: pointer; }\n button:focus-visible { outline: 3px solid ${unsafeCSS(cssVar('primary'))}; outline-offset: 3px; }\n button:disabled { opacity: .5; cursor: default; }\n button[aria-pressed=\"true\"] { outline: 2px solid ${unsafeCSS(cssVar('primary'))}; }\n small { display: block; }\n .chips { display: flex; flex-wrap: wrap; gap: 8px; }\n .list { display: grid; gap: 6px; }\n .list button { width: 100%; text-align: left; }\n .card { background: ${unsafeCSS(cssVar('surface'))}; border-radius: var(--osvi-radius, 10px); padding: 12px; }\n .image { aspect-ratio: 16 / 9; display: grid; place-items: center; overflow: hidden; }\n .image img { width: 100%; height: 100%; object-fit: cover; }\n .navigation { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 10px 0; }\n .days, .weekdays { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; text-align: center; }\n .days button { padding: 8px 0; }\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';\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>${p.label}</p>${p.description ? html`<p>${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>${o.label}</span>${o.description ? html`<small>${o.description}</small>` : nothing}</button>`)}\n </div>` : chosen ? html`<p>${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';\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>${p.label}</p>${p.description ? html`<p>${p.description}</p>` : nothing}\n ${!this.live ? chosen ? html`<p>${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\" aria-label=\"Previous card\" ?disabled=${this.index === 0} @click=${() => this.navigate(-1, p.items.length)}>Previous</button>\n <span aria-live=\"polite\">${this.index + 1} of ${p.items.length}</span>\n <button type=\"button\" aria-label=\"Next card\" ?disabled=${this.index === p.items.length - 1} @click=${() => this.navigate(1, p.items.length)}>Next</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 <h3>${item.title}</h3>${item.description ? html`<p>${item.description}</p>` : nothing}\n <button type=\"button\" @click=${(e: MouseEvent) => this.select(e, item.id)}>${item.action_label ?? 'Select'}</button></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';\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>${p.label}</p>${p.description ? html`<p>${p.description}</p>` : nothing}${chosen ? html`<p>${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 return html`<p>${p.label}</p>${p.description ? html`<p>${p.description}</p>` : nothing}\n <div class=\"navigation\"><button type=\"button\" aria-label=\"Previous month\" ?disabled=${this.month <= monthOf(earliest)} @click=${() => this.moveMonth(-1, p)}>Previous</button>\n <span aria-live=\"polite\">${first.toLocaleDateString(undefined, { month: 'long', year: 'numeric' })}</span>\n <button type=\"button\" aria-label=\"Next month\" ?disabled=${!!p.max_date && this.month >= monthOf(p.max_date)} @click=${() => this.moveMonth(1, p)}>Next</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\" 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 aria-live=\"polite\">${hint}</p>\n <button type=\"button\" ?disabled=${!this.start || p.selection_mode === 'range' && (!this.end || this.start >= this.end)} @click=${() => this.confirm(p)}>${p.confirm_label ?? 'Confirm date'}</button>`;\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"],"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","E","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","w","URL_RE","count","ch","trimUrl","linkify","renderTranscript","state","strings","variants","html","repeat","nothing","live","disabled","renderComposer","bool","_OsviChat","LitElement","client","typed","attr","rawColors","source","action","tool","log","avatar","el","css","__decorateClass","property","OsviChat","defineOnce","ctor","toolStyles","unsafeCSS","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"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,20,21,22,25]}
|
|
1
|
+
{"version":3,"file":"ui.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"],"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"],"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","E","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","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"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,20,21,22,25]}
|