@gengage/assistant-fe 0.6.21 → 0.6.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +4 -2
  2. package/dist/agentic/adaptor/create-adaptor.d.ts +6 -3
  3. package/dist/agentic/adaptor/mount.d.ts +8 -2
  4. package/dist/agentic/{similarity.d.ts → algos/similarity.d.ts} +11 -2
  5. package/dist/agentic/algos/similarity.js +261 -0
  6. package/dist/agentic/context/chat-context.d.ts +4 -2
  7. package/dist/agentic/context/context-store.d.ts +11 -1
  8. package/dist/agentic/context/persistence.d.ts +1 -0
  9. package/dist/agentic/contracts/agentic-contracts.d.ts +133 -0
  10. package/dist/agentic/debug/activity-collector.d.ts +14 -0
  11. package/dist/agentic/debug/activity-instrumentation.d.ts +22 -0
  12. package/dist/agentic/debug/activity-overlay.d.ts +3 -0
  13. package/dist/agentic/debug/activity-state.d.ts +37 -0
  14. package/dist/agentic/debug/local-dev.d.ts +18 -0
  15. package/dist/agentic/events/product-normalize.d.ts +4 -1
  16. package/dist/agentic/events/ui-specs.d.ts +8 -4
  17. package/dist/agentic/index.d.ts +25 -2
  18. package/dist/agentic/index.js +2792 -441
  19. package/dist/agentic/types.d.ts +77 -4
  20. package/dist/agentic/util/common/declarative-cache.d.ts +21 -0
  21. package/dist/agentic/util/common/fallback-status.d.ts +10 -0
  22. package/dist/agentic/util/common/flow-steps.d.ts +8 -0
  23. package/dist/agentic/util/common/gss-tool-aliases.d.ts +66 -0
  24. package/dist/agentic/util/common/iframe-scraper.d.ts +22 -0
  25. package/dist/agentic/util/common/llm-routing.d.ts +50 -0
  26. package/dist/agentic/util/common/object.d.ts +1 -0
  27. package/dist/agentic/util/common/open-product-page.d.ts +30 -0
  28. package/dist/agentic/util/common/panel-context.d.ts +3 -0
  29. package/dist/agentic/util/common/privacy.d.ts +14 -0
  30. package/dist/agentic/util/common/product-resolver.d.ts +20 -0
  31. package/dist/agentic/util/common/product-surface.d.ts +24 -0
  32. package/dist/agentic/util/common/ref-store.d.ts +15 -0
  33. package/dist/agentic/util/common/retail-privacy.d.ts +4 -0
  34. package/dist/agentic/util/common/route-params.d.ts +3 -0
  35. package/dist/agentic/util/common/similarity-ranking.d.ts +2 -0
  36. package/dist/agentic/util/common/site-awareness.d.ts +130 -0
  37. package/dist/agentic/util/lazy-runtime-loader.d.ts +2 -1
  38. package/dist/agentic/worker/rpc.d.ts +26 -6
  39. package/dist/agentic/worker.d.ts +15 -2
  40. package/dist/agentic/worker.js +316 -119
  41. package/dist/agentic.iife.js +352 -6
  42. package/dist/{api-paths-DcKsQqb6.js → api-paths-BmN07ddR.js} +144 -154
  43. package/dist/chat/catalog.d.ts +8 -0
  44. package/dist/chat/types.d.ts +2 -1
  45. package/dist/{chat-rvSffJXw.js → chat-CIfQyuBl.js} +26 -21
  46. package/dist/chat-runtime.js +1 -1
  47. package/dist/chat.iife.js +44 -44
  48. package/dist/chat.js +2 -2
  49. package/dist/{common-MpBmMLVk.js → common-sx2gD-IP.js} +1 -1
  50. package/dist/common.js +5 -5
  51. package/dist/{connection-warning-ClrMLgmZ.js → connection-warning-D5T4gHSM.js} +1 -1
  52. package/dist/{fastIntent-Bl4xN0qL.js → fastIntent-BFAGybCb.js} +1 -1
  53. package/dist/index.js +10 -10
  54. package/dist/native.iife.js +17 -17
  55. package/dist/qna-runtime.js +1 -1
  56. package/dist/qna.iife.js +7 -7
  57. package/dist/qna.js +1 -1
  58. package/dist/route-params-5KSvTyeb.js +2454 -0
  59. package/dist/{runtime-CS4mg3ra.js → runtime-BD2fW-ed.js} +3 -3
  60. package/dist/{runtime-_koZbJK_.js → runtime-DM7DHhH9.js} +1816 -1778
  61. package/dist/{runtime-BlU1rKqc.js → runtime-DQ3ULuNF.js} +3 -3
  62. package/dist/{simbut-BtL7zYIJ.js → simbut-hkt_4H97.js} +1 -1
  63. package/dist/simbut.iife.js +1 -1
  64. package/dist/simbut.js +1 -1
  65. package/dist/{simrel-ekf3kUb_.js → simrel-BbkK5Bwt.js} +1 -1
  66. package/dist/simrel-runtime.js +1 -1
  67. package/dist/simrel.iife.js +6 -6
  68. package/dist/simrel.js +2 -2
  69. package/dist/{widget-base-p1EKDuiI.js → widget-base-BPKfPh0N.js} +1 -1
  70. package/package.json +5 -1
  71. package/dist/account-config-D_EMuR0g.js +0 -1479
@@ -1,7 +1,353 @@
1
- (function(f){Object.defineProperty(f,Symbol.toStringTag,{value:"Module"});function at(e){return!!e&&typeof e=="object"&&e.type==="rpc.req"}function ct({worker:e,tools:t={},beacon:n,memory:r=sessionStorage}){e.addEventListener("message",o=>{const i=o.data;at(i)&&st(e,i,{tools:t,beacon:n,memory:r})})}async function st(e,t,n){try{const r=await ue(t.method,t.payload,n);e.postMessage({type:"rpc.result",rpcId:t.rpcId,ok:!0,value:r})}catch(r){e.postMessage({type:"rpc.result",rpcId:t.rpcId,ok:!1,error:{message:r instanceof Error?r.message:String(r)}})}}function ut(e){if(e&&typeof e=="object"&&typeof e.name=="string")return e;throw new Error("tool.invoke requires { name, input }")}function lt(e){if(e&&typeof e=="object"&&e.key!==void 0)return e;throw new Error("memory.get requires { key }")}function dt(e){if(e&&typeof e=="object"&&e.key!==void 0)return e;throw new Error("memory.set requires { key }")}async function ue(e,t,{tools:n,beacon:r,memory:o}){if(e==="tool.invoke"){const{name:i,input:a}=ut(t),c=n[i];if(typeof c!="function")throw new Error(`Unknown tool: ${i}`);return c(a)}if(e==="beacon.send")return r?.(t),{sent:!0};if(e==="memory.get"){const{key:i}=lt(t),a=o.getItem(String(i));return a?JSON.parse(a):null}if(e==="memory.set"){const{key:i,value:a}=dt(t);return o.setItem(String(i),JSON.stringify(a??null)),{ok:!0}}throw new Error(`Unknown RPC method: ${e}`)}function le(){return new Date().toISOString()}function I(e){return Math.max(0,Math.round(performance.now()-e))}function M(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ft(e){const{accountId:t,locale:n="en-GB",parentUrl:r="",threadId:o,incomingContext:i}=e,a=M(i)?i:{},c=M(a.thread)?a.thread:{},y=M(a.panel)?a.panel:{},m=M(a.meta)?a.meta:{},d=de(a.messages),s={id:String(o||c.id||self.crypto.randomUUID()),started_at:String(c.started_at||le()),extensions:M(c.extensions)?{...c.extensions}:{}},u=String(m.locale||n),l=String(m.parentUrl||r||typeof self<"u"&&self.location?.href||"");return{panel:{...y},messages:d,thread:s,meta:{locale:u,parentUrl:l,accountId:t}}}function mt(e,t){const n=de([t])[0];return n?{...e,messages:[...e.messages,n].slice(-50)}:e}function de(e){return Array.isArray(e)?e.map(t=>{const n=t?.role;return{role:n==="model"?"assistant":typeof n=="string"?n:"",content:String(t?.content||"")}}).filter(t=>(t.role==="user"||t.role==="assistant")&&!!t.content).slice(-50):[]}var yt="gengage:agent:context:";async function pt({accountId:e,threadId:t,rpc:n}){const r=await n("memory.get",{tier:"session",key:fe(e,t)});return r&&typeof r=="object"&&!Array.isArray(r)?r:{}}async function gt({accountId:e,threadId:t,extensions:n,panel:r,rpc:o}){await o("memory.set",{tier:"session",key:fe(e,t),value:{thread:{extensions:n},...r&&Object.keys(r).length>0?{panel:r}:{}}})}function fe(e,t){return`${yt}${e}:${t}`}function b(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var me=class{#e=new Map;#t;#r;#o;#n;#i;#a;constructor({accountId:e,locale:t,parentUrl:n,rpc:r,persistentPanelKeys:o=[],panelKeyLimits:i={}}){this.#t=e,this.#r=t,this.#o=n,this.#n=r,this.#i=[...new Set(o.filter(Boolean))],this.#a=wt(i)}async load(e){const t=e?.meta?.threadId||e?.session_id||e?.sessionId,n=String(t||"default"),r=this.#e.get(n);if(r)return r;const o=await pt({accountId:this.#t,threadId:n,rpc:this.#n}),i=ft({accountId:this.#t,locale:e?.locale||this.#r,parentUrl:this.#o,threadId:n,incomingContext:St(o,e?.context)});return this.#e.set(n,i),i}patch(e,t){const n=String(e||"default"),r=this.#e.get(n);if(!r)return null;const o=ye(r,typeof t=="function"?t(r):t);return this.#e.set(n,o),o}appendUserMessage(e,t){const n=String(e||"default");if(!t)return this.#e.get(n)??null;const r=this.#e.get(n);if(!r)return null;const o=mt(r,{role:"user",content:t});return this.#e.set(n,o),o}async commit(e){const t=String(e||"default"),n=this.#e.get(t);return n?(await gt({accountId:this.#t,threadId:t,extensions:n.thread.extensions,panel:ht(n.panel,this.#i,this.#a),rpc:this.#n}),n):null}};function ht(e,t,n){if(!t.length||!b(e))return;const r={};for(const o of t)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=bt(e[o],n[o]));return r}function wt(e){const t={};for(const[n,r]of Object.entries(e||{})){const o=Math.floor(Number(r));n&&Number.isFinite(o)&&o>0&&(t[n]=o)}return t}function bt(e,t){return!t||!Array.isArray(e)?e:e.slice(-t)}function St(e,t){return!b(e)&&!b(t)?{}:ye(b(e)?e:{},b(t)?t:{})}function ye(e,t){if(!b(t))return e;const n=e,r=t,o=b(n.panel)?n.panel:{},i=b(r.panel)?r.panel:{},a=b(n.thread)?n.thread:{},c=b(r.thread)?r.thread:{},y=b(a.extensions)?a.extensions:{},m=b(c.extensions)?c.extensions:{},d=b(n.meta)?n.meta:{},s=b(r.meta)?r.meta:{};return{...e,...t,panel:{...o,...i},thread:{...a,...c,extensions:{...y,...m}},meta:{...d,...s},messages:Array.isArray(r.messages)?r.messages.slice(-50):e.messages??[]}}function pe(e){const t=String.fromCharCode(...e);return btoa(t).replace(/\+/gu,"-").replace(/\//gu,"_").replace(/=+$/u,"")}function ge(e){return pe(new TextEncoder().encode(JSON.stringify(e)))}async function At({accountId:e,devJwtSecret:t,ttlS:n=300}){if(!t)throw new Error("devJwtSecret is required for local agent mode.");const r=Math.floor(Date.now()/1e3),o=`${ge({alg:"HS256",typ:"JWT"})}.${ge({sub:e,iat:r,exp:r+n,scope:"invoke",jti:crypto.randomUUID?.()||`${r}-${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}.${pe(new Uint8Array(a))}`}function H({accountId:e,devJwtSecret:t,tokenBrokerUrl:n,tokenBrokerAudience:r,refreshSkewS:o=30,fetchImpl:i=fetch}){let a=null;return async({signal:c,parentUrl:y}={})=>{if(t)return At({accountId:e,devJwtSecret:t});if(!n)throw new Error("tokenBrokerUrl is required for production agent mode.");const m=Math.floor(Date.now()/1e3);return a?.token&&a.expiresAtS-o>m||(a=await kt({accountId:e,tokenBrokerUrl:n,tokenBrokerAudience:r,parentUrl:y,signal:c,fetchImpl:i})),a.token}}async function kt({accountId:e,tokenBrokerUrl:t,tokenBrokerAudience:n,parentUrl:r,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:n||void 0,parentUrl:r||void 0}),...o?{signal:o}:{}});if(!a.ok)throw new Error(`Token broker request failed (${a.status}).`);const c=await a.json(),y=c?.token||c?.jwt||c?.access_token;if(!y||typeof y!="string")throw new Error("Token broker response did not include a JWT.");return{token:y,expiresAtS:_t(c)||Et(y)||Math.floor(Date.now()/1e3)+300}}function _t(e){const t=e?.expiresAtS??e?.expires_at_s??e?.expiresInS??e?.expires_in_s;if(Number.isFinite(t))return Number(t);const n=e?.expiresIn??e?.expires_in;if(Number.isFinite(n))return Math.floor(Date.now()/1e3)+Number(n);const r=e?.expiresAt??e?.expires_at;if(typeof r=="string"){const o=Date.parse(r);if(Number.isFinite(o))return Math.floor(o/1e3)}return null}function Et(e){try{const[,t]=e.split(".");if(!t)return null;const n=t.replace(/-/gu,"+").replace(/_/gu,"/"),r=atob(n.padEnd(Math.ceil(n.length/4)*4,"=")),o=JSON.parse(r);return Number.isFinite(o?.exp)?Number(o.exp):null}catch{return null}}var he={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."}},D=class extends Error{constructor(e,t,n={}){super(t),this.name="AgentError",this.code=e,this.source=n.source||"agent",n.sourceCode&&(this.sourceCode=n.sourceCode),n.detail!==void 0&&(this.detail=n.detail)}};function G(e){const t=String(e?.code||"upstream_llm"),n=he[t]||he.upstream_llm;return new D(n.code,n.message,{source:"be",sourceCode:t,detail:e?.detail})}function we(e,t){const n=t?.error&&typeof t.error=="object"?t.error:{};return G({code:String(n.code||Tt(e)),detail:n.detail})}function be(e){return e instanceof D?{type:"error",code:e.code,message:e.message}:{type:"error",code:"agent_invoke_failed",message:"The assistant could not complete that request."}}function Tt(e){return e===401?"unauthorized":e===403?"forbidden":e===413?"payload_too_large":e===429?"rate_limited":"internal"}var xt=7200*1e3,Se=200,Pt=5*1024*1024,jt="gengage_request_response_cache",Ct=1,_="responses",It=new Set(["addToCart","like"]),E=new Map,Ae=null;async function Ot(e,t={},n={}){const r=Rt(e,t);if(!r)return fetch(e,t);const o=Date.now(),i=await Mt(r,o);if(i)return Lt(i);const a=await fetch(e,t);return a.ok&&Bt(r,a.clone(),o,{ttlMs:n.ttlMs??xt,maxEntries:n.maxEntries??Se,maxBodyBytes:n.maxBodyBytes??Pt}),a}function Rt(e,t={}){if(typeof Request<"u"&&e instanceof Request)return null;const n=String(t.method||"GET").toUpperCase();return n!=="POST"||typeof t.body!="string"||Ut(t.body)?null:`rr:${zt(Kt({url:String(e),method:n,headers:Nt(t.headers),body:t.body}))}`}function Ut(e){try{const t=JSON.parse(e);if(!t||typeof t!="object"||Array.isArray(t))return!1;const n=t.type;return typeof n=="string"&&It.has(n)}catch{return!1}}async function Mt(e,t){const n=E.get(e);if(n)if(n.expiresAt<=t)E.delete(e);else return n.lastAccessedAt=t,E.delete(e),E.set(e,n),W(n),n;const r=await $t(e);return r?r.expiresAt<=t?(E.delete(e),Ft(e),null):(r.lastAccessedAt=t,E.set(e,r),W(r),ke(Se),r):null}async function Bt(e,t,n,r){try{const o=await t.text();if(Jt(o)>r.maxBodyBytes||vt(o))return;const i={key:e,status:t.status,statusText:t.statusText,headers:Dt(t.headers),body:o,createdAt:n,expiresAt:n+r.ttlMs,lastAccessedAt:n};E.set(e,i),ke(r.maxEntries),await W(i),await qt(r.maxEntries,n)}catch{}}function vt(e){return/"_error"\s*:/u.test(e)||/"type"\s*:\s*"error"/u.test(e)}function Lt(e){return new Response(e.body,{status:e.status,statusText:e.statusText,headers:new Headers(e.headers)})}function Nt(e){const t=new Headers(e),n=[];return t.forEach((r,o)=>{const i=o.toLowerCase();i!=="authorization"&&i!=="cookie"&&n.push([i,r])}),n.sort(([r],[o])=>r.localeCompare(o))}function Dt(e){const t=[];return e.forEach((n,r)=>{const o=r.toLowerCase();o!=="set-cookie"&&t.push([o,n])}),t.sort(([n],[r])=>n.localeCompare(r))}function ke(e){for(;E.size>e;){const t=[...E.values()].sort((n,r)=>n.lastAccessedAt-r.lastAccessedAt)[0];if(!t)break;E.delete(t.key)}}async function $(){return typeof indexedDB>"u"?null:(Ae??=new Promise(e=>{const t=indexedDB.open(jt,Ct);t.onupgradeneeded=()=>{const n=t.result;n.objectStoreNames.contains(_)||n.createObjectStore(_,{keyPath:"key"}).createIndex("lastAccessedAt","lastAccessedAt",{unique:!1})},t.onsuccess=()=>e(t.result),t.onerror=()=>e(null),t.onblocked=()=>e(null)}),Ae)}async function $t(e){const t=await $();return t?new Promise(n=>{const r=t.transaction(_,"readonly"),o=r.objectStore(_).get(e);o.onsuccess=()=>n(o.result??null),o.onerror=()=>n(null),r.onerror=()=>n(null)}):null}async function W(e){const t=await $();t&&await new Promise(n=>{const r=t.transaction(_,"readwrite");r.objectStore(_).put(e),r.oncomplete=()=>n(),r.onerror=()=>n(),r.onabort=()=>n()})}async function Ft(e){const t=await $();t&&await new Promise(n=>{const r=t.transaction(_,"readwrite");r.objectStore(_).delete(e),r.oncomplete=()=>n(),r.onerror=()=>n(),r.onabort=()=>n()})}async function qt(e,t){const n=await $();n&&await new Promise(r=>{const o=n.transaction(_,"readwrite"),i=o.objectStore(_),a=[],c=i.openCursor();c.onsuccess=()=>{const y=c.result;if(!y){const m=a.filter(s=>s.expiresAt<=t),d=a.filter(s=>s.expiresAt>t).sort((s,u)=>s.lastAccessedAt-u.lastAccessedAt).slice(0,Math.max(0,a.length-m.length-e));for(const s of[...m,...d])i.delete(s.key);return}a.push(y.value),y.continue()},c.onerror=()=>r(),o.oncomplete=()=>r(),o.onerror=()=>r(),o.onabort=()=>r()})}function Kt(e){return JSON.stringify(V(e))}function V(e){return Array.isArray(e)?e.map(V):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>[t,V(n)]))}function zt(e){let t=14695981039346656037n;const n=1099511628211n;for(let r=0;r<e.length;r+=1)t^=BigInt(e.charCodeAt(r)),t=BigInt.asUintN(64,t*n);return t.toString(16).padStart(16,"0")}function Jt(e){return typeof TextEncoder<"u"?new TextEncoder().encode(e).byteLength:e.length}async function Ht({beUrl:e,accountId:t,devJwtSecret:n,tokenBrokerUrl:r,tokenBrokerAudience:o,jwtProvider:i,parentUrl:a,op:c,input:y,cacheTtlS:m,cacheKey:d,browserCache:s,signal:u}){const l=await(i||H({accountId:t,devJwtSecret:n,tokenBrokerUrl:r,tokenBrokerAudience:o}))({...u?{signal:u}:{},...a?{parentUrl:a}:{}}),{opDomain:p,opName:g}=Gt(c,t),h={method:"POST",headers:{authorization:`Bearer ${l}`,"content-type":"application/json",accept:"application/x-ndjson"},body:JSON.stringify({op_domain:p,op_name:g,op_payload:y,...m!==void 0?{cache_ttl_s:m}:{},...d!==void 0?{cache_key:d}:{}}),...u?{signal:u}:{}},A=`${String(e).replace(/\/+$/u,"")}/v1/execute`,w=s===!1?await fetch(A,h):await Ot(A,h,typeof s=="object"?s:{});if(!w.ok)throw we(w.status,await Vt(w));return Yt(w)}function Gt(e,t){if(!e||e.startsWith("-")||e.endsWith("-"))throw new Error(`Invalid BE op name: ${e}`);return{opDomain:Wt(t),opName:e}}function Wt(e){return e.replace(/-agentic$/u,"")}async function Vt(e){try{return await e.json()}catch{return{error:{code:e.statusText||"internal"}}}}async function Yt(e){const t=e.body?.getReader();if(!t)throw new Error("BE response body is not readable.");const n=new TextDecoder;let r="";const o={};for(;;){const{value:a,done:c}=await t.read();if(c)break;r+=n.decode(a,{stream:!0});let y=r.indexOf(`
2
- `);for(;y>=0;){const m=r.slice(0,y).trim();r=r.slice(y+1),m&&_e(JSON.parse(m),o),y=r.indexOf(`
3
- `)}}const i=r.trim();return i&&_e(JSON.parse(i),o),o}function _e(e,t){if(e._error)throw G(e._error);if(!e._end)for(const[n,r]of Object.entries(e)){if(Object.prototype.hasOwnProperty.call(t,n))throw new D("op_failed",`BE streamed duplicate field "${n}".`,{source:"be",sourceCode:"schema_mismatch"});t[n]=r}}function Qt(e={}){return{type:"metadata",...e}}function Ee(e,t=!1,n={}){return{type:"text_chunk",content:e,final:t,...n}}function Xt(e){return{type:"ui_spec",...e}}function Zt(e){return{type:"action",action:e}}function Te(e,t){return{type:"error",code:e,message:t}}function Y(){return{type:"done"}}function xe(e,t){return e[t?.type||t?.action?.type||"inputText"]||e.inputText}async function en({request:e,accountModule:t,contextStore:n,beClient:r,toolBridge:o,emit:i,rpc:a,signal:c}){const y=performance.now(),m=await n.load(e),d=m.thread.id,s=pn(e);n.appendUserMessage(d,s);const u=xe(t.flows,e);if(!u)return i(Te("unknown_action",`No agent flow for request type ${e?.type||"inputText"}`)),i(Y()),{steps:0,productSkusEmitted:[]};const l={request:e,context:n.patch(d,{})||m,bag:{},accountConfig:t.accountConfig||{},threadId:d,steps:0,productSkusEmitted:new Set,committed:!1},p={contextStore:n,beClient:r,toolBridge:o,emit:i,rpc:a,adapters:t.adapters||{},...c?{signal:c}:{}};return await B(u,l,p),l.committed||await Q(l,p),await a("beacon.send",{type:"turnSummary",threadId:d,sessionId:e?.session_id||e?.sessionId||d,accountId:t.accountId||l.context.meta.accountId,steps:l.steps,totalLatencyMs:I(y),productSkusEmitted:[...l.productSkusEmitted]}),{steps:l.steps,productSkusEmitted:[...l.productSkusEmitted]}}async function B(e,t,n){for(const r of e){if(n.signal?.aborted||t.committed)return;t.steps+=1,await tn(r,t,n),t.context=n.contextStore.patch(t.threadId,{})||t.context}}async function tn(e,t,n){const r=X(t);if(e.kind==="be_op"){await nn(e,t,n,r);return}if(e.kind==="tool"){await rn(e,t,n,r);return}if(e.kind==="adapter"){await on(e,t,n,r);return}if(e.kind==="emit"){an(e,t,n);return}if(e.kind==="patch"){cn(e,t,n);return}if(e.kind==="branch"){await sn(e,t,n,r);return}if(e.kind==="parallel"){await un(e,t,n);return}if(e.kind==="refusal"){await ln(e,t,n,r);return}e.kind==="commit"&&await dn(e,t,n)}async function nn(e,t,n,r){const o=performance.now();let i;const a=j(e.cacheTtlS,r),c=j(e.cacheKey,r),y=j(e.browserCache,r);try{i=await n.beClient.invoke({op:e.op,input:j(e.input,r),...a!==void 0?{cacheTtlS:a}:{},...c!==void 0?{cacheKey:c}:{},...y!==void 0?{browserCache:y}:{},...n.signal?{signal:n.signal}:{}})}catch(d){const s=d,u=String(s?.sourceCode||s?.code||"unknown"),l={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:I(o),errorCode:u};if(await n.rpc("beacon.send",l),e.onError){e.errorOut&&(t.bag[e.errorOut]=d),await B(e.onError,t,n);return}throw d}e.out&&(t.bag[e.out]=i),F(e,i,t,n.contextStore);const m={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:I(o)};await n.rpc("beacon.send",m)}async function rn(e,t,n,r){const o=performance.now();try{const i=await n.toolBridge.invoke(e.name,j(e.input,r));e.out&&(t.bag[e.out]=i),F(e,i,t,n.contextStore),await n.rpc("beacon.send",{type:"agentTool",threadId:t.threadId,sessionId:Pe(t),accountId:t.context.meta.accountId,tool:e.name,status:"ok",latencyMs:I(o)})}catch(i){const a=i;if(await n.rpc("beacon.send",{type:"agentTool",threadId:t.threadId,sessionId:Pe(t),accountId:t.context.meta.accountId,tool:e.name,status:"error",latencyMs:I(o),errorCode:String(a?.code||a?.name||"unknown")}),e.onError){e.errorOut&&(t.bag[e.errorOut]=i),await B(e.onError,t,n);return}throw i}}async function on(e,t,n,r){const o=n.adapters?.[e.name];if(typeof o!="function")throw new Error(`Unknown flow adapter: ${e.name}`);const i=await o(j(e.input,r),r);e.out&&(t.bag[e.out]=i),F(e,i,t,n.contextStore)}function an(e,t,n){const r=e.build(X(t));gn(r,t.productSkusEmitted),n.emit(r)}function cn(e,t,n){F(e,void 0,t,n.contextStore)}async function sn(e,t,n,r){const o=String(j(e.on,r)||"default");await B(e.cases[o]||e.cases.default||[],t,n)}async function un(e,t,n){const r=e.steps.map(a=>{const c={...t,context:fn(t.context),bag:{...t.bag},productSkusEmitted:t.productSkusEmitted,committed:!1};return B(a,c,{...n,emit:y=>{y.type!=="done"&&n.emit(y)},contextStore:mn(c)}).then(()=>c)}),o=await Promise.all(r),i=e.merge||{};for(const a of o){for(const c of i.bag||[])Object.prototype.hasOwnProperty.call(a.bag,c)&&(t.bag[c]=a.bag[c]);if(i.panel?.length){const c=je(a.context.panel,i.panel);Object.keys(c).length&&(t.context=n.contextStore.patch(t.threadId,{panel:c})||t.context)}if(i.threadExtensions?.length){const c=je(a.context.thread.extensions,i.threadExtensions);Object.keys(c).length&&(t.context=n.contextStore.patch(t.threadId,{thread:{...t.context.thread,extensions:c}})||t.context)}}}async function ln(e,t,n,r){n.emit(Ee(j(e.message,r),!0)),await Q(t,n)}async function dn(e,t,n){await Q(t,n)}async function Q(e,{contextStore:t,emit:n}){e.committed||(e.context=await t.commit(e.threadId)||e.context,e.committed=!0,n(Y()))}function F(e,t,n,r){if(typeof e.patch!="function")return;const o=e.patch(n.context,t,X(n));o&&(n.context=r.patch(n.threadId,o)||n.context)}function X(e){return{request:e.request,context:e.context,bag:e.bag,accountConfig:e.accountConfig}}function Pe(e){return e.request?.session_id||e.request?.sessionId||e.threadId}function fn(e){return typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e))}function je(e,t){const n={};for(const r of t)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function mn(e){return{async load(){return e.context},patch(t,n){return e.context=yn(e.context,n),e.context},appendUserMessage(){return e.context},async commit(){return e.context}}}function yn(e,t){return!t||typeof t!="object"?e:{...e,...t,panel:{...e.panel||{},...t.panel||{}},thread:{...e.thread||{},...t.thread||{},extensions:{...e.thread?.extensions||{},...t.thread?.extensions||{}}},meta:{...e.meta||{},...t.meta||{}},messages:Array.isArray(t.messages)?t.messages.slice(-50):e.messages}}function j(e,t){return typeof e=="function"?e(t):e}function pn(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}return typeof e?.action?.payload=="string"?e.action.payload:typeof e?.action?.title=="string"?e.action.title:""}function gn(e,t){const n=e,r=n.spec,o=Array.isArray(r?.items)?r.items:void 0,i=Array.isArray(n.items)?n.items:void 0,a=o||i;if(Array.isArray(a)){for(const c of a)if(c&&typeof c=="object"){const y=c.sku;typeof y=="string"&&t.add(y)}}}function hn(e){return{invoke(t,n){return e("tool.invoke",{name:t,input:n})}}}var wn=512,bn=.74;function Ce({accountId:e,worker:t,beUrl:n,devJwtSecret:r,tokenBrokerUrl:o,tokenBrokerAudience:i,defaultLocale:a,tools:c={},beacon:y}){let m=1;const d=new Map;return ct({worker:t,tools:c,beacon:s=>y?.({...s,accountId:s.accountId||e}),memory:sessionStorage}),t.addEventListener("message",s=>{const u=s.data||{},l=typeof u.id=="number"?u.id:null;if(l==null)return;const p=d.get(l);if(p){if(u.type==="event"&&u.event){Z(p,u.event);return}if(u.type==="error"){p.onError(new Error(u.message||"Agent worker failed")),d.delete(l);return}u.type==="end"&&d.delete(l)}}),(s,u,l,p)=>{const g=m++;d.set(g,u);const h=()=>{d.delete(g),t.postMessage({id:g,type:"abort"})},A=w=>{if(l.aborted){h();return}t.postMessage({id:g,type:"invoke",accountId:e,beUrl:n,devJwtSecret:r,tokenBrokerUrl:o,tokenBrokerAudience:i,defaultLocale:a,request:w,parentUrl:window.location.href})};if(l.aborted){h();return}if(l.addEventListener("abort",h,{once:!0}),p){Oe(s,p).then(A).catch(w=>{d.delete(g),u.onError(w instanceof Error?w:new Error("Failed to read image attachment"))});return}A(s)}}function Ie({accountId:e,accountModule:t,beUrl:n,devJwtSecret:r,tokenBrokerUrl:o,tokenBrokerAudience:i,defaultLocale:a,tools:c={},beacon:y}){let m=null;const d=Sn({accountId:e,tools:c,beacon:y}),s=hn(d),u=H({accountId:e,...r?{devJwtSecret:r}:{},...o?{tokenBrokerUrl:o}:{},...i?{tokenBrokerAudience:i}:{}});return async(l,p,g,h)=>{const A=await Oe(l||{},h);m||=new me({accountId:e,locale:A?.locale||a,parentUrl:window.location.href,rpc:d,persistentPanelKeys:t.contextPersistence?.panelKeys,panelKeyLimits:t.contextPersistence?.panelKeyLimits});try{await en({request:A,accountModule:{...t,accountId:e},contextStore:m,beClient:{invoke({op:w,input:se,signal:it,cacheTtlS:ro,cacheKey:oo,browserCache:io}){return Ht({beUrl:n,accountId:e,jwtProvider:u,parentUrl:window.location.href,op:w,input:se,cacheTtlS:ro,cacheKey:oo,browserCache:io,...it?{signal:it}:{}})}},toolBridge:s,emit:w=>Z(p,w),rpc:d,signal:g})}catch(w){g?.aborted||(Z(p,be(w)),p.onDone())}}}function Sn({accountId:e,tools:t,beacon:n}){const r=o=>n?.({...o,accountId:o.accountId||e});return((o,i)=>ue(o,i,{tools:t,beacon:r,memory:sessionStorage}))}async function Oe(e,t){if(!t||!t.type?.startsWith("image/"))return e;const n=await _n(t),r={...An(e.payload??e.action?.payload),image_data_url:n.dataUrl,image_mime:n.mime};return{...e,payload:r,...e.action?{action:{...e.action,payload:r}}:{}}}function An(e){return kn(e)?{...e}:typeof e=="string"?{text:e}:{}}function kn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function _n(e){const t=await En(e);return t||{dataUrl:await Re(e),mime:e.type}}async function En(e){if(typeof createImageBitmap!="function"||typeof document>"u")return null;let t=null;try{t=await createImageBitmap(e);const n=Math.min(1,wn/Math.max(t.width,t.height)),r=Math.max(1,Math.round(t.width*n)),o=Math.max(1,Math.round(t.height*n)),i=document.createElement("canvas");i.width=r,i.height=o;const a=i.getContext("2d");if(!a)return null;a.drawImage(t,0,0,r,o);const c=await new Promise(y=>i.toBlob(y,"image/jpeg",bn));return c?{dataUrl:await Re(c),mime:c.type||"image/jpeg"}:null}catch{return null}finally{t?.close()}}async function Re(e){const t=new Uint8Array(await e.arrayBuffer());let n="";const r=32768;for(let o=0;o<t.length;o+=r)n+=String.fromCharCode(...t.subarray(o,o+r));return`data:${e.type};base64,${btoa(n)}`}function Z(e,t){switch(t?.type){case"text_chunk":{const n=t;e.onTextChunk(n.content||"",n.final===!0,n);break}case"ui_spec":{const n=t;e.onUISpec(n.spec,n.widget,n.panelHint,n.clearPanel===!0);break}case"action":e.onAction(t);break;case"metadata":e.onMetadata(t);break;case"error":e.onError(Tn(t));break;case"done":e.onDone();break;default:break}}function Tn(e){const t=new Error(e.message||e.code||"Agent error");return e.code&&(t.code=e.code),t}function Ue(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function q(e){const t=Ue(e);if(!t)return null;const n=O(t.sku,t.SKU);if(!n)return null;const r={sku:n,name:O(t.name,t.title,t.short_name,n)||n,url:O(t.url)||""},o=Array.isArray(t.images)?t.images:void 0,i=O(t.imageUrl,t.image_url,t.image,o?.[0]);i&&(r.imageUrl=i),o&&o.length>1&&(r.images=o.filter(g=>!!g).map(String));const a=v(t.price_discounted),c=v(t.price),y=a||c;y>0&&(r.price=String(y));const m=a>0?c:0;m>0&&(r.originalPrice=String(m));const d=O(t.brand);d&&(r.brand=d);const s=v(t.rating);s>0&&(r.rating=s);const u=v(t.review_count)||v(t.reviewCount);u>0&&(r.reviewCount=u);const l=O(t.cart_code,t.cartCode);l&&(r.cartCode=l),typeof t.in_stock=="boolean"&&(r.inStock=t.in_stock),typeof t.inStock=="boolean"&&(r.inStock=t.inStock);const p=t.category_names;return Array.isArray(p)&&(r.categoryNames=p.map(String)),r}function K(e){const t=Ue(e);if(!t)return e;const n=t.category_names,r=Array.isArray(n)?n: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:r?.[r.length-1]??void 0,category_names:r?r.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 c of Object.keys(a))a[c]===void 0&&delete a[c];return a}function xn(e){return Array.isArray(e)?e.map(K).filter(t=>!!t):[]}function O(...e){for(const t of e)if(typeof t=="string"&&t.trim())return t.trim();return""}function v(e){const t=Number(e);return Number.isFinite(t)?t:0}function Me(e){return Array.isArray(e)?e.map(String).filter(Boolean):typeof e=="string"&&e?[e]:[]}function Pn(e,t,n={}){return`${e}:${n.version||"v2"}:${R(t)}`}function jn(e,t={}){return Be(e).map(n=>ve(typeof n=="string"?n:n.sku,t.locale)).filter(Boolean).filter((n,r,o)=>o.indexOf(n)===r).sort((n,r)=>ee(n,r,t.locale)).slice(0,t.limit||16).join(",")}function Cn(e,t={}){return R(Be(e).map(n=>On(n,t)).filter(n=>!!n).sort((n,r)=>ee(String(n.sku||n.name||""),String(r.sku||r.name||""),t.locale)).slice(0,t.limit||16))}function In(e,t){return C(e,t)}function R(e){let t=2166136261;const n=Rn(e);for(let r=0;r<n.length;r+=1)t^=n.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(36)}function On(e,t){if(!e||typeof e!="object"||Array.isArray(e))return null;const n=e,r=t.mapProduct?.(n);if(r)return L(r);const o=K(n);return o&&typeof o=="object"&&!Array.isArray(o)?L(Un(o,t)):null}function Be(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"||!!(t&&typeof t=="object"&&!Array.isArray(t))):[]}function Rn(e){return JSON.stringify(L(e))}function L(e){return Array.isArray(e)?e.map(L):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>[t,L(n)]))}function Un(e,t){return{sku:ve(e.sku,t.locale),name:C(e.name,t.locale),url:C(e.url,t.locale),price:e.price,currency:C(e.currency,t.locale),category:C(e.category,t.locale),category_names:Mn(e.category_names,t.locale,16),image:C(e.image,t.locale),in_stock:e.in_stock,rating:e.rating,review_count:e.review_count}}function ve(e,t){return C(e,t).toUpperCase()}function C(e,t){return typeof e=="string"?e.trim().replace(/\s+/gu," ").toLocaleLowerCase(t||void 0):""}function ee(e,t,n){return e.localeCompare(t,n,{numeric:!0})}function Mn(e,t,n){return Array.isArray(e)?e.map(r=>C(r,t)).filter(Boolean).sort((r,o)=>ee(r,o,t)).slice(0,n):void 0}var Bn="entries",vn=1,Ln={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."},Le=new Map;function te(){return Date.now()}function ne(e){return e?.expiresAt!=null&&e.expiresAt<=te()}function re(e,t){return{value:e,createdAt:te(),expiresAt:t?te()+t:null}}function Nn(e,t,n){try{const r=e.getItem(`${t}${n}`);if(!r)return null;const o=JSON.parse(r);return ne(o)?(e.removeItem(`${t}${n}`),null):o.value}catch{return null}}function Dn(e,t,n,r,o){try{return e.setItem(`${t}${n}`,JSON.stringify(re(r,o))),!0}catch{return!1}}function $n(e,t,n){try{e.removeItem(`${t}${n}`)}catch{}}function Ne(e){try{return window[e]}catch{return null}}function De(e,t){return e?{get:n=>Nn(e,t,n),set:(n,r,o={})=>Dn(e,t,n,r,o.ttlMs),remove:n=>$n(e,t,n)}:{get:()=>null,set:()=>!1,remove:()=>{}}}function Fn(e,t){const n=t.dbName||`gengage-${e}`,r=t.dbStore||Bn,o=t.dbVersion||vn,i=new Map;let a=null;const c=()=>"indexedDB"in window?a||(a=new Promise(s=>{const u=indexedDB.open(n,o);u.onupgradeneeded=()=>{u.result.createObjectStore(r,{keyPath:"key"})},u.onsuccess=()=>s(u.result),u.onerror=()=>s(null),u.onblocked=()=>s(null)}),a):Promise.resolve(null);return{volatileEntries:i,idbGet:async s=>{const u=await c();return u?new Promise(l=>{const p=u.transaction(r,"readwrite").objectStore(r),g=p.get(s);g.onsuccess=()=>{const h=g.result;if(!h||ne(h)){h&&p.delete(s),l(null);return}l(h.value)},g.onerror=()=>l(null)}):null},idbSet:async(s,u,l={})=>{const p=await c();return p?new Promise(g=>{const h=p.transaction(r,"readwrite");h.oncomplete=()=>g(!0),h.onerror=()=>g(!1),h.objectStore(r).put({key:s,...re(u,l.ttlMs)})}):!1},idbRemove:async s=>{const u=await c();u&&u.transaction(r,"readwrite").objectStore(r).delete(s)}}}function oe(e,t={}){const n=window,r=n.gengage||(n.gengage={}),o=r.memory||(r.memory={}),i=o[e];if(i)return i;const a=Le.get(e)||Fn(e,t);Le.set(e,a);const c=t.sessionPrefix||`gengage:${e}:session:`,y=t.localPrefix||`gengage:${e}:local:`,d={get:l=>{const p=a.volatileEntries.get(l);return p?ne(p)?(a.volatileEntries.delete(l),null):p.value:null},set:(l,p,g={})=>(a.volatileEntries.set(l,re(p,g.ttlMs)),!0),remove:l=>{a.volatileEntries.delete(l)},clear:()=>a.volatileEntries.clear()},s={get:a.idbGet,set:a.idbSet,remove:a.idbRemove},u={accountId:e,volatile:d,session:De(Ne("sessionStorage"),c),local:De(Ne("localStorage"),y),indexedDb:s,stableKey:R,policy:{...Ln,...t.policy||{}}};o[e]=u;for(const l of t.aliases||[])o[l]=u;return u}var z="__gengageAgentFetchBridge",qn=1e3*60*60*24*14;function Kn({accountId:e,streamTransport:t,endpoints:n={},endpointCache:r}){if(!e)throw new Error("accountId is required.");if(typeof t!="function")throw new Error("streamTransport is required.");const o=zn(),i=`https://gengage-injector.invalid/${encodeURIComponent(e)}`,a=new Set,c=r?Yn({accountId:e,endpointCache:r,fetchImpl:o.originalFetch}):void 0,y=m=>{const d=`${i}/chat/${m}`;a.add(d);const s=n[m],u={streamTransport:t,endpoint:m};s&&(u.endpointHandler=s),c&&(u.endpointCache=c),o.routes.set(d,u)};y("process_action");for(const m of Object.keys(n))m!=="process_action"&&y(m);return{middlewareUrl:i,stop(){for(const m of a)o.routes.delete(m);Jn(o)}}}function zn(){const e=window,t=e[z];if(t)return t;const n=e.fetch.bind(e),r={routes:new Map,originalFetch:n,installedFetch:n};return r.installedFetch=(o,i)=>{const a=$e(o),c=r.routes.get(a);return c?Gn(c,o,i):n(o,i)},e.fetch=r.installedFetch,e[z]=r,r}function Jn(e){if(e.routes.size>0)return;const t=window;t.fetch===e.installedFetch&&(t.fetch=e.originalFetch),t[z]===e&&delete t[z]}function $e(e){return typeof e=="string"?e:e instanceof URL?e.href:e?.url||""}function Fe(e,t){if(t?.signal)return t.signal;if(typeof Request<"u"&&e instanceof Request)return e.signal}function qe(e,t){return t?.body!==void 0&&t?.body!==null?t.body:typeof Request<"u"&&e instanceof Request?e.clone().text():null}async function Hn(e,t){const n=qe(e,t);if(n instanceof FormData){const o=n.get("request"),i=n.get("attachment");return{request:JSON.parse(String(o||"{}")),...i instanceof File?{attachment:i}:{}}}const r=await Promise.resolve(n);return typeof r=="string"?{request:JSON.parse(r||"{}")}:{request:{}}}async function Gn(e,t,n){if(e.endpoint&&e.endpoint!=="process_action"&&e.endpointHandler){const m=new AbortController,d=Fe(t,n);let s=null;if(d){const u=()=>m.abort();d.aborted&&u(),d.addEventListener("abort",u,{once:!0}),s=()=>d.removeEventListener("abort",u)}try{const u=await Wn(t,n),l={accountId:Vn(t),endpoint:e.endpoint,signal:m.signal},p=Qn(e.endpointCache,e.endpoint,u,l.accountId);if(p){const h=await Xn(e.endpointCache,p,m.signal);if(h)return or(h)}const g=await e.endpointHandler(u,l);return p&&g.ok&&await Zn(e.endpointCache,p,g.clone(),m.signal),g}finally{s?.()}}const r=new TextEncoder,o=new AbortController,i=Fe(t,n);let a=!1,c=null;const y=new ReadableStream({async start(m){const d=l=>{a||m.enqueue(r.encode(`${JSON.stringify(l)}
4
- `))},s=()=>{a||(a=!0,c?.(),m.close())},u=l=>{d({type:"error",code:l?.code||"agent_bridge_error",message:l instanceof Error?l.message:String(l)}),d({type:"done"}),s()};if(i){const l=()=>{o.abort(),a||(a=!0,c?.(),m.error(new DOMException("Aborted","AbortError")))};if(i.aborted){l();return}i.addEventListener("abort",l,{once:!0}),c=()=>i.removeEventListener("abort",l)}try{const{request:l,attachment:p}=await Hn(t,n),g=e.streamTransport(l,{onTextChunk:(h,A,w={})=>d({type:"text_chunk",content:h,final:A===!0,...w}),onUISpec:(h,A,w,se)=>d({type:"ui_spec",spec:h,widget:A,...w?{panelHint:w}:{},...se?{clearPanel:!0}:{}}),onAction:h=>{d(h?.type==="action"?h:{type:"action",action:h})},onMetadata:h=>{d(h?.type==="metadata"?h:{type:"metadata",...h})},onError:u,onDone:()=>{d({type:"done"}),s()}},o.signal,p);sr(g)&&(await g,o.signal.aborted||(d({type:"done"}),s()))}catch(l){o.signal.aborted||u(l)}},cancel(){o.abort(),c?.(),a=!0}});return new Response(y,{status:200,headers:{"Content-Type":"application/x-ndjson"}})}async function Wn(e,t){const n=await Promise.resolve(qe(e,t));return typeof n!="string"||n.trim()===""?{}:JSON.parse(n)}function Vn(e){try{const[t]=new URL($e(e)).pathname.split("/").filter(Boolean);return decodeURIComponent(t||"")}catch{return""}}function Yn({accountId:e,endpointCache:t,fetchImpl:n}){return{accountId:e,beUrl:t.beUrl,...t.parentUrl?{parentUrl:t.parentUrl}:{},ttlMs:t.ttlMs??qn,policies:t.policies,fetchImpl:n,jwtProvider:H({accountId:e,...t.devJwtSecret?{devJwtSecret:t.devJwtSecret}:{},...t.tokenBrokerUrl?{tokenBrokerUrl:t.tokenBrokerUrl}:{},...t.tokenBrokerAudience?{tokenBrokerAudience:t.tokenBrokerAudience}:{},fetchImpl:n})}}function Qn(e,t,n,r){if(!e)return null;const o=e.policies[t];if(!o)return null;const i=o(n,{accountId:r,endpoint:t});return!i?.partition||!i?.key?null:{partition:i.partition,key:i.key,ttlMs:i.ttlMs??e.ttlMs}}async function Xn(e,t,n){const r=He(e.accountId,t),o=await ir(e.accountId,r);if(Je(o))return o;const i=await er(e,t,n);return i?(await Ge(e.accountId,r,i,t.ttlMs),i):null}async function Zn(e,t,n,r){try{const o=await rr(n);if(cr(o.body))return;const i=He(e.accountId,t);await Ge(e.accountId,i,o,t.ttlMs),tr(e,t,o,r)}catch{}}async function er(e,t,n){try{const r=await e.fetchImpl(ze(e.beUrl),{method:"POST",headers:await Ke(e,n),body:JSON.stringify({partition:t.partition,key:t.key}),signal:n});if(!r.ok)return null;const o=await r.json();return o.hit===!0&&Je(o.payload)?o.payload:null}catch{return null}}async function tr(e,t,n,r){try{await e.fetchImpl(ze(e.beUrl),{method:"POST",headers:await Ke(e,r),body:JSON.stringify({partition:t.partition,key:t.key,ttl_s:Math.max(1,Math.ceil(t.ttlMs/1e3)),payload:n}),signal:r})}catch{}}async function Ke(e,t){return{authorization:`Bearer ${await e.jwtProvider({signal:t,parentUrl:e.parentUrl||nr()})}`,"content-type":"application/json",accept:"application/json"}}function nr(){try{return window.location?.href||""}catch{return""}}function ze(e){return`${String(e).replace(/\/+$/u,"")}/v1/cache`}async function rr(e){return{status:e.status,statusText:e.statusText,headers:[...e.headers.entries()].filter(([t])=>ar(t)),body:await e.text()}}function or(e){return new Response(e.body,{status:e.status,statusText:e.statusText,headers:new Headers(e.headers)})}function Je(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 He(e,t){return`endpoint-response:${R({accountId:e,partition:t.partition,key:t.key})}`}async function ir(e,t){const n=oe(e);return n.volatile.get(t)||await n.indexedDb.get(t)||n.local.get(t)}async function Ge(e,t,n,r){const o=oe(e);o.volatile.set(t,n,{ttlMs:r}),await o.indexedDb.set(t,n,{ttlMs:r})||o.local.set(t,n,{ttlMs:r})}function ar(e){return["content-type","cache-control"].includes(e.toLowerCase())}function cr(e){return/"_error"\s*:/u.test(e)||/"type"\s*:\s*"error"/u.test(e)}function sr(e){return e!==null&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"}function ur({accountId:e,beUrl:t,devJwtSecret:n,tokenBrokerUrl:r,tokenBrokerAudience:o,workerUrl:i,defaultLocale:a="en-GB",accountModule:c,tools:y={},beacon:m,allowBlobWorker:d=!1}){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 s=window,u=s.GengageAssistantInjector||(s.GengageAssistantInjector={}),l=u[e]||(u[e]={});if(l.agentController)return l.agentController;const p=ie(i)||d?We(i,`gengage-${e}-agent`,{allowBlobWorker:d}):null;p||m?.({type:"agentRuntime",accountId:e,transport:"main-thread",reason:"cross-origin-worker-url",workerUrl:i}),l.streamTransport=p?Ce({accountId:e,worker:p.worker,beUrl:t,...n?{devJwtSecret:n}:{},...r?{tokenBrokerUrl:r}:{},...o?{tokenBrokerAudience:o}:{},defaultLocale:a,tools:y,...m?{beacon:m}:{}}):Ie({accountId:e,accountModule:c,beUrl:t,...n?{devJwtSecret:n}:{},...r?{tokenBrokerUrl:r}:{},...o?{tokenBrokerAudience:o}:{},defaultLocale:a,tools:y,...m?{beacon:m}:{}});const g={type:"agent",stop(){delete l.streamTransport,p?.worker.terminate(),p?.cleanup(),delete l.agentController},diagnostics(){return{accountId:e,beUrl:t,workerUrl:i,mounted:!0,transport:p?"worker":"main-thread",transportReason:p?"module-worker":"cross-origin-worker-url",flows:Object.keys(c?.flows||{})}}};return l.agentController=g,g}function ie(e){const t=new URL(e,window.location.href);return t.origin===window.location.origin||t.protocol==="blob:"}function We(e,t,n={}){const r=new URL(e,window.location.href);if(ie(e))return{worker:new Worker(r.href,{type:"module",name:t}),cleanup(){}};if(!n.allowBlobWorker)throw new Error("Cross-origin agent workers require allowBlobWorker=true or a same-origin workerUrl.");const o=new Blob([`import ${JSON.stringify(r.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 lr(e,t={}){if(!Array.isArray(e))return[];const n=t.maxItems??8,r=t.maxFeatures??8;return e.map(o=>dr(o,t.defaultBrand,r)).filter(o=>!!o).slice(0,n)}function dr(e,t,n){if(!e||typeof e!="object"||Array.isArray(e))return null;const r=e,o=K(r);return o?yr({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:r.brand||t,features:fr(r.features,n),specs:mr(r.specs,n),in_stock:o.in_stock}):null}function fr(e,t){return Array.isArray(e)?e.filter(Boolean).slice(0,t):void 0}function mr(e,t){if(!(!e||typeof e!="object"||Array.isArray(e)))return Object.fromEntries(Object.entries(e).filter(([,n])=>n!=null).slice(0,t))}function yr(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!=null))}function ae(e){if(!e||typeof e!="object"||Array.isArray(e))return{};const t=e,n=Array.isArray(t.rows)?t.rows:[];return{...t,rows:n.map(gr).filter(Boolean)}}function Ve(e,t){const n=Array.isArray(e)?e.filter(c=>!!(c&&typeof c=="object"&&!Array.isArray(c))):[],r=ae(t),o=Array.isArray(r.columns)?r.columns.map(String):[];if(!o.length)return n;const i=new Map(n.map(c=>[String(c.sku||c.id||""),c])),a=o.map(c=>i.get(c)).filter(c=>!!c);return a.length?a:n}function pr(e,t){const n=ae(e?.table),r=Ve(t,n);return{...e||{},table:n,products:r,multiple_product_details:r}}function gr(e){return!e||typeof e!="object"||Array.isArray(e)?null:Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function hr(e=[]){const t={},n=[];return(Array.isArray(e)?e.map(q).filter(r=>!!r):[]).forEach((r,o)=>{const i=`product-${o.toString()}`;n.push(i);const a={sku:r.sku,product:r};t[i]={type:"ProductCard",props:{product:r,index:o,action:{title:r.name,type:"launchSingleProduct",payload:a}}}}),t.root={type:"ProductGrid",props:{layout:"grid"},children:n},{widget:"chat",panelHint:"panel",spec:{root:"root",elements:t}}}function wr(e){return{widget:"chat",panelHint:"panel",spec:{root:"root",elements:{root:{type:"ProductDetailsPanel",props:{product:q(e)||e||{}}}}}}}function br(e={}){const t=(e.multiple_product_details||e.products||[]).map(q).filter(r=>!!r),n=e.table||{};return{widget:"chat",panelHint:"panel",spec:{root:"root",elements:{root:{type:"ComparisonTable",props:{products:t,recommended:t.find(r=>r.sku===e.recommended_choice_sku)||t[0],attributes:Object.entries(n).map(([r,o])=>({label:r,values:Array.isArray(o)?o.map(String):[String(o??"")]})),highlights:Me(e.key_differences),specialCases:Me(e.special_considerations),recommendedText:e.recommended_choice,productActions:Object.fromEntries(t.map(r=>[r.sku,{title:r.name,type:"launchSingleProduct",payload:{sku:r.sku,product:r}}]))}}}}}}function Sr(e=[]){return{widget:"chat",panelHint:"inline",spec:{root:"root",elements:{root:{type:"ActionButtons",props:{buttons:(Array.isArray(e)?e:[]).map(t=>{const n=t.label||t.title||t.shortName||"",r=t.action||t.requestDetails||t.request_details;return!n||!r?.type?null:{label:n,action:{title:n,type:r.type,...r.payload!==void 0?{payload:r.payload}:{}}}}).filter(t=>!!t)}}}}}}function Ar(e){return Object.freeze([...e])}function Ye(e,t,n="v1"){return`endpoint:${n}:${R({endpoint:e,request:t})}`}function kr(e){const t=e.version||"v1",n=r=>o=>({partition:`${e.partitionPrefix}/${r}`,key:Ye(r,o,t),...e.ttlMs?{ttlMs:e.ttlMs}:{}});return{launcher_action:n("launcher_action"),similar_products:n("similar_products"),product_groupings:n("product_groupings")}}function _r(e){return{...e}}function Er(e,t={}){return new Response(e.map(n=>JSON.stringify(n)).join(`
1
+ (function(d){Object.defineProperty(d,Symbol.toStringTag,{value:"Module"});var lo=120*1e3,fo="gengage-agentic-ref";function or({namespace:e=fo,ttlMs:t=lo,maxEntries:r=100}={}){const n=new Map;async function o(u,l={}){c();const f=po(),g=l.kind||"pageRef",p={kind:g,value:u,expiresAt:Date.now()+(l.ttlMs||t)};for(n.set(f,p);n.size>r;)n.delete(n.keys().next().value);return await mo(e,f,p),{kind:g,id:f}}async function i(u){const l=typeof u=="string"?u:u?.id;if(!l)return;const f=n.get(l)||await go(e,l);if(f){if(f.expiresAt<=Date.now()){n.delete(l),await ar(e,l);return}return n.set(l,f),f.value}}async function a(u){const l=typeof u=="string"?u:u?.id;l&&(n.delete(l),await ar(e,l))}async function s(u){if(ir(u))return i(u);if(Array.isArray(u))return Promise.all(u.map(f=>s(f)));if(!u||typeof u!="object")return u;const l=await Promise.all(Object.entries(u).map(async([f,g])=>[f,await s(g)]));return Object.fromEntries(l)}function c(){const u=Date.now();for(const[l,f]of n.entries())f.expiresAt<=u&&n.delete(l)}return{put:o,get:i,delete:a,materialize:s,cleanup:c}}function ir(e){return!!(e&&typeof e=="object"&&typeof e.kind=="string"&&typeof e.id=="string")}function po(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}async function mo(e,t,r){const n=await Qe(e);n&&(await Te(n.transaction("refs","readwrite").objectStore("refs").put(r,t)),n.close())}async function go(e,t){const r=await Qe(e);if(!r)return;const n=await Te(r.transaction("refs","readonly").objectStore("refs").get(t));return r.close(),n}async function ar(e,t){const r=await Qe(e);r&&(await Te(r.transaction("refs","readwrite").objectStore("refs").delete(t)),r.close())}async function Qe(e){if(!globalThis.indexedDB)return null;try{const t=globalThis.indexedDB.open(e,1);return t.onupgradeneeded=()=>{t.result.createObjectStore("refs")},await Te(t)}catch{return null}}function Te(e){return new Promise((t,r)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>r(e.error)})}function yo(e){return!!e&&typeof e=="object"&&e.type==="rpc.req"}function ho({worker:e,tools:t={},beacon:r,confirmation:n,memory:o=et(),refStore:i}){e.addEventListener("message",a=>{const s=a.data;yo(s)&&bo(e,s,{tools:t,beacon:r,confirmation:n,memory:o,refStore:i})})}async function bo(e,t,r){try{const n=await cr(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 Xe=new Map,sr=null;function et(){try{if(typeof sessionStorage<"u")return sessionStorage}catch{}return{getItem:e=>Xe.get(e)??null,setItem:(e,t)=>{Xe.set(e,t)},removeItem:e=>{Xe.delete(e)}}}function wo(){return sr||=or(),sr}function ko(e){if(e&&typeof e=="object"&&typeof e.name=="string")return e;throw new Error("tool.invoke requires { name, input }")}function So(e){if(e&&typeof e=="object"&&e.key!==void 0)return e;throw new Error("memory.get requires { key }")}function vo(e){if(e&&typeof e=="object"&&e.key!==void 0)return e;throw new Error("memory.set requires { key }")}function _o(e){if(e&&typeof e=="object"&&e.key!==void 0)return e;throw new Error("memory.remove requires { key }")}function Ao(e){return!e||typeof e!="object"?{value:e}:e}function xo(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 tt(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 rt(e){return typeof e.getItem=="function"&&typeof e.setItem=="function"}function nt(e){return typeof e.get=="function"&&typeof e.set=="function"}function ot(e){return typeof e.accountId=="string"&&!!e.session&&!!e.indexedDb}function To(e){const t=e.options?.ttlMs??e.ttlMs;return typeof t=="number"&&Number.isFinite(t)&&t>0?{ttlMs:t}:void 0}async function Eo(e,t,r){if(rt(e)){const n=e.getItem(r);if(!n)return null;try{return JSON.parse(n)}catch{return e.removeItem?.(r),null}}return nt(e)&&!ot(e)?await e.get(t,r)??null:await e[t].get(r)??null}async function Co(e,t,r,n,o){return rt(e)?(e.setItem(r,JSON.stringify(n??null)),!0):nt(e)&&!ot(e)?await e.set(t,r,n??null,o)!==!1:await e[t].set(r,n??null,o)!==!1}async function Po(e,t,r){return rt(e)?(e.removeItem?.(r),!0):nt(e)&&!ot(e)?e.remove?(await e.remove(t,r),!0):!1:(await e[t].remove(r),!0)}async function cr(e,t,{tools:r,beacon:n,confirmation:o,memory:i,refStore:a}){if(e==="tool.invoke"){const{name:s,input:c}=ko(t),u=r[s];if(typeof u!="function")throw new Error(`Unknown tool: ${s}`);return u(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}=So(t);return Eo(i,tt(c),String(s))}if(e==="memory.set"){const s=vo(t);return{ok:await Co(i,tt(s.tier),String(s.key),s.value,To(s))}}if(e==="memory.remove"){const{key:s,tier:c}=_o(t);return{ok:await Po(i,tt(c),String(s))}}if(e==="ref.put"){const s=Ee({tools:r,beacon:n,confirmation:o,memory:i,refStore:a}),c=Ao(t);return s.put(c.value,xo(c))}if(e==="ref.get")return Ee({tools:r,beacon:n,confirmation:o,memory:i,refStore:a}).get(t);if(e==="ref.materialize")return Ee({tools:r,beacon:n,confirmation:o,memory:i,refStore:a}).materialize(t);if(e==="ref.remove")return await Ee({tools:r,beacon:n,confirmation:o,memory:i,refStore:a}).delete(t),{ok:!0};throw new Error(`Unknown RPC method: ${e}`)}function Ee(e){const t=e.refStore||wo();if(!t||typeof t.put!="function"||typeof t.get!="function")throw new Error("No ref store is configured.");return t}function ur(){return new Date().toISOString()}function q(e){return Math.max(0,Math.round(performance.now()-e))}function me(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function jo(e){const{accountId:t,locale:r="en-GB",parentUrl:n="",threadId:o,incomingContext:i,messageLimit:a}=e,s=me(i)?i:{},c=me(s.thread)?s.thread:{},u=me(s.panel)?s.panel:{},l=me(s.meta)?s.meta:{},f=lr(s.messages,a),g={id:String(o||c.id||self.crypto.randomUUID()),started_at:String(c.started_at||ur()),extensions:me(c.extensions)?{...c.extensions}:{}},p=String(l.locale||r),y=String(l.parentUrl||n||typeof self<"u"&&self.location?.href||"");return{panel:{...u},messages:f,thread:g,meta:{locale:p,parentUrl:y,accountId:t}}}function Ro(e,t,r){const n=lr([t],r)[0];return n?{...e,messages:Ce([...e.messages,n],r)}:e}function Ce(e,t){const r=Lo(t);return r===1/0?[...e]:e.slice(-r)}function lr(e,t){return Array.isArray(e)?Ce(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.content),t):[]}function Lo(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 Io="gengage:agent:context:";async function Oo({accountId:e,threadId:t,rpc:r}){const n=await r("memory.get",{tier:"session",key:it(e,t)});return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}async function Bo({accountId:e,threadId:t,extensions:r,panel:n,rpc:o}){await o("memory.set",{tier:"session",key:it(e,t),value:{thread:{extensions:r},...n&&Object.keys(n).length>0?{panel:n}:{}}})}function it(e,t){return`${Io}${e}:${t}`}function E(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var dr=class{#e=new Map;#r=new Map;#o;#c;#u;#i;#l;#d;#n;#a;#s;constructor({accountId:e,locale:t,parentUrl:r,rpc:n,persistentPanelKeys:o=[],panelKeyLimits:i={},messageLimit:a,maxThreads:s,threadTtlMs:c}){this.#o=e,this.#c=t,this.#u=r,this.#i=n,this.#l=[...new Set(o.filter(Boolean))],this.#d=No(i),this.#n=at(a),this.#a=at(s),this.#s=at(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.#t(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?.meta?.threadId||e?.session_id||e?.sessionId,r=String(t||"default"),n=this.#e.get(r);if(n){const a=Fo(n,e?.context,this.#n);return this.#t(r,a),a}const o=await Oo({accountId:this.#o,threadId:r,rpc:this.#i}),i=jo({accountId:this.#o,locale:e?.locale||this.#c,parentUrl:this.#u,threadId:r,incomingContext:qo(o,e?.context),messageLimit:this.#n});return this.#t(r,i),this.#f(),i}patch(e,t){this.pruneExpired();const r=String(e||"default"),n=this.#e.get(r);if(!n)return null;const o=st(n,typeof t=="function"?t(n):t,this.#n);return this.#t(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=Ro(n,{role:"user",content:t},this.#n);return this.#t(r,o),o}async commit(e){this.pruneExpired();const t=String(e||"default"),r=this.#e.get(t);return r?(this.#t(t,r),await Bo({accountId:this.#o,threadId:t,extensions:r.thread.extensions,panel:Mo(r.panel,this.#l,this.#d),rpc:this.#i}),r):null}delete(e){const t=String(e||"default");return this.#r.delete(t),this.#e.delete(t)}clear(){this.#e.clear(),this.#r.clear()}pruneExpired(e=Date.now()){if(!this.#s)return 0;let t=0;for(const[r,n]of this.#r)e-n<=this.#s||(this.#r.delete(r),this.#e.delete(r)&&(t+=1));return t}#t(e,t){this.#e.delete(e),this.#e.set(e,t),this.#r.set(e,Date.now())}#f(){if(this.#a)for(;this.#e.size>this.#a;){const e=this.#e.keys().next().value;if(!e)return;this.delete(e)}}};function Mo(e,t,r){if(!t.length||!E(e))return;const n={};for(const o of t)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=$o(e[o],r[o]));return n}function No(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 at(e){if(e===void 0)return;const t=Math.floor(Number(e));return Number.isFinite(t)&&t>0?t:void 0}function $o(e,t){return!t||!Array.isArray(e)?e:e.slice(-t)}function qo(e,t){return!E(e)&&!E(t)?{}:st(E(e)?e:{},E(t)?t:{})}function Fo(e,t,r){if(!E(t))return e;const n=st(e,t,r);return{...n,thread:{...n.thread,id:e.thread.id,started_at:e.thread.started_at},meta:{...n.meta,accountId:e.meta.accountId}}}function st(e,t,r){if(!E(t))return e;const n=e,o=t,i=E(n.panel)?n.panel:{},a=E(o.panel)?o.panel:{},s=E(n.thread)?n.thread:{},c=E(o.thread)?o.thread:{},u=E(s.extensions)?s.extensions:{},l=E(c.extensions)?c.extensions:{},f=E(n.meta)?n.meta:{},g=E(o.meta)?o.meta:{};return{...e,...t,panel:{...i,...a},thread:{...s,...c,extensions:{...u,...l}},meta:{...f,...g},messages:Array.isArray(o.messages)?Ce(o.messages,r):e.messages??[]}}function fr(e){const t=String.fromCharCode(...e);return btoa(t).replace(/\+/gu,"-").replace(/\//gu,"_").replace(/=+$/u,"")}function pr(e){return fr(new TextEncoder().encode(JSON.stringify(e)))}async function Uo({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=`${pr({alg:"HS256",typ:"JWT"})}.${pr({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}.${fr(new Uint8Array(a))}`}function ct({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 Uo({accountId:e,devJwtSecret:t});if(!r)throw new Error("tokenBrokerUrl is required for production agent mode.");const u=Math.floor(Date.now()/1e3);return a?.token&&a.expiresAtS-o>u||(a=await Do({accountId:e,tokenBrokerUrl:r,tokenBrokerAudience:n,parentUrl:c,signal:s,fetchImpl:i})),a.token}}async function Do({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:zo(s)||Go(c)||Math.floor(Date.now()/1e3)+300}}function zo(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 Go(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 mr={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."}},z=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 ut(e){const t=String(e?.code||"upstream_llm"),r=mr[t]||mr.upstream_llm;return new z(r.code,r.message,{source:"be",sourceCode:t,detail:e?.detail})}function gr(e,t){const r=t?.error&&typeof t.error=="object"?t.error:{};return ut({code:String(r.code||Vo(e)),detail:r.detail})}function yr(e){return e instanceof z?{type:"error",code:e.code,message:e.message}:{type:"error",code:"agent_invoke_failed",message:"The assistant could not complete that request."}}function Vo(e){return e===401?"unauthorized":e===403?"forbidden":e===413?"payload_too_large":e===429?"rate_limited":"internal"}var Ho=7200*1e3,hr=200,Ko=5*1024*1024,Wo="gengage_request_response_cache",Jo=1,F="responses",Zo=new Set(["addToCart","like"]),U=new Map,br=null;async function Yo(e,t={},r={}){const n=Qo(e,t);if(!n)return fetch(e,t);const o=Date.now(),i=await ei(n,o);if(i)return ni(i);const a=await fetch(e,t);return a.ok&&ti(n,a.clone(),o,{ttlMs:r.ttlMs??Ho,maxEntries:r.maxEntries??hr,maxBodyBytes:r.maxBodyBytes??Ko}),a}function Qo(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"||Xo(t.body)?null:`rr:${li(ui({url:String(e),method:r,headers:oi(t.headers),body:t.body}))}`}function Xo(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"&&Zo.has(r)}catch{return!1}}async function ei(e,t){const r=U.get(e);if(r)if(r.expiresAt<=t)U.delete(e);else return r.lastAccessedAt=t,U.delete(e),U.set(e,r),lt(r),r;const n=await ai(e);return n?n.expiresAt<=t?(U.delete(e),si(e),null):(n.lastAccessedAt=t,U.set(e,n),lt(n),wr(hr),n):null}async function ti(e,t,r,n){try{const o=await t.text();if(di(o)>n.maxBodyBytes||ri(o))return;const i={key:e,status:t.status,statusText:t.statusText,headers:ii(t.headers),body:o,createdAt:r,expiresAt:r+n.ttlMs,lastAccessedAt:r};U.set(e,i),wr(n.maxEntries),await lt(i),await ci(n.maxEntries,r)}catch{}}function ri(e){return/"_error"\s*:/u.test(e)||/"type"\s*:\s*"error"/u.test(e)}function ni(e){return new Response(e.body,{status:e.status,statusText:e.statusText,headers:new Headers(e.headers)})}function oi(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 ii(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 wr(e){for(;U.size>e;){const t=[...U.values()].sort((r,n)=>r.lastAccessedAt-n.lastAccessedAt)[0];if(!t)break;U.delete(t.key)}}async function Pe(){return typeof indexedDB>"u"?null:(br??=new Promise(e=>{const t=indexedDB.open(Wo,Jo);t.onupgradeneeded=()=>{const r=t.result;r.objectStoreNames.contains(F)||r.createObjectStore(F,{keyPath:"key"}).createIndex("lastAccessedAt","lastAccessedAt",{unique:!1})},t.onsuccess=()=>e(t.result),t.onerror=()=>e(null),t.onblocked=()=>e(null)}),br)}async function ai(e){const t=await Pe();return t?new Promise(r=>{const n=t.transaction(F,"readonly"),o=n.objectStore(F).get(e);o.onsuccess=()=>r(o.result??null),o.onerror=()=>r(null),n.onerror=()=>r(null)}):null}async function lt(e){const t=await Pe();t&&await new Promise(r=>{const n=t.transaction(F,"readwrite");n.objectStore(F).put(e),n.oncomplete=()=>r(),n.onerror=()=>r(),n.onabort=()=>r()})}async function si(e){const t=await Pe();t&&await new Promise(r=>{const n=t.transaction(F,"readwrite");n.objectStore(F).delete(e),n.oncomplete=()=>r(),n.onerror=()=>r(),n.onabort=()=>r()})}async function ci(e,t){const r=await Pe();r&&await new Promise(n=>{const o=r.transaction(F,"readwrite"),i=o.objectStore(F),a=[],s=i.openCursor();s.onsuccess=()=>{const c=s.result;if(!c){const u=a.filter(f=>f.expiresAt<=t),l=a.filter(f=>f.expiresAt>t).sort((f,g)=>f.lastAccessedAt-g.lastAccessedAt).slice(0,Math.max(0,a.length-u.length-e));for(const f of[...u,...l])i.delete(f.key);return}a.push(c.value),c.continue()},s.onerror=()=>n(),o.oncomplete=()=>n(),o.onerror=()=>n(),o.onabort=()=>n()})}function ui(e){return JSON.stringify(dt(e))}function dt(e){return Array.isArray(e)?e.map(dt):!e||typeof e!="object"?e:Object.fromEntries(Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>[t,dt(r)]))}function li(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 di(e){return typeof TextEncoder<"u"?new TextEncoder().encode(e).byteLength:e.length}async function fi({beUrl:e,accountId:t,devJwtSecret:r,tokenBrokerUrl:n,tokenBrokerAudience:o,jwtProvider:i,parentUrl:a,op:s,input:c,cacheTtlS:u,cacheKey:l,browserCache:f,signal:g}){const p=await(i||ct({accountId:t,devJwtSecret:r,tokenBrokerUrl:n,tokenBrokerAudience:o}))({...g?{signal:g}:{},...a?{parentUrl:a}:{}}),{opDomain:y,opName:h}=pi(s,t),m={method:"POST",headers:{authorization:`Bearer ${p}`,"content-type":"application/json",accept:"application/x-ndjson"},body:JSON.stringify({op_domain:y,op_name:h,op_payload:c,...u!==void 0?{cache_ttl_s:u}:{},...l!==void 0?{cache_key:l}:{}}),...g?{signal:g}:{}},b=`${String(e).replace(/\/+$/u,"")}/v1/execute`,w=f===!1?await fetch(b,m):await Yo(b,m,typeof f=="object"?f:{});if(!w.ok)throw gr(w.status,await gi(w));return yi(w)}function pi(e,t){if(!e||e.startsWith("-")||e.endsWith("-"))throw new Error(`Invalid BE op name: ${e}`);return{opDomain:mi(t),opName:e}}function mi(e){return e.replace(/-agentic$/u,"")}async function gi(e){try{return await e.json()}catch{return{error:{code:e.statusText||"internal"}}}}async function yi(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 u=n.slice(0,c).trim();n=n.slice(c+1),u&&kr(JSON.parse(u),o),c=n.indexOf(`
3
+ `)}}const i=n.trim();return i&&kr(JSON.parse(i),o),o}function kr(e,t){if(e._error)throw ut(e._error);if(!e._end)for(const[r,n]of Object.entries(e)){if(Object.prototype.hasOwnProperty.call(t,r))throw new z("op_failed",`BE streamed duplicate field "${r}".`,{source:"be",sourceCode:"schema_mismatch"});t[r]=n}}function hi(e={}){return{type:"metadata",...e}}function Sr(e,t=!1,r={}){return{type:"text_chunk",content:e,final:t,...r}}function bi(e){return{type:"ui_spec",...e}}function wi(e){return{type:"action",action:e}}function vr(e,t){return{type:"error",code:e,message:t}}function ft(){return{type:"done"}}function _r(e,t){return e[t?.type||t?.action?.type||"inputText"]||e.inputText}function Ar(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function je(e,t={}){const r=Ar(e);if(!r)return null;const n=t.catalogMapper?.(r);if(n)return n;const o=ne(r.sku,r.SKU);if(!o)return null;const i={sku:o,name:ne(r.name,r.title,r.short_name,o)||o,url:ne(r.url)||""},a=Array.isArray(r.images)?r.images:void 0,s=ne(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=ge(r.price_discounted),u=ge(r.price),l=c||u;l>0&&(i.price=String(l));const f=c>0?u:0;f>0&&(i.originalPrice=String(f));const g=ne(r.brand);g&&(i.brand=g);const p=ge(r.rating);p>0&&(i.rating=p);const y=ge(r.review_count)||ge(r.reviewCount);y>0&&(i.reviewCount=y);const h=ne(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 m=r.category_names;return Array.isArray(m)&&(i.categoryNames=m.map(String)),i}function Re(e){const t=Ar(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 ki(e){return Array.isArray(e)?e.map(Re).filter(t=>!!t):[]}function ne(...e){for(const t of e)if(typeof t=="string"&&t.trim())return t.trim();return""}function ge(e){const t=Number(e);return Number.isFinite(t)?t:0}function xr(e){return Array.isArray(e)?e.map(String).filter(Boolean):typeof e=="string"&&e?[e]:[]}function pt(e,t,r={}){return`${e}:${r.version||"v2"}:${oe(t)}`}function Si(e,t={}){return Tr(e).map(r=>Er(typeof r=="string"?r:r.sku,t.locale)).filter(Boolean).filter((r,n,o)=>o.indexOf(r)===n).sort((r,n)=>mt(r,n,t.locale)).slice(0,t.limit||16).join(",")}function vi(e,t={}){return oe(Tr(e).map(r=>Ai(r,t)).filter(r=>!!r).sort((r,n)=>mt(String(r.sku||r.name||""),String(n.sku||n.name||""),t.locale)).slice(0,t.limit||16))}function _i(e,t){return Y(e,t)}function oe(e){let t=2166136261;const r=xi(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 Ai(e,t){if(!e||typeof e!="object"||Array.isArray(e))return null;const r=e,n=t.mapProduct?.(r);if(n)return ye(n);const o=Re(r);return o&&typeof o=="object"&&!Array.isArray(o)?ye(Ti(o,t)):null}function Tr(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"||!!(t&&typeof t=="object"&&!Array.isArray(t))):[]}function xi(e){return JSON.stringify(ye(e))}function ye(e){return Array.isArray(e)?e.map(ye):!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,ye(r)]))}function Ti(e,t){return{sku:Er(e.sku,t.locale),name:Y(e.name,t.locale),url:Y(e.url,t.locale),price:e.price,currency:Y(e.currency,t.locale),category:Y(e.category,t.locale),category_names:Ei(e.category_names,t.locale,16),image:Y(e.image,t.locale),in_stock:e.in_stock,rating:e.rating,review_count:e.review_count}}function Er(e,t){return Y(e,t).toUpperCase()}function Y(e,t){return typeof e=="string"?e.trim().replace(/\s+/gu," ").toLocaleLowerCase(t||void 0):""}function mt(e,t,r){return e.localeCompare(t,r,{numeric:!0})}function Ei(e,t,r){return Array.isArray(e)?e.map(n=>Y(n,t)).filter(Boolean).sort((n,o)=>mt(n,o,t)).slice(0,r):void 0}async function Ci({request:e,accountModule:t,contextStore:r,beClient:n,toolBridge:o,emit:i,rpc:a,signal:s}){const c=performance.now(),u=await r.load(e),l=u.thread.id,f=Zi(e);Ui(u,f)&&r.appendUserMessage(l,f);const g=_r(t.flows,e);if(!g)return i(vr("unknown_action",`No agent flow for request type ${e?.type||"inputText"}`)),i(ft()),{steps:0,productSkusEmitted:[]};const p={request:e,context:r.patch(l,{})||u,bag:{},accountConfig:t.accountConfig||{},threadId:l,steps:0,productSkusEmitted:new Set,committed:!1,messageLimit:Ji(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}:{}};await G(y,we("turn:start",p));try{await he(g,p,y),p.committed||await gt(p,y)}catch(h){throw await G(y,{...we("turn:error",p),latencyMs:q(c),errorCode:kt(h)}),h}return await a("beacon.send",{type:"turnSummary",threadId:l,sessionId:e?.session_id||e?.sessionId||l,accountId:t.accountId||p.context.meta.accountId,steps:p.steps,totalLatencyMs:q(c),productSkusEmitted:[...p.productSkusEmitted]}),await G(y,{...we("turn:end",p),latencyMs:q(c)}),{steps:p.steps,productSkusEmitted:[...p.productSkusEmitted]}}async function he(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 G(r,bt("step:start",t,n,o));try{await Pi(n,t,r),await G(r,{...bt("step:end",t,n,o),latencyMs:q(i)})}catch(a){throw await G(r,{...bt("step:error",t,n,o),latencyMs:q(i),errorCode:kt(a)}),a}t.context=r.contextStore.patch(t.threadId,{})||t.context}}async function Pi(e,t,r){const n=Ie(t);if(e.kind==="be_op"){await ji(e,t,r,n);return}if(e.kind==="tool"){await Ii(e,t,r,n);return}if(e.kind==="adapter"){await Oi(e,t,r,n);return}if(e.kind==="emit"){await Bi(e,t,r);return}if(e.kind==="patch"){await Mi(e,t,r);return}if(e.kind==="branch"){await Ni(e,t,r,n);return}if(e.kind==="parallel"){await $i(e,t,r);return}if(e.kind==="refusal"){await qi(e,t,r,n);return}e.kind==="commit"&&await Fi(e,t,r)}async function ji(e,t,r,n){const o=performance.now();let i;try{const s=await P(e.input,n),c=Ri(e,t,s,await P(e.cache,n)),u=await P(e.cacheTtlS,n)??c.cacheTtlS,l=await P(e.cacheKey,n)??c.cacheKey,f=await P(e.browserCache,n),g=be(await P(e.timeoutMs,n));await ht(e,t,r,n);const p=g?new AbortController:null,y=jr(r.signal,p?.signal);i=await Be(r.beClient.invoke({op:e.op,input:s,...u!==void 0?{cacheTtlS:u}:{},...l!==void 0?{cacheKey:l}:{},...f!==void 0?{browserCache:f}:{},...y?{signal:y}:{}}),g,()=>new z("op_timeout","The assistant took too long to respond.",{source:"be",sourceCode:"timeout"}),()=>p?.abort())}catch(s){const c=s,u=String(c?.sourceCode||c?.code||"unknown"),l={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:u};if(await r.rpc("beacon.send",l),e.onError){e.errorOut&&(t.bag[e.errorOut]=s),await he(e.onError,t,r);return}throw s}e.out&&(t.bag[e.out]=i),await Le(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 Ri(e,t,r,n){if(!n||n.strategy!=="input-hash")return{};const o=be(n.ttlS);if(!o)return{};const i=t.context.meta.locale,a=n.promptVersion||Li(r)||"current";return{cacheTtlS:o,cacheKey:pt(e.op,{account:t.context.meta.accountId,locale:i,promptVersion:a,payload:r},{version:"input-hash"})}}function Li(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 Ii(e,t,r,n){const o=performance.now();try{await ht(e,t,r,n);const i=be(await P(e.timeoutMs,n)),a=await Be(r.toolBridge.invoke(e.name,await P(e.input,n)),i,()=>new z("tool_timeout","The assistant tool took too long to respond.",{source:"tool",sourceCode:"timeout"}));e.out&&(t.bag[e.out]=a),await Le(e,a,t,r.contextStore),await r.rpc("beacon.send",{type:"agentTool",threadId:t.threadId,sessionId:Oe(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:Oe(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 he(e.onError,t,r);return}throw i}}async function Oi(e,t,r,n){const o=r.adapters?.[e.name];if(typeof o!="function")throw new Error(`Unknown flow adapter: ${e.name}`);await ht(e,t,r,n);const i=be(await P(e.timeoutMs,n)),a=await Be(o(await P(e.input,n),n),i,()=>new z("adapter_timeout","The assistant adapter took too long to respond.",{source:"adapter",sourceCode:"timeout"}));e.out&&(t.bag[e.out]=a),await Le(e,a,t,r.contextStore)}async function Bi(e,t,r){const n=await e.build(Ie(t));Yi(n,t.productSkusEmitted),r.emit(n)}async function Mi(e,t,r){await Le(e,void 0,t,r.contextStore)}async function Ni(e,t,r,n){const o=String(await P(e.on,n)||"default");await he(e.cases[o]||e.cases.default||[],t,r)}async function $i(e,t,r){const n=be(await P(e.timeoutMs,Ie(t))),o=n?new AbortController:null,i=jr(r.signal,o?.signal),a=e.steps.map(u=>{const l={...t,context:Di(t.context),bag:yt(t.bag),productSkusEmitted:new Set(t.productSkusEmitted),committed:!1},f=[];return he(u,l,{...r,emit:g=>{!i?.aborted&&g.type!=="done"&&f.push(g)},contextStore:zi(l),...i?{signal:i}:{}}).then(()=>({state:l,events:f}))}),s=await Be(Promise.all(a),n,()=>new z("parallel_timeout","The assistant parallel step took too long to respond.",{source:"agent",sourceCode:"timeout"}),()=>o?.abort()),c=e.merge||{};for(const{state:u,events:l}of s){for(const f of l)r.emit(f);for(const f of u.productSkusEmitted)t.productSkusEmitted.add(f);for(const f of c.bag||[])Object.prototype.hasOwnProperty.call(u.bag,f)&&(t.bag[f]=u.bag[f]);if(c.panel?.length){const f=Cr(u.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=Cr(u.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 qi(e,t,r,n){r.emit(Sr(await P(e.message,n),!0)),await gt(t,r)}async function Fi(e,t,r){await gt(t,r)}async function gt(e,{contextStore:t,emit:r}){e.committed||(e.context=await t.commit(e.threadId)||e.context,e.committed=!0,r(ft()))}async function Le(e,t,r,n){if(typeof e.patch!="function")return;const o=await e.patch(r.context,t,Ie(r));o&&(r.context=n.patch(r.threadId,o)||r.context)}function Ie(e){return{request:e.request,context:e.context,bag:e.bag,accountConfig:e.accountConfig,catalogMapper:e.catalogMapper,similarityMapper:e.similarityMapper}}function Oe(e){return e.request?.session_id||e.request?.sessionId||e.threadId}function Ui(e,t){if(!t)return!1;const r=e.messages[e.messages.length-1];return r?.role!=="user"||r.content!==t}function Cr(e,t){const r={};for(const n of t)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}function Di(e){return{...e,panel:yt(e.panel||{}),thread:{...e.thread,extensions:yt(e.thread?.extensions||{})},meta:e.meta,messages:e.messages}}function zi(e){return{async load(){return e.context},patch(t,r){return e.context=Gi(e.context,r,e.messageLimit),e.context},appendUserMessage(){return e.context},async commit(){return e.context}}}function Gi(e,t,r){if(!t||typeof t!="object")return e;const n=Pr(e.panel,t.panel),o=Pr(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)?Ce(t.messages,r):e.messages}}function Pr(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 yt(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(Vi(o)){const i=Hi(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 Vi(e){return!!(e&&typeof e=="object")}function Hi(e){if(typeof structuredClone=="function")try{return structuredClone(e)}catch{}try{return JSON.parse(JSON.stringify(e))}catch{return e}}async function P(e,t){return typeof e=="function"?await e(t):e}function be(e){if(e===void 0)return;const t=Math.floor(Number(e));return Number.isFinite(t)&&t>0?t:void 0}async function Be(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 jr(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 ht(e,t,r,n){if(!e.confirm)return;const o=await P(e.confirm,n);if(!o)return;const i=Ki(o,e,t);await G(r,wt("confirmation:start",t,e));try{const a=await r.rpc("confirmation.request",i),s=typeof a=="boolean"?a:a?.confirmed===!0;if(await G(r,wt("confirmation:end",t,e)),s)return;throw new z("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 G(r,{...wt("confirmation:error",t,e),errorCode:kt(a)}),a}}function Ki(e,t,r){return{...Wi(e),accountId:r.context.meta.accountId,threadId:r.threadId,sessionId:Oe(r),stepKind:t.kind,...t.kind==="be_op"?{stepName:t.op}:{stepName:t.name}}}function Wi(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 G(e,t){try{await e.trace?.(t)}catch{}}function we(e,t){return{type:e,accountId:t.context.meta.accountId,threadId:t.threadId,sessionId:Oe(t)}}function bt(e,t,r,n){const o=Rr(r);return{...we(e,t),stepIndex:n,stepKind:r.kind,...o?{stepName:o}:{}}}function wt(e,t,r){const n=Rr(r);return{...we(e,t),stepKind:r.kind,...n?{stepName:n}:{}}}function Rr(e){if(e.kind==="be_op")return e.op;if(e.kind==="tool"||e.kind==="adapter")return e.name}function kt(e){if(e&&typeof e=="object"){const t=e;return String(t.sourceCode||t.code||t.name||"unknown")}return"unknown"}function Ji(e){if(e===void 0)return;const t=Math.floor(Number(e));return Number.isFinite(t)&&t>0?t:void 0}function Zi(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 Yi(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 Qi(e){return{invoke(t,r){return e("tool.invoke",{name:t,input:r})}}}var Xi=512,ea=.74;function Lr({accountId:e,worker:t,beUrl:r,devJwtSecret:n,tokenBrokerUrl:o,tokenBrokerAudience:i,defaultLocale:a,tools:s={},beacon:c,confirmation:u,memory:l=et()}){let f=1;const g=new Map;return ho({worker:t,tools:s,beacon:p=>c?.({...p,accountId:p.accountId||e}),...u?{confirmation:u}:{},memory:l}),t.addEventListener("message",p=>{const y=p.data||{},h=typeof y.id=="number"?y.id:null;if(h==null)return;const m=g.get(h);if(m){if(y.type==="event"&&y.event){St(m,y.event);return}if(y.type==="error"){m.onError(new Error(y.message||"Agent worker failed")),g.delete(h);return}y.type==="end"&&g.delete(h)}}),(p,y,h,m)=>{const b=f++;g.set(b,y);const w=()=>{g.delete(b),t.postMessage({id:b,type:"abort"})},A=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:v,parentUrl:window.location.href})};if(h.aborted){w();return}if(h.addEventListener("abort",w,{once:!0}),m){Or(p,m).then(A).catch(v=>{g.delete(b),y.onError(v instanceof Error?v:new Error("Failed to read image attachment"))});return}A(p)}}function Ir({accountId:e,accountModule:t,beUrl:r,devJwtSecret:n,tokenBrokerUrl:o,tokenBrokerAudience:i,defaultLocale:a,tools:s={},beacon:c,confirmation:u,memory:l}){let f=null;const g=ta({accountId:e,tools:s,beacon:c,confirmation:u,memory:l??et()}),p=Qi(g),y=ct({accountId:e,...n?{devJwtSecret:n}:{},...o?{tokenBrokerUrl:o}:{},...i?{tokenBrokerAudience:i}:{}});return async(h,m,b,w)=>{const A=await Or(h||{},w);f||=new dr({accountId:e,locale:A?.locale||a,parentUrl:window.location.href,rpc:g,persistentPanelKeys:t.contextPersistence?.panelKeys,panelKeyLimits:t.contextPersistence?.panelKeyLimits,messageLimit:t.contextPersistence?.messageLimit,maxThreads:t.contextPersistence?.maxThreads,threadTtlMs:t.contextPersistence?.threadTtlMs});try{await Ci({request:A,accountModule:{...t,accountId:e},contextStore:f,beClient:{invoke({op:v,input:O,signal:_,cacheTtlS:M,cacheKey:J,browserCache:Ye}){return fi({beUrl:r,accountId:e,jwtProvider:y,parentUrl:window.location.href,op:v,input:O,cacheTtlS:M,cacheKey:J,browserCache:Ye,..._?{signal:_}:{}})}},toolBridge:p,emit:v=>St(m,v),rpc:g,signal:b})}catch(v){b?.aborted||(St(m,yr(v)),m.onDone())}}}function ta({accountId:e,tools:t,beacon:r,confirmation:n,memory:o}){const i=a=>r?.({...a,accountId:a.accountId||e});return((a,s)=>cr(a,s,{tools:t,beacon:i,confirmation:n,memory:o}))}async function Or(e,t){if(!t||!t.type?.startsWith("image/"))return e;const r=await oa(t),n={...ra(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 ra(e){return na(e)?{...e}:typeof e=="string"?{text:e}:{}}function na(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function oa(e){const t=await ia(e);return t||{dataUrl:await Br(e),mime:e.type}}async function ia(e){if(typeof createImageBitmap!="function"||typeof document>"u")return null;let t=null;try{t=await createImageBitmap(e);const r=Math.min(1,Xi/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",ea));return s?{dataUrl:await Br(s),mime:s.type||"image/jpeg"}:null}catch{return null}finally{t?.close()}}async function Br(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 St(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(aa(t));break;case"done":e.onDone();break;default:break}}function aa(e){const t=new Error(e.message||e.code||"Agent error");return e.code&&(t.code=e.code),t}var sa="entries",ca=1,ua={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."},Mr=new Map;function vt(){return Date.now()}function ie(e){return e?.expiresAt!=null&&e.expiresAt<=vt()}function _t(e,t){return{value:e,createdAt:vt(),expiresAt:t?vt()+t:null}}function la(e,t,r){try{const n=e.getItem(`${t}${r}`);if(!n)return null;const o=JSON.parse(n);return ie(o)?(e.removeItem(`${t}${r}`),null):o.value}catch{return null}}function da(e,t,r,n,o){try{return e.setItem(`${t}${r}`,JSON.stringify(_t(n,o))),!0}catch{return!1}}function fa(e,t,r){try{e.removeItem(`${t}${r}`)}catch{}}function Nr(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||ie(i))&&(e.removeItem(o),r+=1)}catch{e.removeItem(o),r+=1}}catch{return r}return r}function $r(e){try{return window[e]}catch{return null}}function qr(e,t){return e?{get:r=>la(e,t,r),set:(r,n,o={})=>da(e,t,r,n,o.ttlMs),remove:r=>fa(e,t,r)}:{get:()=>null,set:()=>!1,remove:()=>{}}}function pa(e,t){const r=t.dbName||`gengage-${e}`,n=t.dbStore||sa,o=t.dbVersion||ca,i=new Map;let a=null;const s=()=>"indexedDB"in window?a||(a=new Promise(g=>{const p=indexedDB.open(r,o);p.onupgradeneeded=()=>{p.result.createObjectStore(n,{keyPath:"key"})},p.onsuccess=()=>g(p.result),p.onerror=()=>g(null),p.onblocked=()=>g(null)}),a):Promise.resolve(null);return{volatileEntries:i,idbGet:async g=>{const p=await s();return p?new Promise(y=>{const h=p.transaction(n,"readwrite").objectStore(n),m=h.get(g);m.onsuccess=()=>{const b=m.result;if(!b||ie(b)){b&&h.delete(g),y(null);return}y(b.value)},m.onerror=()=>y(null)}):null},idbSet:async(g,p,y={})=>{const h=await s();return h?new Promise(m=>{const b=h.transaction(n,"readwrite");b.oncomplete=()=>m(!0),b.onerror=()=>m(!1),b.objectStore(n).put({key:g,..._t(p,y.ttlMs)})}):!1},idbRemove:async g=>{const p=await s();p&&p.transaction(n,"readwrite").objectStore(n).delete(g)},idbGc:async()=>{const g=await s();return g?new Promise(p=>{let y=0;const h=g.transaction(n,"readwrite"),m=h.objectStore(n).openCursor();m.onsuccess=()=>{const b=m.result;if(!b)return;const w=b.value;(!w||ie(w))&&(b.delete(),y+=1),b.continue()},h.oncomplete=()=>p(y),h.onerror=()=>p(y),m.onerror=()=>p(y)}):0}}}function At(e,t={}){const r=window,n=r.gengage||(r.gengage={}),o=n.memory||(n.memory={}),i=o[e];if(i)return i;const a=Mr.get(e)||pa(e,t);Mr.set(e,a);const s=t.sessionPrefix||`gengage:${e}:session:`,c=t.localPrefix||`gengage:${e}:local:`,u=$r("sessionStorage"),l=$r("localStorage"),g={get:m=>{const b=a.volatileEntries.get(m);return b?ie(b)?(a.volatileEntries.delete(m),null):b.value:null},set:(m,b,w={})=>(a.volatileEntries.set(m,_t(b,w.ttlMs)),!0),remove:m=>{a.volatileEntries.delete(m)},clear:()=>a.volatileEntries.clear()},p={get:a.idbGet,set:a.idbSet,remove:a.idbRemove},y=async()=>{let m=0;for(const[v,O]of a.volatileEntries)ie(O)&&(a.volatileEntries.delete(v),m+=1);const b=Nr(u,s),w=Nr(l,c),A=await a.idbGc();return{volatile:m,session:b,local:w,indexedDb:A}},h={accountId:e,volatile:g,session:qr(u,s),local:qr(l,c),indexedDb:p,gc:y,stableKey:oe,policy:{...ua,...t.policy||{}}};o[e]=h;for(const m of t.aliases||[])o[m]=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 Me="__gengageAgentFetchBridge",ga=1e3*60*60*24*14;function ya({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=ha(),i=`https://gengage-injector.invalid/${encodeURIComponent(e)}`,a=new Set,s=n?_a({accountId:e,endpointCache:n,fetchImpl:o.originalFetch}):void 0,c=u=>{const l=`${i}/chat/${u}`;a.add(l);const f=r[u],g={streamTransport:t,endpoint:u};f&&(g.endpointHandler=f),s&&(g.endpointCache=s),o.routes.set(l,g)};c("process_action");for(const u of Object.keys(r))u!=="process_action"&&c(u);return{middlewareUrl:i,stop(){for(const u of a)o.routes.delete(u);ba(o)}}}function ha(){const e=window,t=e[Me];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=Fr(o),s=n.routes.get(a);return s?ka(s,o,i):r(o,i)},e.fetch=n.installedFetch,e[Me]=n,n}function ba(e){if(e.routes.size>0)return;const t=window;t.fetch===e.installedFetch&&(t.fetch=e.originalFetch),t[Me]===e&&delete t[Me]}function Fr(e){return typeof e=="string"?e:e instanceof URL?e.href:e?.url||""}function Ur(e,t){if(t?.signal)return t.signal;if(typeof Request<"u"&&e instanceof Request)return e.signal}function Dr(e,t){return t?.body!==void 0&&t?.body!==null?t.body:typeof Request<"u"&&e instanceof Request?e.clone().text():null}async function wa(e,t){const r=Dr(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 ka(e,t,r){if(e.endpoint&&e.endpoint!=="process_action"&&e.endpointHandler){const u=new AbortController,l=Ur(t,r);let f=null;if(l){const g=()=>u.abort();l.aborted&&g(),l.addEventListener("abort",g,{once:!0}),f=()=>l.removeEventListener("abort",g)}try{const g=await Sa(t,r),p={accountId:va(t),endpoint:e.endpoint,signal:u.signal},y=Aa(e.endpointCache,e.endpoint,g,p.accountId);if(y){const m=await xa(e.endpointCache,y,u.signal);if(m)return Ra(m)}const h=await e.endpointHandler(g,p);return y&&h.ok&&await Ta(e.endpointCache,y,h.clone(),u.signal),h}finally{f?.()}}const n=new TextEncoder,o=new AbortController,i=Ur(t,r);let a=!1,s=null;const c=new ReadableStream({async start(u){const l=p=>{a||u.enqueue(n.encode(`${JSON.stringify(p)}
4
+ `))},f=()=>{a||(a=!0,s?.(),u.close())},g=p=>{l({type:"error",code:p?.code||"agent_bridge_error",message:p instanceof Error?p.message:String(p)}),l({type:"done"}),f()};if(i){const p=()=>{o.abort(),a||(a=!0,s?.(),u.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 wa(t,r),h=e.streamTransport(p,{onTextChunk:(m,b,w={})=>l({type:"text_chunk",content:m,final:b===!0,...w}),onUISpec:(m,b,w,A)=>l({type:"ui_spec",spec:m,widget:b,...w?{panelHint:w}:{},...A?{clearPanel:!0}:{}}),onAction:m=>{l(m?.type==="action"?m:{type:"action",action:m})},onMetadata:m=>{l(m?.type==="metadata"?m:{type:"metadata",...m})},onError:g,onDone:()=>{l({type:"done"}),f()}},o.signal,y);Ba(h)&&(await h,o.signal.aborted||(l({type:"done"}),f()))}catch(p){o.signal.aborted||g(p)}},cancel(){o.abort(),s?.(),a=!0}});return new Response(c,{status:200,headers:{"Content-Type":"application/x-ndjson"}})}async function Sa(e,t){const r=await Promise.resolve(Dr(e,t));return typeof r!="string"||r.trim()===""?{}:JSON.parse(r)}function va(e){try{const[t]=new URL(Fr(e)).pathname.split("/").filter(Boolean);return decodeURIComponent(t||"")}catch{return""}}function _a({accountId:e,endpointCache:t,fetchImpl:r}){return{accountId:e,beUrl:t.beUrl,...t.parentUrl?{parentUrl:t.parentUrl}:{},ttlMs:t.ttlMs??ga,policies:t.policies,fetchImpl:r,jwtProvider:ct({accountId:e,...t.devJwtSecret?{devJwtSecret:t.devJwtSecret}:{},...t.tokenBrokerUrl?{tokenBrokerUrl:t.tokenBrokerUrl}:{},...t.tokenBrokerAudience?{tokenBrokerAudience:t.tokenBrokerAudience}:{},fetchImpl:r})}}function Aa(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 xa(e,t,r){const n=Hr(e.accountId,t),o=await La(e.accountId,n);if(Vr(o))return o;const i=await Ea(e,t,r);return i?(await Kr(e.accountId,n,i,t.ttlMs),i):null}async function Ta(e,t,r,n){try{const o=await ja(r);if(Oa(o.body))return;const i=Hr(e.accountId,t);await Kr(e.accountId,i,o,t.ttlMs),Ca(e,t,o,n)}catch{}}async function Ea(e,t,r){try{const n=await e.fetchImpl(Gr(e.beUrl),{method:"POST",headers:await zr(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&&Vr(o.payload)?o.payload:null}catch{return null}}async function Ca(e,t,r,n){try{await e.fetchImpl(Gr(e.beUrl),{method:"POST",headers:await zr(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 zr(e,t){return{authorization:`Bearer ${await e.jwtProvider({signal:t,parentUrl:e.parentUrl||Pa()})}`,"content-type":"application/json",accept:"application/json"}}function Pa(){try{return window.location?.href||""}catch{return""}}function Gr(e){return`${String(e).replace(/\/+$/u,"")}/v1/cache`}async function ja(e){return{status:e.status,statusText:e.statusText,headers:[...e.headers.entries()].filter(([t])=>Ia(t)),body:await e.text()}}function Ra(e){return new Response(e.body,{status:e.status,statusText:e.statusText,headers:new Headers(e.headers)})}function Vr(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 Hr(e,t){return`endpoint-response:${oe({accountId:e,partition:t.partition,key:t.key})}`}async function La(e,t){const r=At(e);return r.volatile.get(t)||await r.indexedDb.get(t)||r.local.get(t)}async function Kr(e,t,r,n){const o=At(e);o.volatile.set(t,r,{ttlMs:n}),await o.indexedDb.set(t,r,{ttlMs:n})||o.local.set(t,r,{ttlMs:n})}function Ia(e){return["content-type","cache-control"].includes(e.toLowerCase())}function Oa(e){return/"_error"\s*:/u.test(e)||/"type"\s*:\s*"error"/u.test(e)}function Ba(e){return e!==null&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"}function Ma({accountId:e,beUrl:t,devJwtSecret:r,tokenBrokerUrl:n,tokenBrokerAudience:o,workerUrl:i,defaultLocale:a="en-GB",accountModule:s,tools:c={},beacon:u,confirmation:l,memory:f,allowBlobWorker:g=!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={}),m=h[e]||(h[e]={});if(m.agentController)return m.agentController;const b=xt(i)||g?Wr(i,`gengage-${e}-agent`,{allowBlobWorker:g}):null;b||u?.({type:"agentRuntime",accountId:e,transport:"main-thread",reason:"cross-origin-worker-url",workerUrl:i}),m.streamTransport=b?Lr({accountId:e,worker:b.worker,beUrl:t,...r?{devJwtSecret:r}:{},...n?{tokenBrokerUrl:n}:{},...o?{tokenBrokerAudience:o}:{},defaultLocale:a,tools:c,...u?{beacon:u}:{},...l?{confirmation:l}:{},...f?{memory:f}:{}}):Ir({accountId:e,accountModule:s,beUrl:t,...r?{devJwtSecret:r}:{},...n?{tokenBrokerUrl:n}:{},...o?{tokenBrokerAudience:o}:{},defaultLocale:a,tools:c,...u?{beacon:u}:{},...l?{confirmation:l}:{},...f?{memory:f}:{}});const w=new AbortController,A=[],v=()=>{for(;A.length;){const M=A.pop();try{M?.()}catch{}}},O=()=>{w.signal.aborted||(w.abort(),p?.removeEventListener("abort",O),delete m.streamTransport,b?.worker.terminate(),b?.cleanup(),v(),delete m.agentController)};p?.addEventListener("abort",O,{once:!0});const _={type:"agent",signal:w.signal,addCleanup(M){if(typeof M=="function"){if(w.signal.aborted){M();return}A.push(M)}},stop:O,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 m.agentController=_,_}function xt(e){const t=new URL(e,window.location.href);return t.origin===window.location.origin||t.protocol==="blob:"}function Wr(e,t,r={}){const n=new URL(e,window.location.href);if(xt(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 Na(e,t={}){if(!Array.isArray(e))return[];const r=t.maxItems??8,n=t.maxFeatures??8;return e.map(o=>$a(o,t.defaultBrand,n)).filter(o=>!!o).slice(0,r)}function $a(e,t,r){if(!e||typeof e!="object"||Array.isArray(e))return null;const n=e,o=Re(n);return o?Ua({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:qa(n.features,r),specs:Fa(n.specs,r),in_stock:o.in_stock}):null}function qa(e,t){return Array.isArray(e)?e.filter(Boolean).slice(0,t):void 0}function Fa(e,t){if(!(!e||typeof e!="object"||Array.isArray(e)))return Object.fromEntries(Object.entries(e).filter(([,r])=>r!=null).slice(0,t))}function Ua(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!=null))}function Tt(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(za).filter(Boolean)}}function Jr(e,t){const r=Array.isArray(e)?e.filter(s=>!!(s&&typeof s=="object"&&!Array.isArray(s))):[],n=Tt(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 Da(e,t){const r=Tt(e?.table),n=Jr(t,r);return{...e||{},table:r,products:n,multiple_product_details:n}}function za(e){return!e||typeof e!="object"||Array.isArray(e)?null:Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Ga(e=[],t={}){const r={},n=[];return(Array.isArray(e)?e.map(o=>je(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 Va(e,t={}){return{widget:"chat",panelHint:"panel",spec:{root:"root",elements:{root:{type:"ProductDetailsPanel",props:{product:je(e,t)||e||{}}}}}}}function Ha(e={},t={}){const r=(e.multiple_product_details||e.products||[]).map(o=>je(o,t)).filter(o=>!!o),n=e.table||Ka(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:xr(e.key_differences),specialCases:xr(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 Ka(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 Wa(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 Ja(e){return Object.freeze([...e])}function Zr(e,t,r="v1"){return`endpoint:${r}:${oe({endpoint:e,request:t})}`}function Za(e){const t=e.version||"v1",r=n=>o=>({partition:`${e.partitionPrefix}/${n}`,key:Zr(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 Ya(e){return{...e}}function Qa(e,t={}){return new Response(e.map(r=>JSON.stringify(r)).join(`
6
6
  `)+`
7
- `,{...t,headers:{"content-type":"application/x-ndjson",...t.headers||{}}})}function Tr(e,t={}){return new Response(JSON.stringify(e),{...t,headers:{"content-type":"application/json",...t.headers||{}}})}var Qe=new Set(["and","are","for","from","the","with"]),xr={token:.26,keyword:.22,category:.18,facet:.16,color:.08,attribute:.06,price:.08,retrieval:.08},Pr=["amber","beige","black","blue","blush","bronze","brown","cream","gold","green","grey","ivory","lilac","mixed","orange","pastel","pink","purple","red","silver","white","yellow"];function x(e){return String(e??"").normalize("NFKD").replace(new RegExp("\\p{Diacritic}","gu"),"").toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").replace(/\s+/gu," ").trim()}function k(e,t=Qe){const n=t instanceof Set?t:new Set([...Qe,...t]),r=new Set,o=[];for(const i of x(e).split(/\s+/u))i.length<3||n.has(i)||r.has(i)||(r.add(i),o.push(i));return o}function N(e,t={}){if(Or(e))return e;const n=t.facetKeys,r=S(e.category_names??e.category),o=S(e.category_ids),i=Rr(e.facet_hits),a=Object.entries(i).filter(([g])=>!n||n.some(h=>x(h)===x(g))).map(([,g])=>g),c=T(e.name,e.title),y=T(e.brand),m=t.sourceKeywords??[],d=[c,y,...r,...a,...S(e.promotions),T(e.description),...m].join(" "),s=k(d,t.stopWords),u=T(t.sourceProductType,Br(r,c,s),s[0]),l=P([...Mr(d,Pr),...Object.entries(i).filter(([g])=>/colou?r/iu.test(g)).flatMap(([,g])=>k(g,t.stopWords))]),p=P([...a.flatMap(g=>k(g,t.stopWords)),...S(e.promotions).flatMap(g=>k(g,t.stopWords))]).slice(0,24);return{sku:T(e.sku),title:c,brand:y,productType:u,categoryNames:r,categoryIds:o,facets:i,keywords:P([...m.flatMap(g=>k(g,t.stopWords)),...s]).slice(0,12),tokens:s,colors:l,attributes:p,price:Ur(e)}}function jr(e,t={}){const n=T(e.product_type,e.productType),r=T(e.title,n,S(e.keywords).join(" ")),o=P([...S(e.keywords),...S(e.colors),...S(e.materials),...S(e.styles),...S(e.attributes)]);return N({sku:"__photo__",name:r,category_names:n?[n]:[],facet_hits:{colors:S(e.colors).join(", "),materials:S(e.materials).join(", "),styles:S(e.styles).join(", "),attributes:S(e.attributes).join(", ")},promotions:o},{...t,sourceProductType:n,sourceKeywords:o})}function Cr(e,t={}){const n=N(e,t);return P([...t.sourceQueries??[],J([n.productType,...n.colors.slice(0,1),...n.attributes.slice(0,2)]),J([n.productType,...n.keywords.slice(0,3)]),J([n.categoryNames[n.categoryNames.length-1],...n.keywords.slice(0,2)]),J(n.title.split(/\s+/u).slice(0,6)),n.productType].map(r=>r.trim()).filter(Boolean)).slice(0,t.queryLimit??6)}function Xe(e,t,n={}){const r={...xr,...n.weights},o=N(t,n),i=[],a=U(e.tokens,o.tokens),c=U(e.keywords,o.tokens),y=vr(e.categoryNames,o.categoryNames)||U(Ze(e.categoryNames),Ze(o.categoryNames)),m=U(e.attributes,o.attributes),d=U(e.colors,o.colors),s=U(e.attributes,o.tokens),u=Lr(e.price,o.price),l=Nr(o.sku,n.hitCounts)>0?1:0,p=Dr(e,o),g=a*r.token+c*r.keyword+y*r.category+m*r.facet+d*r.color+s*r.attribute+u*r.price+l*r.retrieval,h=$r(p?g:g*.35);return p&&e.productType&&e.productType===o.productType&&i.push("same product type"),y>.4&&i.push("similar category"),m>.2&&i.push("matching product attributes"),d>0&&i.push("matching colour"),u>.8&&i.push("similar price"),p||i.push("weaker product-type match"),{score:Number(h.toFixed(4)),reasons:i}}function Ir(e,t,n={}){const r=N(e,n),o=new Set([r.sku,...n.ignoreSkus??[]].filter(Boolean));return t.filter(i=>{const a=T(i.sku);return a&&!o.has(a)}).map(i=>{const a=Xe(r,i,n);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(n.limit??12,100)))}function Or(e){return!!(e&&typeof e=="object"&&Array.isArray(e.tokens))}function T(...e){for(const t of e)if(typeof t=="string"&&t.trim())return t.trim();return""}function S(e){return Array.isArray(e)?e.map(t=>T(t)).filter(Boolean):typeof e=="string"&&e.trim()?e.split(/[,;/|]+/u).map(t=>t.trim()).filter(Boolean):[]}function Rr(e){return!e||typeof e!="object"||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).map(([t,n])=>[t,T(n)]).filter(([,t])=>t))}function Ur(e){const t=Number(e.price_discounted);if(Number.isFinite(t)&&t>0)return t;const n=Number(e.price);return Number.isFinite(n)&&n>0?n:0}function P(e){const t=new Set,n=[];for(const r of e){const o=x(r);!o||t.has(o)||(t.add(o),n.push(o))}return n}function Mr(e,t){const n=` ${x(e)} `;return t.filter(r=>n.includes(` ${x(r)} `))}function Br(e,t,n){const r=x(e[e.length-1]??e[0]??"");if(r){const o=k(r),i=new Set(k(t));return o.find(a=>i.has(a))??o[0]??r}return n[0]??""}function J(e){return e.map(t=>x(t)).filter(Boolean).join(" ").replace(/\s+/gu," ").trim().slice(0,120)}function Ze(e){return e.flatMap(t=>k(t))}function U(e,t){const n=P(e),r=new Set(P(t));return n.length===0||r.size===0?0:n.filter(o=>r.has(o)).length/n.length}function vr(e,t){const n=P(e),r=new Set(P(t));return n.length===0||r.size===0?0:n.filter(o=>r.has(o)).length/n.length}function Lr(e,t){return e<=0||t<=0?0:Math.min(e,t)/Math.max(e,t)}function Nr(e,t){return!e||!t?0:typeof t.get=="function"?t.get(e)??0:t[e]??0}function Dr(e,t){if(!e.productType||!t.productType||e.productType===t.productType)return!0;const n=new Set(k(e.productType)),r=new Set([...k(t.productType),...t.tokens]);return[...n].some(o=>r.has(o))}function $r(e){return Math.max(0,Math.min(1,e))}function Fr(e){const t=(e?.chat||e?._chat)?.root||e?._chat?.root;return t?t.getRootNode?.()?.host||t:Array.from(document.querySelectorAll("*")).find(n=>n.shadowRoot?.querySelector?.(".gengage-chat-root, .gengage-chat-launcher-container"))}function qr(e,t){const n=Fr(e);n?.style&&(t?n.style.removeProperty("display"):n.style.setProperty("display","none","important")),t||(e?.chat||e?._chat)?.close?.()}var Kr="nd_be_url";function zr(e,t){const n=Jr()||e.beUrl||t;if(!n)throw new Error("resolveBeUrl: backend URL is required. The injector must supply a fallback URL; the SDK has no default.");return n}function Jr(){try{const e=new URLSearchParams(window.location.search).get(Kr)?.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 et(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}const n=e?.action;return n&&typeof n.payload=="string"?n.payload:n&&typeof n.title=="string"?n.title:""}var tt=[{pattern:/\bhttps?:\/\/[^\s?#]+(?:\?[^\s#]*)?/giu,replacement:Gr},{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]"}],ce={patterns:tt};function nt(e,t=ce){let n=typeof e=="string"?e:e==null?"":String(e);for(const r of t.patterns||[]){const o=r.replacement;n=typeof o=="function"?n.replace(r.pattern,i=>o(i)):n.replace(r.pattern,o)}return n}function Hr(e,t=ce){return nt(et(e),t)}function Gr(e){try{const t=new URL(e);return`${t.origin}${t.pathname}${t.search?"?[query]":""}`}catch{return"[url]"}}var Wr=["assistantName","homeDomain","categories","policyTopics"],Vr={intent:["searchContract","competitorBrands"]};function Yr(e,t,n,r={}){const o=rt(t,n,r);return Object.keys(o).length?{...e,account_config:o}:e}function rt(e,t,n={}){if(!e)return{};const r={},o=n.baseKeys||Wr;for(const c of o)ot(r,e,c);const i=e[t];i&&typeof i=="object"&&!Array.isArray(i)&&Object.assign(r,Qr(i));const a=n.opAllowlist||Vr;for(const c of a[t]||[])ot(r,e,c);return r}function ot(e,t,n){t[n]!==void 0&&(e[n]=t[n])}function Qr(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var Xr=["addToCart","search","searchKeyword","facetedSearch","searchGiftOptions","similaritySearch"];function Zr(e,t,n={}){const r=window,o=r.gengage||(r.gengage={}),i=o.tools||(o.tools={});i[e]=t;for(const a of n.accountAliases||[])i[a]=t;if(n.exposeStandardAliases!==!1)for(const a of n.standardAliases||Xr){const c=t[a];typeof c=="function"&&(i[a]=i[a]||c)}return t}function eo({getPageType:e,getProduct:t}){return()=>({url:window.location.href,title:document.title,pageType:e(),product:t()})}function to({accountId:e,getPageType:t,getProduct:n,getToolNames:r,getSearchCapabilities:o,getMemory:i}){return async()=>({accountId:e,url:window.location.href,pageType:t(),productSku:n()?.sku??null,toolNames:r(),...o?{searchCapabilities:o()}:{},...i?{memoryPolicy:i().policy}:{},timestamp:new Date().toISOString()})}function no({accountId:e,runtimeFile:t="runtime.js",startExport:n="start",globalBaseUrlKey:r,errorLabel:o}={}){if(!e)throw new Error("accountId is required.");const i=o||e,a=window,c=()=>{const s=a.GengageInjectorConfig||{},u=s[e]||{};return{...s,...u}},y=()=>{const s=c();if(s.runtimeUrl)return s.runtimeUrl;const u=s.assetBaseUrl||s.baseUrl||document.currentScript?.getAttribute("src")||(r?a[r]:null);if(!u)throw new Error(`${i} runtime URL cannot be resolved.`);return new URL(t,u).href},m=a.GengageAssistantInjector||(a.GengageAssistantInjector={}),d=m[e]||(m[e]={});return d.loaderPromise||(d.loaderPromise=import(y()).then(s=>{const u=s[n];if(typeof u!="function")throw new Error(`${i} runtime export ${n} is unavailable.`);return u()}).catch(s=>{throw delete d.loaderPromise,console.error(`[Gengage][${e}] runtime load failed`,s),s})),d.loaderPromise}f.AgentError=D,f.ContextStore=me,f.action=Zt,f.actionButtonsUiSpec=Sr,f.alignProductsToTable=Ve,f.anonymousRequestText=Hr,f.beErrorToAgentError=G,f.buildPhotoSimilarityProfile=jr,f.buildProductSimilarityProfile=N,f.buildSimilarityQueries=Cr,f.canUseModuleWorker=ie,f.caughtToStreamError=be,f.compactAccountConfig=rt,f.compactContextProducts=lr,f.comparisonResultForUi=pr,f.comparisonUiSpec=br,f.createBrowserMemory=oe,f.createDiagnosticsTool=to,f.createEndpointCachePolicies=kr,f.createEndpointHandlers=_r,f.createFlow=Ar,f.createInjectorAdapter=Ce,f.createMainThreadInjectorAdapter=Ie,f.createModuleWorker=We,f.createReadPageTool=eo,f.defaultPiiPatternPack=ce,f.defaultPiiPatterns=tt,f.done=Y,f.elapsedMs=I,f.endpointStableKey=Ye,f.error=Te,f.httpErrorToAgentError=we,f.installBrowserTools=Zr,f.installFetchTransportBridge=Kn,f.jsonResponse=Tr,f.llmCacheKey=Pn,f.metadata=Qt,f.mountAccount=ur,f.ndjsonResponse=Er,f.normalizeComparisonTable=ae,f.normalizeProduct=q,f.normalizeSimilarityText=x,f.nowIso=le,f.productDetailsUiSpec=wr,f.productFactsKey=Cn,f.productSkuKey=jn,f.productsUiSpec=hr,f.rankSimilarProducts=Ir,f.redactPii=nt,f.requestText=et,f.resolveBeUrl=zr,f.resolveFlow=xe,f.scoreSimilarityCandidate=Xe,f.setAssistantHostVisible=qr,f.stableKey=R,f.startLazyRuntimeLoader=no,f.textChunk=Ee,f.textKey=In,f.tokenizeSimilarityText=k,f.trimProductFactsCore=K,f.trimProductFactsListCore=xn,f.uiSpec=Xt,f.withAccountConfig=Yr})(this.Gengage=this.Gengage||{});
7
+ `,{...t,headers:{"content-type":"application/x-ndjson",...t.headers||{}}})}function Xa(e,t={}){return new Response(JSON.stringify(e),{...t,headers:{"content-type":"application/json",...t.headers||{}}})}var ke=new Set(["and","are","for","from","the","with"]),es={token:.26,keyword:.22,category:.18,facet:.16,color:.08,attribute:.06,price:.08,retrieval:.08},ts=["amber","beige","black","blue","blush","bronze","brown","cream","gold","green","grey","ivory","lilac","mixed","orange","pastel","pink","purple","red","silver","white","yellow"];function V(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 N(e,t=ke,r){const n=t instanceof Set?t:new Set([...ke,...t]),o=new Set,i=[];for(const a of V(e,r).split(/\s+/u))a.length<3||n.has(a)||o.has(a)||(o.add(a),i.push(a));return i}function ae(e,t={}){if(ss(e))return e;const r=t.similarityMapper?.(e);if(r)return r;const n=t.facetKeys,o=j(e.category_names??e.category),i=j(e.category_ids),a=cs(e.facet_hits),s=Object.entries(a).filter(([m])=>!n||n.some(b=>V(b,t.locale)===V(m,t.locale))).map(([,m])=>m),c=$(e.name,e.title),u=$(e.brand),l=t.sourceKeywords??[],f=[c,u,...o,...s,...j(e.promotions),$(e.description),...l].join(" "),g=N(f,t.stopWords,t.locale),p=$(t.sourceProductType,ds(o,c,g,t.locale),g[0]),y=H([...ls(f,ts,t.locale),...Object.entries(a).filter(([m])=>/colou?r/iu.test(m)).flatMap(([,m])=>N(m,t.stopWords,t.locale))],t.locale),h=H([...s.flatMap(m=>N(m,t.stopWords,t.locale)),...j(e.promotions).flatMap(m=>N(m,t.stopWords,t.locale))],t.locale).slice(0,24);return{sku:$(e.sku),title:c,brand:u,productType:p,categoryNames:o,categoryIds:i,facets:a,keywords:H([...l.flatMap(m=>N(m,t.stopWords,t.locale)),...g],t.locale).slice(0,12),tokens:g,colors:y,attributes:h,price:us(e)}}function rs(e,t={}){const r=$(e.product_type,e.productType),n=$(e.title,r,j(e.keywords).join(" ")),o=H([...j(e.keywords),...j(e.colors),...j(e.materials),...j(e.styles),...j(e.attributes)]);return ae({sku:"__photo__",name:n,category_names:r?[r]:[],facet_hits:{colors:j(e.colors).join(", "),materials:j(e.materials).join(", "),styles:j(e.styles).join(", "),attributes:j(e.attributes).join(", ")},promotions:o},{...t,sourceProductType:r,sourceKeywords:o})}function ns(e,t={}){const r=ae(e,t);return H([...t.sourceQueries??[],Ne([r.productType,...r.colors.slice(0,1),...r.attributes.slice(0,2)]),Ne([r.productType,...r.keywords.slice(0,3)]),Ne([r.categoryNames[r.categoryNames.length-1],...r.keywords.slice(0,2)]),Ne(r.title.split(/\s+/u).slice(0,6)),r.productType].map(n=>n.trim()).filter(Boolean)).slice(0,t.queryLimit??6)}function Et(e,t,r={}){const n={...es,...r.weights},o=ae(t,r),i=[],a=se(e.tokens,o.tokens,r.locale),s=se(e.keywords,o.tokens,r.locale),c=fs(e.categoryNames,o.categoryNames,r.locale)||se(Xr(e.categoryNames,r.locale),Xr(o.categoryNames,r.locale),r.locale),u=se(e.attributes,o.attributes,r.locale),l=se(e.colors,o.colors,r.locale),f=se(e.attributes,o.tokens,r.locale),g=ps(e.price,o.price),p=ms(o.sku,r.hitCounts)>0?1:0,y=gs(e,o),h=a*n.token+s*n.keyword+c*n.category+u*n.facet+l*n.color+f*n.attribute+g*n.price+p*n.retrieval,m=ys(y?h:h*.35);return y&&e.productType&&e.productType===o.productType&&i.push("same product type"),c>.4&&i.push("similar category"),u>.2&&i.push("matching product attributes"),l>0&&i.push("matching colour"),g>.8&&i.push("similar price"),y||i.push("weaker product-type match"),{score:Number(m.toFixed(4)),reasons:i}}function os(e,t,r={}){const n=ae(e,r),o=new Set([n.sku,...r.ignoreSkus??[]].filter(Boolean));return Yr(t.filter(i=>{const a=$(i.sku);return a&&!o.has(a)}),r.maxCandidates).map(i=>{const a=Et(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 is(e,t,r={}){const n=ae(e,r),o=new Set([n.sku,...r.ignoreSkus??[]].filter(Boolean)),i=Yr(t.filter(c=>{const u=$(c.sku);return u&&!o.has(u)}),r.maxCandidates),a=Math.max(1,Math.floor(r.batchSize??50)),s=[];for(let c=0;c<i.length;c+=1){Qr(r.signal);const u=i[c],l=Et(n,u,r);s.push({...u,similarity_score:l.score,similarity_reasons:l.reasons}),(c+1)%a===0&&await as(r.yield)}return Qr(r.signal),s.sort((c,u)=>u.similarity_score-c.similarity_score).slice(0,Math.max(1,Math.min(r.limit??12,100)))}function Yr(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 as(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 Qr(e){if(e?.aborted)throw new DOMException("Similarity ranking aborted.","AbortError")}function ss(e){return!!(e&&typeof e=="object"&&Array.isArray(e.tokens))}function $(...e){for(const t of e)if(typeof t=="string"&&t.trim())return t.trim();return""}function j(e){return Array.isArray(e)?e.map(t=>$(t)).filter(Boolean):typeof e=="string"&&e.trim()?e.split(/[,;/|]+/u).map(t=>t.trim()).filter(Boolean):[]}function cs(e){return!e||typeof e!="object"||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).map(([t,r])=>[t,$(r)]).filter(([,t])=>t))}function us(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 H(e,t){const r=new Set,n=[];for(const o of e){const i=V(o,t);!i||r.has(i)||(r.add(i),n.push(i))}return n}function ls(e,t,r){const n=` ${V(e,r)} `;return t.filter(o=>n.includes(` ${V(o,r)} `))}function ds(e,t,r,n){const o=V(e[e.length-1]??e[0]??"",n);if(o){const i=N(o,ke,n),a=new Set(N(t,ke,n));return i.find(s=>a.has(s))??i[0]??o}return r[0]??""}function Ne(e){return e.map(t=>V(t)).filter(Boolean).join(" ").replace(/\s+/gu," ").trim().slice(0,120)}function Xr(e,t){return e.flatMap(r=>N(r,ke,t))}function se(e,t,r){const n=H(e,r),o=new Set(H(t,r));return n.length===0||o.size===0?0:n.filter(i=>o.has(i)).length/n.length}function fs(e,t,r){const n=H(e,r),o=new Set(H(t,r));return n.length===0||o.size===0?0:n.filter(i=>o.has(i)).length/n.length}function ps(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 gs(e,t){if(!e.productType||!t.productType||e.productType===t.productType)return!0;const r=new Set(N(e.productType)),n=new Set([...N(t.productType),...t.tokens]);return[...r].some(o=>n.has(o))}function ys(e){return Math.max(0,Math.min(1,e))}function hs(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 bs(e,t){const r=hs(e);r?.style&&(t?r.style.removeProperty("display"):r.style.setProperty("display","none","important")),t||(e?.chat||e?._chat)?.close?.()}var ws="nd_be_url";function ks(e,t){const r=Ss()||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 Ss(){try{const e=new URLSearchParams(window.location.search).get(ws)?.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 en(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 Ct=[{pattern:/\bhttps?:\/\/[^\s?#]+(?:\?[^\s#]*)?/giu,replacement:vs},{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]"}],Pt={patterns:Ct};function jt(e,t=Pt){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 tn(e,t=Pt){return jt(en(e),t)}function vs(e){try{const t=new URL(e);return`${t.origin}${t.pathname}${t.search?"?[query]":""}`}catch{return"[url]"}}var _s=["assistantName","homeDomain","categories","policyTopics"],As={intent:["searchContract","competitorBrands"]};function xs(e,t,r,n={}){const o=rn(t,r,n);return Object.keys(o).length?{...e,account_config:o}:e}function rn(e,t,r={}){if(!e)return{};const n={},o=r.baseKeys||_s;for(const s of o)nn(n,e,s);const i=e[t];i&&typeof i=="object"&&!Array.isArray(i)&&Object.assign(n,Ts(i));const a=r.opAllowlist||As;for(const s of a[t]||[])nn(n,e,s);return n}function nn(e,t,r){t[r]!==void 0&&(e[r]=t[r])}function Ts(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var Es=["addToCart","search","searchKeyword","facetedSearch","searchGiftOptions","similaritySearch"];function Cs(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||Es){const s=t[a];typeof s=="function"&&(i[a]=i[a]||s)}return t}function Ps({getPageType:e,getProduct:t}){return()=>({url:window.location.href,title:document.title,pageType:e(),product:t()})}function js({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 Rs({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}},u=()=>{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},l=p=>{if(i===!0)return p;const y=new URL(p,window.location.href).origin,h=new Set([window.location.origin]),m=c();Se(h,document.currentScript?.getAttribute("src")),Se(h,m.assetBaseUrl),Se(h,m.baseUrl),Se(h,n?s[n]:void 0);for(const b of i||[])Se(h,b);if(!h.has(y))throw new Error(`${a} runtime origin ${y} is not trusted.`);return p},f=s.GengageAssistantInjector||(s.GengageAssistantInjector={}),g=f[e]||(f[e]={});return g.loaderPromise||(g.loaderPromise=import(l(u())).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 g.loaderPromise,console.error(`[Gengage][${e}] runtime load failed`,p),p})),g.loaderPromise}function Se(e,t){if(t)try{const r=new URL(t,window.location.href);e.add(r.origin)}catch{e.add(t)}}var Ls=500,on="__GENGAGE_AGENTIC_ACTIVITY__";function an({accountId:e,clock:t=()=>Date.now()}={}){const r=new Set;let n=1;const o={accountId:e,entries:[]};function i(a){const s=cn({id:n++,at:t(),accountId:e,...a});o.entries.push(s),o.entries.length>Ls&&(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 sn(e){const t=window[on];if(t?.accountId===e&&typeof t.record=="function")return t;const r=an({accountId:e});return window[on]=r,r}function cn(e){const t=String(e.kind||e.type||"activity"),r=un(t);return{...e,kind:t,section:r,severity:e.severity||ln({...e,kind:t}),group:e.group||dn({...e,kind:t,section:r})}}function un(e){return e.startsWith("flow/")?"Flow":e.startsWith("intent/")?"Intent":e.startsWith("be/")?"Backend":e.startsWith("tool/")?"Tools":e==="beacon"?"Telemetry":"Runtime"}function ln(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 dn(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 Is=8,Rt=120;function fn(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)Os(r,n,o);return r.tools=Ot(r.tools).slice(-8),r.beOps=Ot(r.beOps).slice(-8),r.uiSurfaces=Ot(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 ve(e,t=""){if(!e||typeof e!="object")return null;const r=L({source:t,panel:$e(e.panel||e.panel_state),threadExtensions:Ds(e.thread?.extensions||e.threadExtensions||e.extensions),pageProduct:Gs(e.product||e.page?.product),products:Ue(e.products||e.last_search_products||e.items),ui:Lt(e.spec),intent:It(e.intent),route:Fe({searchParams:e.searchParams||e.search_params,flowParams:e.flowParams||e.flow_params})});return Object.keys(r).some(n=>n!=="source")?r:null}function $e(e){if(!e||typeof e!="object")return null;const t=Ue(e.last_search_products||e.current_panel_products),r=ce(e.screen_sku_list||e.search_suggestions_skus);return L({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:ce(e.chat_mentioned_skus),lastSearch:zs(e.last_search),productCount:t?.count??Bt(e.current_panel_product_count),productSkus:t?.skus})}function Lt(e,t="",r=""){if(!e||typeof e!="object")return null;const n=Vs(e);if(!n)return null;const o=n.props||{},i=n.type==="ProductDetailsPanel"?Ue([o.product||o.item].filter(Boolean)):Ue(o.products||o.items||o.cards),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 L({widget:t,panelHint:r,rootType:n.type,productCount:i?.count,productSkus:i?.skus,buttonCount:a.length||void 0,buttonLabels:a.length?ce(a.map(c=>c.label||c.title)):void 0,comparisonRows:s})}function Os(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&&qe(t,r.state),r.kind){case"flow/request":Bs(e,t,r);break;case"flow/metadata":Ms(e,t,r);break;case"flow/ui":Ns(e,t,r);break;case"flow/text-final":t.lastText=k(r.content,Rt),R(e,r,"Text",t.lastText,"done");break;case"flow/done":e.status=e.status==="error"?"error":"done",e.current="Done",R(e,r,"Done","Flow completed","done");break;case"flow/error":case"flow/rejected":case"flow/thrown":e.status="error",e.current="Flow error",R(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"),R(e,r,"Tool",r.tool||"tool","running");break;case"tool/done":e.tools.push(r.tool||"tool"),R(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"),R(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"),$s(t,r),R(e,r,"BE",r.op||"request","running");break;case"be/response":e.beOps.push(r.op||r.result?.op||"unknown"),qs(t,r.result),R(e,r,"BE",r.op||r.result?.intent?.kind||"response",r.severity||"done");break;case"intent/selected":t.intent=It(r.intent),t.route=Fe({searchParams:r.searchParams,flowParams:r.flowParams}),e.current=`Intent: ${t.intent?.kind||"selected"}`,R(e,r,"Intent",t.intent?.kind||"selected","done");break;default:r.kind?.startsWith?.("runtime/")&&R(e,r,"Runtime",r.title||r.kind,"done");break}}function Bs(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",qe(t,ve(n.context||{},"request.context")),R(e,r,"Request",[e.requestType,e.actionType].filter(Boolean).join(" / ")||"request","running")}function Ms(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"),qe(t,ve(n,"flow.metadata")),R(e,r,"Metadata",k(n.name||n.phase||n.type||"metadata"),r.severity)}function Ns(e,t,r){const n=Lt(r.spec,r.widget,r.panelHint);n&&(t.ui=n,t.products=n.productCount?{count:n.productCount,skus:n.productSkus||[]}:t.products,e.uiSurfaces.push(n.rootType),e.current=`UI: ${n.rootType}`,R(e,r,"UI",n.rootType||"ui","done"))}function $s(e,t){const r=t.params||{};qe(e,ve(r,"be.params")),r.panel_state&&(e.panel=$e(r.panel_state)),r.structured_context&&(e.panel=pn(e.panel,$e(r.structured_context)));const n=Fe({searchParams:r.search_params,flowParams:r.flow_params});n&&(e.route=n)}function qs(e,t){if(!t||typeof t!="object")return;t.intent&&(e.intent=It(t.intent));const r=Fe({searchParams:t.search_params,flowParams:t.flow_params});r&&(e.route=r)}function qe(e,t){!t||typeof t!="object"||(t.panel&&(e.panel=pn(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 pn(e,t){return e?t?L({...e,...t}):e:t||null}function R(e,t,r,n,o="done"){e.timeline.push(L({id:t.id,at:t.at,label:r,detail:k(n,Rt),status:o==="info"?"done":o,kind:t.kind}))}function It(e){return!e||typeof e!="object"?null:L({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 Fe({searchParams:e,flowParams:t}={}){const r=L({search:Fs(e),flow:Us(t)});return Object.keys(r).length?r:null}function Fs(e){return!e||typeof e!="object"?null:L({query:k(e.query||e.search_query),category:k(e.category||e.category_name||e.categoryName),categoryId:k(e.categoryId||e.category_id),limit:Bt(e.limit),facets:Array.isArray(e.facets)?e.facets.length:void 0})}function Us(e){return!e||typeof e!="object"?null:L({target:k(e.target),sku:k(e.sku||e.product_sku),skus:ce(e.skus||e.sku_list),action:k(e.action||e.action_type)})}function Ds(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"?L({keys:Object.keys(n).slice(0,8),summary:k(n.summary||n.occasion||n.target_date_iso||n.type)}):k(n));return t}function zs(e){return!e||typeof e!="object"?null:L({query:k(e.query),source:k(e.source),category:k(e.category||e.category_name),count:Bt(e.count)})}function Ue(e){if(!Array.isArray(e))return null;const t=e.filter(Boolean);return L({count:t.length,skus:ce(t.map(r=>r?.sku||r?.code||r?.id)),names:ce(t.map(r=>r?.name||r?.title),4)})}function Gs(e){return!e||typeof e!="object"?null:L({sku:k(e.sku||e.code||e.id),name:k(e.name||e.title),category:k(e.category),url:k(e.url)})}function Vs(e){const t=e.elements||{};return t[e.root||"root"]||t.root||e.rootElement||null}function ce(e,t=Is){if(!Array.isArray(e))return;const r=e.map(n=>k(n)).filter(Boolean);return r.length?r.slice(0,t):void 0}function Ot(e){return[...new Set(e.map(t=>k(t)).filter(Boolean))]}function Bt(e){return Number.isFinite(Number(e))?Number(e):void 0}function k(e,t=Rt){const r=String(e??"").replace(/\s+/gu," ").trim();return r.length>t?`${r.slice(0,t-1)}...`:r}function L(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 mn(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:tc(c),state:ve(c,`tool:${n}`)}),c}catch(c){throw t.record({kind:"tool/error",tool:n,params:a,error:ue(c)}),c}},Object.defineProperty(r[n],"__gengageActivityWrapped",{value:!0}));return r}function gn(e,t){return t?r=>(t.record({kind:"beacon",payload:r}),e?.(r)):e}function yn(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,u){t.record({kind:"flow/request",request:a});try{const l=n.call(this,a,Hs(s,t),c,u);return l&&typeof l.then=="function"?l.catch(f=>{throw t.record({kind:"flow/rejected",requestType:a?.type,error:ue(f)}),f}):l}catch(l){throw t.record({kind:"flow/thrown",requestType:a?.type,error:ue(l)}),l}};return Object.defineProperty(o,"__gengageActivityWrapped",{value:!0}),r.streamTransport=o,t.record({kind:"runtime/transport-wrapped",title:"streamTransport wrapped"}),!0}function hn({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=Ys(o,i),s=Xs(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 Ks({accountId:e,opName:c,promptBaseUrl:r}),params:a.body?.op_payload||{},rawBody:a.body}));const u=await n(o,i);return s&&u.clone().text().then(l=>{const f=ec(l);t.record({kind:"be/response",source:"main-thread-fetch",url:a.url,status:u.status,op:c,result:f,rawText:l}),wn(t,f)}).catch(l=>{t.record({kind:"be/response",source:"main-thread-fetch",url:a.url,status:u.status,op:c,error:ue(l)})}),u})}function Hs(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:ue(o[0])}):n==="onDone"&&t.record({kind:"flow/done"}),e[n](...o)));return r}function bn(e,t){!e||!t||(e.record(t),t.kind==="be/response"&&wn(e,t.result))}async function Ks({accountId:e,opName:t,promptBaseUrl:r}){if(!e||!t)return null;const n=Ws({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:ue(o)}}}function Ws({accountId:e,baseId:t,promptBaseUrl:r}){if(typeof r=="string"&&r.trim())return r;const n=Js(e,t);return n||Zs(t)}function Js(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 Zs(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 wn(e,t){const r=t?.intent;r&&e.record({kind:"intent/selected",intent:r,searchParams:t?.search_params,flowParams:t?.flow_params})}function Ys(e,t){const r=typeof e=="string"?e:e?.url||"",n=t?.body||(typeof e!="string"?e?.body:null);return{url:String(r||""),body:Qs(n)}}function Qs(e){if(!e||typeof e!="string")return{};try{return JSON.parse(e)}catch{return{raw:e}}}function Xs(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 ec(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 tc(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 ue(e){return e?.message||String(e)}var kn="gengage-agentic-activity-overlay",_e="all",Mt="all",Sn=["Flow","Tools","Backend","Intent","Telemetry","Runtime"],vn=["info","warn","error"];function _n(e){if(!e||typeof e.subscribe!="function")return null;const t=document.getElementById(kn);if(t?.shadowRoot)return t;const r=document.createElement("div");r.id=kn,r.style.cssText="position:fixed;left:10px;top:10px;z-index:2147483647;";const n=r.attachShadow({mode:"open"});n.innerHTML=Ac(e.accountId),document.documentElement.appendChild(r);const o={entries:[],section:_e,severity:Mt,search:"",grouped:!0,follow:!0,stateVisible:!0},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"]')};rc(r,i.list);const a=()=>oc(i,o);return n.querySelector('[data-action="clear"]')?.addEventListener("click",()=>e.clear()),n.querySelector('[data-action="toggle"]')?.addEventListener("click",s=>{i.panel.classList.toggle("is-minimized"),s.currentTarget.textContent=i.panel.classList.contains("is-minimized")?"Open":"Min"}),i.search?.addEventListener("input",()=>{o.search=i.search.value||"",a()}),i.sections?.addEventListener("click",s=>{const c=s.target?.closest?.("[data-section-filter]")?.dataset?.sectionFilter;c&&(o.section=c,a())}),i.severities?.addEventListener("click",s=>{const c=s.target?.closest?.("[data-severity-filter]")?.dataset?.severityFilter;c&&(o.severity=c,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()}),n.querySelector('[data-action="expand-all"]')?.addEventListener("click",()=>{i.list?.querySelectorAll("details").forEach(s=>{s.open=!0})}),n.querySelector('[data-action="collapse-all"]')?.addEventListener("click",()=>{i.list?.querySelectorAll("details").forEach(s=>{s.open=!1})}),i.list?.addEventListener("click",s=>{const c=s.target?.closest?.('[data-action="copy-json"]');if(!c)return;const u=Number(c.dataset.entryId||0);Sc(o.entries.find(l=>l.id===u),c)}),e.subscribe((s,c)=>{o.entries=c.slice(),a()}),r}function rc(e,t){e.addEventListener("wheel",r=>{const n=nc(r.composedPath?.()||[],t);n&&(n.scrollTop+=r.deltaY,n.scrollLeft+=r.deltaX,r.preventDefault(),r.stopPropagation())},{passive:!1,capture:!0})}function nc(e,t){for(const r of e)if(!(!r||r.nodeType!==1)&&An(r))return r;return An(t)?t:null}function An(e){return!!(e&&(e.scrollHeight>e.clientHeight+1||e.scrollWidth>e.clientWidth+1)&&getComputedStyle(e).overflow!=="hidden")}function oc(e,t){const r=xn(t.entries,t),n=r.slice(-260);Tn(e.sections,t.entries,t.section,"section"),Tn(e.severities,t.entries,t.severity,"severity"),e.count&&(e.count.textContent=String(t.entries.length)),e.visibleCount&&(e.visibleCount.textContent=String(r.length)),cc(e.stateView,fn(t.entries),t.stateVisible),sc(e.list,n,t)}function xn(e,t={}){const r=t.section||_e,n=t.severity||Mt,o=Rn(t.search);return(Array.isArray(e)?e:[]).filter(i=>r!==_e&&i.section!==r||n!==Mt&&i.severity!==n?!1:o?_c(i).includes(o):!0)}function Tn(e,t,r,n){if(!e)return;e.textContent="";const o=n==="section"?ic(t):ac(t),i=document.createElement("button");i.type="button",i.dataset[`${n}Filter`]=_e,i.className=r===_e?"chip is-active":"chip",i.textContent=`All ${t.length}`,e.appendChild(i);for(const a of o){const s=t.filter(u=>u[n]===a).length,c=document.createElement("button");c.type="button",c.dataset[`${n}Filter`]=a,c.className=r===a?`chip is-active ${n}-${le(a)}`:`chip ${n}-${le(a)}`,c.textContent=`${On(a)} ${s}`,e.appendChild(c)}}function ic(e){const t=new Set(e.map(r=>r.section).filter(Boolean));return Sn.filter(r=>t.has(r)).concat([...t].filter(r=>!Sn.includes(r)).sort())}function ac(e){const t=new Set(e.map(r=>r.severity).filter(Boolean));return vn.filter(r=>t.has(r)).concat([...t].filter(r=>!vn.includes(r)).sort())}function sc(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 wc(t))n.appendChild(kc(o));else for(const o of t)n.appendChild(Cn(o));e.appendChild(n),r.follow&&requestAnimationFrame(()=>e.scrollTop=e.scrollHeight)}function cc(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(uc(n)),i.appendChild(lc(o)),i.appendChild(dc(n.timeline)),e.appendChild(i)}function uc(e){const t=document.createElement("section");return t.className=`viz-card flow-card status-${le(e.status)}`,t.appendChild(Nt("Flow State",e.status)),En(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",fc(e)]]),t}function lc(e){const t=document.createElement("section");return t.className="viz-card context-card",t.appendChild(Nt("Context State",e.panel?.screenType||e.ui?.rootType||"empty")),En(t,[["Intent",pc(e.intent)],["Route",mc(e.route)],["Screen",gc(e)],["Last search",yc(e.panel?.lastSearch)],["Products",hc(e.panel,e.products)],["Page product",bc(e.pageProduct)],["Extensions",Object.keys(e.threadExtensions||{}).join(", ")],["Last text",e.lastText]]),t}function dc(e){const t=document.createElement("section");t.className="viz-card timeline-card",t.appendChild(Nt("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-${le(n.status||"done")}`;const i=document.createElement("span");i.className="timeline-time",i.textContent=In(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 Nt(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 En(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 fc(e){return!e.errors&&!e.warnings?"clean":`${e.errors||0} errors, ${e.warnings||0} warnings`}function pc(e){return e?[e.kind,e.target,e.confidence!=null?`conf ${e.confidence}`:""].filter(Boolean).join(" / "):""}function mc(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 gc(e){const t=e.panel||{},r=e.ui||{};return[t.screenType,r.rootType,r.widget,r.panelHint].filter(Boolean).join(" / ")}function yc(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 bc(e){return e?[e.sku,e.name,e.category].filter(Boolean).join(" / "):""}function wc(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=vc(o.severity,r.severity),t.set(n,o)}return[...t.values()]}function kc(e){const t=document.createElement("section");t.className=`group group-${le(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(Cn(a));return t}function Cn(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-${le(e.severity||"info")}`,t.open=e.severity==="error";const r=document.createElement("summary"),n=document.createElement("span");n.className="time",n.textContent=In(e.at);const o=document.createElement("span");o.className="section",o.textContent=e.section||"Runtime";const i=document.createElement("span");i.className="severity",i.textContent=On(e.severity||"info");const a=document.createElement("span");a.className="title",a.textContent=Ln(e),r.append(n,o,i,a);const s=document.createElement("div");s.className="entry-body";const c=document.createElement("div");c.className="entry-toolbar";const u=document.createElement("span");u.className="kind",u.textContent=e.kind;const l=document.createElement("span");l.className="kind",l.textContent=e.group||"";const f=document.createElement("button");f.type="button",f.dataset.action="copy-json",f.dataset.entryId=String(e.id||""),f.textContent="Copy JSON",c.append(u,l,f);const g=document.createElement("pre"),p=document.createElement("code");return p.innerHTML=Pn(e),g.appendChild(p),s.append(c,g),t.append(r,s),t}function Pn(e){const t=$t(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+=De(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}">${De(a)}</span>`,o=i.index+a.length}return n+De(t.slice(o))}function Sc(e,t){if(!e)return;const r=$t(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(()=>jn(r,n));return}jn(r,n)}function jn(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 vc(e,t){const r={info:0,warn:1,error:2};return(r[t]||0)>(r[e]||0)?t:e}function _c(e){return Rn([e.kind,e.section,e.severity,e.group,Ln(e),e.tool,e.op,e.request?.type,e.request?.action?.type,e.event?.name,e.event?.action,e.event?.type,$t(e)].join(" "))}function Rn(e){return String(e||"").toLocaleLowerCase("tr-TR").trim()}function Ln(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 Ac(e){return`
9
+ <style>
10
+ :host { all: initial; }
11
+ .panel {
12
+ width: 560px;
13
+ max-width: calc(100vw - 20px);
14
+ max-height: min(82vh, 820px);
15
+ display: flex;
16
+ flex-direction: column;
17
+ overflow: hidden;
18
+ color: #1f2937;
19
+ background: rgba(255, 255, 255, 0.98);
20
+ border: 1px solid #b8c2d2;
21
+ border-radius: 8px;
22
+ box-shadow: 0 18px 48px rgba(17, 24, 39, 0.24);
23
+ font: 12px/1.4 Inter, Arial, sans-serif;
24
+ }
25
+ .head {
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: space-between;
29
+ gap: 10px;
30
+ padding: 9px 10px;
31
+ background: #111827;
32
+ color: #fff;
33
+ font-weight: 700;
34
+ }
35
+ .meta { display: flex; gap: 7px; align-items: center; min-width: 0; }
36
+ .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
37
+ .count { color: #d1d5db; font-weight: 600; white-space: nowrap; }
38
+ .actions { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
39
+ button {
40
+ appearance: none;
41
+ border: 1px solid rgba(255,255,255,0.34);
42
+ border-radius: 5px;
43
+ background: rgba(255,255,255,0.12);
44
+ color: inherit;
45
+ padding: 3px 7px;
46
+ font: inherit;
47
+ cursor: pointer;
48
+ }
49
+ button:hover { filter: brightness(1.08); }
50
+ .controls {
51
+ display: grid;
52
+ gap: 7px;
53
+ padding: 8px;
54
+ background: #f8fafc;
55
+ border-bottom: 1px solid #d9dee7;
56
+ }
57
+ .search {
58
+ width: 100%;
59
+ box-sizing: border-box;
60
+ border: 1px solid #cbd5e1;
61
+ border-radius: 6px;
62
+ background: #fff;
63
+ color: #111827;
64
+ padding: 6px 8px;
65
+ font: inherit;
66
+ }
67
+ .filters, .toggles {
68
+ display: flex;
69
+ flex-wrap: wrap;
70
+ gap: 5px;
71
+ align-items: center;
72
+ }
73
+ .chip, .toggles button {
74
+ color: #334155;
75
+ border-color: #cbd5e1;
76
+ background: #fff;
77
+ font-weight: 650;
78
+ }
79
+ .chip.is-active, .toggles button[aria-pressed="true"] {
80
+ background: #111827;
81
+ border-color: #111827;
82
+ color: #fff;
83
+ }
84
+ .section-flow { border-color: #38bdf8; }
85
+ .section-tools { border-color: #34d399; }
86
+ .section-backend { border-color: #fb923c; }
87
+ .section-intent { border-color: #a78bfa; }
88
+ .section-telemetry { border-color: #2dd4bf; }
89
+ .severity-warn { border-color: #f59e0b; }
90
+ .severity-error { border-color: #ef4444; }
91
+ .list {
92
+ flex: 1 1 auto;
93
+ min-height: 0;
94
+ overflow: auto;
95
+ overscroll-behavior: contain;
96
+ touch-action: pan-x pan-y;
97
+ padding: 8px;
98
+ background: #f1f5f9;
99
+ }
100
+ .state-view {
101
+ display: grid;
102
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
103
+ gap: 8px;
104
+ padding: 8px;
105
+ background: #eef4fb;
106
+ border-bottom: 1px solid #d9dee7;
107
+ max-height: 280px;
108
+ overflow: auto;
109
+ overscroll-behavior: contain;
110
+ }
111
+ .state-view.is-hidden { display: none; }
112
+ .viz-card {
113
+ min-width: 0;
114
+ border: 1px solid #cbd5e1;
115
+ border-radius: 7px;
116
+ background: #fff;
117
+ overflow: hidden;
118
+ }
119
+ .timeline-card { grid-column: 1 / -1; }
120
+ .viz-title {
121
+ display: flex;
122
+ justify-content: space-between;
123
+ gap: 8px;
124
+ align-items: center;
125
+ padding: 6px 8px;
126
+ background: #e2e8f0;
127
+ color: #172033;
128
+ font-weight: 800;
129
+ }
130
+ .viz-badge {
131
+ max-width: 48%;
132
+ overflow: hidden;
133
+ text-overflow: ellipsis;
134
+ white-space: nowrap;
135
+ padding: 1px 6px;
136
+ border-radius: 999px;
137
+ background: #fff;
138
+ border: 1px solid #cbd5e1;
139
+ color: #475569;
140
+ font-weight: 750;
141
+ }
142
+ .status-running .viz-title { background: #dbeafe; }
143
+ .status-done .viz-title { background: #dcfce7; }
144
+ .status-error .viz-title { background: #fee2e2; }
145
+ .viz-row {
146
+ display: grid;
147
+ grid-template-columns: 82px minmax(0, 1fr);
148
+ gap: 6px;
149
+ padding: 5px 8px;
150
+ border-top: 1px solid #eef2f7;
151
+ }
152
+ .viz-key {
153
+ color: #64748b;
154
+ font-weight: 750;
155
+ }
156
+ .viz-value {
157
+ color: #111827;
158
+ overflow: hidden;
159
+ text-overflow: ellipsis;
160
+ white-space: nowrap;
161
+ }
162
+ .timeline {
163
+ list-style: none;
164
+ margin: 0;
165
+ padding: 0;
166
+ max-height: 122px;
167
+ overflow: auto;
168
+ }
169
+ .timeline-step, .timeline-empty {
170
+ display: grid;
171
+ grid-template-columns: 70px 70px minmax(0, 1fr);
172
+ gap: 7px;
173
+ align-items: center;
174
+ padding: 5px 8px;
175
+ border-top: 1px solid #eef2f7;
176
+ }
177
+ .timeline-time {
178
+ color: #64748b;
179
+ font-variant-numeric: tabular-nums;
180
+ }
181
+ .timeline-label {
182
+ width: fit-content;
183
+ max-width: 70px;
184
+ overflow: hidden;
185
+ text-overflow: ellipsis;
186
+ white-space: nowrap;
187
+ border-radius: 999px;
188
+ padding: 1px 6px;
189
+ background: #e2e8f0;
190
+ color: #334155;
191
+ font-weight: 750;
192
+ }
193
+ .timeline-detail {
194
+ min-width: 0;
195
+ overflow: hidden;
196
+ text-overflow: ellipsis;
197
+ white-space: nowrap;
198
+ }
199
+ .step-running .timeline-label { background: #dbeafe; color: #1d4ed8; }
200
+ .step-warn .timeline-label { background: #fef3c7; color: #92400e; }
201
+ .step-error .timeline-label { background: #fee2e2; color: #991b1b; }
202
+ .empty { color: #64748b; padding: 10px; }
203
+ .group {
204
+ border: 1px solid #d6dce6;
205
+ border-radius: 7px;
206
+ margin: 0 0 8px;
207
+ background: #fff;
208
+ overflow: hidden;
209
+ }
210
+ .group-head {
211
+ display: grid;
212
+ grid-template-columns: auto minmax(0, 1fr) auto;
213
+ gap: 7px;
214
+ align-items: center;
215
+ padding: 6px 7px;
216
+ background: #e9eef6;
217
+ border-bottom: 1px solid #d6dce6;
218
+ font-weight: 750;
219
+ }
220
+ .group-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
221
+ .group-count {
222
+ min-width: 20px;
223
+ text-align: center;
224
+ color: #475569;
225
+ background: #fff;
226
+ border: 1px solid #cbd5e1;
227
+ border-radius: 999px;
228
+ padding: 1px 6px;
229
+ }
230
+ details.entry {
231
+ border: 1px solid #d6dce6;
232
+ border-left-width: 4px;
233
+ border-radius: 6px;
234
+ margin: 0 0 7px;
235
+ background: #fff;
236
+ overflow: hidden;
237
+ }
238
+ .group details.entry {
239
+ border-left-width: 4px;
240
+ border-right-width: 0;
241
+ border-bottom-width: 0;
242
+ border-radius: 0;
243
+ margin: 0;
244
+ }
245
+ details[data-severity="info"] { border-left-color: #64748b; }
246
+ details[data-severity="warn"] { border-left-color: #f59e0b; }
247
+ details[data-severity="error"] { border-left-color: #ef4444; }
248
+ summary {
249
+ cursor: pointer;
250
+ padding: 7px 8px;
251
+ display: grid;
252
+ grid-template-columns: 70px 86px 54px minmax(0, 1fr);
253
+ gap: 7px;
254
+ align-items: center;
255
+ color: #1f2937;
256
+ }
257
+ .time { color: #64748b; font-variant-numeric: tabular-nums; }
258
+ .section, .severity {
259
+ width: fit-content;
260
+ max-width: 86px;
261
+ overflow: hidden;
262
+ text-overflow: ellipsis;
263
+ white-space: nowrap;
264
+ padding: 2px 6px;
265
+ border-radius: 999px;
266
+ background: #eef2f7;
267
+ color: #334155;
268
+ font-weight: 750;
269
+ }
270
+ [data-section="Flow"] .section { background: #e0f2fe; color: #075985; }
271
+ [data-section="Tools"] .section { background: #dcfce7; color: #166534; }
272
+ [data-section="Backend"] .section { background: #ffedd5; color: #9a3412; }
273
+ [data-section="Intent"] .section { background: #ede9fe; color: #5b21b6; }
274
+ [data-section="Telemetry"] .section { background: #ccfbf1; color: #115e59; }
275
+ [data-severity="info"] .severity { background: #e2e8f0; color: #334155; }
276
+ [data-severity="warn"] .severity { background: #fef3c7; color: #92400e; }
277
+ [data-severity="error"] .severity { background: #fee2e2; color: #991b1b; }
278
+ .title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
279
+ .entry-body { border-top: 1px solid #d6dce6; background: #0b1020; }
280
+ .entry-toolbar {
281
+ display: flex;
282
+ gap: 6px;
283
+ align-items: center;
284
+ padding: 6px 8px;
285
+ color: #dbeafe;
286
+ border-bottom: 1px solid rgba(148, 163, 184, 0.32);
287
+ }
288
+ .kind {
289
+ overflow: hidden;
290
+ text-overflow: ellipsis;
291
+ white-space: nowrap;
292
+ border: 1px solid rgba(148, 163, 184, 0.38);
293
+ border-radius: 999px;
294
+ padding: 2px 6px;
295
+ }
296
+ .entry-toolbar button {
297
+ margin-left: auto;
298
+ color: #e5e7eb;
299
+ border-color: rgba(148, 163, 184, 0.42);
300
+ background: rgba(255,255,255,0.08);
301
+ }
302
+ pre {
303
+ margin: 0;
304
+ padding: 8px;
305
+ max-height: 430px;
306
+ overflow: auto;
307
+ overscroll-behavior: contain;
308
+ touch-action: pan-x pan-y;
309
+ color: #dbeafe;
310
+ font: 11px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
311
+ white-space: pre-wrap;
312
+ word-break: break-word;
313
+ }
314
+ .json-key { color: #93c5fd; }
315
+ .json-string { color: #86efac; }
316
+ .json-number { color: #fbbf24; }
317
+ .json-boolean { color: #f0abfc; }
318
+ .json-null { color: #cbd5e1; }
319
+ .is-minimized .controls, .is-minimized .list { display: none; }
320
+ .is-minimized .state-view { display: none; }
321
+ @media (max-width: 620px) {
322
+ .panel { width: calc(100vw - 20px); }
323
+ .state-view { grid-template-columns: 1fr; max-height: 240px; }
324
+ summary { grid-template-columns: 62px 76px 50px minmax(0, 1fr); }
325
+ }
326
+ </style>
327
+ <div class="panel" data-role="panel">
328
+ <div class="head">
329
+ <div class="meta">
330
+ <span class="name">Agentic Activity - ${De(e)}</span>
331
+ <span class="count"><span data-role="visible-count">0</span>/<span data-role="count">0</span></span>
332
+ </div>
333
+ <div class="actions">
334
+ <button type="button" data-action="clear">Clear</button>
335
+ <button type="button" data-action="toggle">Min</button>
336
+ </div>
337
+ </div>
338
+ <div class="controls">
339
+ <input class="search" type="search" data-role="search" placeholder="Filter by tool, op, kind, title, or JSON value" />
340
+ <div class="filters" data-role="section-filters"></div>
341
+ <div class="filters" data-role="severity-filters"></div>
342
+ <div class="toggles">
343
+ <button type="button" data-action="state" aria-pressed="true">State</button>
344
+ <button type="button" data-action="group" aria-pressed="true">Grouped</button>
345
+ <button type="button" data-action="follow" aria-pressed="true">Follow</button>
346
+ <button type="button" data-action="expand-all">Expand all</button>
347
+ <button type="button" data-action="collapse-all">Collapse all</button>
348
+ </div>
349
+ </div>
350
+ <div class="state-view" data-role="state-view"></div>
351
+ <div class="list" data-role="list"></div>
352
+ </div>
353
+ `}function $t(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function In(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 On(e){const t=String(e||"");return t?`${t.slice(0,1).toLocaleUpperCase("en-US")}${t.slice(1)}`:""}function le(e){return String(e||"").toLocaleLowerCase("en-US").replace(/[^a-z0-9]+/gu,"-").replace(/^-|-$/gu,"")}function De(e){return String(e).replace(/[&<>"']/gu,t=>t==="&"?"&amp;":t==="<"?"&lt;":t===">"?"&gt;":t==='"'?"&quot;":"&#39;")}function Tc({accountId:e,config:t={},tools:r,beacon:n}={}){if(!Bn(e,t))return{enabled:!1,tools:r,beacon:n,record(){},wrapTransport(){}};const o=sn(e);return window.__GENGAGE_AGENTIC_DEBUG_RECORD_BE__=i=>bn(o,i),_n(o),hn({accountId:e,collector:o,promptBaseUrl:t.agenticActivityPromptBaseUrl}),o.record({kind:"runtime/debug-enabled",title:"Agentic activity debug enabled"}),{enabled:!0,collector:o,tools:mn(r,o),beacon:gn(n,o),record:i=>o.record(i),wrapTransport:()=>yn(e,o)}}function Bn(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&&Ec(e))}function Ec(e){return Array.from(document.scripts||[]).some(t=>{const r=t?.src||"";return r.includes(`/${e}/glov.js`)&&/[?&]pwtest=/u.test(r)})}var Cc="input-hash";function Mn({ttlS:e,promptVersion:t="current"}={}){if(!Number.isFinite(e)||e<=0)throw new Error("inputHashCachePolicy requires a positive ttlS");return{strategy:Cc,ttlS:e,promptVersion:t}}function Nn({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:Mn({ttlS:r,promptVersion:n}),cacheTtlS:r,cacheKey:(s={})=>pt(t,{account:e,locale:qt(a,s)||s.context?.meta?.locale||s.locale||"",promptVersion:n,payload:Ft(qt(o,s)),...jc(qt(i,s))})}}function Pc(e,t={}){return!e||e.kind!=="be_op"?e:{...e,...Nn({op:e.op,ttlS:e.cacheTtlS,input:e.input,...t})}}function qt(e,t){return typeof e=="function"?e(t):e}function Ft(e){return Array.isArray(e)?e.map(Ft):!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,Ft(r)]))}function jc(e){return!e||typeof e!="object"||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(([,t])=>t!=null))}var Rc=Object.freeze({FALLBACK_RESULTS:"fallback_results",FALLBACK_NO_RESULTS:"fallback_no_results",FALLBACK_PARTIAL:"fallback_partial",OP_UNAVAILABLE:"op_unavailable"});function Lc(e,t={}){return{status:e,...t}}function Ic(e){return!!(e&&typeof e=="object"&&typeof e.status=="string")}function Oc(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 Bc=["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"],Mc=["description","description_html","features","service","sellers","reviews","qna","documents","delivery","payment"],Nc=["accountId","query","products","pendingProducts","rankedSkus","facets","facetsUsed","available_facets","logs","meta"],$c=["source","sourceType","sourceProfile","products","queries","logs"],qc=["items","kind","label","href","count","privacy"];function Fc({accountId:e,search:t,facetedSearch:r,similaritySearch:n,searchGiftOptions:o,filters:i={},resultContract:a={},limitations:s=[],extraTools:c=[]}={}){return{searchKeyword:async(l={},f={})=>t(Uc(l,f)),facetedSearch:typeof r=="function"?(l={},f={})=>r(qn(l,f)):async(l={},f={})=>t(qn(l,f)),getSearchCapabilities:()=>$n({accountId:e,hasSimilarity:typeof n=="function",hasGiftSearch:typeof o=="function",filters:i,resultContract:a,limitations:s,extraTools:c})}}function $n({accountId:e,hasSimilarity:t=!0,hasGiftSearch:r=!1,filters:n={},resultContract:o={},limitations:i=[],extraTools:a=[]}={}){return{accountId:e,tools:Dc(["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:Bc,productDetailFields:Mc,searchResultFields:Nc,similarityResultFields:$c,siteContentFields:qc,...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 Uc(e,t){return Ut(typeof e=="string"?{...t,query:e}:{...t,...e||{}})}function qn(e,t){const r=typeof e=="string"?{query:e}:e||{},n=r.query??t.query??"",o=Ut({...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 Dc(e){const t=new Set;return e.filter(r=>{const n=String(r||"");return!n||t.has(n)?!1:(t.add(n),!0)})}function Ut(e){return Object.fromEntries(Object.entries(e||{}).filter(([,t])=>t!=null&&t!==""&&(!Array.isArray(t)||t.length)))}var zc=15e3,Gc="glov_agentic_iframe",Vc="position:absolute;width:1px;height:1px;left:-9999px;top:-9999px;opacity:0;pointer-events:none;";function Hc({markerParam:e=Gc,markerValue:t="agentic-scraper",frameName:r=t,sandbox:n="allow-same-origin",timeoutMs:o=zc,hiddenStyle:i=Vc,messageType:a,parser:s,isBlockedDocument:c}={}){const u=a||`gengage:agentic-iframe-scraper:${t}`;function l(y,h={}){const m=new URL(String(y),Dt());for(const[b,w]of Object.entries(h||{}))w!=null&&w!==""&&m.searchParams.set(b,String(w));return m.searchParams.set(e,t),m.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||""),Dt()).searchParams.get(e)===t}catch{return!1}}async function g(y,h={},m={}){const b=m.parser||s,w=m.isBlockedDocument||c,A=globalThis.document,v=globalThis.window;if(!A?.body||typeof A.createElement!="function"||typeof A.body.appendChild!="function")return{attempted:!1,doc:null,result:null,blocked:!1,timedOut:!1,via:"unavailable"};const O=l(y),_=A.createElement("iframe");_.name=r;try{_.sandbox=n}catch{}return _.style&&(_.style.cssText=i),new Promise(M=>{let J=!1;const Ye=typeof v?.addEventListener=="function"&&typeof v?.removeEventListener=="function",cl=v.setTimeout(()=>{nr({attempted:!0,doc:null,result:null,blocked:!1,timedOut:!0,via:"timeout"})},o);function ul(){v.clearTimeout(cl),Ye&&v.removeEventListener("message",uo),typeof _.remove=="function"&&_.remove()}function nr(Z){J||(J=!0,ul(),M(Z))}function uo(Z){if(Z.source&&_.contentWindow&&Z.source!==_.contentWindow)return;const re=Z.data;!re||re.type!==u||re.marker!==t||nr({attempted:!0,doc:null,result:re.payload||null,blocked:!!re.blocked,timedOut:!1,via:"postMessage"})}_.addEventListener("load",()=>{if(_.contentWindow?.location?.href!=="about:blank")try{const Z=_.contentDocument||_.contentWindow?.document||null,re=!!w?.(Z);nr({attempted:!0,doc:Z,result:typeof b=="function"?b(Z,{url:O,input:h}):null,blocked:re,timedOut:!1,via:"contentDocument"})}catch{}}),Ye&&v.addEventListener("message",uo),A.body.appendChild(_),_.src=O})}function p(y=s,{targetOrigin:h=Dt()}={}){const m=globalThis.window;if(!m?.parent||!f(m.location,m.name))return!1;const b=typeof y=="function"?y(globalThis.document,{url:m.location?.href||"",input:{}}):y;return m.parent.postMessage({type:u,marker:t,payload:b},h||"*"),!0}return{markerParam:e,markerValue:t,frameName:r,messageType:u,decorateUrl:l,isScraperFrame:f,load:g,postCurrentDocument:p}}function Kc(e,{accountId:t,type:r="agenticSearchFrame"}={}){return e?.isScraperFrame?.()?(t&&globalThis.window&&(globalThis.window.GengageAssistantInjector||={},globalThis.window.GengageAssistantInjector[t]||={type:r}),!0):!1}function Dt(){return globalThis.window?.location?.origin||globalThis.location?.origin||"https://example.invalid"}function Wc(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 Jc({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=Fn(a.url||a.productUrl||s.url,e,o),u=a.sku||s.sku||null;return c?Zc(c)?{ok:!0,sku:u,url:c,method:"already-current-page",alreadyCurrentPage:!0,message:r||t}:(Un(c),{ok:!0,sku:u,url:c,method:"browser-navigation",message:t}):{ok:!1,sku:u,reason:"missing-url",message:n}}}function Fn(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 Un(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 Zc(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 Yc(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 Dn({patterns:e,messageFilter:t,messageNormalizer:r=o=>o,messageLimit:n=10}={}){const o={patterns:[...Ct,...Array.isArray(e)?e:[]]};function i(c){return jt(c,o)}function a(c){return tn(c,o)}function s(c=[]){const u=(Array.isArray(c)?c:[]).filter(l=>typeof t=="function"?t(l):l&&typeof l=="object").filter(Boolean);return(Number.isFinite(n)&&n>0?u.slice(-n):u).map(l=>({role:l.role,content:i(r(l.content)).slice(0,1e3)}))}return{redactPii:i,anonymousRequestText:a,anonymizeMessages:s}}function Qc(e){return String(e||"").replace(/<script\b[\s\S]*?<\/script>/giu," ").replace(/<style\b[\s\S]*?<\/style>/giu," ").replace(/<[^>]+>/gu," ").replace(/&nbsp;/giu," ").replace(/&amp;/giu,"&").replace(/&lt;|&gt;/giu," ").replace(/\s+/gu," ").trim()}function zn({accountId:e,supplied:t=[],pageProduct:r=null,listingProducts:n=[],skus:o=[],limit:i=4,storedProducts:a=[],getStoredPanelProducts:s}={}){const c=Vn(o),u=Array.isArray(n)?n:[],l=typeof s=="function"?s({accountId:e,visibleProducts:u}):a;return Gn([...Ge(t),...Ge(l),r,...u],{skus:c,limit:i})}function Xc({accountId:e,rootUrl:t,getProduct:r,getProducts:n,getStoredPanelProducts:o,limit:i=4}={}){return async function(s={}){return{accountId:e,products:zn({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 Gn(e,{skus:t=[],limit:r=4}={}){const n=new Set(Vn(t)),o=new Set,i=[];for(const a of Ge(e)){if(!a)continue;const s=ze(a?.sku);if(n.size&&!n.has(s))continue;const c=s||ze(a?.url)||ze(a?.name||a?.title);if(!(c&&o.has(c))&&(c&&o.add(c),i.push(a),i.length>=r))break}return i}function Vn(e){return Ge(e).map(ze).filter(Boolean)}function ze(e){return String(e||"").trim()}function Ge(e){return Array.isArray(e)?e.filter(Boolean):e?[e]:[]}var I={features:18,reviews:4,qna:4,sellers:4,variants:12,documents:6,textBlocks:6,relatedProducts:8,textChars:220},zt={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},eu=/[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,tu=/(?:token|session|sid|auth|code|csrf|secret|key|password|passwd|phone|email|address|postcode|zip|jwt|bearer)/iu,ru=/[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 Hn({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o=i=>i}){return(i={})=>Kn({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o,input:i})}function Kn({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o=a=>a,input:i={}}){const a=Pu(i),s=o(i.product||Jt(r)),c=(Jt(n)||[]).map(o).filter(Boolean),u=C(i.sku||s?.sku||i.product?.sku),l=u?c.find(J=>C(J?.sku)===u)||s:s||c[0]||null,f=au(u||l?.sku),g=to({...f.product,...l}),p=Wt(He(l?.features),He(l?.specs),bu(l?.facet_hits),He(f.product?.features),cu(),uu(),lu()).slice(0,a.features),y=Zn(Ke(l?.reviews),f.reviews,du()).slice(0,a.reviews),h=Yn(Vt(l?.qna),fu()).slice(0,a.qna),m=Qn(Ht(l?.sellers),pu()).slice(0,a.sellers),b=ee([...l?.payment||[],...Ve("payment",a)]),w=ee([...l?.delivery||[],...Ve("delivery",a)]),A=ee([...l?.promotions||[],...Ve("promotion",a)]),v=Xn(Kt(l?.variants),mu()).slice(0,a.variants),O=gu(a.documents),_=ro(l?.description,f.product?.description,yu("description"),Ve("description",{...a,textBlocks:2})[0]),M=c.filter(J=>!u||C(J?.sku)!==u).map(to).filter(Boolean).slice(0,a.relatedProducts);return de({accountId:e,pageType:Jt(t)||"other",url:Cu(),product:g,description:_,features:p,sellers:m,reviews:y,qna:h,rating:B(l?.rating??f.rating),review_count:B(l?.review_count??f.review_count),payment:b,delivery:w,promotions:A,variants:v,documents:O,related_products:M,capabilities:Au({description:_,features:p,sellers:m,reviews:y,qna:h,payment:b,delivery:w,promotions:A,variants:v,documents:O,relatedProducts:M}),privacy:{browserLocal:!0,rawHtml:!1,formValues:!1,cookies:!1,storage:!1,redacted:!0}})}function nu(e,t){const r=Array.isArray(e)?e.filter(Boolean):[];if(!t||typeof t!="object"||!r.length)return r;const n=C(t.product?.sku);return r.map((o,i)=>{const a=C(o?.sku);return r.length===1||n&&a&&n===a||i===0?iu(o,t):o})}function Wn(e){return!e||typeof e!="object"?null:de({product:e.product,description:x(e.description,500),features:wu(e.features,14),sellers:vu(e.sellers,4),reviews:ku(e.reviews,4),qna:Su(e.qna,4),rating:e.rating,review_count:e.review_count,payment:Q(e.payment,5,160),delivery:Q(e.delivery,5,160),promotions:Q(e.promotions,5,160),variants:_u(e.variants,10),documents:Q(e.documents,5,220),capabilities:Array.isArray(e.capabilities)?e.capabilities.slice(0,12):void 0})}function ou(e,t,r={}){const n=Wn(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 iu(e,t){return de({...e,description:ro(e.description,t.description),features:Wt(He(e.features),t.features).slice(0,24),specs:e.specs||(t.features?.length?Object.fromEntries(t.features.map(xu)):void 0),sellers:Qn(Ht(e.sellers),t.sellers),reviews:Zn(Ke(e.reviews),t.reviews),qna:Yn(Vt(e.qna),t.qna),rating:e.rating??t.rating,review_count:e.review_count??t.review_count,payment:ee([...e.payment||[],...t.payment||[]]),delivery:ee([...e.delivery||[],...t.delivery||[]]),promotions:ee([...e.promotions||[],...t.promotions||[]]),variants:Xn(Kt(e.variants),t.variants),documents:ee([...e.documents||[],...t.documents||[]])})}function au(e){const t=[];for(const o of D('script[type="application/ld+json"]')){const i=su(o.textContent);for(const a of Gt(i))String(a?.["@type"]||"").toLowerCase()==="product"&&t.push(a)}const r=t.find(o=>C(o.sku||o.productID||o.mpn)===C(e))||t[0];if(!r)return{};const n=r.aggregateRating||{};return{product:de({sku:C(r.sku||r.productID||r.mpn),name:S(r.name),brand:S(r.brand?.name||r.brand),description:S(r.description),images:Q(r.image,8,280),url:Ae(r.url),rating:B(n.ratingValue),review_count:B(n.reviewCount||n.ratingCount)}),reviews:Ke(r.review),rating:B(n.ratingValue),review_count:B(n.reviewCount||n.ratingCount)}}function Gt(e){return Array.isArray(e)?e.flatMap(Gt):!e||typeof e!="object"?[]:[e,...Gt(e["@graph"])]}function su(e){try{return JSON.parse(String(e||""))}catch{return null}}function cu(){const e=[];for(const t of D("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 uu(){const e=[];for(const t of D("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 lu(){return D('[class*="spec" i], [class*="feature" i], [class*="attribute" i], li').map(e=>Jn(S(e.textContent))).filter(Boolean).slice(0,I.features)}function du(){return D('[class*="review" i], [data-review], [itemprop="review"]').map(e=>{const t=S(e.textContent);return!t||t.length<8||zt.qna.test(t)?null:{content:x(t,260),star:B(e.getAttribute?.("data-rating"))}}).filter(Boolean)}function fu(){const e=D('[class*="question" i], [class*="answer" i], [data-question], [data-answer]'),t=[];for(const r of e){const n=S(r.textContent);if(!n||!zt.qna.test(n))continue;const o=S(r.getAttribute?.("data-question")||n),i=S(r.getAttribute?.("data-answer")||r.nextElementSibling?.textContent||"");t.push({question:x(o,220),answer:x(i,260)})}return t}function pu(){return D('[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:x(e,120)}))}function mu(){return D('[class*="variant" i] a,[class*="variant" i] button,[class*="size" i] button,[class*="color" i] button,[data-variant],[data-size],[data-color]').map(e=>de({name:x(no(e),120),value:x(e.getAttribute?.("data-value")||e.getAttribute?.("data-size")||e.getAttribute?.("data-color"),120),sku:C(e.getAttribute?.("data-sku")||e.getAttribute?.("data-product-id")),url:Ae(e.getAttribute?.("href")),in_stock:e.getAttribute?.("disabled")==null&&e.getAttribute?.("aria-disabled")!=="true"})).filter(e=>e.name||e.value||e.sku)}function gu(e){return D("a[href]").filter(t=>/\.pdf(?:$|[?#])/iu.test(t.getAttribute?.("href")||"")).map(t=>{const r=no(t)||"PDF",n=Ae(t.getAttribute?.("href"));return n?`${r}: ${n}`:""}).filter(Boolean).slice(0,e)}function Ve(e,t){const r=zt[e];return r?D("section,article,div,li,p,span,button,a").map(n=>S(n.textContent)).filter(n=>n&&r.test(n)&&n.length<=900).map(n=>x(n,t.textChars||I.textChars)).filter(eo()).slice(0,t.textBlocks||I.textBlocks):[]}function yu(e){return S(document.querySelector?.(`meta[name="${e}"]`)?.getAttribute?.("content")||document.querySelector?.(`meta[property="og:${e}"]`)?.getAttribute?.("content"))}function D(e){try{return[...document.querySelectorAll?.(e)||[]].filter(hu)}catch{return[]}}function hu(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 He(e){return e?(Array.isArray(e)?e:Object.entries(e).map(([t,r])=>({key:t,value:r}))).map(t=>typeof t=="string"?Jn(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 bu(e){return!e||typeof e!="object"?[]:Object.entries(e).map(([t,r])=>({key:S(t),value:S(r)}))}function Jn(e){const t=/^(.{2,80}?)\s*[::]\s*(.{1,220})$/u.exec(S(e));return t?{key:t[1],value:t[2]}:null}function Ke(e){return(Array.isArray(e)?e:e?[e]:[]).map(t=>typeof t=="string"?{content:x(t,260)}:{content:x(t.content||t.reviewBody||t.description||t.text,260),star:B(t.star||t.rating||t.reviewRating?.ratingValue)}).filter(t=>t.content||t.star)}function Vt(e){return(Array.isArray(e)?e:e?[e]:[]).map(t=>({question:x(t.question||t.name||"",220),answer:x(t.answer||t.acceptedAnswer?.text||t.text||"",260)})).filter(t=>t.question||t.answer)}function Ht(e){return(Array.isArray(e)?e:e?[e]:[]).map(t=>typeof t=="string"?{merchant:x(t,120)}:{merchant:x(t.merchant||t.name||t.seller||"",120),merchant_id:C(t.merchant_id||t.id||""),merchant_rating:B(t.merchant_rating||t.rating),price_offer:B(t.price_offer||t.price)}).filter(t=>t.merchant||t.merchant_id)}function Kt(e){return(Array.isArray(e)?e:e?[e]:[]).map(t=>({name:x(t.name||t.label||t.title||"",120),value:x(t.value||t.size||t.color||"",120),sku:C(t.sku||t.code||""),url:Ae(t.url),in_stock:t.in_stock})).filter(t=>t.name||t.value||t.sku||t.url)}function Wt(...e){const t=new Set,r=[];for(const n of e.flat().filter(Boolean)){const o={key:x(n.key||n.name||"",90),value:x(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 Zn(...e){return We(e.flat().filter(Boolean),t=>`${t.star||""}:${t.content||""}`)}function Yn(...e){return We(e.flat().filter(Boolean),t=>`${t.question||""}:${t.answer||""}`)}function Qn(...e){return We(e.flat().filter(Boolean),t=>`${t.merchant||""}:${t.merchant_id||""}`)}function Xn(...e){return We(e.flat().filter(Boolean),t=>`${t.sku||""}:${t.name||""}:${t.value||""}`)}function We(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 ee(e){return Q(e,20,I.textChars)}function Q(e,t,r){return(Array.isArray(e)?e:e?[e]:[]).map(n=>x(n,r)).filter(Boolean).filter(eo()).slice(0,t)}function eo(){const e=new Set;return t=>{const r=S(t).toLocaleLowerCase("tr-TR");return!r||e.has(r)?!1:(e.add(r),!0)}}function wu(e,t){return Wt(e).slice(0,t)}function ku(e,t){return Ke(e).slice(0,t)}function Su(e,t){return Vt(e).slice(0,t)}function vu(e,t){return Ht(e).slice(0,t)}function _u(e,t){return Kt(e).slice(0,t)}function to(e){return!e||typeof e!="object"?null:de({sku:C(e.sku||e.id||""),group_id:C(e.group_id||e.groupId||""),name:S(e.name||e.title||""),brand:S(e.brand||""),url:Ae(e.url),images:Q(e.images||e.image,8,280),price:B(e.price),price_discounted:B(e.price_discounted||e.discountedPrice),price_text:S(e.price_text||e.priceText||""),price_currency:S(e.price_currency||e.currency||""),category_ids:Tu(e.category_ids||e.categoryIds,8,90),category_names:Q(e.category_names||e.categoryNames||e.category,8,140),in_stock:e.in_stock})}function Au(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 xu(e){return[S(e.key||e.name),S(e.value||e.text)]}function ro(...e){return e.map(t=>x(t,700)).find(Boolean)||""}function x(e,t){return S(e).slice(0,t)}function no(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(eu,"[redacted]").replace(/\s+/gu," ").trim()}function C(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 Tu(e,t,r){return(Array.isArray(e)?e:e?[e]:[]).map(n=>C(n).slice(0,r)).filter(Boolean).filter(Eu()).slice(0,t)}function Eu(){const e=new Set;return t=>{const r=C(t).toLocaleLowerCase("tr-TR");return!r||e.has(r)?!1:(e.add(r),!0)}}function B(e){const t=Number(String(e??"").replace(",","."));return Number.isFinite(t)&&t>0?t:void 0}function Ae(e){if(!e)return"";try{const t=new URL(e,window.location.href);return/^https?:$/u.test(t.protocol)?(t.hash="",oo(t),t.href):""}catch{return""}}function Cu(){try{const e=new URL(window.location.href);return e.hash="",oo(e),`${e.origin}${e.pathname}${e.search}`}catch{return""}}function oo(e){for(const[t,r]of[...e.searchParams.entries()]){const n=String(r||"");(tu.test(t)||ru.test(n))&&e.searchParams.set(t,"redacted")}return e}function Pu(e={}){return{features:K(e.maxFeatures,I.features,40),reviews:K(e.maxReviews,I.reviews,12),qna:K(e.maxQna,I.qna,12),sellers:K(e.maxSellers,I.sellers,12),variants:K(e.maxVariants,I.variants,30),documents:K(e.maxDocuments,I.documents,12),textBlocks:K(e.maxTextBlocks,I.textBlocks,16),relatedProducts:K(e.maxRelatedProducts,I.relatedProducts,20),textChars:K(e.textChars,I.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 Jt(e){try{return typeof e=="function"?e():null}catch{return null}}function de(e){return Object.fromEntries(Object.entries(e||{}).filter(([,t])=>t!=null&&t!==""&&(!Array.isArray(t)||t.length)))}var{redactPii:ju,anonymousRequestText:Ru,anonymizeMessages:Lu}=Dn({patterns:[{pattern:/\b\d{5}\b/gu,replacement:"[postcode]"},{pattern:/\b(?:adresim|adres|mahalle|sokak|cadde)\b[^,.!?\n]{8,160}/giu,replacement:"[address]"}]});function io(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 Iu(e){return Array.isArray(e)?e.find(t=>String(t||"").trim()):void 0}function Ou(e){const t=io(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 fe={headings:8,products:8,controls:12,textMatches:8,snippetChars:180},Je=/\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,Bu=/(?:token|session|sid|auth|code|csrf|secret|key|password|passwd|phone|email|address|postcode|zip|jwt|bearer)/iu,Mu=/[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,Nu={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 $u({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o=i=>i}){return{scanSite:(i={})=>qu({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o,input:i}),siteGrep:(i={})=>Fu(i),discoverSiteContent:(i={})=>ao(i,e),runSiteCommand:(i={})=>Uu(i),describeVisualContext:(i={})=>Du(i,e),inspectProductSurface:Hn({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o}),getSiteCapabilities:()=>Vu(e)}}function qu({accountId:e,getPageType:t,getProduct:r,getProducts:n,normalizeProduct:o,input:i}){const a=T(i.query||i.text||""),s=er(i),c=rr(r),u=rr(n)||[];return tr({accountId:e,url:il(),title:X(document.title||""),pageType:rr(t)||"other",viewport:al(),product:so(o(c)),products:u.map(o).map(so).filter(Boolean).slice(0,s.products),content:i.includeContent===!1?void 0:ao(i,e).items,headings:Hu(s.headings),controls:i.includeControls===!1?void 0:Ku(s.controls),textMatches:a?Zt(a,s):[],privacy:{rawHtml:!1,formValues:!1,redacted:!0,browserLocal:!0}})}function ao(e={},t=""){const r=er(e),n=new Set(Zu(e.kinds||e.kind)),o=Wu(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 Fu(e={}){const t=T(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=Zt(t,er(e));return{ok:r.length>0,query:t,matches:r,count:r.length,privacy:W()}}function Uu(e={}){const t=T(e.command||e.action||"").toLowerCase();return t==="scroll_to_text"||t==="scrolltotext"?zu(e):t==="click_visible_text"||t==="clickvisibletext"?Gu(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 Du(e={},t){const r=e.visual_consent===!0||e.visualConsent===!0||e.consent===!0,n=r?Qu(e.visual_observations||e.visualObservations):[],o=Yu(Number(e.maxImages||8));return{accountId:t,ok:r||o.length>0,consentedObservations:n,visibleImages:o,message:Xu({consented:r,observations:n,visibleImages:o}),privacy:{rawHtml:!1,formValues:!1,screenshotPixels:!1,redacted:!0,browserLocal:!0,requiresConsentForExternalVisualFacts:!0}}}function zu(e){const t=T(e.query||e.text||e.label||""),r=t?rl(t):null;return r?(r.scrollIntoView({block:"center",inline:"nearest",behavior:"smooth"}),{ok:!0,command:"scroll_to_text",label:pe(r),message:"Scrolled to the matching page area.",privacy:W()}):{ok:!1,command:"scroll_to_text",message:"No visible matching text found."}}function Gu(e){const t=T(e.label||e.query||e.text||"");if(!t)return{ok:!1,command:"click_visible_text",message:"Provide a visible label to click."};if(Je.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=tl(t);if(!r)return{ok:!1,command:"click_visible_text",message:"No safe visible clickable control found."};const n=pe(r);return Je.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 Vu(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 Hu(e){return[...document.querySelectorAll('h1,h2,h3,[role="heading"]')].filter(te).map(t=>X(T(t.textContent))).filter(Boolean).slice(0,e)}function Ku(e){return[...document.querySelectorAll('button,a,[role="button"],summary,input[type="button"],input[type="submit"]')].filter(te).map(t=>({label:pe(t),tag:t.tagName?.toLowerCase(),role:t.getAttribute?.("role")||null,href:co(t),safeClick:!Je.test(pe(t))})).filter(t=>t.label).filter(Ze(t=>`${t.tag}:${t.label}:${t.href||""}`)).slice(0,e)}function Wu(e){return[...document.querySelectorAll('a[href],button,[role="button"],summary')].filter(te).map(t=>{const r=pe(t),n=co(t),o=Ju([r,n,Yt(t)].join(" "));return o?tr({kind:o,label:r,href:n,heading:Yt(t),safeClick:!Je.test(r)}):null}).filter(Boolean).filter(Ze(t=>`${t.kind}:${t.label}:${t.href||""}`)).slice(0,Math.max(1,Math.min(e,30)))}function Ju(e){for(const[t,r]of Object.entries(Nu))if(r.test(e))return t;return""}function Zu(e){return(Array.isArray(e)?e:String(e||"").split(/[,|]/u)).map(t=>T(t).toLowerCase()).filter(Boolean)}function Zt(e,t){const r=e.toLocaleLowerCase("tr-TR");return el(document.body).map(n=>({node:n,text:T(n.nodeValue||"")})).filter(({text:n})=>n&&n.toLocaleLowerCase("tr-TR").includes(r)).map(({node:n,text:o})=>({snippet:nl(o,e,t.snippetChars),tag:n.parentElement?.tagName?.toLowerCase()||"",heading:Yt(n.parentElement)})).filter(n=>n.snippet).filter(Ze(n=>n.snippet)).slice(0,t.textMatches)}function Yu(e){return[...document.querySelectorAll("img")].filter(te).map(t=>({alt:X(T(t.getAttribute("alt")||t.getAttribute("aria-label")||"")),title:X(T(t.getAttribute("title")||"")),src:Qt(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(Ze(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 Qu(e){return(Array.isArray(e)?e:String(e||"").split(/\n|;|\|/u)).map(t=>X(t).slice(0,180)).filter(Boolean).slice(0,8)}function Xu({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 el(e){if(!e)return[];const t=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(n){const o=n.parentElement;return!o||!te(o)||/^(script|style|noscript|template|svg)$/iu.test(o.tagName||"")||ol(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 tl(e){return[...document.querySelectorAll('button,a,[role="button"],summary,input[type="button"],input[type="submit"]')].filter(te).find(t=>pe(t).toLocaleLowerCase("tr-TR").includes(e.toLocaleLowerCase("tr-TR")))}function rl(e){const t=Zt(e,{...fe,textMatches:1})[0];return t?[...document.querySelectorAll("body *")].filter(te).find(r=>T(r.textContent).includes(t.snippet.slice(0,24))):null}function pe(e){return e?X(T(e.getAttribute?.("aria-label")||e.getAttribute?.("title")||e.getAttribute?.("alt")||e.value||e.textContent||"")).slice(0,90):""}function Yt(e){let t=e;for(let r=0;t&&r<5;r+=1){const n=T((t.matches?.('h1,h2,h3,[role="heading"]')?t:t.querySelector?.('h1,h2,h3,[role="heading"]'))?.textContent||"");if(n)return X(n).slice(0,90);t=t.parentElement}return""}function so(e){return e?tr({sku:T(e.sku||e.id||""),name:T(e.name||e.title||""),url:Qt(e.url),price_text:T(e.price_text||e.priceText||""),price:e.price,currency:e.price_currency||e.currency,in_stock:e.in_stock,category:T(e.category||"")}):null}function nl(e,t,r){const n=X(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 te(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 ol(e){return!!e.closest?.('input,textarea,select,[contenteditable="true"]')}function co(e){return e.tagName?.toLowerCase()!=="a"?null:Qt(e.getAttribute("href"))}function Qt(e){if(!e)return"";try{const t=new URL(e,window.location.href);return/^https?:$/u.test(t.protocol)?(t.hash="",Xt(t),t.href):""}catch{return""}}function il(){const e=new URL(window.location.href);return Xt(e),`${e.origin}${e.pathname}${e.search}`}function al(){return{width:window.innerWidth,height:window.innerHeight,scrollY:Math.round(window.scrollY||0),documentHeight:Math.round(document.documentElement?.scrollHeight||0)}}function X(e){return T(e).replace(/https?:\/\/[^\s?#]+(?:\?[^#\s]*)?/giu,sl).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 sl(e){try{const t=new URL(e);return t.hash="",Xt(t),t.href}catch{return String(e||"").replace(/\?[^#\s]*/u,"?redacted")}}function Xt(e){for(const[t,r]of[...e.searchParams.entries()]){const n=String(r||"");(Bu.test(t)||Mu.test(n))&&e.searchParams.set(t,"redacted")}return e}function T(e){return String(e||"").replace(/\s+/gu," ").trim()}function er(e){return{headings:xe(e.maxHeadings,fe.headings,20),products:xe(e.maxProducts,fe.products,20),controls:xe(e.maxControls,fe.controls,30),textMatches:xe(e.maxMatches||e.limit,fe.textMatches,20),snippetChars:xe(e.snippetChars,fe.snippetChars,320)}}function xe(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 tr(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!=null))}function rr(e){try{return typeof e=="function"?e():null}catch{return null}}function Ze(e){const t=new Set;return r=>{const n=e(r);return!n||t.has(n)?!1:(t.add(n),!0)}}d.AgentError=z,d.ContextStore=dr,d.FALLBACK_STATUS=Rc,d.action=wi,d.actionButtonsUiSpec=Wa,d.alignProductsToTable=Jr,d.anonymousRequestText=tn,d.beErrorToAgentError=ut,d.buildActivityVisualization=fn,d.buildPhotoSimilarityProfile=rs,d.buildProductSimilarityProfile=ae,d.buildSimilarityQueries=ns,d.canUseModuleWorker=xt,d.caughtToStreamError=yr,d.compactAccountConfig=rn,d.compactContextProducts=Na,d.compactObject=Wc,d.compactProductSurfaceForLlm=Wn,d.comparisonResultForUi=Da,d.comparisonUiSpec=Ha,d.createActivityCollector=an,d.createBrowserMemory=At,d.createDiagnosticsTool=js,d.createEndpointCachePolicies=Za,d.createEndpointHandlers=Ya,d.createFlow=Ja,d.createGssToolAliases=Fc,d.createIframeScraper=Hc,d.createInjectorAdapter=Lr,d.createLocalRefStore=or,d.createMainThreadInjectorAdapter=Ir,d.createModuleWorker=Wr,d.createOpenProductPageTool=Jc,d.createPrivacyHelpers=Dn,d.createProductSurfaceInspector=Hn,d.createReadPageStep=Oc,d.createReadPageTool=Ps,d.createResolveProductsTool=Xc,d.createSiteAwarenessTools=$u,d.declarativeBeOpCache=Nn,d.defaultPiiPatternPack=Pt,d.defaultPiiPatterns=Ct,d.done=ft,d.elapsedMs=q,d.endpointStableKey=Zr,d.error=vr,d.fallbackStatus=Lc,d.filterActivityEntries=xn,d.firstArrayValue=Iu,d.formatJsonHtml=Pn,d.getOrCreateActivityCollector=sn,d.groupForEntry=dn,d.gssSearchCapabilities=$n,d.homePanelReset=Yc,d.httpErrorToAgentError=gr,d.inputHashCachePolicy=Mn,d.inspectProductSurface=Kn,d.installActivityFetchPatch=hn,d.installBrowserTools=Cs,d.installFetchTransportBridge=ya,d.installIframeScraperBypass=Kc,d.installLocalAgenticActivityDebug=Tc,d.isFallbackStatus=Ic,d.isRef=ir,d.jsonResponse=Xa,d.llmCacheKey=pt,d.mergeProductSurfaceEvidence=nu,d.metadata=hi,d.mountAccount=Ma,d.mountActivityOverlay=_n,d.navigateSameTab=Un,d.ndjsonResponse=Qa,d.normalizeComparisonTable=Tt,d.normalizeEntry=cn,d.normalizeProduct=je,d.normalizeSameOriginUrl=Fn,d.normalizeSimilarityText=V,d.nowIso=ur,d.plainMessageContent=Qc,d.productDetailsUiSpec=Va,d.productFactsKey=vi,d.productSkuKey=Si,d.productSurfaceReviewText=ou,d.productsUiSpec=Ga,d.rankSimilarProducts=os,d.rankSimilarProductsAsync=is,d.recordBeDebugPayload=bn,d.redactPii=jt,d.requestText=en,d.resolveBeUrl=ks,d.resolveFlow=_r,d.resolveProductCandidates=zn,d.retailAnonymizeMessages=Lu,d.retailAnonymousRequestText=Ru,d.retailRedactPii=ju,d.routeFlowParams=io,d.routeSkuList=Ou,d.scoreSimilarityCandidate=Et,d.sectionForKind=un,d.setAssistantHostVisible=bs,d.severityForEntry=ln,d.shouldInstallActivityDebug=Bn,d.stableKey=oe,d.startLazyRuntimeLoader=Rs,d.stickyContextKey=it,d.summarizeDebugState=ve,d.summarizePanelState=$e,d.summarizeUiSpec=Lt,d.textChunk=Sr,d.textKey=_i,d.tokenizeSimilarityText=N,d.trimProductFactsCore=Re,d.trimProductFactsListCore=ki,d.uiSpec=bi,d.uniqueProductsBySku=Gn,d.withAccountConfig=xs,d.withDeclarativeBeOpCache=Pc,d.wrapActivityBeacon=gn,d.wrapActivityTools=mn,d.wrapActivityTransport=yn})(this.Gengage=this.Gengage||{});