@smart-cloud/ai-kit-core 1.3.2 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,7 +1,7 @@
1
- "use strict";var $=Object.defineProperty;var Qe=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames;var Ye=Object.prototype.hasOwnProperty;var P=(e,t)=>()=>(e&&(t=e(e=0)),t);var q=(e,t)=>{for(var r in t)$(e,r,{get:t[r],enumerable:!0})},et=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Ze(t))!Ye.call(e,a)&&a!==r&&$(e,a,{get:()=>t[a],enumerable:!(n=Qe(t,a))||n.enumerable});return e};var tt=e=>et($({},"__esModule",{value:!0}),e);function T(){return globalThis.WpSuite?.plugins?.aiKit}async function X(e=8e3){let t=T();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,n)=>{let a=()=>s(r),o=()=>s(()=>n(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let i=e?window.setTimeout(()=>s(()=>n(new Error("AiKit timeout"))),e):0})}}async function ce(e=1e4){await X(e);let r=T()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var J=P(()=>{"use strict"});var le,A,Q,Z,Y,rt,nt,at,ot,st,de,U,ge,pe,H=P(()=>{"use strict";le=require("@smart-cloud/wpsuite-core"),A=require("@wordpress/data"),Q=require("aws-amplify/utils");J();typeof WpSuite<"u"?Z=WpSuite.siteSettings:Z={};Y=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},rt=async()=>{let e=T();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+Z.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},nt=async()=>{let e=Y(await(0,le.getConfig)("aiKit")),t=await rt();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},at={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?Q.I18n.setLanguage(""):Q.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},ot={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},st={},de=e=>(0,A.dispatch)(e),U=e=>(0,A.select)(e),ge=async()=>{let e=await nt(),t=(0,A.createReduxStore)("wpsuite/ai-kit",{reducer(r=e,n){switch(n.type){case"SET_LANGUAGE":return{...r,language:n.language};case"SET_DIRECTION":return{...r,direction:n.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:n.showChatbotPreview}}return r},actions:at,selectors:ot,resolvers:st});return(0,A.register)(t),t},pe=(e,t,r)=>{let n;function a(){let s=U(e).getState(),i=t(s);if(i!==n){let u=n;n=i,r(n,u)}}let o=(0,A.subscribe)(a,e);return a(),o}});var y,me=P(()=>{"use strict";y="smartcloud-ai-kit"});var h,it,ut,ct,fe=P(()=>{"use strict";h=require("react/jsx-runtime"),it=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{d:"M19 27H33"}),(0,h.jsx)("path",{d:"M19 33H33"}),(0,h.jsx)("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),(0,h.jsx)("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),(0,h.jsx)("path",{d:"M16 10V40H36V22"}),(0,h.jsx)("path",{d:"M16 10H22"}),(0,h.jsx)("path",{d:"M22 10V23H36"}),(0,h.jsx)("path",{d:"M22 10L36 22"})]}),ut=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),(0,h.jsx)("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),(0,h.jsx)("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),(0,h.jsx)("path",{d:"M16 24H32"})]}),ct=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),(0,h.jsx)("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),(0,h.jsx)("path",{d:"M42 42l-12 -12"}),(0,h.jsx)("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),(0,h.jsx)("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var x,ee=P(()=>{"use strict";x=class extends Error{constructor(r,n,a){super(r);this.decision=n;this.status=a;this.name="AiBackendError"}}});var Ce={};q(Ce,{MIN_CHROME_VERSION:()=>he,checkOnDeviceAvailability:()=>ve,decideCapability:()=>V,resolveBackend:()=>I});async function ye(){let t=await lt?.plugins?.aiKit?.features.store;return U(t).getConfig()??{}}function we(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function dt(e){if(e.mode)return e.mode;let{transport:t}=we(e);return t?"backend-fallback":"local-only"}async function I(){let e=await ye(),{transport:t,backendApiName:r,backendBaseUrl:n}=we(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return n?{available:!0,transport:t,baseUrl:n,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let a=globalThis.WpSuite?.plugins?.gatey;return!a?.availability||await a.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function O(e){return typeof globalThis[e]<"u"}function ke(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function j(e,t){return e?.find(r=>r.brand===t)?.version}async function gt(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function pt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?ke(t[1]):void 0}function mt(){return!!navigator?.brave}async function ft(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await gt(),n=j(r,"Microsoft Edge")??j(r,"Microsoft Edge WebView2"),a=j(r,"Google Chrome")??j(r,"Chromium"),o=!!n||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),g=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),d=mt()||/\bBrave\//i.test(t);if(o||s||i||u||c||g||d)return{allowed:!1,reason:o?"edge":d?"brave":c?"firefox":g?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let p=ke(a)??pt(t),f=he[e];return f?p?p<f?{allowed:!1,reason:`chrome-too-old-${p}-lt-${f}`,chromeMajor:p}:{allowed:!0,reason:"ok",chromeMajor:p}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:p}}async function ve(e,t){try{let r=await ft(e),n=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:n};switch(e){case"writer":{if(!O("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"rewriter":{if(!O("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"summarizer":{if(!O("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"proofreader":{if(!O("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"language-detector":{if(!O("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"translator":{if(!O("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:n};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:n,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let o=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:o!=="unavailable",status:o,reason:n}}case"prompt":{if(!O("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:n}}default:return{available:!1,status:"unknown-feature",reason:n}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function V(e,t,r){let n=await ye(),a=r||dt(n),o=await I(),s=await ve(e,t),i=s.available,u=o.available,c={feature:e,mode:a,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason};return a==="local-only"?i?{...c,source:"on-device",reason:`local-only: on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only: on-device unavailable (${s.reason??s.status})`}:a==="backend-only"?u?{...c,source:"backend",reason:`backend-only: backend available (${o.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only: backend unavailable (${o.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback: using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback: using backend (${o.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${o.reason??"n/a"})`}}var be,lt,he,te=P(()=>{"use strict";be=require("@smart-cloud/wpsuite-core");H();lt=(0,be.getWpSuite)();he={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var Te={};q(Te,{dispatchBackend:()=>K,withRecaptchaHeaders:()=>z});function bt(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}function yt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function wt(e){let t=e?.reCaptchaChatTtlSeconds,r=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,r)*1e3}function ht(e,t){let r=wt(t);if(r<=0)return!1;let n=Pe.get(e);return n?Date.now()-n<r:!1}function re(e,t){let r=yt(t);r&&Pe.set(e,r)}function xe(e,t,r){if(e!=="frontend"||t!=="prompt"||!Le(r)||r.saveChatSession!==!0)return;let n=r.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Se(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let r=Object.keys(e).find(a=>a.toLowerCase()===t.toLowerCase());if(!r)return;let n=e[r];return typeof n=="string"&&n?n:void 0}async function kt(e,t){if(e!=="frontend")return;let r=bt();if(!r?.reCaptchaSiteKey||t?.cacheKey&&ht(t.cacheKey,r))return;let{execute:n}=await(0,Ae.getRecaptcha)(r?.useRecaptchaEnterprise||!1);if(typeof n=="function")try{let o=await n(r.reCaptchaSiteKey,{action:"generate"});return typeof o=="string"&&o?o:void 0}catch{return}}async function z(e,t,r){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let n=await kt(e,r);return n?{...t,"X-Recaptcha-Token":n}:t}function E(e,t){try{e?.onStatus?.(t)}catch{}}function Le(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Ct(e,t){if(!Le(t))return t;let r=vt[e];if(!r)return t;let n={};for(let a of r)a in t&&(n[a]=t[a]);return n}function xt(e,t){return(e==="admin"?At:Pt)[t]}async function K(e,t,r,n,a={}){let o=xt(t,r),s=Ct(r,n);if(!o)throw new x(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new x("backendTransport=fetch but backendBaseUrl is missing.",e);return St(e.backendBaseUrl,o,s,a,e,r,t)}if(!e.backendApiName)throw new x("backendTransport=gatey but backendApiName is missing.",e);return Lt(e.backendApiName,o,s,a,e,r,t)}async function St(e,t,r,n,a,o,s){let i=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...n.headers??{}},c=xe(s,o,r),g=await z(s,u,{cacheKey:c}),d=n.query&&Object.keys(n.query).length>0?"?"+new URLSearchParams(Object.entries(n.query).map(([m,v])=>[m,String(v)])).toString():"";E(n,{feature:o,context:s,step:"backend:request",source:"backend"}),E(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let p=await fetch(i+d,{method:"POST",headers:g,body:JSON.stringify(r??{}),signal:n.signal,credentials:"omit"});if(E(n,{feature:o,context:s,step:"backend:response",source:"backend"}),!p.ok){let m=`HTTP ${p.status}`;try{let v=await p.text();v&&(m=`${m}: ${v.substring(0,400)}`)}catch{}throw new x(`Fetch backend call failed: ${m}`,a,p.status)}let f=p.headers.get("content-type")||"",k=Se(p.headers,"x-recaptcha-verified-at");if(f.includes("application/json")){let m=await p.json(),v=(m&&typeof m.sessionId=="string"&&m.sessionId.trim()?m.sessionId.trim():void 0)??c;return k&&v&&re(v,k),m}return k&&c&&re(c,k),await p.text()}async function Lt(e,t,r,n,a,o,s){let u=globalThis.WpSuite?.plugins?.gatey;if(!u?.cognito?.post)throw new x("Gatey backend selected, but Gatey.cognito.post is not available.",a);let c=xe(s,o,r),g=await z(s,{...n.headers??{}},{cacheKey:c});E(n,{feature:o,context:s,step:"backend:request",source:"backend"}),E(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let d=u.cognito.post({apiName:e,path:t,options:{body:r,headers:g,retryStrategy:{strategy:"no-retry"}}});n?.signal?.addEventListener?.("abort",()=>{d.cancel()});let p=await d.response,f=Se(p.headers,"x-recaptcha-verified-at"),k=await p.body.json(),m=k?.sessionId??c;return f&&typeof m=="string"&&m.trim()&&re(m.trim(),f),E(n,{feature:o,context:s,step:"backend:response",source:"backend"}),k}var Ae,Pe,vt,At,Pt,ne=P(()=>{"use strict";Ae=require("@smart-cloud/wpsuite-core");ee();Pe=new Map;vt={prompt:["text","audio","audioUrl","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};At={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Pt={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var Ge={};q(Ge,{detectLanguage:()=>jt,getPromptOptions:()=>Ve,getProofreadOptions:()=>Fe,getRewriteOptions:()=>Ke,getSummarizeOptions:()=>De,getTranslateOptions:()=>Ue,getWriteOptions:()=>Ee,prompt:()=>Jt,proofread:()=>qt,rewrite:()=>_t,sendChatMessage:()=>Qt,sendFeedbackMessage:()=>Yt,sendSearchMessage:()=>Zt,summarize:()=>Ht,translate:()=>_,write:()=>Nt});function oe(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(oe).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+oe(t[n])).join(",")+"}"}function Tt(e){let t=5381;for(let r=0;r<e.length;r++)t=t*33^e.charCodeAt(r);return(t>>>0).toString(36)}function Ot(e,t){return`${e}:${Tt(oe(t))}`}function ae(){let e=new Map;for(let r of C.values()){let n=e.get(r.kind)??[];n.push(r),e.set(r.kind,n)}for(let[r,n]of e.entries())if(!(n.length<=Re)){n.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of n){if(e.get(r).length<=Re)break;if(!(a.refCount>0)){try{a.destroy()}catch{}C.delete(a.key),e.set(r,(e.get(r)??[]).filter(o=>o.key!==a.key))}}}if(C.size<=Oe)return;let t=Array.from(C.values());t.sort((r,n)=>r.refCount-n.refCount||r.lastUsed-n.lastUsed||r.key.localeCompare(n.key));for(let r of t){if(C.size<=Oe)break;if(!(r.refCount>0)){try{r.destroy()}catch{}C.delete(r.key)}}}async function R(e,t,r,n){let a=Ot(e,t),o=C.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),C.delete(a),C.set(a,o),{model:o.model,fromCache:!0,release:()=>{let u=C.get(a);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),ae())}};let s=W.get(a);if(s)return s;let i=(async()=>{let u=await r(),c={kind:e,key:a,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>n(u)};return C.set(a,c),W.delete(a),ae(),{model:u,fromCache:!1,release:()=>{let g=C.get(a);g&&(g.refCount=Math.max(0,g.refCount-1),g.lastUsed=Date.now(),ae())}}})().catch(u=>{throw W.delete(a),u});return W.set(a,i),i}function S(){return(Me?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function N(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(n=>r===n.toLowerCase())}function l(e,t,r,n){try{r?.onStatus?.({feature:e,context:t,...n})}catch{}}function F(){return Me?.plugins?.aiKit?.settings?.sharedContext??void 0}function L(e){return e?.context??"admin"}function B(e,t=Rt){let r=new AbortController,n=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,s,i=!1,u=()=>{if(r.signal.aborted)return;let c=typeof n?.reason<"u"?n?.reason:void 0;r.abort(c??new DOMException("Aborted","AbortError"))};return n&&(n.aborted?u():n.addEventListener("abort",u)),o&&o>0&&(s=setTimeout(()=>{r.signal.aborted||(i=!0,r.abort(new se(o)))},o)),{signal:r.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),n&&n.removeEventListener("abort",u)}}}function G(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function Bt(e,t,r,n){let a=G(e),o=await He(e.images,r,t,n);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
1
+ "use strict";var $=Object.defineProperty;var Je=Object.getOwnPropertyDescriptor;var Qe=Object.getOwnPropertyNames;var Ze=Object.prototype.hasOwnProperty;var P=(e,t)=>()=>(e&&(t=e(e=0)),t);var q=(e,t)=>{for(var r in t)$(e,r,{get:t[r],enumerable:!0})},Ye=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Qe(t))!Ze.call(e,o)&&o!==r&&$(e,o,{get:()=>t[o],enumerable:!(n=Je(t,o))||n.enumerable});return e};var et=e=>Ye($({},"__esModule",{value:!0}),e);function T(){return globalThis.WpSuite?.plugins?.aiKit}async function X(e=8e3){let t=T();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,n)=>{let o=()=>s(r),a=()=>s(()=>n(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",o),window.removeEventListener("wpsuite:ai-kit:error",a),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",o,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",a,{once:!0});let i=e?window.setTimeout(()=>s(()=>n(new Error("AiKit timeout"))),e):0})}}async function ce(e=1e4){await X(e);let r=T()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var J=P(()=>{"use strict"});var le,A,Q,Z,Y,tt,rt,nt,at,ot,de,U,ge,pe,H=P(()=>{"use strict";le=require("@smart-cloud/wpsuite-core"),A=require("@wordpress/data"),Q=require("aws-amplify/utils");J();typeof WpSuite<"u"?Z=WpSuite.siteSettings:Z={};Y=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},tt=async()=>{let e=T();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+Z.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},rt=async()=>{let e=Y(await(0,le.getConfig)("aiKit")),t=await tt();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},nt={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?Q.I18n.setLanguage(""):Q.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},at={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},ot={},de=e=>(0,A.dispatch)(e),U=e=>(0,A.select)(e),ge=async()=>{let e=await rt(),t=(0,A.createReduxStore)("wpsuite/ai-kit",{reducer(r=e,n){switch(n.type){case"SET_LANGUAGE":return{...r,language:n.language};case"SET_DIRECTION":return{...r,direction:n.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:n.showChatbotPreview}}return r},actions:nt,selectors:at,resolvers:ot});return(0,A.register)(t),t},pe=(e,t,r)=>{let n;function o(){let s=U(e).getState(),i=t(s);if(i!==n){let u=n;n=i,r(n,u)}}let a=(0,A.subscribe)(o,e);return o(),a}});var y,me=P(()=>{"use strict";y="smartcloud-ai-kit"});var h,st,it,ut,fe=P(()=>{"use strict";h=require("react/jsx-runtime"),st=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{d:"M19 27H33"}),(0,h.jsx)("path",{d:"M19 33H33"}),(0,h.jsx)("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),(0,h.jsx)("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),(0,h.jsx)("path",{d:"M16 10V40H36V22"}),(0,h.jsx)("path",{d:"M16 10H22"}),(0,h.jsx)("path",{d:"M22 10V23H36"}),(0,h.jsx)("path",{d:"M22 10L36 22"})]}),it=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),(0,h.jsx)("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),(0,h.jsx)("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),(0,h.jsx)("path",{d:"M16 24H32"})]}),ut=e=>(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,h.jsx)("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),(0,h.jsx)("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),(0,h.jsx)("path",{d:"M42 42l-12 -12"}),(0,h.jsx)("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),(0,h.jsx)("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var x,ee=P(()=>{"use strict";x=class extends Error{constructor(r,n,o){super(r);this.decision=n;this.status=o;this.name="AiBackendError"}}});var Ce={};q(Ce,{MIN_CHROME_VERSION:()=>he,checkOnDeviceAvailability:()=>ve,decideCapability:()=>V,resolveBackend:()=>I});async function ye(){let t=await ct?.plugins?.aiKit?.features.store;return U(t).getConfig()??{}}function we(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function lt(e){if(e.mode)return e.mode;let{transport:t}=we(e);return t?"backend-fallback":"local-only"}async function I(){let e=await ye(),{transport:t,backendApiName:r,backendBaseUrl:n}=we(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return n?{available:!0,transport:t,baseUrl:n,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let o=globalThis.WpSuite?.plugins?.gatey;return!o?.availability||await o.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function O(e){return typeof globalThis[e]<"u"}function ke(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function j(e,t){return e?.find(r=>r.brand===t)?.version}async function gt(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function pt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?ke(t[1]):void 0}function mt(){return!!navigator?.brave}async function ft(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await gt(),n=j(r,"Microsoft Edge")??j(r,"Microsoft Edge WebView2"),o=j(r,"Google Chrome")??j(r,"Chromium"),a=!!n||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),g=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),d=mt()||/\bBrave\//i.test(t);if(a||s||i||u||c||g||d)return{allowed:!1,reason:a?"edge":d?"brave":c?"firefox":g?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let p=ke(o)??pt(t),f=he[e];return f?p?p<f?{allowed:!1,reason:`chrome-too-old-${p}-lt-${f}`,chromeMajor:p}:{allowed:!0,reason:"ok",chromeMajor:p}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:p}}async function ve(e,t){try{let r=await ft(e),n=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:n};let o=a=>a==="unavailable"?dt.has(e)?"on-device unavailable (requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics)":"on-device unavailable (check hardware requirements or see AI-Kit Diagnostics)":n;switch(e){case"writer":{if(!O("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"rewriter":{if(!O("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"summarizer":{if(!O("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"proofreader":{if(!O("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"language-detector":{if(!O("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"translator":{if(!O("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:n};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:n,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let s=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:s!=="unavailable",status:s,reason:o(s)}}case"prompt":{if(!O("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}default:return{available:!1,status:"unknown-feature",reason:n}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function V(e,t,r){let n=await ye(),o=r||lt(n),a=await I(),s=await ve(e,t),i=s.available,u=a.available,c={feature:e,mode:o,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason};return o==="local-only"?i?{...c,source:"on-device",reason:`local-only: on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only: on-device unavailable (${s.reason??s.status})`}:o==="backend-only"?u?{...c,source:"backend",reason:`backend-only: backend available (${a.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only: backend unavailable (${a.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback: using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback: using backend (${a.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${a.reason??"n/a"})`}}var be,ct,he,dt,te=P(()=>{"use strict";be=require("@smart-cloud/wpsuite-core");H();ct=(0,be.getWpSuite)();he={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},dt=new Set(["writer","rewriter","proofreader","prompt"])});var Te={};q(Te,{dispatchBackend:()=>K,withRecaptchaHeaders:()=>z});function bt(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}function yt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function wt(e){let t=e?.reCaptchaChatTtlSeconds,r=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,r)*1e3}function ht(e,t){let r=wt(t);if(r<=0)return!1;let n=Pe.get(e);return n?Date.now()-n<r:!1}function re(e,t){let r=yt(t);r&&Pe.set(e,r)}function xe(e,t,r){if(e!=="frontend"||t!=="prompt"||!Le(r)||r.saveChatSession!==!0)return;let n=r.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Se(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let r=Object.keys(e).find(o=>o.toLowerCase()===t.toLowerCase());if(!r)return;let n=e[r];return typeof n=="string"&&n?n:void 0}async function kt(e,t){if(e!=="frontend")return;let r=bt();if(!r?.reCaptchaSiteKey||t?.cacheKey&&ht(t.cacheKey,r))return;let{execute:n}=await(0,Ae.getRecaptcha)(r?.useRecaptchaEnterprise||!1);if(typeof n=="function")try{let a=await n(r.reCaptchaSiteKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function z(e,t,r){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let n=await kt(e,r);return n?{...t,"X-Recaptcha-Token":n}:t}function E(e,t){try{e?.onStatus?.(t)}catch{}}function Le(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Ct(e,t){if(!Le(t))return t;let r=vt[e];if(!r)return t;let n={};for(let o of r)o in t&&(n[o]=t[o]);return n}function xt(e,t){return(e==="admin"?At:Pt)[t]}async function K(e,t,r,n,o={}){let a=xt(t,r),s=Ct(r,n);if(!a)throw new x(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new x("backendTransport=fetch but backendBaseUrl is missing.",e);return St(e.backendBaseUrl,a,s,o,e,r,t)}if(!e.backendApiName)throw new x("backendTransport=gatey but backendApiName is missing.",e);return Lt(e.backendApiName,a,s,o,e,r,t)}async function St(e,t,r,n,o,a,s){let i=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...n.headers??{}},c=xe(s,a,r),g=await z(s,u,{cacheKey:c}),d=n.query&&Object.keys(n.query).length>0?"?"+new URLSearchParams(Object.entries(n.query).map(([m,v])=>[m,String(v)])).toString():"";E(n,{feature:a,context:s,step:"backend:request",source:"backend"}),E(n,{feature:a,context:s,step:"backend:waiting",source:"backend"});let p=await fetch(i+d,{method:"POST",headers:g,body:JSON.stringify(r??{}),signal:n.signal,credentials:"omit"});if(E(n,{feature:a,context:s,step:"backend:response",source:"backend"}),!p.ok){let m=`HTTP ${p.status}`;try{let v=await p.text();v&&(m=`${m}: ${v.substring(0,400)}`)}catch{}throw new x(`Fetch backend call failed: ${m}`,o,p.status)}let f=p.headers.get("content-type")||"",k=Se(p.headers,"x-recaptcha-verified-at");if(f.includes("application/json")){let m=await p.json(),v=(m&&typeof m.sessionId=="string"&&m.sessionId.trim()?m.sessionId.trim():void 0)??c;return k&&v&&re(v,k),m}return k&&c&&re(c,k),await p.text()}async function Lt(e,t,r,n,o,a,s){let u=globalThis.WpSuite?.plugins?.gatey;if(!u?.cognito?.post)throw new x("Gatey backend selected, but Gatey.cognito.post is not available.",o);let c=xe(s,a,r),g=await z(s,{...n.headers??{}},{cacheKey:c});E(n,{feature:a,context:s,step:"backend:request",source:"backend"}),E(n,{feature:a,context:s,step:"backend:waiting",source:"backend"});let d=u.cognito.post({apiName:e,path:t,options:{body:r,headers:g,retryStrategy:{strategy:"no-retry"}}});n?.signal?.addEventListener?.("abort",()=>{d.cancel()});let p=await d.response,f=Se(p.headers,"x-recaptcha-verified-at"),k=await p.body.json(),m=k?.sessionId??c;return f&&typeof m=="string"&&m.trim()&&re(m.trim(),f),E(n,{feature:a,context:s,step:"backend:response",source:"backend"}),k}var Ae,Pe,vt,At,Pt,ne=P(()=>{"use strict";Ae=require("@smart-cloud/wpsuite-core");ee();Pe=new Map;vt={prompt:["text","audio","audioUrl","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};At={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Pt={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var Ve={};q(Ve,{detectLanguage:()=>jt,getPromptOptions:()=>je,getProofreadOptions:()=>Fe,getRewriteOptions:()=>Ke,getSummarizeOptions:()=>De,getTranslateOptions:()=>Ue,getWriteOptions:()=>Ee,prompt:()=>Yt,proofread:()=>qt,rewrite:()=>_t,sendChatMessage:()=>er,sendFeedbackMessage:()=>rr,sendSearchMessage:()=>tr,summarize:()=>Ht,translate:()=>_,write:()=>Nt});function oe(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(oe).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+oe(t[n])).join(",")+"}"}function Tt(e){let t=5381;for(let r=0;r<e.length;r++)t=t*33^e.charCodeAt(r);return(t>>>0).toString(36)}function Ot(e,t){return`${e}:${Tt(oe(t))}`}function ae(){let e=new Map;for(let r of C.values()){let n=e.get(r.kind)??[];n.push(r),e.set(r.kind,n)}for(let[r,n]of e.entries())if(!(n.length<=Re)){n.sort((o,a)=>o.refCount-a.refCount||o.lastUsed-a.lastUsed||o.key.localeCompare(a.key));for(let o of n){if(e.get(r).length<=Re)break;if(!(o.refCount>0)){try{o.destroy()}catch{}C.delete(o.key),e.set(r,(e.get(r)??[]).filter(a=>a.key!==o.key))}}}if(C.size<=Oe)return;let t=Array.from(C.values());t.sort((r,n)=>r.refCount-n.refCount||r.lastUsed-n.lastUsed||r.key.localeCompare(n.key));for(let r of t){if(C.size<=Oe)break;if(!(r.refCount>0)){try{r.destroy()}catch{}C.delete(r.key)}}}async function R(e,t,r,n){let o=Ot(e,t),a=C.get(o);if(a)return a.refCount++,a.lastUsed=Date.now(),C.delete(o),C.set(o,a),{model:a.model,fromCache:!0,release:()=>{let u=C.get(o);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),ae())}};let s=W.get(o);if(s)return s;let i=(async()=>{let u=await r(),c={kind:e,key:o,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>n(u)};return C.set(o,c),W.delete(o),ae(),{model:u,fromCache:!1,release:()=>{let g=C.get(o);g&&(g.refCount=Math.max(0,g.refCount-1),g.lastUsed=Date.now(),ae())}}})().catch(u=>{throw W.delete(o),u});return W.set(o,i),i}function S(){return(Me?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function N(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(n=>r===n.toLowerCase())}function l(e,t,r,n){try{r?.onStatus?.({feature:e,context:t,...n})}catch{}}function F(){return Me?.plugins?.aiKit?.settings?.sharedContext??void 0}function L(e){return e?.context??"admin"}function B(e,t=Rt){let r=new AbortController,n=e?.signal,o=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,a=typeof o=="number"?o:t,s,i=!1,u=()=>{if(r.signal.aborted)return;let c=typeof n?.reason<"u"?n?.reason:void 0;r.abort(c??new DOMException("Aborted","AbortError"))};return n&&(n.aborted?u():n.addEventListener("abort",u)),a&&a>0&&(s=setTimeout(()=>{r.signal.aborted||(i=!0,r.abort(new se(a)))},a)),{signal:r.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),n&&n.removeEventListener("abort",u)}}}function G(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function Bt(e,t,r,n){let o=G(e),a=await qe(e.images,r,t,n);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
2
2
  `),systemPrompt:e.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
3
- `),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function Mt(e,t,r,n){let a=G(e),o=await He(e.images,r,t,n),s=await je(e.audio,r,t,n);return{sessionId:e.sessionId,text:e.message,images:o?.images,imageUrls:o?.imageUrls,audio:s?.audio,audioUrl:s?.audioUrl,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...a}}async function It(e,t,r,n){let a=G(e),o=await je(e.audio,r,t,n);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:o?.audio,audioUrl:o?.audioUrl,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,...a}}async function Et(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function Kt(e){let t=G(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function Ft(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function Dt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Ut(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function zt(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function Wt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function M(e,t,r,n,a,o,s,i){l(n,e,i,{step:"decide",message:"Deciding capability",silent:r});let u=await V(n,a,t);if(l(n,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:r}),u.source==="on-device")try{let c=await o();return l(n,e,i,{step:"done",source:"on-device",silent:r}),c}catch(c){console.error(`Error in on-device ${n}:`,c),l(n,e,i,{step:"error",source:"on-device",message:c.message,silent:r}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){l(n,e,i,{step:"backend:request",source:"backend",silent:r});let c=typeof s=="function"?await s(u):s,g=await K(u,e,n,c,i);return l(n,e,i,{step:"done",source:"backend",silent:r}),g}throw new Error(`No capability for "${n}" (${e}). Reason: ${u.reason}`)}function Vt(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],n=t?r.map(o=>({type:"image",value:o})):[],a;if(typeof e.messages=="string")a=t?[{role:"user",content:[{type:"text",value:e.messages},...n]}]:e.messages;else{let o=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=o.length-1;i>=0;i--)if(o[i].role==="user"){s=i;break}if(s===-1)o.push({role:"user",content:[{type:"text",value:""},...n]});else{let i=String(o[s].content??"");o[s]={...o[s],content:[{type:"text",value:i},...n]}}}a=o}return a}function Gt(e){return typeof Blob<"u"&&e instanceof Blob}function $t(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function We(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function Xt(e){return new Promise((t,r)=>{let n=new FileReader;n.onerror=()=>r(n.error??new Error("FileReader error")),n.onload=()=>t(String(n.result??"")),n.readAsDataURL(e)})}async function Ne(e){let t=await Xt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function _e(e,t,r,n,a,o){let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...o?.headers??{}},u=await z(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let f=new URLSearchParams({fileName:r,contentType:n,contentLength:String(a)}).toString(),k=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${f}`,m=await fetch(k,{method:"GET",headers:u,signal:o?.signal,credentials:"omit"});if(!m.ok){let D=await m.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${m.status}${D?": "+D.substring(0,200):""}`)}let v=await m.json();if(!v?.uploadUrl||!v?.key)throw new Error("generate-upload-url response missing uploadUrl/key");return{uploadUrl:v.uploadUrl,key:v.key}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let c=globalThis.WpSuite?.plugins?.gatey,g={fileName:r,contentType:n,contentLength:a};if(c?.cognito?.get){let f=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(g).reduce((m,v)=>(m[v]=String(g[v]),m),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{f.cancel()});let k=await f.response.then(m=>m.body.json());if(!k?.uploadUrl||!k?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:k.uploadUrl,key:k.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let d=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:g,headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{d.cancel()});let p=await d.response.then(f=>f.body.json());if(!p?.uploadUrl||!p?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:p.uploadUrl,key:p.key}}async function qe(e,t,r,n){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:n?.signal});if(!a.ok){let o=await a.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${a.status}${o?": "+o.substring(0,200):""}`)}}async function He(e,t,r,n){if(!e||e.length===0)return;let a=[];for(let c of e){if(!Gt(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(c)}let o=a.reduce((c,g)=>c+(g.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=ze){l("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let g of a)c.push({format:We(g.type),data:await Ne(g)});return{images:c}}l("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<a.length;c++){let g=a[c],d=g.type||"application/octet-stream",p=g.name||`image_${c}.${$t(d)}`;l("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:f,key:k}=await _e(t,r,p,d,g.size||0,n);l("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading"}),await qe(f,g,d,n),u.push(k)}return{imageUrls:u}}async function je(e,t,r,n){if(!e)return;let a=e.size||0;if(Math.ceil(a*1.37+2048)<=ze){l("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let d=We(e.type||"audio/webm"),p=await Ne(e);return{audio:{format:d,data:p}}}l("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||"audio.webm";l("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:g}=await _e(t,r,u,i,e.size||0,n);return l("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await qe(c,e,i,n),{audioUrl:g}}var Be,Oe,Re,C,W,Me,Rt,Ie,se,Ee,Nt,Ke,_t,Fe,qt,De,Ht,jt,Ue,_,ze,Ve,Jt,Qt,Zt,Yt,$e=P(()=>{"use strict";Be=require("@smart-cloud/wpsuite-core");ne();te();Xe();Oe=8,Re=2,C=new Map,W=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of C.values())try{e.destroy()}catch{}C.clear(),W.clear()});Me=(0,Be.getWpSuite)();Rt=45e3,Ie=5e3,se=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Ee=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Nt=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a=e.outputLanguage?e.outputLanguage:S(),o=a,s=!1;N(a)||(s=!0,a="en");let i=Ee({...e,outputLanguage:a});return M(r,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");l("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=B(t);try{let{model:c,release:g}=await R("writer",{core:i,sharedContext:n},()=>Writer.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("writer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("writer",r,t,{step:"on-device:ready",source:"on-device"});try{l("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let d=await c.write(e.prompt,{context:e.context,signal:u.signal});return s?{result:(await _({text:d,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying writer:",d)}}}finally{u.dispose()}},Kt({...e,sharedContext:n,outputLanguage:o}),t)},Ke=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},_t=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a=e.outputLanguage?e.outputLanguage:S(),o=a,s=!1;N(a)||(s=!0,a="en");let i=Ke({...e,outputLanguage:a});return M(r,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");l("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=B(t);try{let{model:c,release:g}=await R("rewriter",{core:i,sharedContext:n},()=>Rewriter.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{l("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let d=await c.rewrite(e.text,{context:e.context,signal:u.signal});return s?{result:(await _({text:d,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying rewriter:",d)}}}finally{u.dispose()}},Ft({...e,sharedContext:n,outputLanguage:o}),t)},Fe=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),qt=async(e,t)=>{let r=L(t),n=await Fe();return M(r,t?.modeOverride,!1,"proofreader",n,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");l("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=B(t);try{let{model:o,release:s}=await R("proofreader",{core:n},()=>Proofreader.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;l("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());l("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return l("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await o.proofread(e.text,{signal:a.signal})}}finally{try{s()}catch(i){console.error("Error destroying proofreader:",i)}}}finally{a.dispose()}},Wt(e),t)},De=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Ht=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a=e.outputLanguage?e.outputLanguage:S(),o=a,s=!1;N(a)||(s=!0,a="en");let i=await De({...e,outputLanguage:a});return M(r,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");l("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=B(t);try{let{model:c,release:g}=await R("summarizer",{core:i,sharedContext:n},()=>Summarizer.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{l("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let d=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await _({text:d,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying summarizer:",d)}}}finally{u.dispose()}},Dt({...e,sharedContext:n,outputLanguage:o}),t)},jt=async(e,t)=>{let r=L(t);return M(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");l("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let n=B(t,Ie);try{let{model:a,release:o}=await R("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;l("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());l("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return l("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await a.detect(e.text,{signal:n.signal})).filter(i=>ie.find(u=>u.value===i.detectedLanguage))}}}finally{try{o()}catch(s){console.error("Error destroying language detector:",s)}}}finally{n.dispose()}},zt(e.text,t),t)},Ue=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??S()??"en"};return Promise.resolve(t)},_=async(e,t)=>{let r=L(t),n=await Ue({...e});return M(r,t?.modeOverride,t?.silent,"translator",n,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");l("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let a=B(t,Ie);try{let{model:o,release:s}=await R("translator",{core:n},()=>Translator.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;l("translator",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());l("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{l("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i=[],u=()=>{if(typeof a.signal.throwIfAborted=="function")a.signal.throwIfAborted();else if(a.signal.aborted)throw a.signal.reason??new DOMException("Aborted","AbortError")};for(let g of e.text.split(`
4
- `))u(),i.push(o.translate(g.trim()));return{result:(await Promise.all(i)).join(`
5
- `)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{a.dispose()}},Ut(e.text,e.sourceLanguage,e.targetLanguage),t)};ze=4*1024*1024;Ve=async e=>{let t=e.outputLanguage?e.outputLanguage:S();return N(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Jt=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a=e.outputLanguage?e.outputLanguage:S(),o=a,s=!1;N(a)||(s=!0,a="en");let i=await Ve({...e,outputLanguage:a}),u=await V("prompt",i,t?.modeOverride);return M(r,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");l("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let f of e.messages)f.role==="system"&&f.content.trim()&&c.push(f.content.trim());n&&n.trim()&&c.push("SHARED CONTEXT: "+n.trim())}let g=c.length>0?c.join(`
3
+ `),images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...o}}async function Mt(e,t,r,n){let o=G(e),a=await qe(e.images,r,t,n),s=await He(e.audio,r,t,n);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,audio:s?.audio,audioUrl:s?.audioUrl,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...o}}async function It(e,t,r,n){let o=G(e),a=await He(e.audio,r,t,n);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:a?.audio,audioUrl:a?.audioUrl,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,...o}}async function Et(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function Kt(e){let t=G(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function Ft(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function Dt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Ut(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function zt(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function Wt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function M(e,t,r,n,o,a,s,i){l(n,e,i,{step:"decide",message:"Deciding capability",silent:r});let u=await V(n,o,t);if(l(n,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:r}),u.source==="on-device")try{let c=await a();return l(n,e,i,{step:"done",source:"on-device",silent:r}),c}catch(c){console.error(`Error in on-device ${n}:`,c),l(n,e,i,{step:"error",source:"on-device",message:c.message,silent:r}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){l(n,e,i,{step:"backend:request",source:"backend",silent:r});let c=typeof s=="function"?await s(u):s,g=await K(u,e,n,c,i);return l(n,e,i,{step:"done",source:"backend",silent:r}),g}throw new Error(`No capability for "${n}" (${e}). Reason: ${u.reason}`)}function Vt(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],n=t?r.map(a=>({type:"image",value:a})):[],o;if(typeof e.messages=="string")o=t?[{role:"user",content:[{type:"text",value:e.messages},...n]}]:e.messages;else{let a=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=a.length-1;i>=0;i--)if(a[i].role==="user"){s=i;break}if(s===-1)a.push({role:"user",content:[{type:"text",value:""},...n]});else{let i=String(a[s].content??"");a[s]={...a[s],content:[{type:"text",value:i},...n]}}}o=a}return o}function Gt(e){return typeof Blob<"u"&&e instanceof Blob}function $t(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Xt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function Jt(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":(t.includes("webm"),"webm")}function Qt(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":"webm"}async function Zt(e){return new Promise((t,r)=>{let n=new FileReader;n.onerror=()=>r(n.error??new Error("FileReader error")),n.onload=()=>t(String(n.result??"")),n.readAsDataURL(e)})}async function We(e){let t=await Zt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Ne(e,t,r,n,o,a){let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...a?.headers??{}},u=await z(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let f=new URLSearchParams({fileName:r,contentType:n,contentLength:String(o)}).toString(),k=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${f}`,m=await fetch(k,{method:"GET",headers:u,signal:a?.signal,credentials:"omit"});if(!m.ok){let D=await m.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${m.status}${D?": "+D.substring(0,200):""}`)}let v=await m.json();if(!v?.uploadUrl||!v?.key)throw new Error("generate-upload-url response missing uploadUrl/key");return{uploadUrl:v.uploadUrl,key:v.key}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let c=globalThis.WpSuite?.plugins?.gatey,g={fileName:r,contentType:n,contentLength:o};if(c?.cognito?.get){let f=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(g).reduce((m,v)=>(m[v]=String(g[v]),m),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{f.cancel()});let k=await f.response.then(m=>m.body.json());if(!k?.uploadUrl||!k?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:k.uploadUrl,key:k.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let d=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:g,headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{d.cancel()});let p=await d.response.then(f=>f.body.json());if(!p?.uploadUrl||!p?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:p.uploadUrl,key:p.key}}async function _e(e,t,r,n){let o=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:n?.signal});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${o.status}${a?": "+a.substring(0,200):""}`)}}async function qe(e,t,r,n){if(!e||e.length===0)return;let o=[];for(let c of e){if(!Gt(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");o.push(c)}let a=o.reduce((c,g)=>c+(g.size||0),0);if(Math.ceil(a*1.37+2048*o.length)<=ze){l("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let g of o)c.push({format:Xt(g.type),data:await We(g)});return{images:c}}l("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<o.length;c++){let g=o[c],d=g.type||"application/octet-stream",p=g.name||`image_${c}.${$t(d)}`;l("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:f,key:k}=await Ne(t,r,p,d,g.size||0,n);l("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading"}),await _e(f,g,d,n),u.push(k)}return{imageUrls:u}}async function He(e,t,r,n){if(!e)return;let o=e.size||0;if(Math.ceil(o*1.37+2048)<=ze){l("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let d=Qt(e.type||"audio/webm"),p=await We(e);return{audio:{format:d,data:p}}}l("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||`audio.${Jt(i)}`;l("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:g}=await Ne(t,r,u,i,e.size||0,n);return l("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await _e(c,e,i,n),{audioUrl:g}}var Be,Oe,Re,C,W,Me,Rt,Ie,se,Ee,Nt,Ke,_t,Fe,qt,De,Ht,jt,Ue,_,ze,je,Yt,er,tr,rr,Ge=P(()=>{"use strict";Be=require("@smart-cloud/wpsuite-core");ne();te();$e();Oe=8,Re=2,C=new Map,W=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of C.values())try{e.destroy()}catch{}C.clear(),W.clear()});Me=(0,Be.getWpSuite)();Rt=45e3,Ie=5e3,se=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Ee=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Nt=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;N(o)||(s=!0,o="en");let i=Ee({...e,outputLanguage:o});return M(r,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");l("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=B(t);try{let{model:c,release:g}=await R("writer",{core:i,sharedContext:n},()=>Writer.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("writer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("writer",r,t,{step:"on-device:ready",source:"on-device"});try{l("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let d=await c.write(e.prompt,{context:e.context,signal:u.signal});return s?{result:(await _({text:d,sourceLanguage:o,targetLanguage:a},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying writer:",d)}}}finally{u.dispose()}},Kt({...e,sharedContext:n,outputLanguage:a}),t)},Ke=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},_t=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;N(o)||(s=!0,o="en");let i=Ke({...e,outputLanguage:o});return M(r,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");l("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=B(t);try{let{model:c,release:g}=await R("rewriter",{core:i,sharedContext:n},()=>Rewriter.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{l("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let d=await c.rewrite(e.text,{context:e.context,signal:u.signal});return s?{result:(await _({text:d,sourceLanguage:o,targetLanguage:a},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying rewriter:",d)}}}finally{u.dispose()}},Ft({...e,sharedContext:n,outputLanguage:a}),t)},Fe=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),qt=async(e,t)=>{let r=L(t),n=await Fe();return M(r,t?.modeOverride,!1,"proofreader",n,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");l("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let o=B(t);try{let{model:a,release:s}=await R("proofreader",{core:n},()=>Proofreader.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;l("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());l("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return l("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await a.proofread(e.text,{signal:o.signal})}}finally{try{s()}catch(i){console.error("Error destroying proofreader:",i)}}}finally{o.dispose()}},Wt(e),t)},De=e=>{let t=e.outputLanguage?e.outputLanguage:S(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Ht=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;N(o)||(s=!0,o="en");let i=await De({...e,outputLanguage:o});return M(r,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");l("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=B(t);try{let{model:c,release:g}=await R("summarizer",{core:i,sharedContext:n},()=>Summarizer.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{l("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let d=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await _({text:d,sourceLanguage:o,targetLanguage:a},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying summarizer:",d)}}}finally{u.dispose()}},Dt({...e,sharedContext:n,outputLanguage:a}),t)},jt=async(e,t)=>{let r=L(t);return M(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");l("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let n=B(t,Ie);try{let{model:o,release:a}=await R("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;l("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());l("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return l("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await o.detect(e.text,{signal:n.signal})).filter(i=>ie.find(u=>u.value===i.detectedLanguage))}}}finally{try{a()}catch(s){console.error("Error destroying language detector:",s)}}}finally{n.dispose()}},zt(e.text,t),t)},Ue=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??S()??"en"};return Promise.resolve(t)},_=async(e,t)=>{let r=L(t),n=await Ue({...e});return M(r,t?.modeOverride,t?.silent,"translator",n,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");l("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let o=B(t,Ie);try{let{model:a,release:s}=await R("translator",{core:n},()=>Translator.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;l("translator",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());l("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{l("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i=[],u=()=>{if(typeof o.signal.throwIfAborted=="function")o.signal.throwIfAborted();else if(o.signal.aborted)throw o.signal.reason??new DOMException("Aborted","AbortError")};for(let g of e.text.split(`
4
+ `))u(),i.push(a.translate(g.trim()));return{result:(await Promise.all(i)).join(`
5
+ `)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{o.dispose()}},Ut(e.text,e.sourceLanguage,e.targetLanguage),t)};ze=4*1024*1024;je=async e=>{let t=e.outputLanguage?e.outputLanguage:S();return N(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Yt=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;N(o)||(s=!0,o="en");let i=await je({...e,outputLanguage:o}),u=await V("prompt",i,t?.modeOverride);return M(r,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");l("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let f of e.messages)f.role==="system"&&f.content.trim()&&c.push(f.content.trim());n&&n.trim()&&c.push("SHARED CONTEXT: "+n.trim())}let g=c.length>0?c.join(`
6
6
 
7
- `):void 0,d=g?[{role:"system",content:g}]:void 0,p=B(t);try{let{model:f,release:k}=await R("language-model",{core:i,initialPrompts:d},()=>LanguageModel.create({...i,initialPrompts:d,monitor(m){m.addEventListener("downloadprogress",v=>{let D=v.loaded;l("prompt",r,t,{step:"on-device:download",source:"on-device",progress:D,loaded:D})})}}),m=>m.destroy());l("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{l("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let m=await f.prompt(Vt(e),{signal:p.signal,responseConstraint:e.responseConstraint});return s?{result:(await _({text:m,sourceLanguage:a,targetLanguage:o},{context:r,signal:p.signal})).result}:{result:m}}finally{try{k()}catch(m){console.error("Error destroying LanguageModel:",m)}}}finally{p.dispose()}},await Bt({...e,sharedContext:n},r,u,t),t)},Qt=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a="prompt",o=await I(),s={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},i=await Mt({sessionId:e.sessionId,message:e.message,images:e.images,sharedContext:n},r,s,t);l(a,r,t,{step:"backend:request",source:"backend"});let u=await K(s,r,a,i,t);return l(a,r,t,{step:"done",source:"backend"}),u},Zt=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),a="prompt",o=await I(),s={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},i=await It({...e,sharedContext:n},r,s,t);l(a,r,t,{step:"backend:request",source:"backend"});let u=await K(s,r,a,i,t);return l(a,r,t,{step:"done",source:"backend"}),u},Yt=async(e,t)=>{let r="frontend",n="prompt",a=await I(),o={feature:n,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},s=await Et({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});l(n,r,t,{step:"backend:request",source:"backend"});let i=await K(o,r,n,s,t);return l(n,r,t,{step:"done",source:"backend"}),i}});var Cr={};q(Cr,{AiKitChatbotIcon:()=>ut,AiKitDocSearchIcon:()=>ct,AiKitFeatureIcon:()=>it,BackendError:()=>x,LANGUAGE_OPTIONS:()=>ie,TEXT_DOMAIN:()=>y,checkOnDeviceAvailability:()=>rr,decideCapability:()=>tr,detectLanguage:()=>fr,dispatchBackend:()=>ar,getAiKitPlugin:()=>T,getMinChromeVersions:()=>er,getPromptOptions:()=>br,getProofreadOptions:()=>cr,getRewriteOptions:()=>ir,getStore:()=>ce,getStoreDispatch:()=>de,getStoreSelect:()=>U,getSummarizeOptions:()=>dr,getTranslateOptions:()=>pr,getWriteOptions:()=>or,initializeAiKit:()=>vr,observeStore:()=>pe,prompt:()=>yr,proofread:()=>lr,rewrite:()=>ur,sanitizeAiKitConfig:()=>Y,sendChatMessage:()=>wr,sendFeedbackMessage:()=>hr,sendSearchMessage:()=>kr,summarize:()=>gr,translate:()=>mr,waitForAiKitReady:()=>X,write:()=>sr});module.exports=tt(Cr);var Je,w,ie,ue,er,tr,rr,nr,ar,b,or,sr,ir,ur,cr,lr,dr,gr,pr,mr,fr,br,yr,wr,hr,kr,vr,Xe=P(()=>{Je=require("@smart-cloud/wpsuite-core"),w=require("@wordpress/i18n");J();H();me();H();fe();ee();ie=[{label:(0,w.__)("Arabic",y),value:"ar"},{label:(0,w.__)("Chinese",y),value:"zh"},{label:(0,w.__)("Dutch",y),value:"nl"},{label:(0,w.__)("English",y),value:"en"},{label:(0,w.__)("French",y),value:"fr"},{label:(0,w.__)("German",y),value:"de"},{label:(0,w.__)("Hebrew",y),value:"he"},{label:(0,w.__)("Hindi",y),value:"hi"},{label:(0,w.__)("Hungarian",y),value:"hu"},{label:(0,w.__)("Indonesian",y),value:"id"},{label:(0,w.__)("Italian",y),value:"it"},{label:(0,w.__)("Japanese",y),value:"ja"},{label:(0,w.__)("Korean",y),value:"ko"},{label:(0,w.__)("Norwegian",y),value:"no"},{label:(0,w.__)("Polish",y),value:"pl"},{label:(0,w.__)("Portuguese",y),value:"pt"},{label:(0,w.__)("Russian",y),value:"ru"},{label:(0,w.__)("Spanish",y),value:"es"},{label:(0,w.__)("Swedish",y),value:"sv"},{label:(0,w.__)("Thai",y),value:"th"},{label:(0,w.__)("Turkish",y),value:"tr"},{label:(0,w.__)("Ukrainian",y),value:"uk"}],ue=Promise.resolve().then(()=>(te(),Ce)),er=async()=>(await ue).MIN_CHROME_VERSION,tr=async(...e)=>(await ue).decideCapability(...e),rr=async(...e)=>(await ue).checkOnDeviceAvailability(...e),nr=Promise.resolve().then(()=>(ne(),Te)),ar=async(...e)=>(await nr).dispatchBackend(...e),b=Promise.resolve().then(()=>($e(),Ge)),or=async(...e)=>(await b).getWriteOptions(...e),sr=async(...e)=>(await b).write(...e),ir=async(...e)=>(await b).getRewriteOptions(...e),ur=async(...e)=>(await b).rewrite(...e),cr=async(...e)=>(await b).getProofreadOptions(...e),lr=async(...e)=>(await b).proofread(...e),dr=async(...e)=>(await b).getSummarizeOptions(...e),gr=async(...e)=>(await b).summarize(...e),pr=async(...e)=>(await b).getTranslateOptions(...e),mr=async(...e)=>(await b).translate(...e),fr=async(...e)=>(await b).detectLanguage(...e),br=async(...e)=>(await b).getPromptOptions(...e),yr=async(...e)=>(await b).prompt(...e),wr=async(...e)=>(await b).sendChatMessage(...e),hr=async(...e)=>(await b).sendFeedbackMessage(...e),kr=async(...e)=>(await b).sendSearchMessage(...e),vr=(e,t)=>{let r=globalThis.WpSuite,n=T();if(!n)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");(0,Je.attachDefaultPluginRuntime)(n),n.status=n.status??"initializing";let a=ge();return n.features={store:a,renderFeature:async o=>await e({...o,store:await a}),renderSearchComponent:async o=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...o,store:await a})},write:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.write(...o)},rewrite:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.rewrite(...o)},proofread:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.proofread(...o)},summarize:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.summarize(...o)},translate:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.translate(...o)},detectLanguage:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.detectLanguage(...o)},prompt:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.prompt(...o)},sendChatMessage:async(...o)=>(await b).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await b).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await b).sendSearchMessage(...o)},a.then(()=>{n.status="available",r?.events?.emit("wpsuite:ai-kit:ready",{key:n.key,version:n.version})}).catch(o=>{n.status="error",console.error("AiKit plugin failed to initialize:",o),r?.events?.emit("wpsuite:ai-kit:error",{key:n.key,error:String(o)})}),n}});Xe();0&&(module.exports={AiKitChatbotIcon,AiKitDocSearchIcon,AiKitFeatureIcon,BackendError,LANGUAGE_OPTIONS,TEXT_DOMAIN,checkOnDeviceAvailability,decideCapability,detectLanguage,dispatchBackend,getAiKitPlugin,getMinChromeVersions,getPromptOptions,getProofreadOptions,getRewriteOptions,getStore,getStoreDispatch,getStoreSelect,getSummarizeOptions,getTranslateOptions,getWriteOptions,initializeAiKit,observeStore,prompt,proofread,rewrite,sanitizeAiKitConfig,sendChatMessage,sendFeedbackMessage,sendSearchMessage,summarize,translate,waitForAiKitReady,write});
7
+ `):void 0,d=g?[{role:"system",content:g}]:void 0,p=B(t);try{let{model:f,release:k}=await R("language-model",{core:i,initialPrompts:d},()=>LanguageModel.create({...i,initialPrompts:d,monitor(m){m.addEventListener("downloadprogress",v=>{let D=v.loaded;l("prompt",r,t,{step:"on-device:download",source:"on-device",progress:D,loaded:D})})}}),m=>m.destroy());l("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{l("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let m=await f.prompt(Vt(e),{signal:p.signal,responseConstraint:e.responseConstraint});return s?{result:(await _({text:m,sourceLanguage:o,targetLanguage:a},{context:r,signal:p.signal})).result}:{result:m}}finally{try{k()}catch(m){console.error("Error destroying LanguageModel:",m)}}}finally{p.dispose()}},await Bt({...e,sharedContext:n},r,u,t),t)},er=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),o="prompt",a=await I(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await Mt({sessionId:e.sessionId,message:e.message,audio:e.audio,images:e.images,sharedContext:n},r,s,t);l(o,r,t,{step:"backend:request",source:"backend"});let u=await K(s,r,o,i,t);return l(o,r,t,{step:"done",source:"backend"}),u},tr=async(e,t)=>{let r=L(t),n=e.sharedContext??F(),o="prompt",a=await I(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await It({...e,sharedContext:n},r,s,t);l(o,r,t,{step:"backend:request",source:"backend"});let u=await K(s,r,o,i,t);return l(o,r,t,{step:"done",source:"backend"}),u},rr=async(e,t)=>{let r="frontend",n="prompt",o=await I(),a={feature:n,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await Et({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});l(n,r,t,{step:"backend:request",source:"backend"});let i=await K(a,r,n,s,t);return l(n,r,t,{step:"done",source:"backend"}),i}});var xr={};q(xr,{AiKitChatbotIcon:()=>it,AiKitDocSearchIcon:()=>ut,AiKitFeatureIcon:()=>st,BackendError:()=>x,LANGUAGE_OPTIONS:()=>ie,TEXT_DOMAIN:()=>y,checkOnDeviceAvailability:()=>or,decideCapability:()=>ar,detectLanguage:()=>wr,dispatchBackend:()=>ir,getAiKitPlugin:()=>T,getMinChromeVersions:()=>nr,getPromptOptions:()=>hr,getProofreadOptions:()=>gr,getRewriteOptions:()=>lr,getStore:()=>ce,getStoreDispatch:()=>de,getStoreSelect:()=>U,getSummarizeOptions:()=>mr,getTranslateOptions:()=>br,getWriteOptions:()=>ur,initializeAiKit:()=>Pr,observeStore:()=>pe,prompt:()=>kr,proofread:()=>pr,rewrite:()=>dr,sanitizeAiKitConfig:()=>Y,sendChatMessage:()=>vr,sendFeedbackMessage:()=>Cr,sendSearchMessage:()=>Ar,summarize:()=>fr,translate:()=>yr,waitForAiKitReady:()=>X,write:()=>cr});module.exports=et(xr);var Xe,w,ie,ue,nr,ar,or,sr,ir,b,ur,cr,lr,dr,gr,pr,mr,fr,br,yr,wr,hr,kr,vr,Cr,Ar,Pr,$e=P(()=>{Xe=require("@smart-cloud/wpsuite-core"),w=require("@wordpress/i18n");J();H();me();H();fe();ee();ie=[{label:(0,w.__)("Arabic",y),value:"ar"},{label:(0,w.__)("Chinese",y),value:"zh"},{label:(0,w.__)("Dutch",y),value:"nl"},{label:(0,w.__)("English",y),value:"en"},{label:(0,w.__)("French",y),value:"fr"},{label:(0,w.__)("German",y),value:"de"},{label:(0,w.__)("Hebrew",y),value:"he"},{label:(0,w.__)("Hindi",y),value:"hi"},{label:(0,w.__)("Hungarian",y),value:"hu"},{label:(0,w.__)("Indonesian",y),value:"id"},{label:(0,w.__)("Italian",y),value:"it"},{label:(0,w.__)("Japanese",y),value:"ja"},{label:(0,w.__)("Korean",y),value:"ko"},{label:(0,w.__)("Norwegian",y),value:"no"},{label:(0,w.__)("Polish",y),value:"pl"},{label:(0,w.__)("Portuguese",y),value:"pt"},{label:(0,w.__)("Russian",y),value:"ru"},{label:(0,w.__)("Spanish",y),value:"es"},{label:(0,w.__)("Swedish",y),value:"sv"},{label:(0,w.__)("Thai",y),value:"th"},{label:(0,w.__)("Turkish",y),value:"tr"},{label:(0,w.__)("Ukrainian",y),value:"uk"}],ue=Promise.resolve().then(()=>(te(),Ce)),nr=async()=>(await ue).MIN_CHROME_VERSION,ar=async(...e)=>(await ue).decideCapability(...e),or=async(...e)=>(await ue).checkOnDeviceAvailability(...e),sr=Promise.resolve().then(()=>(ne(),Te)),ir=async(...e)=>(await sr).dispatchBackend(...e),b=Promise.resolve().then(()=>(Ge(),Ve)),ur=async(...e)=>(await b).getWriteOptions(...e),cr=async(...e)=>(await b).write(...e),lr=async(...e)=>(await b).getRewriteOptions(...e),dr=async(...e)=>(await b).rewrite(...e),gr=async(...e)=>(await b).getProofreadOptions(...e),pr=async(...e)=>(await b).proofread(...e),mr=async(...e)=>(await b).getSummarizeOptions(...e),fr=async(...e)=>(await b).summarize(...e),br=async(...e)=>(await b).getTranslateOptions(...e),yr=async(...e)=>(await b).translate(...e),wr=async(...e)=>(await b).detectLanguage(...e),hr=async(...e)=>(await b).getPromptOptions(...e),kr=async(...e)=>(await b).prompt(...e),vr=async(...e)=>(await b).sendChatMessage(...e),Cr=async(...e)=>(await b).sendFeedbackMessage(...e),Ar=async(...e)=>(await b).sendSearchMessage(...e),Pr=(e,t)=>{let r=globalThis.WpSuite,n=T();if(!n)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");(0,Xe.attachDefaultPluginRuntime)(n),n.status=n.status??"initializing";let o=ge();return n.features={store:o,renderFeature:async a=>await e({...a,store:await o}),renderSearchComponent:async a=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...a,store:await o})},write:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.write(...a)},rewrite:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.rewrite(...a)},proofread:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.proofread(...a)},summarize:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.summarize(...a)},translate:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.translate(...a)},detectLanguage:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.detectLanguage(...a)},prompt:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.prompt(...a)},sendChatMessage:async(...a)=>(await b).sendChatMessage(...a),sendFeedbackMessage:async(...a)=>(await b).sendFeedbackMessage(...a),sendSearchMessage:async(...a)=>(await b).sendSearchMessage(...a)},o.then(()=>{n.status="available",r?.events?.emit("wpsuite:ai-kit:ready",{key:n.key,version:n.version})}).catch(a=>{n.status="error",console.error("AiKit plugin failed to initialize:",a),r?.events?.emit("wpsuite:ai-kit:error",{key:n.key,error:String(a)})}),n}});$e();0&&(module.exports={AiKitChatbotIcon,AiKitDocSearchIcon,AiKitFeatureIcon,BackendError,LANGUAGE_OPTIONS,TEXT_DOMAIN,checkOnDeviceAvailability,decideCapability,detectLanguage,dispatchBackend,getAiKitPlugin,getMinChromeVersions,getPromptOptions,getProofreadOptions,getRewriteOptions,getStore,getStoreDispatch,getStoreSelect,getSummarizeOptions,getTranslateOptions,getWriteOptions,initializeAiKit,observeStore,prompt,proofread,rewrite,sanitizeAiKitConfig,sendChatMessage,sendFeedbackMessage,sendSearchMessage,summarize,translate,waitForAiKitReady,write});
package/dist/index.d.cts CHANGED
@@ -221,6 +221,7 @@ type AiChatbotLabels = Partial<{
221
221
  unexpectedErrorLabel: string;
222
222
  }>;
223
223
  type AiChatbotProps = AiWorkerProps & {
224
+ context?: ContextKind;
224
225
  placeholder?: string;
225
226
  maxImages?: number;
226
227
  maxImageBytes?: number;
package/dist/index.d.ts CHANGED
@@ -221,6 +221,7 @@ type AiChatbotLabels = Partial<{
221
221
  unexpectedErrorLabel: string;
222
222
  }>;
223
223
  type AiChatbotProps = AiWorkerProps & {
224
+ context?: ContextKind;
224
225
  placeholder?: string;
225
226
  maxImages?: number;
226
227
  maxImageBytes?: number;
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- var _e=Object.defineProperty;var A=(e,t)=>()=>(e&&(t=e(e=0)),t);var V=(e,t)=>{for(var r in t)_e(e,r,{get:t[r],enumerable:!0})};function B(){return globalThis.WpSuite?.plugins?.aiKit}async function ae(e=8e3){let t=B();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,n)=>{let a=()=>s(r),o=()=>s(()=>n(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let i=e?window.setTimeout(()=>s(()=>n(new Error("AiKit timeout"))),e):0})}}async function qe(e=1e4){await ae(e);let r=B()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var G=A(()=>{"use strict"});import{getConfig as He}from"@smart-cloud/wpsuite-core";import{createReduxStore as je,dispatch as Ve,register as Ge,select as $e,subscribe as Xe}from"@wordpress/data";import{I18n as oe}from"aws-amplify/utils";var $,se,Je,Qe,Ze,Ye,et,tt,N,ie,rt,_=A(()=>{"use strict";G();typeof WpSuite<"u"?$=WpSuite.siteSettings:$={};se=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},Je=async()=>{let e=B();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+$.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},Qe=async()=>{let e=se(await He("aiKit")),t=await Je();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Ze={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?oe.setLanguage(""):oe.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Ye={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},et={},tt=e=>Ve(e),N=e=>$e(e),ie=async()=>{let e=await Qe(),t=je("wpsuite/ai-kit",{reducer(r=e,n){switch(n.type){case"SET_LANGUAGE":return{...r,language:n.language};case"SET_DIRECTION":return{...r,direction:n.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:n.showChatbotPreview}}return r},actions:Ze,selectors:Ye,resolvers:et});return Ge(t),t},rt=(e,t,r)=>{let n;function a(){let s=N(e).getState(),i=t(s);if(i!==n){let u=n;n=i,r(n,u)}}let o=Xe(a,e);return a(),o}});var y,ue=A(()=>{"use strict";y="smartcloud-ai-kit"});import{jsx as v,jsxs as X}from"react/jsx-runtime";var ir,ur,cr,ce=A(()=>{"use strict";ir=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{d:"M19 27H33"}),v("path",{d:"M19 33H33"}),v("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),v("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),v("path",{d:"M16 10V40H36V22"}),v("path",{d:"M16 10H22"}),v("path",{d:"M22 10V23H36"}),v("path",{d:"M22 10L36 22"})]}),ur=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),v("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),v("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),v("path",{d:"M16 24H32"})]}),cr=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),v("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),v("path",{d:"M42 42l-12 -12"}),v("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),v("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var S,J=A(()=>{"use strict";S=class extends Error{constructor(r,n,a){super(r);this.decision=n;this.status=a;this.name="AiBackendError"}}});var fe={};V(fe,{MIN_CHROME_VERSION:()=>ge,checkOnDeviceAvailability:()=>me,decideCapability:()=>H,resolveBackend:()=>M});import{getWpSuite as nt}from"@smart-cloud/wpsuite-core";async function le(){let t=await at?.plugins?.aiKit?.features.store;return N(t).getConfig()??{}}function de(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function ot(e){if(e.mode)return e.mode;let{transport:t}=de(e);return t?"backend-fallback":"local-only"}async function M(){let e=await le(),{transport:t,backendApiName:r,backendBaseUrl:n}=de(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return n?{available:!0,transport:t,baseUrl:n,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let a=globalThis.WpSuite?.plugins?.gatey;return!a?.availability||await a.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function L(e){return typeof globalThis[e]<"u"}function pe(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function q(e,t){return e?.find(r=>r.brand===t)?.version}async function st(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function it(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?pe(t[1]):void 0}function ut(){return!!navigator?.brave}async function ct(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await st(),n=q(r,"Microsoft Edge")??q(r,"Microsoft Edge WebView2"),a=q(r,"Google Chrome")??q(r,"Chromium"),o=!!n||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),g=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),d=ut()||/\bBrave\//i.test(t);if(o||s||i||u||c||g||d)return{allowed:!1,reason:o?"edge":d?"brave":c?"firefox":g?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let p=pe(a)??it(t),f=ge[e];return f?p?p<f?{allowed:!1,reason:`chrome-too-old-${p}-lt-${f}`,chromeMajor:p}:{allowed:!0,reason:"ok",chromeMajor:p}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:p}}async function me(e,t){try{let r=await ct(e),n=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:n};switch(e){case"writer":{if(!L("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"rewriter":{if(!L("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"summarizer":{if(!L("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"proofreader":{if(!L("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"language-detector":{if(!L("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"translator":{if(!L("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:n};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:n,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let o=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:o!=="unavailable",status:o,reason:n}}case"prompt":{if(!L("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:n}}default:return{available:!1,status:"unknown-feature",reason:n}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function H(e,t,r){let n=await le(),a=r||ot(n),o=await M(),s=await me(e,t),i=s.available,u=o.available,c={feature:e,mode:a,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason};return a==="local-only"?i?{...c,source:"on-device",reason:`local-only: on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only: on-device unavailable (${s.reason??s.status})`}:a==="backend-only"?u?{...c,source:"backend",reason:`backend-only: backend available (${o.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only: backend unavailable (${o.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback: using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback: using backend (${o.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${o.reason??"n/a"})`}}var at,ge,Q=A(()=>{"use strict";_();at=nt();ge={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var ke={};V(ke,{dispatchBackend:()=>E,withRecaptchaHeaders:()=>D});import{getRecaptcha as lt}from"@smart-cloud/wpsuite-core";function dt(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}function gt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function pt(e){let t=e?.reCaptchaChatTtlSeconds,r=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,r)*1e3}function mt(e,t){let r=pt(t);if(r<=0)return!1;let n=be.get(e);return n?Date.now()-n<r:!1}function Z(e,t){let r=gt(t);r&&be.set(e,r)}function ye(e,t,r){if(e!=="frontend"||t!=="prompt"||!he(r)||r.saveChatSession!==!0)return;let n=r.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function we(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let r=Object.keys(e).find(a=>a.toLowerCase()===t.toLowerCase());if(!r)return;let n=e[r];return typeof n=="string"&&n?n:void 0}async function ft(e,t){if(e!=="frontend")return;let r=dt();if(!r?.reCaptchaSiteKey||t?.cacheKey&&mt(t.cacheKey,r))return;let{execute:n}=await lt(r?.useRecaptchaEnterprise||!1);if(typeof n=="function")try{let o=await n(r.reCaptchaSiteKey,{action:"generate"});return typeof o=="string"&&o?o:void 0}catch{return}}async function D(e,t,r){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let n=await ft(e,r);return n?{...t,"X-Recaptcha-Token":n}:t}function I(e,t){try{e?.onStatus?.(t)}catch{}}function he(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function yt(e,t){if(!he(t))return t;let r=bt[e];if(!r)return t;let n={};for(let a of r)a in t&&(n[a]=t[a]);return n}function kt(e,t){return(e==="admin"?wt:ht)[t]}async function E(e,t,r,n,a={}){let o=kt(t,r),s=yt(r,n);if(!o)throw new S(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new S("backendTransport=fetch but backendBaseUrl is missing.",e);return vt(e.backendBaseUrl,o,s,a,e,r,t)}if(!e.backendApiName)throw new S("backendTransport=gatey but backendApiName is missing.",e);return Ct(e.backendApiName,o,s,a,e,r,t)}async function vt(e,t,r,n,a,o,s){let i=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...n.headers??{}},c=ye(s,o,r),g=await D(s,u,{cacheKey:c}),d=n.query&&Object.keys(n.query).length>0?"?"+new URLSearchParams(Object.entries(n.query).map(([m,k])=>[m,String(k)])).toString():"";I(n,{feature:o,context:s,step:"backend:request",source:"backend"}),I(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let p=await fetch(i+d,{method:"POST",headers:g,body:JSON.stringify(r??{}),signal:n.signal,credentials:"omit"});if(I(n,{feature:o,context:s,step:"backend:response",source:"backend"}),!p.ok){let m=`HTTP ${p.status}`;try{let k=await p.text();k&&(m=`${m}: ${k.substring(0,400)}`)}catch{}throw new S(`Fetch backend call failed: ${m}`,a,p.status)}let f=p.headers.get("content-type")||"",h=we(p.headers,"x-recaptcha-verified-at");if(f.includes("application/json")){let m=await p.json(),k=(m&&typeof m.sessionId=="string"&&m.sessionId.trim()?m.sessionId.trim():void 0)??c;return h&&k&&Z(k,h),m}return h&&c&&Z(c,h),await p.text()}async function Ct(e,t,r,n,a,o,s){let u=globalThis.WpSuite?.plugins?.gatey;if(!u?.cognito?.post)throw new S("Gatey backend selected, but Gatey.cognito.post is not available.",a);let c=ye(s,o,r),g=await D(s,{...n.headers??{}},{cacheKey:c});I(n,{feature:o,context:s,step:"backend:request",source:"backend"}),I(n,{feature:o,context:s,step:"backend:waiting",source:"backend"});let d=u.cognito.post({apiName:e,path:t,options:{body:r,headers:g,retryStrategy:{strategy:"no-retry"}}});n?.signal?.addEventListener?.("abort",()=>{d.cancel()});let p=await d.response,f=we(p.headers,"x-recaptcha-verified-at"),h=await p.body.json(),m=h?.sessionId??c;return f&&typeof m=="string"&&m.trim()&&Z(m.trim(),f),I(n,{feature:o,context:s,step:"backend:response",source:"backend"}),h}var be,bt,wt,ht,Y=A(()=>{"use strict";J();be=new Map;bt={prompt:["text","audio","audioUrl","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};wt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},ht={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var Ue={};V(Ue,{detectLanguage:()=>Nt,getPromptOptions:()=>De,getProofreadOptions:()=>Le,getRewriteOptions:()=>Se,getSummarizeOptions:()=>Te,getTranslateOptions:()=>Oe,getWriteOptions:()=>xe,prompt:()=>Vt,proofread:()=>zt,rewrite:()=>Ut,sendChatMessage:()=>Gt,sendFeedbackMessage:()=>Xt,sendSearchMessage:()=>$t,summarize:()=>Wt,translate:()=>W,write:()=>Dt});import{getWpSuite as At}from"@smart-cloud/wpsuite-core";function te(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(te).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+te(t[n])).join(",")+"}"}function Pt(e){let t=5381;for(let r=0;r<e.length;r++)t=t*33^e.charCodeAt(r);return(t>>>0).toString(36)}function xt(e,t){return`${e}:${Pt(te(t))}`}function ee(){let e=new Map;for(let r of C.values()){let n=e.get(r.kind)??[];n.push(r),e.set(r.kind,n)}for(let[r,n]of e.entries())if(!(n.length<=Ce)){n.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of n){if(e.get(r).length<=Ce)break;if(!(a.refCount>0)){try{a.destroy()}catch{}C.delete(a.key),e.set(r,(e.get(r)??[]).filter(o=>o.key!==a.key))}}}if(C.size<=ve)return;let t=Array.from(C.values());t.sort((r,n)=>r.refCount-n.refCount||r.lastUsed-n.lastUsed||r.key.localeCompare(n.key));for(let r of t){if(C.size<=ve)break;if(!(r.refCount>0)){try{r.destroy()}catch{}C.delete(r.key)}}}async function T(e,t,r,n){let a=xt(e,t),o=C.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),C.delete(a),C.set(a,o),{model:o.model,fromCache:!0,release:()=>{let u=C.get(a);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),ee())}};let s=U.get(a);if(s)return s;let i=(async()=>{let u=await r(),c={kind:e,key:a,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>n(u)};return C.set(a,c),U.delete(a),ee(),{model:u,fromCache:!1,release:()=>{let g=C.get(a);g&&(g.refCount=Math.max(0,g.refCount-1),g.lastUsed=Date.now(),ee())}}})().catch(u=>{throw U.delete(a),u});return U.set(a,i),i}function P(){return(Ae?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function z(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(n=>r===n.toLowerCase())}function l(e,t,r,n){try{r?.onStatus?.({feature:e,context:t,...n})}catch{}}function K(){return Ae?.plugins?.aiKit?.settings?.sharedContext??void 0}function x(e){return e?.context??"admin"}function O(e,t=St){let r=new AbortController,n=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,s,i=!1,u=()=>{if(r.signal.aborted)return;let c=typeof n?.reason<"u"?n?.reason:void 0;r.abort(c??new DOMException("Aborted","AbortError"))};return n&&(n.aborted?u():n.addEventListener("abort",u)),o&&o>0&&(s=setTimeout(()=>{r.signal.aborted||(i=!0,r.abort(new re(o)))},o)),{signal:r.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),n&&n.removeEventListener("abort",u)}}}function j(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function Lt(e,t,r,n){let a=j(e),o=await Ke(e.images,r,t,n);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
1
+ var Ne=Object.defineProperty;var A=(e,t)=>()=>(e&&(t=e(e=0)),t);var V=(e,t)=>{for(var r in t)Ne(e,r,{get:t[r],enumerable:!0})};function B(){return globalThis.WpSuite?.plugins?.aiKit}async function ae(e=8e3){let t=B();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,n)=>{let o=()=>s(r),a=()=>s(()=>n(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",o),window.removeEventListener("wpsuite:ai-kit:error",a),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",o,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",a,{once:!0});let i=e?window.setTimeout(()=>s(()=>n(new Error("AiKit timeout"))),e):0})}}async function _e(e=1e4){await ae(e);let r=B()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var G=A(()=>{"use strict"});import{getConfig as qe}from"@smart-cloud/wpsuite-core";import{createReduxStore as He,dispatch as je,register as Ve,select as Ge,subscribe as $e}from"@wordpress/data";import{I18n as oe}from"aws-amplify/utils";var $,se,Xe,Je,Qe,Ze,Ye,et,N,ie,tt,_=A(()=>{"use strict";G();typeof WpSuite<"u"?$=WpSuite.siteSettings:$={};se=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},Xe=async()=>{let e=B();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+$.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},Je=async()=>{let e=se(await qe("aiKit")),t=await Xe();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Qe={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?oe.setLanguage(""):oe.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Ze={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},Ye={},et=e=>je(e),N=e=>Ge(e),ie=async()=>{let e=await Je(),t=He("wpsuite/ai-kit",{reducer(r=e,n){switch(n.type){case"SET_LANGUAGE":return{...r,language:n.language};case"SET_DIRECTION":return{...r,direction:n.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:n.showChatbotPreview}}return r},actions:Qe,selectors:Ze,resolvers:Ye});return Ve(t),t},tt=(e,t,r)=>{let n;function o(){let s=N(e).getState(),i=t(s);if(i!==n){let u=n;n=i,r(n,u)}}let a=$e(o,e);return o(),a}});var y,ue=A(()=>{"use strict";y="smartcloud-ai-kit"});import{jsx as v,jsxs as X}from"react/jsx-runtime";var lr,dr,gr,ce=A(()=>{"use strict";lr=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{d:"M19 27H33"}),v("path",{d:"M19 33H33"}),v("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),v("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),v("path",{d:"M16 10V40H36V22"}),v("path",{d:"M16 10H22"}),v("path",{d:"M22 10V23H36"}),v("path",{d:"M22 10L36 22"})]}),dr=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),v("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),v("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),v("path",{d:"M16 24H32"})]}),gr=e=>X("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),v("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),v("path",{d:"M42 42l-12 -12"}),v("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),v("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var S,J=A(()=>{"use strict";S=class extends Error{constructor(r,n,o){super(r);this.decision=n;this.status=o;this.name="AiBackendError"}}});var fe={};V(fe,{MIN_CHROME_VERSION:()=>ge,checkOnDeviceAvailability:()=>me,decideCapability:()=>H,resolveBackend:()=>M});import{getWpSuite as rt}from"@smart-cloud/wpsuite-core";async function le(){let t=await nt?.plugins?.aiKit?.features.store;return N(t).getConfig()??{}}function de(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function at(e){if(e.mode)return e.mode;let{transport:t}=de(e);return t?"backend-fallback":"local-only"}async function M(){let e=await le(),{transport:t,backendApiName:r,backendBaseUrl:n}=de(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return n?{available:!0,transport:t,baseUrl:n,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let o=globalThis.WpSuite?.plugins?.gatey;return!o?.availability||await o.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function L(e){return typeof globalThis[e]<"u"}function pe(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function q(e,t){return e?.find(r=>r.brand===t)?.version}async function st(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function it(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?pe(t[1]):void 0}function ut(){return!!navigator?.brave}async function ct(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await st(),n=q(r,"Microsoft Edge")??q(r,"Microsoft Edge WebView2"),o=q(r,"Google Chrome")??q(r,"Chromium"),a=!!n||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),g=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),d=ut()||/\bBrave\//i.test(t);if(a||s||i||u||c||g||d)return{allowed:!1,reason:a?"edge":d?"brave":c?"firefox":g?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let p=pe(o)??it(t),f=ge[e];return f?p?p<f?{allowed:!1,reason:`chrome-too-old-${p}-lt-${f}`,chromeMajor:p}:{allowed:!0,reason:"ok",chromeMajor:p}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:p}}async function me(e,t){try{let r=await ct(e),n=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:n};let o=a=>a==="unavailable"?ot.has(e)?"on-device unavailable (requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics)":"on-device unavailable (check hardware requirements or see AI-Kit Diagnostics)":n;switch(e){case"writer":{if(!L("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"rewriter":{if(!L("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"summarizer":{if(!L("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"proofreader":{if(!L("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"language-detector":{if(!L("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"translator":{if(!L("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:n};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:n,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let s=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:s!=="unavailable",status:s,reason:o(s)}}case"prompt":{if(!L("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}default:return{available:!1,status:"unknown-feature",reason:n}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function H(e,t,r){let n=await le(),o=r||at(n),a=await M(),s=await me(e,t),i=s.available,u=a.available,c={feature:e,mode:o,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason};return o==="local-only"?i?{...c,source:"on-device",reason:`local-only: on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only: on-device unavailable (${s.reason??s.status})`}:o==="backend-only"?u?{...c,source:"backend",reason:`backend-only: backend available (${a.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only: backend unavailable (${a.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback: using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback: using backend (${a.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${a.reason??"n/a"})`}}var nt,ge,ot,Q=A(()=>{"use strict";_();nt=rt();ge={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},ot=new Set(["writer","rewriter","proofreader","prompt"])});var ke={};V(ke,{dispatchBackend:()=>E,withRecaptchaHeaders:()=>D});import{getRecaptcha as lt}from"@smart-cloud/wpsuite-core";function dt(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}function gt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function pt(e){let t=e?.reCaptchaChatTtlSeconds,r=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,r)*1e3}function mt(e,t){let r=pt(t);if(r<=0)return!1;let n=be.get(e);return n?Date.now()-n<r:!1}function Z(e,t){let r=gt(t);r&&be.set(e,r)}function ye(e,t,r){if(e!=="frontend"||t!=="prompt"||!he(r)||r.saveChatSession!==!0)return;let n=r.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function we(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let r=Object.keys(e).find(o=>o.toLowerCase()===t.toLowerCase());if(!r)return;let n=e[r];return typeof n=="string"&&n?n:void 0}async function ft(e,t){if(e!=="frontend")return;let r=dt();if(!r?.reCaptchaSiteKey||t?.cacheKey&&mt(t.cacheKey,r))return;let{execute:n}=await lt(r?.useRecaptchaEnterprise||!1);if(typeof n=="function")try{let a=await n(r.reCaptchaSiteKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function D(e,t,r){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let n=await ft(e,r);return n?{...t,"X-Recaptcha-Token":n}:t}function I(e,t){try{e?.onStatus?.(t)}catch{}}function he(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function yt(e,t){if(!he(t))return t;let r=bt[e];if(!r)return t;let n={};for(let o of r)o in t&&(n[o]=t[o]);return n}function kt(e,t){return(e==="admin"?wt:ht)[t]}async function E(e,t,r,n,o={}){let a=kt(t,r),s=yt(r,n);if(!a)throw new S(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new S("backendTransport=fetch but backendBaseUrl is missing.",e);return vt(e.backendBaseUrl,a,s,o,e,r,t)}if(!e.backendApiName)throw new S("backendTransport=gatey but backendApiName is missing.",e);return Ct(e.backendApiName,a,s,o,e,r,t)}async function vt(e,t,r,n,o,a,s){let i=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...n.headers??{}},c=ye(s,a,r),g=await D(s,u,{cacheKey:c}),d=n.query&&Object.keys(n.query).length>0?"?"+new URLSearchParams(Object.entries(n.query).map(([m,k])=>[m,String(k)])).toString():"";I(n,{feature:a,context:s,step:"backend:request",source:"backend"}),I(n,{feature:a,context:s,step:"backend:waiting",source:"backend"});let p=await fetch(i+d,{method:"POST",headers:g,body:JSON.stringify(r??{}),signal:n.signal,credentials:"omit"});if(I(n,{feature:a,context:s,step:"backend:response",source:"backend"}),!p.ok){let m=`HTTP ${p.status}`;try{let k=await p.text();k&&(m=`${m}: ${k.substring(0,400)}`)}catch{}throw new S(`Fetch backend call failed: ${m}`,o,p.status)}let f=p.headers.get("content-type")||"",h=we(p.headers,"x-recaptcha-verified-at");if(f.includes("application/json")){let m=await p.json(),k=(m&&typeof m.sessionId=="string"&&m.sessionId.trim()?m.sessionId.trim():void 0)??c;return h&&k&&Z(k,h),m}return h&&c&&Z(c,h),await p.text()}async function Ct(e,t,r,n,o,a,s){let u=globalThis.WpSuite?.plugins?.gatey;if(!u?.cognito?.post)throw new S("Gatey backend selected, but Gatey.cognito.post is not available.",o);let c=ye(s,a,r),g=await D(s,{...n.headers??{}},{cacheKey:c});I(n,{feature:a,context:s,step:"backend:request",source:"backend"}),I(n,{feature:a,context:s,step:"backend:waiting",source:"backend"});let d=u.cognito.post({apiName:e,path:t,options:{body:r,headers:g,retryStrategy:{strategy:"no-retry"}}});n?.signal?.addEventListener?.("abort",()=>{d.cancel()});let p=await d.response,f=we(p.headers,"x-recaptcha-verified-at"),h=await p.body.json(),m=h?.sessionId??c;return f&&typeof m=="string"&&m.trim()&&Z(m.trim(),f),I(n,{feature:a,context:s,step:"backend:response",source:"backend"}),h}var be,bt,wt,ht,Y=A(()=>{"use strict";J();be=new Map;bt={prompt:["text","audio","audioUrl","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};wt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},ht={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var De={};V(De,{detectLanguage:()=>Nt,getPromptOptions:()=>Fe,getProofreadOptions:()=>Le,getRewriteOptions:()=>Se,getSummarizeOptions:()=>Te,getTranslateOptions:()=>Oe,getWriteOptions:()=>xe,prompt:()=>Xt,proofread:()=>zt,rewrite:()=>Ut,sendChatMessage:()=>Jt,sendFeedbackMessage:()=>Zt,sendSearchMessage:()=>Qt,summarize:()=>Wt,translate:()=>W,write:()=>Dt});import{getWpSuite as At}from"@smart-cloud/wpsuite-core";function te(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(te).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+te(t[n])).join(",")+"}"}function Pt(e){let t=5381;for(let r=0;r<e.length;r++)t=t*33^e.charCodeAt(r);return(t>>>0).toString(36)}function xt(e,t){return`${e}:${Pt(te(t))}`}function ee(){let e=new Map;for(let r of C.values()){let n=e.get(r.kind)??[];n.push(r),e.set(r.kind,n)}for(let[r,n]of e.entries())if(!(n.length<=Ce)){n.sort((o,a)=>o.refCount-a.refCount||o.lastUsed-a.lastUsed||o.key.localeCompare(a.key));for(let o of n){if(e.get(r).length<=Ce)break;if(!(o.refCount>0)){try{o.destroy()}catch{}C.delete(o.key),e.set(r,(e.get(r)??[]).filter(a=>a.key!==o.key))}}}if(C.size<=ve)return;let t=Array.from(C.values());t.sort((r,n)=>r.refCount-n.refCount||r.lastUsed-n.lastUsed||r.key.localeCompare(n.key));for(let r of t){if(C.size<=ve)break;if(!(r.refCount>0)){try{r.destroy()}catch{}C.delete(r.key)}}}async function T(e,t,r,n){let o=xt(e,t),a=C.get(o);if(a)return a.refCount++,a.lastUsed=Date.now(),C.delete(o),C.set(o,a),{model:a.model,fromCache:!0,release:()=>{let u=C.get(o);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),ee())}};let s=U.get(o);if(s)return s;let i=(async()=>{let u=await r(),c={kind:e,key:o,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>n(u)};return C.set(o,c),U.delete(o),ee(),{model:u,fromCache:!1,release:()=>{let g=C.get(o);g&&(g.refCount=Math.max(0,g.refCount-1),g.lastUsed=Date.now(),ee())}}})().catch(u=>{throw U.delete(o),u});return U.set(o,i),i}function P(){return(Ae?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function z(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(n=>r===n.toLowerCase())}function l(e,t,r,n){try{r?.onStatus?.({feature:e,context:t,...n})}catch{}}function K(){return Ae?.plugins?.aiKit?.settings?.sharedContext??void 0}function x(e){return e?.context??"admin"}function O(e,t=St){let r=new AbortController,n=e?.signal,o=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,a=typeof o=="number"?o:t,s,i=!1,u=()=>{if(r.signal.aborted)return;let c=typeof n?.reason<"u"?n?.reason:void 0;r.abort(c??new DOMException("Aborted","AbortError"))};return n&&(n.aborted?u():n.addEventListener("abort",u)),a&&a>0&&(s=setTimeout(()=>{r.signal.aborted||(i=!0,r.abort(new re(a)))},a)),{signal:r.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),n&&n.removeEventListener("abort",u)}}}function j(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function Lt(e,t,r,n){let o=j(e),a=await Ee(e.images,r,t,n);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
2
2
  `),systemPrompt:e.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
3
- `),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function Tt(e,t,r,n){let a=j(e),o=await Ke(e.images,r,t,n),s=await Fe(e.audio,r,t,n);return{sessionId:e.sessionId,text:e.message,images:o?.images,imageUrls:o?.imageUrls,audio:s?.audio,audioUrl:s?.audioUrl,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...a}}async function Ot(e,t,r,n){let a=j(e),o=await Fe(e.audio,r,t,n);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:o?.audio,audioUrl:o?.audioUrl,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,...a}}async function Rt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function Bt(e){let t=j(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function Mt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function It(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Et(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function Kt(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function Ft(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function R(e,t,r,n,a,o,s,i){l(n,e,i,{step:"decide",message:"Deciding capability",silent:r});let u=await H(n,a,t);if(l(n,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:r}),u.source==="on-device")try{let c=await o();return l(n,e,i,{step:"done",source:"on-device",silent:r}),c}catch(c){console.error(`Error in on-device ${n}:`,c),l(n,e,i,{step:"error",source:"on-device",message:c.message,silent:r}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){l(n,e,i,{step:"backend:request",source:"backend",silent:r});let c=typeof s=="function"?await s(u):s,g=await E(u,e,n,c,i);return l(n,e,i,{step:"done",source:"backend",silent:r}),g}throw new Error(`No capability for "${n}" (${e}). Reason: ${u.reason}`)}function _t(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],n=t?r.map(o=>({type:"image",value:o})):[],a;if(typeof e.messages=="string")a=t?[{role:"user",content:[{type:"text",value:e.messages},...n]}]:e.messages;else{let o=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=o.length-1;i>=0;i--)if(o[i].role==="user"){s=i;break}if(s===-1)o.push({role:"user",content:[{type:"text",value:""},...n]});else{let i=String(o[s].content??"");o[s]={...o[s],content:[{type:"text",value:i},...n]}}}a=o}return a}function qt(e){return typeof Blob<"u"&&e instanceof Blob}function Ht(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Be(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function jt(e){return new Promise((t,r)=>{let n=new FileReader;n.onerror=()=>r(n.error??new Error("FileReader error")),n.onload=()=>t(String(n.result??"")),n.readAsDataURL(e)})}async function Me(e){let t=await jt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Ie(e,t,r,n,a,o){let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...o?.headers??{}},u=await D(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let f=new URLSearchParams({fileName:r,contentType:n,contentLength:String(a)}).toString(),h=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${f}`,m=await fetch(h,{method:"GET",headers:u,signal:o?.signal,credentials:"omit"});if(!m.ok){let F=await m.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${m.status}${F?": "+F.substring(0,200):""}`)}let k=await m.json();if(!k?.uploadUrl||!k?.key)throw new Error("generate-upload-url response missing uploadUrl/key");return{uploadUrl:k.uploadUrl,key:k.key}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let c=globalThis.WpSuite?.plugins?.gatey,g={fileName:r,contentType:n,contentLength:a};if(c?.cognito?.get){let f=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(g).reduce((m,k)=>(m[k]=String(g[k]),m),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{f.cancel()});let h=await f.response.then(m=>m.body.json());if(!h?.uploadUrl||!h?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:h.uploadUrl,key:h.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let d=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:g,headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{d.cancel()});let p=await d.response.then(f=>f.body.json());if(!p?.uploadUrl||!p?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:p.uploadUrl,key:p.key}}async function Ee(e,t,r,n){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:n?.signal});if(!a.ok){let o=await a.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${a.status}${o?": "+o.substring(0,200):""}`)}}async function Ke(e,t,r,n){if(!e||e.length===0)return;let a=[];for(let c of e){if(!qt(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(c)}let o=a.reduce((c,g)=>c+(g.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=Re){l("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let g of a)c.push({format:Be(g.type),data:await Me(g)});return{images:c}}l("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<a.length;c++){let g=a[c],d=g.type||"application/octet-stream",p=g.name||`image_${c}.${Ht(d)}`;l("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:f,key:h}=await Ie(t,r,p,d,g.size||0,n);l("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Ee(f,g,d,n),u.push(h)}return{imageUrls:u}}async function Fe(e,t,r,n){if(!e)return;let a=e.size||0;if(Math.ceil(a*1.37+2048)<=Re){l("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let d=Be(e.type||"audio/webm"),p=await Me(e);return{audio:{format:d,data:p}}}l("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||"audio.webm";l("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:g}=await Ie(t,r,u,i,e.size||0,n);return l("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await Ee(c,e,i,n),{audioUrl:g}}var ve,Ce,C,U,Ae,St,Pe,re,xe,Dt,Se,Ut,Le,zt,Te,Wt,Nt,Oe,W,Re,De,Vt,Gt,$t,Xt,ze=A(()=>{"use strict";Y();Q();Ne();ve=8,Ce=2,C=new Map,U=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of C.values())try{e.destroy()}catch{}C.clear(),U.clear()});Ae=At();St=45e3,Pe=5e3,re=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};xe=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Dt=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),a=e.outputLanguage?e.outputLanguage:P(),o=a,s=!1;z(a)||(s=!0,a="en");let i=xe({...e,outputLanguage:a});return R(r,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");l("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=O(t);try{let{model:c,release:g}=await T("writer",{core:i,sharedContext:n},()=>Writer.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("writer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("writer",r,t,{step:"on-device:ready",source:"on-device"});try{l("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let d=await c.write(e.prompt,{context:e.context,signal:u.signal});return s?{result:(await W({text:d,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying writer:",d)}}}finally{u.dispose()}},Bt({...e,sharedContext:n,outputLanguage:o}),t)},Se=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Ut=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),a=e.outputLanguage?e.outputLanguage:P(),o=a,s=!1;z(a)||(s=!0,a="en");let i=Se({...e,outputLanguage:a});return R(r,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");l("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=O(t);try{let{model:c,release:g}=await T("rewriter",{core:i,sharedContext:n},()=>Rewriter.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{l("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let d=await c.rewrite(e.text,{context:e.context,signal:u.signal});return s?{result:(await W({text:d,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying rewriter:",d)}}}finally{u.dispose()}},Mt({...e,sharedContext:n,outputLanguage:o}),t)},Le=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),zt=async(e,t)=>{let r=x(t),n=await Le();return R(r,t?.modeOverride,!1,"proofreader",n,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");l("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=O(t);try{let{model:o,release:s}=await T("proofreader",{core:n},()=>Proofreader.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;l("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());l("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return l("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await o.proofread(e.text,{signal:a.signal})}}finally{try{s()}catch(i){console.error("Error destroying proofreader:",i)}}}finally{a.dispose()}},Ft(e),t)},Te=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Wt=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),a=e.outputLanguage?e.outputLanguage:P(),o=a,s=!1;z(a)||(s=!0,a="en");let i=await Te({...e,outputLanguage:a});return R(r,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");l("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=O(t);try{let{model:c,release:g}=await T("summarizer",{core:i,sharedContext:n},()=>Summarizer.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{l("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let d=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await W({text:d,sourceLanguage:a,targetLanguage:o},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying summarizer:",d)}}}finally{u.dispose()}},It({...e,sharedContext:n,outputLanguage:o}),t)},Nt=async(e,t)=>{let r=x(t);return R(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");l("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let n=O(t,Pe);try{let{model:a,release:o}=await T("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;l("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());l("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return l("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await a.detect(e.text,{signal:n.signal})).filter(i=>We.find(u=>u.value===i.detectedLanguage))}}}finally{try{o()}catch(s){console.error("Error destroying language detector:",s)}}}finally{n.dispose()}},Kt(e.text,t),t)},Oe=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??P()??"en"};return Promise.resolve(t)},W=async(e,t)=>{let r=x(t),n=await Oe({...e});return R(r,t?.modeOverride,t?.silent,"translator",n,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");l("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let a=O(t,Pe);try{let{model:o,release:s}=await T("translator",{core:n},()=>Translator.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;l("translator",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());l("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{l("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i=[],u=()=>{if(typeof a.signal.throwIfAborted=="function")a.signal.throwIfAborted();else if(a.signal.aborted)throw a.signal.reason??new DOMException("Aborted","AbortError")};for(let g of e.text.split(`
4
- `))u(),i.push(o.translate(g.trim()));return{result:(await Promise.all(i)).join(`
5
- `)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{a.dispose()}},Et(e.text,e.sourceLanguage,e.targetLanguage),t)};Re=4*1024*1024;De=async e=>{let t=e.outputLanguage?e.outputLanguage:P();return z(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Vt=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),a=e.outputLanguage?e.outputLanguage:P(),o=a,s=!1;z(a)||(s=!0,a="en");let i=await De({...e,outputLanguage:a}),u=await H("prompt",i,t?.modeOverride);return R(r,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");l("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let f of e.messages)f.role==="system"&&f.content.trim()&&c.push(f.content.trim());n&&n.trim()&&c.push("SHARED CONTEXT: "+n.trim())}let g=c.length>0?c.join(`
3
+ `),images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...o}}async function Tt(e,t,r,n){let o=j(e),a=await Ee(e.images,r,t,n),s=await Ke(e.audio,r,t,n);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,audio:s?.audio,audioUrl:s?.audioUrl,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...o}}async function Ot(e,t,r,n){let o=j(e),a=await Ke(e.audio,r,t,n);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:a?.audio,audioUrl:a?.audioUrl,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,...o}}async function Rt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function Bt(e){let t=j(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function Mt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function It(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Et(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function Kt(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function Ft(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function R(e,t,r,n,o,a,s,i){l(n,e,i,{step:"decide",message:"Deciding capability",silent:r});let u=await H(n,o,t);if(l(n,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:r}),u.source==="on-device")try{let c=await a();return l(n,e,i,{step:"done",source:"on-device",silent:r}),c}catch(c){console.error(`Error in on-device ${n}:`,c),l(n,e,i,{step:"error",source:"on-device",message:c.message,silent:r}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){l(n,e,i,{step:"backend:request",source:"backend",silent:r});let c=typeof s=="function"?await s(u):s,g=await E(u,e,n,c,i);return l(n,e,i,{step:"done",source:"backend",silent:r}),g}throw new Error(`No capability for "${n}" (${e}). Reason: ${u.reason}`)}function _t(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],n=t?r.map(a=>({type:"image",value:a})):[],o;if(typeof e.messages=="string")o=t?[{role:"user",content:[{type:"text",value:e.messages},...n]}]:e.messages;else{let a=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=a.length-1;i>=0;i--)if(a[i].role==="user"){s=i;break}if(s===-1)a.push({role:"user",content:[{type:"text",value:""},...n]});else{let i=String(a[s].content??"");a[s]={...a[s],content:[{type:"text",value:i},...n]}}}o=a}return o}function qt(e){return typeof Blob<"u"&&e instanceof Blob}function Ht(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function jt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function Vt(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":(t.includes("webm"),"webm")}function Gt(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":"webm"}async function $t(e){return new Promise((t,r)=>{let n=new FileReader;n.onerror=()=>r(n.error??new Error("FileReader error")),n.onload=()=>t(String(n.result??"")),n.readAsDataURL(e)})}async function Be(e){let t=await $t(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Me(e,t,r,n,o,a){let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...a?.headers??{}},u=await D(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let f=new URLSearchParams({fileName:r,contentType:n,contentLength:String(o)}).toString(),h=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${f}`,m=await fetch(h,{method:"GET",headers:u,signal:a?.signal,credentials:"omit"});if(!m.ok){let F=await m.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${m.status}${F?": "+F.substring(0,200):""}`)}let k=await m.json();if(!k?.uploadUrl||!k?.key)throw new Error("generate-upload-url response missing uploadUrl/key");return{uploadUrl:k.uploadUrl,key:k.key}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let c=globalThis.WpSuite?.plugins?.gatey,g={fileName:r,contentType:n,contentLength:o};if(c?.cognito?.get){let f=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(g).reduce((m,k)=>(m[k]=String(g[k]),m),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{f.cancel()});let h=await f.response.then(m=>m.body.json());if(!h?.uploadUrl||!h?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:h.uploadUrl,key:h.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let d=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:g,headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{d.cancel()});let p=await d.response.then(f=>f.body.json());if(!p?.uploadUrl||!p?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:p.uploadUrl,key:p.key}}async function Ie(e,t,r,n){let o=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:n?.signal});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${o.status}${a?": "+a.substring(0,200):""}`)}}async function Ee(e,t,r,n){if(!e||e.length===0)return;let o=[];for(let c of e){if(!qt(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");o.push(c)}let a=o.reduce((c,g)=>c+(g.size||0),0);if(Math.ceil(a*1.37+2048*o.length)<=Re){l("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let g of o)c.push({format:jt(g.type),data:await Be(g)});return{images:c}}l("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<o.length;c++){let g=o[c],d=g.type||"application/octet-stream",p=g.name||`image_${c}.${Ht(d)}`;l("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:f,key:h}=await Me(t,r,p,d,g.size||0,n);l("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Ie(f,g,d,n),u.push(h)}return{imageUrls:u}}async function Ke(e,t,r,n){if(!e)return;let o=e.size||0;if(Math.ceil(o*1.37+2048)<=Re){l("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let d=Gt(e.type||"audio/webm"),p=await Be(e);return{audio:{format:d,data:p}}}l("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||`audio.${Vt(i)}`;l("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:g}=await Me(t,r,u,i,e.size||0,n);return l("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await Ie(c,e,i,n),{audioUrl:g}}var ve,Ce,C,U,Ae,St,Pe,re,xe,Dt,Se,Ut,Le,zt,Te,Wt,Nt,Oe,W,Re,Fe,Xt,Jt,Qt,Zt,Ue=A(()=>{"use strict";Y();Q();We();ve=8,Ce=2,C=new Map,U=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of C.values())try{e.destroy()}catch{}C.clear(),U.clear()});Ae=At();St=45e3,Pe=5e3,re=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};xe=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Dt=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),o=e.outputLanguage?e.outputLanguage:P(),a=o,s=!1;z(o)||(s=!0,o="en");let i=xe({...e,outputLanguage:o});return R(r,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");l("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=O(t);try{let{model:c,release:g}=await T("writer",{core:i,sharedContext:n},()=>Writer.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("writer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("writer",r,t,{step:"on-device:ready",source:"on-device"});try{l("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let d=await c.write(e.prompt,{context:e.context,signal:u.signal});return s?{result:(await W({text:d,sourceLanguage:o,targetLanguage:a},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying writer:",d)}}}finally{u.dispose()}},Bt({...e,sharedContext:n,outputLanguage:a}),t)},Se=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Ut=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),o=e.outputLanguage?e.outputLanguage:P(),a=o,s=!1;z(o)||(s=!0,o="en");let i=Se({...e,outputLanguage:o});return R(r,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");l("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=O(t);try{let{model:c,release:g}=await T("rewriter",{core:i,sharedContext:n},()=>Rewriter.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{l("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let d=await c.rewrite(e.text,{context:e.context,signal:u.signal});return s?{result:(await W({text:d,sourceLanguage:o,targetLanguage:a},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying rewriter:",d)}}}finally{u.dispose()}},Mt({...e,sharedContext:n,outputLanguage:a}),t)},Le=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),zt=async(e,t)=>{let r=x(t),n=await Le();return R(r,t?.modeOverride,!1,"proofreader",n,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");l("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let o=O(t);try{let{model:a,release:s}=await T("proofreader",{core:n},()=>Proofreader.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;l("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());l("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return l("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await a.proofread(e.text,{signal:o.signal})}}finally{try{s()}catch(i){console.error("Error destroying proofreader:",i)}}}finally{o.dispose()}},Ft(e),t)},Te=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Wt=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),o=e.outputLanguage?e.outputLanguage:P(),a=o,s=!1;z(o)||(s=!0,o="en");let i=await Te({...e,outputLanguage:o});return R(r,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");l("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=O(t);try{let{model:c,release:g}=await T("summarizer",{core:i,sharedContext:n},()=>Summarizer.create({...i,sharedContext:n,monitor(d){d.addEventListener("downloadprogress",p=>{let f=p.loaded;l("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:f,loaded:f})})}}),d=>d.destroy());l("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{l("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let d=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await W({text:d,sourceLanguage:o,targetLanguage:a},{context:r,signal:u.signal})).result}:{result:d}}finally{try{g()}catch(d){console.error("Error destroying summarizer:",d)}}}finally{u.dispose()}},It({...e,sharedContext:n,outputLanguage:a}),t)},Nt=async(e,t)=>{let r=x(t);return R(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");l("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let n=O(t,Pe);try{let{model:o,release:a}=await T("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;l("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());l("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return l("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await o.detect(e.text,{signal:n.signal})).filter(i=>ze.find(u=>u.value===i.detectedLanguage))}}}finally{try{a()}catch(s){console.error("Error destroying language detector:",s)}}}finally{n.dispose()}},Kt(e.text,t),t)},Oe=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??P()??"en"};return Promise.resolve(t)},W=async(e,t)=>{let r=x(t),n=await Oe({...e});return R(r,t?.modeOverride,t?.silent,"translator",n,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");l("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let o=O(t,Pe);try{let{model:a,release:s}=await T("translator",{core:n},()=>Translator.create({...n,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;l("translator",r,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());l("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{l("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i=[],u=()=>{if(typeof o.signal.throwIfAborted=="function")o.signal.throwIfAborted();else if(o.signal.aborted)throw o.signal.reason??new DOMException("Aborted","AbortError")};for(let g of e.text.split(`
4
+ `))u(),i.push(a.translate(g.trim()));return{result:(await Promise.all(i)).join(`
5
+ `)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{o.dispose()}},Et(e.text,e.sourceLanguage,e.targetLanguage),t)};Re=4*1024*1024;Fe=async e=>{let t=e.outputLanguage?e.outputLanguage:P();return z(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Xt=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),o=e.outputLanguage?e.outputLanguage:P(),a=o,s=!1;z(o)||(s=!0,o="en");let i=await Fe({...e,outputLanguage:o}),u=await H("prompt",i,t?.modeOverride);return R(r,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");l("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let f of e.messages)f.role==="system"&&f.content.trim()&&c.push(f.content.trim());n&&n.trim()&&c.push("SHARED CONTEXT: "+n.trim())}let g=c.length>0?c.join(`
6
6
 
7
- `):void 0,d=g?[{role:"system",content:g}]:void 0,p=O(t);try{let{model:f,release:h}=await T("language-model",{core:i,initialPrompts:d},()=>LanguageModel.create({...i,initialPrompts:d,monitor(m){m.addEventListener("downloadprogress",k=>{let F=k.loaded;l("prompt",r,t,{step:"on-device:download",source:"on-device",progress:F,loaded:F})})}}),m=>m.destroy());l("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{l("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let m=await f.prompt(_t(e),{signal:p.signal,responseConstraint:e.responseConstraint});return s?{result:(await W({text:m,sourceLanguage:a,targetLanguage:o},{context:r,signal:p.signal})).result}:{result:m}}finally{try{h()}catch(m){console.error("Error destroying LanguageModel:",m)}}}finally{p.dispose()}},await Lt({...e,sharedContext:n},r,u,t),t)},Gt=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),a="prompt",o=await M(),s={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},i=await Tt({sessionId:e.sessionId,message:e.message,images:e.images,sharedContext:n},r,s,t);l(a,r,t,{step:"backend:request",source:"backend"});let u=await E(s,r,a,i,t);return l(a,r,t,{step:"done",source:"backend"}),u},$t=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),a="prompt",o=await M(),s={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},i=await Ot({...e,sharedContext:n},r,s,t);l(a,r,t,{step:"backend:request",source:"backend"});let u=await E(s,r,a,i,t);return l(a,r,t,{step:"done",source:"backend"}),u},Xt=async(e,t)=>{let r="frontend",n="prompt",a=await M(),o={feature:n,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},s=await Rt({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});l(n,r,t,{step:"backend:request",source:"backend"});let i=await E(o,r,n,s,t);return l(n,r,t,{step:"done",source:"backend"}),i}});import{attachDefaultPluginRuntime as Jt}from"@smart-cloud/wpsuite-core";import{__ as w}from"@wordpress/i18n";var We,ne,Sr,Lr,Tr,Qt,Or,b,Rr,Br,Mr,Ir,Er,Kr,Fr,Dr,Ur,zr,Wr,Nr,_r,qr,Hr,jr,Vr,Ne=A(()=>{G();_();ue();_();ce();J();We=[{label:w("Arabic",y),value:"ar"},{label:w("Chinese",y),value:"zh"},{label:w("Dutch",y),value:"nl"},{label:w("English",y),value:"en"},{label:w("French",y),value:"fr"},{label:w("German",y),value:"de"},{label:w("Hebrew",y),value:"he"},{label:w("Hindi",y),value:"hi"},{label:w("Hungarian",y),value:"hu"},{label:w("Indonesian",y),value:"id"},{label:w("Italian",y),value:"it"},{label:w("Japanese",y),value:"ja"},{label:w("Korean",y),value:"ko"},{label:w("Norwegian",y),value:"no"},{label:w("Polish",y),value:"pl"},{label:w("Portuguese",y),value:"pt"},{label:w("Russian",y),value:"ru"},{label:w("Spanish",y),value:"es"},{label:w("Swedish",y),value:"sv"},{label:w("Thai",y),value:"th"},{label:w("Turkish",y),value:"tr"},{label:w("Ukrainian",y),value:"uk"}],ne=Promise.resolve().then(()=>(Q(),fe)),Sr=async()=>(await ne).MIN_CHROME_VERSION,Lr=async(...e)=>(await ne).decideCapability(...e),Tr=async(...e)=>(await ne).checkOnDeviceAvailability(...e),Qt=Promise.resolve().then(()=>(Y(),ke)),Or=async(...e)=>(await Qt).dispatchBackend(...e),b=Promise.resolve().then(()=>(ze(),Ue)),Rr=async(...e)=>(await b).getWriteOptions(...e),Br=async(...e)=>(await b).write(...e),Mr=async(...e)=>(await b).getRewriteOptions(...e),Ir=async(...e)=>(await b).rewrite(...e),Er=async(...e)=>(await b).getProofreadOptions(...e),Kr=async(...e)=>(await b).proofread(...e),Fr=async(...e)=>(await b).getSummarizeOptions(...e),Dr=async(...e)=>(await b).summarize(...e),Ur=async(...e)=>(await b).getTranslateOptions(...e),zr=async(...e)=>(await b).translate(...e),Wr=async(...e)=>(await b).detectLanguage(...e),Nr=async(...e)=>(await b).getPromptOptions(...e),_r=async(...e)=>(await b).prompt(...e),qr=async(...e)=>(await b).sendChatMessage(...e),Hr=async(...e)=>(await b).sendFeedbackMessage(...e),jr=async(...e)=>(await b).sendSearchMessage(...e),Vr=(e,t)=>{let r=globalThis.WpSuite,n=B();if(!n)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");Jt(n),n.status=n.status??"initializing";let a=ie();return n.features={store:a,renderFeature:async o=>await e({...o,store:await a}),renderSearchComponent:async o=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...o,store:await a})},write:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.write(...o)},rewrite:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.rewrite(...o)},proofread:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.proofread(...o)},summarize:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.summarize(...o)},translate:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.translate(...o)},detectLanguage:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.detectLanguage(...o)},prompt:async(...o)=>{let s=await b,i=o[1]||{};return o[1]={context:"frontend",...i},s.prompt(...o)},sendChatMessage:async(...o)=>(await b).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await b).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await b).sendSearchMessage(...o)},a.then(()=>{n.status="available",r?.events?.emit("wpsuite:ai-kit:ready",{key:n.key,version:n.version})}).catch(o=>{n.status="error",console.error("AiKit plugin failed to initialize:",o),r?.events?.emit("wpsuite:ai-kit:error",{key:n.key,error:String(o)})}),n}});Ne();export{ur as AiKitChatbotIcon,cr as AiKitDocSearchIcon,ir as AiKitFeatureIcon,S as BackendError,We as LANGUAGE_OPTIONS,y as TEXT_DOMAIN,Tr as checkOnDeviceAvailability,Lr as decideCapability,Wr as detectLanguage,Or as dispatchBackend,B as getAiKitPlugin,Sr as getMinChromeVersions,Nr as getPromptOptions,Er as getProofreadOptions,Mr as getRewriteOptions,qe as getStore,tt as getStoreDispatch,N as getStoreSelect,Fr as getSummarizeOptions,Ur as getTranslateOptions,Rr as getWriteOptions,Vr as initializeAiKit,rt as observeStore,_r as prompt,Kr as proofread,Ir as rewrite,se as sanitizeAiKitConfig,qr as sendChatMessage,Hr as sendFeedbackMessage,jr as sendSearchMessage,Dr as summarize,zr as translate,ae as waitForAiKitReady,Br as write};
7
+ `):void 0,d=g?[{role:"system",content:g}]:void 0,p=O(t);try{let{model:f,release:h}=await T("language-model",{core:i,initialPrompts:d},()=>LanguageModel.create({...i,initialPrompts:d,monitor(m){m.addEventListener("downloadprogress",k=>{let F=k.loaded;l("prompt",r,t,{step:"on-device:download",source:"on-device",progress:F,loaded:F})})}}),m=>m.destroy());l("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{l("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let m=await f.prompt(_t(e),{signal:p.signal,responseConstraint:e.responseConstraint});return s?{result:(await W({text:m,sourceLanguage:o,targetLanguage:a},{context:r,signal:p.signal})).result}:{result:m}}finally{try{h()}catch(m){console.error("Error destroying LanguageModel:",m)}}}finally{p.dispose()}},await Lt({...e,sharedContext:n},r,u,t),t)},Jt=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),o="prompt",a=await M(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await Tt({sessionId:e.sessionId,message:e.message,audio:e.audio,images:e.images,sharedContext:n},r,s,t);l(o,r,t,{step:"backend:request",source:"backend"});let u=await E(s,r,o,i,t);return l(o,r,t,{step:"done",source:"backend"}),u},Qt=async(e,t)=>{let r=x(t),n=e.sharedContext??K(),o="prompt",a=await M(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await Ot({...e,sharedContext:n},r,s,t);l(o,r,t,{step:"backend:request",source:"backend"});let u=await E(s,r,o,i,t);return l(o,r,t,{step:"done",source:"backend"}),u},Zt=async(e,t)=>{let r="frontend",n="prompt",o=await M(),a={feature:n,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await Rt({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});l(n,r,t,{step:"backend:request",source:"backend"});let i=await E(a,r,n,s,t);return l(n,r,t,{step:"done",source:"backend"}),i}});import{attachDefaultPluginRuntime as Yt}from"@smart-cloud/wpsuite-core";import{__ as w}from"@wordpress/i18n";var ze,ne,Or,Rr,Br,er,Mr,b,Ir,Er,Kr,Fr,Dr,Ur,zr,Wr,Nr,_r,qr,Hr,jr,Vr,Gr,$r,Xr,We=A(()=>{G();_();ue();_();ce();J();ze=[{label:w("Arabic",y),value:"ar"},{label:w("Chinese",y),value:"zh"},{label:w("Dutch",y),value:"nl"},{label:w("English",y),value:"en"},{label:w("French",y),value:"fr"},{label:w("German",y),value:"de"},{label:w("Hebrew",y),value:"he"},{label:w("Hindi",y),value:"hi"},{label:w("Hungarian",y),value:"hu"},{label:w("Indonesian",y),value:"id"},{label:w("Italian",y),value:"it"},{label:w("Japanese",y),value:"ja"},{label:w("Korean",y),value:"ko"},{label:w("Norwegian",y),value:"no"},{label:w("Polish",y),value:"pl"},{label:w("Portuguese",y),value:"pt"},{label:w("Russian",y),value:"ru"},{label:w("Spanish",y),value:"es"},{label:w("Swedish",y),value:"sv"},{label:w("Thai",y),value:"th"},{label:w("Turkish",y),value:"tr"},{label:w("Ukrainian",y),value:"uk"}],ne=Promise.resolve().then(()=>(Q(),fe)),Or=async()=>(await ne).MIN_CHROME_VERSION,Rr=async(...e)=>(await ne).decideCapability(...e),Br=async(...e)=>(await ne).checkOnDeviceAvailability(...e),er=Promise.resolve().then(()=>(Y(),ke)),Mr=async(...e)=>(await er).dispatchBackend(...e),b=Promise.resolve().then(()=>(Ue(),De)),Ir=async(...e)=>(await b).getWriteOptions(...e),Er=async(...e)=>(await b).write(...e),Kr=async(...e)=>(await b).getRewriteOptions(...e),Fr=async(...e)=>(await b).rewrite(...e),Dr=async(...e)=>(await b).getProofreadOptions(...e),Ur=async(...e)=>(await b).proofread(...e),zr=async(...e)=>(await b).getSummarizeOptions(...e),Wr=async(...e)=>(await b).summarize(...e),Nr=async(...e)=>(await b).getTranslateOptions(...e),_r=async(...e)=>(await b).translate(...e),qr=async(...e)=>(await b).detectLanguage(...e),Hr=async(...e)=>(await b).getPromptOptions(...e),jr=async(...e)=>(await b).prompt(...e),Vr=async(...e)=>(await b).sendChatMessage(...e),Gr=async(...e)=>(await b).sendFeedbackMessage(...e),$r=async(...e)=>(await b).sendSearchMessage(...e),Xr=(e,t)=>{let r=globalThis.WpSuite,n=B();if(!n)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");Yt(n),n.status=n.status??"initializing";let o=ie();return n.features={store:o,renderFeature:async a=>await e({...a,store:await o}),renderSearchComponent:async a=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...a,store:await o})},write:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.write(...a)},rewrite:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.rewrite(...a)},proofread:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.proofread(...a)},summarize:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.summarize(...a)},translate:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.translate(...a)},detectLanguage:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.detectLanguage(...a)},prompt:async(...a)=>{let s=await b,i=a[1]||{};return a[1]={context:"frontend",...i},s.prompt(...a)},sendChatMessage:async(...a)=>(await b).sendChatMessage(...a),sendFeedbackMessage:async(...a)=>(await b).sendFeedbackMessage(...a),sendSearchMessage:async(...a)=>(await b).sendSearchMessage(...a)},o.then(()=>{n.status="available",r?.events?.emit("wpsuite:ai-kit:ready",{key:n.key,version:n.version})}).catch(a=>{n.status="error",console.error("AiKit plugin failed to initialize:",a),r?.events?.emit("wpsuite:ai-kit:error",{key:n.key,error:String(a)})}),n}});We();export{dr as AiKitChatbotIcon,gr as AiKitDocSearchIcon,lr as AiKitFeatureIcon,S as BackendError,ze as LANGUAGE_OPTIONS,y as TEXT_DOMAIN,Br as checkOnDeviceAvailability,Rr as decideCapability,qr as detectLanguage,Mr as dispatchBackend,B as getAiKitPlugin,Or as getMinChromeVersions,Hr as getPromptOptions,Dr as getProofreadOptions,Kr as getRewriteOptions,_e as getStore,et as getStoreDispatch,N as getStoreSelect,zr as getSummarizeOptions,Nr as getTranslateOptions,Ir as getWriteOptions,Xr as initializeAiKit,tt as observeStore,jr as prompt,Ur as proofread,Fr as rewrite,se as sanitizeAiKitConfig,Vr as sendChatMessage,Gr as sendFeedbackMessage,$r as sendSearchMessage,Wr as summarize,_r as translate,ae as waitForAiKitReady,Er as write};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smart-cloud/ai-kit-core",
3
- "version": "1.3.2",
3
+ "version": "1.3.4",
4
4
  "description": "AI Kit Core Package",
5
5
  "author": "Smart Cloud Solutions Inc.",
6
6
  "license": "MIT",