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