@smart-cloud/ai-kit-core 1.4.4 → 1.4.5
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 +13 -9
- package/dist/index.js +13 -9
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
"use strict";var Y=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var ot=Object.getOwnPropertyNames;var st=Object.prototype.hasOwnProperty;var x=(e,t)=>()=>(e&&(t=e(e=0)),t);var j=(e,t)=>{for(var n in t)Y(e,n,{get:t[n],enumerable:!0})},it=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ot(t))!st.call(e,o)&&o!==n&&Y(e,o,{get:()=>t[o],enumerable:!(r=at(t,o))||r.enumerable});return e};var ut=e=>it(Y({},"__esModule",{value:!0}),e);function L(){return globalThis.WpSuite?.plugins?.aiKit}async function ee(e=8e3){let t=L();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let o=()=>s(n),a=()=>s(()=>r(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(()=>r(new Error("AiKit timeout"))),e):0})}}async function de(e=1e4){await ee(e);let n=L()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var V=x(()=>{"use strict"});var z,P,te,ne,$,ct,lt,dt,gt,pt,ge,W,pe,me,fe,G=x(()=>{"use strict";z=require("@smart-cloud/wpsuite-core"),P=require("@wordpress/data"),te=require("aws-amplify/utils");V();typeof WpSuite<"u"?ne=WpSuite.siteSettings:ne={};$=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},ct=async()=>{let e=L();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="+ne.lastUpdate).then(n=>n.ok?n.text():null).then(n=>n?JSON.parse(n):null).catch(()=>null)),t??null},lt=async()=>{let e=$(await(0,z.getConfig)("aiKit")),t=await ct();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},dt={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?te.I18n.setLanguage(""):te.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},gt={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}},pt={},ge=e=>{let t=(0,P.dispatch)(e);return delete t.setConfig,t},W=e=>(0,P.select)(e),pe=async e=>{(0,z.getWpSuite)().siteSettings.lastUpdate=Date.now();let t=await(0,z.getConfig)("aiKit"),n=$(t);(0,P.dispatch)(e).setConfig(n)},me=async()=>{let e=await lt(),t=(0,P.createReduxStore)("smartcloud/ai-kit",{reducer(n=e,r){switch(r.type){case"SET_LANGUAGE":return{...n,language:r.language};case"SET_DIRECTION":return{...n,direction:r.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...n,showChatbotPreview:r.showChatbotPreview};case"SET_CONFIG":return{...n,config:r.config}}return n},actions:dt,selectors:gt,resolvers:pt});return(0,P.register)(t),t},fe=(e,t,n)=>{let r;function o(){let s=W(e).getState(),i=t(s);if(i!==r){let u=r;r=i,n(r,u)}}let a=(0,P.subscribe)(o,e);return o(),a}});var w,be=x(()=>{"use strict";w="smartcloud-ai-kit"});var C,mt,ft,bt,ye=x(()=>{"use strict";C=require("react/jsx-runtime"),mt=e=>(0,C.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,C.jsx)("path",{d:"M19 27H33"}),(0,C.jsx)("path",{d:"M19 33H33"}),(0,C.jsx)("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),(0,C.jsx)("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),(0,C.jsx)("path",{d:"M16 10V40H36V22"}),(0,C.jsx)("path",{d:"M16 10H22"}),(0,C.jsx)("path",{d:"M22 10V23H36"}),(0,C.jsx)("path",{d:"M22 10L36 22"})]}),ft=e=>(0,C.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,C.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,C.jsx)("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),(0,C.jsx)("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),(0,C.jsx)("path",{d:"M16 24H32"})]}),bt=e=>(0,C.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,C.jsx)("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),(0,C.jsx)("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),(0,C.jsx)("path",{d:"M42 42l-12 -12"}),(0,C.jsx)("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),(0,C.jsx)("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var S,re=x(()=>{"use strict";S=class extends Error{constructor(n,r,o){super(n);this.decision=r;this.status=o;this.name="AiBackendError"}}});var Pe={};j(Pe,{MIN_CHROME_VERSION:()=>Ce,checkOnDeviceAvailability:()=>Ae,decideCapability:()=>J,isOnDeviceLanguageSupported:()=>B,resolveBackend:()=>F});async function he(){let t=await yt?.plugins?.aiKit?.features.store;return W(t).getConfig()??{}}function ke(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function wt(e){if(e.mode)return e.mode;let{transport:t}=ke(e);return t?"backend-fallback":"local-only"}async function F(){let e=await he(),{transport:t,backendApiName:n,backendBaseUrl:r}=ke(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return r?{available:!0,transport:t,baseUrl:r,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!n)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:n,reason:"Gatey backend"}}function R(e){return typeof globalThis[e]<"u"}function ve(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function X(e,t){return e?.find(n=>n.brand===t)?.version}async function kt(){let e=navigator?.userAgentData;if(e){try{let n=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(n)&&n.length>0)return n}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function Ct(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?ve(t[1]):void 0}function vt(){return!!navigator?.brave}async function At(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??"",n=await kt(),r=X(n,"Microsoft Edge")??X(n,"Microsoft Edge WebView2"),o=X(n,"Google Chrome")??X(n,"Chromium"),a=!!r||/\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),l=vt()||/\bBrave\//i.test(t);if(a||s||i||u||c||g||l)return{allowed:!1,reason:a?"edge":l?"brave":c?"firefox":g?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let m=ve(o)??Ct(t),p=Ce[e];return p?m?m<p?{allowed:!1,reason:`chrome-too-old-${m}-lt-${p}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function Ae(e,t){try{let n=await At(e),r=`browser-gate:${n.reason}${n.chromeMajor?` (chrome ${n.chromeMajor})`:""}`;if(!n.allowed)return{available:!1,status:"unavailable",reason:r};let o=a=>a==="unavailable"?ht.has(e)?"requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics":"check hardware requirements or see AI-Kit Diagnostics":r;switch(e){case"writer":{if(!R("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"rewriter":{if(!R("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"summarizer":{if(!R("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"proofreader":{if(!R("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"language-detector":{if(!R("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"translator":{if(!R("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:r};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:r,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(!R("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}default:return{available:!1,status:"unknown-feature",reason:r}}}catch(n){return{available:!1,status:"error",reason:"exception in availability()",error:n}}}function B(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function J(e,t,n){let r=await he(),o=n||wt(r),a=await F(),s=await Ae(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, but 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, but 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 we,yt,Ce,ht,ae=x(()=>{"use strict";we=require("@smart-cloud/wpsuite-core");G();yt=(0,we.getWpSuite)();Ce={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},ht=new Set(["writer","rewriter","proofreader","prompt"])});var Be={};j(Be,{dispatchCustomBackend:()=>Mt,dispatchFeatureBackend:()=>D,withRecaptchaHeaders:()=>_});function Pt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function xt(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function St(e,t){let n=xt(t);if(n<=0)return!1;let r=Se.get(e);return r?Date.now()-r<n:!1}function oe(e,t){let n=Pt(t);n&&Se.set(e,n)}function Le(e,t){if(e!=="frontend"||!Oe(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Te(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let n=Object.keys(e).find(o=>o.toLowerCase()===t.toLowerCase());if(!n)return;let r=e[n];return typeof r=="string"&&r?r:void 0}async function Lt(e,t){if(e!=="frontend")return;let n=(0,Q.getWpSuite)()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&St(t.cacheKey,L()?.settings||{}))return;let{execute:r}=await(0,Q.getRecaptcha)(n?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let a=await r(n.reCaptchaPublicKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function _(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await Lt(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function K(e,t){try{e?.onStatus?.(t)}catch{}}function Oe(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Ot(e,t){if(!Oe(t))return t;let n=Tt[e];if(!n)return t;let r={};for(let o of n)o in t&&(r[o]=t[o]);return r}function Et(e,t){return(e==="admin"?Rt:Bt)[t]}function It(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function D(e,t,n,r,o={}){let a=Et(t,n);if(!a)throw new S(`No backend path configured for "${n}" (${t}).`,e);let s=Ot(n,r);return Re(e,t,n,a,"POST",s,o)}async function Mt(e,t,n,r,o,a={}){let s=It(t,n);return Re(e,t,"prompt",s,r,o,a)}async function Re(e,t,n,r,o,a,s={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new S("backendTransport=fetch but backendBaseUrl is missing.",e);return Ft(e.backendBaseUrl,r,o,a,s,e,n,t)}if(!e.backendApiName)throw new S("backendTransport=gatey but backendApiName is missing.",e);return Kt(e.backendApiName,r,o,a,s,e,n,t)}async function Ft(e,t,n,r,o,a,s,i){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...o.headers??{}},g=s==="prompt"?Le(i,r):void 0,l=await _(i,c,{cacheKey:g}),m=o.query&&Object.keys(o.query).length>0?"?"+new URLSearchParams(Object.entries(o.query).map(([f,v])=>[f,String(v)])).toString():"";K(o,{feature:s,context:i,step:"backend:request",source:"backend"}),K(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let p=await fetch(u+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:o.signal,credentials:"omit"});if(K(o,{feature:s,context:i,step:"backend:response",source:"backend"}),!p.ok){let f=`HTTP ${p.status}`;try{let v=await p.text();v&&(f=`${f}: ${v.substring(0,400)}`)}catch{}throw new S(`Fetch backend call failed: ${f}`,a,p.status)}let k=p.headers.get("content-type")||"",b=Te(p.headers,"x-recaptcha-verified-at");if(k.includes("application/json")){let f=await p.json(),v=(f&&typeof f.sessionId=="string"&&f.sessionId.trim()?f.sessionId.trim():void 0)??g;return b&&v&&oe(v,b),f}return b&&g&&oe(g,b),await p.text()}async function Kt(e,t,n,r,o,a,s,i){let u=(0,xe.getGateyPlugin)(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new S(`Unsupported HTTP method "${n}" for Gatey backend.`,a)}if(!c)throw new S(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,a);let g=s==="prompt"?Le(i,r):void 0,l=await _(i,{...o.headers??{}},{cacheKey:g});K(o,{feature:s,context:i,step:"backend:request",source:"backend"}),K(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let m=c({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{m.cancel()});let p=await m.response,k=Te(p.headers,"x-recaptcha-verified-at"),b=await p.body.json(),f=b?.sessionId??g;return k&&typeof f=="string"&&f.trim()&&oe(f.trim(),k),K(o,{feature:s,context:i,step:"backend:response",source:"backend"}),b}var xe,Q,Se,Tt,Rt,Bt,se=x(()=>{"use strict";xe=require("@smart-cloud/gatey-core"),Q=require("@smart-cloud/wpsuite-core");V();re();Se=new Map;Tt={prompt:["text","audio","audioUrl","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature","userSelectedCategories","userSelectedSubcategories","userSelectedTags"],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"]};Rt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Bt={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function Dt(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a==="."||a==="!"||a==="?")&&(s===" "||s===`
|
|
2
|
-
`||s==="\r"||o===e.length-1)){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function
|
|
3
|
-
`||s==="\r")){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function
|
|
1
|
+
"use strict";var ae=Object.defineProperty;var ot=Object.getOwnPropertyDescriptor;var st=Object.getOwnPropertyNames;var it=Object.prototype.hasOwnProperty;var x=(e,t)=>()=>(e&&(t=e(e=0)),t);var G=(e,t)=>{for(var n in t)ae(e,n,{get:t[n],enumerable:!0})},ut=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of st(t))!it.call(e,o)&&o!==n&&ae(e,o,{get:()=>t[o],enumerable:!(r=ot(t,o))||r.enumerable});return e};var ct=e=>ut(ae({},"__esModule",{value:!0}),e);function L(){return globalThis.WpSuite?.plugins?.aiKit}async function oe(e=8e3){let t=L();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let o=()=>s(n),a=()=>s(()=>r(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(()=>r(new Error("AiKit timeout"))),e):0})}}async function be(e=1e4){await oe(e);let n=L()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var Q=x(()=>{"use strict"});var W,P,se,ie,X,lt,dt,gt,pt,mt,ye,_,we,he,ke,J=x(()=>{"use strict";W=require("@smart-cloud/wpsuite-core"),P=require("@wordpress/data"),se=require("aws-amplify/utils");Q();typeof WpSuite<"u"?ie=WpSuite.siteSettings:ie={};X=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},lt=async()=>{let e=L();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="+ie.lastUpdate).then(n=>n.ok?n.text():null).then(n=>n?JSON.parse(n):null).catch(()=>null)),t??null},dt=async()=>{let e=X(await(0,W.getConfig)("aiKit")),t=await lt();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},gt={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?se.I18n.setLanguage(""):se.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},pt={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}},mt={},ye=e=>{let t=(0,P.dispatch)(e);return delete t.setConfig,t},_=e=>(0,P.select)(e),we=async e=>{(0,W.getWpSuite)().siteSettings.lastUpdate=Date.now();let t=await(0,W.getConfig)("aiKit"),n=X(t);(0,P.dispatch)(e).setConfig(n)},he=async()=>{let e=await dt(),t=(0,P.createReduxStore)("smartcloud/ai-kit",{reducer(n=e,r){switch(r.type){case"SET_LANGUAGE":return{...n,language:r.language};case"SET_DIRECTION":return{...n,direction:r.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...n,showChatbotPreview:r.showChatbotPreview};case"SET_CONFIG":return{...n,config:r.config}}return n},actions:gt,selectors:pt,resolvers:mt});return(0,P.register)(t),t},ke=(e,t,n)=>{let r;function o(){let s=_(e).getState(),i=t(s);if(i!==r){let u=r;r=i,n(r,u)}}let a=(0,P.subscribe)(o,e);return o(),a}});var k,Ce=x(()=>{"use strict";k="smartcloud-ai-kit"});var v,ft,bt,yt,ve=x(()=>{"use strict";v=require("react/jsx-runtime"),ft=e=>(0,v.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,v.jsx)("path",{d:"M19 27H33"}),(0,v.jsx)("path",{d:"M19 33H33"}),(0,v.jsx)("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),(0,v.jsx)("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),(0,v.jsx)("path",{d:"M16 10V40H36V22"}),(0,v.jsx)("path",{d:"M16 10H22"}),(0,v.jsx)("path",{d:"M22 10V23H36"}),(0,v.jsx)("path",{d:"M22 10L36 22"})]}),bt=e=>(0,v.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,v.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,v.jsx)("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),(0,v.jsx)("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),(0,v.jsx)("path",{d:"M16 24H32"})]}),yt=e=>(0,v.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,v.jsx)("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),(0,v.jsx)("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),(0,v.jsx)("path",{d:"M42 42l-12 -12"}),(0,v.jsx)("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),(0,v.jsx)("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var S,ue=x(()=>{"use strict";S=class extends Error{constructor(n,r,o){super(n);this.decision=r;this.status=o;this.name="AiBackendError"}}});var Oe={};G(Oe,{MIN_CHROME_VERSION:()=>Se,checkOnDeviceAvailability:()=>Te,decideCapability:()=>Y,isOnDeviceLanguageSupported:()=>B,resolveBackend:()=>F});async function Pe(){let t=await wt?.plugins?.aiKit?.features.store;return _(t).getConfig()??{}}function xe(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function ht(e){if(e.mode)return e.mode;let{transport:t}=xe(e);return t?"backend-fallback":"local-only"}async function F(){let e=await Pe(),{transport:t,backendApiName:n,backendBaseUrl:r}=xe(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return r?{available:!0,transport:t,baseUrl:r,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!n)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:n,reason:"Gatey backend"}}function R(e){return typeof globalThis[e]<"u"}function Le(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function Z(e,t){return e?.find(n=>n.brand===t)?.version}async function Ct(){let e=navigator?.userAgentData;if(e){try{let n=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(n)&&n.length>0)return n}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function vt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?Le(t[1]):void 0}function At(){return!!navigator?.brave}async function Pt(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??"",n=await Ct(),r=Z(n,"Microsoft Edge")??Z(n,"Microsoft Edge WebView2"),o=Z(n,"Google Chrome")??Z(n,"Chromium"),a=!!r||/\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),p=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=At()||/\bBrave\//i.test(t);if(a||s||i||u||c||p||l)return{allowed:!1,reason:a?"edge":l?"brave":c?"firefox":p?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let m=Le(o)??vt(t),g=Se[e];return g?m?m<g?{allowed:!1,reason:`chrome-too-old-${m}-lt-${g}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function Te(e,t){try{let n=await Pt(e),r=`browser-gate:${n.reason}${n.chromeMajor?` (chrome ${n.chromeMajor})`:""}`;if(!n.allowed)return{available:!1,status:"unavailable",reason:r};let o=a=>a==="unavailable"?kt.has(e)?"requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics":"check hardware requirements or see AI-Kit Diagnostics":r;switch(e){case"writer":{if(!R("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"rewriter":{if(!R("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"summarizer":{if(!R("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"proofreader":{if(!R("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"language-detector":{if(!R("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"translator":{if(!R("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:r};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:r,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(!R("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}default:return{available:!1,status:"unknown-feature",reason:r}}}catch(n){return{available:!1,status:"error",reason:"exception in availability()",error:n}}}function B(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function Y(e,t,n){let r=await Pe(),o=n||ht(r),a=await F(),s=await Te(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, but 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, but 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 Ae,wt,Se,kt,ce=x(()=>{"use strict";Ae=require("@smart-cloud/wpsuite-core");J();wt=(0,Ae.getWpSuite)();Se={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},kt=new Set(["writer","rewriter","proofreader","prompt"])});var Ke={};G(Ke,{dispatchCustomBackend:()=>Ft,dispatchFeatureBackend:()=>D,withRecaptchaHeaders:()=>N});function xt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function St(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function Lt(e,t){let n=St(t);if(n<=0)return!1;let r=Be.get(e);return r?Date.now()-r<n:!1}function le(e,t){let n=xt(t);n&&Be.set(e,n)}function Ee(e,t){if(e!=="frontend"||!Me(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Ie(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let n=Object.keys(e).find(o=>o.toLowerCase()===t.toLowerCase());if(!n)return;let r=e[n];return typeof r=="string"&&r?r:void 0}async function Tt(e,t){if(e!=="frontend")return;let n=(0,ee.getWpSuite)()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&Lt(t.cacheKey,L()?.settings||{}))return;let{execute:r}=await(0,ee.getRecaptcha)(n?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let a=await r(n.reCaptchaPublicKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function N(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await Tt(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function K(e,t){try{e?.onStatus?.(t)}catch{}}function Me(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Rt(e,t){if(!Me(t))return t;let n=Ot[e];if(!n)return t;let r={};for(let o of n)o in t&&(r[o]=t[o]);return r}function It(e,t){return(e==="admin"?Bt:Et)[t]}function Mt(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function D(e,t,n,r,o={}){let a=It(t,n);if(!a)throw new S(`No backend path configured for "${n}" (${t}).`,e);let s=Rt(n,r);return Fe(e,t,n,a,"POST",s,o)}async function Ft(e,t,n,r,o,a={}){let s=Mt(t,n);return Fe(e,t,"prompt",s,r,o,a)}async function Fe(e,t,n,r,o,a,s={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new S("backendTransport=fetch but backendBaseUrl is missing.",e);return Kt(e.backendBaseUrl,r,o,a,s,e,n,t)}if(!e.backendApiName)throw new S("backendTransport=gatey but backendApiName is missing.",e);return Dt(e.backendApiName,r,o,a,s,e,n,t)}async function Kt(e,t,n,r,o,a,s,i){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...o.headers??{}},p=s==="prompt"?Ee(i,r):void 0,l=await N(i,c,{cacheKey:p}),m=o.query&&Object.keys(o.query).length>0?"?"+new URLSearchParams(Object.entries(o.query).map(([b,h])=>[b,String(h)])).toString():"";K(o,{feature:s,context:i,step:"backend:request",source:"backend"}),K(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let g=await fetch(u+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:o.signal,credentials:"omit"});if(K(o,{feature:s,context:i,step:"backend:response",source:"backend"}),!g.ok){let b=`HTTP ${g.status}`;try{let h=await g.text();h&&(b=`${b}: ${h.substring(0,400)}`)}catch{}throw new S(`Fetch backend call failed: ${b}`,a,g.status)}let y=g.headers.get("content-type")||"",f=Ie(g.headers,"x-recaptcha-verified-at");if(y.includes("application/json")){let b=await g.json(),h=(b&&typeof b.sessionId=="string"&&b.sessionId.trim()?b.sessionId.trim():void 0)??p;return f&&h&&le(h,f),b}return f&&p&&le(p,f),await g.text()}async function Dt(e,t,n,r,o,a,s,i){let u=(0,Re.getGateyPlugin)(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new S(`Unsupported HTTP method "${n}" for Gatey backend.`,a)}if(!c)throw new S(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,a);let p=s==="prompt"?Ee(i,r):void 0,l=await N(i,{...o.headers??{}},{cacheKey:p});K(o,{feature:s,context:i,step:"backend:request",source:"backend"}),K(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let m=c({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response,y=Ie(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??p;return y&&typeof b=="string"&&b.trim()&&le(b.trim(),y),K(o,{feature:s,context:i,step:"backend:response",source:"backend"}),f}var Re,ee,Be,Ot,Bt,Et,de=x(()=>{"use strict";Re=require("@smart-cloud/gatey-core"),ee=require("@smart-cloud/wpsuite-core");Q();ue();Be=new Map;Ot={prompt:["text","audio","audioUrl","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature","userSelectedCategories","userSelectedSubcategories","userSelectedTags"],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"]};Bt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Et={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function Ut(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a==="."||a==="!"||a==="?")&&(s===" "||s===`
|
|
2
|
+
`||s==="\r"||o===e.length-1)){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function zt(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a===","||a===";"||a===":")&&(s===" "||s===`
|
|
3
|
+
`||s==="\r")){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function q(e,t){let n=[],r=0;for(;r<e.length;){let o=Math.min(r+t,e.length);if(o<e.length){let s=e.lastIndexOf(`
|
|
4
4
|
|
|
5
|
-
`,o);if(s>r+t*.5)o=s+2;else{let i=
|
|
5
|
+
`,o);if(s>r+t*.5)o=s+2;else{let i=Ut(e,r,o);if(i>0)o=i;else{let u=zt(e,r,o);if(u>0)o=u;else{let c=e.lastIndexOf(" ",o);c>r+t*.5&&(o=c+1)}}}}let a=e.substring(r,o).trim();a.length>0&&n.push({text:a,start:r,end:o}),r=o}return n}var De=x(()=>{"use strict"});var tt={};G(tt,{detectLanguage:()=>rn,getPromptOptions:()=>et,getProofreadOptions:()=>je,getRewriteOptions:()=>He,getSummarizeOptions:()=>Ve,getTranslateOptions:()=>$e,getWriteOptions:()=>qe,prompt:()=>gn,proofread:()=>tn,rewrite:()=>en,sendChatMessage:()=>pn,sendFeedbackMessage:()=>fn,sendSearchMessage:()=>mn,summarize:()=>nn,translate:()=>V,write:()=>Yt});function pe(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(pe).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+pe(t[r])).join(",")+"}"}function Wt(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function _t(e,t){return`${e}:${Wt(pe(t))}`}function ge(){let e=new Map;for(let n of A.values()){let r=e.get(n.kind)??[];r.push(n),e.set(n.kind,r)}for(let[n,r]of e.entries())if(!(r.length<=ze)){r.sort((o,a)=>o.refCount-a.refCount||o.lastUsed-a.lastUsed||o.key.localeCompare(a.key));for(let o of r){if(e.get(n).length<=ze)break;if(!(o.refCount>0)){try{o.destroy()}catch{}A.delete(o.key),e.set(n,(e.get(n)??[]).filter(a=>a.key!==o.key))}}}if(A.size<=Ue)return;let t=Array.from(A.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(A.size<=Ue)break;if(!(n.refCount>0)){try{n.destroy()}catch{}A.delete(n.key)}}}async function E(e,t,n,r){let o=_t(e,t),a=A.get(o);if(a)return a.refCount++,a.lastUsed=Date.now(),A.delete(o),A.set(o,a),{model:a.model,fromCache:!0,release:()=>{let u=A.get(o);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),ge())}};let s=H.get(o);if(s)return s;let i=(async()=>{let u=await n(),c={kind:e,key:o,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>r(u)};return A.set(o,c),H.delete(o),ge(),{model:u,fromCache:!1,release:()=>{let p=A.get(o);p&&(p.refCount=Math.max(0,p.refCount-1),p.lastUsed=Date.now(),ge())}}})().catch(u=>{throw H.delete(o),u});return H.set(o,i),i}function T(){return(_e?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function d(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function U(){return _e?.plugins?.aiKit?.settings?.sharedContext??void 0}function O(e){return e?.context??"admin"}function I(e,t=Nt){let n=new AbortController,r=e?.signal,o=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,a=typeof o=="number"?o:t,s,i=!1,u=()=>{if(n.signal.aborted)return;let c=typeof r?.reason<"u"?r?.reason:void 0;n.abort(c??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?u():r.addEventListener("abort",u)),a&&a>0&&(s=setTimeout(()=>{n.signal.aborted||(i=!0,n.abort(new me(a)))},a)),{signal:n.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),r&&r.removeEventListener("abort",u)}}}function te(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 qt(e,t,n,r){let o=te(e),a=await Ze(e.images,n,t,r);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
|
|
6
6
|
`),systemPrompt:e.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
|
|
7
|
-
`),images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...o}}async function qt(e,t,n,r){let o=Z(e),a=await Xe(e.images,n,t,r),s=await Je(e.audio,n,t,r);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 Ht(e,t,n,r){let o=Z(e),a=await Je(e.audio,n,t,r);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,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...o}}async function jt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function Vt(e){let t=Z(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 $t(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 Gt(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 Xt(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Jt(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Qt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function M(e,t,n,r,o,a,s,i){d(r,e,i,{step:"decide",message:"Deciding capability",silent:n});let u=await J(r,o,t);d(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:n});let c=!1;if(u.source==="on-device")try{let l=await a();return d(r,e,i,{step:"done",source:"on-device",silent:n}),l}catch(l){console.error(`Error in on-device ${r}:`,l),d(r,e,i,{step:"error",source:"on-device",message:l.message,silent:n}),i?.signal?.throwIfAborted(),l instanceof DOMException&&l.name==="QuotaExceededError"&&(c=!0)}if(u.mode!=="local-only"&&u.backendAvailable){d(r,e,i,{step:"backend:request",source:"backend",silent:n});let l=typeof s=="function"?await s(u):s,m=await D(u,e,r,l,i);return d(r,e,i,{step:"done",source:"backend",silent:n}),m}let g=c?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":u.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${g}`)}function rn(e){let t=Array.isArray(e.images)&&e.images.length>0,n=e.images??[],r=t?n.map(a=>({type:"image",value:a})):[],o;if(typeof e.messages=="string")o=t?[{role:"user",content:[{type:"text",value:e.messages},...r]}]: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:""},...r]});else{let i=String(a[s].content??"");a[s]={...a[s],content:[{type:"text",value:i},...r]}}}o=a}return o}function an(e){return typeof Blob<"u"&&e instanceof Blob}function on(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function sn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function un(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 cn(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 ln(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function Ve(e){let t=await ln(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function $e(e,t,n,r,o,a){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...a?.headers??{}},u=await _(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("Backend base URL not available for signed URL request");let p=new URLSearchParams({fileName:n,contentType:r,contentLength:String(o)}).toString(),k=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${p}`,b=await fetch(k,{method:"GET",headers:u,signal:a?.signal,credentials:"omit"});if(!b.ok){let v=await b.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${b.status}${v?": "+v.substring(0,200):""}`)}let f=await b.json();if(!f?.uploadUrl||!f?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:f.uploadUrl,key:f.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=globalThis.WpSuite?.plugins?.gatey,g={fileName:n,contentType:r,contentLength:o};if(c?.cognito?.get){let p=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(g).reduce((b,f)=>(b[f]=String(g[f]),b),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{p.cancel()});let k=await p.response.then(b=>b.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 l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:g,headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(p=>p.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function Ge(e,t,n,r){let o=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.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 Xe(e,t,n,r){if(!e||e.length===0)return;let o=[];for(let c of e){if(!an(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)<=je){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let g of o)c.push({format:sn(g.type),data:await Ve(g)});return{images:c}}d("prompt",n,r,{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],l=g.type||"application/octet-stream",m=g.name||`image_${c}.${on(l)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:p,key:k}=await $e(t,n,m,l,g.size||0,r);d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Ge(p,g,l,r),u.push(k)}return{imageUrls:u}}async function Je(e,t,n,r){if(!e)return;let o=e.size||0;if(Math.ceil(o*1.37+2048)<=je){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=cn(e.type||"audio/webm"),m=await Ve(e);return{audio:{format:l,data:m}}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||`audio.${un(i)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:g}=await $e(t,n,u,i,e.size||0,r);return d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await Ge(c,e,i,r),{audioUrl:g}}var Ke,De,Me,Fe,A,N,Ue,_t,ze,ce,We,Zt,_e,Yt,Ne,en,qe,tn,nn,He,q,je,Qe,dn,gn,pn,mn,Ye=x(()=>{"use strict";Ke=require("@smart-cloud/wpsuite-core");se();ae();et();Ie();De=require("aws-amplify/utils"),Me=8,Fe=2,A=new Map,N=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of A.values())try{e.destroy()}catch{}A.clear(),N.clear()});Ue=(0,Ke.getWpSuite)();_t=45e3,ze=5e3,ce=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};We=e=>{let t=e.outputLanguage?e.outputLanguage:T(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Zt=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:T(),a=o,s=!1;B(o)||(s=!0,o="en");let i=We({...e,outputLanguage:o});return M(n,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=I(t);try{let{model:c,release:g}=await E("writer",{core:i,sharedContext:r},()=>Writer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let p=m.loaded;d("writer",n,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}}),l=>l.destroy());d("writer",n,t,{step:"on-device:ready",source:"on-device"});try{d("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l=await c.write(e.prompt,{context:e.context,signal:u.signal});return s?{result:(await q({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},Vt({...e,sharedContext:r,outputLanguage:a}),t)},_e=e=>{let t=e.outputLanguage?e.outputLanguage:T(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Yt=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:T(),a=o,s=!1;B(o)||(s=!0,o="en");let i=_e({...e,outputLanguage:o});return M(n,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",n,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=I(t);try{let{model:c,release:g}=await E("rewriter",{core:i,sharedContext:r},()=>Rewriter.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let p=m.loaded;d("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}}),l=>l.destroy());d("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l=await c.rewrite(e.text,{context:e.context,signal:u.signal});return s?{result:(await q({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},$t({...e,sharedContext:r,outputLanguage:a}),t)},Ne=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),en=async(e,t)=>{let n=O(t),r=await Ne();return M(n,t?.modeOverride,!1,"proofreader",r,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",n,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let o=I(t);try{let{model:a,release:s}=await E("proofreader",{core:r},()=>Proofreader.create({...r,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());d("proofreader",n,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",n,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()}},Qt(e),t)},qe=e=>{let t=e.outputLanguage?e.outputLanguage:T(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},tn=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:T(),a=o,s=!1;B(o)||(s=!0,o="en");let i=await qe({...e,outputLanguage:o});return M(n,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=I(t);try{let{model:c,release:g}=await E("summarizer",{core:i,sharedContext:r},()=>Summarizer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let p=m.loaded;d("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}}),l=>l.destroy());d("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),m=c.inputQuota;if(l>m){let k=Ee(e.text,m*.8*3.5);if(k.length>1){let b=[];for(let f=0;f<k.length;f++){let nt=De.I18n.get("Summarizing part {current}/{total}...").replace("{current}",String(f+1)).replace("{total}",String(k.length));d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:nt});let rt=await c.summarize(k[f].text,{context:e.context,signal:u.signal});b.push(rt)}e.text=b.join(`
|
|
7
|
+
`),images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...o}}async function Ht(e,t,n,r){let o=te(e),a=await Ze(e.images,n,t,r),s=await Ye(e.audio,n,t,r);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 jt(e,t,n,r){let o=te(e),a=await Ye(e.audio,n,t,r);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,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...o}}async function Vt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function $t(e){let t=te(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 Gt(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 Qt(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 Xt(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Jt(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Zt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function M(e,t,n,r,o,a,s,i){d(r,e,i,{step:"decide",message:"Deciding capability",silent:n});let u=await Y(r,o,t);d(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:n});let c=!1;if(u.source==="on-device")try{let l=await a();return d(r,e,i,{step:"done",source:"on-device",silent:n}),l}catch(l){console.error(`Error in on-device ${r}:`,l),d(r,e,i,{step:"error",source:"on-device",message:l.message,silent:n}),i?.signal?.throwIfAborted(),l instanceof DOMException&&l.name==="QuotaExceededError"&&(c=!0)}if(u.mode!=="local-only"&&u.backendAvailable){d(r,e,i,{step:"backend:request",source:"backend",silent:n});let l=typeof s=="function"?await s(u):s,m=await D(u,e,r,l,i);return d(r,e,i,{step:"done",source:"backend",silent:n}),m}let p=c?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":u.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${p}`)}function an(e){let t=Array.isArray(e.images)&&e.images.length>0,n=e.images??[],r=t?n.map(a=>({type:"image",value:a})):[],o;if(typeof e.messages=="string")o=t?[{role:"user",content:[{type:"text",value:e.messages},...r]}]: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:""},...r]});else{let i=String(a[s].content??"");a[s]={...a[s],content:[{type:"text",value:i},...r]}}}o=a}return o}function on(e){return typeof Blob<"u"&&e instanceof Blob}function sn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function un(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function cn(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 ln(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 dn(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function Qe(e){let t=await dn(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function Xe(e,t,n,r,o,a){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...a?.headers??{}},u=await N(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("Backend base URL not available for signed URL request");let g=new URLSearchParams({fileName:n,contentType:r,contentLength:String(o)}).toString(),y=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${g}`,f=await fetch(y,{method:"GET",headers:u,signal:a?.signal,credentials:"omit"});if(!f.ok){let h=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${h?": "+h.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=globalThis.WpSuite?.plugins?.gatey,p={fileName:n,contentType:r,contentLength:o};if(c?.cognito?.get){let g=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(p).reduce((f,b)=>(f[b]=String(p[b]),f),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(f=>f.body.json());if(!y?.uploadUrl||!y?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:y.uploadUrl,key:y.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:p,headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(g=>g.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function Je(e,t,n,r){let o=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.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 Ze(e,t,n,r){if(!e||e.length===0)return;let o=[];for(let c of e){if(!on(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");o.push(c)}let a=o.reduce((c,p)=>c+(p.size||0),0);if(Math.ceil(a*1.37+2048*o.length)<=Ge){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let p of o)c.push({format:un(p.type),data:await Qe(p)});return{images:c}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<o.length;c++){let p=o[c],l=p.type||"application/octet-stream",m=p.name||`image_${c}.${sn(l)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await Xe(t,n,m,l,p.size||0,r);d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Je(g,p,l,r),u.push(y)}return{imageUrls:u}}async function Ye(e,t,n,r){if(!e)return;let o=e.size||0;if(Math.ceil(o*1.37+2048)<=Ge){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=ln(e.type||"audio/webm"),m=await Qe(e);return{audio:{format:l,data:m}}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||`audio.${cn(i)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:p}=await Xe(t,n,u,i,e.size||0,r);return d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await Je(c,e,i,r),{audioUrl:p}}var We,j,Ue,ze,A,H,_e,Nt,Ne,me,qe,Yt,He,en,je,tn,Ve,nn,rn,$e,V,Ge,et,gn,pn,mn,fn,nt=x(()=>{"use strict";We=require("@smart-cloud/wpsuite-core");de();ce();rt();De();j=require("aws-amplify/utils"),Ue=8,ze=2,A=new Map,H=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of A.values())try{e.destroy()}catch{}A.clear(),H.clear()});_e=(0,We.getWpSuite)();Nt=45e3,Ne=5e3,me=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};qe=e=>{let t=e.outputLanguage?e.outputLanguage:T(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Yt=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:T(),a=o,s=!1;B(o)||(s=!0,o="en");let i=qe({...e,outputLanguage:o});return M(n,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=I(t);try{let{model:c,release:p}=await E("writer",{core:i,sharedContext:r},()=>Writer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("writer",n,t,{step:"on-device:ready",source:"on-device"});try{d("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await c.measureInputUsage(e.prompt,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=q(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let z=j.I18n.get("Writing part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));d("writer",n,t,{step:"on-device:run",source:"on-device",message:z});let re=await c.write(f[h].text,{context:e.context,signal:u.signal});b.push(re)}l=b.join(`
|
|
8
8
|
|
|
9
|
-
`)}}
|
|
10
|
-
`))u(),i.push(a.translate(g.trim()));return{result:(await Promise.all(i)).join(`
|
|
11
|
-
`)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{o.dispose()}},Xt(e.text,e.sourceLanguage,e.targetLanguage),t)};je=4*1024*1024;Qe=async e=>{let t=e.outputLanguage?e.outputLanguage:T();return B(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},dn=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:T(),a=o,s=!1;B(o)||(s=!0,o="en");let i=await Qe({...e,outputLanguage:o}),u=await J("prompt",i,t?.modeOverride);return M(n,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");d("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let p of e.messages)p.role==="system"&&p.content.trim()&&c.push(p.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let g=c.length>0?c.join(`
|
|
9
|
+
`)}}return m||(l=await c.write(e.prompt,{context:e.context,signal:u.signal})),s?{result:(await V({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{p()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},$t({...e,sharedContext:r,outputLanguage:a}),t)},He=e=>{let t=e.outputLanguage?e.outputLanguage:T(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},en=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:T(),a=o,s=!1;B(o)||(s=!0,o="en");let i=He({...e,outputLanguage:o});return M(n,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",n,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=I(t);try{let{model:c,release:p}=await E("rewriter",{core:i,sharedContext:r},()=>Rewriter.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l="",m=!1,g=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=q(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let z=j.I18n.get("Rewriting part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:z});let re=await c.rewrite(f[h].text,{context:e.context,signal:u.signal});b.push(re)}l=b.join(`
|
|
12
10
|
|
|
13
|
-
`)
|
|
11
|
+
`)}}return m||(l=await c.rewrite(e.text,{context:e.context,signal:u.signal})),s?{result:(await V({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{p()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},Gt({...e,sharedContext:r,outputLanguage:a}),t)},je=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),tn=async(e,t)=>{let n=O(t),r=await je();return M(n,t?.modeOverride,!1,"proofreader",r,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",n,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let o=I(t);try{let{model:a,release:s}=await E("proofreader",{core:r},()=>Proofreader.create({...r,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());d("proofreader",n,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",n,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()}},Zt(e),t)},Ve=e=>{let t=e.outputLanguage?e.outputLanguage:T(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},nn=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:T(),a=o,s=!1;B(o)||(s=!0,o="en");let i=await Ve({...e,outputLanguage:o});return M(n,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=I(t);try{let{model:c,release:p}=await E("summarizer",{core:i,sharedContext:r},()=>Summarizer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),m=c.inputQuota;if(l>m){let y=q(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let ne=j.I18n.get("Summarizing part {current}/{total}...").replace("{current}",String(b+1)).replace("{total}",String(y.length));d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:ne});let z=await c.summarize(y[b].text,{context:e.context,signal:u.signal});f.push(z)}e.text=f.join(`
|
|
12
|
+
|
|
13
|
+
`)}}let g=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await V({text:g,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:g}}finally{try{p()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{u.dispose()}},Qt({...e,sharedContext:r,outputLanguage:a}),t)},rn=async(e,t)=>{let n=O(t);return M(n,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let r=I(t,Ne);try{let{model:o,release:a}=await E("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;d("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());d("language-detector",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",n,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await o.detect(e.text,{signal:r.signal})).filter(i=>fe.find(u=>u.value===i.detectedLanguage))}}}finally{try{a()}catch(s){console.error("Error destroying language detector:",s)}}}finally{r.dispose()}},Jt(e.text,t),t)},$e=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??T()??"en"};return Promise.resolve(t)},V=async(e,t)=>{let n=O(t),r=await $e({...e});return M(n,t?.modeOverride,t?.silent,"translator",r,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",n,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let o=I(t,Ne);try{let{model:a,release:s}=await E("translator",{core:r},()=>Translator.create({...r,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("translator",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());d("translator",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",n,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i="",u=!1,c=await a.measureInputUsage(e.text,{signal:o.signal}),p=a.inputQuota;if(c>p){let l=q(e.text,p*.8*3.5);if(l.length>1){let m=[];u=!0;for(let g=0;g<l.length;g++){let f=j.I18n.get("Translating part {current}/{total}...").replace("{current}",String(g+1)).replace("{total}",String(l.length));d("translator",n,t,{step:"on-device:run",source:"on-device",message:f,silent:t?.silent});let b=await a.translate(l[g].text,{signal:o.signal});m.push(b)}i=m.join(`
|
|
14
|
+
|
|
15
|
+
`)}}return u||(i=await a.translate(e.text,{signal:o.signal})),{result:i}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{o.dispose()}},Xt(e.text,e.sourceLanguage,e.targetLanguage),t)};Ge=4*1024*1024;et=async e=>{let t=e.outputLanguage?e.outputLanguage:T();return B(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},gn=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:T(),a=o,s=!1;B(o)||(s=!0,o="en");let i=await et({...e,outputLanguage:o}),u=await Y("prompt",i,t?.modeOverride);return M(n,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");d("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&c.push(g.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let p=c.length>0?c.join(`
|
|
16
|
+
|
|
17
|
+
`):void 0,l=p?[{role:"system",content:p}]:void 0,m=I(t);try{let{model:g,release:y}=await E("language-model",{core:i,initialPrompts:l},()=>LanguageModel.create({...i,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let h=b.loaded;d("prompt",n,t,{step:"on-device:download",source:"on-device",progress:h,loaded:h})})}}),f=>f.destroy());d("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(an(e),{signal:m.signal,responseConstraint:e.responseConstraint});return s?{result:(await V({text:f,sourceLanguage:o,targetLanguage:a},{context:n,signal:m.signal})).result}:{result:f}}finally{try{y()}catch(f){console.error("Error destroying LanguageModel:",f)}}}finally{m.dispose()}},await qt({...e,sharedContext:r},n,u,t),t)},pn=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o="prompt",a=await F(),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 Ht({sessionId:e.sessionId,message:e.message,audio:e.audio,images:e.images,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await D(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},mn=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o="prompt",a=await F(),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 jt({...e,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await D(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},fn=async(e,t)=>{let n="frontend",r="prompt",o=await F(),a={feature:r,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await Vt({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});d(r,n,t,{step:"backend:request",source:"backend"});let i=await D(a,n,r,s,t);return d(r,n,t,{step:"done",source:"backend"}),i}});var Wn={};G(Wn,{AiKitChatbotIcon:()=>bt,AiKitDocSearchIcon:()=>yt,AiKitFeatureIcon:()=>ft,BackendError:()=>S,LANGUAGE_OPTIONS:()=>fe,TEXT_DOMAIN:()=>k,checkOnDeviceAvailability:()=>hn,decideCapability:()=>wn,detectLanguage:()=>In,dispatchBackend:()=>vn,getAiKitPlugin:()=>L,getMinChromeVersions:()=>bn,getPromptOptions:()=>Mn,getProofreadOptions:()=>Ln,getRewriteOptions:()=>xn,getStore:()=>be,getStoreDispatch:()=>ye,getStoreSelect:()=>_,getSummarizeOptions:()=>On,getTranslateOptions:()=>Bn,getWriteOptions:()=>An,initializeAiKit:()=>zn,isOnDeviceLanguageSupported:()=>yn,observeStore:()=>ke,prompt:()=>Fn,proofread:()=>Tn,reloadConfig:()=>we,resolveBackend:()=>kn,rewrite:()=>Sn,sanitizeAiKitConfig:()=>X,sendChatMessage:()=>Kn,sendFeedbackMessage:()=>Dn,sendSearchMessage:()=>Un,summarize:()=>Rn,translate:()=>En,waitForAiKitReady:()=>oe,write:()=>Pn});module.exports=ct(Wn);var at,C,fe,$,bn,yn,wn,hn,kn,Cn,vn,w,An,Pn,xn,Sn,Ln,Tn,On,Rn,Bn,En,In,Mn,Fn,Kn,Dn,Un,zn,rt=x(()=>{at=require("@smart-cloud/wpsuite-core"),C=require("@wordpress/i18n");Q();J();Ce();J();ve();ue();fe=[{label:(0,C.__)("Arabic",k),value:"ar"},{label:(0,C.__)("Chinese",k),value:"zh"},{label:(0,C.__)("Dutch",k),value:"nl"},{label:(0,C.__)("English",k),value:"en"},{label:(0,C.__)("French",k),value:"fr"},{label:(0,C.__)("German",k),value:"de"},{label:(0,C.__)("Hebrew",k),value:"he"},{label:(0,C.__)("Hindi",k),value:"hi"},{label:(0,C.__)("Hungarian",k),value:"hu"},{label:(0,C.__)("Indonesian",k),value:"id"},{label:(0,C.__)("Italian",k),value:"it"},{label:(0,C.__)("Japanese",k),value:"ja"},{label:(0,C.__)("Korean",k),value:"ko"},{label:(0,C.__)("Norwegian",k),value:"no"},{label:(0,C.__)("Polish",k),value:"pl"},{label:(0,C.__)("Portuguese",k),value:"pt"},{label:(0,C.__)("Russian",k),value:"ru"},{label:(0,C.__)("Spanish",k),value:"es"},{label:(0,C.__)("Swedish",k),value:"sv"},{label:(0,C.__)("Thai",k),value:"th"},{label:(0,C.__)("Turkish",k),value:"tr"},{label:(0,C.__)("Ukrainian",k),value:"uk"}],$=Promise.resolve().then(()=>(ce(),Oe)),bn=async()=>(await $).MIN_CHROME_VERSION,yn=async(...e)=>(await $).isOnDeviceLanguageSupported(...e),wn=async(...e)=>(await $).decideCapability(...e),hn=async(...e)=>(await $).checkOnDeviceAvailability(...e),kn=async(...e)=>(await $).resolveBackend(...e),Cn=Promise.resolve().then(()=>(de(),Ke)),vn=async(...e)=>(await Cn).dispatchCustomBackend(...e),w=Promise.resolve().then(()=>(nt(),tt)),An=async(...e)=>(await w).getWriteOptions(...e),Pn=async(...e)=>(await w).write(...e),xn=async(...e)=>(await w).getRewriteOptions(...e),Sn=async(...e)=>(await w).rewrite(...e),Ln=async(...e)=>(await w).getProofreadOptions(...e),Tn=async(...e)=>(await w).proofread(...e),On=async(...e)=>(await w).getSummarizeOptions(...e),Rn=async(...e)=>(await w).summarize(...e),Bn=async(...e)=>(await w).getTranslateOptions(...e),En=async(...e)=>(await w).translate(...e),In=async(...e)=>(await w).detectLanguage(...e),Mn=async(...e)=>(await w).getPromptOptions(...e),Fn=async(...e)=>(await w).prompt(...e),Kn=async(...e)=>(await w).sendChatMessage(...e),Dn=async(...e)=>(await w).sendFeedbackMessage(...e),Un=async(...e)=>(await w).sendSearchMessage(...e),zn=(e,t)=>{let n=globalThis.WpSuite,r=L();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");(0,at.attachDefaultPluginRuntime)(r),r.status=r.status??"initializing";let o=he();return r.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 w,i=a[1]||{};return a[1]={context:"frontend",...i},s.write(...a)},rewrite:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.rewrite(...a)},proofread:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.proofread(...a)},summarize:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.summarize(...a)},translate:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.translate(...a)},detectLanguage:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.detectLanguage(...a)},prompt:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.prompt(...a)},sendChatMessage:async(...a)=>(await w).sendChatMessage(...a),sendFeedbackMessage:async(...a)=>(await w).sendFeedbackMessage(...a),sendSearchMessage:async(...a)=>(await w).sendSearchMessage(...a)},o.then(()=>{r.status="available",n?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(a=>{r.status="error",console.error("AiKit plugin failed to initialize:",a),n?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(a)})}),r}});rt();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,isOnDeviceLanguageSupported,observeStore,prompt,proofread,reloadConfig,resolveBackend,rewrite,sanitizeAiKitConfig,sendChatMessage,sendFeedbackMessage,sendSearchMessage,summarize,translate,waitForAiKitReady,write});
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
var Ge=Object.defineProperty;var P=(e,t)=>()=>(e&&(t=e(e=0)),t);var G=(e,t)=>{for(var n in t)Ge(e,n,{get:t[n],enumerable:!0})};function T(){return globalThis.WpSuite?.plugins?.aiKit}async function oe(e=8e3){let t=T();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let o=()=>s(n),a=()=>s(()=>r(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(()=>r(new Error("AiKit timeout"))),e):0})}}async function Xe(e=1e4){await oe(e);let n=T()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var N=P(()=>{"use strict"});import{getConfig as ie,getWpSuite as Je}from"@smart-cloud/wpsuite-core";import{createReduxStore as Qe,dispatch as ue,register as Ze,select as Ye,subscribe as et}from"@wordpress/data";import{I18n as se}from"aws-amplify/utils";var X,J,tt,nt,rt,at,ot,st,q,it,ce,ut,H=P(()=>{"use strict";N();typeof WpSuite<"u"?X=WpSuite.siteSettings:X={};J=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},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="+X.lastUpdate).then(n=>n.ok?n.text():null).then(n=>n?JSON.parse(n):null).catch(()=>null)),t??null},nt=async()=>{let e=J(await ie("aiKit")),t=await tt();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},rt={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?se.setLanguage(""):se.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config: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={},st=e=>{let t=ue(e);return delete t.setConfig,t},q=e=>Ye(e),it=async e=>{Je().siteSettings.lastUpdate=Date.now();let t=await ie("aiKit"),n=J(t);ue(e).setConfig(n)},ce=async()=>{let e=await nt(),t=Qe("smartcloud/ai-kit",{reducer(n=e,r){switch(r.type){case"SET_LANGUAGE":return{...n,language:r.language};case"SET_DIRECTION":return{...n,direction:r.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...n,showChatbotPreview:r.showChatbotPreview};case"SET_CONFIG":return{...n,config:r.config}}return n},actions:rt,selectors:at,resolvers:ot});return Ze(t),t},ut=(e,t,n)=>{let r;function o(){let s=q(e).getState(),i=t(s);if(i!==r){let u=r;r=i,n(r,u)}}let a=et(o,e);return o(),a}});var w,le=P(()=>{"use strict";w="smartcloud-ai-kit"});import{jsx as C,jsxs as Q}from"react/jsx-runtime";var Pn,xn,Sn,de=P(()=>{"use strict";Pn=e=>Q("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:[C("path",{d:"M19 27H33"}),C("path",{d:"M19 33H33"}),C("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),C("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),C("path",{d:"M16 10V40H36V22"}),C("path",{d:"M16 10H22"}),C("path",{d:"M22 10V23H36"}),C("path",{d:"M22 10L36 22"})]}),xn=e=>Q("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:[C("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"}),C("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),C("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),C("path",{d:"M16 24H32"})]}),Sn=e=>Q("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:[C("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),C("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),C("path",{d:"M42 42l-12 -12"}),C("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),C("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var x,Z=P(()=>{"use strict";x=class extends Error{constructor(n,r,o){super(n);this.decision=r;this.status=o;this.name="AiBackendError"}}});var ye={};G(ye,{MIN_CHROME_VERSION:()=>me,checkOnDeviceAvailability:()=>be,decideCapability:()=>V,isOnDeviceLanguageSupported:()=>R,resolveBackend:()=>M});import{getWpSuite as ct}from"@smart-cloud/wpsuite-core";async function ge(){let t=await lt?.plugins?.aiKit?.features.store;return q(t).getConfig()??{}}function pe(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function dt(e){if(e.mode)return e.mode;let{transport:t}=pe(e);return t?"backend-fallback":"local-only"}async function M(){let e=await ge(),{transport:t,backendApiName:n,backendBaseUrl:r}=pe(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return r?{available:!0,transport:t,baseUrl:r,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!n)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:n,reason:"Gatey backend"}}function O(e){return typeof globalThis[e]<"u"}function fe(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(n=>n.brand===t)?.version}async function pt(){let e=navigator?.userAgentData;if(e){try{let n=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(n)&&n.length>0)return n}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function mt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?fe(t[1]):void 0}function ft(){return!!navigator?.brave}async function bt(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??"",n=await pt(),r=j(n,"Microsoft Edge")??j(n,"Microsoft Edge WebView2"),o=j(n,"Google Chrome")??j(n,"Chromium"),a=!!r||/\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),l=ft()||/\bBrave\//i.test(t);if(a||s||i||u||c||g||l)return{allowed:!1,reason:a?"edge":l?"brave":c?"firefox":g?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let m=fe(o)??mt(t),p=me[e];return p?m?m<p?{allowed:!1,reason:`chrome-too-old-${m}-lt-${p}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function be(e,t){try{let n=await bt(e),r=`browser-gate:${n.reason}${n.chromeMajor?` (chrome ${n.chromeMajor})`:""}`;if(!n.allowed)return{available:!1,status:"unavailable",reason:r};let o=a=>a==="unavailable"?gt.has(e)?"requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics":"check hardware requirements or see AI-Kit Diagnostics":r;switch(e){case"writer":{if(!O("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:r};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:r};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:r};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:r};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:r};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:r};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:r,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:r};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}default:return{available:!1,status:"unknown-feature",reason:r}}}catch(n){return{available:!1,status:"error",reason:"exception in availability()",error:n}}}function R(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function V(e,t,n){let r=await ge(),o=n||dt(r),a=await M(),s=await be(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, but 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, but 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 lt,me,gt,Y=P(()=>{"use strict";H();lt=ct();me={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},gt=new Set(["writer","rewriter","proofreader","prompt"])});var Ae={};G(Ae,{dispatchCustomBackend:()=>Rt,dispatchFeatureBackend:()=>K,withRecaptchaHeaders:()=>U});import{getGateyPlugin as yt}from"@smart-cloud/gatey-core";import{getRecaptcha as wt,getWpSuite as ht}from"@smart-cloud/wpsuite-core";function kt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function Ct(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function vt(e,t){let n=Ct(t);if(n<=0)return!1;let r=we.get(e);return r?Date.now()-r<n:!1}function ee(e,t){let n=kt(t);n&&we.set(e,n)}function he(e,t){if(e!=="frontend"||!Ce(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function ke(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let n=Object.keys(e).find(o=>o.toLowerCase()===t.toLowerCase());if(!n)return;let r=e[n];return typeof r=="string"&&r?r:void 0}async function At(e,t){if(e!=="frontend")return;let n=ht()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&vt(t.cacheKey,T()?.settings||{}))return;let{execute:r}=await wt(n?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let a=await r(n.reCaptchaPublicKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function U(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await At(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function F(e,t){try{e?.onStatus?.(t)}catch{}}function Ce(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function xt(e,t){if(!Ce(t))return t;let n=Pt[e];if(!n)return t;let r={};for(let o of n)o in t&&(r[o]=t[o]);return r}function Tt(e,t){return(e==="admin"?St:Lt)[t]}function Ot(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function K(e,t,n,r,o={}){let a=Tt(t,n);if(!a)throw new x(`No backend path configured for "${n}" (${t}).`,e);let s=xt(n,r);return ve(e,t,n,a,"POST",s,o)}async function Rt(e,t,n,r,o,a={}){let s=Ot(t,n);return ve(e,t,"prompt",s,r,o,a)}async function ve(e,t,n,r,o,a,s={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new x("backendTransport=fetch but backendBaseUrl is missing.",e);return Bt(e.backendBaseUrl,r,o,a,s,e,n,t)}if(!e.backendApiName)throw new x("backendTransport=gatey but backendApiName is missing.",e);return Et(e.backendApiName,r,o,a,s,e,n,t)}async function Bt(e,t,n,r,o,a,s,i){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...o.headers??{}},g=s==="prompt"?he(i,r):void 0,l=await U(i,c,{cacheKey:g}),m=o.query&&Object.keys(o.query).length>0?"?"+new URLSearchParams(Object.entries(o.query).map(([f,v])=>[f,String(v)])).toString():"";F(o,{feature:s,context:i,step:"backend:request",source:"backend"}),F(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let p=await fetch(u+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:o.signal,credentials:"omit"});if(F(o,{feature:s,context:i,step:"backend:response",source:"backend"}),!p.ok){let f=`HTTP ${p.status}`;try{let v=await p.text();v&&(f=`${f}: ${v.substring(0,400)}`)}catch{}throw new x(`Fetch backend call failed: ${f}`,a,p.status)}let h=p.headers.get("content-type")||"",b=ke(p.headers,"x-recaptcha-verified-at");if(h.includes("application/json")){let f=await p.json(),v=(f&&typeof f.sessionId=="string"&&f.sessionId.trim()?f.sessionId.trim():void 0)??g;return b&&v&&ee(v,b),f}return b&&g&&ee(g,b),await p.text()}async function Et(e,t,n,r,o,a,s,i){let u=yt(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new x(`Unsupported HTTP method "${n}" for Gatey backend.`,a)}if(!c)throw new x(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,a);let g=s==="prompt"?he(i,r):void 0,l=await U(i,{...o.headers??{}},{cacheKey:g});F(o,{feature:s,context:i,step:"backend:request",source:"backend"}),F(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let m=c({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{m.cancel()});let p=await m.response,h=ke(p.headers,"x-recaptcha-verified-at"),b=await p.body.json(),f=b?.sessionId??g;return h&&typeof f=="string"&&f.trim()&&ee(f.trim(),h),F(o,{feature:s,context:i,step:"backend:response",source:"backend"}),b}var we,Pt,St,Lt,te=P(()=>{"use strict";N();Z();we=new Map;Pt={prompt:["text","audio","audioUrl","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature","userSelectedCategories","userSelectedSubcategories","userSelectedTags"],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"]};St={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Lt={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function It(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a==="."||a==="!"||a==="?")&&(s===" "||s===`
|
|
2
|
-
`||s==="\r"||o===e.length-1)){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function
|
|
3
|
-
`||s==="\r")){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function
|
|
1
|
+
var Xe=Object.defineProperty;var P=(e,t)=>()=>(e&&(t=e(e=0)),t);var Y=(e,t)=>{for(var n in t)Xe(e,n,{get:t[n],enumerable:!0})};function T(){return globalThis.WpSuite?.plugins?.aiKit}async function le(e=8e3){let t=T();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let o=()=>s(n),a=()=>s(()=>r(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(()=>r(new Error("AiKit timeout"))),e):0})}}async function Je(e=1e4){await le(e);let n=T()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var H=P(()=>{"use strict"});import{getConfig as ge,getWpSuite as Ze}from"@smart-cloud/wpsuite-core";import{createReduxStore as Ye,dispatch as pe,register as et,select as tt,subscribe as nt}from"@wordpress/data";import{I18n as de}from"aws-amplify/utils";var ee,te,rt,at,ot,st,it,ut,j,ct,me,lt,V=P(()=>{"use strict";H();typeof WpSuite<"u"?ee=WpSuite.siteSettings:ee={};te=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},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="+ee.lastUpdate).then(n=>n.ok?n.text():null).then(n=>n?JSON.parse(n):null).catch(()=>null)),t??null},at=async()=>{let e=te(await ge("aiKit")),t=await rt();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},ot={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?de.setLanguage(""):de.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},st={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}},it={},ut=e=>{let t=pe(e);return delete t.setConfig,t},j=e=>tt(e),ct=async e=>{Ze().siteSettings.lastUpdate=Date.now();let t=await ge("aiKit"),n=te(t);pe(e).setConfig(n)},me=async()=>{let e=await at(),t=Ye("smartcloud/ai-kit",{reducer(n=e,r){switch(r.type){case"SET_LANGUAGE":return{...n,language:r.language};case"SET_DIRECTION":return{...n,direction:r.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...n,showChatbotPreview:r.showChatbotPreview};case"SET_CONFIG":return{...n,config:r.config}}return n},actions:ot,selectors:st,resolvers:it});return et(t),t},lt=(e,t,n)=>{let r;function o(){let s=j(e).getState(),i=t(s);if(i!==r){let u=r;r=i,n(r,u)}}let a=nt(o,e);return o(),a}});var k,fe=P(()=>{"use strict";k="smartcloud-ai-kit"});import{jsx as v,jsxs as ne}from"react/jsx-runtime";var xn,Sn,Ln,be=P(()=>{"use strict";xn=e=>ne("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"})]}),Sn=e=>ne("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"})]}),Ln=e=>ne("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 x,re=P(()=>{"use strict";x=class extends Error{constructor(n,r,o){super(n);this.decision=r;this.status=o;this.name="AiBackendError"}}});var ve={};Y(ve,{MIN_CHROME_VERSION:()=>he,checkOnDeviceAvailability:()=>Ce,decideCapability:()=>G,isOnDeviceLanguageSupported:()=>R,resolveBackend:()=>M});import{getWpSuite as dt}from"@smart-cloud/wpsuite-core";async function ye(){let t=await gt?.plugins?.aiKit?.features.store;return j(t).getConfig()??{}}function we(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function pt(e){if(e.mode)return e.mode;let{transport:t}=we(e);return t?"backend-fallback":"local-only"}async function M(){let e=await ye(),{transport:t,backendApiName:n,backendBaseUrl:r}=we(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return r?{available:!0,transport:t,baseUrl:r,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!n)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:n,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 $(e,t){return e?.find(n=>n.brand===t)?.version}async function ft(){let e=navigator?.userAgentData;if(e){try{let n=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(n)&&n.length>0)return n}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function bt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?ke(t[1]):void 0}function yt(){return!!navigator?.brave}async function wt(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??"",n=await ft(),r=$(n,"Microsoft Edge")??$(n,"Microsoft Edge WebView2"),o=$(n,"Google Chrome")??$(n,"Chromium"),a=!!r||/\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),p=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=yt()||/\bBrave\//i.test(t);if(a||s||i||u||c||p||l)return{allowed:!1,reason:a?"edge":l?"brave":c?"firefox":p?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let m=ke(o)??bt(t),g=he[e];return g?m?m<g?{allowed:!1,reason:`chrome-too-old-${m}-lt-${g}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function Ce(e,t){try{let n=await wt(e),r=`browser-gate:${n.reason}${n.chromeMajor?` (chrome ${n.chromeMajor})`:""}`;if(!n.allowed)return{available:!1,status:"unavailable",reason:r};let o=a=>a==="unavailable"?mt.has(e)?"requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics":"check hardware requirements or see AI-Kit Diagnostics":r;switch(e){case"writer":{if(!O("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:r};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:r};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:r};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:r};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:r};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:r};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:r,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:r};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}default:return{available:!1,status:"unknown-feature",reason:r}}}catch(n){return{available:!1,status:"error",reason:"exception in availability()",error:n}}}function R(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function G(e,t,n){let r=await ye(),o=n||pt(r),a=await M(),s=await Ce(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, but 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, but 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 gt,he,mt,ae=P(()=>{"use strict";V();gt=dt();he={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},mt=new Set(["writer","rewriter","proofreader","prompt"])});var Te={};Y(Te,{dispatchCustomBackend:()=>Et,dispatchFeatureBackend:()=>K,withRecaptchaHeaders:()=>z});import{getGateyPlugin as ht}from"@smart-cloud/gatey-core";import{getRecaptcha as kt,getWpSuite as Ct}from"@smart-cloud/wpsuite-core";function vt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function At(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function Pt(e,t){let n=At(t);if(n<=0)return!1;let r=Ae.get(e);return r?Date.now()-r<n:!1}function oe(e,t){let n=vt(t);n&&Ae.set(e,n)}function Pe(e,t){if(e!=="frontend"||!Se(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function xe(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let n=Object.keys(e).find(o=>o.toLowerCase()===t.toLowerCase());if(!n)return;let r=e[n];return typeof r=="string"&&r?r:void 0}async function xt(e,t){if(e!=="frontend")return;let n=Ct()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&Pt(t.cacheKey,T()?.settings||{}))return;let{execute:r}=await kt(n?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let a=await r(n.reCaptchaPublicKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function z(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await xt(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function F(e,t){try{e?.onStatus?.(t)}catch{}}function Se(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Lt(e,t){if(!Se(t))return t;let n=St[e];if(!n)return t;let r={};for(let o of n)o in t&&(r[o]=t[o]);return r}function Rt(e,t){return(e==="admin"?Tt:Ot)[t]}function Bt(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function K(e,t,n,r,o={}){let a=Rt(t,n);if(!a)throw new x(`No backend path configured for "${n}" (${t}).`,e);let s=Lt(n,r);return Le(e,t,n,a,"POST",s,o)}async function Et(e,t,n,r,o,a={}){let s=Bt(t,n);return Le(e,t,"prompt",s,r,o,a)}async function Le(e,t,n,r,o,a,s={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new x("backendTransport=fetch but backendBaseUrl is missing.",e);return It(e.backendBaseUrl,r,o,a,s,e,n,t)}if(!e.backendApiName)throw new x("backendTransport=gatey but backendApiName is missing.",e);return Mt(e.backendApiName,r,o,a,s,e,n,t)}async function It(e,t,n,r,o,a,s,i){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...o.headers??{}},p=s==="prompt"?Pe(i,r):void 0,l=await z(i,c,{cacheKey:p}),m=o.query&&Object.keys(o.query).length>0?"?"+new URLSearchParams(Object.entries(o.query).map(([b,h])=>[b,String(h)])).toString():"";F(o,{feature:s,context:i,step:"backend:request",source:"backend"}),F(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let g=await fetch(u+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:o.signal,credentials:"omit"});if(F(o,{feature:s,context:i,step:"backend:response",source:"backend"}),!g.ok){let b=`HTTP ${g.status}`;try{let h=await g.text();h&&(b=`${b}: ${h.substring(0,400)}`)}catch{}throw new x(`Fetch backend call failed: ${b}`,a,g.status)}let y=g.headers.get("content-type")||"",f=xe(g.headers,"x-recaptcha-verified-at");if(y.includes("application/json")){let b=await g.json(),h=(b&&typeof b.sessionId=="string"&&b.sessionId.trim()?b.sessionId.trim():void 0)??p;return f&&h&&oe(h,f),b}return f&&p&&oe(p,f),await g.text()}async function Mt(e,t,n,r,o,a,s,i){let u=ht(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new x(`Unsupported HTTP method "${n}" for Gatey backend.`,a)}if(!c)throw new x(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,a);let p=s==="prompt"?Pe(i,r):void 0,l=await z(i,{...o.headers??{}},{cacheKey:p});F(o,{feature:s,context:i,step:"backend:request",source:"backend"}),F(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let m=c({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response,y=xe(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??p;return y&&typeof b=="string"&&b.trim()&&oe(b.trim(),y),F(o,{feature:s,context:i,step:"backend:response",source:"backend"}),f}var Ae,St,Tt,Ot,se=P(()=>{"use strict";H();re();Ae=new Map;St={prompt:["text","audio","audioUrl","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature","userSelectedCategories","userSelectedSubcategories","userSelectedTags"],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"]};Tt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Ot={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function Ft(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a==="."||a==="!"||a==="?")&&(s===" "||s===`
|
|
2
|
+
`||s==="\r"||o===e.length-1)){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function Kt(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a===","||a===";"||a===":")&&(s===" "||s===`
|
|
3
|
+
`||s==="\r")){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function W(e,t){let n=[],r=0;for(;r<e.length;){let o=Math.min(r+t,e.length);if(o<e.length){let s=e.lastIndexOf(`
|
|
4
4
|
|
|
5
|
-
`,o);if(s>r+t*.5)o=s+2;else{let i=
|
|
5
|
+
`,o);if(s>r+t*.5)o=s+2;else{let i=Ft(e,r,o);if(i>0)o=i;else{let u=Kt(e,r,o);if(u>0)o=u;else{let c=e.lastIndexOf(" ",o);c>r+t*.5&&(o=c+1)}}}}let a=e.substring(r,o).trim();a.length>0&&n.push({text:a,start:r,end:o}),r=o}return n}var Oe=P(()=>{"use strict"});var Ve={};Y(Ve,{detectLanguage:()=>tn,getPromptOptions:()=>je,getProofreadOptions:()=>Ke,getRewriteOptions:()=>Fe,getSummarizeOptions:()=>De,getTranslateOptions:()=>Ue,getWriteOptions:()=>Me,prompt:()=>ln,proofread:()=>Yt,rewrite:()=>Zt,sendChatMessage:()=>dn,sendFeedbackMessage:()=>pn,sendSearchMessage:()=>gn,summarize:()=>en,translate:()=>N,write:()=>Jt});import{getWpSuite as Dt}from"@smart-cloud/wpsuite-core";import{I18n as Q}from"aws-amplify/utils";function ue(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(ue).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+ue(t[r])).join(",")+"}"}function Ut(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function zt(e,t){return`${e}:${Ut(ue(t))}`}function ie(){let e=new Map;for(let n of A.values()){let r=e.get(n.kind)??[];r.push(n),e.set(n.kind,r)}for(let[n,r]of e.entries())if(!(r.length<=Be)){r.sort((o,a)=>o.refCount-a.refCount||o.lastUsed-a.lastUsed||o.key.localeCompare(a.key));for(let o of r){if(e.get(n).length<=Be)break;if(!(o.refCount>0)){try{o.destroy()}catch{}A.delete(o.key),e.set(n,(e.get(n)??[]).filter(a=>a.key!==o.key))}}}if(A.size<=Re)return;let t=Array.from(A.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(A.size<=Re)break;if(!(n.refCount>0)){try{n.destroy()}catch{}A.delete(n.key)}}}async function B(e,t,n,r){let o=zt(e,t),a=A.get(o);if(a)return a.refCount++,a.lastUsed=Date.now(),A.delete(o),A.set(o,a),{model:a.model,fromCache:!0,release:()=>{let u=A.get(o);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),ie())}};let s=_.get(o);if(s)return s;let i=(async()=>{let u=await n(),c={kind:e,key:o,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>r(u)};return A.set(o,c),_.delete(o),ie(),{model:u,fromCache:!1,release:()=>{let p=A.get(o);p&&(p.refCount=Math.max(0,p.refCount-1),p.lastUsed=Date.now(),ie())}}})().catch(u=>{throw _.delete(o),u});return _.set(o,i),i}function S(){return(Ee?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function d(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function D(){return Ee?.plugins?.aiKit?.settings?.sharedContext??void 0}function L(e){return e?.context??"admin"}function E(e,t=Wt){let n=new AbortController,r=e?.signal,o=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,a=typeof o=="number"?o:t,s,i=!1,u=()=>{if(n.signal.aborted)return;let c=typeof r?.reason<"u"?r?.reason:void 0;n.abort(c??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?u():r.addEventListener("abort",u)),a&&a>0&&(s=setTimeout(()=>{n.signal.aborted||(i=!0,n.abort(new ce(a)))},a)),{signal:n.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),r&&r.removeEventListener("abort",u)}}}function X(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 _t(e,t,n,r){let o=X(e),a=await qe(e.images,n,t,r);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
|
|
6
6
|
`),systemPrompt:e.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
|
|
7
|
-
`),images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...o}}async function _t(e,t,n,r){let o=$(e),a=await ze(e.images,n,t,r),s=await We(e.audio,n,t,r);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 Nt(e,t,n,r){let o=$(e),a=await We(e.audio,n,t,r);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,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...o}}async function qt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function Ht(e){let t=$(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 jt(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 Vt(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 $t(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Gt(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Xt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function I(e,t,n,r,o,a,s,i){d(r,e,i,{step:"decide",message:"Deciding capability",silent:n});let u=await V(r,o,t);d(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:n});let c=!1;if(u.source==="on-device")try{let l=await a();return d(r,e,i,{step:"done",source:"on-device",silent:n}),l}catch(l){console.error(`Error in on-device ${r}:`,l),d(r,e,i,{step:"error",source:"on-device",message:l.message,silent:n}),i?.signal?.throwIfAborted(),l instanceof DOMException&&l.name==="QuotaExceededError"&&(c=!0)}if(u.mode!=="local-only"&&u.backendAvailable){d(r,e,i,{step:"backend:request",source:"backend",silent:n});let l=typeof s=="function"?await s(u):s,m=await K(u,e,r,l,i);return d(r,e,i,{step:"done",source:"backend",silent:n}),m}let g=c?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":u.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${g}`)}function tn(e){let t=Array.isArray(e.images)&&e.images.length>0,n=e.images??[],r=t?n.map(a=>({type:"image",value:a})):[],o;if(typeof e.messages=="string")o=t?[{role:"user",content:[{type:"text",value:e.messages},...r]}]: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:""},...r]});else{let i=String(a[s].content??"");a[s]={...a[s],content:[{type:"text",value:i},...r]}}}o=a}return o}function nn(e){return typeof Blob<"u"&&e instanceof Blob}function rn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function an(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function on(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 sn(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 un(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function Ke(e){let t=await un(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function De(e,t,n,r,o,a){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...a?.headers??{}},u=await U(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("Backend base URL not available for signed URL request");let p=new URLSearchParams({fileName:n,contentType:r,contentLength:String(o)}).toString(),h=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${p}`,b=await fetch(h,{method:"GET",headers:u,signal:a?.signal,credentials:"omit"});if(!b.ok){let v=await b.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${b.status}${v?": "+v.substring(0,200):""}`)}let f=await b.json();if(!f?.uploadUrl||!f?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:f.uploadUrl,key:f.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=globalThis.WpSuite?.plugins?.gatey,g={fileName:n,contentType:r,contentLength:o};if(c?.cognito?.get){let p=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(g).reduce((b,f)=>(b[f]=String(g[f]),b),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{p.cancel()});let h=await p.response.then(b=>b.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 l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:g,headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(p=>p.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function Ue(e,t,n,r){let o=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.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 ze(e,t,n,r){if(!e||e.length===0)return;let o=[];for(let c of e){if(!nn(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)<=Fe){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let g of o)c.push({format:an(g.type),data:await Ke(g)});return{images:c}}d("prompt",n,r,{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],l=g.type||"application/octet-stream",m=g.name||`image_${c}.${rn(l)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:p,key:h}=await De(t,n,m,l,g.size||0,r);d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Ue(p,g,l,r),u.push(h)}return{imageUrls:u}}async function We(e,t,n,r){if(!e)return;let o=e.size||0;if(Math.ceil(o*1.37+2048)<=Fe){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=sn(e.type||"audio/webm"),m=await Ke(e);return{audio:{format:l,data:m}}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||`audio.${on(i)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:g}=await De(t,n,u,i,e.size||0,r);return d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await Ue(c,e,i,r),{audioUrl:g}}var Se,Le,A,z,Te,zt,Oe,ae,Re,Jt,Be,Qt,Ee,Zt,Ie,Yt,en,Me,W,Fe,_e,cn,ln,dn,gn,qe=P(()=>{"use strict";te();Y();je();xe();Se=8,Le=2,A=new Map,z=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of A.values())try{e.destroy()}catch{}A.clear(),z.clear()});Te=Ft();zt=45e3,Oe=5e3,ae=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Re=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Jt=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=Re({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=E(t);try{let{model:c,release:g}=await B("writer",{core:i,sharedContext:r},()=>Writer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let p=m.loaded;d("writer",n,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}}),l=>l.destroy());d("writer",n,t,{step:"on-device:ready",source:"on-device"});try{d("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l=await c.write(e.prompt,{context:e.context,signal:u.signal});return s?{result:(await W({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},Ht({...e,sharedContext:r,outputLanguage:a}),t)},Be=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Qt=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=Be({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",n,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=E(t);try{let{model:c,release:g}=await B("rewriter",{core:i,sharedContext:r},()=>Rewriter.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let p=m.loaded;d("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}}),l=>l.destroy());d("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l=await c.rewrite(e.text,{context:e.context,signal:u.signal});return s?{result:(await W({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{g()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},jt({...e,sharedContext:r,outputLanguage:a}),t)},Ee=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Zt=async(e,t)=>{let n=L(t),r=await Ee();return I(n,t?.modeOverride,!1,"proofreader",r,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",n,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let o=E(t);try{let{model:a,release:s}=await B("proofreader",{core:r},()=>Proofreader.create({...r,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());d("proofreader",n,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",n,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()}},Xt(e),t)},Ie=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Yt=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=await Ie({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=E(t);try{let{model:c,release:g}=await B("summarizer",{core:i,sharedContext:r},()=>Summarizer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let p=m.loaded;d("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}}),l=>l.destroy());d("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),m=c.inputQuota;if(l>m){let h=Pe(e.text,m*.8*3.5);if(h.length>1){let b=[];for(let f=0;f<h.length;f++){let Ve=Kt.get("Summarizing part {current}/{total}...").replace("{current}",String(f+1)).replace("{total}",String(h.length));d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:Ve});let $e=await c.summarize(h[f].text,{context:e.context,signal:u.signal});b.push($e)}e.text=b.join(`
|
|
7
|
+
`),images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...o}}async function Nt(e,t,n,r){let o=X(e),a=await qe(e.images,n,t,r),s=await He(e.audio,n,t,r);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 qt(e,t,n,r){let o=X(e),a=await He(e.audio,n,t,r);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,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...o}}async function Ht(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function jt(e){let t=X(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 Vt(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 $t(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 Gt(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Qt(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Xt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function I(e,t,n,r,o,a,s,i){d(r,e,i,{step:"decide",message:"Deciding capability",silent:n});let u=await G(r,o,t);d(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:n});let c=!1;if(u.source==="on-device")try{let l=await a();return d(r,e,i,{step:"done",source:"on-device",silent:n}),l}catch(l){console.error(`Error in on-device ${r}:`,l),d(r,e,i,{step:"error",source:"on-device",message:l.message,silent:n}),i?.signal?.throwIfAborted(),l instanceof DOMException&&l.name==="QuotaExceededError"&&(c=!0)}if(u.mode!=="local-only"&&u.backendAvailable){d(r,e,i,{step:"backend:request",source:"backend",silent:n});let l=typeof s=="function"?await s(u):s,m=await K(u,e,r,l,i);return d(r,e,i,{step:"done",source:"backend",silent:n}),m}let p=c?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":u.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${p}`)}function nn(e){let t=Array.isArray(e.images)&&e.images.length>0,n=e.images??[],r=t?n.map(a=>({type:"image",value:a})):[],o;if(typeof e.messages=="string")o=t?[{role:"user",content:[{type:"text",value:e.messages},...r]}]: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:""},...r]});else{let i=String(a[s].content??"");a[s]={...a[s],content:[{type:"text",value:i},...r]}}}o=a}return o}function rn(e){return typeof Blob<"u"&&e instanceof Blob}function an(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function on(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function sn(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 un(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 cn(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function We(e){let t=await cn(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function _e(e,t,n,r,o,a){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");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("Backend base URL not available for signed URL request");let g=new URLSearchParams({fileName:n,contentType:r,contentLength:String(o)}).toString(),y=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${g}`,f=await fetch(y,{method:"GET",headers:u,signal:a?.signal,credentials:"omit"});if(!f.ok){let h=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${h?": "+h.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=globalThis.WpSuite?.plugins?.gatey,p={fileName:n,contentType:r,contentLength:o};if(c?.cognito?.get){let g=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(p).reduce((f,b)=>(f[b]=String(p[b]),f),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(f=>f.body.json());if(!y?.uploadUrl||!y?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:y.uploadUrl,key:y.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:p,headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(g=>g.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function Ne(e,t,n,r){let o=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.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,n,r){if(!e||e.length===0)return;let o=[];for(let c of e){if(!rn(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");o.push(c)}let a=o.reduce((c,p)=>c+(p.size||0),0);if(Math.ceil(a*1.37+2048*o.length)<=ze){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let p of o)c.push({format:on(p.type),data:await We(p)});return{images:c}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<o.length;c++){let p=o[c],l=p.type||"application/octet-stream",m=p.name||`image_${c}.${an(l)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await _e(t,n,m,l,p.size||0,r);d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Ne(g,p,l,r),u.push(y)}return{imageUrls:u}}async function He(e,t,n,r){if(!e)return;let o=e.size||0;if(Math.ceil(o*1.37+2048)<=ze){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=un(e.type||"audio/webm"),m=await We(e);return{audio:{format:l,data:m}}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||`audio.${sn(i)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:p}=await _e(t,n,u,i,e.size||0,r);return d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await Ne(c,e,i,r),{audioUrl:p}}var Re,Be,A,_,Ee,Wt,Ie,ce,Me,Jt,Fe,Zt,Ke,Yt,De,en,tn,Ue,N,ze,je,ln,dn,gn,pn,$e=P(()=>{"use strict";se();ae();Qe();Oe();Re=8,Be=2,A=new Map,_=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of A.values())try{e.destroy()}catch{}A.clear(),_.clear()});Ee=Dt();Wt=45e3,Ie=5e3,ce=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Me=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Jt=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=Me({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=E(t);try{let{model:c,release:p}=await B("writer",{core:i,sharedContext:r},()=>Writer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("writer",n,t,{step:"on-device:ready",source:"on-device"});try{d("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await c.measureInputUsage(e.prompt,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=W(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let U=Q.get("Writing part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));d("writer",n,t,{step:"on-device:run",source:"on-device",message:U});let Z=await c.write(f[h].text,{context:e.context,signal:u.signal});b.push(Z)}l=b.join(`
|
|
8
8
|
|
|
9
|
-
`)}}
|
|
10
|
-
`))u(),i.push(a.translate(g.trim()));return{result:(await Promise.all(i)).join(`
|
|
11
|
-
`)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{o.dispose()}},$t(e.text,e.sourceLanguage,e.targetLanguage),t)};Fe=4*1024*1024;_e=async e=>{let t=e.outputLanguage?e.outputLanguage:S();return R(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},cn=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=await _e({...e,outputLanguage:o}),u=await V("prompt",i,t?.modeOverride);return I(n,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");d("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let p of e.messages)p.role==="system"&&p.content.trim()&&c.push(p.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let g=c.length>0?c.join(`
|
|
9
|
+
`)}}return m||(l=await c.write(e.prompt,{context:e.context,signal:u.signal})),s?{result:(await N({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{p()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},jt({...e,sharedContext:r,outputLanguage:a}),t)},Fe=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Zt=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=Fe({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",n,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=E(t);try{let{model:c,release:p}=await B("rewriter",{core:i,sharedContext:r},()=>Rewriter.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l="",m=!1,g=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=W(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let U=Q.get("Rewriting part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:U});let Z=await c.rewrite(f[h].text,{context:e.context,signal:u.signal});b.push(Z)}l=b.join(`
|
|
12
10
|
|
|
13
|
-
`)
|
|
11
|
+
`)}}return m||(l=await c.rewrite(e.text,{context:e.context,signal:u.signal})),s?{result:(await N({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{p()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},Vt({...e,sharedContext:r,outputLanguage:a}),t)},Ke=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Yt=async(e,t)=>{let n=L(t),r=await Ke();return I(n,t?.modeOverride,!1,"proofreader",r,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",n,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let o=E(t);try{let{model:a,release:s}=await B("proofreader",{core:r},()=>Proofreader.create({...r,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());d("proofreader",n,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",n,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()}},Xt(e),t)},De=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},en=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=await De({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=E(t);try{let{model:c,release:p}=await B("summarizer",{core:i,sharedContext:r},()=>Summarizer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),m=c.inputQuota;if(l>m){let y=W(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let J=Q.get("Summarizing part {current}/{total}...").replace("{current}",String(b+1)).replace("{total}",String(y.length));d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:J});let U=await c.summarize(y[b].text,{context:e.context,signal:u.signal});f.push(U)}e.text=f.join(`
|
|
12
|
+
|
|
13
|
+
`)}}let g=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await N({text:g,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:g}}finally{try{p()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{u.dispose()}},$t({...e,sharedContext:r,outputLanguage:a}),t)},tn=async(e,t)=>{let n=L(t);return I(n,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let r=E(t,Ie);try{let{model:o,release:a}=await B("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;d("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());d("language-detector",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",n,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await o.detect(e.text,{signal:r.signal})).filter(i=>Ge.find(u=>u.value===i.detectedLanguage))}}}finally{try{a()}catch(s){console.error("Error destroying language detector:",s)}}}finally{r.dispose()}},Qt(e.text,t),t)},Ue=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??S()??"en"};return Promise.resolve(t)},N=async(e,t)=>{let n=L(t),r=await Ue({...e});return I(n,t?.modeOverride,t?.silent,"translator",r,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",n,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let o=E(t,Ie);try{let{model:a,release:s}=await B("translator",{core:r},()=>Translator.create({...r,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("translator",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());d("translator",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",n,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i="",u=!1,c=await a.measureInputUsage(e.text,{signal:o.signal}),p=a.inputQuota;if(c>p){let l=W(e.text,p*.8*3.5);if(l.length>1){let m=[];u=!0;for(let g=0;g<l.length;g++){let f=Q.get("Translating part {current}/{total}...").replace("{current}",String(g+1)).replace("{total}",String(l.length));d("translator",n,t,{step:"on-device:run",source:"on-device",message:f,silent:t?.silent});let b=await a.translate(l[g].text,{signal:o.signal});m.push(b)}i=m.join(`
|
|
14
|
+
|
|
15
|
+
`)}}return u||(i=await a.translate(e.text,{signal:o.signal})),{result:i}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{o.dispose()}},Gt(e.text,e.sourceLanguage,e.targetLanguage),t)};ze=4*1024*1024;je=async e=>{let t=e.outputLanguage?e.outputLanguage:S();return R(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},ln=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=await je({...e,outputLanguage:o}),u=await G("prompt",i,t?.modeOverride);return I(n,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");d("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&c.push(g.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let p=c.length>0?c.join(`
|
|
16
|
+
|
|
17
|
+
`):void 0,l=p?[{role:"system",content:p}]:void 0,m=E(t);try{let{model:g,release:y}=await B("language-model",{core:i,initialPrompts:l},()=>LanguageModel.create({...i,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let h=b.loaded;d("prompt",n,t,{step:"on-device:download",source:"on-device",progress:h,loaded:h})})}}),f=>f.destroy());d("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(nn(e),{signal:m.signal,responseConstraint:e.responseConstraint});return s?{result:(await N({text:f,sourceLanguage:o,targetLanguage:a},{context:n,signal:m.signal})).result}:{result:f}}finally{try{y()}catch(f){console.error("Error destroying LanguageModel:",f)}}}finally{m.dispose()}},await _t({...e,sharedContext:r},n,u,t),t)},dn=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),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 Nt({sessionId:e.sessionId,message:e.message,audio:e.audio,images:e.images,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await K(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},gn=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),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 qt({...e,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await K(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},pn=async(e,t)=>{let n="frontend",r="prompt",o=await M(),a={feature:r,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await Ht({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});d(r,n,t,{step:"backend:request",source:"backend"});let i=await K(a,n,r,s,t);return d(r,n,t,{step:"done",source:"backend"}),i}});import{attachDefaultPluginRuntime as mn}from"@smart-cloud/wpsuite-core";import{__ as C}from"@wordpress/i18n";var Ge,q,Qn,Xn,Jn,Zn,Yn,fn,er,w,tr,nr,rr,ar,or,sr,ir,ur,cr,lr,dr,gr,pr,mr,fr,br,yr,Qe=P(()=>{H();V();fe();V();be();re();Ge=[{label:C("Arabic",k),value:"ar"},{label:C("Chinese",k),value:"zh"},{label:C("Dutch",k),value:"nl"},{label:C("English",k),value:"en"},{label:C("French",k),value:"fr"},{label:C("German",k),value:"de"},{label:C("Hebrew",k),value:"he"},{label:C("Hindi",k),value:"hi"},{label:C("Hungarian",k),value:"hu"},{label:C("Indonesian",k),value:"id"},{label:C("Italian",k),value:"it"},{label:C("Japanese",k),value:"ja"},{label:C("Korean",k),value:"ko"},{label:C("Norwegian",k),value:"no"},{label:C("Polish",k),value:"pl"},{label:C("Portuguese",k),value:"pt"},{label:C("Russian",k),value:"ru"},{label:C("Spanish",k),value:"es"},{label:C("Swedish",k),value:"sv"},{label:C("Thai",k),value:"th"},{label:C("Turkish",k),value:"tr"},{label:C("Ukrainian",k),value:"uk"}],q=Promise.resolve().then(()=>(ae(),ve)),Qn=async()=>(await q).MIN_CHROME_VERSION,Xn=async(...e)=>(await q).isOnDeviceLanguageSupported(...e),Jn=async(...e)=>(await q).decideCapability(...e),Zn=async(...e)=>(await q).checkOnDeviceAvailability(...e),Yn=async(...e)=>(await q).resolveBackend(...e),fn=Promise.resolve().then(()=>(se(),Te)),er=async(...e)=>(await fn).dispatchCustomBackend(...e),w=Promise.resolve().then(()=>($e(),Ve)),tr=async(...e)=>(await w).getWriteOptions(...e),nr=async(...e)=>(await w).write(...e),rr=async(...e)=>(await w).getRewriteOptions(...e),ar=async(...e)=>(await w).rewrite(...e),or=async(...e)=>(await w).getProofreadOptions(...e),sr=async(...e)=>(await w).proofread(...e),ir=async(...e)=>(await w).getSummarizeOptions(...e),ur=async(...e)=>(await w).summarize(...e),cr=async(...e)=>(await w).getTranslateOptions(...e),lr=async(...e)=>(await w).translate(...e),dr=async(...e)=>(await w).detectLanguage(...e),gr=async(...e)=>(await w).getPromptOptions(...e),pr=async(...e)=>(await w).prompt(...e),mr=async(...e)=>(await w).sendChatMessage(...e),fr=async(...e)=>(await w).sendFeedbackMessage(...e),br=async(...e)=>(await w).sendSearchMessage(...e),yr=(e,t)=>{let n=globalThis.WpSuite,r=T();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");mn(r),r.status=r.status??"initializing";let o=me();return r.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 w,i=a[1]||{};return a[1]={context:"frontend",...i},s.write(...a)},rewrite:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.rewrite(...a)},proofread:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.proofread(...a)},summarize:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.summarize(...a)},translate:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.translate(...a)},detectLanguage:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.detectLanguage(...a)},prompt:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.prompt(...a)},sendChatMessage:async(...a)=>(await w).sendChatMessage(...a),sendFeedbackMessage:async(...a)=>(await w).sendFeedbackMessage(...a),sendSearchMessage:async(...a)=>(await w).sendSearchMessage(...a)},o.then(()=>{r.status="available",n?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(a=>{r.status="error",console.error("AiKit plugin failed to initialize:",a),n?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(a)})}),r}});Qe();export{Sn as AiKitChatbotIcon,Ln as AiKitDocSearchIcon,xn as AiKitFeatureIcon,x as BackendError,Ge as LANGUAGE_OPTIONS,k as TEXT_DOMAIN,Zn as checkOnDeviceAvailability,Jn as decideCapability,dr as detectLanguage,er as dispatchBackend,T as getAiKitPlugin,Qn as getMinChromeVersions,gr as getPromptOptions,or as getProofreadOptions,rr as getRewriteOptions,Je as getStore,ut as getStoreDispatch,j as getStoreSelect,ir as getSummarizeOptions,cr as getTranslateOptions,tr as getWriteOptions,yr as initializeAiKit,Xn as isOnDeviceLanguageSupported,lt as observeStore,pr as prompt,sr as proofread,ct as reloadConfig,Yn as resolveBackend,ar as rewrite,te as sanitizeAiKitConfig,mr as sendChatMessage,fr as sendFeedbackMessage,br as sendSearchMessage,ur as summarize,lr as translate,le as waitForAiKitReady,nr as write};
|