@gengage/assistant-fe 0.6.34 → 0.6.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chat-runtime.js +1 -1
- package/dist/chat.iife.js +1 -1
- package/dist/chat.js +1 -1
- package/dist/common/index.d.ts +2 -1
- package/dist/{common-CB1Vjd-T.js → common-C-lXfS-s.js} +1 -1
- package/dist/common.js +68 -67
- package/dist/{connection-warning-DBE8pkFv.js → connection-warning-DrXU9qN9.js} +1 -1
- package/dist/{fastIntent-D9jYpC8V.js → fastIntent-Diz6Vo0W.js} +1 -1
- package/dist/index.js +21 -21
- package/dist/native.iife.js +1 -1
- package/dist/qna-runtime.js +1 -1
- package/dist/qna.iife.js +1 -1
- package/dist/qna.js +1 -1
- package/dist/request-response-cache-DmnzO4Hu.js +1426 -0
- package/dist/{runtime-By-msZ8j.js → runtime-CiO-HX8B.js} +198 -199
- package/dist/{runtime-DyG44pqo.js → runtime-D0v-KyzN.js} +36 -37
- package/dist/{runtime-CABcQc-L.js → runtime-hci1VRsa.js} +8 -9
- package/dist/{simbut-CsQSH5vN.js → simbut-D-IPkTT8.js} +1 -1
- package/dist/simbut.iife.js +1 -1
- package/dist/simbut.js +1 -1
- package/dist/{simrel-bxdmsMmZ.js → simrel-BjMCvCdo.js} +1 -1
- package/dist/simrel-runtime.js +1 -1
- package/dist/simrel.iife.js +1 -1
- package/dist/simrel.js +2 -2
- package/dist/{widget-base-C_RZ-VIr.js → widget-base-_HBDf5VH.js} +1 -1
- package/package.json +3 -19
- package/dist/agent-ui-steps-DIWmTMuV.js +0 -3199
- package/dist/agentic/adaptor/create-adaptor.d.ts +0 -22
- package/dist/agentic/adaptor/fetch-bridge.d.ts +0 -31
- package/dist/agentic/adaptor/mount.d.ts +0 -45
- package/dist/agentic/algos/similarity.d.ts +0 -86
- package/dist/agentic/algos/similarity.js +0 -261
- package/dist/agentic/context/chat-context.d.ts +0 -17
- package/dist/agentic/context/context-store.d.ts +0 -57
- package/dist/agentic/context/persistence.d.ts +0 -14
- package/dist/agentic/contracts/agentic-contracts.d.ts +0 -133
- package/dist/agentic/debug/activity-collector.d.ts +0 -15
- package/dist/agentic/debug/activity-instrumentation.d.ts +0 -22
- package/dist/agentic/debug/activity-overlay.d.ts +0 -3
- package/dist/agentic/debug/activity-state.d.ts +0 -37
- package/dist/agentic/debug/local-dev.d.ts +0 -18
- package/dist/agentic/events/builders.d.ts +0 -10
- package/dist/agentic/events/comparison.d.ts +0 -6
- package/dist/agentic/events/context-products.d.ts +0 -6
- package/dist/agentic/events/error-taxonomy.d.ts +0 -27
- package/dist/agentic/events/product-normalize.d.ts +0 -50
- package/dist/agentic/events/ui-specs.d.ts +0 -41
- package/dist/agentic/flow/create-flow.d.ts +0 -2
- package/dist/agentic/flow/dispatch.d.ts +0 -3
- package/dist/agentic/index.d.ts +0 -65
- package/dist/agentic/index.js +0 -3493
- package/dist/agentic/types.d.ts +0 -360
- package/dist/agentic/util/account-config.d.ts +0 -8
- package/dist/agentic/util/assistant-host.d.ts +0 -11
- package/dist/agentic/util/be-url.d.ts +0 -4
- package/dist/agentic/util/browser-memory.d.ts +0 -13
- package/dist/agentic/util/browser-tools.d.ts +0 -31
- package/dist/agentic/util/cache-key.d.ts +0 -15
- package/dist/agentic/util/common/declarative-cache.d.ts +0 -21
- package/dist/agentic/util/common/fallback-status.d.ts +0 -10
- package/dist/agentic/util/common/flow-steps.d.ts +0 -8
- package/dist/agentic/util/common/gss-tool-aliases.d.ts +0 -66
- package/dist/agentic/util/common/iframe-scraper.d.ts +0 -22
- package/dist/agentic/util/common/llm-routing.d.ts +0 -50
- package/dist/agentic/util/common/object.d.ts +0 -1
- package/dist/agentic/util/common/open-product-page.d.ts +0 -30
- package/dist/agentic/util/common/panel-context.d.ts +0 -3
- package/dist/agentic/util/common/privacy.d.ts +0 -14
- package/dist/agentic/util/common/product-resolver.d.ts +0 -20
- package/dist/agentic/util/common/product-surface.d.ts +0 -24
- package/dist/agentic/util/common/ref-store.d.ts +0 -15
- package/dist/agentic/util/common/retail-privacy.d.ts +0 -4
- package/dist/agentic/util/common/route-params.d.ts +0 -3
- package/dist/agentic/util/common/similarity-ranking.d.ts +0 -2
- package/dist/agentic/util/common/site-awareness.d.ts +0 -130
- package/dist/agentic/util/lazy-runtime-loader.d.ts +0 -10
- package/dist/agentic/util/privacy.d.ts +0 -12
- package/dist/agentic/util/request-text.d.ts +0 -3
- package/dist/agentic/util/time.d.ts +0 -2
- package/dist/agentic/widgets/endpoints.d.ts +0 -12
- package/dist/agentic/worker/agent-ui-steps.d.ts +0 -43
- package/dist/agentic/worker/agent-ui.d.ts +0 -44
- package/dist/agentic/worker/be-client.d.ts +0 -32
- package/dist/agentic/worker/coalesce.d.ts +0 -25
- package/dist/agentic/worker/compaction.d.ts +0 -12
- package/dist/agentic/worker/entry.d.ts +0 -2
- package/dist/agentic/worker/flow-runner.d.ts +0 -24
- package/dist/agentic/worker/jwt-mint.d.ts +0 -21
- package/dist/agentic/worker/pdp-hydrate.d.ts +0 -30
- package/dist/agentic/worker/rpc.d.ts +0 -47
- package/dist/agentic/worker/tool-bridge.d.ts +0 -2
- package/dist/agentic/worker/tool-schema.d.ts +0 -19
- package/dist/agentic/worker.d.ts +0 -52
- package/dist/agentic/worker.js +0 -432
- package/dist/agentic.iife.js +0 -445
- package/dist/api-paths-DZQ4Xx7u.js +0 -1274
- package/dist/request-response-cache-BxRsKGJ0.js +0 -154
package/dist/agentic.iife.js
DELETED
|
@@ -1,445 +0,0 @@
|
|
|
1
|
-
(function(d){Object.defineProperty(d,Symbol.toStringTag,{value:"Module"});var Co=120*1e3,Po="gengage-agentic-ref";function pr({namespace:e=Po,ttlMs:t=Co,maxEntries:r=100}={}){const n=new Map;async function o(l,u={}){c();const f=Ro(),m=u.kind||"pageRef",p={kind:m,value:l,expiresAt:Date.now()+(u.ttlMs||t)};for(n.set(f,p);n.size>r;)n.delete(n.keys().next().value);return await jo(e,f,p),{kind:m,id:f}}async function i(l){const u=typeof l=="string"?l:l?.id;if(!u)return;const f=n.get(u)||await Io(e,u);if(f){if(f.expiresAt<=Date.now()){n.delete(u),await gr(e,u);return}return n.set(u,f),f.value}}async function a(l){const u=typeof l=="string"?l:l?.id;u&&(n.delete(u),await gr(e,u))}async function s(l){if(mr(l))return i(l);if(Array.isArray(l))return Promise.all(l.map(f=>s(f)));if(!l||typeof l!="object")return l;const u=await Promise.all(Object.entries(l).map(async([f,m])=>[f,await s(m)]));return Object.fromEntries(u)}function c(){const l=Date.now();for(const[u,f]of n.entries())f.expiresAt<=l&&n.delete(u)}return{put:o,get:i,delete:a,materialize:s,cleanup:c}}function mr(e){return!!(e&&typeof e=="object"&&typeof e.kind=="string"&&typeof e.id=="string")}function Ro(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}async function jo(e,t,r){const n=await nt(e);n&&(await Be(n.transaction("refs","readwrite").objectStore("refs").put(r,t)),n.close())}async function Io(e,t){const r=await nt(e);if(!r)return;const n=await Be(r.transaction("refs","readonly").objectStore("refs").get(t));return r.close(),n}async function gr(e,t){const r=await nt(e);r&&(await Be(r.transaction("refs","readwrite").objectStore("refs").delete(t)),r.close())}async function nt(e){if(!globalThis.indexedDB)return null;try{const t=globalThis.indexedDB.open(e,1);return t.onupgradeneeded=()=>{t.result.createObjectStore("refs")},await Be(t)}catch{return null}}function Be(e){return new Promise((t,r)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>r(e.error)})}function Lo(e){return!!e&&typeof e=="object"&&e.type==="rpc.req"}function Oo({worker:e,tools:t={},beacon:r,confirmation:n,memory:o=it(),refStore:i}){e.addEventListener("message",a=>{const s=a.data;Lo(s)&&Bo(e,s,{tools:t,beacon:r,confirmation:n,memory:o,refStore:i})})}async function Bo(e,t,r){try{const n=await hr(t.method,t.payload,r);e.postMessage({type:"rpc.result",rpcId:t.rpcId,ok:!0,value:n})}catch(n){e.postMessage({type:"rpc.result",rpcId:t.rpcId,ok:!1,error:{message:n instanceof Error?n.message:String(n)}})}}var ot=new Map,yr=null;function it(){try{if(typeof sessionStorage<"u")return sessionStorage}catch{}return{getItem:e=>ot.get(e)??null,setItem:(e,t)=>{ot.set(e,t)},removeItem:e=>{ot.delete(e)}}}function Mo(){return yr||=pr(),yr}function No(e){if(e&&typeof e=="object"&&typeof e.name=="string")return e;throw new Error("tool.invoke requires { name, input }")}function $o(e){if(e&&typeof e=="object"&&e.key!==void 0)return e;throw new Error("memory.get requires { key }")}function Fo(e){if(e&&typeof e=="object"&&e.key!==void 0)return e;throw new Error("memory.set requires { key }")}function qo(e){if(e&&typeof e=="object"&&e.key!==void 0)return e;throw new Error("memory.remove requires { key }")}function Uo(e){return!e||typeof e!="object"?{value:e}:e}function Do(e){const t=typeof e.kind=="string"&&e.kind.trim()?e.kind.trim():void 0,r=typeof e.ttlMs=="number"&&Number.isFinite(e.ttlMs)&&e.ttlMs>0?e.ttlMs:void 0;return t||r?{...t?{kind:t}:{},...r?{ttlMs:r}:{}}:void 0}function at(e){if(e==null)return"session";if(e==="volatile"||e==="session"||e==="local"||e==="indexedDb")return e;if(typeof e=="string"){const t=e.toLowerCase();if(t==="indexeddb"||t==="idb")return"indexedDb"}throw new Error(`Unsupported memory tier: ${String(e)}`)}function st(e){return typeof e.getItem=="function"&&typeof e.setItem=="function"}function ct(e){return typeof e.get=="function"&&typeof e.set=="function"}function lt(e){return typeof e.accountId=="string"&&!!e.session&&!!e.indexedDb}function zo(e){const t=e.options?.ttlMs??e.ttlMs;return typeof t=="number"&&Number.isFinite(t)&&t>0?{ttlMs:t}:void 0}async function Go(e,t,r){if(st(e)){const n=e.getItem(r);if(!n)return null;try{return JSON.parse(n)}catch{return e.removeItem?.(r),null}}return ct(e)&&!lt(e)?await e.get(t,r)??null:await e[t].get(r)??null}async function Ho(e,t,r,n,o){return st(e)?(e.setItem(r,JSON.stringify(n??null)),!0):ct(e)&&!lt(e)?await e.set(t,r,n??null,o)!==!1:await e[t].set(r,n??null,o)!==!1}async function Vo(e,t,r){return st(e)?(e.removeItem?.(r),!0):ct(e)&&!lt(e)?e.remove?(await e.remove(t,r),!0):!1:(await e[t].remove(r),!0)}async function hr(e,t,{tools:r,beacon:n,confirmation:o,memory:i,refStore:a}){if(e==="tool.invoke"){const{name:s,input:c}=No(t),l=r[s];if(typeof l!="function")throw new Error(`Unknown tool: ${s}`);return l(c)}if(e==="beacon.send")return n?.(t),{sent:!0};if(e==="confirmation.request"){if(typeof o!="function")throw new Error("No confirmation handler is configured.");const s=await o(t);return typeof s=="boolean"?{confirmed:s}:s}if(e==="memory.get"){const{key:s,tier:c}=$o(t);return Go(i,at(c),String(s))}if(e==="memory.set"){const s=Fo(t);return{ok:await Ho(i,at(s.tier),String(s.key),s.value,zo(s))}}if(e==="memory.remove"){const{key:s,tier:c}=qo(t);return{ok:await Vo(i,at(c),String(s))}}if(e==="ref.put"){const s=Me({tools:r,beacon:n,confirmation:o,memory:i,refStore:a}),c=Uo(t);return s.put(c.value,Do(c))}if(e==="ref.get")return Me({tools:r,beacon:n,confirmation:o,memory:i,refStore:a}).get(t);if(e==="ref.materialize")return Me({tools:r,beacon:n,confirmation:o,memory:i,refStore:a}).materialize(t);if(e==="ref.remove")return await Me({tools:r,beacon:n,confirmation:o,memory:i,refStore:a}).delete(t),{ok:!0};throw new Error(`Unknown RPC method: ${e}`)}function Me(e){const t=e.refStore||Mo();if(!t||typeof t.put!="function"||typeof t.get!="function")throw new Error("No ref store is configured.");return t}function br(){return new Date().toISOString()}function q(e){return Math.max(0,Math.round(performance.now()-e))}function we(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ko(e){const{accountId:t,locale:r="en-GB",parentUrl:n="",threadId:o,incomingContext:i,messageLimit:a}=e,s=we(i)?i:{},c=we(s.thread)?s.thread:{},l=we(s.panel)?s.panel:{},u=we(s.meta)?s.meta:{},f=kr(s.messages,a),m={id:String(o||c.id||self.crypto.randomUUID()),started_at:String(c.started_at||br()),extensions:we(c.extensions)?{...c.extensions}:{}},p=String(u.locale||r),y=String(u.parentUrl||n||typeof self<"u"&&self.location?.href||"");return{panel:{...l},messages:f,thread:m,meta:{locale:p,parentUrl:y,accountId:t}}}function wr(e,t,r){const n=kr([t],r)[0];return n?{...e,messages:Ne([...e.messages,n],r)}:e}function Ne(e,t){const r=Wo(t);return r===1/0?[...e]:e.slice(-r)}function kr(e,t){return Array.isArray(e)?Ne(e.map(r=>{const n=r?.role;return{role:n==="model"?"assistant":typeof n=="string"?n:"",content:String(r?.content||"")}}).filter(r=>(r.role==="user"||r.role==="assistant"||r.role==="tool_result")&&(r.role==="tool_result"||!!r.content)),t):[]}function Wo(e){if(e===void 0)return 50;if(!Number.isFinite(e))return 1/0;const t=Math.floor(e);return t>0?t:50}var Jo="gengage:agent:context:";async function Zo({accountId:e,threadId:t,rpc:r}){const n=await r("memory.get",{tier:"session",key:ut(e,t)});return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}async function Yo({accountId:e,threadId:t,extensions:r,panel:n,rpc:o}){await o("memory.set",{tier:"session",key:ut(e,t),value:{thread:{extensions:r},...n&&Object.keys(n).length>0?{panel:n}:{}}})}function ut(e,t){return`${Jo}${e}:${t}`}function P(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var Qo="gengage_agentic_savepoints",$e="savepoints",_r=3600*1e3,Xo=1,Sr=class{#e=new Map;#i=new Map;#t;#l;#u;#a;#d;#f;#o;#s;#c;#r=new Map;constructor({accountId:e,locale:t,parentUrl:r,rpc:n,persistentPanelKeys:o=[],panelKeyLimits:i={},messageLimit:a,maxThreads:s,threadTtlMs:c}){this.#t=e,this.#l=t,this.#u=r,this.#a=n,this.#d=[...new Set(o.filter(Boolean))],this.#f=ri(i),this.#o=pt(a),this.#s=pt(s),this.#c=pt(c)}get size(){return this.pruneExpired(),this.#e.size}get(e="default"){this.pruneExpired();const t=String(e||"default"),r=this.#e.get(t);return r?(this.#n(t,r),r):null}getPanel(e="default"){return this.get(e)?.panel??null}getRecentProducts(e="default",t="last_search_products"){const r=this.getPanel(e)?.[t];return Array.isArray(r)?r:[]}async load(e){this.pruneExpired();const t=e?.session_id||e?.meta?.threadId||e?.sessionId,r=String(t||"default"),n=this.#e.get(r);if(n){const a=ii(n,e?.context,this.#o);return this.#n(r,a),a}const o=await Zo({accountId:this.#t,threadId:r,rpc:this.#a}),i=Ko({accountId:this.#t,locale:e?.locale||this.#l,parentUrl:this.#u,threadId:r,incomingContext:oi(o,e?.context),messageLimit:this.#o});return this.#n(r,i),this.#m(),i}patch(e,t){this.pruneExpired();const r=String(e||"default"),n=this.#e.get(r);if(!n)return null;const o=mt(n,typeof t=="function"?t(n):t,this.#o);return this.#n(r,o),o}appendUserMessage(e,t){this.pruneExpired();const r=String(e||"default");if(!t)return this.#e.get(r)??null;const n=this.#e.get(r);if(!n)return null;const o=wr(n,{role:"user",content:t},this.#o);return this.#n(r,o),o}appendToolResult(e,t){this.pruneExpired();const r=String(e||"default"),n=this.#e.get(r);if(!n)return null;const o=wr(n,{role:"tool_result",content:String(t?.content||""),...t?.name?{name:String(t.name)}:{},...t?.details!==void 0?{details:t.details}:{}},this.#o);return this.#n(r,o),o}async commit(e){this.pruneExpired();const t=String(e||"default"),r=this.#e.get(t);return r?(this.#n(t,r),await Yo({accountId:this.#t,threadId:t,extensions:r.thread.extensions,panel:ti(r.panel,this.#d,this.#f),rpc:this.#a}),r):null}delete(e){const t=String(e||"default");return this.#i.delete(t),this.#r.delete(t),this.#e.delete(t)}clear(){this.#e.clear(),this.#i.clear(),this.#r.clear()}enqueueSteer(e,t,r="all"){this.#p(e,"steer",t,r)}enqueueFollowUp(e,t,r="all"){this.#p(e,"follow_up",t,r)}drainPending(e,t){const r=String(e||"default"),n=this.#r.get(r);if(!n||!n.length)return null;const o=n.findIndex(a=>a.kind===t);if(o<0)return null;const[i]=n.splice(o,1);return n.length||this.#r.delete(r),i||null}peekPending(e="default"){const t=String(e||"default"),r=this.#r.get(t);return r?[...r]:[]}#p(e,t,r,n){const o=String(r||"").trim();if(!o)return;const i=String(e||"default"),a=this.#r.get(i)||[];if(n==="one-at-a-time")for(let s=a.length-1;s>=0;s-=1)a[s].kind===t&&a.splice(s,1);a.push({kind:t,text:o,enqueuedAt:Date.now()}),this.#r.set(i,a)}async savepoint(e,t,r){if(!e||typeof t!="number"||!Number.isFinite(t))return;const n={threadId:e,turnIndex:t,payload:r,createdAt:Date.now()};try{await ft(this.#t,"readwrite",o=>{o.put(n,dt(e,t))})}catch{}}async restoreSavepoint(e,t){if(!e)return null;try{let r=null;return await ft(this.#t,"readonly",n=>{const o=typeof t=="number"?dt(e,t):null;if(o!==null){const i=n.get(o);i.onsuccess=()=>{const a=i.result;a&&Date.now()-a.createdAt<_r&&(r=a)}}else{const i=n.openCursor(null,"prev");i.onsuccess=()=>{const a=i.result;if(!a||r)return;const s=a.value;if(s.threadId!==e){a.continue();return}Date.now()-s.createdAt<_r&&(r=s)}}}),r}catch{return null}}async clearSavepoint(e,t){if(e)try{await ft(this.#t,"readwrite",r=>{if(typeof t=="number"){r.delete(dt(e,t));return}const n=r.openCursor();n.onsuccess=()=>{const o=n.result;o&&(o.value.threadId===e&&o.delete(),o.continue())}})}catch{}}pruneExpired(e=Date.now()){if(!this.#c)return 0;let t=0;for(const[r,n]of this.#i)e-n<=this.#c||(this.#i.delete(r),this.#e.delete(r)&&(t+=1));return t}#n(e,t){this.#e.delete(e),this.#e.set(e,t),this.#i.set(e,Date.now())}#m(){if(this.#s)for(;this.#e.size>this.#s;){const e=this.#e.keys().next().value;if(!e)return;this.delete(e)}}};function dt(e,t){return`${e}|${t}`}function ei(){return(typeof self<"u"?self:globalThis)?.indexedDB||null}async function ft(e,t,r){const n=ei();if(!n)return;const o=`${Qo}_${e}`;await new Promise((i,a)=>{const s=n.open(o,Xo);s.onupgradeneeded=()=>{const c=s.result;c.objectStoreNames.contains($e)||c.createObjectStore($e)},s.onerror=()=>a(s.error||new Error("savepoint:open_failed")),s.onsuccess=()=>{const c=s.result;try{const l=c.transaction($e,t);r(l.objectStore($e)),l.oncomplete=()=>{c.close(),i()},l.onerror=()=>{c.close(),a(l.error||new Error("savepoint:tx_failed"))},l.onabort=()=>{c.close(),a(l.error||new Error("savepoint:tx_aborted"))}}catch(l){c.close(),a(l instanceof Error?l:new Error(String(l)))}}})}function ti(e,t,r){if(!t.length||!P(e))return;const n={};for(const o of t)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=ni(e[o],r[o]));return n}function ri(e){const t={};for(const[r,n]of Object.entries(e||{})){const o=Math.floor(Number(n));r&&Number.isFinite(o)&&o>0&&(t[r]=o)}return t}function pt(e){if(e===void 0)return;const t=Math.floor(Number(e));return Number.isFinite(t)&&t>0?t:void 0}function ni(e,t){return!t||!Array.isArray(e)?e:e.slice(-t)}function oi(e,t){if(!P(e)&&!P(t))return{};const r=P(e)?e:{},n=mt(r,P(t)?t:{});return P(r.panel)&&(n.panel=r.panel),n}function ii(e,t,r){if(!P(t))return e;const n=mt(e,t,r);return{...n,panel:e.panel,thread:{...n.thread,id:e.thread.id,started_at:e.thread.started_at},meta:{...n.meta,accountId:e.meta.accountId}}}function mt(e,t,r){if(!P(t))return e;const n=e,o=t,i=P(n.panel)?n.panel:{},a=P(o.panel)?o.panel:{},s=P(n.thread)?n.thread:{},c=P(o.thread)?o.thread:{},l=P(s.extensions)?s.extensions:{},u=P(c.extensions)?c.extensions:{},f=P(n.meta)?n.meta:{},m=P(o.meta)?o.meta:{};return{...e,...t,panel:{...i,...a},thread:{...s,...c,extensions:{...l,...u}},meta:{...f,...m},messages:Array.isArray(o.messages)?Ne(o.messages,r):e.messages??[]}}function vr(e){const t=String.fromCharCode(...e);return btoa(t).replace(/\+/gu,"-").replace(/\//gu,"_").replace(/=+$/u,"")}function Ar(e){return vr(new TextEncoder().encode(JSON.stringify(e)))}async function ai({accountId:e,devJwtSecret:t,ttlS:r=300}){if(!t)throw new Error("devJwtSecret is required for local agent mode.");const n=Math.floor(Date.now()/1e3),o=`${Ar({alg:"HS256",typ:"JWT"})}.${Ar({sub:e,iat:n,exp:n+r,scope:"invoke",jti:crypto.randomUUID?.()||`${n}-${Math.random()}`})}`,i=await crypto.subtle.importKey("raw",new TextEncoder().encode(t),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),a=await crypto.subtle.sign("HMAC",i,new TextEncoder().encode(o));return`${o}.${vr(new Uint8Array(a))}`}function gt({accountId:e,devJwtSecret:t,tokenBrokerUrl:r,tokenBrokerAudience:n,refreshSkewS:o=30,fetchImpl:i=fetch}){let a=null;return async({signal:s,parentUrl:c}={})=>{if(t)return ai({accountId:e,devJwtSecret:t});if(!r)throw new Error("tokenBrokerUrl is required for production agent mode.");const l=Math.floor(Date.now()/1e3);return a?.token&&a.expiresAtS-o>l||(a=await si({accountId:e,tokenBrokerUrl:r,tokenBrokerAudience:n,parentUrl:c,signal:s,fetchImpl:i})),a.token}}async function si({accountId:e,tokenBrokerUrl:t,tokenBrokerAudience:r,parentUrl:n,signal:o,fetchImpl:i}){const a=await i(t,{method:"POST",credentials:"include",headers:{accept:"application/json","content-type":"application/json"},body:JSON.stringify({accountId:e,scope:"invoke",audience:r||void 0,parentUrl:n||void 0}),...o?{signal:o}:{}});if(!a.ok)throw new Error(`Token broker request failed (${a.status}).`);const s=await a.json(),c=s?.token||s?.jwt||s?.access_token;if(!c||typeof c!="string")throw new Error("Token broker response did not include a JWT.");return{token:c,expiresAtS:ci(s)||li(c)||Math.floor(Date.now()/1e3)+300}}function ci(e){const t=e?.expiresAtS??e?.expires_at_s??e?.expiresInS??e?.expires_in_s;if(Number.isFinite(t))return Number(t);const r=e?.expiresIn??e?.expires_in;if(Number.isFinite(r))return Math.floor(Date.now()/1e3)+Number(r);const n=e?.expiresAt??e?.expires_at;if(typeof n=="string"){const o=Date.parse(n);if(Number.isFinite(o))return Math.floor(o/1e3)}return null}function li(e){try{const[,t]=e.split(".");if(!t)return null;const r=t.replace(/-/gu,"+").replace(/_/gu,"/"),n=atob(r.padEnd(Math.ceil(r.length/4)*4,"=")),o=JSON.parse(n);return Number.isFinite(o?.exp)?Number(o.exp):null}catch{return null}}var xr={unauthorized:{code:"auth",message:"Assistant authentication failed. Please retry."},forbidden:{code:"auth",message:"Assistant authentication failed. Please retry."},unknown_op:{code:"op_unavailable",message:"This assistant action is not available yet."},invalid_input:{code:"invalid_request",message:"The assistant request was not valid."},account_config:{code:"account_config",message:"Assistant configuration is unavailable."},upstream_llm:{code:"op_failed",message:"The assistant could not complete that request."},upstream_timeout:{code:"op_timeout",message:"The assistant took too long to respond."},schema_mismatch:{code:"op_failed",message:"The assistant could not complete that request."},rate_limited:{code:"rate_limited",message:"The assistant is receiving too many requests. Please retry shortly."},internal:{code:"op_failed",message:"The assistant could not complete that request."},payload_too_large:{code:"invalid_request",message:"The assistant request was too large."}},M=class extends Error{constructor(e,t,r={}){super(t),this.name="AgentError",this.code=e,this.source=r.source||"agent",r.sourceCode&&(this.sourceCode=r.sourceCode),r.detail!==void 0&&(this.detail=r.detail)}};function yt(e){const t=String(e?.code||"upstream_llm"),r=xr[t]||xr.upstream_llm;return new M(r.code,r.message,{source:"be",sourceCode:t,detail:e?.detail})}function Tr(e,t){const r=t?.error&&typeof t.error=="object"?t.error:{};return yt({code:String(r.code||ui(e)),detail:r.detail})}function Er(e){return e instanceof M?{type:"error",code:e.code,message:e.message}:{type:"error",code:"agent_invoke_failed",message:"The assistant could not complete that request."}}function ui(e){return e===401?"unauthorized":e===403?"forbidden":e===413?"payload_too_large":e===429?"rate_limited":"internal"}var di=7200*1e3,Cr=200,fi=5*1024*1024,pi="gengage_request_response_cache",mi=1,U="responses",gi=new Set(["addToCart","like"]),D=new Map,Pr=null;async function yi(e,t={},r={}){const n=hi(e,t);if(!n)return fetch(e,t);const o=Date.now(),i=await wi(n,o);if(i)return Si(i);const a=await fetch(e,t);return a.ok&&ki(n,a.clone(),o,{ttlMs:r.ttlMs??di,maxEntries:r.maxEntries??Cr,maxBodyBytes:r.maxBodyBytes??fi}),a}function hi(e,t={}){if(typeof Request<"u"&&e instanceof Request)return null;const r=String(t.method||"GET").toUpperCase();return r!=="POST"||typeof t.body!="string"||bi(t.body)?null:`rr:${Pi(Ci({url:String(e),method:r,headers:vi(t.headers),body:t.body}))}`}function bi(e){try{const t=JSON.parse(e);if(!t||typeof t!="object"||Array.isArray(t))return!1;const r=t.type;return typeof r=="string"&&gi.has(r)}catch{return!1}}async function wi(e,t){const r=D.get(e);if(r)if(r.expiresAt<=t)D.delete(e);else return r.lastAccessedAt=t,D.delete(e),D.set(e,r),ht(r),r;const n=await xi(e);return n?n.expiresAt<=t?(D.delete(e),Ti(e),null):(n.lastAccessedAt=t,D.set(e,n),ht(n),Rr(Cr),n):null}async function ki(e,t,r,n){try{const o=await t.text();if(Ri(o)>n.maxBodyBytes||_i(o))return;const i={key:e,status:t.status,statusText:t.statusText,headers:Ai(t.headers),body:o,createdAt:r,expiresAt:r+n.ttlMs,lastAccessedAt:r};D.set(e,i),Rr(n.maxEntries),await ht(i),await Ei(n.maxEntries,r)}catch{}}function _i(e){return/"_error"\s*:/u.test(e)||/"type"\s*:\s*"error"/u.test(e)}function Si(e){return new Response(e.body,{status:e.status,statusText:e.statusText,headers:new Headers(e.headers)})}function vi(e){const t=new Headers(e),r=[];return t.forEach((n,o)=>{const i=o.toLowerCase();i!=="authorization"&&i!=="cookie"&&r.push([i,n])}),r.sort(([n],[o])=>n.localeCompare(o))}function Ai(e){const t=[];return e.forEach((r,n)=>{const o=n.toLowerCase();o!=="set-cookie"&&t.push([o,r])}),t.sort(([r],[n])=>r.localeCompare(n))}function Rr(e){for(;D.size>e;){const t=[...D.values()].sort((r,n)=>r.lastAccessedAt-n.lastAccessedAt)[0];if(!t)break;D.delete(t.key)}}async function Fe(){return typeof indexedDB>"u"?null:(Pr??=new Promise(e=>{const t=indexedDB.open(pi,mi);t.onupgradeneeded=()=>{const r=t.result;r.objectStoreNames.contains(U)||r.createObjectStore(U,{keyPath:"key"}).createIndex("lastAccessedAt","lastAccessedAt",{unique:!1})},t.onsuccess=()=>e(t.result),t.onerror=()=>e(null),t.onblocked=()=>e(null)}),Pr)}async function xi(e){const t=await Fe();return t?new Promise(r=>{const n=t.transaction(U,"readonly"),o=n.objectStore(U).get(e);o.onsuccess=()=>r(o.result??null),o.onerror=()=>r(null),n.onerror=()=>r(null)}):null}async function ht(e){const t=await Fe();t&&await new Promise(r=>{const n=t.transaction(U,"readwrite");n.objectStore(U).put(e),n.oncomplete=()=>r(),n.onerror=()=>r(),n.onabort=()=>r()})}async function Ti(e){const t=await Fe();t&&await new Promise(r=>{const n=t.transaction(U,"readwrite");n.objectStore(U).delete(e),n.oncomplete=()=>r(),n.onerror=()=>r(),n.onabort=()=>r()})}async function Ei(e,t){const r=await Fe();r&&await new Promise(n=>{const o=r.transaction(U,"readwrite"),i=o.objectStore(U),a=[],s=i.openCursor();s.onsuccess=()=>{const c=s.result;if(!c){const l=a.filter(f=>f.expiresAt<=t),u=a.filter(f=>f.expiresAt>t).sort((f,m)=>f.lastAccessedAt-m.lastAccessedAt).slice(0,Math.max(0,a.length-l.length-e));for(const f of[...l,...u])i.delete(f.key);return}a.push(c.value),c.continue()},s.onerror=()=>n(),o.oncomplete=()=>n(),o.onerror=()=>n(),o.onabort=()=>n()})}function Ci(e){return JSON.stringify(bt(e))}function bt(e){return Array.isArray(e)?e.map(bt):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>[t,bt(r)]))}function Pi(e){let t=14695981039346656037n;const r=1099511628211n;for(let n=0;n<e.length;n+=1)t^=BigInt(e.charCodeAt(n)),t=BigInt.asUintN(64,t*r);return t.toString(16).padStart(16,"0")}function Ri(e){return typeof TextEncoder<"u"?new TextEncoder().encode(e).byteLength:e.length}async function ji(e){const{beUrl:t,accountId:r,devJwtSecret:n,tokenBrokerUrl:o,tokenBrokerAudience:i,jwtProvider:a,parentUrl:s,op:c,input:l,cacheTtlS:u,cacheKey:f,cacheFreshness:m,browserCache:p,signal:y,interceptors:h}=e,g=await(a||gt({accountId:r,devJwtSecret:n,tokenBrokerUrl:o,tokenBrokerAudience:i}))({...y?{signal:y}:{},...s?{parentUrl:s}:{}}),{opDomain:b,opName:w}=Ii(c,r);let v={method:"POST",headers:{authorization:`Bearer ${g}`,"content-type":"application/json",accept:"application/x-ndjson"},body:JSON.stringify({op_domain:b,op_name:w,op_payload:l,...u!==void 0?{cache_ttl_s:u}:{},...f!==void 0?{cache_key:f}:{},...m!==void 0?{cache_freshness:m}:{}}),...y?{signal:y}:{}};const _=`${String(t).replace(/\/+$/u,"")}/v1/execute`;if(h?.beforeRequest){const x=await h.beforeRequest(e,{url:_,init:v});if(x&&"cached"in x&&x.cached!==void 0)return x.cached;x?.init&&(v=x.init)}const C=p===!1?await fetch(_,v):await yi(_,v,typeof p=="object"?p:{});if(!C.ok)throw Tr(C.status,await Oi(C));let A=await Bi(C);if(h?.afterResponse){const x=await h.afterResponse(e,A);x&&"result"in x&&x.result!==void 0&&(A=x.result)}return A}function Ii(e,t){if(!e||e.startsWith("-")||e.endsWith("-"))throw new Error(`Invalid BE op name: ${e}`);return{opDomain:Li(t),opName:e}}function Li(e){return e.replace(/-agentic$/u,"")}async function Oi(e){try{return await e.json()}catch{return{error:{code:e.statusText||"internal"}}}}async function Bi(e){const t=e.body?.getReader();if(!t)throw new Error("BE response body is not readable.");const r=new TextDecoder;let n="";const o={};for(;;){const{value:a,done:s}=await t.read();if(s)break;n+=r.decode(a,{stream:!0});let c=n.indexOf(`
|
|
2
|
-
`);for(;c>=0;){const l=n.slice(0,c).trim();n=n.slice(c+1),l&&jr(JSON.parse(l),o),c=n.indexOf(`
|
|
3
|
-
`)}}const i=n.trim();return i&&jr(JSON.parse(i),o),o}function jr(e,t){if(e._error)throw yt(e._error);if(!e._end)for(const[r,n]of Object.entries(e)){if(Object.prototype.hasOwnProperty.call(t,r))throw new M("op_failed",`BE streamed duplicate field "${r}".`,{source:"be",sourceCode:"schema_mismatch"});t[r]=n}}function Mi(e={}){return{type:"metadata",...e}}function Ir(e,t=!1,r={}){return{type:"text_chunk",content:e,final:t,...r}}function Ni(e){return{type:"ui_spec",...e}}function $i(e){return{type:"action",action:e}}function Lr(e,t){return{type:"error",code:e,message:t}}function wt(){return{type:"done"}}function Or(e,t){return e[t?.type||t?.action?.type||"inputText"]||e.inputText}function Br(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function qe(e,t={}){const r=Br(e);if(!r)return null;const n=t.catalogMapper?.(r);if(n)return n;const o=oe(r.sku,r.SKU);if(!o)return null;const i={sku:o,name:oe(r.name,r.title,r.short_name,o)||o,url:oe(r.url)||""},a=Array.isArray(r.images)?r.images:void 0,s=oe(r.imageUrl,r.image_url,r.image,a?.[0]);s&&(i.imageUrl=s),a&&a.length>1&&(i.images=a.filter(b=>!!b).map(String));const c=ke(r.price_discounted),l=ke(r.price),u=c||l;u>0&&(i.price=String(u));const f=c>0?l:0;f>0&&(i.originalPrice=String(f));const m=oe(r.brand);m&&(i.brand=m);const p=ke(r.rating);p>0&&(i.rating=p);const y=ke(r.review_count)||ke(r.reviewCount);y>0&&(i.reviewCount=y);const h=oe(r.cart_code,r.cartCode);h&&(i.cartCode=h),typeof r.in_stock=="boolean"&&(i.inStock=r.in_stock),typeof r.inStock=="boolean"&&(i.inStock=r.inStock);const g=r.category_names;return Array.isArray(g)&&(i.categoryNames=g.map(String)),i}function Ue(e){const t=Br(e);if(!t)return e;const r=t.category_names,n=Array.isArray(r)?r:void 0,o=t.images,i=Array.isArray(o)?o:void 0,a={sku:t.sku,name:t.name||t.title,url:t.url,price:t.price,currency:t.price_currency||t.currency,category:n?.[n.length-1]??void 0,category_names:n?n.slice(0,4):void 0,image:i?i[0]:t.image,in_stock:t.in_stock,rating:t.rating,review_count:t.review_count};for(const s of Object.keys(a))a[s]===void 0&&delete a[s];return a}function Fi(e){return Array.isArray(e)?e.map(Ue).filter(t=>!!t):[]}function oe(...e){for(const t of e)if(typeof t=="string"&&t.trim())return t.trim();return""}function ke(e){const t=Number(e);return Number.isFinite(t)?t:0}function Mr(e){return Array.isArray(e)?e.map(String).filter(Boolean):typeof e=="string"&&e?[e]:[]}function kt(e,t,r={}){return`${e}:${r.version||"v2"}:${ie(t)}`}function qi(e,t={}){return Nr(e).map(r=>$r(typeof r=="string"?r:r.sku,t.locale)).filter(Boolean).filter((r,n,o)=>o.indexOf(r)===n).sort((r,n)=>_t(r,n,t.locale)).slice(0,t.limit||16).join(",")}function Ui(e,t={}){return ie(Nr(e).map(r=>zi(r,t)).filter(r=>!!r).sort((r,n)=>_t(String(r.sku||r.name||""),String(n.sku||n.name||""),t.locale)).slice(0,t.limit||16))}function Di(e,t){return Q(e,t)}function ie(e){let t=2166136261;const r=Gi(e);for(let n=0;n<r.length;n+=1)t^=r.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(36)}function zi(e,t){if(!e||typeof e!="object"||Array.isArray(e))return null;const r=e,n=t.mapProduct?.(r);if(n)return _e(n);const o=Ue(r);return o&&typeof o=="object"&&!Array.isArray(o)?_e(Hi(o,t)):null}function Nr(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"||!!(t&&typeof t=="object"&&!Array.isArray(t))):[]}function Gi(e){return JSON.stringify(_e(e))}function _e(e){return Array.isArray(e)?e.map(_e):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>[t,_e(r)]))}function Hi(e,t){return{sku:$r(e.sku,t.locale),name:Q(e.name,t.locale),url:Q(e.url,t.locale),price:e.price,currency:Q(e.currency,t.locale),category:Q(e.category,t.locale),category_names:Vi(e.category_names,t.locale,16),image:Q(e.image,t.locale),in_stock:e.in_stock,rating:e.rating,review_count:e.review_count}}function $r(e,t){return Q(e,t).toUpperCase()}function Q(e,t){return typeof e=="string"?e.trim().replace(/\s+/gu," ").toLocaleLowerCase(t||void 0):""}function _t(e,t,r){return e.localeCompare(t,r,{numeric:!0})}function Vi(e,t,r){return Array.isArray(e)?e.map(n=>Q(n,t)).filter(Boolean).sort((n,o)=>_t(n,o,t)).slice(0,r):void 0}function Fr(e,t){if(!e)return{ok:!0};const r=[];return St(e,t,"",r),r.length?{ok:!1,error:r[0]||"invalid"}:{ok:!0}}function St(e,t,r,n){if(e){if(Array.isArray(e.enum)&&!e.enum.includes(t)){n.push(`${r||"value"} must be one of [${e.enum.join(", ")}]`);return}switch(e.type){case"string":if(typeof t!="string"){n.push(`${r||"value"} must be a string`);return}e.minLength&&t.length<e.minLength&&n.push(`${r||"value"} must be at least ${e.minLength} chars`);return;case"number":if(typeof t!="number"||!Number.isFinite(t)){n.push(`${r||"value"} must be a number`);return}e.minimum!=null&&t<e.minimum&&n.push(`${r||"value"} must be >= ${e.minimum}`),e.maximum!=null&&t>e.maximum&&n.push(`${r||"value"} must be <= ${e.maximum}`);return;case"boolean":typeof t!="boolean"&&n.push(`${r||"value"} must be a boolean`);return;case"array":if(!Array.isArray(t)){n.push(`${r||"value"} must be an array`);return}if(e.minItems!=null&&t.length<e.minItems&&n.push(`${r||"value"} must have >= ${e.minItems} items`),e.maxItems!=null&&t.length>e.maxItems&&n.push(`${r||"value"} must have <= ${e.maxItems} items`),e.items){for(let o=0;o<t.length;o+=1)if(St(e.items,t[o],`${r}[${o}]`,n),n.length)return}return;case"object":if(!t||typeof t!="object"||Array.isArray(t)){n.push(`${r||"value"} must be an object`);return}if(Array.isArray(e.required))for(const o of e.required){const i=t[o];if(i==null||i===""){n.push(`${r?`${r}.`:""}${o} is required`);return}}if(e.properties)for(const[o,i]of Object.entries(e.properties)){const a=t[o];if(a!==void 0&&(St(i,a,r?`${r}.${o}`:o,n),n.length))return}return;default:return}}}var Ki=12e4;async function Wi({request:e,accountModule:t,contextStore:r,beClient:n,toolBridge:o,emit:i,rpc:a,signal:s}){const c=performance.now(),l=await r.load(e),u=l.thread.id,f=ha(e);ca(l,f)&&r.appendUserMessage(u,f);const m=Or(t.flows,e);if(!m)return i(Lr("unknown_action",`No agent flow for request type ${e?.type||"inputText"}`)),i(wt()),{steps:0,productSkusEmitted:[]};const p={request:e,context:r.patch(u,{})||l,bag:{},accountConfig:t.accountConfig||{},threadId:u,steps:0,productSkusEmitted:new Set,committed:!1,messageLimit:ya(t.contextPersistence?.messageLimit),catalogMapper:t.catalogMapper,similarityMapper:t.similarityMapper},y={contextStore:r,beClient:n,toolBridge:o,emit:i,rpc:a,adapters:t.adapters||{},...s?{signal:s}:{},...t.trace?{trace:t.trace}:{},...t.hooks?{hooks:t.hooks}:{}};await z(y,ce("turn:start",p));try{await ae(m,p,y),p.committed||await vt(p,y)}catch(h){throw await z(y,{...ce("turn:error",p),latencyMs:q(c),errorCode:Te(h)}),h}return await a("beacon.send",{type:"turnSummary",threadId:u,sessionId:e?.session_id||e?.sessionId||u,accountId:t.accountId||p.context.meta.accountId,steps:p.steps,totalLatencyMs:q(c),productSkusEmitted:[...p.productSkusEmitted]}),await z(y,{...ce("turn:end",p),latencyMs:q(c)}),{steps:p.steps,productSkusEmitted:[...p.productSkusEmitted]}}async function ae(e,t,r){for(const n of e){if(r.signal?.aborted||t.committed)return;t.steps+=1;const o=t.steps,i=performance.now();await z(r,Tt("step:start",t,n,o));try{await Ji(n,t,r),await z(r,{...Tt("step:end",t,n,o),latencyMs:q(i)})}catch(a){throw await z(r,{...Tt("step:error",t,n,o),latencyMs:q(i),errorCode:Te(a)}),a}t.context=r.contextStore.patch(t.threadId,{})||t.context}}async function Ji(e,t,r){if(r.hooks?.transformContext){const o=await xe(r,t,"transformContext",()=>r.hooks.transformContext(t.context));o&&(t.context=o)}const n=se(t,r);if(e.kind==="be_op"){await Zi(e,t,r,n);return}if(e.kind==="tool"){await Xi(e,t,r,n);return}if(e.kind==="adapter"){await ea(e,t,r,n);return}if(e.kind==="emit"){await ta(e,t,r);return}if(e.kind==="patch"){await ra(e,t,r);return}if(e.kind==="branch"){await na(e,t,r,n);return}if(e.kind==="agent_loop"){await oa(e,t,r,n);return}if(e.kind==="parallel"){await ia(e,t,r);return}if(e.kind==="refusal"){await aa(e,t,r,n);return}e.kind==="commit"&&await sa(e,t,r)}async function Zi(e,t,r,n){const o=performance.now();let i;try{let s=await R(e.input,n);if(r.hooks?.beforeBeOp){const c=await xe(r,t,"beforeBeOp",()=>r.hooks.beforeBeOp(e.op,s,n));c&&"cached"in c&&c.cached!==void 0?i=c.cached:c&&"input"in c&&c.input!==void 0&&(s=c.input)}if(i===void 0){const c=await R(e.cache,n),l=Yi(e,t,s,c),u=await R(e.cacheTtlS,n)??l.cacheTtlS,f=await R(e.cacheKey,n)??l.cacheKey,m=await R(e.cacheFreshness,n),p=await R(e.browserCache,n),y=ve(await R(e.timeoutMs,n));await xt(e,t,r,n);const h=y?new AbortController:null,g=Dr(r.signal,h?.signal);i=await Ae(r.beClient.invoke({op:e.op,input:s,...u!==void 0?{cacheTtlS:u}:{},...f!==void 0?{cacheKey:f}:{},...m!==void 0?{cacheFreshness:m}:{},...p!==void 0?{browserCache:p}:{},...g?{signal:g}:{}}),y,()=>new M("op_timeout","The assistant took too long to respond.",{source:"be",sourceCode:"timeout"}),()=>h?.abort())}if(r.hooks?.afterBeOp){const c=await xe(r,t,"afterBeOp",()=>r.hooks.afterBeOp(e.op,i,n));c&&"result"in c&&c.result!==void 0&&(i=c.result)}}catch(s){const c=s,l=String(c?.sourceCode||c?.code||"unknown"),u={type:"agentOp",threadId:t.threadId,sessionId:t.request?.session_id||t.request?.sessionId||t.threadId,accountId:t.context.meta.accountId,op:e.op,status:"error",latencyMs:q(o),errorCode:l};if(await r.rpc("beacon.send",u),e.onError){e.errorOut&&(t.bag[e.errorOut]=s),await ae(e.onError,t,r);return}throw s}e.out&&(t.bag[e.out]=i),await De(e,i,t,r.contextStore);const a={type:"agentOp",threadId:t.threadId,sessionId:t.request?.session_id||t.request?.sessionId||t.threadId,accountId:t.context.meta.accountId,op:e.op,status:"ok",latencyMs:q(o)};await r.rpc("beacon.send",a)}function Yi(e,t,r,n){if(!n||n.strategy!=="input-hash")return{};const o=ve(n.ttlS);if(!o)return{};const i=t.context.meta.locale,a=n.promptVersion||Qi(r)||"current";return{cacheTtlS:o,cacheKey:kt(e.op,{account:t.context.meta.accountId,locale:i,promptVersion:a,payload:r},{version:"input-hash"})}}function Qi(e){if(!e||typeof e!="object"||Array.isArray(e))return;const t=e,r=t.prompt_version||t.promptVersion;return typeof r=="string"&&r.trim()?r.trim():void 0}async function Xi(e,t,r,n){const o=performance.now();try{await xt(e,t,r,n);const i=ve(await R(e.timeoutMs,n));let a=await R(e.input,n);if(r.hooks?.beforeToolCall){const c=await xe(r,t,"beforeToolCall",()=>r.hooks.beforeToolCall(e.name,a,n));if(c?.block)throw new M("tool_blocked",c.reason||`Tool '${e.name}' blocked by hook.`,{source:"tool",sourceCode:"blocked"});c&&"args"in c&&c.args!==void 0&&(a=c.args)}if(e.parameters){const c=Fr(e.parameters,a);if(!c.ok)throw new M("tool_invalid_args",`Invalid args for tool '${e.name}': ${c.error}`,{source:"tool",sourceCode:"invalid_args"})}let s=await Ae(r.toolBridge.invoke(e.name,a),i,()=>new M("tool_timeout","The assistant tool took too long to respond.",{source:"tool",sourceCode:"timeout"}));if(r.hooks?.afterToolCall){const c=await xe(r,t,"afterToolCall",()=>r.hooks.afterToolCall(e.name,s,n));c&&"result"in c&&c.result!==void 0&&(s=c.result),c?.terminate&&(t.committed=!0)}e.out&&(t.bag[e.out]=s),await De(e,s,t,r.contextStore),await r.rpc("beacon.send",{type:"agentTool",threadId:t.threadId,sessionId:Se(t),accountId:t.context.meta.accountId,tool:e.name,status:"ok",latencyMs:q(o)})}catch(i){const a=i;if(await r.rpc("beacon.send",{type:"agentTool",threadId:t.threadId,sessionId:Se(t),accountId:t.context.meta.accountId,tool:e.name,status:"error",latencyMs:q(o),errorCode:String(a?.code||a?.name||"unknown")}),e.onError){e.errorOut&&(t.bag[e.errorOut]=i),await ae(e.onError,t,r);return}throw i}}async function ea(e,t,r,n){const o=r.adapters?.[e.name];if(typeof o!="function")throw new Error(`Unknown flow adapter: ${e.name}`);await xt(e,t,r,n);const i=ve(await R(e.timeoutMs,n)),a=await Ae(o(await R(e.input,n),n),i,()=>new M("adapter_timeout","The assistant adapter took too long to respond.",{source:"adapter",sourceCode:"timeout"}));e.out&&(t.bag[e.out]=a),await De(e,a,t,r.contextStore)}async function ta(e,t,r){const n=await e.build(se(t,r));ba(n,t.productSkusEmitted),r.emit(n)}async function ra(e,t,r){await De(e,void 0,t,r.contextStore)}async function na(e,t,r,n){const o=String(await R(e.on,n)||"default");await ae(e.cases[o]||e.cases.default||[],t,r)}async function oa(e,t,r,n){if(!await e.shouldContinue(t.bag,n))return;const o=Math.max(0,Math.floor(Number(e.maxIterations)||0));let i=0;for(;!r.signal?.aborted&&!t.committed;){if(await ae(e.body,t,r),r.signal?.aborted||t.committed||!await e.shouldContinue(t.bag,se(t,r))||i>=o)return;const a=await e.onIterate?.(t.bag,se(t,r));a&&typeof a=="object"&&Object.assign(t.bag,a),i+=1}}async function ia(e,t,r){const n=ve(await R(e.timeoutMs,se(t,r))),o=n?new AbortController:null,i=Dr(r.signal,o?.signal),a=e.steps.map(l=>{const u={...t,context:la(t.context),bag:At(t.bag),productSkusEmitted:new Set(t.productSkusEmitted),committed:!1},f=[];return ae(l,u,{...r,emit:m=>{!i?.aborted&&m.type!=="done"&&f.push(m)},contextStore:ua(u),...i?{signal:i}:{}}).then(()=>({state:u,events:f}))}),s=await Ae(Promise.all(a),n,()=>new M("parallel_timeout","The assistant parallel step took too long to respond.",{source:"agent",sourceCode:"timeout"}),()=>o?.abort()),c=e.merge||{};for(const{state:l,events:u}of s){for(const f of u)r.emit(f);for(const f of l.productSkusEmitted)t.productSkusEmitted.add(f);for(const f of c.bag||[])Object.prototype.hasOwnProperty.call(l.bag,f)&&(t.bag[f]=l.bag[f]);if(c.panel?.length){const f=qr(l.context.panel,c.panel);Object.keys(f).length&&(t.context=r.contextStore.patch(t.threadId,{panel:f})||t.context)}if(c.threadExtensions?.length){const f=qr(l.context.thread.extensions,c.threadExtensions);Object.keys(f).length&&(t.context=r.contextStore.patch(t.threadId,{thread:{...t.context.thread,extensions:f}})||t.context)}}}async function aa(e,t,r,n){r.emit(Ir(await R(e.message,n),!0)),await vt(t,r)}async function sa(e,t,r){await vt(t,r)}async function vt(e,{contextStore:t,emit:r}){e.committed||(e.context=await t.commit(e.threadId)||e.context,e.committed=!0,r(wt()))}async function De(e,t,r,n){if(typeof e.patch!="function")return;const o=await e.patch(r.context,t,se(r));o&&(r.context=n.patch(r.threadId,o)||r.context)}function se(e,t){return{request:e.request,context:e.context,bag:e.bag,accountConfig:e.accountConfig,catalogMapper:e.catalogMapper,similarityMapper:e.similarityMapper,...t?{beClient:t.beClient,toolBridge:t.toolBridge}:{},...t?.signal?{signal:t.signal}:{}}}function Se(e){return e.request?.session_id||e.request?.sessionId||e.threadId}function ca(e,t){if(!t)return!1;const r=e.messages[e.messages.length-1];return r?.role!=="user"||r.content!==t}function qr(e,t){const r={};for(const n of t)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}function la(e){return{...e,panel:At(e.panel||{}),thread:{...e.thread,extensions:At(e.thread?.extensions||{})},meta:e.meta,messages:e.messages}}function ua(e){return{async load(){return e.context},patch(t,r){return e.context=da(e.context,r,e.messageLimit),e.context},appendUserMessage(){return e.context},async commit(){return e.context}}}function da(e,t,r){if(!t||typeof t!="object")return e;const n=Ur(e.panel,t.panel),o=Ur(e.thread?.extensions||{},t.thread?.extensions);return{...e,...t,panel:n,thread:{...e.thread||{},...t.thread||{},extensions:o},meta:{...e.meta||{},...t.meta||{}},messages:Array.isArray(t.messages)?Ne(t.messages,r):e.messages}}function Ur(e,t){if(!t||typeof t!="object"||Array.isArray(t))return e;const r={};for(const n of Object.keys(e))r[n]=e[n];for(const[n,o]of Object.entries(t))r[n]=o;return r}function At(e){return new Proxy({},{get(t,r,n){if(typeof r!="string")return Reflect.get(t,r,n);if(Object.prototype.hasOwnProperty.call(t,r))return t[r];const o=e[r];if(fa(o)){const i=pa(o);return t[r]=i,i}return o},has(t,r){return Reflect.has(t,r)||Reflect.has(e,r)},ownKeys(t){return Reflect.ownKeys(t)},getOwnPropertyDescriptor(t,r){return Object.getOwnPropertyDescriptor(t,r)}})}function fa(e){return!!(e&&typeof e=="object")}function pa(e){if(typeof structuredClone=="function")try{return structuredClone(e)}catch{}try{return JSON.parse(JSON.stringify(e))}catch{return e}}async function R(e,t){return typeof e=="function"?await e(t):e}function ve(e){if(e===void 0)return;const t=Math.floor(Number(e));return Number.isFinite(t)&&t>0?t:void 0}async function Ae(e,t,r,n){if(!t)return e;let o,i=!1;return new Promise((a,s)=>{o=setTimeout(()=>{i||(i=!0,n?.(),s(r()))},t),Promise.resolve(e).then(c=>{i||(i=!0,o&&clearTimeout(o),a(c))},c=>{i||(i=!0,o&&clearTimeout(o),s(c))})})}function Dr(e,t){if(!e)return t;if(!t||e.aborted)return e;if(t.aborted)return t;const r=new AbortController,n=()=>r.abort();return e.addEventListener("abort",n,{once:!0}),t.addEventListener("abort",n,{once:!0}),r.signal}async function xt(e,t,r,n){if(!e.confirm)return;const o=await R(e.confirm,n);if(!o)return;const i=ma(o,e,t);await z(r,Et("confirmation:start",t,e));try{const a=await Ae(r.rpc("confirmation.request",i),Ki,()=>new M("confirmation_timeout","The confirmation prompt timed out without a response.",{source:e.kind==="be_op"?"be":e.kind,sourceCode:"confirmation_timeout"})),s=typeof a=="boolean"?a:a?.confirmed===!0;if(await z(r,Et("confirmation:end",t,e)),s)return;throw new M("confirmation_declined","The requested action was not confirmed.",{source:e.kind==="be_op"?"be":e.kind,sourceCode:"confirmation_declined",detail:a})}catch(a){throw await z(r,{...Et("confirmation:error",t,e),errorCode:Te(a)}),a}}function ma(e,t,r){return{...ga(e),accountId:r.context.meta.accountId,threadId:r.threadId,sessionId:Se(r),stepKind:t.kind,...t.kind==="be_op"?{stepName:t.op}:{stepName:t.name}}}function ga(e){return typeof e=="string"?{message:e}:e===!0?{}:e&&typeof e=="object"?{...typeof e.title=="string"?{title:e.title}:{},...typeof e.message=="string"?{message:e.message}:{},...typeof e.action=="string"?{action:e.action}:{},...Object.prototype.hasOwnProperty.call(e,"payload")?{payload:e.payload}:{}}:{}}async function z(e,t){try{await e.trace?.(t)}catch{}}async function xe(e,t,r,n){try{return await n()}catch(o){await z(e,{...ce("step:error",t),stepName:`hook:${r}`,errorCode:Te(o)});try{await e.rpc("beacon.send",{type:"agentHookError",threadId:t.threadId,sessionId:Se(t),accountId:t.context.meta.accountId,hook:r,errorCode:Te(o),message:o instanceof Error?o.message:String(o)})}catch{}return}}function ce(e,t){return{type:e,accountId:t.context.meta.accountId,threadId:t.threadId,sessionId:Se(t)}}function Tt(e,t,r,n){const o=zr(r);return{...ce(e,t),stepIndex:n,stepKind:r.kind,...o?{stepName:o}:{}}}function Et(e,t,r){const n=zr(r);return{...ce(e,t),stepKind:r.kind,...n?{stepName:n}:{}}}function zr(e){if(e.kind==="be_op")return e.op;if(e.kind==="tool"||e.kind==="adapter")return e.name}function Te(e){if(e&&typeof e=="object"){const t=e;return String(t.sourceCode||t.code||t.name||"unknown")}return"unknown"}function ya(e){if(e===void 0)return;const t=Math.floor(Number(e));return Number.isFinite(t)&&t>0?t:void 0}function ha(e){const t=e?.payload;if(typeof t=="string")return t;if(t&&typeof t=="object"&&"text"in t){const r=t.text;if(typeof r=="string")return r}return typeof e?.action?.payload=="string"?e.action.payload:typeof e?.action?.title=="string"?e.action.title:""}function ba(e,t){const r=e,n=r.spec,o=Array.isArray(n?.items)?n.items:void 0,i=Array.isArray(r.items)?r.items:void 0,a=o||i;if(Array.isArray(a)){for(const s of a)if(s&&typeof s=="object"){const c=s.sku;typeof c=="string"&&t.add(c)}}}function wa(e){return{invoke(t,r){return e("tool.invoke",{name:t,input:r})}}}var ka=512,_a=.74;function Gr({accountId:e,worker:t,beUrl:r,devJwtSecret:n,tokenBrokerUrl:o,tokenBrokerAudience:i,defaultLocale:a,tools:s={},beacon:c,confirmation:l,memory:u=it()}){let f=1;const m=new Map;return Oo({worker:t,tools:s,beacon:p=>c?.({...p,accountId:p.accountId||e}),...l?{confirmation:l}:{},memory:u}),t.addEventListener("message",p=>{const y=p.data||{};if(y.type==="activity"&&y.entry){Hr(y.entry);return}const h=typeof y.id=="number"?y.id:null;if(h==null)return;const g=m.get(h);if(g){if(y.type==="event"&&y.event){Ct(g,y.event);return}if(y.type==="error"){g.onError(new Error(y.message||"Agent worker failed")),m.delete(h);return}y.type==="end"&&m.delete(h)}}),(p,y,h,g)=>{const b=f++;m.set(b,y);const w=()=>{m.delete(b),t.postMessage({id:b,type:"abort"})},v=_=>{if(h.aborted){w();return}t.postMessage({id:b,type:"invoke",accountId:e,beUrl:r,devJwtSecret:n,tokenBrokerUrl:o,tokenBrokerAudience:i,defaultLocale:a,request:_,parentUrl:window.location.href,debugActivity:Sa()})};if(h.aborted){w();return}if(h.addEventListener("abort",w,{once:!0}),g){Kr(p,g).then(v).catch(_=>{m.delete(b),y.onError(_ instanceof Error?_:new Error("Failed to read image attachment"))});return}v(p)}}function Hr(e){const t=window;(t.__GENGAGE_AGENTIC_DEBUG_RECORD__||t.__GENGAGE_AGENTIC_DEBUG_RECORD_BE__)?.(e)}function Sa(){const e=window;return typeof(e.__GENGAGE_AGENTIC_DEBUG_RECORD__||e.__GENGAGE_AGENTIC_DEBUG_RECORD_BE__)=="function"}function Vr({accountId:e,accountModule:t,beUrl:r,devJwtSecret:n,tokenBrokerUrl:o,tokenBrokerAudience:i,defaultLocale:a,tools:s={},beacon:c,confirmation:l,memory:u}){let f=null;const m=va({accountId:e,tools:s,beacon:c,confirmation:l,memory:u??it()}),p=wa(m),y=gt({accountId:e,...n?{devJwtSecret:n}:{},...o?{tokenBrokerUrl:o}:{},...i?{tokenBrokerAudience:i}:{}});return async(h,g,b,w)=>{const v=await Kr(h||{},w);f||=new Sr({accountId:e,locale:v?.locale||a,parentUrl:window.location.href,rpc:m,persistentPanelKeys:t.contextPersistence?.panelKeys,panelKeyLimits:t.contextPersistence?.panelKeyLimits,messageLimit:t.contextPersistence?.messageLimit,maxThreads:t.contextPersistence?.maxThreads,threadTtlMs:t.contextPersistence?.threadTtlMs});try{await Wi({request:v,accountModule:{...t,accountId:e,trace:async _=>{Hr({kind:"flow/trace",event:_}),await t.trace?.(_)}},contextStore:f,beClient:{invoke({op:_,input:C,signal:A,cacheTtlS:x,cacheKey:Z,browserCache:rt}){return ji({beUrl:r,accountId:e,jwtProvider:y,parentUrl:window.location.href,op:_,input:C,cacheTtlS:x,cacheKey:Z,browserCache:rt,...A?{signal:A}:{}})}},toolBridge:p,emit:_=>Ct(g,_),rpc:m,signal:b})}catch(_){b?.aborted||(Ct(g,Er(_)),g.onDone())}}}function va({accountId:e,tools:t,beacon:r,confirmation:n,memory:o}){const i=a=>r?.({...a,accountId:a.accountId||e});return((a,s)=>hr(a,s,{tools:t,beacon:i,confirmation:n,memory:o}))}async function Kr(e,t){if(!t||!t.type?.startsWith("image/"))return e;const r=await Ta(t),n={...Aa(e.payload??e.action?.payload),image_data_url:r.dataUrl,image_mime:r.mime};return{...e,payload:n,...e.action?{action:{...e.action,payload:n}}:{}}}function Aa(e){return xa(e)?{...e}:typeof e=="string"?{text:e}:{}}function xa(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function Ta(e){const t=await Ea(e);return t||{dataUrl:await Wr(e),mime:e.type}}async function Ea(e){if(typeof createImageBitmap!="function"||typeof document>"u")return null;let t=null;try{t=await createImageBitmap(e);const r=Math.min(1,ka/Math.max(t.width,t.height)),n=Math.max(1,Math.round(t.width*r)),o=Math.max(1,Math.round(t.height*r)),i=document.createElement("canvas");i.width=n,i.height=o;const a=i.getContext("2d");if(!a)return null;a.drawImage(t,0,0,n,o);const s=await new Promise(c=>i.toBlob(c,"image/jpeg",_a));return s?{dataUrl:await Wr(s),mime:s.type||"image/jpeg"}:null}catch{return null}finally{t?.close()}}async function Wr(e){const t=new Uint8Array(await e.arrayBuffer());let r="";const n=32768;for(let o=0;o<t.length;o+=n)r+=String.fromCharCode(...t.subarray(o,o+n));return`data:${e.type};base64,${btoa(r)}`}function Ct(e,t){switch(t?.type){case"text_chunk":{const r=t;e.onTextChunk(r.content||"",r.final===!0,r);break}case"ui_spec":{const r=t;e.onUISpec(r.spec,r.widget,r.panelHint,r.clearPanel===!0);break}case"action":e.onAction(t);break;case"metadata":e.onMetadata(t);break;case"error":e.onError(Ca(t));break;case"done":e.onDone();break;default:break}}function Ca(e){const t=new Error(e.message||e.code||"Agent error");return e.code&&(t.code=e.code),t}var Pa="entries",Ra=1,ja={volatile:"Hot per-page state and sensitive request context.",session:"Current-visit tool context without raw tokens or PII-heavy payloads.",local:"Small, non-sensitive capability facts or user preferences.",indexedDb:"Larger product/search payload caches with short TTLs."},Jr=new Map;function Pt(){return Date.now()}function le(e){return e?.expiresAt!=null&&e.expiresAt<=Pt()}function Rt(e,t){return{value:e,createdAt:Pt(),expiresAt:t?Pt()+t:null}}function Ia(e,t,r){try{const n=e.getItem(`${t}${r}`);if(!n)return null;const o=JSON.parse(n);return le(o)?(e.removeItem(`${t}${r}`),null):o.value}catch{return null}}function La(e,t,r,n,o){try{return e.setItem(`${t}${r}`,JSON.stringify(Rt(n,o))),!0}catch{return!1}}function Oa(e,t,r){try{e.removeItem(`${t}${r}`)}catch{}}function Zr(e,t){if(!e)return 0;let r=0;try{const n=[];for(let o=0;o<e.length;o+=1){const i=e.key(o);i?.startsWith(t)&&n.push(i)}for(const o of n)try{const i=JSON.parse(e.getItem(o)||"null");(!i||le(i))&&(e.removeItem(o),r+=1)}catch{e.removeItem(o),r+=1}}catch{return r}return r}function Yr(e){try{return window[e]}catch{return null}}function Qr(e,t){return e?{get:r=>Ia(e,t,r),set:(r,n,o={})=>La(e,t,r,n,o.ttlMs),remove:r=>Oa(e,t,r)}:{get:()=>null,set:()=>!1,remove:()=>{}}}function Ba(e,t){const r=t.dbName||`gengage-${e}`,n=t.dbStore||Pa,o=t.dbVersion||Ra,i=new Map;let a=null;const s=()=>"indexedDB"in window?a||(a=new Promise(m=>{const p=indexedDB.open(r,o);p.onupgradeneeded=()=>{p.result.createObjectStore(n,{keyPath:"key"})},p.onsuccess=()=>m(p.result),p.onerror=()=>m(null),p.onblocked=()=>m(null)}),a):Promise.resolve(null);return{volatileEntries:i,idbGet:async m=>{const p=await s();return p?new Promise(y=>{const h=p.transaction(n,"readwrite").objectStore(n),g=h.get(m);g.onsuccess=()=>{const b=g.result;if(!b||le(b)){b&&h.delete(m),y(null);return}y(b.value)},g.onerror=()=>y(null)}):null},idbSet:async(m,p,y={})=>{const h=await s();return h?new Promise(g=>{const b=h.transaction(n,"readwrite");b.oncomplete=()=>g(!0),b.onerror=()=>g(!1),b.objectStore(n).put({key:m,...Rt(p,y.ttlMs)})}):!1},idbRemove:async m=>{const p=await s();p&&p.transaction(n,"readwrite").objectStore(n).delete(m)},idbGc:async()=>{const m=await s();return m?new Promise(p=>{let y=0;const h=m.transaction(n,"readwrite"),g=h.objectStore(n).openCursor();g.onsuccess=()=>{const b=g.result;if(!b)return;const w=b.value;(!w||le(w))&&(b.delete(),y+=1),b.continue()},h.oncomplete=()=>p(y),h.onerror=()=>p(y),g.onerror=()=>p(y)}):0}}}function jt(e,t={}){const r=window,n=r.gengage||(r.gengage={}),o=n.memory||(n.memory={}),i=o[e];if(i)return i;const a=Jr.get(e)||Ba(e,t);Jr.set(e,a);const s=t.sessionPrefix||`gengage:${e}:session:`,c=t.localPrefix||`gengage:${e}:local:`,l=Yr("sessionStorage"),u=Yr("localStorage"),m={get:g=>{const b=a.volatileEntries.get(g);return b?le(b)?(a.volatileEntries.delete(g),null):b.value:null},set:(g,b,w={})=>(a.volatileEntries.set(g,Rt(b,w.ttlMs)),!0),remove:g=>{a.volatileEntries.delete(g)},clear:()=>a.volatileEntries.clear()},p={get:a.idbGet,set:a.idbSet,remove:a.idbRemove},y=async()=>{let g=0;for(const[_,C]of a.volatileEntries)le(C)&&(a.volatileEntries.delete(_),g+=1);const b=Zr(l,s),w=Zr(u,c),v=await a.idbGc();return{volatile:g,session:b,local:w,indexedDb:v}},h={accountId:e,volatile:m,session:Qr(l,s),local:Qr(u,c),indexedDb:p,gc:y,stableKey:ie,policy:{...ja,...t.policy||{}}};o[e]=h;for(const g of t.aliases||[])o[g]=h;return Ma(h),h}function Ma(e){const t=window,r=()=>{e.gc().catch(()=>{})};if(typeof t.requestIdleCallback=="function"){t.requestIdleCallback(r);return}setTimeout(r,5e3)}var ze="__gengageAgentFetchBridge",Na=1e3*60*60*24*14;function $a({accountId:e,streamTransport:t,endpoints:r={},endpointCache:n}){if(!e)throw new Error("accountId is required.");if(typeof t!="function")throw new Error("streamTransport is required.");const o=Fa(),i=`https://gengage-injector.invalid/${encodeURIComponent(e)}`,a=new Set,s=n?Ha({accountId:e,endpointCache:n,fetchImpl:o.originalFetch}):void 0,c=l=>{const u=`${i}/chat/${l}`;a.add(u);const f=r[l],m={streamTransport:t,endpoint:l};f&&(m.endpointHandler=f),s&&(m.endpointCache=s),o.routes.set(u,m)};c("process_action");for(const l of Object.keys(r))l!=="process_action"&&c(l);return{middlewareUrl:i,stop(){for(const l of a)o.routes.delete(l);qa(o)}}}function Fa(){const e=window,t=e[ze];if(t)return t;const r=e.fetch.bind(e),n={routes:new Map,originalFetch:r,installedFetch:r};return n.installedFetch=(o,i)=>{const a=Xr(o),s=n.routes.get(a);return s?Da(s,o,i):r(o,i)},e.fetch=n.installedFetch,e[ze]=n,n}function qa(e){if(e.routes.size>0)return;const t=window;t.fetch===e.installedFetch&&(t.fetch=e.originalFetch),t[ze]===e&&delete t[ze]}function Xr(e){return typeof e=="string"?e:e instanceof URL?e.href:e?.url||""}function en(e,t){if(t?.signal)return t.signal;if(typeof Request<"u"&&e instanceof Request)return e.signal}function tn(e,t){return t?.body!==void 0&&t?.body!==null?t.body:typeof Request<"u"&&e instanceof Request?e.clone().text():null}async function Ua(e,t){const r=tn(e,t);if(r instanceof FormData){const o=r.get("request"),i=r.get("attachment");return{request:JSON.parse(String(o||"{}")),...i instanceof File?{attachment:i}:{}}}const n=await Promise.resolve(r);return typeof n=="string"?{request:JSON.parse(n||"{}")}:{request:{}}}async function Da(e,t,r){if(e.endpoint&&e.endpoint!=="process_action"&&e.endpointHandler){const l=new AbortController,u=en(t,r);let f=null;if(u){const m=()=>l.abort();u.aborted&&m(),u.addEventListener("abort",m,{once:!0}),f=()=>u.removeEventListener("abort",m)}try{const m=await za(t,r),p={accountId:Ga(t),endpoint:e.endpoint,signal:l.signal},y=Va(e.endpointCache,e.endpoint,m,p.accountId);if(y){const g=await Ka(e.endpointCache,y,l.signal);if(g)return Xa(g)}const h=await e.endpointHandler(m,p);return y&&h.ok&&await Wa(e.endpointCache,y,h.clone(),l.signal),h}finally{f?.()}}const n=new TextEncoder,o=new AbortController,i=en(t,r);let a=!1,s=null;const c=new ReadableStream({async start(l){const u=p=>{a||l.enqueue(n.encode(`${JSON.stringify(p)}
|
|
4
|
-
`))},f=()=>{a||(a=!0,s?.(),l.close())},m=p=>{u({type:"error",code:p?.code||"agent_bridge_error",message:p instanceof Error?p.message:String(p)}),u({type:"done"}),f()};if(i){const p=()=>{o.abort(),a||(a=!0,s?.(),l.error(new DOMException("Aborted","AbortError")))};if(i.aborted){p();return}i.addEventListener("abort",p,{once:!0}),s=()=>i.removeEventListener("abort",p)}try{const{request:p,attachment:y}=await Ua(t,r),h=e.streamTransport(p,{onTextChunk:(g,b,w={})=>u({type:"text_chunk",content:g,final:b===!0,...w}),onUISpec:(g,b,w,v)=>u({type:"ui_spec",spec:g,widget:b,...w?{panelHint:w}:{},...v?{clearPanel:!0}:{}}),onAction:g=>{u(g?.type==="action"?g:{type:"action",action:g})},onMetadata:g=>{u(g?.type==="metadata"?g:{type:"metadata",...g})},onError:m,onDone:()=>{u({type:"done"}),f()}},o.signal,y);ns(h)&&(await h,o.signal.aborted||(u({type:"done"}),f()))}catch(p){o.signal.aborted||m(p)}},cancel(){o.abort(),s?.(),a=!0}});return new Response(c,{status:200,headers:{"Content-Type":"application/x-ndjson"}})}async function za(e,t){const r=await Promise.resolve(tn(e,t));return typeof r!="string"||r.trim()===""?{}:JSON.parse(r)}function Ga(e){try{const[t]=new URL(Xr(e)).pathname.split("/").filter(Boolean);return decodeURIComponent(t||"")}catch{return""}}function Ha({accountId:e,endpointCache:t,fetchImpl:r}){return{accountId:e,beUrl:t.beUrl,...t.parentUrl?{parentUrl:t.parentUrl}:{},ttlMs:t.ttlMs??Na,policies:t.policies,fetchImpl:r,jwtProvider:gt({accountId:e,...t.devJwtSecret?{devJwtSecret:t.devJwtSecret}:{},...t.tokenBrokerUrl?{tokenBrokerUrl:t.tokenBrokerUrl}:{},...t.tokenBrokerAudience?{tokenBrokerAudience:t.tokenBrokerAudience}:{},fetchImpl:r})}}function Va(e,t,r,n){if(!e)return null;const o=e.policies[t];if(!o)return null;const i=o(r,{accountId:n,endpoint:t});return!i?.partition||!i?.key?null:{partition:i.partition,key:i.key,ttlMs:i.ttlMs??e.ttlMs}}async function Ka(e,t,r){const n=an(e.accountId,t),o=await es(e.accountId,n);if(on(o))return o;const i=await Ja(e,t,r);return i?(await sn(e.accountId,n,i,t.ttlMs),i):null}async function Wa(e,t,r,n){try{const o=await Qa(r);if(rs(o.body))return;const i=an(e.accountId,t);await sn(e.accountId,i,o,t.ttlMs),Za(e,t,o,n)}catch{}}async function Ja(e,t,r){try{const n=await e.fetchImpl(nn(e.beUrl),{method:"POST",headers:await rn(e,r),body:JSON.stringify({partition:t.partition,key:t.key}),signal:r});if(!n.ok)return null;const o=await n.json();return o.hit===!0&&on(o.payload)?o.payload:null}catch{return null}}async function Za(e,t,r,n){try{await e.fetchImpl(nn(e.beUrl),{method:"POST",headers:await rn(e,n),body:JSON.stringify({partition:t.partition,key:t.key,ttl_s:Math.max(1,Math.ceil(t.ttlMs/1e3)),payload:r}),signal:n})}catch{}}async function rn(e,t){return{authorization:`Bearer ${await e.jwtProvider({signal:t,parentUrl:e.parentUrl||Ya()})}`,"content-type":"application/json",accept:"application/json"}}function Ya(){try{return window.location?.href||""}catch{return""}}function nn(e){return`${String(e).replace(/\/+$/u,"")}/v1/cache`}async function Qa(e){return{status:e.status,statusText:e.statusText,headers:[...e.headers.entries()].filter(([t])=>ts(t)),body:await e.text()}}function Xa(e){return new Response(e.body,{status:e.status,statusText:e.statusText,headers:new Headers(e.headers)})}function on(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const t=e;return typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.body=="string"&&Array.isArray(t.headers)}function an(e,t){return`endpoint-response:${ie({accountId:e,partition:t.partition,key:t.key})}`}async function es(e,t){const r=jt(e);return r.volatile.get(t)||await r.indexedDb.get(t)||r.local.get(t)}async function sn(e,t,r,n){const o=jt(e);o.volatile.set(t,r,{ttlMs:n}),await o.indexedDb.set(t,r,{ttlMs:n})||o.local.set(t,r,{ttlMs:n})}function ts(e){return["content-type","cache-control"].includes(e.toLowerCase())}function rs(e){return/"_error"\s*:/u.test(e)||/"type"\s*:\s*"error"/u.test(e)}function ns(e){return e!==null&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"}function os({accountId:e,beUrl:t,devJwtSecret:r,tokenBrokerUrl:n,tokenBrokerAudience:o,workerUrl:i,defaultLocale:a="en-GB",accountModule:s,tools:c={},beacon:l,confirmation:u,memory:f,allowBlobWorker:m=!1,signal:p}){if(!e)throw new Error("accountId is required.");if(!t)throw new Error("beUrl is required. The injector owns backend URLs; the SDK has no default.");if(!i)throw new Error("workerUrl is required.");const y=window,h=y.GengageAssistantInjector||(y.GengageAssistantInjector={}),g=h[e]||(h[e]={});if(g.agentController)return g.agentController;const b=It(i)||m?cn(i,`gengage-${e}-agent`,{allowBlobWorker:m}):null;b||l?.({type:"agentRuntime",accountId:e,transport:"main-thread",reason:"cross-origin-worker-url",workerUrl:i}),g.streamTransport=b?Gr({accountId:e,worker:b.worker,beUrl:t,...r?{devJwtSecret:r}:{},...n?{tokenBrokerUrl:n}:{},...o?{tokenBrokerAudience:o}:{},defaultLocale:a,tools:c,...l?{beacon:l}:{},...u?{confirmation:u}:{},...f?{memory:f}:{}}):Vr({accountId:e,accountModule:s,beUrl:t,...r?{devJwtSecret:r}:{},...n?{tokenBrokerUrl:n}:{},...o?{tokenBrokerAudience:o}:{},defaultLocale:a,tools:c,...l?{beacon:l}:{},...u?{confirmation:u}:{},...f?{memory:f}:{}});const w=new AbortController,v=[],_=()=>{for(;v.length;){const x=v.pop();try{x?.()}catch{}}},C=()=>{w.signal.aborted||(w.abort(),p?.removeEventListener("abort",C),delete g.streamTransport,b?.worker.terminate(),b?.cleanup(),_(),delete g.agentController)};p?.addEventListener("abort",C,{once:!0});const A={type:"agent",signal:w.signal,addCleanup(x){if(typeof x=="function"){if(w.signal.aborted){x();return}v.push(x)}},stop:C,diagnostics(){return{accountId:e,beUrl:t,workerUrl:i,mounted:!0,transport:b?"worker":"main-thread",transportReason:b?"module-worker":"cross-origin-worker-url",flows:Object.keys(s?.flows||{})}}};return g.agentController=A,A}function It(e){const t=new URL(e,window.location.href);return t.origin===window.location.origin||t.protocol==="blob:"}function cn(e,t,r={}){const n=new URL(e,window.location.href);if(It(e))return{worker:new Worker(n.href,{type:"module",name:t}),cleanup(){}};if(!r.allowBlobWorker)throw new Error("Cross-origin agent workers require allowBlobWorker=true or a same-origin workerUrl.");const o=new Blob([`import ${JSON.stringify(n.href)};
|
|
5
|
-
`],{type:"text/javascript"}),i=URL.createObjectURL(o);try{return{worker:new Worker(i,{type:"module",name:t}),cleanup(){URL.revokeObjectURL(i)}}}catch(a){throw URL.revokeObjectURL(i),a}}function is(e,t={}){if(!Array.isArray(e))return[];const r=t.maxItems??8,n=t.maxFeatures??8;return e.map(o=>as(o,t.defaultBrand,n)).filter(o=>!!o).slice(0,r)}function as(e,t,r){if(!e||typeof e!="object"||Array.isArray(e))return null;const n=e,o=Ue(n);return o?ls({sku:o.sku,name:o.name,url:o.url,image:o.image,price:o.price,currency:o.currency,category:o.category,category_names:o.category_names,brand:n.brand||t,features:ss(n.features,r),specs:cs(n.specs,r),in_stock:o.in_stock}):null}function ss(e,t){return Array.isArray(e)?e.filter(Boolean).slice(0,t):void 0}function cs(e,t){if(!(!e||typeof e!="object"||Array.isArray(e)))return Object.fromEntries(Object.entries(e).filter(([,r])=>r!=null).slice(0,t))}function ls(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!=null))}function Lt(e){if(!e||typeof e!="object"||Array.isArray(e))return{};const t=e,r=Array.isArray(t.rows)?t.rows:[];return{...t,rows:r.map(ds).filter(Boolean)}}function ln(e,t){const r=Array.isArray(e)?e.filter(s=>!!(s&&typeof s=="object"&&!Array.isArray(s))):[],n=Lt(t),o=Array.isArray(n.columns)?n.columns.map(String):[];if(!o.length)return r;const i=new Map(r.map(s=>[String(s.sku||s.id||""),s])),a=o.map(s=>i.get(s)).filter(s=>!!s);return a.length?a:r}function us(e,t){const r=Lt(e?.table),n=ln(t,r);return{...e||{},table:r,products:n,multiple_product_details:n}}function ds(e){return!e||typeof e!="object"||Array.isArray(e)?null:Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function fs(e=[],t={}){const r={},n=[];return(Array.isArray(e)?e.map(o=>qe(o,t)).filter(o=>!!o):[]).forEach((o,i)=>{const a=`product-${i.toString()}`;n.push(a);const s={sku:o.sku,product:o};r[a]={type:"ProductCard",props:{product:o,index:i,action:{title:o.name,type:"launchSingleProduct",payload:s}}}}),r.root={type:"ProductGrid",props:{layout:"grid"},children:n},{widget:"chat",panelHint:"panel",spec:{root:"root",elements:r}}}function ps(e,t={}){return{widget:"chat",panelHint:"panel",spec:{root:"root",elements:{root:{type:"ProductDetailsPanel",props:{product:qe(e,t)||e||{}}}}}}}function ms(e={},t={}){const r=(e.multiple_product_details||e.products||[]).map(o=>qe(o,t)).filter(o=>!!o),n=e.table||gs(e.comparison_table);return{widget:"chat",panelHint:"panel",spec:{root:"root",elements:{root:{type:"ComparisonTable",props:{products:r,recommended:r.find(o=>o.sku===e.recommended_choice_sku)||r[0],attributes:Object.entries(n).map(([o,i])=>({label:o,values:Array.isArray(i)?i.map(String):[String(i??"")]})),highlights:Mr(e.key_differences),specialCases:Mr(e.special_considerations),recommendedText:e.recommended_choice,productActions:Object.fromEntries(r.map(o=>[o.sku,{title:o.name,type:"launchSingleProduct",payload:{sku:o.sku,product:o}}]))}}}}}}function gs(e){return Array.isArray(e)?Object.fromEntries(e.map(t=>{const r=typeof t?.label=="string"?t.label.trim():"";return r?[r,t.values]:null}).filter(t=>!!t)):{}}function ys(e=[]){return{widget:"chat",panelHint:"inline",spec:{root:"root",elements:{root:{type:"ActionButtons",props:{buttons:(Array.isArray(e)?e:[]).map(t=>{const r=t.label||t.title||t.shortName||"",n=t.action||t.requestDetails||t.request_details;return!r||!n?.type?null:{label:r,action:{title:r,type:n.type,...n.payload!==void 0?{payload:n.payload}:{}}}}).filter(t=>!!t)}}}}}}function hs(e){return Object.freeze([...e])}function un(e,t,r="v1"){return`endpoint:${r}:${ie({endpoint:e,request:t})}`}function bs(e){const t=e.version||"v1",r=n=>o=>({partition:`${e.partitionPrefix}/${n}`,key:un(n,o,t),...e.ttlMs?{ttlMs:e.ttlMs}:{}});return{launcher_action:r("launcher_action"),similar_products:r("similar_products"),product_groupings:r("product_groupings")}}function ws(e){return{...e}}function ks(e,t={}){return new Response(e.map(r=>JSON.stringify(r)).join(`
|
|
6
|
-
`)+`
|
|
7
|
-
`,{...t,headers:{"content-type":"application/x-ndjson",...t.headers||{}}})}function _s(e,t={}){return new Response(JSON.stringify(e),{...t,headers:{"content-type":"application/json",...t.headers||{}}})}var Ee=new Set(["and","are","for","from","the","with"]),Ss={token:.26,keyword:.22,category:.18,facet:.16,color:.08,attribute:.06,price:.08,retrieval:.08},vs=["amber","beige","black","blue","blush","bronze","brown","cream","gold","green","grey","ivory","lilac","mixed","orange","pastel","pink","purple","red","silver","white","yellow"];function H(e,t){return String(e??"").toLocaleLowerCase(t||void 0).normalize("NFKD").replace(new RegExp("\\p{Diacritic}","gu"),"").replace(/[^\p{L}\p{N}]+/gu," ").replace(/\s+/gu," ").trim()}function $(e,t=Ee,r){const n=t instanceof Set?t:new Set([...Ee,...t]),o=new Set,i=[];for(const a of H(e,r).split(/\s+/u))a.length<3||n.has(a)||o.has(a)||(o.add(a),i.push(a));return i}function ue(e,t={}){if(Ps(e))return e;const r=t.similarityMapper?.(e);if(r)return r;const n=t.facetKeys,o=I(e.category_names??e.category),i=I(e.category_ids),a=Rs(e.facet_hits),s=Object.entries(a).filter(([g])=>!n||n.some(b=>H(b,t.locale)===H(g,t.locale))).map(([,g])=>g),c=F(e.name,e.title),l=F(e.brand),u=t.sourceKeywords??[],f=[c,l,...o,...s,...I(e.promotions),F(e.description),...u].join(" "),m=$(f,t.stopWords,t.locale),p=F(t.sourceProductType,Ls(o,c,m,t.locale),m[0]),y=V([...Is(f,vs,t.locale),...Object.entries(a).filter(([g])=>/colou?r/iu.test(g)).flatMap(([,g])=>$(g,t.stopWords,t.locale))],t.locale),h=V([...s.flatMap(g=>$(g,t.stopWords,t.locale)),...I(e.promotions).flatMap(g=>$(g,t.stopWords,t.locale))],t.locale).slice(0,24);return{sku:F(e.sku),title:c,brand:l,productType:p,categoryNames:o,categoryIds:i,facets:a,keywords:V([...u.flatMap(g=>$(g,t.stopWords,t.locale)),...m],t.locale).slice(0,12),tokens:m,colors:y,attributes:h,price:js(e)}}function As(e,t={}){const r=F(e.product_type,e.productType),n=F(e.title,r,I(e.keywords).join(" ")),o=V([...I(e.keywords),...I(e.colors),...I(e.materials),...I(e.styles),...I(e.attributes)]);return ue({sku:"__photo__",name:n,category_names:r?[r]:[],facet_hits:{colors:I(e.colors).join(", "),materials:I(e.materials).join(", "),styles:I(e.styles).join(", "),attributes:I(e.attributes).join(", ")},promotions:o},{...t,sourceProductType:r,sourceKeywords:o})}function xs(e,t={}){const r=ue(e,t);return V([...t.sourceQueries??[],Ge([r.productType,...r.colors.slice(0,1),...r.attributes.slice(0,2)]),Ge([r.productType,...r.keywords.slice(0,3)]),Ge([r.categoryNames[r.categoryNames.length-1],...r.keywords.slice(0,2)]),Ge(r.title.split(/\s+/u).slice(0,6)),r.productType].map(n=>n.trim()).filter(Boolean)).slice(0,t.queryLimit??6)}function Ot(e,t,r={}){const n={...Ss,...r.weights},o=ue(t,r),i=[],a=de(e.tokens,o.tokens,r.locale),s=de(e.keywords,o.tokens,r.locale),c=Os(e.categoryNames,o.categoryNames,r.locale)||de(pn(e.categoryNames,r.locale),pn(o.categoryNames,r.locale),r.locale),l=de(e.attributes,o.attributes,r.locale),u=de(e.colors,o.colors,r.locale),f=de(e.attributes,o.tokens,r.locale),m=Bs(e.price,o.price),p=Ms(o.sku,r.hitCounts)>0?1:0,y=Ns(e,o),h=a*n.token+s*n.keyword+c*n.category+l*n.facet+u*n.color+f*n.attribute+m*n.price+p*n.retrieval,g=$s(y?h:h*.35);return y&&e.productType&&e.productType===o.productType&&i.push("same product type"),c>.4&&i.push("similar category"),l>.2&&i.push("matching product attributes"),u>0&&i.push("matching colour"),m>.8&&i.push("similar price"),y||i.push("weaker product-type match"),{score:Number(g.toFixed(4)),reasons:i}}function Ts(e,t,r={}){const n=ue(e,r),o=new Set([n.sku,...r.ignoreSkus??[]].filter(Boolean));return dn(t.filter(i=>{const a=F(i.sku);return a&&!o.has(a)}),r.maxCandidates).map(i=>{const a=Ot(n,i,r);return{...i,similarity_score:a.score,similarity_reasons:a.reasons}}).sort((i,a)=>a.similarity_score-i.similarity_score).slice(0,Math.max(1,Math.min(r.limit??12,100)))}async function Es(e,t,r={}){const n=ue(e,r),o=new Set([n.sku,...r.ignoreSkus??[]].filter(Boolean)),i=dn(t.filter(c=>{const l=F(c.sku);return l&&!o.has(l)}),r.maxCandidates),a=Math.max(1,Math.floor(r.batchSize??50)),s=[];for(let c=0;c<i.length;c+=1){fn(r.signal);const l=i[c],u=Ot(n,l,r);s.push({...l,similarity_score:u.score,similarity_reasons:u.reasons}),(c+1)%a===0&&await Cs(r.yield)}return fn(r.signal),s.sort((c,l)=>l.similarity_score-c.similarity_score).slice(0,Math.max(1,Math.min(r.limit??12,100)))}function dn(e,t){if(t===void 0)return e;const r=Math.floor(Number(t));return Number.isFinite(r)&&r>0?e.slice(0,r):e}async function Cs(e){if(e){await e();return}await new Promise(t=>{const r=globalThis;if(typeof r.scheduler?.yield=="function"){r.scheduler.yield().then(t,t);return}if(typeof setTimeout=="function"){setTimeout(t,0);return}t()})}function fn(e){if(e?.aborted)throw new DOMException("Similarity ranking aborted.","AbortError")}function Ps(e){return!!(e&&typeof e=="object"&&Array.isArray(e.tokens))}function F(...e){for(const t of e)if(typeof t=="string"&&t.trim())return t.trim();return""}function I(e){return Array.isArray(e)?e.map(t=>F(t)).filter(Boolean):typeof e=="string"&&e.trim()?e.split(/[,;/|]+/u).map(t=>t.trim()).filter(Boolean):[]}function Rs(e){return!e||typeof e!="object"||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).map(([t,r])=>[t,F(r)]).filter(([,t])=>t))}function js(e){const t=Number(e.price_discounted);if(Number.isFinite(t)&&t>0)return t;const r=Number(e.price);return Number.isFinite(r)&&r>0?r:0}function V(e,t){const r=new Set,n=[];for(const o of e){const i=H(o,t);!i||r.has(i)||(r.add(i),n.push(i))}return n}function Is(e,t,r){const n=` ${H(e,r)} `;return t.filter(o=>n.includes(` ${H(o,r)} `))}function Ls(e,t,r,n){const o=H(e[e.length-1]??e[0]??"",n);if(o){const i=$(o,Ee,n),a=new Set($(t,Ee,n));return i.find(s=>a.has(s))??i[0]??o}return r[0]??""}function Ge(e){return e.map(t=>H(t)).filter(Boolean).join(" ").replace(/\s+/gu," ").trim().slice(0,120)}function pn(e,t){return e.flatMap(r=>$(r,Ee,t))}function de(e,t,r){const n=V(e,r),o=new Set(V(t,r));return n.length===0||o.size===0?0:n.filter(i=>o.has(i)).length/n.length}function Os(e,t,r){const n=V(e,r),o=new Set(V(t,r));return n.length===0||o.size===0?0:n.filter(i=>o.has(i)).length/n.length}function Bs(e,t){return e<=0||t<=0?0:Math.min(e,t)/Math.max(e,t)}function Ms(e,t){return!e||!t?0:typeof t.get=="function"?t.get(e)??0:t[e]??0}function Ns(e,t){if(!e.productType||!t.productType||e.productType===t.productType)return!0;const r=new Set($(e.productType)),n=new Set([...$(t.productType),...t.tokens]);return[...r].some(o=>n.has(o))}function $s(e){return Math.max(0,Math.min(1,e))}function Fs(e){const t=(e?.chat||e?._chat)?.root||e?._chat?.root;return t?t.getRootNode?.()?.host||t:Array.from(document.querySelectorAll("*")).find(r=>r.shadowRoot?.querySelector?.(".gengage-chat-root, .gengage-chat-launcher-container"))}function qs(e,t){const r=Fs(e);r?.style&&(t?r.style.removeProperty("display"):r.style.setProperty("display","none","important")),t||(e?.chat||e?._chat)?.close?.()}var Us="nd_be_url";function Ds(e,t){const r=zs()||e.beUrl||t;if(!r)throw new Error("resolveBeUrl: backend URL is required. The injector must supply a fallback URL; the SDK has no default.");return r}function zs(){try{const e=new URLSearchParams(window.location.search).get(Us)?.trim();if(!e)return null;const t=new URL(e);return t.protocol!=="https:"&&t.protocol!=="http:"?null:t.toString().replace(/\/+$/u,"")}catch{return null}}function mn(e){const t=e?.payload;if(typeof t=="string")return t;if(t&&typeof t=="object"&&"text"in t){const n=t.text;if(typeof n=="string")return n}const r=e?.action;return r&&typeof r.payload=="string"?r.payload:r&&typeof r.title=="string"?r.title:""}var Bt=[{pattern:/\bhttps?:\/\/[^\s?#]+(?:\?[^\s#]*)?/giu,replacement:Gs},{pattern:/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/giu,replacement:"[email]"},{pattern:/\b(?:\+?\d[\d\s().-]{7,}\d)\b/gu,replacement:"[phone]"},{pattern:/\b(?:token|secret|csrf|cookie|bearer|session|sid|cart(?:[_-]?id)?)\s*[:=]\s*[^\s,;&]+/giu,replacement:"[secret]"},{pattern:/\b(?:order|cart|session)[_-]?(?:id|no|number)?\s*[:#=]?\s*[A-Z0-9-]{6,}\b/giu,replacement:"[secret]"}],Mt={patterns:Bt};function Nt(e,t=Mt){let r=typeof e=="string"?e:e==null?"":String(e);for(const n of t.patterns||[]){const o=n.replacement;r=typeof o=="function"?r.replace(n.pattern,i=>o(i)):r.replace(n.pattern,o)}return r}function gn(e,t=Mt){return Nt(mn(e),t)}function Gs(e){try{const t=new URL(e);return`${t.origin}${t.pathname}${t.search?"?[query]":""}`}catch{return"[url]"}}var Hs=["assistantName","homeDomain","categories","policyTopics"],Vs={intent:["searchContract","competitorBrands"]};function Ks(e,t,r,n={}){const o=yn(t,r,n);return Object.keys(o).length?{...e,account_config:o}:e}function yn(e,t,r={}){if(!e)return{};const n={},o=r.baseKeys||Hs;for(const s of o)hn(n,e,s);const i=e[t];i&&typeof i=="object"&&!Array.isArray(i)&&Object.assign(n,Ws(i));const a=r.opAllowlist||Vs;for(const s of a[t]||[])hn(n,e,s);return n}function hn(e,t,r){t[r]!==void 0&&(e[r]=t[r])}function Ws(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var Js=["addToCart","search","searchKeyword","facetedSearch","searchGiftOptions","similaritySearch"];function Zs(e,t,r={}){const n=window,o=n.gengage||(n.gengage={}),i=o.tools||(o.tools={});i[e]=t;for(const a of r.accountAliases||[])i[a]=t;if(r.exposeStandardAliases!==!1)for(const a of r.standardAliases||Js){const s=t[a];typeof s=="function"&&(i[a]=i[a]||s)}return t}function Ys({getPageType:e,getProduct:t}){return()=>({url:window.location.href,title:document.title,pageType:e(),product:t()})}function Qs({accountId:e,getPageType:t,getProduct:r,getToolNames:n,getSearchCapabilities:o,getMemory:i}){return async()=>({accountId:e,url:window.location.href,pageType:t(),productSku:r()?.sku??null,toolNames:n(),...o?{searchCapabilities:o()}:{},...i?{memoryPolicy:i().policy}:{},timestamp:new Date().toISOString()})}function Xs({accountId:e,runtimeFile:t="runtime.js",startExport:r="start",globalBaseUrlKey:n,errorLabel:o,trustedRuntimeOrigins:i}={}){if(!e)throw new Error("accountId is required.");const a=o||e,s=window,c=()=>{const p=s.GengageInjectorConfig||{},y=p[e]||{};return{...p,...y}},l=()=>{const p=c();if(p.runtimeUrl)return p.runtimeUrl;const y=p.assetBaseUrl||p.baseUrl||document.currentScript?.getAttribute("src")||(n?s[n]:null);if(!y)throw new Error(`${a} runtime URL cannot be resolved.`);return new URL(t,y).href},u=p=>{if(i===!0)return p;const y=new URL(p,window.location.href).origin,h=new Set([window.location.origin]),g=c();Ce(h,document.currentScript?.getAttribute("src")),Ce(h,g.assetBaseUrl),Ce(h,g.baseUrl),Ce(h,n?s[n]:void 0);for(const b of i||[])Ce(h,b);if(!h.has(y))throw new Error(`${a} runtime origin ${y} is not trusted.`);return p},f=s.GengageAssistantInjector||(s.GengageAssistantInjector={}),m=f[e]||(f[e]={});return m.loaderPromise||(m.loaderPromise=import(u(l())).then(p=>{const y=p[r];if(typeof y!="function")throw new Error(`${a} runtime export ${r} is unavailable.`);return y()}).catch(p=>{throw delete m.loaderPromise,console.error(`[Gengage][${e}] runtime load failed`,p),p})),m.loaderPromise}function Ce(e,t){if(t)try{const r=new URL(t,window.location.href);e.add(r.origin)}catch{e.add(t)}}var ec=500,bn="__GENGAGE_AGENTIC_ACTIVITY__";function wn({accountId:e,clock:t=()=>Date.now()}={}){const r=new Set;let n=1;const o={accountId:e,entries:[]};function i(a){const s=_n({id:n++,at:t(),accountId:e,...a});o.entries.push(s),o.entries.length>ec&&(o.entries=o.entries.slice(-500));for(const c of r)c(s,o.entries);return s}return{accountId:e,get entries(){return o.entries.slice()},clear(){o.entries=[];for(const a of r)a(null,o.entries)},record:i,subscribe(a){return typeof a!="function"?()=>{}:(r.add(a),a(null,o.entries),()=>r.delete(a))}}}function kn(e){const t=window[bn];if(t?.accountId===e&&typeof t.record=="function")return t;const r=wn({accountId:e});return window[bn]=r,r}function _n(e){const t=String(e.kind||e.type||"activity"),r=Sn(t),n=e.severity||vn({...e,kind:t});return{...e,kind:t,section:r,severity:n,group:e.group||An({...e,kind:t,section:r}),noise:e.noise===!0||n==="info"&&tc({...e,kind:t})}}function tc(e){const t=String(e?.kind||"");if(t==="flow/trace"){const r=String(e?.event?.type||"");if(r==="step:start"||r==="step:end")return!0}if(t==="flow/metadata"){const r=String(e?.event?.phase||e?.event?.type||e?.event?.name||"").toLowerCase();if(r==="panelloading"||r==="heartbeat"||r==="tick")return!0}return!!t.startsWith("runtime/")}function Sn(e){return e.startsWith("flow/")?"Flow":e.startsWith("intent/")?"Intent":e.startsWith("be/")?"Backend":e.startsWith("tool/")?"Tools":e==="beacon"?"Telemetry":"Runtime"}function vn(e){const t=String(e?.kind||"");return/\/(?:error|rejected|thrown)$/u.test(t)||e?.error||t==="be/response"&&Number(e?.status)>=400?"error":t==="flow/metadata"&&/fallback|retry|missing|empty/iu.test(String(e?.event?.phase||e?.event?.type||""))||t==="be/response"&&Number(e?.status)>=300?"warn":"info"}function An(e){const t=String(e?.kind||"");if(t.startsWith("tool/"))return e?.tool?`Tool: ${e.tool}`:"Tools";if(t.startsWith("be/"))return e?.op?`BE: ${e.op}`:"Backend";if(t==="flow/request"){const r=e?.request?.type||e?.request?.action?.type;return r?`Flow: ${r}`:"Flow request"}if(t==="flow/action"){const r=e?.event?.name||e?.event?.action||e?.event?.type;return r?`Action: ${r}`:"Flow action"}return t==="flow/ui"?e?.widget?`UI: ${e.widget}`:"UI":t.startsWith("flow/")?"Flow lifecycle":t.startsWith("intent/")?e?.intent?.kind?`Intent: ${e.intent.kind}`:"Intent":t==="beacon"?e?.payload?.type?`Beacon: ${e.payload.type}`:"Beacon":e?.section||"Runtime"}var rc=8,$t=120;function xn(e=[]){const t=Array.isArray(e)?e:[],r={status:"idle",sessionId:"",requestType:"",actionType:"",model:"",current:"Waiting for activity",errors:0,warnings:0,startedAt:null,lastAt:null,tools:[],beOps:[],uiSurfaces:[],timeline:[]},n={intent:null,route:null,panel:null,threadExtensions:{},pageProduct:null,products:null,ui:null,lastText:""};for(const o of t)nc(r,n,o);return r.tools=Ut(r.tools).slice(-8),r.beOps=Ut(r.beOps).slice(-8),r.uiSurfaces=Ut(r.uiSurfaces).slice(-8),r.timeline=r.timeline.slice(-36),!r.lastAt&&t.length&&(r.lastAt=t.at(-1)?.at||null),{flow:r,context:n}}function Pe(e,t=""){if(!e||typeof e!="object")return null;const r=O({source:t,panel:He(e.panel||e.panel_state),threadExtensions:fc(e.thread?.extensions||e.threadExtensions||e.extensions),pageProduct:hc(e.product||e.page?.product),products:fe(e.products||e.last_search_products||e.items),ui:Ft(e.spec),intent:qt(e.intent),route:Ke({searchParams:e.searchParams||e.search_params,flowParams:e.flowParams||e.flow_params})});return Object.keys(r).some(n=>n!=="source")?r:null}function He(e){if(!e||typeof e!="object")return null;const t=fe(e.last_search_products||e.current_panel_products),r=pe(e.screen_sku_list||e.search_suggestions_skus);return O({source:e.list_source||e.source,screenType:k(e.screen_type||e.screen),screenSummary:k(e.screen_summary||e.ai_plist_summary),screenSkus:r,chatMentionedSkus:pe(e.chat_mentioned_skus),lastSearch:pc(e.last_search),productCount:t?.count??Dt(e.current_panel_product_count),productSkus:t?.skus})}function Ft(e,t="",r=""){if(!e||typeof e!="object")return null;const n=bc(e);if(!n)return null;const o=n.props||{},i=mc(e,n,o),a=Array.isArray(o.buttons)?o.buttons:Array.isArray(o.actions)?o.actions:[],s=Array.isArray(o.rows)?o.rows.length:Array.isArray(o.comparison_table)?o.comparison_table.length:void 0;return O({widget:t,panelHint:r,rootType:n.type,productCount:i?.count,productSkus:i?.skus,buttonCount:a.length||void 0,buttonLabels:a.length?pe(a.map(c=>c.label||c.title)):void 0,comparisonRows:s})}function nc(e,t,r={}){if(!(!r||typeof r!="object"))switch(e.lastAt=r.at||e.lastAt,r.severity==="error"&&(e.errors+=1),r.severity==="warn"&&(e.warnings+=1),r.state&&Ve(t,r.state),r.kind){case"flow/request":oc(e,t,r);break;case"flow/metadata":ic(e,t,r);break;case"flow/trace":sc(e,r);break;case"flow/ui":ac(e,t,r);break;case"flow/text-final":t.lastText=k(r.content,$t),L(e,r,"Text",t.lastText,"done");break;case"flow/done":e.status=e.status==="error"?"error":"done",e.current="Done",L(e,r,"Done","Flow completed","done");break;case"flow/error":case"flow/rejected":case"flow/thrown":e.status="error",e.current="Flow error",L(e,r,"Error",k(r.error||r.kind),"error");break;case"tool/start":e.status=e.status==="idle"?"running":e.status,e.current=`Tool: ${r.tool||"tool"}`,e.tools.push(r.tool||"tool"),L(e,r,"Tool",r.tool||"tool","running");break;case"tool/done":e.tools.push(r.tool||"tool"),L(e,r,"Tool",r.tool||"tool","done");break;case"tool/error":e.status="error",e.current=`Tool error: ${r.tool||"tool"}`,e.tools.push(r.tool||"tool"),L(e,r,"Tool",r.tool||"tool","error");break;case"be/request":e.status=e.status==="idle"?"running":e.status,e.current=`BE: ${r.op||"request"}`,e.beOps.push(r.op||"unknown"),cc(t,r),L(e,r,"BE",r.op||"request","running");break;case"be/response":e.beOps.push(r.op||r.result?.op||"unknown"),lc(t,r.result),L(e,r,"BE",r.op||r.result?.intent?.kind||"response",r.severity||"done");break;case"intent/selected":t.intent=qt(r.intent),t.route=Ke({searchParams:r.searchParams,flowParams:r.flowParams}),e.current=`Intent: ${t.intent?.kind||"selected"}`,L(e,r,"Intent",t.intent?.kind||"selected","done");break;default:r.kind?.startsWith?.("runtime/")&&L(e,r,"Runtime",r.title||r.kind,"done");break}}function oc(e,t,r){const n=r.request||{};e.status="running",e.startedAt=r.at||e.startedAt,e.sessionId=k(n.session_id||n.sessionId||e.sessionId),e.requestType=k(n.type||e.requestType),e.actionType=k(n.action?.type||n.payload?.type||e.actionType),e.current=e.actionType||e.requestType||"Flow request",Ve(t,Pe(n.context||{},"request.context")),L(e,r,"Request",[e.requestType,e.actionType].filter(Boolean).join(" / ")||"request","running")}function ic(e,t,r){const n=r.event||{};e.sessionId=k(n.sessionId||n.session_id||e.sessionId),e.model=k(n.model||e.model),n.panelLoading===!0&&(e.current="Panel loading"),Ve(t,Pe(n,"flow.metadata")),L(e,r,"Metadata",k(n.name||n.phase||n.type||"metadata"),r.severity)}function ac(e,t,r){const n=Ft(r.spec,r.widget,r.panelHint);n&&(t.ui=n,typeof n.productCount=="number"&&(t.products={count:n.productCount,skus:n.productSkus||[]}),e.uiSurfaces.push(n.rootType),e.current=`UI: ${n.rootType}`,L(e,r,"UI",n.rootType||"ui","done"))}function sc(e,t){const r=t.event||{},n=k(r.type||"trace"),o=k(r.stepName||r.stepKind||"");e.sessionId=k(r.sessionId||e.sessionId),e.current=o?`${n}: ${o}`:n,L(e,t,"Trace",[n,o].filter(Boolean).join(" / ")||"trace",wc(n))}function cc(e,t){const r=t.params||{};Ve(e,Pe(r,"be.params")),r.panel_state&&(e.panel=He(r.panel_state)),r.structured_context&&(e.panel=Tn(e.panel,He(r.structured_context)));const n=Ke({searchParams:r.search_params,flowParams:r.flow_params});n&&(e.route=n)}function lc(e,t){if(!t||typeof t!="object")return;t.intent&&(e.intent=qt(t.intent));const r=Ke({searchParams:t.search_params,flowParams:t.flow_params});r&&(e.route=r)}function Ve(e,t){!t||typeof t!="object"||(t.panel&&(e.panel=Tn(e.panel,t.panel)),t.threadExtensions&&(e.threadExtensions={...e.threadExtensions,...t.threadExtensions}),t.pageProduct&&(e.pageProduct=t.pageProduct),t.products&&(e.products=t.products),t.ui&&(e.ui=t.ui),t.intent&&(e.intent=t.intent),t.route&&(e.route=t.route))}function Tn(e,t){return e?t?O({...e,...t}):e:t||null}function L(e,t,r,n,o="done"){e.timeline.push(O({id:t.id,at:t.at,label:r,detail:k(n,$t),status:o==="info"?"done":o,kind:t.kind}))}function qt(e){return!e||typeof e!="object"?null:O({kind:k(e.kind||e.intent||e.type),target:k(e.target),confidence:typeof e.confidence=="number"?Math.round(e.confidence*100)/100:void 0})}function Ke({searchParams:e,flowParams:t}={}){const r=O({search:uc(e),flow:dc(t)});return Object.keys(r).length?r:null}function uc(e){return!e||typeof e!="object"?null:O({query:k(e.query||e.search_query),category:k(e.category||e.category_name||e.categoryName),categoryId:k(e.categoryId||e.category_id),limit:Dt(e.limit),facets:Array.isArray(e.facets)?e.facets.length:void 0})}function dc(e){return!e||typeof e!="object"?null:O({target:k(e.target),sku:k(e.sku||e.product_sku),skus:pe(e.skus||e.sku_list),action:k(e.action||e.action_type)})}function fc(e){if(!e||typeof e!="object")return{};const t={};for(const[r,n]of Object.entries(e))n!=null&&(t[r]=n&&typeof n=="object"?O({keys:Object.keys(n).slice(0,8),summary:k(n.summary||n.occasion||n.target_date_iso||n.type)}):k(n));return t}function pc(e){return!e||typeof e!="object"?null:O({query:k(e.query),source:k(e.source),category:k(e.category||e.category_name),count:Dt(e.count)})}function fe(e){if(!Array.isArray(e))return null;const t=e.filter(Boolean);return O({count:t.length,skus:pe(t.map(r=>r?.sku||r?.code||r?.id)),names:pe(t.map(r=>r?.name||r?.title),4)})}function mc(e,t,r){if(t.type==="ProductDetailsPanel")return fe([r.product||r.item].filter(Boolean));if(t.type==="ProductGrid"){const n=gc(r.products,r.items,r.cards);return fe(n||yc(e,t))}return fe(r.products||r.items||r.cards)}function gc(...e){return e.find(t=>Array.isArray(t))||null}function yc(e,t){const r=e.elements||{};return(Array.isArray(t.children)?t.children:[]).map(n=>r[n]).filter(n=>n?.type==="ProductCard").map(n=>n.props?.product||n.props?.item||n.props).filter(Boolean)}function hc(e){return!e||typeof e!="object"?null:O({sku:k(e.sku||e.code||e.id),name:k(e.name||e.title),category:k(e.category),url:k(e.url)})}function bc(e){const t=e.elements||{};return t[e.root||"root"]||t.root||e.rootElement||null}function pe(e,t=rc){if(!Array.isArray(e))return;const r=e.map(n=>k(n)).filter(Boolean);return r.length?r.slice(0,t):void 0}function Ut(e){return[...new Set(e.map(t=>k(t)).filter(Boolean))]}function Dt(e){return Number.isFinite(Number(e))?Number(e):void 0}function wc(e){return/error$/u.test(e)?"error":/start$/u.test(e)?"running":"done"}function k(e,t=$t){const r=String(e??"").replace(/\s+/gu," ").trim();return r.length>t?`${r.slice(0,t-1)}...`:r}function O(e){return Object.fromEntries(Object.entries(e||{}).filter(([,t])=>t==null||t===""?!1:Array.isArray(t)?t.length>0:typeof t=="object"?Object.keys(t).length>0:!0))}function En(e,t){if(!e||typeof e!="object"||!t)return e;const r={...e};for(const[n,o]of Object.entries(e))typeof o!="function"||o.__gengageActivityWrapped||(r[n]=async function(a,...s){t.record({kind:"tool/start",tool:n,params:a});try{const c=await o.call(this,a,...s);return t.record({kind:"tool/done",tool:n,params:a,result:Pc(c),state:Pe(c,`tool:${n}`)}),c}catch(c){throw t.record({kind:"tool/error",tool:n,params:a,error:me(c)}),c}},Object.defineProperty(r[n],"__gengageActivityWrapped",{value:!0}));return r}function Cn(e,t){return t?r=>(t.record({kind:"beacon",payload:r}),e?.(r)):e}function Pn(e,t){if(!t)return!1;const r=window.GengageAssistantInjector?.[e],n=r?.streamTransport;if(typeof n!="function"||n.__gengageActivityWrapped)return!1;const o=function(a,s,c,l){t.record({kind:"flow/request",request:a});try{const u=n.call(this,a,kc(s,t),c,l);return u&&typeof u.then=="function"?u.catch(f=>{throw t.record({kind:"flow/rejected",requestType:a?.type,error:me(f)}),f}):u}catch(u){throw t.record({kind:"flow/thrown",requestType:a?.type,error:me(u)}),u}};return Object.defineProperty(o,"__gengageActivityWrapped",{value:!0}),r.streamTransport=o,t.record({kind:"runtime/transport-wrapped",title:"streamTransport wrapped"}),!0}function Rn({accountId:e,collector:t,promptBaseUrl:r}={}){if(!t||window.__GENGAGE_ACTIVITY_FETCH_PATCHED__)return;window.__GENGAGE_ACTIVITY_FETCH_PATCHED__=!0;const n=window.fetch?.bind(window);typeof n=="function"&&(window.fetch=async(o,i)=>{const a=xc(o,i),s=Ec(a.url);let c="";s&&(c=a.body?.op_name||a.body?.op||"unknown",t.record({kind:"be/request",source:"main-thread-fetch",url:a.url,op:c,opDomain:a.body?.op_domain||"",prompt:await _c({accountId:e,opName:c,promptBaseUrl:r}),params:a.body?.op_payload||{},rawBody:a.body}));const l=await n(o,i);return s&&l.clone().text().then(u=>{const f=Cc(u);t.record({kind:"be/response",source:"main-thread-fetch",url:a.url,status:l.status,op:c,result:f,rawText:u}),jn(t,f)}).catch(u=>{t.record({kind:"be/response",source:"main-thread-fetch",url:a.url,status:l.status,op:c,error:me(u)})}),l})}function kc(e,t){if(!e||e.__gengageActivityWrapped)return e;const r={...e};Object.defineProperty(r,"__gengageActivityWrapped",{value:!0});for(const n of["onAction","onMetadata","onUISpec","onTextChunk","onError","onDone"])typeof e[n]=="function"&&(r[n]=(...o)=>(n==="onAction"?t.record({kind:"flow/action",event:o[0]}):n==="onMetadata"?t.record({kind:"flow/metadata",event:o[0]}):n==="onUISpec"?t.record({kind:"flow/ui",widget:o[1],panelHint:o[2],clearPanel:o[3]===!0,spec:o[0]}):n==="onTextChunk"&&o[1]===!0?t.record({kind:"flow/text-final",content:o[0],extra:o[2]}):n==="onError"?t.record({kind:"flow/error",error:me(o[0])}):n==="onDone"&&t.record({kind:"flow/done"}),e[n](...o)));return r}function zt(e,t){!e||!t||(e.record(t),t.kind==="be/response"&&jn(e,t.result))}async function _c({accountId:e,opName:t,promptBaseUrl:r}){if(!e||!t)return null;const n=Sc({accountId:e,baseId:String(e).replace(/-agentic$/u,""),promptBaseUrl:r});if(!n)return{error:"Configure agenticActivityPromptBaseUrl to inspect prompt source in this build."};try{const o=new URL(`${t}.yaml`,n).href,i=await fetch(o,{cache:"no-store"});return i.ok?{url:o,yaml:await i.text()}:{url:o,error:`HTTP ${i.status}`}}catch(o){return{error:me(o)}}}function Sc({accountId:e,baseId:t,promptBaseUrl:r}){if(typeof r=="string"&&r.trim())return r;const n=vc(e,t);return n||Ac(t)}function vc(e,t){const r=window.__GENGAGE_AGENTIC_PROMPT_BASE_URL__;if(typeof r=="string"&&r.trim())return r;if(r&&typeof r=="object"){const o=r[e]||r[t];if(typeof o=="string"&&o.trim())return o}const n=(window.GengageInjectorConfig?.[e]||window.GengageInjectorConfig?.[t])?.agenticActivityPromptBaseUrl;return typeof n=="string"&&n.trim()?n:null}function Ac(e){const t=Array.from(document.scripts||[]);for(const r of t){const n=r?.src||"";if(n.includes("/agentic/index.js"))return new URL(`../prompts/${e}/`,n).href;if(n.includes("/agentic.iife.js"))return new URL(`prompts/${e}/`,n).href}return null}function jn(e,t){const r=t?.intent;r&&e.record({kind:"intent/selected",intent:r,searchParams:t?.search_params,flowParams:t?.flow_params})}function xc(e,t){const r=typeof e=="string"?e:e?.url||"",n=t?.body||(typeof e!="string"?e?.body:null);return{url:String(r||""),body:Tc(n)}}function Tc(e){if(!e||typeof e!="string")return{};try{return JSON.parse(e)}catch{return{raw:e}}}function Ec(e){try{const t=new URL(e,window.location.href);return t.pathname==="/v1/execute"&&/agentic\.gengage\.ai$/u.test(t.hostname)}catch{return!1}}function Cc(e){const t={};for(const r of String(e||"").split(/\r?\n/u)){const n=r.trim();if(n)try{Object.assign(t,JSON.parse(n))}catch{t._raw=[t._raw,n].filter(Boolean).join(`
|
|
8
|
-
`)}}return t}function Pc(e){if(Array.isArray(e))return{type:"array",length:e.length,preview:e.slice(0,5)};if(!e||typeof e!="object")return e;const t={};for(const[r,n]of Object.entries(e))Array.isArray(n)?t[r]={type:"array",length:n.length,preview:n.slice(0,5)}:n&&typeof n=="object"?t[r]={type:"object",keys:Object.keys(n).slice(0,20)}:t[r]=n;return t}function me(e){return e?.message||String(e)}var In="gengage-agentic-activity-overlay",Re="all",Gt="all",Ln=["Flow","Tools","Backend","Intent","Telemetry","Runtime"],On=["info","warn","error"];function Bn(e){if(!e||typeof e.subscribe!="function")return null;const t=document.getElementById(In);if(t?.shadowRoot)return t;const r=document.createElement("div");r.id=In,r.style.cssText="position:fixed;left:10px;top:10px;bottom:10px;z-index:2147483647;";const n=r.attachShadow({mode:"open"});n.innerHTML=Qc(e.accountId),document.documentElement.appendChild(r);const o={entries:[],section:Re,severity:Gt,search:"",grouped:!1,follow:!0,stateVisible:!0,verbose:!1},i={stateView:n.querySelector('[data-role="state-view"]'),list:n.querySelector('[data-role="list"]'),count:n.querySelector('[data-role="count"]'),visibleCount:n.querySelector('[data-role="visible-count"]'),panel:n.querySelector('[data-role="panel"]'),search:n.querySelector('[data-role="search"]'),sections:n.querySelector('[data-role="section-filters"]'),severities:n.querySelector('[data-role="severity-filters"]'),groupToggle:n.querySelector('[data-action="group"]'),followToggle:n.querySelector('[data-action="follow"]'),stateToggle:n.querySelector('[data-action="state"]'),verboseToggle:n.querySelector('[data-action="verbose"]')};Rc(r,i.list);const a=()=>Ic(i,o),s=n.querySelector('[data-role="filters-popup"]'),c=n.querySelector('[data-action="filters-toggle"]');return c?.addEventListener("click",()=>{const l=s.classList.toggle("is-hidden")===!1;c.setAttribute("aria-pressed",String(l))}),n.addEventListener("click",l=>{s.classList.contains("is-hidden")||s.contains(l.target)||c.contains(l.target)||(s.classList.add("is-hidden"),c.setAttribute("aria-pressed","false"))}),n.querySelector('[data-action="clear"]')?.addEventListener("click",()=>e.clear()),n.querySelector('[data-action="toggle"]')?.addEventListener("click",l=>{const u=i.panel.classList.toggle("is-minimized");l.currentTarget.textContent=u?"Open":"Min",r.style.bottom=u?"auto":"10px"}),i.search?.addEventListener("input",()=>{o.search=i.search.value||"",a()}),i.sections?.addEventListener("click",l=>{const u=l.target?.closest?.("[data-section-filter]")?.dataset?.sectionFilter;u&&(o.section=u,a())}),i.severities?.addEventListener("click",l=>{const u=l.target?.closest?.("[data-severity-filter]")?.dataset?.severityFilter;u&&(o.severity=u,a())}),i.groupToggle?.addEventListener("click",()=>{o.grouped=!o.grouped,i.groupToggle.setAttribute("aria-pressed",String(o.grouped)),i.groupToggle.textContent=o.grouped?"Grouped":"Flat",a()}),i.followToggle?.addEventListener("click",()=>{o.follow=!o.follow,i.followToggle.setAttribute("aria-pressed",String(o.follow)),i.followToggle.textContent=o.follow?"Follow":"Paused"}),i.stateToggle?.addEventListener("click",()=>{o.stateVisible=!o.stateVisible,i.stateToggle.setAttribute("aria-pressed",String(o.stateVisible)),i.stateToggle.textContent=o.stateVisible?"State":"State off",a()}),i.verboseToggle?.addEventListener("click",()=>{o.verbose=!o.verbose,i.verboseToggle.setAttribute("aria-pressed",String(o.verbose)),i.verboseToggle.textContent=o.verbose?"Verbose":"Concise",a()}),n.querySelector('[data-action="expand-all"]')?.addEventListener("click",()=>{i.list?.querySelectorAll("details").forEach(l=>{l.open=!0})}),n.querySelector('[data-action="collapse-all"]')?.addEventListener("click",()=>{i.list?.querySelectorAll("details").forEach(l=>{l.open=!1})}),i.list?.addEventListener("click",l=>{const u=l.target?.closest?.('[data-action="copy-json"]');if(!u)return;const f=Number(u.dataset.entryId||0);Jc(o.entries.find(m=>m.id===f),u)}),e.subscribe((l,u)=>{o.entries=u.slice(),a()}),r}function Rc(e,t){e.addEventListener("wheel",r=>{const n=jc(r.composedPath?.()||[],t);n&&(n.scrollTop+=r.deltaY,n.scrollLeft+=r.deltaX,r.preventDefault(),r.stopPropagation())},{passive:!1,capture:!0})}function jc(e,t){for(const r of e)if(!(!r||r.nodeType!==1)&&Mn(r))return r;return Mn(t)?t:null}function Mn(e){return!!(e&&(e.scrollHeight>e.clientHeight+1||e.scrollWidth>e.clientWidth+1)&&getComputedStyle(e).overflow!=="hidden")}function Ic(e,t){const r=Nn(t.entries,t),n=r.slice(-260).reverse();$n(e.sections,t.entries,t.section,"section"),$n(e.severities,t.entries,t.severity,"severity"),e.count&&(e.count.textContent=String(t.entries.length)),e.visibleCount&&(e.visibleCount.textContent=String(r.length)),Mc(e.stateView,xn(t.entries),t.stateVisible),Bc(e.list,n,t)}function Nn(e,t={}){const r=t.section||Re,n=t.severity||Gt,o=zn(t.search),i=t.verbose===!0;return(Array.isArray(e)?e:[]).filter(a=>!i&&a.noise===!0||r!==Re&&a.section!==r||n!==Gt&&a.severity!==n?!1:o?Yc(a).includes(o):!0)}function $n(e,t,r,n){if(!e)return;e.textContent="";const o=n==="section"?Lc(t):Oc(t),i=document.createElement("button");i.type="button",i.dataset[`${n}Filter`]=Re,i.className=r===Re?"chip is-active":"chip",i.textContent=`All ${t.length}`,e.appendChild(i);for(const a of o){const s=t.filter(l=>l[n]===a).length,c=document.createElement("button");c.type="button",c.dataset[`${n}Filter`]=a,c.className=r===a?`chip is-active ${n}-${ge(a)}`:`chip ${n}-${ge(a)}`,c.textContent=`${Vn(a)} ${s}`,e.appendChild(c)}}function Lc(e){const t=new Set(e.map(r=>r.section).filter(Boolean));return Ln.filter(r=>t.has(r)).concat([...t].filter(r=>!Ln.includes(r)).sort())}function Oc(e){const t=new Set(e.map(r=>r.severity).filter(Boolean));return On.filter(r=>t.has(r)).concat([...t].filter(r=>!On.includes(r)).sort())}function Bc(e,t,r){if(!e)return;if(e.textContent="",!t.length){const o=document.createElement("div");o.className="empty",o.textContent=r.entries.length?"No activity matches the current filters.":"Waiting for agentic activity...",e.appendChild(o);return}const n=document.createDocumentFragment();if(r.grouped)for(const o of Kc(t))n.appendChild(Wc(o));else for(const o of t)n.appendChild(qn(o));e.appendChild(n),r.follow&&requestAnimationFrame(()=>e.scrollTop=0)}function Mc(e,t,r){if(!e||(e.textContent="",e.classList.toggle("is-hidden",!r),!r))return;const{flow:n,context:o}=t,i=document.createDocumentFragment();i.appendChild(Nc(n)),i.appendChild($c(o)),i.appendChild(Fc(n.timeline)),e.appendChild(i)}function Nc(e){const t=document.createElement("section");return t.className=`viz-card flow-card status-${ge(e.status)}`,t.appendChild(Ht("Flow State",e.status)),Fn(t,[["Current",e.current],["Session",e.sessionId],["Request",[e.requestType,e.actionType].filter(Boolean).join(" / ")],["Model",e.model],["Tools",e.tools?.join(", ")],["BE ops",e.beOps?.join(", ")],["UI",e.uiSurfaces?.join(", ")],["Health",qc(e)]]),t}function $c(e){const t=document.createElement("section");return t.className="viz-card context-card",t.appendChild(Ht("Context State",e.panel?.screenType||e.ui?.rootType||"empty")),Fn(t,[["Intent",Uc(e.intent)],["Route",Dc(e.route)],["Screen",zc(e)],["Last search",Gc(e.panel?.lastSearch)],["Products",Hc(e.panel,e.products)],["Page product",Vc(e.pageProduct)],["Extensions",Object.keys(e.threadExtensions||{}).join(", ")],["Last text",e.lastText]]),t}function Fc(e){const t=document.createElement("section");t.className="viz-card timeline-card",t.appendChild(Ht("Flow Timeline",`${e.length} steps`));const r=document.createElement("ol");if(r.className="timeline",e.length)for(const n of e){const o=document.createElement("li");o.className=`timeline-step step-${ge(n.status||"done")}`;const i=document.createElement("span");i.className="timeline-time",i.textContent=Hn(n.at);const a=document.createElement("span");a.className="timeline-label",a.textContent=n.label||n.kind||"Step";const s=document.createElement("span");s.className="timeline-detail",s.textContent=n.detail||n.kind||"",o.append(i,a,s),r.appendChild(o)}else{const n=document.createElement("li");n.className="timeline-empty",n.textContent="No flow events yet.",r.appendChild(n)}return t.appendChild(r),t}function Ht(e,t){const r=document.createElement("div");r.className="viz-title";const n=document.createElement("span");n.textContent=e;const o=document.createElement("span");return o.className="viz-badge",o.textContent=t||"idle",r.append(n,o),r}function Fn(e,t){for(const[r,n]of t){if(n==null||n==="")continue;const o=document.createElement("div");o.className="viz-row";const i=document.createElement("span");i.className="viz-key",i.textContent=r;const a=document.createElement("span");a.className="viz-value",a.textContent=String(n),o.append(i,a),e.appendChild(o)}}function qc(e){return!e.errors&&!e.warnings?"clean":`${e.errors||0} errors, ${e.warnings||0} warnings`}function Uc(e){return e?[e.kind,e.target,e.confidence!=null?`conf ${e.confidence}`:""].filter(Boolean).join(" / "):""}function Dc(e){return e?[e.search?[e.search.query,e.search.category,e.search.categoryId,e.search.facets?`${e.search.facets} facets`:""].filter(Boolean).join(" / "):"",e.flow?[e.flow.target,e.flow.sku,e.flow.skus?.join(", "),e.flow.action].filter(Boolean).join(" / "):""].filter(Boolean).join(" -> "):""}function zc(e){const t=e.panel||{},r=e.ui||{};return[t.screenType,r.rootType,r.widget,r.panelHint].filter(Boolean).join(" / ")}function Gc(e){return e?[e.query,e.source,e.category,e.count!=null?`${e.count} results`:""].filter(Boolean).join(" / "):""}function Hc(e,t){const r=e?.productSkus||e?.screenSkus||t?.skus||[],n=e?.productCount??t?.count;return n==null&&!r.length?"":[`${n??r.length} products`,r.join(", ")].filter(Boolean).join(" / ")}function Vc(e){return e?[e.sku,e.name,e.category].filter(Boolean).join(" / "):""}function Kc(e){const t=new Map;for(const r of e){const n=`${r.section||"Runtime"}:${r.group||r.kind}`,o=t.get(n)||{key:n,section:r.section||"Runtime",severity:r.severity||"info",title:r.group||r.kind,entries:[]};o.entries.push(r),o.severity=Zc(o.severity,r.severity),t.set(n,o)}return[...t.values()]}function Wc(e){const t=document.createElement("section");t.className=`group group-${ge(e.severity)}`,t.dataset.section=e.section;const r=document.createElement("div");r.className="group-head";const n=document.createElement("span");n.className="section",n.textContent=e.section;const o=document.createElement("span");o.className="group-title",o.textContent=e.title;const i=document.createElement("span");i.className="group-count",i.textContent=String(e.entries.length),r.append(n,o,i),t.appendChild(r);for(const a of e.entries)t.appendChild(qn(a));return t}function qn(e){const t=document.createElement("details");t.dataset.entryId=String(e.id||""),t.dataset.section=e.section||"Runtime",t.dataset.severity=e.severity||"info",t.className=`entry entry-${ge(e.severity||"info")}`,t.open=e.severity==="error";const r=document.createElement("summary"),n=document.createElement("div");n.className="entry-meta";const o=document.createElement("span");o.className="sev-dot";const i=document.createElement("span");i.className="time",i.textContent=Hn(e.at);const a=document.createElement("span");a.className="section",a.textContent=e.section||"Runtime";const s=document.createElement("span");if(s.className="kind-chip",s.textContent=e.kind||"",n.append(o,i,a,s),e.severity==="warn"||e.severity==="error"){const g=document.createElement("span");g.className="severity",g.textContent=Vn(e.severity),n.append(g)}const c=document.createElement("div");c.className="entry-title-row";const l=document.createElement("span");l.className="caret",l.textContent="▸";const u=document.createElement("span");u.className="title",u.textContent=Gn(e),c.append(l,u),r.append(n,c);const f=document.createElement("div");f.className="entry-body";const m=document.createElement("div");if(m.className="entry-toolbar",e.group){const g=document.createElement("span");g.className="kind",g.textContent=e.group,m.append(g)}const p=document.createElement("button");p.type="button",p.dataset.action="copy-json",p.dataset.entryId=String(e.id||""),p.textContent="Copy JSON",m.append(p);const y=document.createElement("pre"),h=document.createElement("code");return h.innerHTML=Un(e),y.appendChild(h),f.append(m,y),t.append(r,f),t}function Un(e){const t=Vt(e),r=/("(?:\\u[\da-fA-F]{4}|\\[^u]|[^\\"])*"(?:\s*:)?|\btrue\b|\bfalse\b|\bnull\b|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)/gu;let n="",o=0;for(const i of t.matchAll(r)){const a=i[0];n+=je(t.slice(o,i.index));let s="json-number";a.startsWith('"')?s=a.endsWith(":")?"json-key":"json-string":a==="true"||a==="false"?s="json-boolean":a==="null"&&(s="json-null"),n+=`<span class="${s}">${je(a)}</span>`,o=i.index+a.length}return n+je(t.slice(o))}function Jc(e,t){if(!e)return;const r=Vt(e),n=()=>{const o=t.textContent;t.textContent="Copied",setTimeout(()=>{t.textContent=o},900)};if(navigator.clipboard?.writeText){navigator.clipboard.writeText(r).then(n).catch(()=>Dn(r,n));return}Dn(r,n)}function Dn(e,t){const r=document.createElement("textarea");r.value=e,r.style.cssText="position:fixed;left:-9999px;top:-9999px;",document.body.appendChild(r),r.select();try{document.execCommand("copy"),t()}finally{r.remove()}}function Zc(e,t){const r={info:0,warn:1,error:2};return(r[t]||0)>(r[e]||0)?t:e}function Yc(e){return zn([e.kind,e.section,e.severity,e.group,Gn(e),e.tool,e.op,e.request?.type,e.request?.action?.type,e.event?.name,e.event?.action,e.event?.type,Vt(e)].join(" "))}function zn(e){return String(e||"").toLocaleLowerCase("tr-TR").trim()}function Gn(e){if(e.kind==="flow/request")return e.request?.type||e.request?.action?.type||"request";if(e.kind==="flow/action")return e.event?.name||e.event?.action||e.event?.type||"action";if(e.kind==="flow/metadata")return e.event?.name||e.event?.phase||e.event?.type||"metadata";if(e.kind==="flow/ui")return e.widget||e.panelHint||"ui";if(e.kind==="flow/text-final")return Xc(e.content||"final text",90);if(e.kind==="be/request")return e.op||"BE request";if(e.kind==="be/response"){const t=e.result?.intent?.kind||e.result?.intent_kind||e.result?.kind;return t?`intent selected: ${t}`:e.op||"BE response"}return e.kind==="intent/selected"?e.intent?.kind||e.kind:e.kind.startsWith("tool/")?e.tool||"tool":e.kind==="beacon"?e.payload?.type||"beacon":e.title||e.kind}function Qc(e){return`
|
|
9
|
-
<style>
|
|
10
|
-
:host { all: initial; }
|
|
11
|
-
.panel {
|
|
12
|
-
width: 460px;
|
|
13
|
-
max-width: calc(100vw - 20px);
|
|
14
|
-
height: 100%;
|
|
15
|
-
max-height: 100%;
|
|
16
|
-
display: flex;
|
|
17
|
-
flex-direction: column;
|
|
18
|
-
overflow: hidden;
|
|
19
|
-
color: #1f2937;
|
|
20
|
-
background: rgba(255, 255, 255, 0.98);
|
|
21
|
-
border: 1px solid #b8c2d2;
|
|
22
|
-
border-radius: 8px;
|
|
23
|
-
box-shadow: 0 18px 48px rgba(17, 24, 39, 0.24);
|
|
24
|
-
font: 12px/1.4 Inter, Arial, sans-serif;
|
|
25
|
-
}
|
|
26
|
-
.head {
|
|
27
|
-
position: relative;
|
|
28
|
-
display: flex;
|
|
29
|
-
align-items: center;
|
|
30
|
-
justify-content: space-between;
|
|
31
|
-
gap: 10px;
|
|
32
|
-
padding: 9px 10px;
|
|
33
|
-
background: #111827;
|
|
34
|
-
color: #fff;
|
|
35
|
-
font-weight: 700;
|
|
36
|
-
}
|
|
37
|
-
.filters-popup {
|
|
38
|
-
position: absolute;
|
|
39
|
-
top: calc(100% + 4px);
|
|
40
|
-
right: 8px;
|
|
41
|
-
left: 8px;
|
|
42
|
-
z-index: 5;
|
|
43
|
-
display: flex;
|
|
44
|
-
flex-direction: column;
|
|
45
|
-
gap: 10px;
|
|
46
|
-
padding: 10px;
|
|
47
|
-
background: #fff;
|
|
48
|
-
color: #1f2937;
|
|
49
|
-
border: 1px solid #cbd5e1;
|
|
50
|
-
border-radius: 8px;
|
|
51
|
-
box-shadow: 0 14px 36px rgba(17, 24, 39, 0.28);
|
|
52
|
-
}
|
|
53
|
-
.filters-popup.is-hidden { display: none; }
|
|
54
|
-
.popup-group { display: flex; flex-direction: column; gap: 5px; }
|
|
55
|
-
.popup-label {
|
|
56
|
-
font-size: 10px;
|
|
57
|
-
font-weight: 800;
|
|
58
|
-
letter-spacing: 0.04em;
|
|
59
|
-
text-transform: uppercase;
|
|
60
|
-
color: #64748b;
|
|
61
|
-
}
|
|
62
|
-
.actions button[data-action="filters-toggle"][aria-pressed="true"] {
|
|
63
|
-
background: rgba(255, 255, 255, 0.28);
|
|
64
|
-
}
|
|
65
|
-
.meta { display: flex; gap: 7px; align-items: center; min-width: 0; }
|
|
66
|
-
.name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
67
|
-
.count { color: #d1d5db; font-weight: 600; white-space: nowrap; }
|
|
68
|
-
.actions { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
|
|
69
|
-
button {
|
|
70
|
-
appearance: none;
|
|
71
|
-
border: 1px solid rgba(255,255,255,0.34);
|
|
72
|
-
border-radius: 5px;
|
|
73
|
-
background: rgba(255,255,255,0.12);
|
|
74
|
-
color: inherit;
|
|
75
|
-
padding: 3px 7px;
|
|
76
|
-
font: inherit;
|
|
77
|
-
cursor: pointer;
|
|
78
|
-
}
|
|
79
|
-
button:hover { filter: brightness(1.08); }
|
|
80
|
-
.controls {
|
|
81
|
-
padding: 7px 8px;
|
|
82
|
-
background: #f8fafc;
|
|
83
|
-
border-bottom: 1px solid #d9dee7;
|
|
84
|
-
}
|
|
85
|
-
.search {
|
|
86
|
-
width: 100%;
|
|
87
|
-
box-sizing: border-box;
|
|
88
|
-
border: 1px solid #cbd5e1;
|
|
89
|
-
border-radius: 6px;
|
|
90
|
-
background: #fff;
|
|
91
|
-
color: #111827;
|
|
92
|
-
padding: 6px 8px;
|
|
93
|
-
font: inherit;
|
|
94
|
-
}
|
|
95
|
-
.filters, .toggles {
|
|
96
|
-
display: flex;
|
|
97
|
-
flex-wrap: wrap;
|
|
98
|
-
gap: 5px;
|
|
99
|
-
align-items: center;
|
|
100
|
-
}
|
|
101
|
-
.chip, .toggles button {
|
|
102
|
-
color: #334155;
|
|
103
|
-
border-color: #cbd5e1;
|
|
104
|
-
background: #fff;
|
|
105
|
-
font-weight: 650;
|
|
106
|
-
}
|
|
107
|
-
.chip.is-active, .toggles button[aria-pressed="true"] {
|
|
108
|
-
background: #111827;
|
|
109
|
-
border-color: #111827;
|
|
110
|
-
color: #fff;
|
|
111
|
-
}
|
|
112
|
-
.section-flow { border-color: #38bdf8; }
|
|
113
|
-
.section-tools { border-color: #34d399; }
|
|
114
|
-
.section-backend { border-color: #fb923c; }
|
|
115
|
-
.section-intent { border-color: #a78bfa; }
|
|
116
|
-
.section-telemetry { border-color: #2dd4bf; }
|
|
117
|
-
.severity-warn { border-color: #f59e0b; }
|
|
118
|
-
.severity-error { border-color: #ef4444; }
|
|
119
|
-
.list {
|
|
120
|
-
flex: 1.4 1 0;
|
|
121
|
-
min-height: 0;
|
|
122
|
-
overflow: auto;
|
|
123
|
-
overscroll-behavior: contain;
|
|
124
|
-
touch-action: pan-x pan-y;
|
|
125
|
-
padding: 8px;
|
|
126
|
-
background: #f1f5f9;
|
|
127
|
-
}
|
|
128
|
-
/* The state dashboard (flow + context + timeline) is the most valuable
|
|
129
|
-
trace surface, so it gets a real vertical share of the rail — a single
|
|
130
|
-
column (full width, nothing squeezed) that scrolls internally and is
|
|
131
|
-
capped to ~45% of the panel so the log below always stays visible. */
|
|
132
|
-
.state-view {
|
|
133
|
-
display: flex;
|
|
134
|
-
flex-direction: column;
|
|
135
|
-
gap: 8px;
|
|
136
|
-
padding: 8px;
|
|
137
|
-
background: #eef4fb;
|
|
138
|
-
border-bottom: 1px solid #d9dee7;
|
|
139
|
-
flex: 1 1 0;
|
|
140
|
-
min-height: 120px;
|
|
141
|
-
overflow: auto;
|
|
142
|
-
overscroll-behavior: contain;
|
|
143
|
-
}
|
|
144
|
-
.state-view.is-hidden { display: none; }
|
|
145
|
-
.viz-card {
|
|
146
|
-
min-width: 0;
|
|
147
|
-
/* In the flex-column state-view, keep each card at its natural content
|
|
148
|
-
height — never let flex shrink it to its title. The state-view
|
|
149
|
-
itself scrolls when the cards together exceed its cap. */
|
|
150
|
-
flex: none;
|
|
151
|
-
border: 1px solid #cbd5e1;
|
|
152
|
-
border-radius: 7px;
|
|
153
|
-
background: #fff;
|
|
154
|
-
overflow: hidden;
|
|
155
|
-
}
|
|
156
|
-
.viz-title {
|
|
157
|
-
display: flex;
|
|
158
|
-
justify-content: space-between;
|
|
159
|
-
gap: 8px;
|
|
160
|
-
align-items: center;
|
|
161
|
-
padding: 6px 8px;
|
|
162
|
-
background: #e2e8f0;
|
|
163
|
-
color: #172033;
|
|
164
|
-
font-weight: 800;
|
|
165
|
-
}
|
|
166
|
-
.viz-badge {
|
|
167
|
-
max-width: 48%;
|
|
168
|
-
overflow: hidden;
|
|
169
|
-
text-overflow: ellipsis;
|
|
170
|
-
white-space: nowrap;
|
|
171
|
-
padding: 1px 6px;
|
|
172
|
-
border-radius: 999px;
|
|
173
|
-
background: #fff;
|
|
174
|
-
border: 1px solid #cbd5e1;
|
|
175
|
-
color: #475569;
|
|
176
|
-
font-weight: 750;
|
|
177
|
-
}
|
|
178
|
-
.status-running .viz-title { background: #dbeafe; }
|
|
179
|
-
.status-done .viz-title { background: #dcfce7; }
|
|
180
|
-
.status-error .viz-title { background: #fee2e2; }
|
|
181
|
-
.viz-row {
|
|
182
|
-
display: grid;
|
|
183
|
-
grid-template-columns: 82px minmax(0, 1fr);
|
|
184
|
-
gap: 6px;
|
|
185
|
-
padding: 5px 8px;
|
|
186
|
-
border-top: 1px solid #eef2f7;
|
|
187
|
-
align-items: baseline;
|
|
188
|
-
}
|
|
189
|
-
.viz-key {
|
|
190
|
-
color: #64748b;
|
|
191
|
-
font-weight: 750;
|
|
192
|
-
}
|
|
193
|
-
/* Wrap rather than ellipsis so no state value is silently clipped. */
|
|
194
|
-
.viz-value {
|
|
195
|
-
color: #111827;
|
|
196
|
-
min-width: 0;
|
|
197
|
-
word-break: break-word;
|
|
198
|
-
overflow-wrap: anywhere;
|
|
199
|
-
}
|
|
200
|
-
.timeline {
|
|
201
|
-
list-style: none;
|
|
202
|
-
margin: 0;
|
|
203
|
-
padding: 0;
|
|
204
|
-
max-height: 122px;
|
|
205
|
-
overflow: auto;
|
|
206
|
-
}
|
|
207
|
-
.timeline-step, .timeline-empty {
|
|
208
|
-
display: grid;
|
|
209
|
-
grid-template-columns: 64px auto minmax(0, 1fr);
|
|
210
|
-
gap: 7px;
|
|
211
|
-
align-items: baseline;
|
|
212
|
-
padding: 5px 8px;
|
|
213
|
-
border-top: 1px solid #eef2f7;
|
|
214
|
-
}
|
|
215
|
-
.timeline-time {
|
|
216
|
-
color: #64748b;
|
|
217
|
-
font-variant-numeric: tabular-nums;
|
|
218
|
-
}
|
|
219
|
-
.timeline-label {
|
|
220
|
-
width: fit-content;
|
|
221
|
-
border-radius: 999px;
|
|
222
|
-
padding: 1px 7px;
|
|
223
|
-
background: #e2e8f0;
|
|
224
|
-
color: #334155;
|
|
225
|
-
font-weight: 750;
|
|
226
|
-
white-space: nowrap;
|
|
227
|
-
}
|
|
228
|
-
.timeline-detail {
|
|
229
|
-
min-width: 0;
|
|
230
|
-
word-break: break-word;
|
|
231
|
-
overflow-wrap: anywhere;
|
|
232
|
-
}
|
|
233
|
-
.step-running .timeline-label { background: #dbeafe; color: #1d4ed8; }
|
|
234
|
-
.step-warn .timeline-label { background: #fef3c7; color: #92400e; }
|
|
235
|
-
.step-error .timeline-label { background: #fee2e2; color: #991b1b; }
|
|
236
|
-
.empty { color: #64748b; padding: 10px; }
|
|
237
|
-
.group {
|
|
238
|
-
border: 1px solid #d6dce6;
|
|
239
|
-
border-radius: 7px;
|
|
240
|
-
margin: 0 0 8px;
|
|
241
|
-
background: #fff;
|
|
242
|
-
overflow: hidden;
|
|
243
|
-
}
|
|
244
|
-
.group-head {
|
|
245
|
-
display: grid;
|
|
246
|
-
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
247
|
-
gap: 7px;
|
|
248
|
-
align-items: center;
|
|
249
|
-
padding: 6px 7px;
|
|
250
|
-
background: #e9eef6;
|
|
251
|
-
border-bottom: 1px solid #d6dce6;
|
|
252
|
-
font-weight: 750;
|
|
253
|
-
}
|
|
254
|
-
.group-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
255
|
-
.group-count {
|
|
256
|
-
min-width: 20px;
|
|
257
|
-
text-align: center;
|
|
258
|
-
color: #475569;
|
|
259
|
-
background: #fff;
|
|
260
|
-
border: 1px solid #cbd5e1;
|
|
261
|
-
border-radius: 999px;
|
|
262
|
-
padding: 1px 6px;
|
|
263
|
-
}
|
|
264
|
-
details.entry {
|
|
265
|
-
border: 1px solid #d6dce6;
|
|
266
|
-
border-left-width: 4px;
|
|
267
|
-
border-radius: 6px;
|
|
268
|
-
margin: 0 0 6px;
|
|
269
|
-
background: #fff;
|
|
270
|
-
overflow: hidden;
|
|
271
|
-
}
|
|
272
|
-
details.entry:hover { border-color: #b6c2d4; }
|
|
273
|
-
details.entry[open] { box-shadow: 0 1px 4px rgba(17, 24, 39, 0.1); }
|
|
274
|
-
.group details.entry {
|
|
275
|
-
border-left-width: 4px;
|
|
276
|
-
border-right-width: 0;
|
|
277
|
-
border-bottom-width: 0;
|
|
278
|
-
border-radius: 0;
|
|
279
|
-
margin: 0;
|
|
280
|
-
}
|
|
281
|
-
details[data-severity="info"] { border-left-color: #94a3b8; }
|
|
282
|
-
details[data-severity="warn"] { border-left-color: #f59e0b; }
|
|
283
|
-
details[data-severity="error"] { border-left-color: #ef4444; }
|
|
284
|
-
summary {
|
|
285
|
-
cursor: pointer;
|
|
286
|
-
padding: 6px 9px;
|
|
287
|
-
display: flex;
|
|
288
|
-
flex-direction: column;
|
|
289
|
-
gap: 3px;
|
|
290
|
-
color: #1f2937;
|
|
291
|
-
list-style: none;
|
|
292
|
-
}
|
|
293
|
-
summary::-webkit-details-marker { display: none; }
|
|
294
|
-
.entry-meta {
|
|
295
|
-
display: flex;
|
|
296
|
-
align-items: center;
|
|
297
|
-
gap: 7px;
|
|
298
|
-
flex-wrap: wrap;
|
|
299
|
-
}
|
|
300
|
-
.sev-dot {
|
|
301
|
-
width: 7px;
|
|
302
|
-
height: 7px;
|
|
303
|
-
border-radius: 50%;
|
|
304
|
-
background: #94a3b8;
|
|
305
|
-
flex: none;
|
|
306
|
-
}
|
|
307
|
-
[data-severity="warn"] .sev-dot { background: #f59e0b; }
|
|
308
|
-
[data-severity="error"] .sev-dot { background: #ef4444; }
|
|
309
|
-
.time { color: #64748b; font-variant-numeric: tabular-nums; font-size: 11px; }
|
|
310
|
-
.section, .severity {
|
|
311
|
-
padding: 1px 7px;
|
|
312
|
-
border-radius: 999px;
|
|
313
|
-
background: #eef2f7;
|
|
314
|
-
color: #334155;
|
|
315
|
-
font-weight: 700;
|
|
316
|
-
font-size: 11px;
|
|
317
|
-
letter-spacing: 0.01em;
|
|
318
|
-
}
|
|
319
|
-
.kind-chip {
|
|
320
|
-
color: #64748b;
|
|
321
|
-
font: 10px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
322
|
-
background: #f1f5f9;
|
|
323
|
-
border-radius: 4px;
|
|
324
|
-
padding: 1px 5px;
|
|
325
|
-
}
|
|
326
|
-
[data-section="Flow"] .section { background: #e0f2fe; color: #075985; }
|
|
327
|
-
[data-section="Tools"] .section { background: #dcfce7; color: #166534; }
|
|
328
|
-
[data-section="Backend"] .section { background: #ffedd5; color: #9a3412; }
|
|
329
|
-
[data-section="Intent"] .section { background: #ede9fe; color: #5b21b6; }
|
|
330
|
-
[data-section="Telemetry"] .section { background: #ccfbf1; color: #115e59; }
|
|
331
|
-
[data-severity="warn"] .severity { background: #fef3c7; color: #92400e; }
|
|
332
|
-
[data-severity="error"] .severity { background: #fee2e2; color: #991b1b; }
|
|
333
|
-
.entry-title-row {
|
|
334
|
-
display: flex;
|
|
335
|
-
gap: 6px;
|
|
336
|
-
align-items: baseline;
|
|
337
|
-
}
|
|
338
|
-
.caret {
|
|
339
|
-
color: #94a3b8;
|
|
340
|
-
flex: none;
|
|
341
|
-
transition: transform 0.12s ease;
|
|
342
|
-
font-size: 10px;
|
|
343
|
-
line-height: 1.5;
|
|
344
|
-
}
|
|
345
|
-
details[open] .caret { transform: rotate(90deg); }
|
|
346
|
-
/* Title wraps to full width — no truncation, no information loss. */
|
|
347
|
-
.title {
|
|
348
|
-
color: #1f2937;
|
|
349
|
-
font-weight: 600;
|
|
350
|
-
word-break: break-word;
|
|
351
|
-
overflow-wrap: anywhere;
|
|
352
|
-
}
|
|
353
|
-
details[data-severity="error"] .title { color: #991b1b; }
|
|
354
|
-
.entry-body { border-top: 1px solid #d6dce6; background: #0b1020; }
|
|
355
|
-
.entry-toolbar {
|
|
356
|
-
display: flex;
|
|
357
|
-
gap: 6px;
|
|
358
|
-
align-items: center;
|
|
359
|
-
padding: 6px 8px;
|
|
360
|
-
color: #dbeafe;
|
|
361
|
-
border-bottom: 1px solid rgba(148, 163, 184, 0.32);
|
|
362
|
-
}
|
|
363
|
-
.kind {
|
|
364
|
-
overflow: hidden;
|
|
365
|
-
text-overflow: ellipsis;
|
|
366
|
-
white-space: nowrap;
|
|
367
|
-
border: 1px solid rgba(148, 163, 184, 0.38);
|
|
368
|
-
border-radius: 999px;
|
|
369
|
-
padding: 2px 6px;
|
|
370
|
-
}
|
|
371
|
-
.entry-toolbar button {
|
|
372
|
-
margin-left: auto;
|
|
373
|
-
color: #e5e7eb;
|
|
374
|
-
border-color: rgba(148, 163, 184, 0.42);
|
|
375
|
-
background: rgba(255,255,255,0.08);
|
|
376
|
-
}
|
|
377
|
-
pre {
|
|
378
|
-
margin: 0;
|
|
379
|
-
padding: 8px;
|
|
380
|
-
max-height: 430px;
|
|
381
|
-
overflow: auto;
|
|
382
|
-
overscroll-behavior: contain;
|
|
383
|
-
touch-action: pan-x pan-y;
|
|
384
|
-
color: #dbeafe;
|
|
385
|
-
font: 11px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
386
|
-
white-space: pre-wrap;
|
|
387
|
-
word-break: break-word;
|
|
388
|
-
}
|
|
389
|
-
.json-key { color: #93c5fd; }
|
|
390
|
-
.json-string { color: #86efac; }
|
|
391
|
-
.json-number { color: #fbbf24; }
|
|
392
|
-
.json-boolean { color: #f0abfc; }
|
|
393
|
-
.json-null { color: #cbd5e1; }
|
|
394
|
-
/* Minimized: collapse to just the header. The body sections are hidden
|
|
395
|
-
AND the panel/host stop reserving full viewport height (the host's
|
|
396
|
-
inline bottom offset is released in JS), so only the title bar remains
|
|
397
|
-
and the page underneath is clickable again. */
|
|
398
|
-
.is-minimized { height: auto; max-height: none; }
|
|
399
|
-
.is-minimized .controls, .is-minimized .list { display: none; }
|
|
400
|
-
.is-minimized .state-view { display: none; }
|
|
401
|
-
.is-minimized .filters-popup { display: none; }
|
|
402
|
-
@media (max-width: 620px) {
|
|
403
|
-
.panel { width: calc(100vw - 20px); }
|
|
404
|
-
}
|
|
405
|
-
</style>
|
|
406
|
-
<div class="panel" data-role="panel">
|
|
407
|
-
<div class="head">
|
|
408
|
-
<div class="meta">
|
|
409
|
-
<span class="name" title="${je(e)}">${je(e)}</span>
|
|
410
|
-
<span class="count"><span data-role="visible-count">0</span>/<span data-role="count">0</span></span>
|
|
411
|
-
</div>
|
|
412
|
-
<div class="actions">
|
|
413
|
-
<button type="button" data-action="filters-toggle" aria-pressed="false" title="Filters & view options">Filters ▾</button>
|
|
414
|
-
<button type="button" data-action="clear">Clear</button>
|
|
415
|
-
<button type="button" data-action="toggle">Min</button>
|
|
416
|
-
</div>
|
|
417
|
-
<div class="filters-popup is-hidden" data-role="filters-popup">
|
|
418
|
-
<div class="popup-group">
|
|
419
|
-
<div class="popup-label">Section</div>
|
|
420
|
-
<div class="filters" data-role="section-filters"></div>
|
|
421
|
-
</div>
|
|
422
|
-
<div class="popup-group">
|
|
423
|
-
<div class="popup-label">Severity</div>
|
|
424
|
-
<div class="filters" data-role="severity-filters"></div>
|
|
425
|
-
</div>
|
|
426
|
-
<div class="popup-group">
|
|
427
|
-
<div class="popup-label">View</div>
|
|
428
|
-
<div class="toggles">
|
|
429
|
-
<button type="button" data-action="state" aria-pressed="true">State</button>
|
|
430
|
-
<button type="button" data-action="group" aria-pressed="false">Flat</button>
|
|
431
|
-
<button type="button" data-action="follow" aria-pressed="true">Follow</button>
|
|
432
|
-
<button type="button" data-action="verbose" aria-pressed="false">Concise</button>
|
|
433
|
-
<button type="button" data-action="expand-all">Expand all</button>
|
|
434
|
-
<button type="button" data-action="collapse-all">Collapse all</button>
|
|
435
|
-
</div>
|
|
436
|
-
</div>
|
|
437
|
-
</div>
|
|
438
|
-
</div>
|
|
439
|
-
<div class="controls">
|
|
440
|
-
<input class="search" type="search" data-role="search" placeholder="Filter by tool, op, kind, title, or JSON value" />
|
|
441
|
-
</div>
|
|
442
|
-
<div class="state-view" data-role="state-view"></div>
|
|
443
|
-
<div class="list" data-role="list"></div>
|
|
444
|
-
</div>
|
|
445
|
-
`}function Vt(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Hn(e){try{return new Date(e||Date.now()).toLocaleTimeString()}catch{return""}}function Xc(e,t){const r=String(e||"");return r.length>t?`${r.slice(0,t-1)}...`:r}function Vn(e){const t=String(e||"");return t?`${t.slice(0,1).toLocaleUpperCase("en-US")}${t.slice(1)}`:""}function ge(e){return String(e||"").toLocaleLowerCase("en-US").replace(/[^a-z0-9]+/gu,"-").replace(/^-|-$/gu,"")}function je(e){return String(e).replace(/[&<>"']/gu,t=>t==="&"?"&":t==="<"?"<":t===">"?">":t==='"'?""":"'")}function el({accountId:e,config:t={},tools:r,beacon:n}={}){if(!Kn(e,t))return{enabled:!1,tools:r,beacon:n,record(){},wrapTransport(){}};const o=kn(e);return window.__GENGAGE_AGENTIC_DEBUG_RECORD__=i=>zt(o,i),window.__GENGAGE_AGENTIC_DEBUG_RECORD_BE__=i=>zt(o,i),Bn(o),Rn({accountId:e,collector:o,promptBaseUrl:t.agenticActivityPromptBaseUrl}),o.record({kind:"runtime/debug-enabled",title:"Agentic activity debug enabled"}),{enabled:!0,collector:o,tools:En(r,o),beacon:Cn(n,o),record:i=>o.record(i),wrapTransport:()=>Pn(e,o)}}function Kn(e,t={}){return t.agenticActivityDebug===!1?!1:t.agenticActivityDebug===!0||window.__GENGAGE_PWTEST_ACCOUNT__===e||window.__GENGAGE_AGENTIC_ACTIVITY_DEBUG__===!0?!0:!!(t.debug===!0&&tl(e))}function tl(e){return Array.from(document.scripts||[]).some(t=>{const r=t?.src||"";return r.includes(`/${e}/glov.js`)&&/[?&]pwtest=/u.test(r)})}var rl="input-hash";function Wn({ttlS:e,promptVersion:t="current"}={}){if(!Number.isFinite(e)||e<=0)throw new Error("inputHashCachePolicy requires a positive ttlS");return{strategy:rl,ttlS:e,promptVersion:t}}function Jn({accountId:e="",op:t,ttlS:r,promptVersion:n="current",input:o,keyParts:i,locale:a}={}){if(!t)throw new Error("declarativeBeOpCache requires an op");return{cache:Wn({ttlS:r,promptVersion:n}),cacheTtlS:r,cacheKey:(s={})=>kt(t,{account:e,locale:Kt(a,s)||s.context?.meta?.locale||s.locale||"",promptVersion:n,payload:Wt(Kt(o,s)),...ol(Kt(i,s))})}}function nl(e,t={}){return!e||e.kind!=="be_op"?e:{...e,...Jn({op:e.op,ttlS:e.cacheTtlS,input:e.input,...t})}}function Kt(e,t){return typeof e=="function"?e(t):e}function Wt(e){return Array.isArray(e)?e.map(Wt):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>[t,Wt(r)]))}function ol(e){return!e||typeof e!="object"||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(([,t])=>t!=null))}var il=Object.freeze({FALLBACK_RESULTS:"fallback_results",FALLBACK_NO_RESULTS:"fallback_no_results",FALLBACK_PARTIAL:"fallback_partial",OP_UNAVAILABLE:"op_unavailable"});function al(e,t={}){return{status:e,...t}}function sl(e){return!!(e&&typeof e=="object"&&typeof e.status=="string")}function cl(e){return function(){return[{kind:"tool",name:"readPage",input:()=>({}),out:"page",patch:(r,n)=>n?.product&&typeof e=="function"?e(r,n.product):null,onError:[]}]}}var ll=["sku","group_id","name","brand","rating","review_count","cart_code","images","price_currency","price","price_discounted","discount_reason","url","category_ids","category_names","facet_hits","in_stock","promotions","variants"],ul=["description","description_html","features","service","sellers","reviews","qna","documents","delivery","payment"],dl=["accountId","query","products","pendingProducts","rankedSkus","facets","facetsUsed","available_facets","logs","meta"],fl=["source","sourceType","sourceProfile","products","queries","logs"],pl=["items","kind","label","href","count","privacy"];function ml({accountId:e,search:t,facetedSearch:r,similaritySearch:n,searchGiftOptions:o,filters:i={},resultContract:a={},limitations:s=[],extraTools:c=[]}={}){return{searchKeyword:async(u={},f={})=>t(gl(u,f)),facetedSearch:typeof r=="function"?(u={},f={})=>r(Yn(u,f)):async(u={},f={})=>t(Yn(u,f)),getSearchCapabilities:()=>Zn({accountId:e,hasSimilarity:typeof n=="function",hasGiftSearch:typeof o=="function",filters:i,resultContract:a,limitations:s,extraTools:c})}}function Zn({accountId:e,hasSimilarity:t=!0,hasGiftSearch:r=!1,filters:n={},resultContract:o={},limitations:i=[],extraTools:a=[]}={}){return{accountId:e,tools:yl(["search","searchKeyword","facetedSearch",r?"searchGiftOptions":"",t?"similaritySearch":"","scanSite","siteGrep","discoverSiteContent","runSiteCommand","describeVisualContext","inspectProductSurface","openProductPage",...a].filter(Boolean)),filters:{query:"LLM-selected merchant search phrase or empty string when structured metadata is enough.",categoryId:"Optional native merchant category id selected from account metadata or visible page state.",categoryName:"Optional shopper-facing category label selected by the LLM/router.",categoryHints:"Optional category hints supplied by the LLM/router.",brandHints:"Optional brand hints supplied by the LLM/router.",featureHints:"Optional feature, material, style, size, compatibility, or project hints supplied by the LLM/router.",facets:"Optional structured facet array of { key, value } selected from route payloads or merchant metadata.",facetParams:"Optional native account facet map selected from account metadata.",priceMin:"Optional numeric lower price bound.",priceMax:"Optional numeric upper price bound.",...n},resultContract:{productItemFields:ll,productDetailFields:ul,searchResultFields:dl,similarityResultFields:fl,siteContentFields:pl,...o},privacy:["Runs in the shopper browser with merchant-origin state.","Does not expose raw HTML, cookies, storage, cart/session tokens, CSRF values, or form values.","Returns compact product, content, and visible-page facts only.","Free-text intent and search planning stay LLM-owned; runtime wrappers only forward structured inputs."],limitations:i}}function gl(e,t){return Jt(typeof e=="string"?{...t,query:e}:{...t,...e||{}})}function Yn(e,t){const r=typeof e=="string"?{query:e}:e||{},n=r.query??t.query??"",o=Jt({...t,...r,query:n,categoryId:r.categoryId??r.category_id??t.categoryId??t.category_id,categoryName:r.categoryName??r.category_name??t.categoryName??t.category_name,facets:r.facets??t.facets,facetParams:r.facetParams??r.facet_params??t.facetParams??t.facet_params,priceMin:r.priceMin??r.price_min??r.budgetMin??r.min_budget??t.priceMin,priceMax:r.priceMax??r.price_max??r.budgetMax??r.max_budget??t.priceMax,limit:r.limit??r.pageSize??t.limit??t.pageSize});return n===""&&(o.query=""),o}function yl(e){const t=new Set;return e.filter(r=>{const n=String(r||"");return!n||t.has(n)?!1:(t.add(n),!0)})}function Jt(e){return Object.fromEntries(Object.entries(e||{}).filter(([,t])=>t!=null&&t!==""&&(!Array.isArray(t)||t.length)))}var hl=15e3,bl="glov_agentic_iframe",wl="position:absolute;width:1px;height:1px;left:-9999px;top:-9999px;opacity:0;pointer-events:none;";function kl({markerParam:e=bl,markerValue:t="agentic-scraper",frameName:r=t,sandbox:n="allow-same-origin",timeoutMs:o=hl,hiddenStyle:i=wl,messageType:a,parser:s,isBlockedDocument:c}={}){const l=a||`gengage:agentic-iframe-scraper:${t}`;function u(y,h={}){const g=new URL(String(y),Zt());for(const[b,w]of Object.entries(h||{}))w!=null&&w!==""&&g.searchParams.set(b,String(w));return g.searchParams.set(e,t),g.href}function f(y=globalThis.window?.location,h=globalThis.window?.name||""){if(h===r||h===t)return!0;try{return new URL(y?.href||String(y||""),Zt()).searchParams.get(e)===t}catch{return!1}}async function m(y,h={},g={}){const b=g.parser||s,w=g.isBlockedDocument||c,v=globalThis.document,_=globalThis.window;if(!v?.body||typeof v.createElement!="function"||typeof v.body.appendChild!="function")return{attempted:!1,doc:null,result:null,blocked:!1,timedOut:!1,via:"unavailable"};const C=u(y),A=v.createElement("iframe");A.name=r;try{A.sandbox=n}catch{}return A.style&&(A.style.cssText=i),new Promise(x=>{let Z=!1;const rt=typeof _?.addEventListener=="function"&&typeof _?.removeEventListener=="function",sd=_.setTimeout(()=>{fr({attempted:!0,doc:null,result:null,blocked:!1,timedOut:!0,via:"timeout"})},o);function cd(){_.clearTimeout(sd),rt&&_.removeEventListener("message",Eo),typeof A.remove=="function"&&A.remove()}function fr(Y){Z||(Z=!0,cd(),x(Y))}function Eo(Y){if(Y.source&&A.contentWindow&&Y.source!==A.contentWindow)return;const ne=Y.data;!ne||ne.type!==l||ne.marker!==t||fr({attempted:!0,doc:null,result:ne.payload||null,blocked:!!ne.blocked,timedOut:!1,via:"postMessage"})}A.addEventListener("load",()=>{if(A.contentWindow?.location?.href!=="about:blank")try{const Y=A.contentDocument||A.contentWindow?.document||null,ne=!!w?.(Y);fr({attempted:!0,doc:Y,result:typeof b=="function"?b(Y,{url:C,input:h}):null,blocked:ne,timedOut:!1,via:"contentDocument"})}catch{}}),rt&&_.addEventListener("message",Eo),v.body.appendChild(A),A.src=C})}function p(y=s,{targetOrigin:h=Zt()}={}){const g=globalThis.window;if(!g?.parent||!f(g.location,g.name))return!1;const b=typeof y=="function"?y(globalThis.document,{url:g.location?.href||"",input:{}}):y;return g.parent.postMessage({type:l,marker:t,payload:b},h||"*"),!0}return{markerParam:e,markerValue:t,frameName:r,messageType:l,decorateUrl:u,isScraperFrame:f,load:m,postCurrentDocument:p}}function _l(e,{accountId:t,type:r="agenticSearchFrame"}={}){return e?.isScraperFrame?.()?(t&&globalThis.window&&(globalThis.window.GengageAssistantInjector||={},globalThis.window.GengageAssistantInjector[t]||={type:r}),!0):!1}function Zt(){return globalThis.window?.location?.origin||globalThis.location?.origin||"https://example.invalid"}function Sl(e){return!e||typeof e!="object"||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(([,t])=>t!=null&&t!==""&&(!Array.isArray(t)||t.length>0)))}function vl({rootUrl:e,successMessage:t,alreadyCurrentPageMessage:r=t,missingUrlMessage:n="Ürün sayfasını açmak için ürün bağlantısı gerekiyor."}={}){const o=new URL(e).origin;return async function(a={}){const s=a.product||{},c=Qn(a.url||a.productUrl||s.url,e,o),l=a.sku||s.sku||null;return c?Al(c)?{ok:!0,sku:l,url:c,method:"already-current-page",alreadyCurrentPage:!0,message:r||t}:(Xn(c),{ok:!0,sku:l,url:c,method:"browser-navigation",message:t}):{ok:!1,sku:l,reason:"missing-url",message:n}}}function Qn(e,t,r=new URL(t).origin){if(!e)return"";try{const n=new URL(e,t);return n.protocol!=="https:"||n.origin!==r?"":(n.hash="",n.href)}catch{return""}}function Xn(e){if(typeof document>"u"){window.location.href=e;return}const t=document.createElement("a");t.href=e,t.target="_self",t.rel="noreferrer",t.style.display="none",document.body.appendChild(t),t.click(),t.remove(),setTimeout(()=>{window.location.href!==e&&window.location.assign(e)},0)}function Al(e){try{const t=new URL(globalThis.window?.location?.href||"",e),r=new URL(e,t.href);return t.hash="",r.hash="",t.href===r.href}catch{return!1}}function xl(e,{screenSummary:t}={}){return{panel:{...e?.panel||{},screen_type:"homepage",screen_sku_list:[],screen_summary:t||null,last_search_products:[],last_search:null,chat_mentioned_skus:[],reviews_summary_skus:[],ai_plist_summary:null,search_suggestions_skus:[],list_source:null,active_product_panel:!1,assistant_mode:"shopping",redirected_agent_state:null,ui_hints:null}}}function eo({patterns:e,messageFilter:t,messageNormalizer:r=o=>o,messageLimit:n=10}={}){const o={patterns:[...Bt,...Array.isArray(e)?e:[]]};function i(c){return Nt(c,o)}function a(c){return gn(c,o)}function s(c=[]){const l=(Array.isArray(c)?c:[]).filter(u=>typeof t=="function"?t(u):u&&typeof u=="object").filter(Boolean);return(Number.isFinite(n)&&n>0?l.slice(-n):l).map(u=>({role:u.role,content:i(r(u.content)).slice(0,1e3)}))}return{redactPii:i,anonymousRequestText:a,anonymizeMessages:s}}function Tl(e){return String(e||"").replace(/<script\b[\s\S]*?<\/script>/giu," ").replace(/<style\b[\s\S]*?<\/style>/giu," ").replace(/<[^>]+>/gu," ").replace(/ /giu," ").replace(/&/giu,"&").replace(/<|>/giu," ").replace(/\s+/gu," ").trim()}function to({accountId:e,supplied:t=[],pageProduct:r=null,listingProducts:n=[],skus:o=[],limit:i=4,storedProducts:a=[],getStoredPanelProducts:s}={}){const c=no(o),l=Array.isArray(n)?n:[],u=typeof s=="function"?s({accountId:e,visibleProducts:l}):a;return ro([...Je(t),...Je(u),r,...l],{skus:c,limit:i})}function El({accountId:e,rootUrl:t,getProduct:r,getProducts:n,getStoredPanelProducts:o,limit:i=4}={}){return async function(s={}){return{accountId:e,products:to({accountId:e,supplied:Array.isArray(s.products)?s.products:[],pageProduct:r?.(),listingProducts:n?.(),getStoredPanelProducts:o,skus:s.skus||s.sku_list||[],limit:i}),rootUrl:t}}}function ro(e,{skus:t=[],limit:r=4}={}){const n=new Set(no(t)),o=new Set,i=[];for(const a of Je(e)){if(!a)continue;const s=We(a?.sku);if(n.size&&!n.has(s))continue;const c=s||We(a?.url)||We(a?.name||a?.title);if(!(c&&o.has(c))&&(c&&o.add(c),i.push(a),i.length>=r))break}return i}function no(e){return Je(e).map(We).filter(Boolean)}function We(e){return String(e||"").trim()}function Je(e){return Array.isArray(e)?e.filter(Boolean):e?[e]:[]}var B={features:18,reviews:4,qna:4,sellers:4,variants:12,documents:6,textBlocks:6,relatedProducts:8,textChars:220},Yt={description:/\b(?:description|details|product information|urun bilgisi|urun aciklamasi|açıklama|aciklama)\b/iu,seller:/\b(?:seller|merchant|store|satici|satıcı|magaza|mağaza)\b/iu,review:/\b(?:review|reviews|rating|ratings|yorum|degerlendirme|değerlendirme|puan)\b/iu,qna:/\b(?:questions?|answers?|qna|q&a|soru|cevap)\b/iu,payment:/\b(?:installment|instalment|payment|pay in|taksit|odeme|ödeme|vade)\b/iu,delivery:/\b(?:delivery|shipping|cargo|stock|availability|teslimat|kargo|stok|gonderim|gönderim)\b/iu,promotion:/\b(?:campaign|promotion|discount|coupon|deal|kampanya|indirim|kupon|firsat|fırsat)\b/iu,variant:/\b(?:variant|size|colour|color|beden|olcu|ölçü|renk|numara)\b/iu},Cl=/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|\+?\d[\d\s().-]{8,}\d|\b[A-Z]{1,2}\d[A-Z\d]?\s*\d[A-Z]{2}\b|\b(?:token|session|csrf|secret)\s*[:=]\s*[\w.-]+/giu,Pl=/(?:token|session|sid|auth|code|csrf|secret|key|password|passwd|phone|email|address|postcode|zip|jwt|bearer)/iu,Rl=/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|\+?\d[\d\s().-]{8,}\d|[A-Z]{1,2}\d[A-Z\d]?\s*\d[A-Z]{2}|[A-Za-z0-9_-]{24,}/iu;function oo({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o=i=>i}){return(i={})=>io({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o,input:i})}function io({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o=a=>a,input:i={}}){const a=nu(i),s=o(i.product||nr(r)),c=(nr(n)||[]).map(o).filter(Boolean),l=j(i.sku||s?.sku||i.product?.sku),u=l?c.find(Z=>j(Z?.sku)===l)||s:s||c[0]||null,f=Ol(l||u?.sku),m=mo({...f.product,...u}),p=rr(Ye(u?.features),Ye(u?.specs),Vl(u?.facet_hits),Ye(f.product?.features),Ml(),Nl(),$l()).slice(0,a.features),y=co(Qe(u?.reviews),f.reviews,Fl()).slice(0,a.reviews),h=lo(Xt(u?.qna),ql()).slice(0,a.qna),g=uo(er(u?.sellers),Ul()).slice(0,a.sellers),b=te([...u?.payment||[],...Ze("payment",a)]),w=te([...u?.delivery||[],...Ze("delivery",a)]),v=te([...u?.promotions||[],...Ze("promotion",a)]),_=fo(tr(u?.variants),Dl()).slice(0,a.variants),C=zl(a.documents),A=go(u?.description,f.product?.description,Gl("description"),Ze("description",{...a,textBlocks:2})[0]),x=c.filter(Z=>!l||j(Z?.sku)!==l).map(mo).filter(Boolean).slice(0,a.relatedProducts);return ye({accountId:e,pageType:nr(t)||"other",url:ru(),product:m,description:A,features:p,sellers:g,reviews:y,qna:h,rating:N(u?.rating??f.rating),review_count:N(u?.review_count??f.review_count),payment:b,delivery:w,promotions:v,variants:_,documents:C,related_products:x,capabilities:Ql({description:A,features:p,sellers:g,reviews:y,qna:h,payment:b,delivery:w,promotions:v,variants:_,documents:C,relatedProducts:x}),privacy:{browserLocal:!0,rawHtml:!1,formValues:!1,cookies:!1,storage:!1,redacted:!0}})}function jl(e,t){const r=Array.isArray(e)?e.filter(Boolean):[];if(!t||typeof t!="object"||!r.length)return r;const n=j(t.product?.sku);return r.map((o,i)=>{const a=j(o?.sku);return r.length===1||n&&a&&n===a||i===0?Ll(o,t):o})}function ao(e){return!e||typeof e!="object"?null:ye({product:e.product,description:T(e.description,500),features:Kl(e.features,14),sellers:Zl(e.sellers,4),reviews:Wl(e.reviews,4),qna:Jl(e.qna,4),rating:e.rating,review_count:e.review_count,payment:X(e.payment,5,160),delivery:X(e.delivery,5,160),promotions:X(e.promotions,5,160),variants:Yl(e.variants,10),documents:X(e.documents,5,220),capabilities:Array.isArray(e.capabilities)?e.capabilities.slice(0,12):void 0})}function Il(e,t,r={}){const n=ao(e);if(!n)return t;const o=String(r.locale||"").toLowerCase().startsWith("en"),i=[],a=[n.rating?`${n.rating}/5`:"",n.review_count?`${n.review_count} ${o?"reviews":"yorum"}`:""].filter(Boolean).join(", ");return a&&i.push(o?`Visible rating: ${a}.`:`Görünür puan bilgisi: ${a}.`),n.reviews?.length&&i.push(`${o?"Visible review highlights":"Görünür yorumlardan öne çıkanlar"}: ${n.reviews.map(s=>[s.star?`${s.star}/5`:"",s.content].filter(Boolean).join(" ")).filter(Boolean).slice(0,3).join(" | ")}.`),i.length?(i.push(o?"This summary only uses product review and rating fields visible in the browser.":"Bu özet yalnızca tarayıcıda görünen ürün yorumu ve puan alanlarından hazırlandı."),i.join(" ")):t}function Ll(e,t){return ye({...e,description:go(e.description,t.description),features:rr(Ye(e.features),t.features).slice(0,24),specs:e.specs||(t.features?.length?Object.fromEntries(t.features.map(Xl)):void 0),sellers:uo(er(e.sellers),t.sellers),reviews:co(Qe(e.reviews),t.reviews),qna:lo(Xt(e.qna),t.qna),rating:e.rating??t.rating,review_count:e.review_count??t.review_count,payment:te([...e.payment||[],...t.payment||[]]),delivery:te([...e.delivery||[],...t.delivery||[]]),promotions:te([...e.promotions||[],...t.promotions||[]]),variants:fo(tr(e.variants),t.variants),documents:te([...e.documents||[],...t.documents||[]])})}function Ol(e){const t=[];for(const o of G('script[type="application/ld+json"]')){const i=Bl(o.textContent);for(const a of Qt(i))String(a?.["@type"]||"").toLowerCase()==="product"&&t.push(a)}const r=t.find(o=>j(o.sku||o.productID||o.mpn)===j(e))||t[0];if(!r)return{};const n=r.aggregateRating||{};return{product:ye({sku:j(r.sku||r.productID||r.mpn),name:S(r.name),brand:S(r.brand?.name||r.brand),description:S(r.description),images:X(r.image,8,280),url:Ie(r.url),rating:N(n.ratingValue),review_count:N(n.reviewCount||n.ratingCount)}),reviews:Qe(r.review),rating:N(n.ratingValue),review_count:N(n.reviewCount||n.ratingCount)}}function Qt(e){return Array.isArray(e)?e.flatMap(Qt):!e||typeof e!="object"?[]:[e,...Qt(e["@graph"])]}function Bl(e){try{return JSON.parse(String(e||""))}catch{return null}}function Ml(){const e=[];for(const t of G("table tr")){const r=[...t.querySelectorAll?.("th,td")||[]].map(n=>S(n.textContent));r.length>=2&&r[0]&&r[1]&&e.push({key:r[0],value:r.slice(1).join(" ")})}return e}function Nl(){const e=[];for(const t of G("dt")){const r=S(t.textContent),n=S(t.nextElementSibling?.matches?.("dd")?t.nextElementSibling.textContent:"");r&&n&&e.push({key:r,value:n})}return e}function $l(){return G('[class*="spec" i], [class*="feature" i], [class*="attribute" i], li').map(e=>so(S(e.textContent))).filter(Boolean).slice(0,B.features)}function Fl(){return G('[class*="review" i], [data-review], [itemprop="review"]').map(e=>{const t=S(e.textContent);return!t||t.length<8||Yt.qna.test(t)?null:{content:T(t,260),star:N(e.getAttribute?.("data-rating"))}}).filter(Boolean)}function ql(){const e=G('[class*="question" i], [class*="answer" i], [data-question], [data-answer]'),t=[];for(const r of e){const n=S(r.textContent);if(!n||!Yt.qna.test(n))continue;const o=S(r.getAttribute?.("data-question")||n),i=S(r.getAttribute?.("data-answer")||r.nextElementSibling?.textContent||"");t.push({question:T(o,220),answer:T(i,260)})}return t}function Ul(){return G('[class*="seller" i], [class*="merchant" i], [data-seller], [data-merchant]').map(e=>S(e.getAttribute?.("data-seller")||e.getAttribute?.("data-merchant")||e.textContent)).filter(Boolean).map(e=>({merchant:T(e,120)}))}function Dl(){return G('[class*="variant" i] a,[class*="variant" i] button,[class*="size" i] button,[class*="color" i] button,[data-variant],[data-size],[data-color]').map(e=>ye({name:T(yo(e),120),value:T(e.getAttribute?.("data-value")||e.getAttribute?.("data-size")||e.getAttribute?.("data-color"),120),sku:j(e.getAttribute?.("data-sku")||e.getAttribute?.("data-product-id")),url:Ie(e.getAttribute?.("href")),in_stock:e.getAttribute?.("disabled")==null&&e.getAttribute?.("aria-disabled")!=="true"})).filter(e=>e.name||e.value||e.sku)}function zl(e){return G("a[href]").filter(t=>/\.pdf(?:$|[?#])/iu.test(t.getAttribute?.("href")||"")).map(t=>{const r=yo(t)||"PDF",n=Ie(t.getAttribute?.("href"));return n?`${r}: ${n}`:""}).filter(Boolean).slice(0,e)}function Ze(e,t){const r=Yt[e];return r?G("section,article,div,li,p,span,button,a").map(n=>S(n.textContent)).filter(n=>n&&r.test(n)&&n.length<=900).map(n=>T(n,t.textChars||B.textChars)).filter(po()).slice(0,t.textBlocks||B.textBlocks):[]}function Gl(e){return S(document.querySelector?.(`meta[name="${e}"]`)?.getAttribute?.("content")||document.querySelector?.(`meta[property="og:${e}"]`)?.getAttribute?.("content"))}function G(e){try{return[...document.querySelectorAll?.(e)||[]].filter(Hl)}catch{return[]}}function Hl(e){if(!e)return!1;if(!e.getBoundingClientRect)return!0;const t=e.getBoundingClientRect();if(t.width<=0||t.height<=0)return!1;const r=window.getComputedStyle?.(e);return!r||r.visibility!=="hidden"&&r.display!=="none"&&Number(r.opacity||1)>0}function Ye(e){return e?(Array.isArray(e)?e:Object.entries(e).map(([t,r])=>({key:t,value:r}))).map(t=>typeof t=="string"?so(t)||{key:"",value:S(t)}:{key:S(t.key||t.name||t.label),value:S(t.value||t.text||"")}).filter(t=>t.key||t.value):[]}function Vl(e){return!e||typeof e!="object"?[]:Object.entries(e).map(([t,r])=>({key:S(t),value:S(r)}))}function so(e){const t=/^(.{2,80}?)\s*[::]\s*(.{1,220})$/u.exec(S(e));return t?{key:t[1],value:t[2]}:null}function Qe(e){return(Array.isArray(e)?e:e?[e]:[]).map(t=>typeof t=="string"?{content:T(t,260)}:{content:T(t.content||t.reviewBody||t.description||t.text,260),star:N(t.star||t.rating||t.reviewRating?.ratingValue)}).filter(t=>t.content||t.star)}function Xt(e){return(Array.isArray(e)?e:e?[e]:[]).map(t=>({question:T(t.question||t.name||"",220),answer:T(t.answer||t.acceptedAnswer?.text||t.text||"",260)})).filter(t=>t.question||t.answer)}function er(e){return(Array.isArray(e)?e:e?[e]:[]).map(t=>typeof t=="string"?{merchant:T(t,120)}:{merchant:T(t.merchant||t.name||t.seller||"",120),merchant_id:j(t.merchant_id||t.id||""),merchant_rating:N(t.merchant_rating||t.rating),price_offer:N(t.price_offer||t.price)}).filter(t=>t.merchant||t.merchant_id)}function tr(e){return(Array.isArray(e)?e:e?[e]:[]).map(t=>({name:T(t.name||t.label||t.title||"",120),value:T(t.value||t.size||t.color||"",120),sku:j(t.sku||t.code||""),url:Ie(t.url),in_stock:t.in_stock})).filter(t=>t.name||t.value||t.sku||t.url)}function rr(...e){const t=new Set,r=[];for(const n of e.flat().filter(Boolean)){const o={key:T(n.key||n.name||"",90),value:T(n.value||n.text||"",180)},i=`${o.key}:${o.value}`.toLocaleLowerCase("tr-TR");!o.key&&!o.value||t.has(i)||(t.add(i),r.push(o))}return r}function co(...e){return Xe(e.flat().filter(Boolean),t=>`${t.star||""}:${t.content||""}`)}function lo(...e){return Xe(e.flat().filter(Boolean),t=>`${t.question||""}:${t.answer||""}`)}function uo(...e){return Xe(e.flat().filter(Boolean),t=>`${t.merchant||""}:${t.merchant_id||""}`)}function fo(...e){return Xe(e.flat().filter(Boolean),t=>`${t.sku||""}:${t.name||""}:${t.value||""}`)}function Xe(e,t){const r=new Set;return e.filter(n=>{const o=t(n).toLocaleLowerCase("tr-TR");return!o.trim()||r.has(o)?!1:(r.add(o),!0)})}function te(e){return X(e,20,B.textChars)}function X(e,t,r){return(Array.isArray(e)?e:e?[e]:[]).map(n=>T(n,r)).filter(Boolean).filter(po()).slice(0,t)}function po(){const e=new Set;return t=>{const r=S(t).toLocaleLowerCase("tr-TR");return!r||e.has(r)?!1:(e.add(r),!0)}}function Kl(e,t){return rr(e).slice(0,t)}function Wl(e,t){return Qe(e).slice(0,t)}function Jl(e,t){return Xt(e).slice(0,t)}function Zl(e,t){return er(e).slice(0,t)}function Yl(e,t){return tr(e).slice(0,t)}function mo(e){return!e||typeof e!="object"?null:ye({sku:j(e.sku||e.id||""),group_id:j(e.group_id||e.groupId||""),name:S(e.name||e.title||""),brand:S(e.brand||""),url:Ie(e.url),images:X(e.images||e.image,8,280),price:N(e.price),price_discounted:N(e.price_discounted||e.discountedPrice),price_text:S(e.price_text||e.priceText||""),price_currency:S(e.price_currency||e.currency||""),category_ids:eu(e.category_ids||e.categoryIds,8,90),category_names:X(e.category_names||e.categoryNames||e.category,8,140),in_stock:e.in_stock})}function Ql(e){return[e.description?"description":"",e.features?.length?"features":"",e.sellers?.length?"seller":"",e.reviews?.length||e.rating||e.review_count?"reviews_ratings":"",e.qna?.length?"qna":"",e.payment?.length?"installment_payment":"",e.delivery?.length?"shipping_delivery_stock":"",e.promotions?.length?"campaigns_promotions":"",e.variants?.length?"variants":"",e.documents?.length?"documents":"",e.relatedProducts?.length?"related_products":""].filter(Boolean)}function Xl(e){return[S(e.key||e.name),S(e.value||e.text)]}function go(...e){return e.map(t=>T(t,700)).find(Boolean)||""}function T(e,t){return S(e).slice(0,t)}function yo(e){return S(e.getAttribute?.("aria-label")||e.getAttribute?.("title")||e.getAttribute?.("alt")||e.textContent)}function S(e){return String(e??"").replace(/<script\b[\s\S]*?<\/script>/giu," ").replace(/<style\b[\s\S]*?<\/style>/giu," ").replace(/<[^>]+>/gu," ").replace(Cl,"[redacted]").replace(/\s+/gu," ").trim()}function j(e){const t=String(e??"").replace(/<script\b[\s\S]*?<\/script>/giu," ").replace(/<style\b[\s\S]*?<\/style>/giu," ").replace(/<[^>]+>/gu," ").replace(/\s+/gu," ").trim();return!t||/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/iu.test(t)||/\b(?:token|session|csrf|secret|password|passwd|jwt|bearer)\s*[:=]\s*[\w.-]+/iu.test(t)?"":t.slice(0,120)}function eu(e,t,r){return(Array.isArray(e)?e:e?[e]:[]).map(n=>j(n).slice(0,r)).filter(Boolean).filter(tu()).slice(0,t)}function tu(){const e=new Set;return t=>{const r=j(t).toLocaleLowerCase("tr-TR");return!r||e.has(r)?!1:(e.add(r),!0)}}function N(e){const t=Number(String(e??"").replace(",","."));return Number.isFinite(t)&&t>0?t:void 0}function Ie(e){if(!e)return"";try{const t=new URL(e,window.location.href);return/^https?:$/u.test(t.protocol)?(t.hash="",ho(t),t.href):""}catch{return""}}function ru(){try{const e=new URL(window.location.href);return e.hash="",ho(e),`${e.origin}${e.pathname}${e.search}`}catch{return""}}function ho(e){for(const[t,r]of[...e.searchParams.entries()]){const n=String(r||"");(Pl.test(t)||Rl.test(n))&&e.searchParams.set(t,"redacted")}return e}function nu(e={}){return{features:K(e.maxFeatures,B.features,40),reviews:K(e.maxReviews,B.reviews,12),qna:K(e.maxQna,B.qna,12),sellers:K(e.maxSellers,B.sellers,12),variants:K(e.maxVariants,B.variants,30),documents:K(e.maxDocuments,B.documents,12),textBlocks:K(e.maxTextBlocks,B.textBlocks,16),relatedProducts:K(e.maxRelatedProducts,B.relatedProducts,20),textChars:K(e.textChars,B.textChars,420)}}function K(e,t,r){const n=Number(e);return!Number.isFinite(n)||n<=0?t:Math.min(Math.floor(n),r)}function nr(e){try{return typeof e=="function"?e():null}catch{return null}}function ye(e){return Object.fromEntries(Object.entries(e||{}).filter(([,t])=>t!=null&&t!==""&&(!Array.isArray(t)||t.length)))}var{redactPii:ou,anonymousRequestText:iu,anonymizeMessages:au}=eo({patterns:[{pattern:/\b\d{5}\b/gu,replacement:"[postcode]"},{pattern:/\b(?:adresim|adres|mahalle|sokak|cadde)\b[^,.!?\n]{8,160}/giu,replacement:"[address]"}]});function bo(e){return(e?.route?.flow_params&&typeof e.route.flow_params=="object"?e.route.flow_params:null)||(e?.route?.flowParams&&typeof e.route.flowParams=="object"?e.route.flowParams:null)||{}}function su(e){return Array.isArray(e)?e.find(t=>String(t||"").trim()):void 0}function cu(e){const t=bo(e);return[...t.sku?[t.sku]:[],...Array.isArray(t.sku_list)?t.sku_list:[],...Array.isArray(t.skus)?t.skus:[],...Array.isArray(t.target_skus)?t.target_skus:[]].map(r=>String(r||"").trim()).filter(Boolean).filter((r,n,o)=>o.indexOf(r)===n)}var he={headings:8,products:8,controls:12,textMatches:8,snippetChars:180},et=/\b(?:checkout|payment|pay now|place order|delete|remove|confirm|submit|ödeme|odeme|siparişi tamamla|siparisi tamamla|satın al|satin al|sil|kaldır|kaldir|onayla|gönder|gonder)\b/iu,lu=/(?:token|session|sid|auth|code|csrf|secret|key|password|passwd|phone|email|address|postcode|zip|jwt|bearer)/iu,uu=/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|\+?\d[\d\s().-]{8,}\d|[A-Z]{1,2}\d[A-Z\d]?\s*\d[A-Z]{2}|[A-Za-z0-9_-]{24,}/iu,du={campaign:/\b(?:campaign|promotion|discount|deal|coupon|kampanya|indirim|firsat|fırsat|kupon)\b/iu,blog:/\b(?:blog|journal|guide|article|editorial|inspiration|rehber|makale|ilham|icerik|içerik)\b/iu,category:/\b(?:category|collection|department|kategori|koleksiyon|reyon)\b/iu};function fu({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o=i=>i}){return{scanSite:(i={})=>pu({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o,input:i}),siteGrep:(i={})=>mu(i),discoverSiteContent:(i={})=>wo(i,e),runSiteCommand:(i={})=>gu(i),describeVisualContext:(i={})=>yu(i,e),inspectProductSurface:oo({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o}),getSiteCapabilities:()=>wu(e)}}function pu({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o,input:i}){const a=E(i.query||i.text||""),s=cr(i),c=ur(r),l=ur(n)||[];return lr({accountId:e,url:Lu(),title:ee(document.title||""),pageType:ur(t)||"other",viewport:Ou(),product:ko(o(c)),products:l.map(o).map(ko).filter(Boolean).slice(0,s.products),content:i.includeContent===!1?void 0:wo(i,e).items,headings:ku(s.headings),controls:i.includeControls===!1?void 0:_u(s.controls),textMatches:a?or(a,s):[],privacy:{rawHtml:!1,formValues:!1,redacted:!0,browserLocal:!0}})}function wo(e={},t=""){const r=cr(e),n=new Set(Au(e.kinds||e.kind)),o=Su(r.controls).filter(i=>!n.size||n.has(i.kind)).slice(0,r.controls);return{accountId:t,items:o,count:o.length,privacy:W()}}function mu(e={}){const t=E(e.query||e.text||e.pattern||"");if(!t)return{ok:!1,matches:[],message:"Provide a query to scan visible page text.",privacy:W()};const r=or(t,cr(e));return{ok:r.length>0,query:t,matches:r,count:r.length,privacy:W()}}function gu(e={}){const t=E(e.command||e.action||"").toLowerCase();return t==="scroll_to_text"||t==="scrolltotext"?hu(e):t==="click_visible_text"||t==="clickvisibletext"?bu(e):t==="scroll_top"||t==="scrolltotop"?(window.scrollTo({top:0,behavior:"smooth"}),{ok:!0,command:"scroll_top",message:"Scrolled to the top of the page.",privacy:W()}):{ok:!1,command:t,message:"Supported commands are scroll_to_text, click_visible_text, and scroll_top.",privacy:W()}}function yu(e={},t){const r=e.visual_consent===!0||e.visualConsent===!0||e.consent===!0,n=r?Tu(e.visual_observations||e.visualObservations):[],o=xu(Number(e.maxImages||8));return{accountId:t,ok:r||o.length>0,consentedObservations:n,visibleImages:o,message:Eu({consented:r,observations:n,visibleImages:o}),privacy:{rawHtml:!1,formValues:!1,screenshotPixels:!1,redacted:!0,browserLocal:!0,requiresConsentForExternalVisualFacts:!0}}}function hu(e){const t=E(e.query||e.text||e.label||""),r=t?Ru(t):null;return r?(r.scrollIntoView({block:"center",inline:"nearest",behavior:"smooth"}),{ok:!0,command:"scroll_to_text",label:be(r),message:"Scrolled to the matching page area.",privacy:W()}):{ok:!1,command:"scroll_to_text",message:"No visible matching text found."}}function bu(e){const t=E(e.label||e.query||e.text||"");if(!t)return{ok:!1,command:"click_visible_text",message:"Provide a visible label to click."};if(et.test(t))return{ok:!1,blocked:!0,command:"click_visible_text",message:"This looks like a checkout, payment, destructive, or final confirmation action, so it was not clicked.",privacy:W()};const r=Pu(t);if(!r)return{ok:!1,command:"click_visible_text",message:"No safe visible clickable control found."};const n=be(r);return et.test(n)?{ok:!1,blocked:!0,command:"click_visible_text",label:n,message:"The matched control is blocked by the safe-click policy.",privacy:W()}:(r.click(),{ok:!0,command:"click_visible_text",label:n,message:"Clicked the safe visible control.",privacy:W()})}function wu(e){return{accountId:e,tools:["scanSite","siteGrep","discoverSiteContent","runSiteCommand","describeVisualContext","inspectProductSurface"],commands:{scanSite:"Returns a compact browser-local summary of page type, title, headings, products, controls, and matching visible text.",siteGrep:"Finds capped visible text snippets by plain query, like grep for the rendered page.",discoverSiteContent:"Returns visible campaign, blog/editorial, and category/content links as compact browser-local metadata.",runSiteCommand:"Runs guarded browser-local page commands: scroll_to_text, click_visible_text, scroll_top. Checkout, payment, destructive, and final-confirm controls are blocked.",describeVisualContext:"Summarizes visible image metadata and explicit shopper-consented redacted visual observations without capturing screenshots or pixels.",inspectProductSurface:"Returns compact GSS-style product detail evidence visible in the browser: description, specs, seller, QNA, reviews/ratings, installment/payment, shipping/stock, campaigns, variants, documents, and related visible products."},privacy:["Runs in the shopper browser.","Does not return raw HTML, cookies, storage, hidden text, or form values.","Redacts emails, phone numbers, tokens, and address-like postal snippets before returning text.","Returns compact capped snippets only.","Does not send screenshots or pixels implicitly; external visual observations must be explicitly consented."]}}function ku(e){return[...document.querySelectorAll('h1,h2,h3,[role="heading"]')].filter(re).map(t=>ee(E(t.textContent))).filter(Boolean).slice(0,e)}function _u(e){return[...document.querySelectorAll('button,a,[role="button"],summary,input[type="button"],input[type="submit"]')].filter(re).map(t=>({label:be(t),tag:t.tagName?.toLowerCase(),role:t.getAttribute?.("role")||null,href:_o(t),safeClick:!et.test(be(t))})).filter(t=>t.label).filter(tt(t=>`${t.tag}:${t.label}:${t.href||""}`)).slice(0,e)}function Su(e){return[...document.querySelectorAll('a[href],button,[role="button"],summary')].filter(re).map(t=>{const r=be(t),n=_o(t),o=vu([r,n,ir(t)].join(" "));return o?lr({kind:o,label:r,href:n,heading:ir(t),safeClick:!et.test(r)}):null}).filter(Boolean).filter(tt(t=>`${t.kind}:${t.label}:${t.href||""}`)).slice(0,Math.max(1,Math.min(e,30)))}function vu(e){for(const[t,r]of Object.entries(du))if(r.test(e))return t;return""}function Au(e){return(Array.isArray(e)?e:String(e||"").split(/[,|]/u)).map(t=>E(t).toLowerCase()).filter(Boolean)}function or(e,t){const r=e.toLocaleLowerCase("tr-TR");return Cu(document.body).map(n=>({node:n,text:E(n.nodeValue||"")})).filter(({text:n})=>n&&n.toLocaleLowerCase("tr-TR").includes(r)).map(({node:n,text:o})=>({snippet:ju(o,e,t.snippetChars),tag:n.parentElement?.tagName?.toLowerCase()||"",heading:ir(n.parentElement)})).filter(n=>n.snippet).filter(tt(n=>n.snippet)).slice(0,t.textMatches)}function xu(e){return[...document.querySelectorAll("img")].filter(re).map(t=>({alt:ee(E(t.getAttribute("alt")||t.getAttribute("aria-label")||"")),title:ee(E(t.getAttribute("title")||"")),src:ar(t.currentSrc||t.getAttribute("src")),width:Math.round(t.getBoundingClientRect().width),height:Math.round(t.getBoundingClientRect().height)})).filter(t=>t.alt||t.title||t.src).filter(tt(t=>`${t.alt}:${t.title}:${t.src}`)).slice(0,Math.max(1,Math.min(Number.isFinite(e)&&e>0?Math.floor(e):8,20)))}function Tu(e){return(Array.isArray(e)?e:String(e||"").split(/\n|;|\|/u)).map(t=>ee(t).slice(0,180)).filter(Boolean).slice(0,8)}function Eu({consented:e,observations:t,visibleImages:r}){const n=[];if(t.length&&n.push(`Consented visual observations: ${t.slice(0,3).join(" | ")}.`),r.length){const o=r.map(i=>i.alt||i.title).filter(Boolean).slice(0,3);n.push(o.length?`Visible image labels: ${o.join(", ")}.`:`${r.length} visible images found.`)}return!n.length&&!e&&n.push("I can use visible image labels, but external visual observations need explicit shopper consent."),n.push("No screenshots or pixels were captured or sent."),n.join(" ")}function Cu(e){if(!e)return[];const t=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(n){const o=n.parentElement;return!o||!re(o)||/^(script|style|noscript|template|svg)$/iu.test(o.tagName||"")||Iu(o)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),r=[];for(;r.length<500;){const n=t.nextNode();if(!n)break;r.push(n)}return r}function Pu(e){return[...document.querySelectorAll('button,a,[role="button"],summary,input[type="button"],input[type="submit"]')].filter(re).find(t=>be(t).toLocaleLowerCase("tr-TR").includes(e.toLocaleLowerCase("tr-TR")))}function Ru(e){const t=or(e,{...he,textMatches:1})[0];return t?[...document.querySelectorAll("body *")].filter(re).find(r=>E(r.textContent).includes(t.snippet.slice(0,24))):null}function be(e){return e?ee(E(e.getAttribute?.("aria-label")||e.getAttribute?.("title")||e.getAttribute?.("alt")||e.value||e.textContent||"")).slice(0,90):""}function ir(e){let t=e;for(let r=0;t&&r<5;r+=1){const n=E((t.matches?.('h1,h2,h3,[role="heading"]')?t:t.querySelector?.('h1,h2,h3,[role="heading"]'))?.textContent||"");if(n)return ee(n).slice(0,90);t=t.parentElement}return""}function ko(e){return e?lr({sku:E(e.sku||e.id||""),name:E(e.name||e.title||""),url:ar(e.url),price_text:E(e.price_text||e.priceText||""),price:e.price,currency:e.price_currency||e.currency,in_stock:e.in_stock,category:E(e.category||"")}):null}function ju(e,t,r){const n=ee(e),o=n.toLocaleLowerCase("tr-TR").indexOf(t.toLocaleLowerCase("tr-TR")),i=Math.max(0,o-Math.floor(r/3));return n.slice(i,i+r).trim()}function re(e){if(!e||!e.getBoundingClientRect)return!1;const t=e.getBoundingClientRect();if(t.width<=0||t.height<=0)return!1;const r=window.getComputedStyle(e);return r.visibility!=="hidden"&&r.display!=="none"&&Number(r.opacity||1)>0}function Iu(e){return!!e.closest?.('input,textarea,select,[contenteditable="true"]')}function _o(e){return e.tagName?.toLowerCase()!=="a"?null:ar(e.getAttribute("href"))}function ar(e){if(!e)return"";try{const t=new URL(e,window.location.href);return/^https?:$/u.test(t.protocol)?(t.hash="",sr(t),t.href):""}catch{return""}}function Lu(){const e=new URL(window.location.href);return sr(e),`${e.origin}${e.pathname}${e.search}`}function Ou(){return{width:window.innerWidth,height:window.innerHeight,scrollY:Math.round(window.scrollY||0),documentHeight:Math.round(document.documentElement?.scrollHeight||0)}}function ee(e){return E(e).replace(/https?:\/\/[^\s?#]+(?:\?[^#\s]*)?/giu,Bu).replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/giu,"<email>").replace(/\b(?:\+?\d[\d\s().-]{8,}\d)\b/gu,"<phone>").replace(/\b[A-Z]{1,2}\d[A-Z\d]?\s*\d[A-Z]{2}\b/giu,"<postcode>").replace(/\btoken\s*=\s*[\w.-]+/giu,"token=<redacted>").replace(/\b(?:api[_-]?key|session|csrf|secret)\s*[:=]\s*[\w.-]+/giu,"<secret>")}function Bu(e){try{const t=new URL(e);return t.hash="",sr(t),t.href}catch{return String(e||"").replace(/\?[^#\s]*/u,"?redacted")}}function sr(e){for(const[t,r]of[...e.searchParams.entries()]){const n=String(r||"");(lu.test(t)||uu.test(n))&&e.searchParams.set(t,"redacted")}return e}function E(e){return String(e||"").replace(/\s+/gu," ").trim()}function cr(e){return{headings:Le(e.maxHeadings,he.headings,20),products:Le(e.maxProducts,he.products,20),controls:Le(e.maxControls,he.controls,30),textMatches:Le(e.maxMatches||e.limit,he.textMatches,20),snippetChars:Le(e.snippetChars,he.snippetChars,320)}}function Le(e,t,r){const n=Number(e);return!Number.isFinite(n)||n<=0?t:Math.min(Math.floor(n),r)}function W(){return{rawHtml:!1,formValues:!1,redacted:!0,browserLocal:!0}}function lr(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!=null))}function ur(e){try{return typeof e=="function"?e():null}catch{return null}}function tt(e){const t=new Set;return r=>{const n=e(r);return!n||t.has(n)?!1:(t.add(n),!0)}}var Mu=3e4;function So(e,t,r={}){const n=r.ttlMs??Mu,o=r.clock??Date.now,i=new Map,a=new Map;return async function(c){const l=String(t(c)??"");if(!l)return e(c);const u=o();Nu(a,u,n);const f=i.get(l);if(f)return f;const m=a.get(l);if(m&&u-m.at<n)return $u(m.observation,l);const p=(async()=>{try{const y=await e(c);return a.set(l,{at:o(),observation:y}),y}finally{i.delete(l)}})();return i.set(l,p),p}}function Nu(e,t,r){for(const[n,o]of e)t-o.at>=r&&e.delete(n)}function $u(e,t){return!e||typeof e!="object"?e:{...e,deduped:!0,dedupe_key:t}}var Fu=3e4,vo=new Set;function qu(e){const t=()=>So(async o=>e(o||{}),o=>{const i=Du(o),a=Number(o?.quantity||o?.qty||1)||1,s=zu(o);return i?`${i}|${a}|${s}`:""},{ttlMs:Fu});let r=t();const n=async function(i={}){return r(i)};return n.__resetForTesting=()=>{r=t()},vo.add(n),n}function Uu(){for(const e of vo)typeof e.__resetForTesting=="function"&&e.__resetForTesting()}function Du(e){const t=e?.cartCode??e?.sku??e?.productCode??e?.product?.sku??e?.product?.cart_code;return t==null?"":String(t).trim()}function zu(e){const t=e?.variantId??e?.variantCode??e?.product?.variantId??"";return t==null?"":String(t).trim()}var Gu=32,Ao=new Set;function Hu(e,t){const{accountId:r,allowedHostnames:n,productFromPage:o,mergeProduct:i=Wu,needsHydration:a=Ku,fetchOptions:s={credentials:"include"},maxConcurrency:c=4}=t;if(!r)throw new Error("wrapResolveProductsWithPdpHydration: accountId is required");if(typeof o!="function")throw new Error("wrapResolveProductsWithPdpHydration: productFromPage(doc, url) is required");if(!Array.isArray(n)||!n.length)throw new Error("wrapResolveProductsWithPdpHydration: allowedHostnames must be a non-empty array");const l=new Map,u=Yu({productFromPage:o,fetchOptions:s,isAllowed:Ju(n)}),f=async function(p={}){const y=await e(p||{});if(p?.hydrateFromPdp===!1)return y;const h=Array.isArray(y?.products)?y.products:[];if(!h.length)return y;const g=await Qu(h,u,l,c,i,a);return{...y,products:g}};return f.__resetCacheForTesting=()=>l.clear(),f.__cacheSizeForTesting=()=>l.size,Ao.add(f),f}function Vu(){for(const e of Ao)typeof e.__resetCacheForTesting=="function"&&e.__resetCacheForTesting()}function Ku(e){if(!e||!e.url)return!1;const t=e,r=t.features,n=t.specs,o=t.category_names,i=Array.isArray(r)&&r.length>0,a=!!n&&typeof n=="object"&&Object.keys(n).length>0,s=Array.isArray(o)&&o.length>0;return!i&&!a&&!s}function Wu(e,t){return e?t?{...e,...t}:e:t}function Ju(e){const t=e.map(r=>String(r||"").toLowerCase().trim()).filter(Boolean);return r=>{const n=String(r||"").toLowerCase();if(!n)return!1;for(const o of t)if(n===o||n.endsWith(`.${o}`))return!0;return!1}}function Zu(e,t){if(!e)return null;try{const r=new URL(String(e));return r.protocol!=="https:"||!t(r.hostname)?null:r.href}catch{return null}}function Yu(e){const{productFromPage:t,fetchOptions:r,isAllowed:n}=e;return async function(i){const a=Zu(i?.url,n);if(!a||typeof fetch!="function")return null;let s;try{const l=await fetch(a,r);if(!l?.ok)return null;s=await l.text()}catch{return null}if(!s||typeof DOMParser>"u")return null;let c;try{c=new DOMParser().parseFromString(s,"text/html")}catch{return null}if(!c)return null;try{return t(c,a)||null}catch{return null}}}async function Qu(e,t,r,n,o,i){const a=new Array(e.length);let s=0;const c=Math.max(1,Math.min(n,e.length)),l=new Array(c).fill(null).map(()=>u());return await Promise.all(l),a;async function u(){for(;;){const m=s++;if(m>=e.length)return;a[m]=await f(e[m])}}async function f(m){if(!m||!i(m))return m;const p=m?.sku==null?"":String(m.sku).trim();if(p&&r.has(p)){const h=r.get(p);return h?o(m,h):m}const y=await t(m);return p&&(r.set(p,y||null),Xu(r)),y?o(m,y):m}}function Xu(e){for(;e.size>Gu;){const t=e.keys().next().value;if(t===void 0)break;e.delete(t)}}var ed=20;function xo(e,t={}){const{context:r,accountConfig:n}=t,o=Array.isArray(e)?e.filter(Boolean):[];if(!o.length)return[];const i=String(r?.meta?.locale||n?.locale||n?.defaultLocale||"tr-TR").toLowerCase().startsWith("en"),a=i?"Compare the first two":"İlk ikisini karşılaştır",s=i?"Open product page":"Ürün sayfasını aç",c=i?"Tell me the comfort details":"Konfor özelliklerini anlat",l=i?"Show similar":"Benzerlerini göster",u=[];o.length>=2&&u.push({label:a,action:{type:"getComparisonTable",payload:{skus:o.slice(0,2).map(m=>m.sku).filter(Boolean),limit:2}}});const f=o[0]?.sku;return f&&!i&&(u.push({label:s,action:{type:"openProductPage",payload:{sku:f,url:o[0]?.url}}}),u.push({label:c,action:{type:"productQuestion",payload:{sku_list:[f]}}})),u.push({label:l,action:{type:"findSimilar",payload:{sku:f}}}),u}function dr(e,t=ed){const r=[];if(!Array.isArray(e))return[];for(const a of e){const s=Array.isArray(a?.observation?.products)?a.observation.products:[];s.length&&r.push([...s])}if(r.length<=1)return(r[0]||[]).slice(0,t);const n=[],o=new Set;let i=0;for(;n.length<t;){let a=!1;for(const s of r){const c=s[i];if(!c)continue;const l=String(c.sku||c.url||c.name||"");if(l&&o.has(l)){a=!0;continue}if(l&&o.add(l),n.push(c),a=!0,n.length>=t)break}if(!a)break;i+=1}return n}function td(e){if(!e?.spec?.elements)return e;const t=e.spec.root;if(!t)return e;const r=e.spec.elements[t];return!r||r.type!=="ProductGrid"?(typeof console<"u"&&console.warn&&console.warn("[agentic] withSimilarsAppend: products envelope root is not ProductGrid",r?.type),e):{...e,spec:{...e.spec,elements:{...e.spec.elements,[t]:{...r,props:{...r.props||{},similarsAppend:!0}}}}}}function rd(e,t={}){const r=t.threshold??0;return!r||r<=0||!Array.isArray(e)?!1:e.length>r}function nd(e,t={}){const r=Math.max(0,t.retainTail??4);if(!Array.isArray(e)||e.length===0||e.length<=r)return null;const n=e.slice(e.length-r),o=e.slice(0,e.length-r);return o.length?{messagesToSummarize:o,retainedTail:n}:null}function od(e,t,r={}){const n=String(t||"").trim();if(!n)return e;const o=Math.max(0,r.retainTail??4),i=Array.isArray(e.messages)?e.messages:[],a=i.slice(Math.max(0,i.length-o));return{...e,messages:[{role:"assistant",content:n,name:"compaction"},...a],panel:{...e.panel||{},compaction_summary:{summary:n,replacedCount:i.length-a.length,retainedTailCount:a.length,compactedAt:new Date().toISOString()}}}}function J(e,t){const r=e?.[t];return Array.isArray(r)?r:[]}function Oe(e,t,r=!1){return[...e].reverse().find(n=>n?.name===t&&(!r||n?.observation?.status==="ok"))}function id(e){return{kind:"patch",patch:(t,r,n)=>{const o=Oe(J(n.bag,e),"search_catalog"),i=Array.isArray(o?.observation?.products)?o.observation.products:null;return i?.length?{panel:{...t.panel,screen_type:"product_list",list_source:"agent",last_search_products:i,last_search:{query:o.observation.query,source:o.observation.source,count:o.observation.count},screen_sku_list:i.map(a=>a?.sku).filter(Boolean).slice(0,24)}}:null}}}function ad(e){const t=e.obsKey||"roundObservations",r=e.gridLimit??20,n=e.similarsFollowupSteps?e.similarsFollowupSteps():[];return[id(t),{kind:"branch",on:({bag:o})=>J(o,t).some(i=>Array.isArray(i?.observation?.products)&&i.observation.products.length)?"has_products":"no_products",cases:{has_products:[{kind:"emit",build:({bag:o})=>{const i=dr(J(o,t),r);return e.uiSpec(e.productsUiSpec(i))}},{kind:"emit",build:({bag:o,context:i,accountConfig:a})=>{const s=dr(J(o,t),r);return e.uiSpec(e.actionButtonsUiSpec(xo(s,{context:i,accountConfig:a})))}}],no_products:[]}},{kind:"branch",on:({bag:o})=>Oe(J(o,t),"compare_products",!0)?"has_compare":"no_compare",cases:{has_compare:[{kind:"emit",build:({context:o,bag:i})=>{const a=Oe(J(i,t),"compare_products"),s=a?.observation||{},c=a?.arguments||{},l=Array.isArray(c.target_skus)?c.target_skus.map(String):[],u=Array.isArray(o?.panel?.last_search_products)?o.panel.last_search_products:[],f=l.length?l.map(m=>u.find(p=>String(p?.sku)===m)).filter(Boolean):u.slice(0,4);return e.uiSpec(e.comparisonUiSpec({products:f,comparison_table:s.comparison_table,key_differences:s.key_differences,recommended_choice_sku:s.recommendation?.sku,recommended_choice:s.recommendation?.reason}))}}],no_compare:[]}},{kind:"branch",on:({bag:o})=>Oe(J(o,t),"get_product_details",!0)?"has_details":"no_details",cases:{has_details:[{kind:"emit",build:({context:o,bag:i})=>{const a=Oe(J(i,t),"get_product_details"),s=a?.observation?.surface||{},c=a?.arguments||{},l=Array.isArray(o?.panel?.last_search_products)?o.panel.last_search_products:[],u=c.sku?l.find(m=>String(m?.sku)===String(c.sku)):null,f=s.product||u||s||{};return e.uiSpec(e.productDetailsUiSpec(f))}},...n],no_details:[]}},...To({...e,obsKey:t})]}function To(e){const t=e.obsKey||"roundObservations",r=e.pdpFollowupProduct;return r?[{kind:"branch",on:({bag:n,context:o})=>n.pdpFollowupRendered||J(n,t).some(i=>{const a=i?.name;return a==="search_catalog"||a==="compare_products"||a==="get_product_details"||Array.isArray(i?.observation?.products)&&i.observation.products.length})?"skip":r(n,o)?"render":"skip",cases:{render:[{kind:"emit",build:({bag:n,context:o})=>e.uiSpec(e.productDetailsUiSpec(r(n,o)))},{kind:"patch",patch:(n,o,i)=>(i.bag.pdpFollowupRendered=!0,null)},...e.similarsFollowupSteps?e.similarsFollowupSteps():[]],skip:[]}}]:[]}d.AgentError=M,d.ContextStore=Sr,d.FALLBACK_STATUS=il,d.__resetAllCartCoalescersForTesting=Uu,d.__resetAllPdpHydratorsForTesting=Vu,d.action=$i,d.actionButtonsUiSpec=ys,d.alignProductsToTable=ln,d.anonymousRequestText=gn,d.applyCompactionResult=od,d.beErrorToAgentError=yt,d.buildActivityVisualization=xn,d.buildCompactionRequest=nd,d.buildPdpFollowupSteps=To,d.buildPhotoSimilarityProfile=As,d.buildProductSimilarityProfile=ue,d.buildSimilarityQueries=xs,d.buildToolUiSteps=ad,d.canUseModuleWorker=It,d.caughtToStreamError=Er,d.coalesceAddToCart=qu,d.compactAccountConfig=yn,d.compactContextProducts=is,d.compactObject=Sl,d.compactProductSurfaceForLlm=ao,d.comparisonResultForUi=us,d.comparisonUiSpec=ms,d.createActivityCollector=wn,d.createBrowserMemory=jt,d.createDiagnosticsTool=Qs,d.createEndpointCachePolicies=bs,d.createEndpointHandlers=ws,d.createFlow=hs,d.createGssToolAliases=ml,d.createIframeScraper=kl,d.createInjectorAdapter=Gr,d.createLocalRefStore=pr,d.createMainThreadInjectorAdapter=Vr,d.createModuleWorker=cn,d.createOpenProductPageTool=vl,d.createPrivacyHelpers=eo,d.createProductSurfaceInspector=oo,d.createReadPageStep=cl,d.createReadPageTool=Ys,d.createResolveProductsTool=El,d.createSiteAwarenessTools=fu,d.declarativeBeOpCache=Jn,d.defaultPiiPatternPack=Mt,d.defaultPiiPatterns=Bt,d.done=wt,d.elapsedMs=q,d.endpointStableKey=un,d.error=Lr,d.fallbackStatus=al,d.filterActivityEntries=Nn,d.firstArrayValue=su,d.formatJsonHtml=Un,d.getOrCreateActivityCollector=kn,d.groupForEntry=An,d.gssSearchCapabilities=Zn,d.homePanelReset=xl,d.httpErrorToAgentError=Tr,d.inputHashCachePolicy=Wn,d.inspectProductSurface=io,d.installActivityFetchPatch=Rn,d.installBrowserTools=Zs,d.installFetchTransportBridge=$a,d.installIframeScraperBypass=_l,d.installLocalAgenticActivityDebug=el,d.isFallbackStatus=sl,d.isRef=mr,d.jsonResponse=_s,d.llmCacheKey=kt,d.mergeProductSurfaceEvidence=jl,d.mergeRoundProducts=dr,d.metadata=Mi,d.mountAccount=os,d.mountActivityOverlay=Bn,d.navigateSameTab=Xn,d.ndjsonResponse=ks,d.normalizeComparisonTable=Lt,d.normalizeEntry=_n,d.normalizeProduct=qe,d.normalizeSameOriginUrl=Qn,d.normalizeSimilarityText=H,d.nowIso=br,d.plainMessageContent=Tl,d.productDetailsUiSpec=ps,d.productFactsKey=Ui,d.productSkuKey=qi,d.productSurfaceReviewText=Il,d.productsUiSpec=fs,d.rankSimilarProducts=Ts,d.rankSimilarProductsAsync=Es,d.recordBeDebugPayload=zt,d.redactPii=Nt,d.requestText=mn,d.resolveBeUrl=Ds,d.resolveFlow=Or,d.resolveProductCandidates=to,d.retailAnonymizeMessages=au,d.retailAnonymousRequestText=iu,d.retailRedactPii=ou,d.routeFlowParams=bo,d.routeSkuList=cu,d.scoreSimilarityCandidate=Ot,d.searchFollowUpPills=xo,d.sectionForKind=Sn,d.setAssistantHostVisible=qs,d.severityForEntry=vn,d.shouldCompact=rd,d.shouldInstallActivityDebug=Kn,d.singleFlight=So,d.stableKey=ie,d.startLazyRuntimeLoader=Xs,d.stickyContextKey=ut,d.summarizeDebugState=Pe,d.summarizePanelState=He,d.summarizeUiSpec=Ft,d.textChunk=Ir,d.textKey=Di,d.tokenizeSimilarityText=$,d.trimProductFactsCore=Ue,d.trimProductFactsListCore=Fi,d.uiSpec=Ni,d.uniqueProductsBySku=ro,d.validateToolArgs=Fr,d.withAccountConfig=Ks,d.withDeclarativeBeOpCache=nl,d.withSimilarsAppend=td,d.wrapActivityBeacon=Cn,d.wrapActivityTools=En,d.wrapActivityTransport=Pn,d.wrapResolveProductsWithPdpHydration=Hu})(this.Gengage=this.Gengage||{});
|