@smart-cloud/ai-kit-core 1.5.5 → 1.5.6

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.
@@ -0,0 +1,9 @@
1
+ import type { AiKitBackendCapability, BackendCompatibility, BackendTransport, BuiltInAiFeature, ContextKind } from "./types";
2
+ export declare function capabilityForFeature(context: ContextKind, feature: BuiltInAiFeature): AiKitBackendCapability;
3
+ export declare function capabilityForCustomPath(context: ContextKind, path: string): AiKitBackendCapability | undefined;
4
+ export declare function resolveBackendCompatibility(input: {
5
+ transport: BackendTransport;
6
+ apiName?: string;
7
+ baseUrl?: string;
8
+ }): Promise<BackendCompatibility>;
9
+ export declare function supportsBackendCapability(compatibility: BackendCompatibility, capability: AiKitBackendCapability, minimumVersion?: number): boolean;
package/dist/index.cjs CHANGED
@@ -1,17 +1,17 @@
1
- "use strict";var ae=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var ut=Object.prototype.hasOwnProperty;var P=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var V=(e,t)=>{for(var n in t)ae(e,n,{get:t[n],enumerable:!0})},ct=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of it(t))!ut.call(e,o)&&o!==n&&ae(e,o,{get:()=>t[o],enumerable:!(r=st(t,o))||r.enumerable});return e};var lt=e=>ct(ae({},"__esModule",{value:!0}),e);function T(){return globalThis.WpSuite?.plugins?.aiKit}async function oe(e=8e3){let t=T();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let o=()=>s(n),a=()=>s(()=>r(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",o),window.removeEventListener("wpsuite:ai-kit:error",a),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",o,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",a,{once:!0});let i=e?window.setTimeout(()=>s(()=>r(new Error("AiKit timeout"))),e):0})}}async function ye(e=1e4){await oe(e);let n=T()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var $=P(()=>{"use strict"});var W,x,se,ie,G,dt,gt,pt,mt,ft,we,_,he,ke,Ce,Q=P(()=>{"use strict";W=require("@smart-cloud/wpsuite-core"),x=require("@wordpress/data"),se=require("aws-amplify/utils");$();typeof WpSuite<"u"?ie=WpSuite.siteSettings:ie={};G=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},dt=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="+ie.lastUpdate).then(n=>n.ok?n.text():null).then(n=>n?JSON.parse(n):null).catch(()=>null)),t??null},gt=async()=>{let e=G(await(0,W.getConfig)("aiKit")),t=await dt();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},pt={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?se.I18n.setLanguage(""):se.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},mt={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}},ft={},we=e=>{let t=(0,x.dispatch)(e);return delete t.setConfig,t},_=e=>(0,x.select)(e),he=async e=>{(0,W.getWpSuite)().siteSettings.lastUpdate=Date.now();let t=await(0,W.getConfig)("aiKit"),n=G(t);(0,x.dispatch)(e).setConfig(n)},ke=async()=>{let e=await gt(),t=(0,x.createReduxStore)("smartcloud/ai-kit",{reducer(n=e,r){switch(r.type){case"SET_LANGUAGE":return{...n,language:r.language};case"SET_DIRECTION":return{...n,direction:r.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...n,showChatbotPreview:r.showChatbotPreview};case"SET_CONFIG":return{...n,config:r.config}}return n},actions:pt,selectors:mt,resolvers:ft});return(0,x.register)(t),t},Ce=(e,t,n)=>{let r;function o(){let s=_(e).getState(),i=t(s);if(i!==r){let u=r;r=i,n(r,u)}}let a=(0,x.subscribe)(o,e);return o(),a}});var k,ve=P(()=>{"use strict";k="smartcloud-ai-kit"});var v,bt,yt,wt,Ae=P(()=>{"use strict";v=require("react/jsx-runtime"),bt=e=>(0,v.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,v.jsx)("path",{d:"M19 27H33"}),(0,v.jsx)("path",{d:"M19 33H33"}),(0,v.jsx)("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),(0,v.jsx)("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),(0,v.jsx)("path",{d:"M16 10V40H36V22"}),(0,v.jsx)("path",{d:"M16 10H22"}),(0,v.jsx)("path",{d:"M22 10V23H36"}),(0,v.jsx)("path",{d:"M22 10L36 22"})]}),yt=e=>(0,v.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,v.jsx)("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),(0,v.jsx)("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),(0,v.jsx)("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),(0,v.jsx)("path",{d:"M16 24H32"})]}),wt=e=>(0,v.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,v.jsx)("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),(0,v.jsx)("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),(0,v.jsx)("path",{d:"M42 42l-12 -12"}),(0,v.jsx)("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),(0,v.jsx)("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var S,ue=P(()=>{"use strict";S=class extends Error{constructor(n,r,o){super(n);this.decision=r;this.status=o;this.name="AiBackendError"}decision;status}});var Be={};V(Be,{MIN_CHROME_VERSION:()=>Le,checkOnDeviceAvailability:()=>Re,decideCapability:()=>J,isOnDeviceLanguageSupported:()=>B,resolveBackend:()=>F});async function Se(){let t=await(0,xe.getWpSuite)()?.plugins?.aiKit?.features.store;return _(t).getConfig()??{}}function Te(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function ht(e){if(e.mode)return e.mode;let{transport:t}=Te(e);return t?"backend-fallback":"local-only"}async function F(){let e=await Se(),{transport:t,backendApiName:n,backendBaseUrl:r}=Te(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return r?{available:!0,transport:t,baseUrl:r,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!n)return{available:!1,reason:"backendApiName is missing"};let o=(0,Pe.getGateyPlugin)();return!o?.availability||await o.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:n,reason:"Gatey backend"}}function R(e){return typeof globalThis[e]<"u"}function Oe(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function X(e,t){return e?.find(n=>n.brand===t)?.version}async function Ct(){let e=navigator?.userAgentData;if(e){try{let n=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(n)&&n.length>0)return n}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function vt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?Oe(t[1]):void 0}function At(){return!!navigator?.brave}async function xt(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",n=await Ct(),r=X(n,"Microsoft Edge")??X(n,"Microsoft Edge WebView2"),o=X(n,"Google Chrome")??X(n,"Chromium"),a=!!r||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),p=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=At()||/\bBrave\//i.test(t);if(a||s||i||u||c||p||l)return{allowed:!1,reason:a?"edge":l?"brave":c?"firefox":p?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let m=Oe(o)??vt(t),g=Le[e];return g?m?m<g?{allowed:!1,reason:`chrome-too-old-${m}-lt-${g}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function Re(e,t){try{let n=await xt(e),r=`browser-gate:${n.reason}${n.chromeMajor?` (chrome ${n.chromeMajor})`:""}`;if(!n.allowed)return{available:!1,status:"unavailable",reason:r};let o=a=>a==="unavailable"?kt.has(e)?"requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics":"check hardware requirements or see AI-Kit Diagnostics":r;switch(e){case"writer":{if(!R("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"rewriter":{if(!R("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"summarizer":{if(!R("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"proofreader":{if(!R("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"language-detector":{if(!R("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"translator":{if(!R("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:r};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:r,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let s=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:s!=="unavailable",status:s,reason:o(s)}}case"prompt":{if(!R("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}default:return{available:!1,status:"unknown-feature",reason:r}}}catch(n){return{available:!1,status:"error",reason:"exception in availability()",error:n}}}function B(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function J(e,t,n){let r=await Se(),o=n||ht(r),a=await F(),s=await Re(e,t),i=s.available,u=a.available,c={feature:e,mode:o,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason};return o==="local-only"?i?{...c,source:"on-device",reason:`local-only, on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only, but on-device unavailable (${s.reason??s.status})`}:o==="backend-only"?u?{...c,source:"backend",reason:`backend-only, backend available (${a.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only, but backend unavailable (${a.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback, using backend (${a.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${a.reason??"n/a"})`}}var xe,Pe,Le,kt,ce=P(()=>{"use strict";xe=require("@smart-cloud/wpsuite-core"),Pe=require("@smart-cloud/gatey-core");Q();Le={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},kt=new Set(["writer","rewriter","proofreader","prompt"])});var Ue={};V(Ue,{dispatchCustomBackend:()=>Ft,dispatchFeatureBackend:()=>D,withRecaptchaHeaders:()=>N});function Pt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function St(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function Tt(e,t){let n=St(t);if(n<=0)return!1;let r=Ie.get(e);return r?Date.now()-r<n:!1}function le(e,t){let n=Pt(t);n&&Ie.set(e,n)}function Me(e,t){if(e!=="frontend"||!Ke(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Fe(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let n=Object.keys(e).find(o=>o.toLowerCase()===t.toLowerCase());if(!n)return;let r=e[n];return typeof r=="string"&&r?r:void 0}async function Lt(e,t){if(e!=="frontend")return;let n=(0,Z.getWpSuite)()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&Tt(t.cacheKey,T()?.settings||{}))return;let{execute:r}=await(0,Z.getRecaptcha)(n?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let a=await r(n.reCaptchaPublicKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function N(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await Lt(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function K(e,t){try{e?.onStatus?.(t)}catch{}}function Ke(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Rt(e,t){if(!Ke(t))return t;let n=Ot[e];if(!n)return t;let r={};for(let o of n)o in t&&(r[o]=t[o]);return r}function It(e,t){return(e==="admin"?Bt:Et)[t]}function Mt(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function D(e,t,n,r,o={}){let a=It(t,n);if(!a)throw new S(`No backend path configured for "${n}" (${t}).`,e);let s=Rt(n,r);return De(e,t,n,a,"POST",s,o)}async function Ft(e,t,n,r,o,a={}){let s=Mt(t,n);return De(e,t,"prompt",s,r,o,a)}async function De(e,t,n,r,o,a,s={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new S("backendTransport=fetch but backendBaseUrl is missing.",e);return Kt(e.backendBaseUrl,r,o,a,s,e,n,t)}if(!e.backendApiName)throw new S("backendTransport=gatey but backendApiName is missing.",e);return Dt(e.backendApiName,r,o,a,s,e,n,t)}async function Kt(e,t,n,r,o,a,s,i){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...o.headers??{}},p=s==="prompt"?Me(i,r):void 0,l=await N(i,c,{cacheKey:p}),m=o.query&&Object.keys(o.query).length>0?"?"+new URLSearchParams(Object.entries(o.query).map(([b,h])=>[b,String(h)])).toString():"";K(o,{feature:s,context:i,step:"backend:request",source:"backend"}),K(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let g=await fetch(u+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:o.signal,credentials:"omit"});if(K(o,{feature:s,context:i,step:"backend:response",source:"backend"}),!g.ok){let b=`HTTP ${g.status}`;try{let h=await g.text();h&&(b=`${b}: ${h.substring(0,400)}`)}catch{}throw new S(`Fetch backend call failed: ${b}`,a,g.status)}let y=g.headers.get("content-type")||"",f=Fe(g.headers,"x-recaptcha-verified-at");if(y.includes("application/json")){let b=await g.json(),h=(b&&typeof b.sessionId=="string"&&b.sessionId.trim()?b.sessionId.trim():void 0)??p;return f&&h&&le(h,f),b}return f&&p&&le(p,f),await g.text()}async function Dt(e,t,n,r,o,a,s,i){let u=(0,Ee.getGateyPlugin)(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new S(`Unsupported HTTP method "${n}" for Gatey backend.`,a)}if(!c)throw new S(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,a);let p=s==="prompt"?Me(i,r):void 0,l=await N(i,{...o.headers??{}},{cacheKey:p});K(o,{feature:s,context:i,step:"backend:request",source:"backend"}),K(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let m=c({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response,y=Fe(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??p;return y&&typeof b=="string"&&b.trim()&&le(b.trim(),y),K(o,{feature:s,context:i,step:"backend:response",source:"backend"}),f}var Ee,Z,Ie,Ot,Bt,Et,de=P(()=>{"use strict";Ee=require("@smart-cloud/gatey-core"),Z=require("@smart-cloud/wpsuite-core");$();ue();Ie=new Map;Ot={prompt:["text","audio","audioUrl","systemPrompt","context","maxTokens","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","topK","temperature","userSelectedCategories","userSelectedSubcategories","userSelectedTags"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};Bt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Et={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function Ut(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a==="."||a==="!"||a==="?")&&(s===" "||s===`
2
- `||s==="\r"||o===e.length-1)){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function zt(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a===","||a===";"||a===":")&&(s===" "||s===`
3
- `||s==="\r")){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function Y(e,t){let n=[],r=0;for(;r<e.length;){let o=Math.min(r+t,e.length);if(o<e.length){let s=e.lastIndexOf(`
1
+ "use strict";var ge=Object.defineProperty;var Pt=Object.getOwnPropertyDescriptor;var xt=Object.getOwnPropertyNames;var St=Object.prototype.hasOwnProperty;var S=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var Z=(e,t)=>{for(var n in t)ge(e,n,{get:t[n],enumerable:!0})},Tt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of xt(t))!St.call(e,a)&&a!==n&&ge(e,a,{get:()=>t[a],enumerable:!(r=Pt(t,a))||r.enumerable});return e};var Lt=e=>Tt(ge({},"__esModule",{value:!0}),e);function O(){return globalThis.WpSuite?.plugins?.aiKit}async function me(e=8e3){let t=O();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let a=()=>i(n),o=()=>i(()=>r(new Error("AiKit failed"))),i=u=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),s&&clearTimeout(s),u()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let s=e?window.setTimeout(()=>i(()=>r(new Error("AiKit timeout"))),e):0})}}async function Le(e=1e4){await me(e);let n=O()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var ee=S(()=>{"use strict"});var W,T,fe,be,te,Ot,Rt,Bt,It,Et,Oe,j,Re,Be,Ie,ne=S(()=>{"use strict";W=require("@smart-cloud/wpsuite-core"),T=require("@wordpress/data"),fe=require("aws-amplify/utils");ee();typeof WpSuite<"u"?be=WpSuite.siteSettings:be={};te=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},Ot=async()=>{let e=O();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+be.lastUpdate).then(n=>n.ok?n.text():null).then(n=>n?JSON.parse(n):null).catch(()=>null)),t??null},Rt=async()=>{let e=te(await(0,W.getConfig)("aiKit")),t=await Ot();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Bt={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?fe.I18n.setLanguage(""):fe.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},It={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={},Oe=e=>{let t=(0,T.dispatch)(e);return delete t.setConfig,t},j=e=>(0,T.select)(e),Re=async e=>{(0,W.getWpSuite)().siteSettings.lastUpdate=Date.now();let t=await(0,W.getConfig)("aiKit"),n=te(t);(0,T.dispatch)(e).setConfig(n)},Be=async()=>{let e=await Rt(),t=(0,T.createReduxStore)("smartcloud/ai-kit",{reducer(n=e,r){switch(r.type){case"SET_LANGUAGE":return{...n,language:r.language};case"SET_DIRECTION":return{...n,direction:r.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...n,showChatbotPreview:r.showChatbotPreview};case"SET_CONFIG":return{...n,config:r.config}}return n},actions:Bt,selectors:It,resolvers:Et});return(0,T.register)(t),t},Ie=(e,t,n)=>{let r;function a(){let i=j(e).getState(),s=t(i);if(s!==r){let u=r;r=s,n(r,u)}}let o=(0,T.subscribe)(a,e);return a(),o}});var h,Ee=S(()=>{"use strict";h="smartcloud-ai-kit"});var v,Kt,Mt,Ft,Ke=S(()=>{"use strict";v=require("react/jsx-runtime"),Kt=e=>(0,v.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,v.jsx)("path",{d:"M19 27H33"}),(0,v.jsx)("path",{d:"M19 33H33"}),(0,v.jsx)("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),(0,v.jsx)("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),(0,v.jsx)("path",{d:"M16 10V40H36V22"}),(0,v.jsx)("path",{d:"M16 10H22"}),(0,v.jsx)("path",{d:"M22 10V23H36"}),(0,v.jsx)("path",{d:"M22 10L36 22"})]}),Mt=e=>(0,v.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,v.jsx)("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),(0,v.jsx)("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),(0,v.jsx)("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),(0,v.jsx)("path",{d:"M16 24H32"})]}),Ft=e=>(0,v.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,v.jsx)("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),(0,v.jsx)("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),(0,v.jsx)("path",{d:"M42 42l-12 -12"}),(0,v.jsx)("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),(0,v.jsx)("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var L,ye=S(()=>{"use strict";L=class extends Error{constructor(n,r,a){super(n);this.decision=r;this.status=a;this.name="AiBackendError"}decision;status}});function A(e,t,n){throw new re(e,t,n)}function H(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&A("invalid_type",t,`${t} must be an object.`),e}function G(e,t,n){let r=new Set(t),a=Object.keys(e).find(o=>!r.has(o));a&&A("unknown_field",`${n}.${a}`,`${n}.${a} is not part of contract v1.`)}function P(e,t,n){(typeof e!="string"||e.trim()==="")&&A("invalid_string",t,`${t} must be a non-empty string.`);let r=e.trim();return n&&!n.test(r)&&A("invalid_format",t,`${t} has an invalid format.`),r}function q(e,t){return P(e,t,/^(?:0|[1-9][0-9]*)$/)}function Me(e,t){let n=P(e,t);return(!/^\d{4}-\d{2}-\d{2}T/.test(n)||!Number.isFinite(Date.parse(n)))&&A("invalid_timestamp",t,`${t} must be an ISO-8601 timestamp.`),n}function Fe(e,t){let n=P(e,t),r;try{r=new URL(n)}catch{A("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`)}return r.protocol!=="http:"&&r.protocol!=="https:"&&A("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`),n}function De(e){let t=H(e,"source");return G(t,["producer","siteId","blogId","postType","postId"],"source"),t.producer!=="wordpress"&&A("unsupported_producer","source.producer","Only wordpress is supported in v1."),{producer:"wordpress",siteId:P(t.siteId,"source.siteId",/^[A-Za-z0-9._:-]+$/),blogId:q(t.blogId,"source.blogId"),postType:P(t.postType,"source.postType",/^[a-z0-9_-]+$/),postId:q(t.postId,"source.postId")}}function Dt(e,t){let n=`document.metadata[${t}]`,r=H(e,n);return G(r,["namespace","slug","label"],n),{namespace:P(r.namespace,`${n}.namespace`,/^[a-z0-9_.:-]+$/),slug:P(r.slug,`${n}.slug`,/^[a-z0-9][a-z0-9._-]*$/),label:P(r.label,`${n}.label`)}}function Ut(e){let t=H(e,"document");return G(t,["profile","canonicalUrl","title","excerpt","content","contentType","contentSha256","modifiedGmt","metadata"],"document"),t.contentType!=="text/markdown"&&A("unsupported_content_type","document.contentType","Contract v1 supports text/markdown documents only."),Array.isArray(t.metadata)||A("invalid_type","document.metadata","document.metadata must be an array."),{profile:P(t.profile,"document.profile",/^[a-z0-9][a-z0-9._-]*$/),canonicalUrl:Fe(t.canonicalUrl,"document.canonicalUrl"),title:P(t.title,"document.title"),excerpt:typeof t.excerpt=="string"?t.excerpt:"",content:P(t.content,"document.content"),contentType:"text/markdown",contentSha256:P(t.contentSha256,"document.contentSha256",/^[a-f0-9]{64}$/),modifiedGmt:Me(t.modifiedGmt,"document.modifiedGmt"),metadata:t.metadata.map(Dt)}}function _t(e,t){let n=H(e,"projection");G(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==1&&A("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=De(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&A("source_boundary_mismatch","projection.source","Projection source does not match the authenticated producer boundary.");let a={schemaVersion:1,source:r,sourceVersion:q(n.sourceVersion,"projection.sourceVersion"),correlationId:P(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:Me(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&A("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:Ut(n.document)}):n.operation==="delete"?(n.document!==null&&A("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:Fe(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):A("invalid_operation","projection.operation","Unsupported desired operation.")}function Nt(e){let t=H(e,"policy");G(t,["schemaVersion","postType","enabled","autoEnableSource","reviewPolicy","onPublish","onPublishedUpdate","onUnpublish","metadataRefresh","includeTaxonomies","documentProfile"],"policy"),t.schemaVersion!==1&&A("unsupported_schema","policy.schemaVersion","Unsupported policy version."),typeof t.enabled!="boolean"&&A("invalid_type","policy.enabled","policy.enabled must be boolean."),t.autoEnableSource!=="administrator"&&t.autoEnableSource!=="migration"&&t.autoEnableSource!=="system"&&A("invalid_policy","policy.autoEnableSource","Invalid auto-enable source."),t.reviewPolicy!=="wordpress-publish-is-approval"&&t.reviewPolicy!=="manual-kb-review"&&t.reviewPolicy!=="disabled"&&A("invalid_policy","policy.reviewPolicy","Invalid review policy."),(t.onPublish!=="upsert"||t.onPublishedUpdate!=="upsert"||t.onUnpublish!=="delete"||t.metadataRefresh!=="reconcile")&&A("invalid_policy","policy","Unsupported policy action in contract v1."),Array.isArray(t.includeTaxonomies)||A("invalid_type","policy.includeTaxonomies","policy.includeTaxonomies must be an array.");let n=[...new Set(t.includeTaxonomies.map((r,a)=>P(r,`policy.includeTaxonomies[${a}]`,/^[a-z0-9_-]+$/)))].sort();return{schemaVersion:1,postType:P(t.postType,"policy.postType",/^[a-z0-9_-]+$/),enabled:t.enabled,autoEnableSource:t.autoEnableSource,reviewPolicy:t.reviewPolicy,onPublish:"upsert",onPublishedUpdate:"upsert",onUnpublish:"delete",metadataRefresh:"reconcile",includeTaxonomies:n,documentProfile:P(t.documentProfile,"policy.documentProfile",/^[a-z0-9][a-z0-9._-]*$/)}}function zt(e,t){let n=BigInt(q(e,"candidateSourceVersion")),r=BigInt(q(t,"acceptedSourceVersion"));return n<r?"older":n>r?"newer":"same"}function Vt(e){let t=De(e);return[t.producer,t.siteId,t.blogId,t.postType,t.postId].map(encodeURIComponent).join(":")}var Ar,re,Ue=S(()=>{"use strict";Ar=1,re=class extends Error{constructor(n,r,a){super(a);this.code=n;this.field=r;this.name="KnowledgeSyncContractError"}code;field}});function we(e,t){return`ai.${t}.${e}`}function ke(e,t){if(t.startsWith("/kb/"))return e==="admin"?"knowledge.admin":"knowledge.query.frontend"}function jt(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.schemaVersion===1&&t.product==="smartcloud-ai-kit-backend"&&typeof t.release=="string"&&!!t.capabilities&&typeof t.capabilities=="object"&&!Array.isArray(t.capabilities)}async function qt(e){if(e.transport==="fetch"){if(!e.baseUrl)throw new Error("backendBaseUrl is missing");let r=await fetch(`${e.baseUrl.replace(/\/+$/,"")}${_e}`,{method:"GET",credentials:"omit"});if(!r.ok)throw new Error(`HTTP ${r.status}`);return r.json()}if(!e.apiName)throw new Error("backendApiName is missing");let t=(0,ze.getGateyPlugin)()?.cognito?.get;if(!t)throw new Error("Gatey GET transport is unavailable");return(await t({apiName:e.apiName,path:_e,options:{retryStrategy:{strategy:"no-retry"}}}).response).body.json()}async function D(e){let t=`${e.transport}:${e.apiName??e.baseUrl??""}`,n=Ne.get(t);if(n&&n.expiresAt>Date.now())return n.value;let r;try{let a=await qt(e);r=jt(a)?{status:"verified",manifest:a}:{status:"legacy",reason:"Backend returned an unsupported capability manifest."}}catch(a){r={status:"legacy",reason:a instanceof Error?`Capability manifest is unavailable: ${a.message}`:"Capability manifest is unavailable."}}return Ne.set(t,{expiresAt:Date.now()+$t,value:r}),r}function U(e,t,n=1){if(e.status==="legacy")return n<=1&&Wt.has(t);let r=e.manifest?.capabilities[t];return typeof r=="number"&&r>=n}var ze,_e,$t,Wt,Ne,ae=S(()=>{"use strict";ze=require("@smart-cloud/gatey-core"),_e="/meta/capabilities",$t=300*1e3,Wt=new Set(["ai.prompt.admin","ai.summarizer.admin","ai.writer.admin","ai.rewriter.admin","ai.translator.admin","ai.proofreader.admin","ai.language-detector.admin","ai.prompt.frontend","ai.summarizer.frontend","ai.writer.frontend","ai.rewriter.frontend","ai.translator.frontend","ai.proofreader.frontend","ai.language-detector.frontend","knowledge.admin","knowledge.query.frontend"]),Ne=new Map});var Ye={};Z(Ye,{MIN_CHROME_VERSION:()=>qe,checkOnDeviceAvailability:()=>Ge,decideCapability:()=>ie,isOnDeviceLanguageSupported:()=>E,resolveBackend:()=>_});async function We(){let t=await(0,Ve.getWpSuite)()?.plugins?.aiKit?.features.store;return j(t).getConfig()??{}}function je(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function Ht(e){if(e.mode)return e.mode;let{transport:t}=je(e);return t?"backend-fallback":"local-only"}async function _(e){let t=await We(),{transport:n,backendApiName:r,backendBaseUrl:a}=je(t);if(!n)return{available:!1,reason:"No backend configured"};if(n==="fetch"){if(!a)return{available:!1,reason:"backendBaseUrl is missing"};let s=await D({transport:n,baseUrl:a});return e&&!U(s,e)?{available:!1,transport:n,baseUrl:a,compatibility:s,reason:`Backend does not support ${e}.`}:{available:!0,transport:n,baseUrl:a,compatibility:s,reason:"Custom fetch backend"}}if(!r)return{available:!1,reason:"backendApiName is missing"};let o=(0,$e.getGateyPlugin)();if(!o?.availability||await o.availability()!=="available")return{available:!1,reason:"Gatey is not available"};let i=await D({transport:n,apiName:r});return e&&!U(i,e)?{available:!1,transport:n,apiName:r,compatibility:i,reason:`Backend does not support ${e}.`}:{available:!0,transport:n,apiName:r,compatibility:i,reason:"Gatey backend"}}function I(e){return typeof globalThis[e]<"u"}function He(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function oe(e,t){return e?.find(n=>n.brand===t)?.version}async function Yt(){let e=navigator?.userAgentData;if(e){try{let n=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(n)&&n.length>0)return n}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function Qt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?He(t[1]):void 0}function Xt(){return!!navigator?.brave}async function Jt(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",n=await Yt(),r=oe(n,"Microsoft Edge")??oe(n,"Microsoft Edge WebView2"),a=oe(n,"Google Chrome")??oe(n,"Chromium"),o=!!r||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),i=/\bOPR\//i.test(t),s=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),d=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=Xt()||/\bBrave\//i.test(t);if(o||i||s||u||c||d||l)return{allowed:!1,reason:o?"edge":l?"brave":c?"firefox":d?"safari":i?"opera":s?"vivaldi":u?"samsung":"unsupported-browser"};let m=He(a)??Qt(t),g=qe[e];return g?m?m<g?{allowed:!1,reason:`chrome-too-old-${m}-lt-${g}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function Ge(e,t){try{let n=await Jt(e),r=`browser-gate:${n.reason}${n.chromeMajor?` (chrome ${n.chromeMajor})`:""}`;if(!n.allowed)return{available:!1,status:"unavailable",reason:r};let a=o=>o==="unavailable"?Gt.has(e)?"requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics":"check hardware requirements or see AI-Kit Diagnostics":r;switch(e){case"writer":{if(!I("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Writer.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"rewriter":{if(!I("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Rewriter.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"summarizer":{if(!I("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Summarizer.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"proofreader":{if(!I("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Proofreader.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"language-detector":{if(!I("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await LanguageDetector.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"translator":{if(!I("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:r};let o=t;if(!o?.sourceLanguage||!o?.targetLanguage)return{available:!1,status:"error",reason:r,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let i=await Translator.availability({...o,sourceLanguage:o.sourceLanguage==="auto"?"en":o.sourceLanguage,targetLanguage:o.sourceLanguage==="auto"||o.sourceLanguage===o.targetLanguage?"hu":o.targetLanguage});return{available:i!=="unavailable",status:i,reason:a(i)}}case"prompt":{if(!I("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await LanguageModel.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}default:return{available:!1,status:"unknown-feature",reason:r}}}catch(n){return{available:!1,status:"error",reason:"exception in availability()",error:n}}}function E(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function ie(e,t,n,r="admin"){let a=await We(),o=n||Ht(a),i=await _(we(r,e)),s=await Ge(e,t),u=s.available,c=i.available,d={feature:e,mode:o,onDeviceAvailable:u,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:c,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason,backendCompatibility:i.compatibility};return o==="local-only"?u?{...d,source:"on-device",reason:`local-only, on-device available (${s.reason??s.status})`}:{...d,source:"none",reason:`local-only, but on-device unavailable (${s.reason??s.status})`}:o==="backend-only"?c?{...d,source:"backend",reason:`backend-only, backend available (${i.reason??"n/a"})`}:{...d,source:"none",reason:`backend-only, but backend unavailable (${i.reason??"n/a"})`}:u?{...d,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:c?{...d,source:"backend",reason:`backend-fallback, using backend (${i.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...d,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${i.reason??"n/a"})`}}var Ve,$e,qe,Gt,he=S(()=>{"use strict";Ve=require("@smart-cloud/wpsuite-core"),$e=require("@smart-cloud/gatey-core");ne();ae();qe={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},Gt=new Set(["writer","rewriter","proofreader","prompt"])});var nt={};Z(nt,{dispatchCustomBackend:()=>ln,dispatchFeatureBackend:()=>z,withRecaptchaHeaders:()=>Y});function Zt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function en(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function tn(e,t){let n=en(t);if(n<=0)return!1;let r=Xe.get(e);return r?Date.now()-r<n:!1}function Ce(e,t){let n=Zt(t);n&&Xe.set(e,n)}function Je(e,t){if(e!=="frontend"||!et(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Ze(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let n=Object.keys(e).find(a=>a.toLowerCase()===t.toLowerCase());if(!n)return;let r=e[n];return typeof r=="string"&&r?r:void 0}async function nn(e,t){if(e!=="frontend")return;let n=(0,se.getWpSuite)()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&tn(t.cacheKey,O()?.settings||{}))return;let{execute:r}=await(0,se.getRecaptcha)(n?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let o=await r(n.reCaptchaPublicKey,{action:"generate"});return typeof o=="string"&&o?o:void 0}catch{return}}async function Y(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await nn(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function N(e,t){try{e?.onStatus?.(t)}catch{}}function et(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function an(e,t){if(!et(t))return t;let n=rn[e];if(!n)return t;let r={};for(let a of n)a in t&&(r[a]=t[a]);return r}function un(e,t){return(e==="admin"?on:sn)[t]}function cn(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function z(e,t,n,r,a={}){let o=un(t,n);if(!o)throw new L(`No backend path configured for "${n}" (${t}).`,e);let i=an(n,r);return tt(e,t,n,o,"POST",i,a)}async function ln(e,t,n,r,a,o={}){let i=ke(t,n);if(i){let u=await D({transport:e.backendTransport??"gatey",apiName:e.backendApiName,baseUrl:e.backendBaseUrl});if(!U(u,i))throw new L(`Backend does not support ${i}.`,{...e,backendCompatibility:u})}let s=cn(t,n);return tt(e,t,"prompt",s,r,a,o)}async function tt(e,t,n,r,a,o,i={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new L("backendTransport=fetch but backendBaseUrl is missing.",e);return dn(e.backendBaseUrl,r,a,o,i,e,n,t)}if(!e.backendApiName)throw new L("backendTransport=gatey but backendApiName is missing.",e);return pn(e.backendApiName,r,a,o,i,e,n,t)}async function dn(e,t,n,r,a,o,i,s){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...a.headers??{}},d=i==="prompt"?Je(s,r):void 0,l=await Y(s,c,{cacheKey:d}),m=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([b,k])=>[b,String(k)])).toString():"";N(a,{feature:i,context:s,step:"backend:request",source:"backend"}),N(a,{feature:i,context:s,step:"backend:waiting",source:"backend"});let g=await fetch(u+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:a.signal,credentials:"omit"});if(N(a,{feature:i,context:s,step:"backend:response",source:"backend"}),!g.ok){let b=`HTTP ${g.status}`;try{let k=await g.text();k&&(b=`${b}: ${k.substring(0,400)}`)}catch{}throw new L(`Fetch backend call failed: ${b}`,o,g.status)}let y=g.headers.get("content-type")||"",f=Ze(g.headers,"x-recaptcha-verified-at");if(y.includes("application/json")){let b=await g.json(),k=(b&&typeof b.sessionId=="string"&&b.sessionId.trim()?b.sessionId.trim():void 0)??d;return f&&k&&Ce(k,f),b}return f&&d&&Ce(d,f),await g.text()}async function pn(e,t,n,r,a,o,i,s){let u=(0,Qe.getGateyPlugin)(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new L(`Unsupported HTTP method "${n}" for Gatey backend.`,o)}if(!c)throw new L(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,o);let d=i==="prompt"?Je(s,r):void 0,l=await Y(s,{...a.headers??{}},{cacheKey:d});N(a,{feature:i,context:s,step:"backend:request",source:"backend"}),N(a,{feature:i,context:s,step:"backend:waiting",source:"backend"});let m=c({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response,y=Ze(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??d;return y&&typeof b=="string"&&b.trim()&&Ce(b.trim(),y),N(a,{feature:i,context:s,step:"backend:response",source:"backend"}),f}var Qe,se,Xe,rn,on,sn,ve=S(()=>{"use strict";Qe=require("@smart-cloud/gatey-core"),se=require("@smart-cloud/wpsuite-core");ee();ye();ae();Xe=new Map;rn={prompt:["text","audio","audioUrl","systemPrompt","context","maxTokens","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","topK","temperature","userSelectedCategories","userSelectedSubcategories","userSelectedTags"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};on={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},sn={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function gn(e,t,n){let r=-1;for(let a=n-1;a>=t;a--){let o=e[a],i=a+1<e.length?e[a+1]:"";if((o==="."||o==="!"||o==="?")&&(i===" "||i===`
2
+ `||i==="\r"||a===e.length-1)){r=a+1;break}}return r>t+(n-t)*.5?r:-1}function mn(e,t,n){let r=-1;for(let a=n-1;a>=t;a--){let o=e[a],i=a+1<e.length?e[a+1]:"";if((o===","||o===";"||o===":")&&(i===" "||i===`
3
+ `||i==="\r")){r=a+1;break}}return r>t+(n-t)*.5?r:-1}function ue(e,t){let n=[],r=0;for(;r<e.length;){let a=Math.min(r+t,e.length);if(a<e.length){let i=e.lastIndexOf(`
4
4
 
5
- `,o);if(s>r+t*.5)o=s+2;else{let i=Ut(e,r,o);if(i>0)o=i;else{let u=zt(e,r,o);if(u>0)o=u;else{let c=e.lastIndexOf(" ",o);c>r+t*.5&&(o=c+1)}}}}let a=e.substring(r,o).trim();a.length>0&&n.push({text:a,start:r,end:o}),r=o}return n}var ze=P(()=>{"use strict"});var nt={};V(nt,{detectLanguage:()=>rn,getPromptOptions:()=>tt,getProofreadOptions:()=>Ve,getRewriteOptions:()=>je,getSummarizeOptions:()=>$e,getTranslateOptions:()=>Ge,getWriteOptions:()=>He,prompt:()=>gn,proofread:()=>tn,rewrite:()=>en,sendChatMessage:()=>pn,sendFeedbackMessage:()=>fn,sendSearchMessage:()=>mn,summarize:()=>nn,translate:()=>H,write:()=>Yt});function pe(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(pe).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+pe(t[r])).join(",")+"}"}function Wt(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function _t(e,t){return`${e}:${Wt(pe(t))}`}function ge(){let e=new Map;for(let n of A.values()){let r=e.get(n.kind)??[];r.push(n),e.set(n.kind,r)}for(let[n,r]of e.entries())if(!(r.length<=_e)){r.sort((o,a)=>o.refCount-a.refCount||o.lastUsed-a.lastUsed||o.key.localeCompare(a.key));for(let o of r){if(e.get(n).length<=_e)break;if(!(o.refCount>0)){try{o.destroy()}catch{}A.delete(o.key),e.set(n,(e.get(n)??[]).filter(a=>a.key!==o.key))}}}if(A.size<=We)return;let t=Array.from(A.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(A.size<=We)break;if(!(n.refCount>0)){try{n.destroy()}catch{}A.delete(n.key)}}}async function E(e,t,n,r){let o=_t(e,t),a=A.get(o);if(a)return a.refCount++,a.lastUsed=Date.now(),A.delete(o),A.set(o,a),{model:a.model,fromCache:!0,release:()=>{let u=A.get(o);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),ge())}};let s=q.get(o);if(s)return s;let i=(async()=>{let u=await n(),c={kind:e,key:o,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>r(u)};return A.set(o,c),q.delete(o),ge(),{model:u,fromCache:!1,release:()=>{let p=A.get(o);p&&(p.refCount=Math.max(0,p.refCount-1),p.lastUsed=Date.now(),ge())}}})().catch(u=>{throw q.delete(o),u});return q.set(o,i),i}function L(){return((0,fe.getWpSuite)()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function d(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function U(){return(0,fe.getWpSuite)()?.plugins?.aiKit?.settings?.sharedContext??void 0}function O(e){return e?.context??"admin"}function I(e,t=Nt){let n=new AbortController,r=e?.signal,o=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,a=typeof o=="number"?o:t,s,i=!1,u=()=>{if(n.signal.aborted)return;let c=typeof r?.reason<"u"?r?.reason:void 0;n.abort(c??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?u():r.addEventListener("abort",u)),a&&a>0&&(s=setTimeout(()=>{n.signal.aborted||(i=!0,n.abort(new me(a)))},a)),{signal:n.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),r&&r.removeEventListener("abort",u)}}}function te(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function qt(e,t,n,r){let o=te(e),a=await Ye(e.images,n,t,r);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
6
- `),systemPrompt:e.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
7
- `),images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!1,responseConstraint:e.responseConstraint,...o}}async function Ht(e,t,n,r){let o=te(e),a=await Ye(e.images,n,t,r),s=await et(e.audio,n,t,r);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,audio:s?.audio,audioUrl:s?.audioUrl,context:e.sessionId?void 0:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!0,...o}}async function jt(e,t,n,r){let o=te(e),a=await et(e.audio,n,t,r);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:a?.audio,audioUrl:a?.audioUrl,maxTokens:e.maxTokens,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...o}}async function Vt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function $t(e){let t=te(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function Gt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function Qt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Xt(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Jt(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Zt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function M(e,t,n,r,o,a,s,i){d(r,e,i,{step:"decide",message:"Deciding capability",silent:n});let u=await J(r,o,t);d(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:n});let c=!1;if(u.source==="on-device")try{let l=await a();return d(r,e,i,{step:"done",source:"on-device",silent:n}),l}catch(l){console.error(`Error in on-device ${r}:`,l),d(r,e,i,{step:"error",source:"on-device",message:l.message,silent:n}),i?.signal?.throwIfAborted(),l instanceof DOMException&&l.name==="QuotaExceededError"&&(c=!0)}if(u.mode!=="local-only"&&u.backendAvailable){d(r,e,i,{step:"backend:request",source:"backend",silent:n});let l=typeof s=="function"?await s(u):s,m=await D(u,e,r,l,i);return d(r,e,i,{step:"done",source:"backend",silent:n}),m}let p=c?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":u.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${p}`)}function an(e){let t=Array.isArray(e.images)&&e.images.length>0,n=e.images??[],r=t?n.map(a=>({type:"image",value:a})):[],o;if(typeof e.messages=="string")o=t?[{role:"user",content:[{type:"text",value:e.messages},...r]}]:e.messages;else{let a=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=a.length-1;i>=0;i--)if(a[i].role==="user"){s=i;break}if(s===-1)a.push({role:"user",content:[{type:"text",value:""},...r]});else{let i=String(a[s].content??"");a[s]={...a[s],content:[{type:"text",value:i},...r]}}}o=a}return o}function on(e){return typeof Blob<"u"&&e instanceof Blob}function sn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function un(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function cn(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":(t.includes("webm"),"webm")}function ln(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":"webm"}async function dn(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function Xe(e){let t=await dn(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function Je(e,t,n,r,o,a){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...a?.headers??{}},u=await N(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("Backend base URL not available for signed URL request");let g=new URLSearchParams({fileName:n,contentType:r,contentLength:String(o)}).toString(),y=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${g}`,f=await fetch(y,{method:"GET",headers:u,signal:a?.signal,credentials:"omit"});if(!f.ok){let h=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${h?": "+h.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=(0,Ne.getGateyPlugin)(),p={fileName:n,contentType:r,contentLength:o};if(c?.cognito?.get){let g=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(p).reduce((f,b)=>(f[b]=String(p[b]),f),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(f=>f.body.json());if(!y?.uploadUrl||!y?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:y.uploadUrl,key:y.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:p,headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(g=>g.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function Ze(e,t,n,r){let o=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.signal});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${o.status}${a?": "+a.substring(0,200):""}`)}}async function Ye(e,t,n,r){if(!e||e.length===0)return;let o=[];for(let c of e){if(!on(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");o.push(c)}let a=o.reduce((c,p)=>c+(p.size||0),0);if(Math.ceil(a*1.37+2048*o.length)<=Qe){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let p of o)c.push({format:un(p.type),data:await Xe(p)});return{images:c}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<o.length;c++){let p=o[c],l=p.type||"application/octet-stream",m=p.name||`image_${c}.${sn(l)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await Je(t,n,m,l,p.size||0,r);d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Ze(g,p,l,r),u.push(y)}return{imageUrls:u}}async function et(e,t,n,r){if(!e)return;let o=e.size||0;if(Math.ceil(o*1.37+2048)<=Qe){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=ln(e.type||"audio/webm"),m=await Xe(e);return{audio:{format:l,data:m}}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||`audio.${cn(i)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:p}=await Je(t,n,u,i,e.size||0,r);return d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await Ze(c,e,i,r),{audioUrl:p}}var Ne,fe,ee,We,_e,A,q,Nt,qe,me,He,Yt,je,en,Ve,tn,$e,nn,rn,Ge,H,Qe,tt,gn,pn,mn,fn,rt=P(()=>{"use strict";Ne=require("@smart-cloud/gatey-core"),fe=require("@smart-cloud/wpsuite-core");de();ce();ee=require("aws-amplify/utils");at();ze();We=8,_e=2,A=new Map,q=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of A.values())try{e.destroy()}catch{}A.clear(),q.clear()});Nt=45e3,qe=5e3,me=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};He=e=>{let t=e.outputLanguage?e.outputLanguage:L(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Yt=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:L(),a=o,s=!1;B(o)||(s=!0,o="en");let i=He({...e,outputLanguage:o});return M(n,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=I(t);try{let{model:c,release:p}=await E("writer",{core:i,sharedContext:r},()=>Writer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("writer",n,t,{step:"on-device:ready",source:"on-device"});try{d("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await c.measureInputUsage(e.prompt,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=Y(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let z=ee.I18n.get("Writing part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));d("writer",n,t,{step:"on-device:run",source:"on-device",message:z});let re=await c.write(f[h].text,{context:e.context,signal:u.signal});b.push(re)}l=b.join(`
5
+ `,a);if(i>r+t*.5)a=i+2;else{let s=gn(e,r,a);if(s>0)a=s;else{let u=mn(e,r,a);if(u>0)a=u;else{let c=e.lastIndexOf(" ",a);c>r+t*.5&&(a=c+1)}}}}let o=e.substring(r,a).trim();o.length>0&&n.push({text:o,start:r,end:a}),r=a}return n}var rt=S(()=>{"use strict"});var ht={};Z(ht,{detectLanguage:()=>In,getPromptOptions:()=>kt,getProofreadOptions:()=>lt,getRewriteOptions:()=>ct,getSummarizeOptions:()=>dt,getTranslateOptions:()=>pt,getWriteOptions:()=>ut,prompt:()=>Nn,proofread:()=>Rn,rewrite:()=>On,sendChatMessage:()=>zn,sendFeedbackMessage:()=>$n,sendSearchMessage:()=>Vn,summarize:()=>Bn,translate:()=>X,write:()=>Ln});function Pe(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(Pe).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+Pe(t[r])).join(",")+"}"}function fn(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function bn(e,t){return`${e}:${fn(Pe(t))}`}function Ae(){let e=new Map;for(let n of x.values()){let r=e.get(n.kind)??[];r.push(n),e.set(n.kind,r)}for(let[n,r]of e.entries())if(!(r.length<=ot)){r.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of r){if(e.get(n).length<=ot)break;if(!(a.refCount>0)){try{a.destroy()}catch{}x.delete(a.key),e.set(n,(e.get(n)??[]).filter(o=>o.key!==a.key))}}}if(x.size<=at)return;let t=Array.from(x.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(x.size<=at)break;if(!(n.refCount>0)){try{n.destroy()}catch{}x.delete(n.key)}}}async function K(e,t,n,r){let a=bn(e,t),o=x.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),x.delete(a),x.set(a,o),{model:o.model,fromCache:!0,release:()=>{let u=x.get(a);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),Ae())}};let i=Q.get(a);if(i)return i;let s=(async()=>{let u=await n(),c={kind:e,key:a,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>r(u)};return x.set(a,c),Q.delete(a),Ae(),{model:u,fromCache:!1,release:()=>{let d=x.get(a);d&&(d.refCount=Math.max(0,d.refCount-1),d.lastUsed=Date.now(),Ae())}}})().catch(u=>{throw Q.delete(a),u});return Q.set(a,s),s}function R(){return((0,Se.getWpSuite)()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function p(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function V(){return(0,Se.getWpSuite)()?.plugins?.aiKit?.settings?.sharedContext??void 0}function B(e){return e?.context??"admin"}function M(e,t=yn){let n=new AbortController,r=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,i,s=!1,u=()=>{if(n.signal.aborted)return;let c=typeof r?.reason<"u"?r?.reason:void 0;n.abort(c??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?u():r.addEventListener("abort",u)),o&&o>0&&(i=setTimeout(()=>{n.signal.aborted||(s=!0,n.abort(new xe(o)))},o)),{signal:n.signal,timedOut:()=>s,dispose:()=>{i&&(clearTimeout(i),i=void 0),r&&r.removeEventListener("abort",u)}}}function le(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 wn(e,t,n,r){let a=le(e),o=await yt(e.images,n,t,r);return{text:e.messages.filter(i=>i.role==="user").map(i=>i.content).join(`
6
+ `),systemPrompt:e.messages.filter(i=>i.role==="system").map(i=>i.content).join(`
7
+ `),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function kn(e,t,n,r){let a=le(e),o=await yt(e.images,n,t,r),i=await wt(e.audio,n,t,r);return{sessionId:e.sessionId,text:e.message,images:o?.images,imageUrls:o?.imageUrls,audio:i?.audio,audioUrl:i?.audioUrl,context:e.sessionId?void 0:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!0,...a}}async function hn(e,t,n,r){let a=le(e),o=await wt(e.audio,n,t,r);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:o?.audio,audioUrl:o?.audioUrl,maxTokens:e.maxTokens,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...a}}async function Cn(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function vn(e){let t=le(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 An(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 Pn(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 xn(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Sn(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Tn(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function F(e,t,n,r,a,o,i,s){p(r,e,s,{step:"decide",message:"Deciding capability",silent:n});let u=await ie(r,a,t,e);p(r,e,s,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:n});let c=!1;if(u.source==="on-device")try{let l=await o();return p(r,e,s,{step:"done",source:"on-device",silent:n}),l}catch(l){console.error(`Error in on-device ${r}:`,l),p(r,e,s,{step:"error",source:"on-device",message:l.message,silent:n}),s?.signal?.throwIfAborted(),l instanceof DOMException&&l.name==="QuotaExceededError"&&(c=!0)}if(u.mode!=="local-only"&&u.backendAvailable){p(r,e,s,{step:"backend:request",source:"backend",silent:n});let l=typeof i=="function"?await i(u):i,m=await z(u,e,r,l,s);return p(r,e,s,{step:"done",source:"backend",silent:n}),m}let d=c?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":u.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${d}`)}function En(e){let t=Array.isArray(e.images)&&e.images.length>0,n=e.images??[],r=t?n.map(o=>({type:"image",value:o})):[],a;if(typeof e.messages=="string")a=t?[{role:"user",content:[{type:"text",value:e.messages},...r]}]:e.messages;else{let o=e.messages.filter(i=>i.role!=="system").map(i=>({role:i.role==="assistant"?"assistant":"user",content:i.content}));if(t){let i=-1;for(let s=o.length-1;s>=0;s--)if(o[s].role==="user"){i=s;break}if(i===-1)o.push({role:"user",content:[{type:"text",value:""},...r]});else{let s=String(o[i].content??"");o[i]={...o[i],content:[{type:"text",value:s},...r]}}}a=o}return a}function Kn(e){return typeof Blob<"u"&&e instanceof Blob}function Mn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Fn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function Dn(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":(t.includes("webm"),"webm")}function Un(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":"webm"}async function _n(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function mt(e){let t=await _n(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function ft(e,t,n,r,a,o){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");let i=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",s={...o?.headers??{}},u=await Y(t,s);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("Backend base URL not available for signed URL request");let g=new URLSearchParams({fileName:n,contentType:r,contentLength:String(a)}).toString(),y=`${e.backendBaseUrl.replace(/\/+$/,"")}${i}?${g}`,f=await fetch(y,{method:"GET",headers:u,signal:o?.signal,credentials:"omit"});if(!f.ok){let k=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${k?": "+k.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=(0,it.getGateyPlugin)(),d={fileName:n,contentType:r,contentLength:a};if(c?.cognito?.get){let g=c.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((f,b)=>(f[b]=String(d[b]),f),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(f=>f.body.json());if(!y?.uploadUrl||!y?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:y.uploadUrl,key:y.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(g=>g.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function bt(e,t,n,r){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.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 yt(e,t,n,r){if(!e||e.length===0)return;let a=[];for(let c of e){if(!Kn(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(c)}let o=a.reduce((c,d)=>c+(d.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=gt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let d of a)c.push({format:Fn(d.type),data:await mt(d)});return{images:c}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<a.length;c++){let d=a[c],l=d.type||"application/octet-stream",m=d.name||`image_${c}.${Mn(l)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await ft(t,n,m,l,d.size||0,r);p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await bt(g,d,l,r),u.push(y)}return{imageUrls:u}}async function wt(e,t,n,r){if(!e)return;let a=e.size||0;if(Math.ceil(a*1.37+2048)<=gt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=Un(e.type||"audio/webm"),m=await mt(e);return{audio:{format:l,data:m}}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let s=e.type||"audio/webm",u=e.name||`audio.${Dn(s)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:d}=await ft(t,n,u,s,e.size||0,r);return p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await bt(c,e,s,r),{audioUrl:d}}var it,Se,ce,at,ot,x,Q,yn,st,xe,ut,Ln,ct,On,lt,Rn,dt,Bn,In,pt,X,gt,kt,Nn,zn,Vn,$n,Ct=S(()=>{"use strict";it=require("@smart-cloud/gatey-core"),Se=require("@smart-cloud/wpsuite-core");ve();he();ce=require("aws-amplify/utils");vt();rt();at=8,ot=2,x=new Map,Q=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of x.values())try{e.destroy()}catch{}x.clear(),Q.clear()});yn=45e3,st=5e3,xe=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};ut=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Ln=async(e,t)=>{let n=B(t),r=e.sharedContext??V(),a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;E(a)||(i=!0,a="en");let s=ut({...e,outputLanguage:a});return F(n,t?.modeOverride,!1,"writer",s,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");p("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=M(t);try{let{model:c,release:d}=await K("writer",{core:s,sharedContext:r},()=>Writer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("writer",n,t,{step:"on-device:ready",source:"on-device"});try{p("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await c.measureInputUsage(e.prompt,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=ue(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let k=0;k<f.length;k++){let $=ce.I18n.get("Writing part {current}/{total}...").replace("{current}",String(k+1)).replace("{total}",String(f.length));p("writer",n,t,{step:"on-device:run",source:"on-device",message:$});let pe=await c.write(f[k].text,{context:e.context,signal:u.signal});b.push(pe)}l=b.join(`
8
8
 
9
- `)}}return m||(l=await c.write(e.prompt,{context:e.context,signal:u.signal})),s?{result:(await H({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{p()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},$t({...e,sharedContext:r,outputLanguage:a}),t)},je=e=>{let t=e.outputLanguage?e.outputLanguage:L(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},en=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:L(),a=o,s=!1;B(o)||(s=!0,o="en");let i=je({...e,outputLanguage:o});return M(n,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",n,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=I(t);try{let{model:c,release:p}=await E("rewriter",{core:i,sharedContext:r},()=>Rewriter.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l="",m=!1,g=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=Y(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let z=ee.I18n.get("Rewriting part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:z});let re=await c.rewrite(f[h].text,{context:e.context,signal:u.signal});b.push(re)}l=b.join(`
9
+ `)}}return m||(l=await c.write(e.prompt,{context:e.context,signal:u.signal})),i?{result:(await X({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:u.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},vn({...e,sharedContext:r,outputLanguage:o}),t)},ct=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},On=async(e,t)=>{let n=B(t),r=e.sharedContext??V(),a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;E(a)||(i=!0,a="en");let s=ct({...e,outputLanguage:a});return F(n,t?.modeOverride,!1,"rewriter",s,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");p("rewriter",n,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=M(t);try{let{model:c,release:d}=await K("rewriter",{core:s,sharedContext:r},()=>Rewriter.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{p("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l="",m=!1,g=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=ue(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let k=0;k<f.length;k++){let $=ce.I18n.get("Rewriting part {current}/{total}...").replace("{current}",String(k+1)).replace("{total}",String(f.length));p("rewriter",n,t,{step:"on-device:run",source:"on-device",message:$});let pe=await c.rewrite(f[k].text,{context:e.context,signal:u.signal});b.push(pe)}l=b.join(`
10
10
 
11
- `)}}return m||(l=await c.rewrite(e.text,{context:e.context,signal:u.signal})),s?{result:(await H({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{p()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},Gt({...e,sharedContext:r,outputLanguage:a}),t)},Ve=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),tn=async(e,t)=>{let n=O(t),r=await Ve();return M(n,t?.modeOverride,!1,"proofreader",r,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",n,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let o=I(t);try{let{model:a,release:s}=await E("proofreader",{core:r},()=>Proofreader.create({...r,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());d("proofreader",n,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",n,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await a.proofread(e.text,{signal:o.signal})}}finally{try{s()}catch(i){console.error("Error destroying proofreader:",i)}}}finally{o.dispose()}},Zt(e),t)},$e=e=>{let t=e.outputLanguage?e.outputLanguage:L(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},nn=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:L(),a=o,s=!1;B(o)||(s=!0,o="en");let i=await $e({...e,outputLanguage:o});return M(n,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=I(t);try{let{model:c,release:p}=await E("summarizer",{core:i,sharedContext:r},()=>Summarizer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),m=c.inputQuota;if(l>m){let y=Y(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let ne=ee.I18n.get("Summarizing part {current}/{total}...").replace("{current}",String(b+1)).replace("{total}",String(y.length));d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:ne});let z=await c.summarize(y[b].text,{context:e.context,signal:u.signal});f.push(z)}e.text=f.join(`
11
+ `)}}return m||(l=await c.rewrite(e.text,{context:e.context,signal:u.signal})),i?{result:(await X({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:u.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},An({...e,sharedContext:r,outputLanguage:o}),t)},lt=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Rn=async(e,t)=>{let n=B(t),r=await lt();return F(n,t?.modeOverride,!1,"proofreader",r,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");p("proofreader",n,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=M(t);try{let{model:o,release:i}=await K("proofreader",{core:r},()=>Proofreader.create({...r,monitor(s){s.addEventListener("downloadprogress",u=>{let c=u.loaded;p("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),s=>s.destroy());p("proofreader",n,t,{step:"on-device:ready",source:"on-device"});try{return p("proofreader",n,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await o.proofread(e.text,{signal:a.signal})}}finally{try{i()}catch(s){console.error("Error destroying proofreader:",s)}}}finally{a.dispose()}},Tn(e),t)},dt=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Bn=async(e,t)=>{let n=B(t),r=e.sharedContext??V(),a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;E(a)||(i=!0,a="en");let s=await dt({...e,outputLanguage:a});return F(n,t?.modeOverride,!1,"summarizer",s,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");p("summarizer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=M(t);try{let{model:c,release:d}=await K("summarizer",{core:s,sharedContext:r},()=>Summarizer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{p("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),m=c.inputQuota;if(l>m){let y=ue(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let de=ce.I18n.get("Summarizing part {current}/{total}...").replace("{current}",String(b+1)).replace("{total}",String(y.length));p("summarizer",n,t,{step:"on-device:run",source:"on-device",message:de});let $=await c.summarize(y[b].text,{context:e.context,signal:u.signal});f.push($)}e.text=f.join(`
12
12
 
13
- `)}}let g=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await H({text:g,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:g}}finally{try{p()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{u.dispose()}},Qt({...e,sharedContext:r,outputLanguage:a}),t)},rn=async(e,t)=>{let n=O(t);return M(n,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let r=I(t,qe);try{let{model:o,release:a}=await E("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;d("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());d("language-detector",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",n,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await o.detect(e.text,{signal:r.signal})).filter(i=>be.find(u=>u.value===i.detectedLanguage))}}}finally{try{a()}catch(s){console.error("Error destroying language detector:",s)}}}finally{r.dispose()}},Jt(e.text,t),t)},Ge=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??L()??"en"};return Promise.resolve(t)},H=async(e,t)=>{let n=O(t),r=await Ge({...e});return M(n,t?.modeOverride,t?.silent,"translator",r,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",n,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let o=I(t,qe);try{let{model:a,release:s}=await E("translator",{core:r},()=>Translator.create({...r,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("translator",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());d("translator",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",n,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i=[],u=()=>{if(typeof o.signal.throwIfAborted=="function")o.signal.throwIfAborted();else if(o.signal.aborted)throw o.signal.reason??new DOMException("Aborted","AbortError")};for(let p of e.text.split(`
14
- `))u(),i.push(a.translate(p.trim()));return{result:(await Promise.all(i)).join(`
15
- `)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{o.dispose()}},Xt(e.text,e.sourceLanguage,e.targetLanguage),t)};Qe=4*1024*1024;tt=async e=>{let t=e.outputLanguage?e.outputLanguage:L();return B(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},gn=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o=e.outputLanguage?e.outputLanguage:L(),a=o,s=!1;B(o)||(s=!0,o="en");let i=await tt({...e,outputLanguage:o}),u=await J("prompt",i,t?.modeOverride);return M(n,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");d("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&c.push(g.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let p=c.length>0?c.join(`
13
+ `)}}let g=await c.summarize(e.text,{context:e.context,signal:u.signal});return i?{result:(await X({text:g,sourceLanguage:a,targetLanguage:o},{context:n,signal:u.signal})).result}:{result:g}}finally{try{d()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{u.dispose()}},Pn({...e,sharedContext:r,outputLanguage:o}),t)},In=async(e,t)=>{let n=B(t);return F(n,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");p("language-detector",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let r=M(t,st);try{let{model:a,release:o}=await K("language-detector",{},()=>LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",s=>{let u=s.loaded;p("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),i=>i.destroy());p("language-detector",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return p("language-detector",n,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await a.detect(e.text,{signal:r.signal})).filter(s=>Te.find(u=>u.value===s.detectedLanguage))}}}finally{try{o()}catch(i){console.error("Error destroying language detector:",i)}}}finally{r.dispose()}},Sn(e.text,t),t)},pt=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??R()??"en"};return Promise.resolve(t)},X=async(e,t)=>{let n=B(t),r=await pt({...e});return F(n,t?.modeOverride,t?.silent,"translator",r,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");p("translator",n,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let a=M(t,st);try{let{model:o,release:i}=await K("translator",{core:r},()=>Translator.create({...r,monitor(s){s.addEventListener("downloadprogress",u=>{let c=u.loaded;p("translator",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),s=>s.destroy());p("translator",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{p("translator",n,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let s=[],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 d of e.text.split(`
14
+ `))u(),s.push(o.translate(d.trim()));return{result:(await Promise.all(s)).join(`
15
+ `)}}finally{try{i()}catch(s){console.error("Error destroying translator:",s)}}}finally{a.dispose()}},xn(e.text,e.sourceLanguage,e.targetLanguage),t)};gt=4*1024*1024;kt=async e=>{let t=e.outputLanguage?e.outputLanguage:R();return E(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Nn=async(e,t)=>{let n=B(t),r=e.sharedContext??V(),a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;E(a)||(i=!0,a="en");let s=await kt({...e,outputLanguage:a}),u=await ie("prompt",s,t?.modeOverride,n);return F(n,t?.modeOverride,!1,"prompt",s,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");p("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&c.push(g.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let d=c.length>0?c.join(`
16
16
 
17
- `):void 0,l=p?[{role:"system",content:p}]:void 0,m=I(t);try{let{model:g,release:y}=await E("language-model",{core:i,initialPrompts:l},()=>LanguageModel.create({...i,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let h=b.loaded;d("prompt",n,t,{step:"on-device:download",source:"on-device",progress:h,loaded:h})})}}),f=>f.destroy());d("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(an(e),{signal:m.signal,responseConstraint:e.responseConstraint});return s?{result:(await H({text:f,sourceLanguage:o,targetLanguage:a},{context:n,signal:m.signal})).result}:{result:f}}finally{try{y()}catch(f){console.error("Error destroying LanguageModel:",f)}}}finally{m.dispose()}},await qt({...e,sharedContext:r},n,u,t),t)},pn=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o="prompt",a=await F(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await Ht({sessionId:e.sessionId,message:e.message,audio:e.audio,images:e.images,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await D(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},mn=async(e,t)=>{let n=O(t),r=e.sharedContext??U(),o="prompt",a=await F(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await jt({...e,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await D(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},fn=async(e,t)=>{let n="frontend",r="prompt",o=await F(),a={feature:r,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await Vt({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});d(r,n,t,{step:"backend:request",source:"backend"});let i=await D(a,n,r,s,t);return d(r,n,t,{step:"done",source:"backend"}),i}});var Wn={};V(Wn,{AiKitChatbotIcon:()=>yt,AiKitDocSearchIcon:()=>wt,AiKitFeatureIcon:()=>bt,BackendError:()=>S,LANGUAGE_OPTIONS:()=>be,TEXT_DOMAIN:()=>k,checkOnDeviceAvailability:()=>hn,decideCapability:()=>wn,detectLanguage:()=>In,dispatchBackend:()=>vn,getAiKitPlugin:()=>T,getMinChromeVersions:()=>bn,getPromptOptions:()=>Mn,getProofreadOptions:()=>Tn,getRewriteOptions:()=>Pn,getStore:()=>ye,getStoreDispatch:()=>we,getStoreSelect:()=>_,getSummarizeOptions:()=>On,getTranslateOptions:()=>Bn,getWriteOptions:()=>An,initializeAiKit:()=>zn,isOnDeviceLanguageSupported:()=>yn,observeStore:()=>Ce,prompt:()=>Fn,proofread:()=>Ln,reloadConfig:()=>he,resolveBackend:()=>kn,rewrite:()=>Sn,sanitizeAiKitConfig:()=>G,sendChatMessage:()=>Kn,sendFeedbackMessage:()=>Dn,sendSearchMessage:()=>Un,summarize:()=>Rn,translate:()=>En,waitForAiKitReady:()=>oe,write:()=>xn});module.exports=lt(Wn);var ot,C,be,j,bn,yn,wn,hn,kn,Cn,vn,w,An,xn,Pn,Sn,Tn,Ln,On,Rn,Bn,En,In,Mn,Fn,Kn,Dn,Un,zn,at=P(()=>{ot=require("@smart-cloud/wpsuite-core"),C=require("@wordpress/i18n");$();Q();ve();Q();Ae();ue();be=[{label:(0,C.__)("Arabic",k),value:"ar"},{label:(0,C.__)("Chinese",k),value:"zh"},{label:(0,C.__)("Dutch",k),value:"nl"},{label:(0,C.__)("English",k),value:"en"},{label:(0,C.__)("French",k),value:"fr"},{label:(0,C.__)("German",k),value:"de"},{label:(0,C.__)("Hebrew",k),value:"he"},{label:(0,C.__)("Hindi",k),value:"hi"},{label:(0,C.__)("Hungarian",k),value:"hu"},{label:(0,C.__)("Indonesian",k),value:"id"},{label:(0,C.__)("Italian",k),value:"it"},{label:(0,C.__)("Japanese",k),value:"ja"},{label:(0,C.__)("Korean",k),value:"ko"},{label:(0,C.__)("Norwegian",k),value:"no"},{label:(0,C.__)("Polish",k),value:"pl"},{label:(0,C.__)("Portuguese",k),value:"pt"},{label:(0,C.__)("Russian",k),value:"ru"},{label:(0,C.__)("Spanish",k),value:"es"},{label:(0,C.__)("Swedish",k),value:"sv"},{label:(0,C.__)("Thai",k),value:"th"},{label:(0,C.__)("Turkish",k),value:"tr"},{label:(0,C.__)("Ukrainian",k),value:"uk"}],j=Promise.resolve().then(()=>(ce(),Be)),bn=async()=>(await j).MIN_CHROME_VERSION,yn=async(...e)=>(await j).isOnDeviceLanguageSupported(...e),wn=async(...e)=>(await j).decideCapability(...e),hn=async(...e)=>(await j).checkOnDeviceAvailability(...e),kn=async(...e)=>(await j).resolveBackend(...e),Cn=Promise.resolve().then(()=>(de(),Ue)),vn=async(...e)=>(await Cn).dispatchCustomBackend(...e),w=Promise.resolve().then(()=>(rt(),nt)),An=async(...e)=>(await w).getWriteOptions(...e),xn=async(...e)=>(await w).write(...e),Pn=async(...e)=>(await w).getRewriteOptions(...e),Sn=async(...e)=>(await w).rewrite(...e),Tn=async(...e)=>(await w).getProofreadOptions(...e),Ln=async(...e)=>(await w).proofread(...e),On=async(...e)=>(await w).getSummarizeOptions(...e),Rn=async(...e)=>(await w).summarize(...e),Bn=async(...e)=>(await w).getTranslateOptions(...e),En=async(...e)=>(await w).translate(...e),In=async(...e)=>(await w).detectLanguage(...e),Mn=async(...e)=>(await w).getPromptOptions(...e),Fn=async(...e)=>(await w).prompt(...e),Kn=async(...e)=>(await w).sendChatMessage(...e),Dn=async(...e)=>(await w).sendFeedbackMessage(...e),Un=async(...e)=>(await w).sendSearchMessage(...e),zn=(e,t)=>{let n=globalThis.WpSuite,r=T();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");(0,ot.attachDefaultPluginRuntime)(r),r.status=r.status??"initializing";let o=ke();return r.features={store:o,renderFeature:async a=>await e({...a,store:await o}),renderSearchComponent:async a=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...a,store:await o})},write:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.write(...a)},rewrite:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.rewrite(...a)},proofread:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.proofread(...a)},summarize:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.summarize(...a)},translate:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.translate(...a)},detectLanguage:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.detectLanguage(...a)},prompt:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.prompt(...a)},sendChatMessage:async(...a)=>(await w).sendChatMessage(...a),sendFeedbackMessage:async(...a)=>(await w).sendFeedbackMessage(...a),sendSearchMessage:async(...a)=>(await w).sendSearchMessage(...a)},o.then(()=>{r.status="available",n?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(a=>{r.status="error",console.error("AiKit plugin failed to initialize:",a),n?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(a)})}),r}});at();0&&(module.exports={AiKitChatbotIcon,AiKitDocSearchIcon,AiKitFeatureIcon,BackendError,LANGUAGE_OPTIONS,TEXT_DOMAIN,checkOnDeviceAvailability,decideCapability,detectLanguage,dispatchBackend,getAiKitPlugin,getMinChromeVersions,getPromptOptions,getProofreadOptions,getRewriteOptions,getStore,getStoreDispatch,getStoreSelect,getSummarizeOptions,getTranslateOptions,getWriteOptions,initializeAiKit,isOnDeviceLanguageSupported,observeStore,prompt,proofread,reloadConfig,resolveBackend,rewrite,sanitizeAiKitConfig,sendChatMessage,sendFeedbackMessage,sendSearchMessage,summarize,translate,waitForAiKitReady,write});
17
+ `):void 0,l=d?[{role:"system",content:d}]:void 0,m=M(t);try{let{model:g,release:y}=await K("language-model",{core:s,initialPrompts:l},()=>LanguageModel.create({...s,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let k=b.loaded;p("prompt",n,t,{step:"on-device:download",source:"on-device",progress:k,loaded:k})})}}),f=>f.destroy());p("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{p("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(En(e),{signal:m.signal,responseConstraint:e.responseConstraint});return i?{result:(await X({text:f,sourceLanguage:a,targetLanguage:o},{context:n,signal:m.signal})).result}:{result:f}}finally{try{y()}catch(f){console.error("Error destroying LanguageModel:",f)}}}finally{m.dispose()}},await wn({...e,sharedContext:r},n,u,t),t)},zn=async(e,t)=>{let n=B(t),r=e.sharedContext??V(),a="prompt",o=await _(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await kn({sessionId:e.sessionId,message:e.message,audio:e.audio,images:e.images,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let u=await z(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),u},Vn=async(e,t)=>{let n=B(t),r=e.sharedContext??V(),a="prompt",o=await _(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await hn({...e,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let u=await z(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),u},$n=async(e,t)=>{let n="frontend",r="prompt",a=await _(),o={feature:r,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await Cn({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});p(r,n,t,{step:"backend:request",source:"backend"});let s=await z(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s}});var mr={};Z(mr,{AiKitChatbotIcon:()=>Mt,AiKitDocSearchIcon:()=>Ft,AiKitFeatureIcon:()=>Kt,BackendError:()=>L,KNOWLEDGE_SYNC_CONTRACT_VERSION:()=>Ar,KnowledgeSyncContractError:()=>re,LANGUAGE_OPTIONS:()=>Te,TEXT_DOMAIN:()=>h,capabilityForCustomPath:()=>ke,capabilityForFeature:()=>we,checkOnDeviceAvailability:()=>Hn,compareKnowledgeSourceVersions:()=>zt,decideCapability:()=>qn,detectLanguage:()=>sr,dispatchBackend:()=>Qn,getAiKitPlugin:()=>O,getMinChromeVersions:()=>Wn,getPromptOptions:()=>ur,getProofreadOptions:()=>tr,getRewriteOptions:()=>Zn,getStore:()=>Le,getStoreDispatch:()=>Oe,getStoreSelect:()=>j,getSummarizeOptions:()=>rr,getTranslateOptions:()=>or,getWriteOptions:()=>Xn,initializeAiKit:()=>gr,isOnDeviceLanguageSupported:()=>jn,knowledgeSyncSourceKey:()=>Vt,observeStore:()=>Ie,parseKnowledgeSyncPolicyV1:()=>Nt,parsePublicContentProjectionV1:()=>_t,prompt:()=>cr,proofread:()=>nr,reloadConfig:()=>Re,resolveBackend:()=>Gn,resolveBackendCompatibility:()=>D,rewrite:()=>er,sanitizeAiKitConfig:()=>te,sendChatMessage:()=>lr,sendFeedbackMessage:()=>dr,sendSearchMessage:()=>pr,summarize:()=>ar,supportsBackendCapability:()=>U,translate:()=>ir,waitForAiKitReady:()=>me,write:()=>Jn});module.exports=Lt(mr);var At,C,Te,J,Wn,jn,qn,Hn,Gn,Yn,Qn,w,Xn,Jn,Zn,er,tr,nr,rr,ar,or,ir,sr,ur,cr,lr,dr,pr,gr,vt=S(()=>{At=require("@smart-cloud/wpsuite-core"),C=require("@wordpress/i18n");ee();ne();Ee();ne();Ke();ye();Ue();ae();Te=[{label:(0,C.__)("Arabic",h),value:"ar"},{label:(0,C.__)("Chinese",h),value:"zh"},{label:(0,C.__)("Dutch",h),value:"nl"},{label:(0,C.__)("English",h),value:"en"},{label:(0,C.__)("French",h),value:"fr"},{label:(0,C.__)("German",h),value:"de"},{label:(0,C.__)("Hebrew",h),value:"he"},{label:(0,C.__)("Hindi",h),value:"hi"},{label:(0,C.__)("Hungarian",h),value:"hu"},{label:(0,C.__)("Indonesian",h),value:"id"},{label:(0,C.__)("Italian",h),value:"it"},{label:(0,C.__)("Japanese",h),value:"ja"},{label:(0,C.__)("Korean",h),value:"ko"},{label:(0,C.__)("Norwegian",h),value:"no"},{label:(0,C.__)("Polish",h),value:"pl"},{label:(0,C.__)("Portuguese",h),value:"pt"},{label:(0,C.__)("Russian",h),value:"ru"},{label:(0,C.__)("Spanish",h),value:"es"},{label:(0,C.__)("Swedish",h),value:"sv"},{label:(0,C.__)("Thai",h),value:"th"},{label:(0,C.__)("Turkish",h),value:"tr"},{label:(0,C.__)("Ukrainian",h),value:"uk"}],J=Promise.resolve().then(()=>(he(),Ye)),Wn=async()=>(await J).MIN_CHROME_VERSION,jn=async(...e)=>(await J).isOnDeviceLanguageSupported(...e),qn=async(...e)=>(await J).decideCapability(...e),Hn=async(...e)=>(await J).checkOnDeviceAvailability(...e),Gn=async(...e)=>(await J).resolveBackend(...e),Yn=Promise.resolve().then(()=>(ve(),nt)),Qn=async(...e)=>(await Yn).dispatchCustomBackend(...e),w=Promise.resolve().then(()=>(Ct(),ht)),Xn=async(...e)=>(await w).getWriteOptions(...e),Jn=async(...e)=>(await w).write(...e),Zn=async(...e)=>(await w).getRewriteOptions(...e),er=async(...e)=>(await w).rewrite(...e),tr=async(...e)=>(await w).getProofreadOptions(...e),nr=async(...e)=>(await w).proofread(...e),rr=async(...e)=>(await w).getSummarizeOptions(...e),ar=async(...e)=>(await w).summarize(...e),or=async(...e)=>(await w).getTranslateOptions(...e),ir=async(...e)=>(await w).translate(...e),sr=async(...e)=>(await w).detectLanguage(...e),ur=async(...e)=>(await w).getPromptOptions(...e),cr=async(...e)=>(await w).prompt(...e),lr=async(...e)=>(await w).sendChatMessage(...e),dr=async(...e)=>(await w).sendFeedbackMessage(...e),pr=async(...e)=>(await w).sendSearchMessage(...e),gr=(e,t)=>{let n=globalThis.WpSuite,r=O();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");(0,At.attachDefaultPluginRuntime)(r),r.status=r.status??"initializing";let a=Be();return r.features={store:a,renderFeature:async o=>await e({...o,store:await a}),renderSearchComponent:async o=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...o,store:await a})},write:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.write(...o)},rewrite:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.rewrite(...o)},proofread:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.proofread(...o)},summarize:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.summarize(...o)},translate:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.translate(...o)},detectLanguage:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.detectLanguage(...o)},prompt:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.prompt(...o)},sendChatMessage:async(...o)=>(await w).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await w).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await w).sendSearchMessage(...o)},a.then(()=>{r.status="available",n?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(o=>{r.status="error",console.error("AiKit plugin failed to initialize:",o),n?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(o)})}),r}});vt();0&&(module.exports={AiKitChatbotIcon,AiKitDocSearchIcon,AiKitFeatureIcon,BackendError,KNOWLEDGE_SYNC_CONTRACT_VERSION,KnowledgeSyncContractError,LANGUAGE_OPTIONS,TEXT_DOMAIN,capabilityForCustomPath,capabilityForFeature,checkOnDeviceAvailability,compareKnowledgeSourceVersions,decideCapability,detectLanguage,dispatchBackend,getAiKitPlugin,getMinChromeVersions,getPromptOptions,getProofreadOptions,getRewriteOptions,getStore,getStoreDispatch,getStoreSelect,getSummarizeOptions,getTranslateOptions,getWriteOptions,initializeAiKit,isOnDeviceLanguageSupported,knowledgeSyncSourceKey,observeStore,parseKnowledgeSyncPolicyV1,parsePublicContentProjectionV1,prompt,proofread,reloadConfig,resolveBackend,resolveBackendCompatibility,rewrite,sanitizeAiKitConfig,sendChatMessage,sendFeedbackMessage,sendSearchMessage,summarize,supportsBackendCapability,translate,waitForAiKitReady,write});
package/dist/index.d.ts CHANGED
@@ -5,6 +5,8 @@ export { getAiKitPlugin, getStore, TEXT_DOMAIN, waitForAiKitReady, type AiKitErr
5
5
  export { getStoreDispatch, getStoreSelect, observeStore, sanitizeAiKitConfig, reloadConfig, type AiKitConfig, type CustomTranslations, type State, type Store, } from "./store";
6
6
  export * from "./icons";
7
7
  export * from "./types";
8
+ export * from "./knowledge-sync";
9
+ export * from "./backend-compatibility";
8
10
  export declare const LANGUAGE_OPTIONS: {
9
11
  label: string;
10
12
  value: AiKitLanguageCode;
@@ -13,13 +15,7 @@ export declare const getMinChromeVersions: () => Promise<Partial<Record<import("
13
15
  export declare const isOnDeviceLanguageSupported: (...args: Parameters<Capabilities["isOnDeviceLanguageSupported"]>) => Promise<boolean>;
14
16
  export declare const decideCapability: (...args: Parameters<Capabilities["decideCapability"]>) => Promise<import("./types").CapabilityDecision>;
15
17
  export declare const checkOnDeviceAvailability: (...args: Parameters<Capabilities["checkOnDeviceAvailability"]>) => Promise<import("./types").DeviceAvailability>;
16
- export declare const resolveBackend: (...args: Parameters<Capabilities["resolveBackend"]>) => Promise<{
17
- available: boolean;
18
- transport?: import("./types").BackendTransport;
19
- apiName?: string;
20
- baseUrl?: string;
21
- reason?: string;
22
- }>;
18
+ export declare const resolveBackend: (...args: Parameters<Capabilities["resolveBackend"]>) => Promise<import("./types").ResolvedBackend>;
23
19
  export declare const dispatchBackend: (...args: Parameters<Backend<unknown>["dispatchCustomBackend"]>) => Promise<unknown>;
24
20
  export declare const getWriteOptions: (...args: Parameters<Features["getWriteOptions"]>) => Promise<WriterCreateCoreOptions>;
25
21
  export declare const write: (...args: Parameters<Features["write"]>) => Promise<import("./types").WriteResult>;
package/dist/index.js CHANGED
@@ -1,17 +1,17 @@
1
- var Xe=Object.defineProperty;var x=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var Z=(e,t)=>{for(var n in t)Xe(e,n,{get:t[n],enumerable:!0})};function L(){return globalThis.WpSuite?.plugins?.aiKit}async function le(e=8e3){let t=L();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let o=()=>s(n),a=()=>s(()=>r(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",o),window.removeEventListener("wpsuite:ai-kit:error",a),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",o,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",a,{once:!0});let i=e?window.setTimeout(()=>s(()=>r(new Error("AiKit timeout"))),e):0})}}async function Je(e=1e4){await le(e);let n=L()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var q=x(()=>{"use strict"});import{getConfig as ge,getWpSuite as Ze}from"@smart-cloud/wpsuite-core";import{createReduxStore as Ye,dispatch as pe,register as et,select as tt,subscribe as nt}from"@wordpress/data";import{I18n as de}from"aws-amplify/utils";var Y,ee,rt,at,ot,st,it,ut,H,ct,me,lt,j=x(()=>{"use strict";q();typeof WpSuite<"u"?Y=WpSuite.siteSettings:Y={};ee=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},rt=async()=>{let e=L();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+Y.lastUpdate).then(n=>n.ok?n.text():null).then(n=>n?JSON.parse(n):null).catch(()=>null)),t??null},at=async()=>{let e=ee(await ge("aiKit")),t=await rt();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},ot={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?de.setLanguage(""):de.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},st={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},it={},ut=e=>{let t=pe(e);return delete t.setConfig,t},H=e=>tt(e),ct=async e=>{Ze().siteSettings.lastUpdate=Date.now();let t=await ge("aiKit"),n=ee(t);pe(e).setConfig(n)},me=async()=>{let e=await at(),t=Ye("smartcloud/ai-kit",{reducer(n=e,r){switch(r.type){case"SET_LANGUAGE":return{...n,language:r.language};case"SET_DIRECTION":return{...n,direction:r.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...n,showChatbotPreview:r.showChatbotPreview};case"SET_CONFIG":return{...n,config:r.config}}return n},actions:ot,selectors:st,resolvers:it});return et(t),t},lt=(e,t,n)=>{let r;function o(){let s=H(e).getState(),i=t(s);if(i!==r){let u=r;r=i,n(r,u)}}let a=nt(o,e);return o(),a}});var k,fe=x(()=>{"use strict";k="smartcloud-ai-kit"});import{jsx as v,jsxs as te}from"react/jsx-runtime";var Pn,Sn,Tn,be=x(()=>{"use strict";Pn=e=>te("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{d:"M19 27H33"}),v("path",{d:"M19 33H33"}),v("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),v("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),v("path",{d:"M16 10V40H36V22"}),v("path",{d:"M16 10H22"}),v("path",{d:"M22 10V23H36"}),v("path",{d:"M22 10L36 22"})]}),Sn=e=>te("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"})]}),Tn=e=>te("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 P,ne=x(()=>{"use strict";P=class extends Error{constructor(n,r,o){super(n);this.decision=r;this.status=o;this.name="AiBackendError"}decision;status}});var ve={};Z(ve,{MIN_CHROME_VERSION:()=>he,checkOnDeviceAvailability:()=>Ce,decideCapability:()=>$,isOnDeviceLanguageSupported:()=>R,resolveBackend:()=>M});import{getWpSuite as dt}from"@smart-cloud/wpsuite-core";import{getGateyPlugin as gt}from"@smart-cloud/gatey-core";async function ye(){let t=await dt()?.plugins?.aiKit?.features.store;return H(t).getConfig()??{}}function we(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function pt(e){if(e.mode)return e.mode;let{transport:t}=we(e);return t?"backend-fallback":"local-only"}async function M(){let e=await ye(),{transport:t,backendApiName:n,backendBaseUrl:r}=we(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return r?{available:!0,transport:t,baseUrl:r,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!n)return{available:!1,reason:"backendApiName is missing"};let o=gt();return!o?.availability||await o.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:n,reason:"Gatey backend"}}function O(e){return typeof globalThis[e]<"u"}function ke(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function V(e,t){return e?.find(n=>n.brand===t)?.version}async function ft(){let e=navigator?.userAgentData;if(e){try{let n=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(n)&&n.length>0)return n}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function bt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?ke(t[1]):void 0}function yt(){return!!navigator?.brave}async function wt(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",n=await ft(),r=V(n,"Microsoft Edge")??V(n,"Microsoft Edge WebView2"),o=V(n,"Google Chrome")??V(n,"Chromium"),a=!!r||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),p=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=yt()||/\bBrave\//i.test(t);if(a||s||i||u||c||p||l)return{allowed:!1,reason:a?"edge":l?"brave":c?"firefox":p?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let m=ke(o)??bt(t),g=he[e];return g?m?m<g?{allowed:!1,reason:`chrome-too-old-${m}-lt-${g}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function Ce(e,t){try{let n=await wt(e),r=`browser-gate:${n.reason}${n.chromeMajor?` (chrome ${n.chromeMajor})`:""}`;if(!n.allowed)return{available:!1,status:"unavailable",reason:r};let o=a=>a==="unavailable"?mt.has(e)?"requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics":"check hardware requirements or see AI-Kit Diagnostics":r;switch(e){case"writer":{if(!O("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"rewriter":{if(!O("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"summarizer":{if(!O("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"proofreader":{if(!O("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"language-detector":{if(!O("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"translator":{if(!O("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:r};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:r,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let s=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:s!=="unavailable",status:s,reason:o(s)}}case"prompt":{if(!O("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}default:return{available:!1,status:"unknown-feature",reason:r}}}catch(n){return{available:!1,status:"error",reason:"exception in availability()",error:n}}}function R(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function $(e,t,n){let r=await ye(),o=n||pt(r),a=await M(),s=await Ce(e,t),i=s.available,u=a.available,c={feature:e,mode:o,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason};return o==="local-only"?i?{...c,source:"on-device",reason:`local-only, on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only, but on-device unavailable (${s.reason??s.status})`}:o==="backend-only"?u?{...c,source:"backend",reason:`backend-only, backend available (${a.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only, but backend unavailable (${a.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback, using backend (${a.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${a.reason??"n/a"})`}}var he,mt,re=x(()=>{"use strict";j();he={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},mt=new Set(["writer","rewriter","proofreader","prompt"])});var Le={};Z(Le,{dispatchCustomBackend:()=>Et,dispatchFeatureBackend:()=>K,withRecaptchaHeaders:()=>z});import{getGateyPlugin as ht}from"@smart-cloud/gatey-core";import{getRecaptcha as kt,getWpSuite as Ct}from"@smart-cloud/wpsuite-core";function vt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function At(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function xt(e,t){let n=At(t);if(n<=0)return!1;let r=Ae.get(e);return r?Date.now()-r<n:!1}function ae(e,t){let n=vt(t);n&&Ae.set(e,n)}function xe(e,t){if(e!=="frontend"||!Se(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Pe(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let n=Object.keys(e).find(o=>o.toLowerCase()===t.toLowerCase());if(!n)return;let r=e[n];return typeof r=="string"&&r?r:void 0}async function Pt(e,t){if(e!=="frontend")return;let n=Ct()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&xt(t.cacheKey,L()?.settings||{}))return;let{execute:r}=await kt(n?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let a=await r(n.reCaptchaPublicKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function z(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await Pt(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function F(e,t){try{e?.onStatus?.(t)}catch{}}function Se(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Tt(e,t){if(!Se(t))return t;let n=St[e];if(!n)return t;let r={};for(let o of n)o in t&&(r[o]=t[o]);return r}function Rt(e,t){return(e==="admin"?Lt:Ot)[t]}function Bt(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function K(e,t,n,r,o={}){let a=Rt(t,n);if(!a)throw new P(`No backend path configured for "${n}" (${t}).`,e);let s=Tt(n,r);return Te(e,t,n,a,"POST",s,o)}async function Et(e,t,n,r,o,a={}){let s=Bt(t,n);return Te(e,t,"prompt",s,r,o,a)}async function Te(e,t,n,r,o,a,s={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new P("backendTransport=fetch but backendBaseUrl is missing.",e);return It(e.backendBaseUrl,r,o,a,s,e,n,t)}if(!e.backendApiName)throw new P("backendTransport=gatey but backendApiName is missing.",e);return Mt(e.backendApiName,r,o,a,s,e,n,t)}async function It(e,t,n,r,o,a,s,i){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...o.headers??{}},p=s==="prompt"?xe(i,r):void 0,l=await z(i,c,{cacheKey:p}),m=o.query&&Object.keys(o.query).length>0?"?"+new URLSearchParams(Object.entries(o.query).map(([b,h])=>[b,String(h)])).toString():"";F(o,{feature:s,context:i,step:"backend:request",source:"backend"}),F(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let g=await fetch(u+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:o.signal,credentials:"omit"});if(F(o,{feature:s,context:i,step:"backend:response",source:"backend"}),!g.ok){let b=`HTTP ${g.status}`;try{let h=await g.text();h&&(b=`${b}: ${h.substring(0,400)}`)}catch{}throw new P(`Fetch backend call failed: ${b}`,a,g.status)}let y=g.headers.get("content-type")||"",f=Pe(g.headers,"x-recaptcha-verified-at");if(y.includes("application/json")){let b=await g.json(),h=(b&&typeof b.sessionId=="string"&&b.sessionId.trim()?b.sessionId.trim():void 0)??p;return f&&h&&ae(h,f),b}return f&&p&&ae(p,f),await g.text()}async function Mt(e,t,n,r,o,a,s,i){let u=ht(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new P(`Unsupported HTTP method "${n}" for Gatey backend.`,a)}if(!c)throw new P(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,a);let p=s==="prompt"?xe(i,r):void 0,l=await z(i,{...o.headers??{}},{cacheKey:p});F(o,{feature:s,context:i,step:"backend:request",source:"backend"}),F(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let m=c({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response,y=Pe(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??p;return y&&typeof b=="string"&&b.trim()&&ae(b.trim(),y),F(o,{feature:s,context:i,step:"backend:response",source:"backend"}),f}var Ae,St,Lt,Ot,oe=x(()=>{"use strict";q();ne();Ae=new Map;St={prompt:["text","audio","audioUrl","systemPrompt","context","maxTokens","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","topK","temperature","userSelectedCategories","userSelectedSubcategories","userSelectedTags"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};Lt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Ot={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function Ft(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a==="."||a==="!"||a==="?")&&(s===" "||s===`
2
- `||s==="\r"||o===e.length-1)){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function Kt(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a===","||a===";"||a===":")&&(s===" "||s===`
3
- `||s==="\r")){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function G(e,t){let n=[],r=0;for(;r<e.length;){let o=Math.min(r+t,e.length);if(o<e.length){let s=e.lastIndexOf(`
1
+ var gt=Object.defineProperty;var S=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var ie=(e,t)=>{for(var n in t)gt(e,n,{get:t[n],enumerable:!0})};function R(){return globalThis.WpSuite?.plugins?.aiKit}async function ke(e=8e3){let t=R();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let a=()=>i(n),o=()=>i(()=>r(new Error("AiKit failed"))),i=u=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),s&&clearTimeout(s),u()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let s=e?window.setTimeout(()=>i(()=>r(new Error("AiKit timeout"))),e):0})}}async function mt(e=1e4){await ke(e);let n=R()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var Q=S(()=>{"use strict"});import{getConfig as Ce,getWpSuite as ft}from"@smart-cloud/wpsuite-core";import{createReduxStore as bt,dispatch as ve,register as yt,select as wt,subscribe as kt}from"@wordpress/data";import{I18n as he}from"aws-amplify/utils";var se,ue,ht,Ct,vt,At,Pt,xt,X,St,Ae,Tt,J=S(()=>{"use strict";Q();typeof WpSuite<"u"?se=WpSuite.siteSettings:se={};ue=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},ht=async()=>{let e=R();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="+se.lastUpdate).then(n=>n.ok?n.text():null).then(n=>n?JSON.parse(n):null).catch(()=>null)),t??null},Ct=async()=>{let e=ue(await Ce("aiKit")),t=await ht();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},vt={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?he.setLanguage(""):he.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},At={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},Pt={},xt=e=>{let t=ve(e);return delete t.setConfig,t},X=e=>wt(e),St=async e=>{ft().siteSettings.lastUpdate=Date.now();let t=await Ce("aiKit"),n=ue(t);ve(e).setConfig(n)},Ae=async()=>{let e=await Ct(),t=bt("smartcloud/ai-kit",{reducer(n=e,r){switch(r.type){case"SET_LANGUAGE":return{...n,language:r.language};case"SET_DIRECTION":return{...n,direction:r.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...n,showChatbotPreview:r.showChatbotPreview};case"SET_CONFIG":return{...n,config:r.config}}return n},actions:vt,selectors:At,resolvers:Pt});return yt(t),t},Tt=(e,t,n)=>{let r;function a(){let i=X(e).getState(),s=t(i);if(s!==r){let u=r;r=s,n(r,u)}}let o=kt(a,e);return a(),o}});var h,Pe=S(()=>{"use strict";h="smartcloud-ai-kit"});import{jsx as A,jsxs as ce}from"react/jsx-runtime";var Yn,Qn,Xn,xe=S(()=>{"use strict";Yn=e=>ce("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:[A("path",{d:"M19 27H33"}),A("path",{d:"M19 33H33"}),A("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),A("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),A("path",{d:"M16 10V40H36V22"}),A("path",{d:"M16 10H22"}),A("path",{d:"M22 10V23H36"}),A("path",{d:"M22 10L36 22"})]}),Qn=e=>ce("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:[A("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"}),A("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),A("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),A("path",{d:"M16 24H32"})]}),Xn=e=>ce("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:[A("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),A("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),A("path",{d:"M42 42l-12 -12"}),A("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),A("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var T,le=S(()=>{"use strict";T=class extends Error{constructor(n,r,a){super(n);this.decision=r;this.status=a;this.name="AiBackendError"}decision;status}});function v(e,t,n){throw new de(e,t,n)}function V(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&v("invalid_type",t,`${t} must be an object.`),e}function $(e,t,n){let r=new Set(t),a=Object.keys(e).find(o=>!r.has(o));a&&v("unknown_field",`${n}.${a}`,`${n}.${a} is not part of contract v1.`)}function P(e,t,n){(typeof e!="string"||e.trim()==="")&&v("invalid_string",t,`${t} must be a non-empty string.`);let r=e.trim();return n&&!n.test(r)&&v("invalid_format",t,`${t} has an invalid format.`),r}function z(e,t){return P(e,t,/^(?:0|[1-9][0-9]*)$/)}function Se(e,t){let n=P(e,t);return(!/^\d{4}-\d{2}-\d{2}T/.test(n)||!Number.isFinite(Date.parse(n)))&&v("invalid_timestamp",t,`${t} must be an ISO-8601 timestamp.`),n}function Te(e,t){let n=P(e,t),r;try{r=new URL(n)}catch{v("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`)}return r.protocol!=="http:"&&r.protocol!=="https:"&&v("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`),n}function Le(e){let t=V(e,"source");return $(t,["producer","siteId","blogId","postType","postId"],"source"),t.producer!=="wordpress"&&v("unsupported_producer","source.producer","Only wordpress is supported in v1."),{producer:"wordpress",siteId:P(t.siteId,"source.siteId",/^[A-Za-z0-9._:-]+$/),blogId:z(t.blogId,"source.blogId"),postType:P(t.postType,"source.postType",/^[a-z0-9_-]+$/),postId:z(t.postId,"source.postId")}}function Lt(e,t){let n=`document.metadata[${t}]`,r=V(e,n);return $(r,["namespace","slug","label"],n),{namespace:P(r.namespace,`${n}.namespace`,/^[a-z0-9_.:-]+$/),slug:P(r.slug,`${n}.slug`,/^[a-z0-9][a-z0-9._-]*$/),label:P(r.label,`${n}.label`)}}function Ot(e){let t=V(e,"document");return $(t,["profile","canonicalUrl","title","excerpt","content","contentType","contentSha256","modifiedGmt","metadata"],"document"),t.contentType!=="text/markdown"&&v("unsupported_content_type","document.contentType","Contract v1 supports text/markdown documents only."),Array.isArray(t.metadata)||v("invalid_type","document.metadata","document.metadata must be an array."),{profile:P(t.profile,"document.profile",/^[a-z0-9][a-z0-9._-]*$/),canonicalUrl:Te(t.canonicalUrl,"document.canonicalUrl"),title:P(t.title,"document.title"),excerpt:typeof t.excerpt=="string"?t.excerpt:"",content:P(t.content,"document.content"),contentType:"text/markdown",contentSha256:P(t.contentSha256,"document.contentSha256",/^[a-f0-9]{64}$/),modifiedGmt:Se(t.modifiedGmt,"document.modifiedGmt"),metadata:t.metadata.map(Lt)}}function nr(e,t){let n=V(e,"projection");$(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==1&&v("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=Le(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&v("source_boundary_mismatch","projection.source","Projection source does not match the authenticated producer boundary.");let a={schemaVersion:1,source:r,sourceVersion:z(n.sourceVersion,"projection.sourceVersion"),correlationId:P(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:Se(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&v("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:Ot(n.document)}):n.operation==="delete"?(n.document!==null&&v("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:Te(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):v("invalid_operation","projection.operation","Unsupported desired operation.")}function rr(e){let t=V(e,"policy");$(t,["schemaVersion","postType","enabled","autoEnableSource","reviewPolicy","onPublish","onPublishedUpdate","onUnpublish","metadataRefresh","includeTaxonomies","documentProfile"],"policy"),t.schemaVersion!==1&&v("unsupported_schema","policy.schemaVersion","Unsupported policy version."),typeof t.enabled!="boolean"&&v("invalid_type","policy.enabled","policy.enabled must be boolean."),t.autoEnableSource!=="administrator"&&t.autoEnableSource!=="migration"&&t.autoEnableSource!=="system"&&v("invalid_policy","policy.autoEnableSource","Invalid auto-enable source."),t.reviewPolicy!=="wordpress-publish-is-approval"&&t.reviewPolicy!=="manual-kb-review"&&t.reviewPolicy!=="disabled"&&v("invalid_policy","policy.reviewPolicy","Invalid review policy."),(t.onPublish!=="upsert"||t.onPublishedUpdate!=="upsert"||t.onUnpublish!=="delete"||t.metadataRefresh!=="reconcile")&&v("invalid_policy","policy","Unsupported policy action in contract v1."),Array.isArray(t.includeTaxonomies)||v("invalid_type","policy.includeTaxonomies","policy.includeTaxonomies must be an array.");let n=[...new Set(t.includeTaxonomies.map((r,a)=>P(r,`policy.includeTaxonomies[${a}]`,/^[a-z0-9_-]+$/)))].sort();return{schemaVersion:1,postType:P(t.postType,"policy.postType",/^[a-z0-9_-]+$/),enabled:t.enabled,autoEnableSource:t.autoEnableSource,reviewPolicy:t.reviewPolicy,onPublish:"upsert",onPublishedUpdate:"upsert",onUnpublish:"delete",metadataRefresh:"reconcile",includeTaxonomies:n,documentProfile:P(t.documentProfile,"policy.documentProfile",/^[a-z0-9][a-z0-9._-]*$/)}}function ar(e,t){let n=BigInt(z(e,"candidateSourceVersion")),r=BigInt(z(t,"acceptedSourceVersion"));return n<r?"older":n>r?"newer":"same"}function or(e){let t=Le(e);return[t.producer,t.siteId,t.blogId,t.postType,t.postId].map(encodeURIComponent).join(":")}var tr,de,Oe=S(()=>{"use strict";tr=1,de=class extends Error{constructor(n,r,a){super(a);this.code=n;this.field=r;this.name="KnowledgeSyncContractError"}code;field}});import{getGateyPlugin as Rt}from"@smart-cloud/gatey-core";function Ie(e,t){return`ai.${t}.${e}`}function Ee(e,t){if(t.startsWith("/kb/"))return e==="admin"?"knowledge.admin":"knowledge.query.frontend"}function Et(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.schemaVersion===1&&t.product==="smartcloud-ai-kit-backend"&&typeof t.release=="string"&&!!t.capabilities&&typeof t.capabilities=="object"&&!Array.isArray(t.capabilities)}async function Kt(e){if(e.transport==="fetch"){if(!e.baseUrl)throw new Error("backendBaseUrl is missing");let r=await fetch(`${e.baseUrl.replace(/\/+$/,"")}${Re}`,{method:"GET",credentials:"omit"});if(!r.ok)throw new Error(`HTTP ${r.status}`);return r.json()}if(!e.apiName)throw new Error("backendApiName is missing");let t=Rt()?.cognito?.get;if(!t)throw new Error("Gatey GET transport is unavailable");return(await t({apiName:e.apiName,path:Re,options:{retryStrategy:{strategy:"no-retry"}}}).response).body.json()}async function W(e){let t=`${e.transport}:${e.apiName??e.baseUrl??""}`,n=Be.get(t);if(n&&n.expiresAt>Date.now())return n.value;let r;try{let a=await Kt(e);r=Et(a)?{status:"verified",manifest:a}:{status:"legacy",reason:"Backend returned an unsupported capability manifest."}}catch(a){r={status:"legacy",reason:a instanceof Error?`Capability manifest is unavailable: ${a.message}`:"Capability manifest is unavailable."}}return Be.set(t,{expiresAt:Date.now()+Bt,value:r}),r}function j(e,t,n=1){if(e.status==="legacy")return n<=1&&It.has(t);let r=e.manifest?.capabilities[t];return typeof r=="number"&&r>=n}var Re,Bt,It,Be,Z=S(()=>{"use strict";Re="/meta/capabilities",Bt=300*1e3,It=new Set(["ai.prompt.admin","ai.summarizer.admin","ai.writer.admin","ai.rewriter.admin","ai.translator.admin","ai.proofreader.admin","ai.language-detector.admin","ai.prompt.frontend","ai.summarizer.frontend","ai.writer.frontend","ai.rewriter.frontend","ai.translator.frontend","ai.proofreader.frontend","ai.language-detector.frontend","knowledge.admin","knowledge.query.frontend"]),Be=new Map});var _e={};ie(_e,{MIN_CHROME_VERSION:()=>Fe,checkOnDeviceAvailability:()=>Ue,decideCapability:()=>te,isOnDeviceLanguageSupported:()=>I,resolveBackend:()=>F});import{getWpSuite as Mt}from"@smart-cloud/wpsuite-core";import{getGateyPlugin as Ft}from"@smart-cloud/gatey-core";async function Ke(){let t=await Mt()?.plugins?.aiKit?.features.store;return X(t).getConfig()??{}}function Me(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function Dt(e){if(e.mode)return e.mode;let{transport:t}=Me(e);return t?"backend-fallback":"local-only"}async function F(e){let t=await Ke(),{transport:n,backendApiName:r,backendBaseUrl:a}=Me(t);if(!n)return{available:!1,reason:"No backend configured"};if(n==="fetch"){if(!a)return{available:!1,reason:"backendBaseUrl is missing"};let s=await W({transport:n,baseUrl:a});return e&&!j(s,e)?{available:!1,transport:n,baseUrl:a,compatibility:s,reason:`Backend does not support ${e}.`}:{available:!0,transport:n,baseUrl:a,compatibility:s,reason:"Custom fetch backend"}}if(!r)return{available:!1,reason:"backendApiName is missing"};let o=Ft();if(!o?.availability||await o.availability()!=="available")return{available:!1,reason:"Gatey is not available"};let i=await W({transport:n,apiName:r});return e&&!j(i,e)?{available:!1,transport:n,apiName:r,compatibility:i,reason:`Backend does not support ${e}.`}:{available:!0,transport:n,apiName:r,compatibility:i,reason:"Gatey backend"}}function B(e){return typeof globalThis[e]<"u"}function De(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function ee(e,t){return e?.find(n=>n.brand===t)?.version}async function _t(){let e=navigator?.userAgentData;if(e){try{let n=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(n)&&n.length>0)return n}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function Nt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?De(t[1]):void 0}function zt(){return!!navigator?.brave}async function Vt(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",n=await _t(),r=ee(n,"Microsoft Edge")??ee(n,"Microsoft Edge WebView2"),a=ee(n,"Google Chrome")??ee(n,"Chromium"),o=!!r||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),i=/\bOPR\//i.test(t),s=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),d=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=zt()||/\bBrave\//i.test(t);if(o||i||s||u||c||d||l)return{allowed:!1,reason:o?"edge":l?"brave":c?"firefox":d?"safari":i?"opera":s?"vivaldi":u?"samsung":"unsupported-browser"};let m=De(a)??Nt(t),g=Fe[e];return g?m?m<g?{allowed:!1,reason:`chrome-too-old-${m}-lt-${g}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function Ue(e,t){try{let n=await Vt(e),r=`browser-gate:${n.reason}${n.chromeMajor?` (chrome ${n.chromeMajor})`:""}`;if(!n.allowed)return{available:!1,status:"unavailable",reason:r};let a=o=>o==="unavailable"?Ut.has(e)?"requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics":"check hardware requirements or see AI-Kit Diagnostics":r;switch(e){case"writer":{if(!B("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Writer.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"rewriter":{if(!B("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Rewriter.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"summarizer":{if(!B("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Summarizer.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"proofreader":{if(!B("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Proofreader.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"language-detector":{if(!B("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await LanguageDetector.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"translator":{if(!B("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:r};let o=t;if(!o?.sourceLanguage||!o?.targetLanguage)return{available:!1,status:"error",reason:r,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let i=await Translator.availability({...o,sourceLanguage:o.sourceLanguage==="auto"?"en":o.sourceLanguage,targetLanguage:o.sourceLanguage==="auto"||o.sourceLanguage===o.targetLanguage?"hu":o.targetLanguage});return{available:i!=="unavailable",status:i,reason:a(i)}}case"prompt":{if(!B("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await LanguageModel.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}default:return{available:!1,status:"unknown-feature",reason:r}}}catch(n){return{available:!1,status:"error",reason:"exception in availability()",error:n}}}function I(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function te(e,t,n,r="admin"){let a=await Ke(),o=n||Dt(a),i=await F(Ie(r,e)),s=await Ue(e,t),u=s.available,c=i.available,d={feature:e,mode:o,onDeviceAvailable:u,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:c,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason,backendCompatibility:i.compatibility};return o==="local-only"?u?{...d,source:"on-device",reason:`local-only, on-device available (${s.reason??s.status})`}:{...d,source:"none",reason:`local-only, but on-device unavailable (${s.reason??s.status})`}:o==="backend-only"?c?{...d,source:"backend",reason:`backend-only, backend available (${i.reason??"n/a"})`}:{...d,source:"none",reason:`backend-only, but backend unavailable (${i.reason??"n/a"})`}:u?{...d,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:c?{...d,source:"backend",reason:`backend-fallback, using backend (${i.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...d,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${i.reason??"n/a"})`}}var Fe,Ut,pe=S(()=>{"use strict";J();Z();Fe={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},Ut=new Set(["writer","rewriter","proofreader","prompt"])});var je={};ie(je,{dispatchCustomBackend:()=>nn,dispatchFeatureBackend:()=>U,withRecaptchaHeaders:()=>q});import{getGateyPlugin as $t}from"@smart-cloud/gatey-core";import{getRecaptcha as Wt,getWpSuite as jt}from"@smart-cloud/wpsuite-core";function qt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function Ht(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function Gt(e,t){let n=Ht(t);if(n<=0)return!1;let r=Ne.get(e);return r?Date.now()-r<n:!1}function ge(e,t){let n=qt(t);n&&Ne.set(e,n)}function ze(e,t){if(e!=="frontend"||!$e(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Ve(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let n=Object.keys(e).find(a=>a.toLowerCase()===t.toLowerCase());if(!n)return;let r=e[n];return typeof r=="string"&&r?r:void 0}async function Yt(e,t){if(e!=="frontend")return;let n=jt()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&Gt(t.cacheKey,R()?.settings||{}))return;let{execute:r}=await Wt(n?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let o=await r(n.reCaptchaPublicKey,{action:"generate"});return typeof o=="string"&&o?o:void 0}catch{return}}async function q(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await Yt(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function D(e,t){try{e?.onStatus?.(t)}catch{}}function $e(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Xt(e,t){if(!$e(t))return t;let n=Qt[e];if(!n)return t;let r={};for(let a of n)a in t&&(r[a]=t[a]);return r}function en(e,t){return(e==="admin"?Jt:Zt)[t]}function tn(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function U(e,t,n,r,a={}){let o=en(t,n);if(!o)throw new T(`No backend path configured for "${n}" (${t}).`,e);let i=Xt(n,r);return We(e,t,n,o,"POST",i,a)}async function nn(e,t,n,r,a,o={}){let i=Ee(t,n);if(i){let u=await W({transport:e.backendTransport??"gatey",apiName:e.backendApiName,baseUrl:e.backendBaseUrl});if(!j(u,i))throw new T(`Backend does not support ${i}.`,{...e,backendCompatibility:u})}let s=tn(t,n);return We(e,t,"prompt",s,r,a,o)}async function We(e,t,n,r,a,o,i={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new T("backendTransport=fetch but backendBaseUrl is missing.",e);return rn(e.backendBaseUrl,r,a,o,i,e,n,t)}if(!e.backendApiName)throw new T("backendTransport=gatey but backendApiName is missing.",e);return an(e.backendApiName,r,a,o,i,e,n,t)}async function rn(e,t,n,r,a,o,i,s){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...a.headers??{}},d=i==="prompt"?ze(s,r):void 0,l=await q(s,c,{cacheKey:d}),m=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([b,k])=>[b,String(k)])).toString():"";D(a,{feature:i,context:s,step:"backend:request",source:"backend"}),D(a,{feature:i,context:s,step:"backend:waiting",source:"backend"});let g=await fetch(u+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:a.signal,credentials:"omit"});if(D(a,{feature:i,context:s,step:"backend:response",source:"backend"}),!g.ok){let b=`HTTP ${g.status}`;try{let k=await g.text();k&&(b=`${b}: ${k.substring(0,400)}`)}catch{}throw new T(`Fetch backend call failed: ${b}`,o,g.status)}let y=g.headers.get("content-type")||"",f=Ve(g.headers,"x-recaptcha-verified-at");if(y.includes("application/json")){let b=await g.json(),k=(b&&typeof b.sessionId=="string"&&b.sessionId.trim()?b.sessionId.trim():void 0)??d;return f&&k&&ge(k,f),b}return f&&d&&ge(d,f),await g.text()}async function an(e,t,n,r,a,o,i,s){let u=$t(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new T(`Unsupported HTTP method "${n}" for Gatey backend.`,o)}if(!c)throw new T(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,o);let d=i==="prompt"?ze(s,r):void 0,l=await q(s,{...a.headers??{}},{cacheKey:d});D(a,{feature:i,context:s,step:"backend:request",source:"backend"}),D(a,{feature:i,context:s,step:"backend:waiting",source:"backend"});let m=c({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response,y=Ve(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??d;return y&&typeof b=="string"&&b.trim()&&ge(b.trim(),y),D(a,{feature:i,context:s,step:"backend:response",source:"backend"}),f}var Ne,Qt,Jt,Zt,me=S(()=>{"use strict";Q();le();Z();Ne=new Map;Qt={prompt:["text","audio","audioUrl","systemPrompt","context","maxTokens","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","topK","temperature","userSelectedCategories","userSelectedSubcategories","userSelectedTags"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};Jt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Zt={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function on(e,t,n){let r=-1;for(let a=n-1;a>=t;a--){let o=e[a],i=a+1<e.length?e[a+1]:"";if((o==="."||o==="!"||o==="?")&&(i===" "||i===`
2
+ `||i==="\r"||a===e.length-1)){r=a+1;break}}return r>t+(n-t)*.5?r:-1}function sn(e,t,n){let r=-1;for(let a=n-1;a>=t;a--){let o=e[a],i=a+1<e.length?e[a+1]:"";if((o===","||o===";"||o===":")&&(i===" "||i===`
3
+ `||i==="\r")){r=a+1;break}}return r>t+(n-t)*.5?r:-1}function ne(e,t){let n=[],r=0;for(;r<e.length;){let a=Math.min(r+t,e.length);if(a<e.length){let i=e.lastIndexOf(`
4
4
 
5
- `,o);if(s>r+t*.5)o=s+2;else{let i=Ft(e,r,o);if(i>0)o=i;else{let u=Kt(e,r,o);if(u>0)o=u;else{let c=e.lastIndexOf(" ",o);c>r+t*.5&&(o=c+1)}}}}let a=e.substring(r,o).trim();a.length>0&&n.push({text:a,start:r,end:o}),r=o}return n}var Oe=x(()=>{"use strict"});var Ve={};Z(Ve,{detectLanguage:()=>tn,getPromptOptions:()=>je,getProofreadOptions:()=>Ke,getRewriteOptions:()=>Fe,getSummarizeOptions:()=>De,getTranslateOptions:()=>Ue,getWriteOptions:()=>Me,prompt:()=>ln,proofread:()=>Yt,rewrite:()=>Zt,sendChatMessage:()=>dn,sendFeedbackMessage:()=>pn,sendSearchMessage:()=>gn,summarize:()=>en,translate:()=>_,write:()=>Jt});import{getGateyPlugin as Dt}from"@smart-cloud/gatey-core";import{getWpSuite as Ee}from"@smart-cloud/wpsuite-core";import{I18n as ce}from"aws-amplify/utils";function ie(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(ie).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+ie(t[r])).join(",")+"}"}function Ut(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function zt(e,t){return`${e}:${Ut(ie(t))}`}function se(){let e=new Map;for(let n of A.values()){let r=e.get(n.kind)??[];r.push(n),e.set(n.kind,r)}for(let[n,r]of e.entries())if(!(r.length<=Be)){r.sort((o,a)=>o.refCount-a.refCount||o.lastUsed-a.lastUsed||o.key.localeCompare(a.key));for(let o of r){if(e.get(n).length<=Be)break;if(!(o.refCount>0)){try{o.destroy()}catch{}A.delete(o.key),e.set(n,(e.get(n)??[]).filter(a=>a.key!==o.key))}}}if(A.size<=Re)return;let t=Array.from(A.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(A.size<=Re)break;if(!(n.refCount>0)){try{n.destroy()}catch{}A.delete(n.key)}}}async function B(e,t,n,r){let o=zt(e,t),a=A.get(o);if(a)return a.refCount++,a.lastUsed=Date.now(),A.delete(o),A.set(o,a),{model:a.model,fromCache:!0,release:()=>{let u=A.get(o);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),se())}};let s=W.get(o);if(s)return s;let i=(async()=>{let u=await n(),c={kind:e,key:o,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>r(u)};return A.set(o,c),W.delete(o),se(),{model:u,fromCache:!1,release:()=>{let p=A.get(o);p&&(p.refCount=Math.max(0,p.refCount-1),p.lastUsed=Date.now(),se())}}})().catch(u=>{throw W.delete(o),u});return W.set(o,i),i}function S(){return(Ee()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function d(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function D(){return Ee()?.plugins?.aiKit?.settings?.sharedContext??void 0}function T(e){return e?.context??"admin"}function E(e,t=Wt){let n=new AbortController,r=e?.signal,o=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,a=typeof o=="number"?o:t,s,i=!1,u=()=>{if(n.signal.aborted)return;let c=typeof r?.reason<"u"?r?.reason:void 0;n.abort(c??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?u():r.addEventListener("abort",u)),a&&a>0&&(s=setTimeout(()=>{n.signal.aborted||(i=!0,n.abort(new ue(a)))},a)),{signal:n.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),r&&r.removeEventListener("abort",u)}}}function Q(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function _t(e,t,n,r){let o=Q(e),a=await qe(e.images,n,t,r);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
6
- `),systemPrompt:e.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
7
- `),images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!1,responseConstraint:e.responseConstraint,...o}}async function Nt(e,t,n,r){let o=Q(e),a=await qe(e.images,n,t,r),s=await He(e.audio,n,t,r);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,audio:s?.audio,audioUrl:s?.audioUrl,context:e.sessionId?void 0:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!0,...o}}async function qt(e,t,n,r){let o=Q(e),a=await He(e.audio,n,t,r);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:a?.audio,audioUrl:a?.audioUrl,maxTokens:e.maxTokens,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...o}}async function Ht(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function jt(e){let t=Q(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function Vt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function $t(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Gt(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Qt(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Xt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function I(e,t,n,r,o,a,s,i){d(r,e,i,{step:"decide",message:"Deciding capability",silent:n});let u=await $(r,o,t);d(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:n});let c=!1;if(u.source==="on-device")try{let l=await a();return d(r,e,i,{step:"done",source:"on-device",silent:n}),l}catch(l){console.error(`Error in on-device ${r}:`,l),d(r,e,i,{step:"error",source:"on-device",message:l.message,silent:n}),i?.signal?.throwIfAborted(),l instanceof DOMException&&l.name==="QuotaExceededError"&&(c=!0)}if(u.mode!=="local-only"&&u.backendAvailable){d(r,e,i,{step:"backend:request",source:"backend",silent:n});let l=typeof s=="function"?await s(u):s,m=await K(u,e,r,l,i);return d(r,e,i,{step:"done",source:"backend",silent:n}),m}let p=c?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":u.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${p}`)}function nn(e){let t=Array.isArray(e.images)&&e.images.length>0,n=e.images??[],r=t?n.map(a=>({type:"image",value:a})):[],o;if(typeof e.messages=="string")o=t?[{role:"user",content:[{type:"text",value:e.messages},...r]}]:e.messages;else{let a=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=a.length-1;i>=0;i--)if(a[i].role==="user"){s=i;break}if(s===-1)a.push({role:"user",content:[{type:"text",value:""},...r]});else{let i=String(a[s].content??"");a[s]={...a[s],content:[{type:"text",value:i},...r]}}}o=a}return o}function rn(e){return typeof Blob<"u"&&e instanceof Blob}function an(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function on(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function sn(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":(t.includes("webm"),"webm")}function un(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":"webm"}async function cn(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function We(e){let t=await cn(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function _e(e,t,n,r,o,a){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...a?.headers??{}},u=await z(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("Backend base URL not available for signed URL request");let g=new URLSearchParams({fileName:n,contentType:r,contentLength:String(o)}).toString(),y=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${g}`,f=await fetch(y,{method:"GET",headers:u,signal:a?.signal,credentials:"omit"});if(!f.ok){let h=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${h?": "+h.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=Dt(),p={fileName:n,contentType:r,contentLength:o};if(c?.cognito?.get){let g=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(p).reduce((f,b)=>(f[b]=String(p[b]),f),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(f=>f.body.json());if(!y?.uploadUrl||!y?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:y.uploadUrl,key:y.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:p,headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(g=>g.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function Ne(e,t,n,r){let o=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.signal});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${o.status}${a?": "+a.substring(0,200):""}`)}}async function qe(e,t,n,r){if(!e||e.length===0)return;let o=[];for(let c of e){if(!rn(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");o.push(c)}let a=o.reduce((c,p)=>c+(p.size||0),0);if(Math.ceil(a*1.37+2048*o.length)<=ze){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let p of o)c.push({format:on(p.type),data:await We(p)});return{images:c}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<o.length;c++){let p=o[c],l=p.type||"application/octet-stream",m=p.name||`image_${c}.${an(l)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await _e(t,n,m,l,p.size||0,r);d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Ne(g,p,l,r),u.push(y)}return{imageUrls:u}}async function He(e,t,n,r){if(!e)return;let o=e.size||0;if(Math.ceil(o*1.37+2048)<=ze){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=un(e.type||"audio/webm"),m=await We(e);return{audio:{format:l,data:m}}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||`audio.${sn(i)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:p}=await _e(t,n,u,i,e.size||0,r);return d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await Ne(c,e,i,r),{audioUrl:p}}var Re,Be,A,W,Wt,Ie,ue,Me,Jt,Fe,Zt,Ke,Yt,De,en,tn,Ue,_,ze,je,ln,dn,gn,pn,$e=x(()=>{"use strict";oe();re();Qe();Oe();Re=8,Be=2,A=new Map,W=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of A.values())try{e.destroy()}catch{}A.clear(),W.clear()});Wt=45e3,Ie=5e3,ue=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Me=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Jt=async(e,t)=>{let n=T(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=Me({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=E(t);try{let{model:c,release:p}=await B("writer",{core:i,sharedContext:r},()=>Writer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("writer",n,t,{step:"on-device:ready",source:"on-device"});try{d("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await c.measureInputUsage(e.prompt,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=G(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let U=ce.get("Writing part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));d("writer",n,t,{step:"on-device:run",source:"on-device",message:U});let J=await c.write(f[h].text,{context:e.context,signal:u.signal});b.push(J)}l=b.join(`
5
+ `,a);if(i>r+t*.5)a=i+2;else{let s=on(e,r,a);if(s>0)a=s;else{let u=sn(e,r,a);if(u>0)a=u;else{let c=e.lastIndexOf(" ",a);c>r+t*.5&&(a=c+1)}}}}let o=e.substring(r,a).trim();o.length>0&&n.push({text:o,start:r,end:a}),r=a}return n}var qe=S(()=>{"use strict"});var ct={};ie(ct,{detectLanguage:()=>Sn,getPromptOptions:()=>ut,getProofreadOptions:()=>Ze,getRewriteOptions:()=>Je,getSummarizeOptions:()=>et,getTranslateOptions:()=>tt,getWriteOptions:()=>Xe,prompt:()=>Kn,proofread:()=>Pn,rewrite:()=>An,sendChatMessage:()=>Mn,sendFeedbackMessage:()=>Dn,sendSearchMessage:()=>Fn,summarize:()=>xn,translate:()=>G,write:()=>vn});import{getGateyPlugin as un}from"@smart-cloud/gatey-core";import{getWpSuite as Ye}from"@smart-cloud/wpsuite-core";import{I18n as we}from"aws-amplify/utils";function be(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(be).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+be(t[r])).join(",")+"}"}function cn(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function ln(e,t){return`${e}:${cn(be(t))}`}function fe(){let e=new Map;for(let n of x.values()){let r=e.get(n.kind)??[];r.push(n),e.set(n.kind,r)}for(let[n,r]of e.entries())if(!(r.length<=Ge)){r.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of r){if(e.get(n).length<=Ge)break;if(!(a.refCount>0)){try{a.destroy()}catch{}x.delete(a.key),e.set(n,(e.get(n)??[]).filter(o=>o.key!==a.key))}}}if(x.size<=He)return;let t=Array.from(x.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(x.size<=He)break;if(!(n.refCount>0)){try{n.destroy()}catch{}x.delete(n.key)}}}async function E(e,t,n,r){let a=ln(e,t),o=x.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),x.delete(a),x.set(a,o),{model:o.model,fromCache:!0,release:()=>{let u=x.get(a);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),fe())}};let i=H.get(a);if(i)return i;let s=(async()=>{let u=await n(),c={kind:e,key:a,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>r(u)};return x.set(a,c),H.delete(a),fe(),{model:u,fromCache:!1,release:()=>{let d=x.get(a);d&&(d.refCount=Math.max(0,d.refCount-1),d.lastUsed=Date.now(),fe())}}})().catch(u=>{throw H.delete(a),u});return H.set(a,s),s}function L(){return(Ye()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function p(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function _(){return Ye()?.plugins?.aiKit?.settings?.sharedContext??void 0}function O(e){return e?.context??"admin"}function K(e,t=dn){let n=new AbortController,r=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,i,s=!1,u=()=>{if(n.signal.aborted)return;let c=typeof r?.reason<"u"?r?.reason:void 0;n.abort(c??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?u():r.addEventListener("abort",u)),o&&o>0&&(i=setTimeout(()=>{n.signal.aborted||(s=!0,n.abort(new ye(o)))},o)),{signal:n.signal,timedOut:()=>s,dispose:()=>{i&&(clearTimeout(i),i=void 0),r&&r.removeEventListener("abort",u)}}}function re(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 pn(e,t,n,r){let a=re(e),o=await it(e.images,n,t,r);return{text:e.messages.filter(i=>i.role==="user").map(i=>i.content).join(`
6
+ `),systemPrompt:e.messages.filter(i=>i.role==="system").map(i=>i.content).join(`
7
+ `),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function gn(e,t,n,r){let a=re(e),o=await it(e.images,n,t,r),i=await st(e.audio,n,t,r);return{sessionId:e.sessionId,text:e.message,images:o?.images,imageUrls:o?.imageUrls,audio:i?.audio,audioUrl:i?.audioUrl,context:e.sessionId?void 0:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!0,...a}}async function mn(e,t,n,r){let a=re(e),o=await st(e.audio,n,t,r);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:o?.audio,audioUrl:o?.audioUrl,maxTokens:e.maxTokens,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...a}}async function fn(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function bn(e){let t=re(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 yn(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 wn(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 kn(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function hn(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Cn(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function M(e,t,n,r,a,o,i,s){p(r,e,s,{step:"decide",message:"Deciding capability",silent:n});let u=await te(r,a,t,e);p(r,e,s,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:n});let c=!1;if(u.source==="on-device")try{let l=await o();return p(r,e,s,{step:"done",source:"on-device",silent:n}),l}catch(l){console.error(`Error in on-device ${r}:`,l),p(r,e,s,{step:"error",source:"on-device",message:l.message,silent:n}),s?.signal?.throwIfAborted(),l instanceof DOMException&&l.name==="QuotaExceededError"&&(c=!0)}if(u.mode!=="local-only"&&u.backendAvailable){p(r,e,s,{step:"backend:request",source:"backend",silent:n});let l=typeof i=="function"?await i(u):i,m=await U(u,e,r,l,s);return p(r,e,s,{step:"done",source:"backend",silent:n}),m}let d=c?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":u.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${d}`)}function Tn(e){let t=Array.isArray(e.images)&&e.images.length>0,n=e.images??[],r=t?n.map(o=>({type:"image",value:o})):[],a;if(typeof e.messages=="string")a=t?[{role:"user",content:[{type:"text",value:e.messages},...r]}]:e.messages;else{let o=e.messages.filter(i=>i.role!=="system").map(i=>({role:i.role==="assistant"?"assistant":"user",content:i.content}));if(t){let i=-1;for(let s=o.length-1;s>=0;s--)if(o[s].role==="user"){i=s;break}if(i===-1)o.push({role:"user",content:[{type:"text",value:""},...r]});else{let s=String(o[i].content??"");o[i]={...o[i],content:[{type:"text",value:s},...r]}}}a=o}return a}function Ln(e){return typeof Blob<"u"&&e instanceof Blob}function On(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Rn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function Bn(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 In(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 En(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function rt(e){let t=await En(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function at(e,t,n,r,a,o){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");let i=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",s={...o?.headers??{}},u=await q(t,s);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("Backend base URL not available for signed URL request");let g=new URLSearchParams({fileName:n,contentType:r,contentLength:String(a)}).toString(),y=`${e.backendBaseUrl.replace(/\/+$/,"")}${i}?${g}`,f=await fetch(y,{method:"GET",headers:u,signal:o?.signal,credentials:"omit"});if(!f.ok){let k=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${k?": "+k.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=un(),d={fileName:n,contentType:r,contentLength:a};if(c?.cognito?.get){let g=c.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((f,b)=>(f[b]=String(d[b]),f),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(f=>f.body.json());if(!y?.uploadUrl||!y?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:y.uploadUrl,key:y.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(g=>g.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function ot(e,t,n,r){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.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 it(e,t,n,r){if(!e||e.length===0)return;let a=[];for(let c of e){if(!Ln(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(c)}let o=a.reduce((c,d)=>c+(d.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=nt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let d of a)c.push({format:Rn(d.type),data:await rt(d)});return{images:c}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<a.length;c++){let d=a[c],l=d.type||"application/octet-stream",m=d.name||`image_${c}.${On(l)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await at(t,n,m,l,d.size||0,r);p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await ot(g,d,l,r),u.push(y)}return{imageUrls:u}}async function st(e,t,n,r){if(!e)return;let a=e.size||0;if(Math.ceil(a*1.37+2048)<=nt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=In(e.type||"audio/webm"),m=await rt(e);return{audio:{format:l,data:m}}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let s=e.type||"audio/webm",u=e.name||`audio.${Bn(s)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:d}=await at(t,n,u,s,e.size||0,r);return p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await ot(c,e,s,r),{audioUrl:d}}var He,Ge,x,H,dn,Qe,ye,Xe,vn,Je,An,Ze,Pn,et,xn,Sn,tt,G,nt,ut,Kn,Mn,Fn,Dn,lt=S(()=>{"use strict";me();pe();pt();qe();He=8,Ge=2,x=new Map,H=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of x.values())try{e.destroy()}catch{}x.clear(),H.clear()});dn=45e3,Qe=5e3,ye=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:L(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},vn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;I(a)||(i=!0,a="en");let s=Xe({...e,outputLanguage:a});return M(n,t?.modeOverride,!1,"writer",s,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");p("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=K(t);try{let{model:c,release:d}=await E("writer",{core:s,sharedContext:r},()=>Writer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("writer",n,t,{step:"on-device:ready",source:"on-device"});try{p("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await c.measureInputUsage(e.prompt,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=ne(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let k=0;k<f.length;k++){let N=we.get("Writing part {current}/{total}...").replace("{current}",String(k+1)).replace("{total}",String(f.length));p("writer",n,t,{step:"on-device:run",source:"on-device",message:N});let oe=await c.write(f[k].text,{context:e.context,signal:u.signal});b.push(oe)}l=b.join(`
8
8
 
9
- `)}}return m||(l=await c.write(e.prompt,{context:e.context,signal:u.signal})),s?{result:(await _({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{p()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},jt({...e,sharedContext:r,outputLanguage:a}),t)},Fe=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Zt=async(e,t)=>{let n=T(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=Fe({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",n,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=E(t);try{let{model:c,release:p}=await B("rewriter",{core:i,sharedContext:r},()=>Rewriter.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l="",m=!1,g=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=G(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let U=ce.get("Rewriting part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:U});let J=await c.rewrite(f[h].text,{context:e.context,signal:u.signal});b.push(J)}l=b.join(`
9
+ `)}}return m||(l=await c.write(e.prompt,{context:e.context,signal:u.signal})),i?{result:(await G({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:u.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},bn({...e,sharedContext:r,outputLanguage:o}),t)},Je=e=>{let t=e.outputLanguage?e.outputLanguage:L(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},An=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;I(a)||(i=!0,a="en");let s=Je({...e,outputLanguage:a});return M(n,t?.modeOverride,!1,"rewriter",s,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");p("rewriter",n,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=K(t);try{let{model:c,release:d}=await E("rewriter",{core:s,sharedContext:r},()=>Rewriter.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{p("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l="",m=!1,g=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=ne(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let k=0;k<f.length;k++){let N=we.get("Rewriting part {current}/{total}...").replace("{current}",String(k+1)).replace("{total}",String(f.length));p("rewriter",n,t,{step:"on-device:run",source:"on-device",message:N});let oe=await c.rewrite(f[k].text,{context:e.context,signal:u.signal});b.push(oe)}l=b.join(`
10
10
 
11
- `)}}return m||(l=await c.rewrite(e.text,{context:e.context,signal:u.signal})),s?{result:(await _({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{p()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},Vt({...e,sharedContext:r,outputLanguage:a}),t)},Ke=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Yt=async(e,t)=>{let n=T(t),r=await Ke();return I(n,t?.modeOverride,!1,"proofreader",r,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",n,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let o=E(t);try{let{model:a,release:s}=await B("proofreader",{core:r},()=>Proofreader.create({...r,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),i=>i.destroy());d("proofreader",n,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",n,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await a.proofread(e.text,{signal:o.signal})}}finally{try{s()}catch(i){console.error("Error destroying proofreader:",i)}}}finally{o.dispose()}},Xt(e),t)},De=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},en=async(e,t)=>{let n=T(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=await De({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"summarizer",i,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=E(t);try{let{model:c,release:p}=await B("summarizer",{core:i,sharedContext:r},()=>Summarizer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),m=c.inputQuota;if(l>m){let y=G(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let X=ce.get("Summarizing part {current}/{total}...").replace("{current}",String(b+1)).replace("{total}",String(y.length));d("summarizer",n,t,{step:"on-device:run",source:"on-device",message:X});let U=await c.summarize(y[b].text,{context:e.context,signal:u.signal});f.push(U)}e.text=f.join(`
11
+ `)}}return m||(l=await c.rewrite(e.text,{context:e.context,signal:u.signal})),i?{result:(await G({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:u.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},yn({...e,sharedContext:r,outputLanguage:o}),t)},Ze=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Pn=async(e,t)=>{let n=O(t),r=await Ze();return M(n,t?.modeOverride,!1,"proofreader",r,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");p("proofreader",n,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=K(t);try{let{model:o,release:i}=await E("proofreader",{core:r},()=>Proofreader.create({...r,monitor(s){s.addEventListener("downloadprogress",u=>{let c=u.loaded;p("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),s=>s.destroy());p("proofreader",n,t,{step:"on-device:ready",source:"on-device"});try{return p("proofreader",n,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await o.proofread(e.text,{signal:a.signal})}}finally{try{i()}catch(s){console.error("Error destroying proofreader:",s)}}}finally{a.dispose()}},Cn(e),t)},et=e=>{let t=e.outputLanguage?e.outputLanguage:L(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},xn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;I(a)||(i=!0,a="en");let s=await et({...e,outputLanguage:a});return M(n,t?.modeOverride,!1,"summarizer",s,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");p("summarizer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=K(t);try{let{model:c,release:d}=await E("summarizer",{core:s,sharedContext:r},()=>Summarizer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{p("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),m=c.inputQuota;if(l>m){let y=ne(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let ae=we.get("Summarizing part {current}/{total}...").replace("{current}",String(b+1)).replace("{total}",String(y.length));p("summarizer",n,t,{step:"on-device:run",source:"on-device",message:ae});let N=await c.summarize(y[b].text,{context:e.context,signal:u.signal});f.push(N)}e.text=f.join(`
12
12
 
13
- `)}}let g=await c.summarize(e.text,{context:e.context,signal:u.signal});return s?{result:(await _({text:g,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:g}}finally{try{p()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{u.dispose()}},$t({...e,sharedContext:r,outputLanguage:a}),t)},tn=async(e,t)=>{let n=T(t);return I(n,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let r=E(t,Ie);try{let{model:o,release:a}=await B("language-detector",{},()=>LanguageDetector.create({monitor(s){s.addEventListener("downloadprogress",i=>{let u=i.loaded;d("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),s=>s.destroy());d("language-detector",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",n,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await o.detect(e.text,{signal:r.signal})).filter(i=>Ge.find(u=>u.value===i.detectedLanguage))}}}finally{try{a()}catch(s){console.error("Error destroying language detector:",s)}}}finally{r.dispose()}},Qt(e.text,t),t)},Ue=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??S()??"en"};return Promise.resolve(t)},_=async(e,t)=>{let n=T(t),r=await Ue({...e});return I(n,t?.modeOverride,t?.silent,"translator",r,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",n,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let o=E(t,Ie);try{let{model:a,release:s}=await B("translator",{core:r},()=>Translator.create({...r,monitor(i){i.addEventListener("downloadprogress",u=>{let c=u.loaded;d("translator",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),i=>i.destroy());d("translator",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",n,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let i=[],u=()=>{if(typeof o.signal.throwIfAborted=="function")o.signal.throwIfAborted();else if(o.signal.aborted)throw o.signal.reason??new DOMException("Aborted","AbortError")};for(let p of e.text.split(`
14
- `))u(),i.push(a.translate(p.trim()));return{result:(await Promise.all(i)).join(`
15
- `)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{o.dispose()}},Gt(e.text,e.sourceLanguage,e.targetLanguage),t)};ze=4*1024*1024;je=async e=>{let t=e.outputLanguage?e.outputLanguage:S();return R(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},ln=async(e,t)=>{let n=T(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=await je({...e,outputLanguage:o}),u=await $("prompt",i,t?.modeOverride);return I(n,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");d("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&c.push(g.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let p=c.length>0?c.join(`
13
+ `)}}let g=await c.summarize(e.text,{context:e.context,signal:u.signal});return i?{result:(await G({text:g,sourceLanguage:a,targetLanguage:o},{context:n,signal:u.signal})).result}:{result:g}}finally{try{d()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{u.dispose()}},wn({...e,sharedContext:r,outputLanguage:o}),t)},Sn=async(e,t)=>{let n=O(t);return M(n,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");p("language-detector",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let r=K(t,Qe);try{let{model:a,release:o}=await E("language-detector",{},()=>LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",s=>{let u=s.loaded;p("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),i=>i.destroy());p("language-detector",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return p("language-detector",n,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await a.detect(e.text,{signal:r.signal})).filter(s=>dt.find(u=>u.value===s.detectedLanguage))}}}finally{try{o()}catch(i){console.error("Error destroying language detector:",i)}}}finally{r.dispose()}},hn(e.text,t),t)},tt=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??L()??"en"};return Promise.resolve(t)},G=async(e,t)=>{let n=O(t),r=await tt({...e});return M(n,t?.modeOverride,t?.silent,"translator",r,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");p("translator",n,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let a=K(t,Qe);try{let{model:o,release:i}=await E("translator",{core:r},()=>Translator.create({...r,monitor(s){s.addEventListener("downloadprogress",u=>{let c=u.loaded;p("translator",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),s=>s.destroy());p("translator",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{p("translator",n,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let s=[],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 d of e.text.split(`
14
+ `))u(),s.push(o.translate(d.trim()));return{result:(await Promise.all(s)).join(`
15
+ `)}}finally{try{i()}catch(s){console.error("Error destroying translator:",s)}}}finally{a.dispose()}},kn(e.text,e.sourceLanguage,e.targetLanguage),t)};nt=4*1024*1024;ut=async e=>{let t=e.outputLanguage?e.outputLanguage:L();return I(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Kn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;I(a)||(i=!0,a="en");let s=await ut({...e,outputLanguage:a}),u=await te("prompt",s,t?.modeOverride,n);return M(n,t?.modeOverride,!1,"prompt",s,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");p("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&c.push(g.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let d=c.length>0?c.join(`
16
16
 
17
- `):void 0,l=p?[{role:"system",content:p}]:void 0,m=E(t);try{let{model:g,release:y}=await B("language-model",{core:i,initialPrompts:l},()=>LanguageModel.create({...i,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let h=b.loaded;d("prompt",n,t,{step:"on-device:download",source:"on-device",progress:h,loaded:h})})}}),f=>f.destroy());d("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(nn(e),{signal:m.signal,responseConstraint:e.responseConstraint});return s?{result:(await _({text:f,sourceLanguage:o,targetLanguage:a},{context:n,signal:m.signal})).result}:{result:f}}finally{try{y()}catch(f){console.error("Error destroying LanguageModel:",f)}}}finally{m.dispose()}},await _t({...e,sharedContext:r},n,u,t),t)},dn=async(e,t)=>{let n=T(t),r=e.sharedContext??D(),o="prompt",a=await M(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await Nt({sessionId:e.sessionId,message:e.message,audio:e.audio,images:e.images,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await K(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},gn=async(e,t)=>{let n=T(t),r=e.sharedContext??D(),o="prompt",a=await M(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await qt({...e,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await K(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},pn=async(e,t)=>{let n="frontend",r="prompt",o=await M(),a={feature:r,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await Ht({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});d(r,n,t,{step:"backend:request",source:"backend"});let i=await K(a,n,r,s,t);return d(r,n,t,{step:"done",source:"backend"}),i}});import{attachDefaultPluginRuntime as mn}from"@smart-cloud/wpsuite-core";import{__ as C}from"@wordpress/i18n";var Ge,N,Jn,Zn,Yn,er,tr,fn,nr,w,rr,ar,or,sr,ir,ur,cr,lr,dr,gr,pr,mr,fr,br,yr,wr,hr,Qe=x(()=>{q();j();fe();j();be();ne();Ge=[{label:C("Arabic",k),value:"ar"},{label:C("Chinese",k),value:"zh"},{label:C("Dutch",k),value:"nl"},{label:C("English",k),value:"en"},{label:C("French",k),value:"fr"},{label:C("German",k),value:"de"},{label:C("Hebrew",k),value:"he"},{label:C("Hindi",k),value:"hi"},{label:C("Hungarian",k),value:"hu"},{label:C("Indonesian",k),value:"id"},{label:C("Italian",k),value:"it"},{label:C("Japanese",k),value:"ja"},{label:C("Korean",k),value:"ko"},{label:C("Norwegian",k),value:"no"},{label:C("Polish",k),value:"pl"},{label:C("Portuguese",k),value:"pt"},{label:C("Russian",k),value:"ru"},{label:C("Spanish",k),value:"es"},{label:C("Swedish",k),value:"sv"},{label:C("Thai",k),value:"th"},{label:C("Turkish",k),value:"tr"},{label:C("Ukrainian",k),value:"uk"}],N=Promise.resolve().then(()=>(re(),ve)),Jn=async()=>(await N).MIN_CHROME_VERSION,Zn=async(...e)=>(await N).isOnDeviceLanguageSupported(...e),Yn=async(...e)=>(await N).decideCapability(...e),er=async(...e)=>(await N).checkOnDeviceAvailability(...e),tr=async(...e)=>(await N).resolveBackend(...e),fn=Promise.resolve().then(()=>(oe(),Le)),nr=async(...e)=>(await fn).dispatchCustomBackend(...e),w=Promise.resolve().then(()=>($e(),Ve)),rr=async(...e)=>(await w).getWriteOptions(...e),ar=async(...e)=>(await w).write(...e),or=async(...e)=>(await w).getRewriteOptions(...e),sr=async(...e)=>(await w).rewrite(...e),ir=async(...e)=>(await w).getProofreadOptions(...e),ur=async(...e)=>(await w).proofread(...e),cr=async(...e)=>(await w).getSummarizeOptions(...e),lr=async(...e)=>(await w).summarize(...e),dr=async(...e)=>(await w).getTranslateOptions(...e),gr=async(...e)=>(await w).translate(...e),pr=async(...e)=>(await w).detectLanguage(...e),mr=async(...e)=>(await w).getPromptOptions(...e),fr=async(...e)=>(await w).prompt(...e),br=async(...e)=>(await w).sendChatMessage(...e),yr=async(...e)=>(await w).sendFeedbackMessage(...e),wr=async(...e)=>(await w).sendSearchMessage(...e),hr=(e,t)=>{let n=globalThis.WpSuite,r=L();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");mn(r),r.status=r.status??"initializing";let o=me();return r.features={store:o,renderFeature:async a=>await e({...a,store:await o}),renderSearchComponent:async a=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...a,store:await o})},write:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.write(...a)},rewrite:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.rewrite(...a)},proofread:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.proofread(...a)},summarize:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.summarize(...a)},translate:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.translate(...a)},detectLanguage:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.detectLanguage(...a)},prompt:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.prompt(...a)},sendChatMessage:async(...a)=>(await w).sendChatMessage(...a),sendFeedbackMessage:async(...a)=>(await w).sendFeedbackMessage(...a),sendSearchMessage:async(...a)=>(await w).sendSearchMessage(...a)},o.then(()=>{r.status="available",n?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(a=>{r.status="error",console.error("AiKit plugin failed to initialize:",a),n?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(a)})}),r}});Qe();export{Sn as AiKitChatbotIcon,Tn as AiKitDocSearchIcon,Pn as AiKitFeatureIcon,P as BackendError,Ge as LANGUAGE_OPTIONS,k as TEXT_DOMAIN,er as checkOnDeviceAvailability,Yn as decideCapability,pr as detectLanguage,nr as dispatchBackend,L as getAiKitPlugin,Jn as getMinChromeVersions,mr as getPromptOptions,ir as getProofreadOptions,or as getRewriteOptions,Je as getStore,ut as getStoreDispatch,H as getStoreSelect,cr as getSummarizeOptions,dr as getTranslateOptions,rr as getWriteOptions,hr as initializeAiKit,Zn as isOnDeviceLanguageSupported,lt as observeStore,fr as prompt,ur as proofread,ct as reloadConfig,tr as resolveBackend,sr as rewrite,ee as sanitizeAiKitConfig,br as sendChatMessage,yr as sendFeedbackMessage,wr as sendSearchMessage,lr as summarize,gr as translate,le as waitForAiKitReady,ar as write};
17
+ `):void 0,l=d?[{role:"system",content:d}]:void 0,m=K(t);try{let{model:g,release:y}=await E("language-model",{core:s,initialPrompts:l},()=>LanguageModel.create({...s,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let k=b.loaded;p("prompt",n,t,{step:"on-device:download",source:"on-device",progress:k,loaded:k})})}}),f=>f.destroy());p("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{p("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(Tn(e),{signal:m.signal,responseConstraint:e.responseConstraint});return i?{result:(await G({text:f,sourceLanguage:a,targetLanguage:o},{context:n,signal:m.signal})).result}:{result:f}}finally{try{y()}catch(f){console.error("Error destroying LanguageModel:",f)}}}finally{m.dispose()}},await pn({...e,sharedContext:r},n,u,t),t)},Mn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a="prompt",o=await F(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await gn({sessionId:e.sessionId,message:e.message,audio:e.audio,images:e.images,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let u=await U(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),u},Fn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a="prompt",o=await F(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await mn({...e,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let u=await U(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),u},Dn=async(e,t)=>{let n="frontend",r="prompt",a=await F(),o={feature:r,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await fn({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});p(r,n,t,{step:"backend:request",source:"backend"});let s=await U(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s}});import{attachDefaultPluginRuntime as Un}from"@smart-cloud/wpsuite-core";import{__ as C}from"@wordpress/i18n";var dt,Y,Br,Ir,Er,Kr,Mr,_n,Fr,w,Dr,Ur,_r,Nr,zr,Vr,$r,Wr,jr,qr,Hr,Gr,Yr,Qr,Xr,Jr,Zr,pt=S(()=>{Q();J();Pe();J();xe();le();Oe();Z();dt=[{label:C("Arabic",h),value:"ar"},{label:C("Chinese",h),value:"zh"},{label:C("Dutch",h),value:"nl"},{label:C("English",h),value:"en"},{label:C("French",h),value:"fr"},{label:C("German",h),value:"de"},{label:C("Hebrew",h),value:"he"},{label:C("Hindi",h),value:"hi"},{label:C("Hungarian",h),value:"hu"},{label:C("Indonesian",h),value:"id"},{label:C("Italian",h),value:"it"},{label:C("Japanese",h),value:"ja"},{label:C("Korean",h),value:"ko"},{label:C("Norwegian",h),value:"no"},{label:C("Polish",h),value:"pl"},{label:C("Portuguese",h),value:"pt"},{label:C("Russian",h),value:"ru"},{label:C("Spanish",h),value:"es"},{label:C("Swedish",h),value:"sv"},{label:C("Thai",h),value:"th"},{label:C("Turkish",h),value:"tr"},{label:C("Ukrainian",h),value:"uk"}],Y=Promise.resolve().then(()=>(pe(),_e)),Br=async()=>(await Y).MIN_CHROME_VERSION,Ir=async(...e)=>(await Y).isOnDeviceLanguageSupported(...e),Er=async(...e)=>(await Y).decideCapability(...e),Kr=async(...e)=>(await Y).checkOnDeviceAvailability(...e),Mr=async(...e)=>(await Y).resolveBackend(...e),_n=Promise.resolve().then(()=>(me(),je)),Fr=async(...e)=>(await _n).dispatchCustomBackend(...e),w=Promise.resolve().then(()=>(lt(),ct)),Dr=async(...e)=>(await w).getWriteOptions(...e),Ur=async(...e)=>(await w).write(...e),_r=async(...e)=>(await w).getRewriteOptions(...e),Nr=async(...e)=>(await w).rewrite(...e),zr=async(...e)=>(await w).getProofreadOptions(...e),Vr=async(...e)=>(await w).proofread(...e),$r=async(...e)=>(await w).getSummarizeOptions(...e),Wr=async(...e)=>(await w).summarize(...e),jr=async(...e)=>(await w).getTranslateOptions(...e),qr=async(...e)=>(await w).translate(...e),Hr=async(...e)=>(await w).detectLanguage(...e),Gr=async(...e)=>(await w).getPromptOptions(...e),Yr=async(...e)=>(await w).prompt(...e),Qr=async(...e)=>(await w).sendChatMessage(...e),Xr=async(...e)=>(await w).sendFeedbackMessage(...e),Jr=async(...e)=>(await w).sendSearchMessage(...e),Zr=(e,t)=>{let n=globalThis.WpSuite,r=R();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");Un(r),r.status=r.status??"initializing";let a=Ae();return r.features={store:a,renderFeature:async o=>await e({...o,store:await a}),renderSearchComponent:async o=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...o,store:await a})},write:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.write(...o)},rewrite:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.rewrite(...o)},proofread:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.proofread(...o)},summarize:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.summarize(...o)},translate:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.translate(...o)},detectLanguage:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.detectLanguage(...o)},prompt:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.prompt(...o)},sendChatMessage:async(...o)=>(await w).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await w).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await w).sendSearchMessage(...o)},a.then(()=>{r.status="available",n?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(o=>{r.status="error",console.error("AiKit plugin failed to initialize:",o),n?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(o)})}),r}});pt();export{Qn as AiKitChatbotIcon,Xn as AiKitDocSearchIcon,Yn as AiKitFeatureIcon,T as BackendError,tr as KNOWLEDGE_SYNC_CONTRACT_VERSION,de as KnowledgeSyncContractError,dt as LANGUAGE_OPTIONS,h as TEXT_DOMAIN,Ee as capabilityForCustomPath,Ie as capabilityForFeature,Kr as checkOnDeviceAvailability,ar as compareKnowledgeSourceVersions,Er as decideCapability,Hr as detectLanguage,Fr as dispatchBackend,R as getAiKitPlugin,Br as getMinChromeVersions,Gr as getPromptOptions,zr as getProofreadOptions,_r as getRewriteOptions,mt as getStore,xt as getStoreDispatch,X as getStoreSelect,$r as getSummarizeOptions,jr as getTranslateOptions,Dr as getWriteOptions,Zr as initializeAiKit,Ir as isOnDeviceLanguageSupported,or as knowledgeSyncSourceKey,Tt as observeStore,rr as parseKnowledgeSyncPolicyV1,nr as parsePublicContentProjectionV1,Yr as prompt,Vr as proofread,St as reloadConfig,Mr as resolveBackend,W as resolveBackendCompatibility,Nr as rewrite,ue as sanitizeAiKitConfig,Qr as sendChatMessage,Xr as sendFeedbackMessage,Jr as sendSearchMessage,Wr as summarize,j as supportsBackendCapability,qr as translate,ke as waitForAiKitReady,Ur as write};
@@ -0,0 +1,69 @@
1
+ export declare const KNOWLEDGE_SYNC_CONTRACT_VERSION: 1;
2
+ export type KnowledgeSyncOperation = "upsert" | "delete";
3
+ export type KnowledgeSyncReviewPolicy = "wordpress-publish-is-approval" | "manual-kb-review" | "disabled";
4
+ export interface KnowledgeSyncSourceIdentityV1 {
5
+ producer: "wordpress";
6
+ siteId: string;
7
+ blogId: string;
8
+ postType: string;
9
+ postId: string;
10
+ }
11
+ export interface KnowledgeSyncMetadataTermV1 {
12
+ namespace: string;
13
+ slug: string;
14
+ label: string;
15
+ }
16
+ export interface KnowledgeSyncDocumentV1 {
17
+ profile: string;
18
+ canonicalUrl: string;
19
+ title: string;
20
+ excerpt: string;
21
+ content: string;
22
+ contentType: "text/markdown";
23
+ contentSha256: string;
24
+ modifiedGmt: string;
25
+ metadata: KnowledgeSyncMetadataTermV1[];
26
+ }
27
+ interface KnowledgeSyncProjectionBaseV1 {
28
+ schemaVersion: typeof KNOWLEDGE_SYNC_CONTRACT_VERSION;
29
+ source: KnowledgeSyncSourceIdentityV1;
30
+ sourceVersion: string;
31
+ correlationId: string;
32
+ observedAt: string;
33
+ }
34
+ export type PublicContentProjectionV1 = KnowledgeSyncProjectionBaseV1 & ({
35
+ operation: "upsert";
36
+ document: KnowledgeSyncDocumentV1;
37
+ } | {
38
+ operation: "delete";
39
+ document: null;
40
+ lastPublicUrl?: string;
41
+ });
42
+ export interface KnowledgeSyncPolicyV1 {
43
+ schemaVersion: typeof KNOWLEDGE_SYNC_CONTRACT_VERSION;
44
+ postType: string;
45
+ enabled: boolean;
46
+ autoEnableSource: "administrator" | "migration" | "system";
47
+ reviewPolicy: KnowledgeSyncReviewPolicy;
48
+ onPublish: "upsert";
49
+ onPublishedUpdate: "upsert";
50
+ onUnpublish: "delete";
51
+ metadataRefresh: "reconcile";
52
+ includeTaxonomies: string[];
53
+ documentProfile: string;
54
+ }
55
+ export interface KnowledgeSyncBoundary {
56
+ producer: KnowledgeSyncSourceIdentityV1["producer"];
57
+ siteId: string;
58
+ }
59
+ export type SourceVersionOrder = "older" | "same" | "newer";
60
+ export declare class KnowledgeSyncContractError extends Error {
61
+ readonly code: string;
62
+ readonly field: string;
63
+ constructor(code: string, field: string, message: string);
64
+ }
65
+ export declare function parsePublicContentProjectionV1(value: unknown, boundary?: KnowledgeSyncBoundary): PublicContentProjectionV1;
66
+ export declare function parseKnowledgeSyncPolicyV1(value: unknown): KnowledgeSyncPolicyV1;
67
+ export declare function compareKnowledgeSourceVersions(candidate: string, accepted: string): SourceVersionOrder;
68
+ export declare function knowledgeSyncSourceKey(source: KnowledgeSyncSourceIdentityV1): string;
69
+ export {};
@@ -1,10 +1,11 @@
1
- import type { AiKitLanguageCode, AiModePreference, AnyCreateCoreOptions, BackendTransport, BuiltInAiFeature, CapabilityDecision, DeviceAvailability } from "../types";
2
- export declare function resolveBackend(): Promise<{
1
+ import type { AiKitLanguageCode, AiModePreference, AnyCreateCoreOptions, BackendTransport, AiKitBackendCapability, BuiltInAiFeature, CapabilityDecision, DeviceAvailability } from "../types";
2
+ export declare function resolveBackend(capability?: AiKitBackendCapability): Promise<{
3
3
  available: boolean;
4
4
  transport?: BackendTransport;
5
5
  apiName?: string;
6
6
  baseUrl?: string;
7
7
  reason?: string;
8
+ compatibility?: import("../types").BackendCompatibility;
8
9
  }>;
9
10
  /**
10
11
  * Browser gate for Chrome Built-in AI.
@@ -22,4 +23,4 @@ export declare function resolveBackend(): Promise<{
22
23
  export declare const MIN_CHROME_VERSION: Partial<Record<BuiltInAiFeature, number>>;
23
24
  export declare function checkOnDeviceAvailability(feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions): Promise<DeviceAvailability>;
24
25
  export declare function isOnDeviceLanguageSupported(outputLanguage: AiKitLanguageCode): boolean;
25
- export declare function decideCapability(feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions, modeOverride?: AiModePreference): Promise<CapabilityDecision>;
26
+ export declare function decideCapability(feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions, modeOverride?: AiModePreference, context?: import("../types").ContextKind): Promise<CapabilityDecision>;
@@ -4,8 +4,8 @@ export declare const checkOnDeviceAvailability: (_feature: BuiltInAiFeature, _av
4
4
  available: boolean;
5
5
  status: string;
6
6
  }>;
7
- export declare const decideCapability: (_feature: BuiltInAiFeature, _availabilityOptions?: AnyCreateCoreOptions, _modeOverride?: AiModePreference) => Promise<CapabilityDecision>;
8
- export declare function resolveBackend(): Promise<{
7
+ export declare const decideCapability: (_feature: BuiltInAiFeature, _availabilityOptions?: AnyCreateCoreOptions, _modeOverride?: AiModePreference, _context?: import("../types").ContextKind) => Promise<CapabilityDecision>;
8
+ export declare function resolveBackend(_capability?: import("../types").AiKitBackendCapability): Promise<{
9
9
  available: boolean;
10
10
  transport?: BackendTransport;
11
11
  apiName?: string;
package/dist/types.d.ts CHANGED
@@ -4,6 +4,27 @@ export type AiModePreference = "local-only" | "backend-fallback" | "backend-only
4
4
  export type BuiltInAiFeature = "prompt" | "summarizer" | "writer" | "rewriter" | "proofreader" | "language-detector" | "translator";
5
5
  export type CapabilitySource = "on-device" | "backend" | "none";
6
6
  export type BackendTransport = "gatey" | "fetch";
7
+ export type AiKitBackendCapability = `ai.${BuiltInAiFeature}.${ContextKind}` | "knowledge.admin" | "knowledge.query.frontend" | "knowledge.automation";
8
+ export interface BackendManifest {
9
+ schemaVersion: 1;
10
+ product: "smartcloud-ai-kit-backend";
11
+ release: string;
12
+ apiSchemaVersion?: number;
13
+ capabilities: Partial<Record<AiKitBackendCapability, number>>;
14
+ }
15
+ export interface BackendCompatibility {
16
+ status: "verified" | "legacy";
17
+ manifest?: BackendManifest;
18
+ reason?: string;
19
+ }
20
+ export interface ResolvedBackend {
21
+ available: boolean;
22
+ transport?: BackendTransport;
23
+ apiName?: string;
24
+ baseUrl?: string;
25
+ reason?: string;
26
+ compatibility?: BackendCompatibility;
27
+ }
7
28
  export interface AiKit {
8
29
  features: AiKitFeatures;
9
30
  settings: AiKitSettings;
@@ -63,6 +84,7 @@ export interface CapabilityDecision {
63
84
  backendApiName?: string;
64
85
  backendBaseUrl?: string;
65
86
  backendReason?: string;
87
+ backendCompatibility?: BackendCompatibility;
66
88
  reason: string;
67
89
  }
68
90
  export interface BackendCallOptions {
@@ -490,14 +512,8 @@ export interface Capabilities {
490
512
  MIN_CHROME_VERSION?: Partial<Record<BuiltInAiFeature, number>>;
491
513
  isOnDeviceLanguageSupported: (outputLanguage: AiKitLanguageCode) => boolean;
492
514
  checkOnDeviceAvailability: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions) => Promise<DeviceAvailability>;
493
- decideCapability: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions, modeOverride?: AiModePreference) => Promise<CapabilityDecision>;
494
- resolveBackend: () => Promise<{
495
- available: boolean;
496
- transport?: BackendTransport;
497
- apiName?: string;
498
- baseUrl?: string;
499
- reason?: string;
500
- }>;
515
+ decideCapability: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions, modeOverride?: AiModePreference, context?: ContextKind) => Promise<CapabilityDecision>;
516
+ resolveBackend: (capability?: AiKitBackendCapability) => Promise<ResolvedBackend>;
501
517
  willUseOnDevice: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions) => Promise<boolean>;
502
518
  willUseBackend: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions) => Promise<boolean>;
503
519
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smart-cloud/ai-kit-core",
3
- "version": "1.5.5",
3
+ "version": "1.5.6",
4
4
  "description": "AI Kit Core Package",
5
5
  "author": "Smart Cloud Solutions Inc.",
6
6
  "license": "MIT",
@@ -23,7 +23,7 @@
23
23
  "build:js": "tsup --minify",
24
24
  "build:types": "tsc -p tsconfig.types.json",
25
25
  "lint": "eslint 'src/**/*.ts' --report-unused-disable-directives --max-warnings 0",
26
- "test": "echo \"Error: no test specified\" && exit 1",
26
+ "test": "node --test tests/*.test.mjs",
27
27
  "release:npm": "WPSUITE_PREMIUM=true yarn build && npm publish --access=public --registry=https://registry.npmjs.org/"
28
28
  },
29
29
  "publishConfig": {