@smart-cloud/ai-kit-core 1.3.6 → 1.3.7

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