@osvi-ai/chat 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1 -3
- package/dist/core.js +10 -0
- package/dist/core.js.map +1 -0
- package/dist/index-BsRyQwUM.js +1331 -0
- package/dist/index-BsRyQwUM.js.map +1 -0
- package/dist/types/core/client.d.ts +65 -0
- package/dist/types/core/connection.d.ts +78 -0
- package/dist/types/core/errors.d.ts +14 -0
- package/dist/types/core/http.d.ts +38 -0
- package/dist/types/core/index.d.ts +7 -0
- package/dist/types/core/interactions.d.ts +50 -0
- package/dist/types/core/protocol/envelope.d.ts +2 -0
- package/dist/types/core/protocol/readers.d.ts +14 -0
- package/dist/types/core/protocol/types.d.ts +118 -0
- package/dist/types/core/protocol/validators.d.ts +10 -0
- package/dist/types/core/state.d.ts +23 -0
- package/dist/types/core/storage.d.ts +10 -0
- package/dist/types/core/version.d.ts +1 -0
- package/dist/types/ui/define.d.ts +1 -0
- package/dist/types/ui/index.d.ts +9 -0
- package/dist/types/ui/osvi-chat.d.ts +69 -0
- package/dist/types/ui/panel/attrs.d.ts +6 -0
- package/dist/types/ui/panel/composer.d.ts +10 -0
- package/dist/types/ui/panel/linkify.d.ts +7 -0
- package/dist/types/ui/panel/transcript.d.ts +4 -0
- package/dist/types/ui/strings.d.ts +27 -0
- package/dist/types/ui/styles.d.ts +1 -0
- package/dist/types/ui/theme.d.ts +22 -0
- package/dist/types/ui/tools/base.d.ts +14 -0
- package/dist/types/ui/tools/osvi-buttons.d.ts +10 -0
- package/dist/types/ui/tools/osvi-carousel.d.ts +16 -0
- package/dist/types/ui/tools/osvi-date-picker.d.ts +17 -0
- package/dist/types/widget/config.d.ts +22 -0
- package/dist/types/widget/index.d.ts +1 -0
- package/dist/types/widget/launcher.d.ts +35 -0
- package/dist/types/widget/widget.d.ts +13 -0
- package/dist/ui.js +49 -0
- package/dist/ui.js.map +1 -0
- package/dist/ui.mjs +570 -0
- package/dist/ui.mjs.map +1 -0
- package/dist/widget.js +59 -0
- package/dist/widget.js.map +1 -0
- package/package.json +60 -4
package/dist/ui.js.map
ADDED
|
@@ -0,0 +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]}
|