@smart-cloud/ai-kit-core 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +6 -6
- package/dist/index.d.cts +99 -9
- package/dist/index.d.ts +99 -9
- package/dist/index.js +6 -6
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var W=Object.defineProperty;var Le=Object.getOwnPropertyDescriptor;var Se=Object.getOwnPropertyNames;var Re=Object.prototype.hasOwnProperty;var k=(e,t)=>()=>(e&&(t=e(e=0)),t);var I=(e,t)=>{for(var r in t)W(e,r,{get:t[r],enumerable:!0})},Te=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Se(t))!Re.call(e,n)&&n!==r&&W(e,n,{get:()=>t[n],enumerable:!(a=Le(t,n))||a.enumerable});return e};var Oe=e=>Te(W({},"__esModule",{value:!0}),e);function L(){return globalThis.WpSuite?.plugins?.aiKit}async function N(e=8e3){let t=L();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,a)=>{let n=()=>i(r),o=()=>i(()=>a(new Error("AiKit failed"))),i=l=>{window.removeEventListener("wpsuite:ai-kit:ready",n),window.removeEventListener("wpsuite:ai-kit:error",o),u&&clearTimeout(u),l()};window.addEventListener("wpsuite:ai-kit:ready",n,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let u=e?window.setTimeout(()=>i(()=>a(new Error("AiKit timeout"))),e):0})}}async function Y(e=1e4){await N(e);let r=L()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var _=k(()=>{"use strict"});var ee,C,q,$,j,Be,Ke,Ee,Fe,Ie,te,B,re,ne,M=k(()=>{"use strict";ee=require("@smart-cloud/wpsuite-core"),C=require("@wordpress/data"),q=require("aws-amplify/utils");_();typeof WpSuite<"u"?$=WpSuite.siteSettings:$={};j=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),r},Be=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="+$.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},Ke=async()=>{let e=j(await(0,ee.getConfig)("aiKit")),t=await Be();return{config:e,language:void 0,direction:void 0,customTranslations:t}},Ee={setLanguage(e){return!e||e==="system"?q.I18n.setLanguage(""):q.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Fe={getConfig(e){return e.config},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},Ie={},te=e=>(0,C.dispatch)(e),B=e=>(0,C.select)(e),re=async()=>{let e=await Ke(),t=(0,C.createReduxStore)("wpsuite/ai-kit",{reducer(r=e,a){switch(a.type){case"SET_LANGUAGE":return{...r,language:a.language};case"SET_DIRECTION":return{...r,direction:a.direction}}return r},actions:Ee,selectors:Fe,resolvers:Ie});return(0,C.register)(t),t},ne=(e,t,r)=>{let a;function n(){let i=B(e).getState(),u=t(i);if(u!==a){let l=a;a=u,r(a,l)}}let o=(0,C.subscribe)(n,e);return n(),o}});var h,G=k(()=>{"use strict";h=class extends Error{constructor(r,a,n){super(r);this.decision=a;this.status=n;this.name="AiBackendError"}}});var v,Me,De,ae=k(()=>{"use strict";v=require("react/jsx-runtime"),Me=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"})]}),De=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"})]})});var de={};I(de,{MIN_CHROME_VERSION:()=>ue,checkOnDeviceAvailability:()=>ce,decideCapability:()=>U});async function ie(){let t=await Ue?.plugins?.aiKit?.features.store;return B(t).getConfig()??{}}function se(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function ze(e){if(e.mode)return e.mode;let{transport:t}=se(e);return t?"backend-fallback":"local-only"}async function We(){let e=await ie(),{transport:t,backendApiName:r,backendBaseUrl:a}=se(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return a?{available:!0,transport:t,baseUrl:a,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let n=globalThis.WpSuite?.plugins?.gatey;return!n?.availability||await n.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function S(e){return typeof globalThis[e]<"u"}function le(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function D(e,t){return e?.find(r=>r.brand===t)?.version}async function Ne(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function _e(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?le(t[1]):void 0}function qe(){return!!navigator?.brave}async function $e(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await Ne(),a=D(r,"Microsoft Edge")??D(r,"Microsoft Edge WebView2"),n=D(r,"Google Chrome")??D(r,"Chromium"),o=!!a||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),i=/\bOPR\//i.test(t),u=/\bVivaldi\//i.test(t),l=/\bSamsungBrowser\//i.test(t),s=/\bFirefox\//i.test(t),d=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),g=qe()||/\bBrave\//i.test(t);if(o||i||u||l||s||d||g)return{allowed:!1,reason:o?"edge":g?"brave":s?"firefox":d?"safari":i?"opera":u?"vivaldi":l?"samsung":"unsupported-browser"};let y=le(n)??_e(t),p=ue[e];return p?y?y<p?{allowed:!1,reason:`chrome-too-old-${y}-lt-${p}`,chromeMajor:y}:{allowed:!0,reason:"ok",chromeMajor:y}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:y}}async function ce(e,t){try{let r=await $e(e),a=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:a};switch(e){case"writer":{if(!S("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await Writer.availability(t);return{available:n!=="unavailable",status:n,reason:a}}case"rewriter":{if(!S("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await Rewriter.availability(t);return{available:n!=="unavailable",status:n,reason:a}}case"summarizer":{if(!S("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await Summarizer.availability(t);return{available:n!=="unavailable",status:n,reason:a}}case"proofreader":{if(!S("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await Proofreader.availability(t);return{available:n!=="unavailable",status:n,reason:a}}case"language-detector":{if(!S("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await LanguageDetector.availability(t);return{available:n!=="unavailable",status:n,reason:a}}case"translator":{if(!S("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:a};let n=t;if(!n?.sourceLanguage||!n?.targetLanguage)return{available:!1,status:"error",reason:a,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let o=await Translator.availability({...n,sourceLanguage:n.sourceLanguage==="auto"?"en":n.sourceLanguage,targetLanguage:n.sourceLanguage==="auto"||n.sourceLanguage===n.targetLanguage?"hu":n.targetLanguage});return{available:o!=="unavailable",status:o,reason:a}}case"prompt":{if(!S("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await LanguageModel.availability(t);return{available:n!=="unavailable",status:n,reason:a}}default:return{available:!1,status:"unknown-feature",reason:a}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function U(e,t,r){let a=await ie(),n=r||ze(a),o=await We(),i=await ce(e,t),u=i.available,l=o.available,s={feature:e,mode:n,onDeviceAvailable:u,onDeviceStatus:i.status,onDeviceReason:i.reason,backendAvailable:l,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason};return n==="local-only"?u?{...s,source:"on-device",reason:`local-only: on-device available (${i.reason??i.status})`}:{...s,source:"none",reason:`local-only: on-device unavailable (${i.reason??i.status})`}:n==="backend-only"?l?{...s,source:"backend",reason:`backend-only: backend available (${o.reason??"n/a"})`}:{...s,source:"none",reason:`backend-only: backend unavailable (${o.reason??"n/a"})`}:u?{...s,source:"on-device",reason:`backend-fallback: using on-device (${i.reason??i.status})`}:l?{...s,source:"backend",reason:`backend-fallback: using backend (${o.reason??"n/a"}; on-device: ${i.reason??i.status})`}:{...s,source:"none",reason:`No on-device AI or backend available (on-device: ${i.reason??i.status}; backend: ${o.reason??"n/a"})`}}var oe,Ue,ue,H=k(()=>{"use strict";oe=require("@smart-cloud/wpsuite-core");M();Ue=(0,oe.getWpSuite)();ue={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var pe={};I(pe,{dispatchBackend:()=>V,withRecaptchaHeaders:()=>K});function je(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}async function Ge(e){if(e!=="frontend")return;let t=je();if(!t?.reCaptchaSiteKey)return;let{execute:r}=await(0,ge.getRecaptcha)(t?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let n=await r(t.reCaptchaSiteKey,{action:"generate"});return typeof n=="string"&&n?n:void 0}catch{return}}async function K(e,t){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await Ge(e);return r?{...t,"X-Recaptcha-Token":r}:t}function O(e,t){try{e?.onStatus?.(t)}catch{}}function He(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Xe(e,t){if(!He(t))return t;let r=Ve[e];if(!r)return t;let a={};for(let n of r)n in t&&(a[n]=t[n]);return a}function Qe(e,t){return(e==="admin"?Je:Ze)[t]}async function V(e,t,r,a,n={}){let o=Qe(t,r),i=Xe(r,a);if(!o)throw new h(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new h("backendTransport=fetch but backendBaseUrl is missing.",e);return Ye(e.backendBaseUrl,o,i,n,e,r,t)}if(!e.backendApiName)throw new h("backendTransport=gatey but backendApiName is missing.",e);return et(e.backendApiName,o,i,n,e,r,t)}async function Ye(e,t,r,a,n,o,i){let u=`${e.replace(/\/+$/,"")}${t}`,l={"content-type":"application/json",...a.headers??{}},s=await K(i,l),d=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([p,w])=>[p,String(w)])).toString():"";O(a,{feature:o,context:i,step:"backend:request",source:"backend"}),O(a,{feature:o,context:i,step:"backend:waiting",source:"backend"});let g=await fetch(u+d,{method:"POST",headers:s,body:JSON.stringify(r??{}),signal:a.signal,credentials:"omit"});if(O(a,{feature:o,context:i,step:"backend:response",source:"backend"}),!g.ok){let p=`HTTP ${g.status}`;try{let w=await g.text();w&&(p=`${p}: ${w.substring(0,400)}`)}catch{}throw new h(`Fetch backend call failed: ${p}`,n,g.status)}return(g.headers.get("content-type")||"").includes("application/json")?await g.json():await g.text()}async function et(e,t,r,a,n,o,i){let l=globalThis.WpSuite?.plugins?.gatey;if(!l?.cognito?.post)throw new h("Gatey backend selected, but Gatey.cognito.post is not available.",n);let s=await K(i,{...a.headers??{}});O(a,{feature:o,context:i,step:"backend:request",source:"backend"}),O(a,{feature:o,context:i,step:"backend:waiting",source:"backend"});let d=l.cognito.post({apiName:e,path:t,options:{body:r,headers:s}});a?.signal?.addEventListener?.("abort",()=>{d.cancel()});let g=await d.response.then(y=>y.body.json());return O(a,{feature:o,context:i,step:"backend:response",source:"backend"}),g}var ge,Ve,Je,Ze,X=k(()=>{"use strict";ge=require("@smart-cloud/wpsuite-core");G();Ve={prompt:["text","context","responseConstraint","sessionId","images","imageUrls","rejected","knowledgeBaseId","disableKB","enableRerank","kb_filters"],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"]};Je={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Ze={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var Pe={};I(Pe,{detectLanguage:()=>pt,getPromptOptions:()=>he,getProofreadOptions:()=>ve,getRewriteOptions:()=>we,getSummarizeOptions:()=>Ae,getTranslateOptions:()=>Ce,getWriteOptions:()=>ye,prompt:()=>kt,proofread:()=>dt,rewrite:()=>ct,summarize:()=>gt,translate:()=>F,write:()=>lt});function P(){return(fe?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function E(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(a=>r===a.toLowerCase())}function c(e,t,r,a){try{r?.onStatus?.({feature:e,context:t,...a})}catch{}}function z(){return fe?.plugins?.aiKit?.settings?.sharedContext??void 0}function R(e){return e?.context??"admin"}function be(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}function tt(e){return typeof e=="string"?e:e.map(t=>`${t.role.toUpperCase()}: ${t.content}`).join(`
|
|
1
|
+
"use strict";var _=Object.defineProperty;var Re=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var Oe=Object.prototype.hasOwnProperty;var P=(e,t)=>()=>(e&&(t=e(e=0)),t);var D=(e,t)=>{for(var r in t)_(e,r,{get:t[r],enumerable:!0})},Be=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Te(t))!Oe.call(e,a)&&a!==r&&_(e,a,{get:()=>t[a],enumerable:!(n=Re(t,a))||n.enumerable});return e};var Ke=e=>Be(_({},"__esModule",{value:!0}),e);function L(){return globalThis.WpSuite?.plugins?.aiKit}async function q(e=8e3){let t=L();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,n)=>{let a=()=>i(r),o=()=>i(()=>n(new Error("AiKit failed"))),i=c=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),u&&clearTimeout(u),c()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let u=e?window.setTimeout(()=>i(()=>n(new Error("AiKit timeout"))),e):0})}}async function te(e=1e4){await q(e);let r=L()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var H=P(()=>{"use strict"});var re,C,j,G,$,Fe,Ee,Ie,Me,Ue,ae,B,ne,oe,z=P(()=>{"use strict";re=require("@smart-cloud/wpsuite-core"),C=require("@wordpress/data"),j=require("aws-amplify/utils");H();typeof WpSuite<"u"?G=WpSuite.siteSettings:G={};$=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),r},Fe=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="+G.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},Ee=async()=>{let e=$(await(0,re.getConfig)("aiKit")),t=await Fe();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Ie={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?j.I18n.setLanguage(""):j.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Me={getConfig(e){return e.config},getChatbotSettings(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},Ue={},ae=e=>(0,C.dispatch)(e),B=e=>(0,C.select)(e),ne=async()=>{let e=await Ee(),t=(0,C.createReduxStore)("wpsuite/ai-kit",{reducer(r=e,n){switch(n.type){case"SET_LANGUAGE":return{...r,language:n.language};case"SET_DIRECTION":return{...r,direction:n.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:n.showChatbotPreview}}return r},actions:Ie,selectors:Me,resolvers:Ue});return(0,C.register)(t),t},oe=(e,t,r)=>{let n;function a(){let i=B(e).getState(),u=t(i);if(u!==n){let c=n;n=u,r(n,c)}}let o=(0,C.subscribe)(a,e);return a(),o}});var v,De,ze,ie=P(()=>{"use strict";v=require("react/jsx-runtime"),De=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"})]}),ze=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"})]})});var h,V=P(()=>{"use strict";h=class extends Error{constructor(r,n,a){super(r);this.decision=n;this.status=a;this.name="AiBackendError"}}});var pe={};D(pe,{MIN_CHROME_VERSION:()=>ce,checkOnDeviceAvailability:()=>ge,decideCapability:()=>N,resolveBackend:()=>K});async function ue(){let t=await We?.plugins?.aiKit?.features.store;return B(t).getConfig()??{}}function le(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function Ne(e){if(e.mode)return e.mode;let{transport:t}=le(e);return t?"backend-fallback":"local-only"}async function K(){let e=await ue(),{transport:t,backendApiName:r,backendBaseUrl:n}=le(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return n?{available:!0,transport:t,baseUrl:n,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let a=globalThis.WpSuite?.plugins?.gatey;return!a?.availability||await a.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function S(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 W(e,t){return e?.find(r=>r.brand===t)?.version}async function _e(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function qe(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?de(t[1]):void 0}function He(){return!!navigator?.brave}async function je(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await _e(),n=W(r,"Microsoft Edge")??W(r,"Microsoft Edge WebView2"),a=W(r,"Google Chrome")??W(r,"Chromium"),o=!!n||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),i=/\bOPR\//i.test(t),u=/\bVivaldi\//i.test(t),c=/\bSamsungBrowser\//i.test(t),s=/\bFirefox\//i.test(t),d=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),g=He()||/\bBrave\//i.test(t);if(o||i||u||c||s||d||g)return{allowed:!1,reason:o?"edge":g?"brave":s?"firefox":d?"safari":i?"opera":u?"vivaldi":c?"samsung":"unsupported-browser"};let y=de(a)??qe(t),p=ce[e];return p?y?y<p?{allowed:!1,reason:`chrome-too-old-${y}-lt-${p}`,chromeMajor:y}:{allowed:!0,reason:"ok",chromeMajor:y}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:y}}async function ge(e,t){try{let r=await je(e),n=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:n};switch(e){case"writer":{if(!S("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"rewriter":{if(!S("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"summarizer":{if(!S("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"proofreader":{if(!S("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"language-detector":{if(!S("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"translator":{if(!S("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:n};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:n,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let o=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:o!=="unavailable",status:o,reason:n}}case"prompt":{if(!S("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:n}}default:return{available:!1,status:"unknown-feature",reason:n}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function N(e,t,r){let n=await ue(),a=r||Ne(n),o=await K(),i=await ge(e,t),u=i.available,c=o.available,s={feature:e,mode:a,onDeviceAvailable:u,onDeviceStatus:i.status,onDeviceReason:i.reason,backendAvailable:c,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason};return a==="local-only"?u?{...s,source:"on-device",reason:`local-only: on-device available (${i.reason??i.status})`}:{...s,source:"none",reason:`local-only: on-device unavailable (${i.reason??i.status})`}:a==="backend-only"?c?{...s,source:"backend",reason:`backend-only: backend available (${o.reason??"n/a"})`}:{...s,source:"none",reason:`backend-only: backend unavailable (${o.reason??"n/a"})`}:u?{...s,source:"on-device",reason:`backend-fallback: using on-device (${i.reason??i.status})`}:c?{...s,source:"backend",reason:`backend-fallback: using backend (${o.reason??"n/a"}; on-device: ${i.reason??i.status})`}:{...s,source:"none",reason:`No on-device AI or backend available (on-device: ${i.reason??i.status}; backend: ${o.reason??"n/a"})`}}var se,We,ce,X=P(()=>{"use strict";se=require("@smart-cloud/wpsuite-core");z();We=(0,se.getWpSuite)();ce={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var fe={};D(fe,{dispatchBackend:()=>E,withRecaptchaHeaders:()=>F});function Ge(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}async function $e(e){if(e!=="frontend")return;let t=Ge();if(!t?.reCaptchaSiteKey)return;let{execute:r}=await(0,me.getRecaptcha)(t?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let a=await r(t.reCaptchaSiteKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function F(e,t){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await $e(e);return r?{...t,"X-Recaptcha-Token":r}:t}function O(e,t){try{e?.onStatus?.(t)}catch{}}function Ve(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Je(e,t){if(!Ve(t))return t;let r=Xe[e];if(!r)return t;let n={};for(let a of r)a in t&&(n[a]=t[a]);return n}function Ye(e,t){return(e==="admin"?Ze:Qe)[t]}async function E(e,t,r,n,a={}){let o=Ye(t,r),i=Je(r,n);if(!o)throw new h(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new h("backendTransport=fetch but backendBaseUrl is missing.",e);return et(e.backendBaseUrl,o,i,a,e,r,t)}if(!e.backendApiName)throw new h("backendTransport=gatey but backendApiName is missing.",e);return tt(e.backendApiName,o,i,a,e,r,t)}async function et(e,t,r,n,a,o,i){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...n.headers??{}},s=await F(i,c),d=n.query&&Object.keys(n.query).length>0?"?"+new URLSearchParams(Object.entries(n.query).map(([p,w])=>[p,String(w)])).toString():"";O(n,{feature:o,context:i,step:"backend:request",source:"backend"}),O(n,{feature:o,context:i,step:"backend:waiting",source:"backend"});let g=await fetch(u+d,{method:"POST",headers:s,body:JSON.stringify(r??{}),signal:n.signal,credentials:"omit"});if(O(n,{feature:o,context:i,step:"backend:response",source:"backend"}),!g.ok){let p=`HTTP ${g.status}`;try{let w=await g.text();w&&(p=`${p}: ${w.substring(0,400)}`)}catch{}throw new h(`Fetch backend call failed: ${p}`,a,g.status)}return(g.headers.get("content-type")||"").includes("application/json")?await g.json():await g.text()}async function tt(e,t,r,n,a,o,i){let c=globalThis.WpSuite?.plugins?.gatey;if(!c?.cognito?.post)throw new h("Gatey backend selected, but Gatey.cognito.post is not available.",a);let s=await F(i,{...n.headers??{}});O(n,{feature:o,context:i,step:"backend:request",source:"backend"}),O(n,{feature:o,context:i,step:"backend:waiting",source:"backend"});let d=c.cognito.post({apiName:e,path:t,options:{body:r,headers:s}});n?.signal?.addEventListener?.("abort",()=>{d.cancel()});let g=await d.response.then(y=>y.body.json());return O(n,{feature:o,context:i,step:"backend:response",source:"backend"}),g}var me,Xe,Ze,Qe,J=P(()=>{"use strict";me=require("@smart-cloud/wpsuite-core");V();Xe={prompt:["text","systemPrompt","context","responseConstraint","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","kb_filters"],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"]};Ze={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Qe={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var xe={};D(xe,{detectLanguage:()=>ft,getPromptOptions:()=>Pe,getProofreadOptions:()=>ke,getRewriteOptions:()=>ve,getSummarizeOptions:()=>Ce,getTranslateOptions:()=>he,getWriteOptions:()=>we,prompt:()=>xt,proofread:()=>pt,rewrite:()=>gt,sendChatMessage:()=>Lt,sendFeedbackMessage:()=>St,summarize:()=>mt,translate:()=>U,write:()=>dt});function A(){return(ye?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function I(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(n=>r===n.toLowerCase())}function l(e,t,r,n){try{r?.onStatus?.({feature:e,context:t,...n})}catch{}}function M(){return ye?.plugins?.aiKit?.settings?.sharedContext??void 0}function R(e){return e?.context??"admin"}function Z(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function rt(e,t,r,n){let a=Z(e),o=await Ae(e.images,r,t,n);return{text:e.messages.filter(i=>i.role==="user").map(i=>i.content).join(`
|
|
2
|
+
`),systemPrompt:e.messages.filter(i=>i.role==="system").map(i=>i.content).join(`
|
|
3
|
+
`),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function at(e,t,r){let n=Z(e),a=await Ae(e.images,t,"frontend",r);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,saveChatSession:!0,...n}}async function nt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function ot(e){let t=Z(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function it(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 st(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function ut(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function lt(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function ct(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function T(e,t,r,n,a,o,i){l(r,e,i,{step:"decide",message:"Deciding capability"});let u=await N(r,n,t);if(l(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`}),u.source==="on-device")try{l(r,e,i,{step:"on-device:init",source:"on-device"});let c=await a();return l(r,e,i,{step:"done",source:"on-device"}),c}catch(c){console.error(`Error in on-device ${r}:`,c),l(r,e,i,{step:"error",source:"on-device",message:c.message}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){l(r,e,i,{step:"backend:request",source:"backend"});let c=typeof o=="function"?await o(u):o,s=await E(u,e,r,c,i);return l(r,e,i,{step:"done",source:"backend"}),s}throw new Error(`No capability for "${r}" (${e}). Reason: ${u.reason}`)}function bt(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],n=t?r.map(o=>({type:"image",value:o})):[],a;if(typeof e.messages=="string")a=t?[{role:"user",content:[{type:"text",value:e.messages},...n]}]:e.messages;else{let o=e.messages.filter(i=>i.role!=="system").map(i=>({role:i.role==="assistant"?"assistant":"user",content:i.content}));if(t){let i=-1;for(let u=o.length-1;u>=0;u--)if(o[u].role==="user"){i=u;break}if(i===-1)o.push({role:"user",content:[{type:"text",value:""},...n]});else{let u=String(o[i].content??"");o[i]={...o[i],content:[{type:"text",value:u},...n]}}}a=o}return a}function wt(e){return typeof Blob<"u"&&e instanceof Blob}function vt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function kt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function Ct(e){return new Promise((t,r)=>{let n=new FileReader;n.onerror=()=>r(n.error??new Error("FileReader error")),n.onload=()=>t(String(n.result??"")),n.readAsDataURL(e)})}async function ht(e){let t=await Ct(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function At(e,t,r,n,a,o){let i=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",u={...o?.headers??{}},c=await F(t,u);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let p=new URLSearchParams({fileName:r,contentType:n,contentLength:String(a)}).toString(),w=`${e.backendBaseUrl.replace(/\/+$/,"")}${i}?${p}`,k=await fetch(w,{method:"GET",headers:c,signal:o?.signal,credentials:"omit"});if(!k.ok){let ee=await k.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${k.status}${ee?": "+ee.substring(0,200):""}`)}let x=await k.json();if(!x?.uploadUrl||!x?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:x.uploadUrl,imageKey:x.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let s=globalThis.WpSuite?.plugins?.gatey,d={fileName:r,contentType:n,contentLength:a};if(s?.cognito?.get){let p=await s.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((k,x)=>(k[x]=String(d[x]),k),{}),headers:c}});o?.signal?.addEventListener?.("abort",()=>{p.cancel()});let w=await p.response.then(k=>k.body.json());if(!w?.uploadUrl||!w?.imageKey)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/imageKey");return{uploadUrl:w.uploadUrl,imageKey:w.imageKey}}if(!s?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let g=s.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:c}});o?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(p=>p.body.json());if(!y?.uploadUrl||!y?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:y.uploadUrl,imageKey:y.imageKey}}async function Pt(e,t,r,n){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:n?.signal});if(!a.ok){let o=await a.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${a.status}${o?": "+o.substring(0,200):""}`)}}async function Ae(e,t,r,n){if(!e||e.length===0)return;let a=[];for(let s of e){if(!wt(s))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(s)}let o=a.reduce((s,d)=>s+(d.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=yt){l("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let s=[];for(let d of a)s.push({format:kt(d.type),data:await ht(d)});return{images:s}}l("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let c=[];for(let s=0;s<a.length;s++){let d=a[s],g=d.type||"application/octet-stream",y=d.name||`image_${s}.${vt(g)}`;l("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:p,imageKey:w}=await At(t,r,y,g,d.size||0,n);l("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Pt(p,d,g,n),c.push(w)}return{imageUrls:c}}var be,ye,we,dt,ve,gt,ke,pt,Ce,mt,ft,he,U,yt,Pe,xt,Lt,St,Le=P(()=>{"use strict";be=require("@smart-cloud/wpsuite-core");J();X();Se();ye=(0,be.getWpSuite)();we=e=>{let t=e.outputLanguage?e.outputLanguage:A(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},dt=async(e,t)=>{let r=R(t),n=e.sharedContext??M(),a=e.outputLanguage?e.outputLanguage:A(),o=a,i=!1;I(a)||(i=!0,a="en");let u=we({...e,outputLanguage:a});return T(r,t?.modeOverride,"writer",u,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");l("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let c=await Writer.create({...u,sharedContext:n,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;l("writer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});l("writer",r,t,{step:"on-device:ready",source:"on-device"});try{l("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let s=await c.write(e.prompt,{context:e.context,signal:t?.signal});return i?{result:(await U({text:s,sourceLanguage:a,targetLanguage:o})).result}:{result:s}}finally{try{c.destroy()}catch(s){console.error("Error destroying writer:",s)}}},ot({...e,sharedContext:n,outputLanguage:o}),t)},ve=e=>{let t=e.outputLanguage?e.outputLanguage:A(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},gt=async(e,t)=>{let r=R(t),n=e.sharedContext??M(),a=e.outputLanguage?e.outputLanguage:A(),o=a,i=!1;I(a)||(i=!0,a="en");let u=ve({...e,outputLanguage:a});return T(r,t?.modeOverride,"rewriter",u,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");l("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let c=await Rewriter.create({...u,sharedContext:n,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;l("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});l("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{l("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let s=await c.rewrite(e.text,{context:e.context,signal:t?.signal});return i?{result:(await U({text:s,sourceLanguage:a,targetLanguage:o})).result}:{result:s}}finally{try{c.destroy()}catch(s){console.error("Error destroying rewriter:",s)}}},it({...e,sharedContext:n,outputLanguage:o}),t)},ke=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),pt=async(e,t)=>{let r=R(t),n=await ke();return T(r,t?.modeOverride,"proofreader",n,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");l("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=await Proofreader.create({...n,monitor(o){o.addEventListener("downloadprogress",i=>{let u=i.loaded;l("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}});l("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return l("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await a.proofread(e.text,{signal:t?.signal})}}finally{try{a.destroy()}catch(o){console.error("Error destroying proofreader:",o)}}},ct(e),t)},Ce=e=>{let t=e.outputLanguage?e.outputLanguage:A(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},mt=async(e,t)=>{let r=R(t),n=e.sharedContext??M(),a=e.outputLanguage?e.outputLanguage:A(),o=a,i=!1;I(a)||(i=!0,a="en");let u=await Ce({...e,outputLanguage:a});return T(r,t?.modeOverride,"summarizer",u,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");l("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let c=await Summarizer.create({...u,sharedContext:n,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;l("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});l("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{l("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let s=await c.summarize(e.text,{context:e.context,signal:t?.signal});return i?{result:(await U({text:s,sourceLanguage:a,targetLanguage:o})).result}:{result:s}}finally{try{c.destroy()}catch(s){console.error("Error destroying summarizer:",s)}}},st({...e,sharedContext:n,outputLanguage:o}),t)},ft=async(e,t)=>{let r=R(t);return T(r,t?.modeOverride,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");l("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session"});let n=await LanguageDetector.create({monitor(a){a.addEventListener("downloadprogress",o=>{let i=o.loaded;l("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:i,loaded:i})})}});l("language-detector",r,t,{step:"on-device:ready",source:"on-device"});try{return l("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language"}),{result:{candidates:(await n.detect(e.text,{signal:t?.signal})).filter(o=>Q.find(i=>i.value===o.detectedLanguage))}}}finally{try{n.destroy()}catch(a){console.error("Error destroying language detector:",a)}}},lt(e.text,t),t)},he=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??A()??"en"};return Promise.resolve(t)},U=async(e,t)=>{let r=R(t),n=await he({...e});return T(r,t?.modeOverride,"translator",n,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");l("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session"});let a=await Translator.create({...n,monitor(o){o.addEventListener("downloadprogress",i=>{let u=i.loaded;l("translator",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}});l("translator",r,t,{step:"on-device:ready",source:"on-device"});try{l("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating"});let o=[];return e.text.split(`
|
|
4
|
+
`).forEach(u=>o.push(a.translate(u.trim()))),{result:(await Promise.all(o)).join(`
|
|
5
|
+
`)}}finally{try{a.destroy()}catch(o){console.error("Error destroying translator:",o)}}},ut(e.text,e.sourceLanguage,e.targetLanguage),t)};yt=4*1024*1024;Pe=async e=>{let t=e.outputLanguage?e.outputLanguage:A();return I(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},xt=async(e,t)=>{let r=R(t),n=e.sharedContext??M(),a=e.outputLanguage?e.outputLanguage:A(),o=a,i=!1;I(a)||(i=!0,a="en");let u=await Pe({...e,outputLanguage:a}),c=await N("prompt",u,t?.modeOverride);return T(r,t?.modeOverride,"prompt",u,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");l("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let s=[];if(typeof e.messages!="string"){for(let p of e.messages)p.role==="system"&&p.content.trim()&&s.push(p.content.trim());n&&n.trim()&&s.push("SHARED CONTEXT: "+n.trim())}let d=s.length>0?s.join(`
|
|
2
6
|
|
|
3
|
-
`)}async function rt(e,t,r,a){let n=be(e),o=await Pt(e.images,r,t,a);return{text:tt(e.messages),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,responseConstraint:e.responseConstraint,...n}}function nt(e){let t=be(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 at(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 ot(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function it(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function st(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function ut(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function T(e,t,r,a,n,o,i){c(r,e,i,{step:"decide",message:"Deciding capability"});let u=await U(r,a,t);if(c(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`}),u.source==="on-device")try{c(r,e,i,{step:"on-device:init",source:"on-device"});let l=await n();return c(r,e,i,{step:"done",source:"on-device"}),l}catch(l){console.error(`Error in on-device ${r}:`,l),c(r,e,i,{step:"error",source:"on-device",message:l.message}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){c(r,e,i,{step:"backend:request",source:"backend"});let l=typeof o=="function"?await o(u):o,s=await V(u,e,r,l,i);return c(r,e,i,{step:"done",source:"backend"}),s}throw new Error(`No capability for "${r}" (${e}). Reason: ${u.reason}`)}function mt(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],a=t?r.map(o=>({type:"image",value:o})):[],n;if(typeof e.messages=="string")n=t?[{role:"user",content:[{type:"text",value:e.messages},...a]}]: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 u=o.length-1;u>=0;u--)if(o[u].role==="user"){i=u;break}if(i===-1)o.push({role:"user",content:[{type:"text",value:""},...a]});else{let u=String(o[i].content??"");o[i]={...o[i],content:[{type:"text",value:u},...a]}}}n=o}return n}function bt(e){return typeof Blob<"u"&&e instanceof Blob}function yt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function wt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function vt(e){return new Promise((t,r)=>{let a=new FileReader;a.onerror=()=>r(a.error??new Error("FileReader error")),a.onload=()=>t(String(a.result??"")),a.readAsDataURL(e)})}async function At(e){let t=await vt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Ct(e,t,r,a,n,o){let i=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",u={...o?.headers??{}},l=await K(t,u);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let p=new URLSearchParams({fileName:r,contentType:a,contentLength:String(n)}).toString(),w=`${e.backendBaseUrl.replace(/\/+$/,"")}${i}?${p}`,A=await fetch(w,{method:"GET",headers:l,signal:o?.signal,credentials:"omit"});if(!A.ok){let Q=await A.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${A.status}${Q?": "+Q.substring(0,200):""}`)}let x=await A.json();if(!x?.uploadUrl||!x?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:x.uploadUrl,imageKey:x.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let s=globalThis.WpSuite?.plugins?.gatey,d={fileName:r,contentType:a,contentLength:n};if(s?.cognito?.get){let p=await s.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((A,x)=>(A[x]=String(d[x]),A),{}),headers:l}});o?.signal?.addEventListener?.("abort",()=>{p.cancel()});let w=await p.response.then(A=>A.body.json());if(!w?.uploadUrl||!w?.imageKey)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/imageKey");return{uploadUrl:w.uploadUrl,imageKey:w.imageKey}}if(!s?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let g=s.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:l}});o?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(p=>p.body.json());if(!y?.uploadUrl||!y?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:y.uploadUrl,imageKey:y.imageKey}}async function ht(e,t,r,a){let n=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:a?.signal});if(!n.ok){let o=await n.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${n.status}${o?": "+o.substring(0,200):""}`)}}async function Pt(e,t,r,a){if(!e||e.length===0)return;let n=[];for(let s of e){if(!bt(s))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");n.push(s)}let o=n.reduce((s,d)=>s+(d.size||0),0);if(Math.ceil(o*1.37+2048*n.length)<=ft){c("prompt",r,a,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let s=[];for(let d of n)s.push({format:wt(d.type),data:await At(d)});return{images:s}}c("prompt",r,a,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let l=[];for(let s=0;s<n.length;s++){let d=n[s],g=d.type||"application/octet-stream",y=d.name||`image_${s}.${yt(g)}`;c("prompt",r,a,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:p,imageKey:w}=await Ct(t,r,y,g,d.size||0,a);c("prompt",r,a,{step:"backend:waiting",source:"backend",message:"Uploading"}),await ht(p,d,g,a),l.push(w)}return{imageUrls:l}}var me,fe,ye,lt,we,ct,ve,dt,Ae,gt,pt,Ce,F,ft,he,kt,ke=k(()=>{"use strict";me=require("@smart-cloud/wpsuite-core");X();H();xe();fe=(0,me.getWpSuite)();ye=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},lt=async(e,t)=>{let r=R(t),a=e.sharedContext??z(),n=e.outputLanguage?e.outputLanguage:P(),o=n,i=!1;E(n)||(i=!0,n="en");let u=ye({...e,outputLanguage:n});return T(r,t?.modeOverride,"writer",u,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");c("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let l=await Writer.create({...u,sharedContext:a,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;c("writer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});c("writer",r,t,{step:"on-device:ready",source:"on-device"});try{c("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let s=await l.write(e.prompt,{context:e.context,signal:t?.signal});return i?{result:(await F({text:s,sourceLanguage:n,targetLanguage:o})).result}:{result:s}}finally{try{l.destroy()}catch(s){console.error("Error destroying writer:",s)}}},nt({...e,sharedContext:a,outputLanguage:o}),t)},we=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},ct=async(e,t)=>{let r=R(t),a=e.sharedContext??z(),n=e.outputLanguage?e.outputLanguage:P(),o=n,i=!1;E(n)||(i=!0,n="en");let u=we({...e,outputLanguage:n});return T(r,t?.modeOverride,"rewriter",u,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");c("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let l=await Rewriter.create({...u,sharedContext:a,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;c("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});c("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{c("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let s=await l.rewrite(e.text,{context:e.context,signal:t?.signal});return i?{result:(await F({text:s,sourceLanguage:n,targetLanguage:o})).result}:{result:s}}finally{try{l.destroy()}catch(s){console.error("Error destroying rewriter:",s)}}},at({...e,sharedContext:a,outputLanguage:o}),t)},ve=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),dt=async(e,t)=>{let r=R(t),a=await ve();return T(r,t?.modeOverride,"proofreader",a,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");c("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let n=await Proofreader.create({...a,monitor(o){o.addEventListener("downloadprogress",i=>{let u=i.loaded;c("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}});c("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return c("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await n.proofread(e.text,{signal:t?.signal})}}finally{try{n.destroy()}catch(o){console.error("Error destroying proofreader:",o)}}},ut(e),t)},Ae=e=>{let t=e.outputLanguage?e.outputLanguage:P(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},gt=async(e,t)=>{let r=R(t),a=e.sharedContext??z(),n=e.outputLanguage?e.outputLanguage:P(),o=n,i=!1;E(n)||(i=!0,n="en");let u=await Ae({...e,outputLanguage:n});return T(r,t?.modeOverride,"summarizer",u,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");c("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let l=await Summarizer.create({...u,sharedContext:a,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;c("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});c("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{c("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let s=await l.summarize(e.text,{context:e.context,signal:t?.signal});return i?{result:(await F({text:s,sourceLanguage:n,targetLanguage:o})).result}:{result:s}}finally{try{l.destroy()}catch(s){console.error("Error destroying summarizer:",s)}}},ot({...e,sharedContext:a,outputLanguage:o}),t)},pt=async(e,t)=>{let r=R(t);return T(r,t?.modeOverride,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");c("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session"});let a=await LanguageDetector.create({monitor(n){n.addEventListener("downloadprogress",o=>{let i=o.loaded;c("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:i,loaded:i})})}});c("language-detector",r,t,{step:"on-device:ready",source:"on-device"});try{return c("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language"}),{result:{candidates:(await a.detect(e.text,{signal:t?.signal})).filter(o=>J.find(i=>i.value===o.detectedLanguage))}}}finally{try{a.destroy()}catch(n){console.error("Error destroying language detector:",n)}}},st(e.text,t),t)},Ce=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??P()??"en"};return Promise.resolve(t)},F=async(e,t)=>{let r=R(t),a=await Ce({...e});return T(r,t?.modeOverride,"translator",a,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");c("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session"});let n=await Translator.create({...a,monitor(o){o.addEventListener("downloadprogress",i=>{let u=i.loaded;c("translator",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}});c("translator",r,t,{step:"on-device:ready",source:"on-device"});try{c("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating"});let o=[];return e.text.split(`
|
|
4
|
-
`).forEach(u=>o.push(n.translate(u.trim()))),{result:(await Promise.all(o)).join(`
|
|
5
|
-
`)}}finally{try{n.destroy()}catch(o){console.error("Error destroying translator:",o)}}},it(e.text,e.sourceLanguage,e.targetLanguage),t)};ft=4*1024*1024;he=async e=>{let t=e.outputLanguage?e.outputLanguage:P();return E(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},kt=async(e,t)=>{let r=R(t),a=e.sharedContext??z(),n=e.outputLanguage?e.outputLanguage:P(),o=n,i=!1;E(n)||(i=!0,n="en");let u=await he({...e,outputLanguage:n}),l=await U("prompt",u,t?.modeOverride);return T(r,t?.modeOverride,"prompt",u,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");c("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let s=[];if(typeof e.messages!="string"){for(let p of e.messages)p.role==="system"&&p.content.trim()&&s.push(p.content.trim());a&&a.trim()&&s.push("SHARED CONTEXT: "+a.trim())}let d=s.length>0?s.join(`
|
|
6
|
-
|
|
7
|
-
`):void 0,g=d?[{role:"system",content:d}]:void 0,y=await LanguageModel.create({...u,initialPrompts:g,monitor(p){p.addEventListener("downloadprogress",w=>{let A=w.loaded;c("prompt",r,t,{step:"on-device:download",source:"on-device",progress:A,loaded:A})})}});c("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{c("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let p=await y.prompt(mt(e),{signal:t?.signal,responseConstraint:e.responseConstraint});return i?{result:(await F({text:p,sourceLanguage:n,targetLanguage:o})).result}:{result:p}}finally{try{y.destroy()}catch(p){console.error("Error destroying LanguageModel:",p)}}},await rt({...e,sharedContext:a},r,l,t),t)}});var $t={};I($t,{AiKitChatbotIcon:()=>De,AiKitFeatureIcon:()=>Me,BackendError:()=>h,LANGUAGE_OPTIONS:()=>J,TEXT_DOMAIN:()=>m.TEXT_DOMAIN,checkOnDeviceAvailability:()=>St,decideCapability:()=>Lt,detectLanguage:()=>Wt,dispatchBackend:()=>Tt,getAiKitPlugin:()=>L,getMinChromeVersions:()=>xt,getPromptOptions:()=>Nt,getProofreadOptions:()=>Ft,getRewriteOptions:()=>Kt,getStore:()=>Y,getStoreDispatch:()=>te,getStoreSelect:()=>B,getSummarizeOptions:()=>Mt,getTranslateOptions:()=>Ut,getWriteOptions:()=>Ot,initializeAiKit:()=>qt,observeStore:()=>ne,prompt:()=>_t,proofread:()=>It,rewrite:()=>Et,sanitizeAiKitConfig:()=>j,summarize:()=>Dt,translate:()=>zt,waitForAiKitReady:()=>N,write:()=>Bt});module.exports=Oe($t);var m,f,J,Z,xt,Lt,St,Rt,Tt,b,Ot,Bt,Kt,Et,Ft,It,Mt,Dt,Ut,zt,Wt,Nt,_t,qt,xe=k(()=>{m=require("@smart-cloud/wpsuite-core"),f=require("@wordpress/i18n");_();M();M();G();ae();J=[{label:(0,f.__)("Arabic",m.TEXT_DOMAIN),value:"ar"},{label:(0,f.__)("Chinese",m.TEXT_DOMAIN),value:"zh"},{label:(0,f.__)("Dutch",m.TEXT_DOMAIN),value:"nl"},{label:(0,f.__)("English",m.TEXT_DOMAIN),value:"en"},{label:(0,f.__)("French",m.TEXT_DOMAIN),value:"fr"},{label:(0,f.__)("German",m.TEXT_DOMAIN),value:"de"},{label:(0,f.__)("Hebrew",m.TEXT_DOMAIN),value:"he"},{label:(0,f.__)("Hindi",m.TEXT_DOMAIN),value:"hi"},{label:(0,f.__)("Hungarian",m.TEXT_DOMAIN),value:"hu"},{label:(0,f.__)("Indonesian",m.TEXT_DOMAIN),value:"id"},{label:(0,f.__)("Italian",m.TEXT_DOMAIN),value:"it"},{label:(0,f.__)("Japanese",m.TEXT_DOMAIN),value:"ja"},{label:(0,f.__)("Korean",m.TEXT_DOMAIN),value:"ko"},{label:(0,f.__)("Norwegian",m.TEXT_DOMAIN),value:"no"},{label:(0,f.__)("Polish",m.TEXT_DOMAIN),value:"pl"},{label:(0,f.__)("Portuguese",m.TEXT_DOMAIN),value:"pt"},{label:(0,f.__)("Russian",m.TEXT_DOMAIN),value:"ru"},{label:(0,f.__)("Spanish",m.TEXT_DOMAIN),value:"es"},{label:(0,f.__)("Swedish",m.TEXT_DOMAIN),value:"sv"},{label:(0,f.__)("Thai",m.TEXT_DOMAIN),value:"th"},{label:(0,f.__)("Turkish",m.TEXT_DOMAIN),value:"tr"},{label:(0,f.__)("Ukrainian",m.TEXT_DOMAIN),value:"uk"}],Z=Promise.resolve().then(()=>(H(),de)),xt=async()=>(await Z).MIN_CHROME_VERSION,Lt=async(...e)=>(await Z).decideCapability(...e),St=async(...e)=>(await Z).checkOnDeviceAvailability(...e),Rt=Promise.resolve().then(()=>(X(),pe)),Tt=async(...e)=>(await Rt).dispatchBackend(...e),b=Promise.resolve().then(()=>(ke(),Pe)),Ot=async(...e)=>(await b).getWriteOptions(...e),Bt=async(...e)=>(await b).write(...e),Kt=async(...e)=>(await b).getRewriteOptions(...e),Et=async(...e)=>(await b).rewrite(...e),Ft=async(...e)=>(await b).getProofreadOptions(...e),It=async(...e)=>(await b).proofread(...e),Mt=async(...e)=>(await b).getSummarizeOptions(...e),Dt=async(...e)=>(await b).summarize(...e),Ut=async(...e)=>(await b).getTranslateOptions(...e),zt=async(...e)=>(await b).translate(...e),Wt=async(...e)=>(await b).detectLanguage(...e),Nt=async(...e)=>(await b).getPromptOptions(...e),_t=async(...e)=>(await b).prompt(...e),qt=e=>{let t=globalThis.WpSuite,r=L();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");(0,m.attachDefaultPluginRuntime)(r),r.status=r.status??"initializing";let a=re();return r.features={store:a,renderFeature:async n=>await e({...n,store:await a}),write:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.write(...n)},rewrite:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.rewrite(...n)},proofread:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.proofread(...n)},summarize:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.summarize(...n)},translate:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.translate(...n)},detectLanguage:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.detectLanguage(...n)},prompt:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.prompt(...n)}},a.then(()=>{r.status="available",t?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(n=>{r.status="error",console.error("AiKit plugin failed to initialize:",n),t?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(n)})}),r}});xe();0&&(module.exports={AiKitChatbotIcon,AiKitFeatureIcon,BackendError,LANGUAGE_OPTIONS,TEXT_DOMAIN,checkOnDeviceAvailability,decideCapability,detectLanguage,dispatchBackend,getAiKitPlugin,getMinChromeVersions,getPromptOptions,getProofreadOptions,getRewriteOptions,getStore,getStoreDispatch,getStoreSelect,getSummarizeOptions,getTranslateOptions,getWriteOptions,initializeAiKit,observeStore,prompt,proofread,rewrite,sanitizeAiKitConfig,summarize,translate,waitForAiKitReady,write});
|
|
7
|
+
`):void 0,g=d?[{role:"system",content:d}]:void 0,y=await LanguageModel.create({...u,initialPrompts:g,monitor(p){p.addEventListener("downloadprogress",w=>{let k=w.loaded;l("prompt",r,t,{step:"on-device:download",source:"on-device",progress:k,loaded:k})})}});l("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{l("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let p=await y.prompt(bt(e),{signal:t?.signal,responseConstraint:e.responseConstraint});return i?{result:(await U({text:p,sourceLanguage:a,targetLanguage:o})).result}:{result:p}}finally{try{y.destroy()}catch(p){console.error("Error destroying LanguageModel:",p)}}},await rt({...e,sharedContext:n},r,c,t),t)},Lt=async(e,t)=>{let r="frontend",n=e.sharedContext??M(),a="prompt",o=await K(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},u=await at({sessionId:e.sessionId,message:e.message,images:e.images,sharedContext:n},i,t);l(a,r,t,{step:"backend:request",source:"backend"});let c=await E(i,r,a,u,t);return l(a,r,t,{step:"done",source:"backend"}),c},St=async(e,t)=>{let r="frontend",n="prompt",a=await K(),o={feature:n,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,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});l(n,r,t,{step:"backend:request",source:"backend"});let u=await E(o,r,n,i,t);return l(n,r,t,{step:"done",source:"backend"}),u}});var Xt={};D(Xt,{AiKitChatbotIcon:()=>ze,AiKitFeatureIcon:()=>De,BackendError:()=>h,LANGUAGE_OPTIONS:()=>Q,TEXT_DOMAIN:()=>m.TEXT_DOMAIN,checkOnDeviceAvailability:()=>Ot,decideCapability:()=>Tt,detectLanguage:()=>qt,dispatchBackend:()=>Kt,getAiKitPlugin:()=>L,getMinChromeVersions:()=>Rt,getPromptOptions:()=>Ht,getProofreadOptions:()=>Ut,getRewriteOptions:()=>It,getStore:()=>te,getStoreDispatch:()=>ae,getStoreSelect:()=>B,getSummarizeOptions:()=>zt,getTranslateOptions:()=>Nt,getWriteOptions:()=>Ft,initializeAiKit:()=>Vt,observeStore:()=>oe,prompt:()=>jt,proofread:()=>Dt,rewrite:()=>Mt,sanitizeAiKitConfig:()=>$,sendChatMessage:()=>Gt,sendFeedbackMessage:()=>$t,summarize:()=>Wt,translate:()=>_t,waitForAiKitReady:()=>q,write:()=>Et});module.exports=Ke(Xt);var m,b,Q,Y,Rt,Tt,Ot,Bt,Kt,f,Ft,Et,It,Mt,Ut,Dt,zt,Wt,Nt,_t,qt,Ht,jt,Gt,$t,Vt,Se=P(()=>{m=require("@smart-cloud/wpsuite-core"),b=require("@wordpress/i18n");H();z();z();ie();V();Q=[{label:(0,b.__)("Arabic",m.TEXT_DOMAIN),value:"ar"},{label:(0,b.__)("Chinese",m.TEXT_DOMAIN),value:"zh"},{label:(0,b.__)("Dutch",m.TEXT_DOMAIN),value:"nl"},{label:(0,b.__)("English",m.TEXT_DOMAIN),value:"en"},{label:(0,b.__)("French",m.TEXT_DOMAIN),value:"fr"},{label:(0,b.__)("German",m.TEXT_DOMAIN),value:"de"},{label:(0,b.__)("Hebrew",m.TEXT_DOMAIN),value:"he"},{label:(0,b.__)("Hindi",m.TEXT_DOMAIN),value:"hi"},{label:(0,b.__)("Hungarian",m.TEXT_DOMAIN),value:"hu"},{label:(0,b.__)("Indonesian",m.TEXT_DOMAIN),value:"id"},{label:(0,b.__)("Italian",m.TEXT_DOMAIN),value:"it"},{label:(0,b.__)("Japanese",m.TEXT_DOMAIN),value:"ja"},{label:(0,b.__)("Korean",m.TEXT_DOMAIN),value:"ko"},{label:(0,b.__)("Norwegian",m.TEXT_DOMAIN),value:"no"},{label:(0,b.__)("Polish",m.TEXT_DOMAIN),value:"pl"},{label:(0,b.__)("Portuguese",m.TEXT_DOMAIN),value:"pt"},{label:(0,b.__)("Russian",m.TEXT_DOMAIN),value:"ru"},{label:(0,b.__)("Spanish",m.TEXT_DOMAIN),value:"es"},{label:(0,b.__)("Swedish",m.TEXT_DOMAIN),value:"sv"},{label:(0,b.__)("Thai",m.TEXT_DOMAIN),value:"th"},{label:(0,b.__)("Turkish",m.TEXT_DOMAIN),value:"tr"},{label:(0,b.__)("Ukrainian",m.TEXT_DOMAIN),value:"uk"}],Y=Promise.resolve().then(()=>(X(),pe)),Rt=async()=>(await Y).MIN_CHROME_VERSION,Tt=async(...e)=>(await Y).decideCapability(...e),Ot=async(...e)=>(await Y).checkOnDeviceAvailability(...e),Bt=Promise.resolve().then(()=>(J(),fe)),Kt=async(...e)=>(await Bt).dispatchBackend(...e),f=Promise.resolve().then(()=>(Le(),xe)),Ft=async(...e)=>(await f).getWriteOptions(...e),Et=async(...e)=>(await f).write(...e),It=async(...e)=>(await f).getRewriteOptions(...e),Mt=async(...e)=>(await f).rewrite(...e),Ut=async(...e)=>(await f).getProofreadOptions(...e),Dt=async(...e)=>(await f).proofread(...e),zt=async(...e)=>(await f).getSummarizeOptions(...e),Wt=async(...e)=>(await f).summarize(...e),Nt=async(...e)=>(await f).getTranslateOptions(...e),_t=async(...e)=>(await f).translate(...e),qt=async(...e)=>(await f).detectLanguage(...e),Ht=async(...e)=>(await f).getPromptOptions(...e),jt=async(...e)=>(await f).prompt(...e),Gt=async(...e)=>(await f).sendChatMessage(...e),$t=async(...e)=>(await f).sendFeedbackMessage(...e),Vt=e=>{let t=globalThis.WpSuite,r=L();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");(0,m.attachDefaultPluginRuntime)(r),r.status=r.status??"initializing";let n=ne();return r.features={store:n,renderFeature:async a=>await e({...a,store:await n}),write:async(...a)=>{let o=await f,i=a[1]||{};return a[1]={context:"frontend",...i},o.write(...a)},rewrite:async(...a)=>{let o=await f,i=a[1]||{};return a[1]={context:"frontend",...i},o.rewrite(...a)},proofread:async(...a)=>{let o=await f,i=a[1]||{};return a[1]={context:"frontend",...i},o.proofread(...a)},summarize:async(...a)=>{let o=await f,i=a[1]||{};return a[1]={context:"frontend",...i},o.summarize(...a)},translate:async(...a)=>{let o=await f,i=a[1]||{};return a[1]={context:"frontend",...i},o.translate(...a)},detectLanguage:async(...a)=>{let o=await f,i=a[1]||{};return a[1]={context:"frontend",...i},o.detectLanguage(...a)},prompt:async(...a)=>{let o=await f,i=a[1]||{};return a[1]={context:"frontend",...i},o.prompt(...a)},sendChatMessage:async(...a)=>(await f).sendChatMessage(...a),sendFeedbackMessage:async(...a)=>(await f).sendFeedbackMessage(...a)},n.then(()=>{r.status="available",t?.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),t?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(a)})}),r}});Se();0&&(module.exports={AiKitChatbotIcon,AiKitFeatureIcon,BackendError,LANGUAGE_OPTIONS,TEXT_DOMAIN,checkOnDeviceAvailability,decideCapability,detectLanguage,dispatchBackend,getAiKitPlugin,getMinChromeVersions,getPromptOptions,getProofreadOptions,getRewriteOptions,getStore,getStoreDispatch,getStoreSelect,getSummarizeOptions,getTranslateOptions,getWriteOptions,initializeAiKit,observeStore,prompt,proofread,rewrite,sanitizeAiKitConfig,sendChatMessage,sendFeedbackMessage,summarize,translate,waitForAiKitReady,write});
|
package/dist/index.d.cts
CHANGED
|
@@ -17,6 +17,10 @@ interface AiKitConfig {
|
|
|
17
17
|
*/
|
|
18
18
|
declare const sanitizeAiKitConfig: (input: unknown) => AiKitConfig;
|
|
19
19
|
declare const actions: {
|
|
20
|
+
setShowChatbotPreview(showChatbotPreview: boolean): {
|
|
21
|
+
type: string;
|
|
22
|
+
showChatbotPreview: boolean;
|
|
23
|
+
};
|
|
20
24
|
setLanguage(language: string | undefined | null): {
|
|
21
25
|
type: string;
|
|
22
26
|
language: string | null | undefined;
|
|
@@ -31,6 +35,7 @@ interface CustomTranslations {
|
|
|
31
35
|
}
|
|
32
36
|
interface State {
|
|
33
37
|
config: AiKitConfig | null;
|
|
38
|
+
showChatbotPreview: boolean;
|
|
34
39
|
language: string | undefined | null;
|
|
35
40
|
direction: "ltr" | "rtl" | "auto" | undefined | null;
|
|
36
41
|
customTranslations: CustomTranslations | null;
|
|
@@ -38,6 +43,7 @@ interface State {
|
|
|
38
43
|
type Store = StoreDescriptor;
|
|
39
44
|
type StoreSelectors = {
|
|
40
45
|
getConfig(): AiKitConfig | null;
|
|
46
|
+
isShowChatbotPreview(): boolean;
|
|
41
47
|
getCustomTranslations(): CustomTranslations | null;
|
|
42
48
|
getLanguage(): string | undefined | null;
|
|
43
49
|
getDirection(): "ltr" | "rtl" | "auto" | undefined | null;
|
|
@@ -69,6 +75,8 @@ interface AiKitFeatures {
|
|
|
69
75
|
readonly translate: Features["translate"];
|
|
70
76
|
readonly detectLanguage: Features["detectLanguage"];
|
|
71
77
|
readonly prompt: Features["prompt"];
|
|
78
|
+
readonly sendChatMessage: Features["sendChatMessage"];
|
|
79
|
+
readonly sendFeedbackMessage: Features["sendFeedbackMessage"];
|
|
72
80
|
readonly renderFeature: (args: AiFeatureArgs) => Promise<AiWorkerHandle>;
|
|
73
81
|
}
|
|
74
82
|
interface AiKitSettings {
|
|
@@ -171,10 +179,68 @@ type AiWorkerProps = {
|
|
|
171
179
|
dark?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
|
|
172
180
|
};
|
|
173
181
|
className?: string;
|
|
174
|
-
|
|
182
|
+
innerCSS?: string;
|
|
175
183
|
title?: string;
|
|
176
184
|
onClose: () => void;
|
|
177
185
|
};
|
|
186
|
+
type HistoryStorageMode = "localstorage" | "sessionstorage" | "nostorage";
|
|
187
|
+
type OpenButtonIconLayout = "top" | "bottom" | "left" | "right";
|
|
188
|
+
type OpenButtonPosition = "bottom-right" | "bottom-left" | "top-right" | "top-left";
|
|
189
|
+
type AiChatbotLabels = Partial<{
|
|
190
|
+
modalTitle: string;
|
|
191
|
+
userLabel: string;
|
|
192
|
+
assistantLabel: string;
|
|
193
|
+
askMeLabel: string;
|
|
194
|
+
sendLabel: string;
|
|
195
|
+
cancelLabel: string;
|
|
196
|
+
resetLabel: string;
|
|
197
|
+
confirmLabel: string;
|
|
198
|
+
clickAgainToConfirmLabel: string;
|
|
199
|
+
notSentLabel: string;
|
|
200
|
+
editLabel: string;
|
|
201
|
+
readyLabel: string;
|
|
202
|
+
readyEmptyLabel: string;
|
|
203
|
+
addLabel: string;
|
|
204
|
+
addImageLabel: string;
|
|
205
|
+
removeImageLabel: string;
|
|
206
|
+
closeChatLabel: string;
|
|
207
|
+
maximizeLabel: string;
|
|
208
|
+
restoreSizeLabel: string;
|
|
209
|
+
referencesLabel: string;
|
|
210
|
+
referenceLabel: string;
|
|
211
|
+
acceptResponseLabel: string;
|
|
212
|
+
rejectResponseLabel: string;
|
|
213
|
+
placeholder: string;
|
|
214
|
+
emptyResponseLabel: string;
|
|
215
|
+
unexpectedErrorLabel: string;
|
|
216
|
+
}>;
|
|
217
|
+
type AiChatbotProps = AiWorkerProps & {
|
|
218
|
+
placeholder?: string;
|
|
219
|
+
maxImages?: number;
|
|
220
|
+
maxImageBytes?: number;
|
|
221
|
+
/**
|
|
222
|
+
* Chat history persistence:
|
|
223
|
+
* - "localstorage" (default)
|
|
224
|
+
* - "sessionstorage"
|
|
225
|
+
* - "nostorage"
|
|
226
|
+
*/
|
|
227
|
+
historyStorage?: HistoryStorageMode;
|
|
228
|
+
/**
|
|
229
|
+
* UI labels override (admin UI will populate later)
|
|
230
|
+
*/
|
|
231
|
+
labels?: AiChatbotLabels;
|
|
232
|
+
/**
|
|
233
|
+
* Open button icon layout relative to text.
|
|
234
|
+
* Default: "top"
|
|
235
|
+
*/
|
|
236
|
+
openButtonIconLayout?: OpenButtonIconLayout;
|
|
237
|
+
/**
|
|
238
|
+
* Open button position in the viewport.
|
|
239
|
+
* Default: "bottom-right"
|
|
240
|
+
* Options: "bottom-right" | "bottom-left" | "top-right" | "top-left"
|
|
241
|
+
*/
|
|
242
|
+
openButtonPosition?: OpenButtonPosition;
|
|
243
|
+
};
|
|
178
244
|
type AiFeatureProps = AiWorkerProps & {
|
|
179
245
|
mode: AiFeatureMode;
|
|
180
246
|
context?: ContextKind;
|
|
@@ -273,7 +339,7 @@ interface TranslateArgs {
|
|
|
273
339
|
interface TranslateResult {
|
|
274
340
|
result: string;
|
|
275
341
|
}
|
|
276
|
-
type PromptMessages =
|
|
342
|
+
type PromptMessages = Array<{
|
|
277
343
|
role: "system" | "user" | "assistant";
|
|
278
344
|
content: string;
|
|
279
345
|
}>;
|
|
@@ -309,19 +375,39 @@ interface PromptArgs {
|
|
|
309
375
|
}
|
|
310
376
|
interface PromptResult {
|
|
311
377
|
result: string;
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
modelOutputLanguage?: AiKitLanguageCode;
|
|
316
|
-
translated?: boolean;
|
|
317
|
-
strategy?: OnDeviceUnsupportedLanguageStrategy;
|
|
378
|
+
sessionId?: string;
|
|
379
|
+
metadata?: {
|
|
380
|
+
messageId: string;
|
|
318
381
|
};
|
|
319
382
|
}
|
|
383
|
+
interface ChatMessageArgs {
|
|
384
|
+
sessionId?: string;
|
|
385
|
+
message?: string;
|
|
386
|
+
sharedContext?: string;
|
|
387
|
+
images?: PromptImageInput[];
|
|
388
|
+
/**
|
|
389
|
+
* Optional on-device tuning:
|
|
390
|
+
*/
|
|
391
|
+
topK?: number;
|
|
392
|
+
temperature?: number;
|
|
393
|
+
}
|
|
394
|
+
interface FeedbackMessageArgs {
|
|
395
|
+
feedbackType: "accepted" | "rejected";
|
|
396
|
+
feedbackMessageId: string;
|
|
397
|
+
sessionId: string;
|
|
398
|
+
}
|
|
320
399
|
type AnyCreateCoreOptions = LanguageModelCreateCoreOptions | SummarizerCreateCoreOptions | WriterCreateCoreOptions | RewriterCreateCoreOptions | ProofreaderCreateCoreOptions | LanguageDetectorCreateCoreOptions | TranslatorCreateCoreOptions;
|
|
321
400
|
interface Capabilities {
|
|
322
401
|
MIN_CHROME_VERSION?: Partial<Record<BuiltInAiFeature, number>>;
|
|
323
402
|
checkOnDeviceAvailability: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions) => Promise<DeviceAvailability>;
|
|
324
403
|
decideCapability: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions, modeOverride?: AiModePreference) => Promise<CapabilityDecision>;
|
|
404
|
+
resolveBackend: () => Promise<{
|
|
405
|
+
available: boolean;
|
|
406
|
+
transport?: BackendTransport;
|
|
407
|
+
apiName?: string;
|
|
408
|
+
baseUrl?: string;
|
|
409
|
+
reason?: string;
|
|
410
|
+
}>;
|
|
325
411
|
willUseOnDevice: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions) => Promise<boolean>;
|
|
326
412
|
willUseBackend: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions) => Promise<boolean>;
|
|
327
413
|
}
|
|
@@ -346,6 +432,8 @@ interface Features {
|
|
|
346
432
|
detectLanguage: (args: DetectLanguageArgs, options?: FeatureOptions) => Promise<DetectLanguageOutput>;
|
|
347
433
|
getPromptOptions: (args: Partial<PromptArgs>) => Promise<LanguageModelCreateCoreOptions>;
|
|
348
434
|
prompt: (args: PromptArgs, options?: FeatureOptions) => Promise<PromptResult>;
|
|
435
|
+
sendChatMessage: (args: ChatMessageArgs, options?: FeatureOptions) => Promise<PromptResult>;
|
|
436
|
+
sendFeedbackMessage: (args: FeedbackMessageArgs, options?: FeatureOptions) => Promise<PromptResult>;
|
|
349
437
|
}
|
|
350
438
|
|
|
351
439
|
type AiKitReadyEvent = "wpsuite:ai-kit:ready";
|
|
@@ -379,6 +467,8 @@ declare const translate: (...args: Parameters<Features["translate"]>) => Promise
|
|
|
379
467
|
declare const detectLanguage: (...args: Parameters<Features["detectLanguage"]>) => Promise<DetectLanguageOutput>;
|
|
380
468
|
declare const getPromptOptions: (...args: Parameters<Features["getPromptOptions"]>) => Promise<LanguageModelCreateCoreOptions>;
|
|
381
469
|
declare const prompt: (...args: Parameters<Features["prompt"]>) => Promise<PromptResult>;
|
|
470
|
+
declare const sendChatMessage: (...args: Parameters<Features["sendChatMessage"]>) => Promise<PromptResult>;
|
|
471
|
+
declare const sendFeedbackMessage: (...args: Parameters<Features["sendFeedbackMessage"]>) => Promise<PromptResult>;
|
|
382
472
|
declare const initializeAiKit: (renderFeature: (args: AiFeatureArgs) => Promise<AiWorkerHandle>) => AiKitPlugin;
|
|
383
473
|
|
|
384
|
-
export { type AiFeatureArgs, type AiFeatureMode, type AiFeatureProps, type AiKit, AiKitChatbotIcon, type AiKitConfig, type AiKitErrorEvent, AiKitFeatureIcon, type AiKitFeatures, type AiKitLanguageCode, type AiKitLanguageProfile, type AiKitLanguageRef, type AiKitPlugin, type AiKitReadyEvent, type AiKitSettings, type AiKitStatusEvent, type AiKitStatusStep, type AiModePreference, type AiWorkerHandle, type AiWorkerProps, type AnyCreateCoreOptions, type Backend, type BackendCallOptions, BackendError, type BackendTransport, type BuiltInAiFeature, type Capabilities, type CapabilityDecision, type CapabilitySource, type ContextKind, type CustomTranslations, type DetectLanguageArgs, type DetectLanguageOutput, type DeviceAvailability, type FeatureOptions, type Features, LANGUAGE_OPTIONS, type OnDeviceUnsupportedLanguageStrategy, type PromptArgs, type PromptImageInput, type PromptMessages, type PromptResult, type ProofreadArgs, type ProofreadOutput, type RewriteArgs, type RewriteResult, type State, type Store, type SummarizeArgs, type SummarizeResult, type TranslateArgs, type TranslateResult, type WriteArgs, type WriteResult, checkOnDeviceAvailability, decideCapability, detectLanguage, dispatchBackend, getAiKitPlugin, getMinChromeVersions, getPromptOptions, getProofreadOptions, getRewriteOptions, getStore, getStoreDispatch, getStoreSelect, getSummarizeOptions, getTranslateOptions, getWriteOptions, initializeAiKit, observeStore, prompt, proofread, rewrite, sanitizeAiKitConfig, summarize, translate, waitForAiKitReady, write };
|
|
474
|
+
export { type AiChatbotLabels, type AiChatbotProps, type AiFeatureArgs, type AiFeatureMode, type AiFeatureProps, type AiKit, AiKitChatbotIcon, type AiKitConfig, type AiKitErrorEvent, AiKitFeatureIcon, type AiKitFeatures, type AiKitLanguageCode, type AiKitLanguageProfile, type AiKitLanguageRef, type AiKitPlugin, type AiKitReadyEvent, type AiKitSettings, type AiKitStatusEvent, type AiKitStatusStep, type AiModePreference, type AiWorkerHandle, type AiWorkerProps, type AnyCreateCoreOptions, type Backend, type BackendCallOptions, BackendError, type BackendTransport, type BuiltInAiFeature, type Capabilities, type CapabilityDecision, type CapabilitySource, type ChatMessageArgs, type ContextKind, type CustomTranslations, type DetectLanguageArgs, type DetectLanguageOutput, type DeviceAvailability, type FeatureOptions, type Features, type FeedbackMessageArgs, type HistoryStorageMode, LANGUAGE_OPTIONS, type OnDeviceUnsupportedLanguageStrategy, type OpenButtonIconLayout, type OpenButtonPosition, type PromptArgs, type PromptImageInput, type PromptMessages, type PromptResult, type ProofreadArgs, type ProofreadOutput, type RewriteArgs, type RewriteResult, type State, type Store, type SummarizeArgs, type SummarizeResult, type TranslateArgs, type TranslateResult, type WriteArgs, type WriteResult, checkOnDeviceAvailability, decideCapability, detectLanguage, dispatchBackend, getAiKitPlugin, getMinChromeVersions, getPromptOptions, getProofreadOptions, getRewriteOptions, getStore, getStoreDispatch, getStoreSelect, getSummarizeOptions, getTranslateOptions, getWriteOptions, initializeAiKit, observeStore, prompt, proofread, rewrite, sanitizeAiKitConfig, sendChatMessage, sendFeedbackMessage, summarize, translate, waitForAiKitReady, write };
|
package/dist/index.d.ts
CHANGED
|
@@ -17,6 +17,10 @@ interface AiKitConfig {
|
|
|
17
17
|
*/
|
|
18
18
|
declare const sanitizeAiKitConfig: (input: unknown) => AiKitConfig;
|
|
19
19
|
declare const actions: {
|
|
20
|
+
setShowChatbotPreview(showChatbotPreview: boolean): {
|
|
21
|
+
type: string;
|
|
22
|
+
showChatbotPreview: boolean;
|
|
23
|
+
};
|
|
20
24
|
setLanguage(language: string | undefined | null): {
|
|
21
25
|
type: string;
|
|
22
26
|
language: string | null | undefined;
|
|
@@ -31,6 +35,7 @@ interface CustomTranslations {
|
|
|
31
35
|
}
|
|
32
36
|
interface State {
|
|
33
37
|
config: AiKitConfig | null;
|
|
38
|
+
showChatbotPreview: boolean;
|
|
34
39
|
language: string | undefined | null;
|
|
35
40
|
direction: "ltr" | "rtl" | "auto" | undefined | null;
|
|
36
41
|
customTranslations: CustomTranslations | null;
|
|
@@ -38,6 +43,7 @@ interface State {
|
|
|
38
43
|
type Store = StoreDescriptor;
|
|
39
44
|
type StoreSelectors = {
|
|
40
45
|
getConfig(): AiKitConfig | null;
|
|
46
|
+
isShowChatbotPreview(): boolean;
|
|
41
47
|
getCustomTranslations(): CustomTranslations | null;
|
|
42
48
|
getLanguage(): string | undefined | null;
|
|
43
49
|
getDirection(): "ltr" | "rtl" | "auto" | undefined | null;
|
|
@@ -69,6 +75,8 @@ interface AiKitFeatures {
|
|
|
69
75
|
readonly translate: Features["translate"];
|
|
70
76
|
readonly detectLanguage: Features["detectLanguage"];
|
|
71
77
|
readonly prompt: Features["prompt"];
|
|
78
|
+
readonly sendChatMessage: Features["sendChatMessage"];
|
|
79
|
+
readonly sendFeedbackMessage: Features["sendFeedbackMessage"];
|
|
72
80
|
readonly renderFeature: (args: AiFeatureArgs) => Promise<AiWorkerHandle>;
|
|
73
81
|
}
|
|
74
82
|
interface AiKitSettings {
|
|
@@ -171,10 +179,68 @@ type AiWorkerProps = {
|
|
|
171
179
|
dark?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
|
|
172
180
|
};
|
|
173
181
|
className?: string;
|
|
174
|
-
|
|
182
|
+
innerCSS?: string;
|
|
175
183
|
title?: string;
|
|
176
184
|
onClose: () => void;
|
|
177
185
|
};
|
|
186
|
+
type HistoryStorageMode = "localstorage" | "sessionstorage" | "nostorage";
|
|
187
|
+
type OpenButtonIconLayout = "top" | "bottom" | "left" | "right";
|
|
188
|
+
type OpenButtonPosition = "bottom-right" | "bottom-left" | "top-right" | "top-left";
|
|
189
|
+
type AiChatbotLabels = Partial<{
|
|
190
|
+
modalTitle: string;
|
|
191
|
+
userLabel: string;
|
|
192
|
+
assistantLabel: string;
|
|
193
|
+
askMeLabel: string;
|
|
194
|
+
sendLabel: string;
|
|
195
|
+
cancelLabel: string;
|
|
196
|
+
resetLabel: string;
|
|
197
|
+
confirmLabel: string;
|
|
198
|
+
clickAgainToConfirmLabel: string;
|
|
199
|
+
notSentLabel: string;
|
|
200
|
+
editLabel: string;
|
|
201
|
+
readyLabel: string;
|
|
202
|
+
readyEmptyLabel: string;
|
|
203
|
+
addLabel: string;
|
|
204
|
+
addImageLabel: string;
|
|
205
|
+
removeImageLabel: string;
|
|
206
|
+
closeChatLabel: string;
|
|
207
|
+
maximizeLabel: string;
|
|
208
|
+
restoreSizeLabel: string;
|
|
209
|
+
referencesLabel: string;
|
|
210
|
+
referenceLabel: string;
|
|
211
|
+
acceptResponseLabel: string;
|
|
212
|
+
rejectResponseLabel: string;
|
|
213
|
+
placeholder: string;
|
|
214
|
+
emptyResponseLabel: string;
|
|
215
|
+
unexpectedErrorLabel: string;
|
|
216
|
+
}>;
|
|
217
|
+
type AiChatbotProps = AiWorkerProps & {
|
|
218
|
+
placeholder?: string;
|
|
219
|
+
maxImages?: number;
|
|
220
|
+
maxImageBytes?: number;
|
|
221
|
+
/**
|
|
222
|
+
* Chat history persistence:
|
|
223
|
+
* - "localstorage" (default)
|
|
224
|
+
* - "sessionstorage"
|
|
225
|
+
* - "nostorage"
|
|
226
|
+
*/
|
|
227
|
+
historyStorage?: HistoryStorageMode;
|
|
228
|
+
/**
|
|
229
|
+
* UI labels override (admin UI will populate later)
|
|
230
|
+
*/
|
|
231
|
+
labels?: AiChatbotLabels;
|
|
232
|
+
/**
|
|
233
|
+
* Open button icon layout relative to text.
|
|
234
|
+
* Default: "top"
|
|
235
|
+
*/
|
|
236
|
+
openButtonIconLayout?: OpenButtonIconLayout;
|
|
237
|
+
/**
|
|
238
|
+
* Open button position in the viewport.
|
|
239
|
+
* Default: "bottom-right"
|
|
240
|
+
* Options: "bottom-right" | "bottom-left" | "top-right" | "top-left"
|
|
241
|
+
*/
|
|
242
|
+
openButtonPosition?: OpenButtonPosition;
|
|
243
|
+
};
|
|
178
244
|
type AiFeatureProps = AiWorkerProps & {
|
|
179
245
|
mode: AiFeatureMode;
|
|
180
246
|
context?: ContextKind;
|
|
@@ -273,7 +339,7 @@ interface TranslateArgs {
|
|
|
273
339
|
interface TranslateResult {
|
|
274
340
|
result: string;
|
|
275
341
|
}
|
|
276
|
-
type PromptMessages =
|
|
342
|
+
type PromptMessages = Array<{
|
|
277
343
|
role: "system" | "user" | "assistant";
|
|
278
344
|
content: string;
|
|
279
345
|
}>;
|
|
@@ -309,19 +375,39 @@ interface PromptArgs {
|
|
|
309
375
|
}
|
|
310
376
|
interface PromptResult {
|
|
311
377
|
result: string;
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
modelOutputLanguage?: AiKitLanguageCode;
|
|
316
|
-
translated?: boolean;
|
|
317
|
-
strategy?: OnDeviceUnsupportedLanguageStrategy;
|
|
378
|
+
sessionId?: string;
|
|
379
|
+
metadata?: {
|
|
380
|
+
messageId: string;
|
|
318
381
|
};
|
|
319
382
|
}
|
|
383
|
+
interface ChatMessageArgs {
|
|
384
|
+
sessionId?: string;
|
|
385
|
+
message?: string;
|
|
386
|
+
sharedContext?: string;
|
|
387
|
+
images?: PromptImageInput[];
|
|
388
|
+
/**
|
|
389
|
+
* Optional on-device tuning:
|
|
390
|
+
*/
|
|
391
|
+
topK?: number;
|
|
392
|
+
temperature?: number;
|
|
393
|
+
}
|
|
394
|
+
interface FeedbackMessageArgs {
|
|
395
|
+
feedbackType: "accepted" | "rejected";
|
|
396
|
+
feedbackMessageId: string;
|
|
397
|
+
sessionId: string;
|
|
398
|
+
}
|
|
320
399
|
type AnyCreateCoreOptions = LanguageModelCreateCoreOptions | SummarizerCreateCoreOptions | WriterCreateCoreOptions | RewriterCreateCoreOptions | ProofreaderCreateCoreOptions | LanguageDetectorCreateCoreOptions | TranslatorCreateCoreOptions;
|
|
321
400
|
interface Capabilities {
|
|
322
401
|
MIN_CHROME_VERSION?: Partial<Record<BuiltInAiFeature, number>>;
|
|
323
402
|
checkOnDeviceAvailability: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions) => Promise<DeviceAvailability>;
|
|
324
403
|
decideCapability: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions, modeOverride?: AiModePreference) => Promise<CapabilityDecision>;
|
|
404
|
+
resolveBackend: () => Promise<{
|
|
405
|
+
available: boolean;
|
|
406
|
+
transport?: BackendTransport;
|
|
407
|
+
apiName?: string;
|
|
408
|
+
baseUrl?: string;
|
|
409
|
+
reason?: string;
|
|
410
|
+
}>;
|
|
325
411
|
willUseOnDevice: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions) => Promise<boolean>;
|
|
326
412
|
willUseBackend: (feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions) => Promise<boolean>;
|
|
327
413
|
}
|
|
@@ -346,6 +432,8 @@ interface Features {
|
|
|
346
432
|
detectLanguage: (args: DetectLanguageArgs, options?: FeatureOptions) => Promise<DetectLanguageOutput>;
|
|
347
433
|
getPromptOptions: (args: Partial<PromptArgs>) => Promise<LanguageModelCreateCoreOptions>;
|
|
348
434
|
prompt: (args: PromptArgs, options?: FeatureOptions) => Promise<PromptResult>;
|
|
435
|
+
sendChatMessage: (args: ChatMessageArgs, options?: FeatureOptions) => Promise<PromptResult>;
|
|
436
|
+
sendFeedbackMessage: (args: FeedbackMessageArgs, options?: FeatureOptions) => Promise<PromptResult>;
|
|
349
437
|
}
|
|
350
438
|
|
|
351
439
|
type AiKitReadyEvent = "wpsuite:ai-kit:ready";
|
|
@@ -379,6 +467,8 @@ declare const translate: (...args: Parameters<Features["translate"]>) => Promise
|
|
|
379
467
|
declare const detectLanguage: (...args: Parameters<Features["detectLanguage"]>) => Promise<DetectLanguageOutput>;
|
|
380
468
|
declare const getPromptOptions: (...args: Parameters<Features["getPromptOptions"]>) => Promise<LanguageModelCreateCoreOptions>;
|
|
381
469
|
declare const prompt: (...args: Parameters<Features["prompt"]>) => Promise<PromptResult>;
|
|
470
|
+
declare const sendChatMessage: (...args: Parameters<Features["sendChatMessage"]>) => Promise<PromptResult>;
|
|
471
|
+
declare const sendFeedbackMessage: (...args: Parameters<Features["sendFeedbackMessage"]>) => Promise<PromptResult>;
|
|
382
472
|
declare const initializeAiKit: (renderFeature: (args: AiFeatureArgs) => Promise<AiWorkerHandle>) => AiKitPlugin;
|
|
383
473
|
|
|
384
|
-
export { type AiFeatureArgs, type AiFeatureMode, type AiFeatureProps, type AiKit, AiKitChatbotIcon, type AiKitConfig, type AiKitErrorEvent, AiKitFeatureIcon, type AiKitFeatures, type AiKitLanguageCode, type AiKitLanguageProfile, type AiKitLanguageRef, type AiKitPlugin, type AiKitReadyEvent, type AiKitSettings, type AiKitStatusEvent, type AiKitStatusStep, type AiModePreference, type AiWorkerHandle, type AiWorkerProps, type AnyCreateCoreOptions, type Backend, type BackendCallOptions, BackendError, type BackendTransport, type BuiltInAiFeature, type Capabilities, type CapabilityDecision, type CapabilitySource, type ContextKind, type CustomTranslations, type DetectLanguageArgs, type DetectLanguageOutput, type DeviceAvailability, type FeatureOptions, type Features, LANGUAGE_OPTIONS, type OnDeviceUnsupportedLanguageStrategy, type PromptArgs, type PromptImageInput, type PromptMessages, type PromptResult, type ProofreadArgs, type ProofreadOutput, type RewriteArgs, type RewriteResult, type State, type Store, type SummarizeArgs, type SummarizeResult, type TranslateArgs, type TranslateResult, type WriteArgs, type WriteResult, checkOnDeviceAvailability, decideCapability, detectLanguage, dispatchBackend, getAiKitPlugin, getMinChromeVersions, getPromptOptions, getProofreadOptions, getRewriteOptions, getStore, getStoreDispatch, getStoreSelect, getSummarizeOptions, getTranslateOptions, getWriteOptions, initializeAiKit, observeStore, prompt, proofread, rewrite, sanitizeAiKitConfig, summarize, translate, waitForAiKitReady, write };
|
|
474
|
+
export { type AiChatbotLabels, type AiChatbotProps, type AiFeatureArgs, type AiFeatureMode, type AiFeatureProps, type AiKit, AiKitChatbotIcon, type AiKitConfig, type AiKitErrorEvent, AiKitFeatureIcon, type AiKitFeatures, type AiKitLanguageCode, type AiKitLanguageProfile, type AiKitLanguageRef, type AiKitPlugin, type AiKitReadyEvent, type AiKitSettings, type AiKitStatusEvent, type AiKitStatusStep, type AiModePreference, type AiWorkerHandle, type AiWorkerProps, type AnyCreateCoreOptions, type Backend, type BackendCallOptions, BackendError, type BackendTransport, type BuiltInAiFeature, type Capabilities, type CapabilityDecision, type CapabilitySource, type ChatMessageArgs, type ContextKind, type CustomTranslations, type DetectLanguageArgs, type DetectLanguageOutput, type DeviceAvailability, type FeatureOptions, type Features, type FeedbackMessageArgs, type HistoryStorageMode, LANGUAGE_OPTIONS, type OnDeviceUnsupportedLanguageStrategy, type OpenButtonIconLayout, type OpenButtonPosition, type PromptArgs, type PromptImageInput, type PromptMessages, type PromptResult, type ProofreadArgs, type ProofreadOutput, type RewriteArgs, type RewriteResult, type State, type Store, type SummarizeArgs, type SummarizeResult, type TranslateArgs, type TranslateResult, type WriteArgs, type WriteResult, checkOnDeviceAvailability, decideCapability, detectLanguage, dispatchBackend, getAiKitPlugin, getMinChromeVersions, getPromptOptions, getProofreadOptions, getRewriteOptions, getStore, getStoreDispatch, getStoreSelect, getSummarizeOptions, getTranslateOptions, getWriteOptions, initializeAiKit, observeStore, prompt, proofread, rewrite, sanitizeAiKitConfig, sendChatMessage, sendFeedbackMessage, summarize, translate, waitForAiKitReady, write };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var we=Object.defineProperty;var h=(e,t)=>()=>(e&&(t=e(e=0)),t);var U=(e,t)=>{for(var r in t)we(e,r,{get:t[r],enumerable:!0})};function R(){return globalThis.WpSuite?.plugins?.aiKit}async function H(e=8e3){let t=R();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,a)=>{let n=()=>i(r),o=()=>i(()=>a(new Error("AiKit failed"))),i=l=>{window.removeEventListener("wpsuite:ai-kit:ready",n),window.removeEventListener("wpsuite:ai-kit:error",o),u&&clearTimeout(u),l()};window.addEventListener("wpsuite:ai-kit:ready",n,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let u=e?window.setTimeout(()=>i(()=>a(new Error("AiKit timeout"))),e):0})}}async function ve(e=1e4){await H(e);let r=R()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var z=h(()=>{"use strict"});import{getConfig as Ae}from"@smart-cloud/wpsuite-core";import{createReduxStore as Ce,dispatch as he,register as Pe,select as ke,subscribe as xe}from"@wordpress/data";import{I18n as V}from"aws-amplify/utils";var W,X,Le,Se,Re,Te,Oe,Be,E,J,Ke,F=h(()=>{"use strict";z();typeof WpSuite<"u"?W=WpSuite.siteSettings:W={};X=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),r},Le=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="+W.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},Se=async()=>{let e=X(await Ae("aiKit")),t=await Le();return{config:e,language:void 0,direction:void 0,customTranslations:t}},Re={setLanguage(e){return!e||e==="system"?V.setLanguage(""):V.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Te={getConfig(e){return e.config},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},Oe={},Be=e=>he(e),E=e=>ke(e),J=async()=>{let e=await Se(),t=Ce("wpsuite/ai-kit",{reducer(r=e,a){switch(a.type){case"SET_LANGUAGE":return{...r,language:a.language};case"SET_DIRECTION":return{...r,direction:a.direction}}return r},actions:Re,selectors:Te,resolvers:Oe});return Pe(t),t},Ke=(e,t,r)=>{let a;function n(){let i=E(e).getState(),u=t(i);if(u!==a){let l=a;a=u,r(a,l)}}let o=xe(n,e);return n(),o}});var P,N=h(()=>{"use strict";P=class extends Error{constructor(r,a,n){super(r);this.decision=a;this.status=n;this.name="AiBackendError"}}});import{jsx as A,jsxs as Z}from"react/jsx-runtime";var Ft,It,Q=h(()=>{"use strict";Ft=e=>Z("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"})]}),It=e=>Z("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"})]})});var ae={};U(ae,{MIN_CHROME_VERSION:()=>te,checkOnDeviceAvailability:()=>ne,decideCapability:()=>M});import{getWpSuite as Ee}from"@smart-cloud/wpsuite-core";async function Y(){let t=await Fe?.plugins?.aiKit?.features.store;return E(t).getConfig()??{}}function ee(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function Ie(e){if(e.mode)return e.mode;let{transport:t}=ee(e);return t?"backend-fallback":"local-only"}async function Me(){let e=await Y(),{transport:t,backendApiName:r,backendBaseUrl:a}=ee(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return a?{available:!0,transport:t,baseUrl:a,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let n=globalThis.WpSuite?.plugins?.gatey;return!n?.availability||await n.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function x(e){return typeof globalThis[e]<"u"}function re(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function I(e,t){return e?.find(r=>r.brand===t)?.version}async function De(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function Ue(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?re(t[1]):void 0}function ze(){return!!navigator?.brave}async function We(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await De(),a=I(r,"Microsoft Edge")??I(r,"Microsoft Edge WebView2"),n=I(r,"Google Chrome")??I(r,"Chromium"),o=!!a||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),i=/\bOPR\//i.test(t),u=/\bVivaldi\//i.test(t),l=/\bSamsungBrowser\//i.test(t),s=/\bFirefox\//i.test(t),d=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),g=ze()||/\bBrave\//i.test(t);if(o||i||u||l||s||d||g)return{allowed:!1,reason:o?"edge":g?"brave":s?"firefox":d?"safari":i?"opera":u?"vivaldi":l?"samsung":"unsupported-browser"};let y=re(n)??Ue(t),p=te[e];return p?y?y<p?{allowed:!1,reason:`chrome-too-old-${y}-lt-${p}`,chromeMajor:y}:{allowed:!0,reason:"ok",chromeMajor:y}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:y}}async function ne(e,t){try{let r=await We(e),a=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:a};switch(e){case"writer":{if(!x("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await Writer.availability(t);return{available:n!=="unavailable",status:n,reason:a}}case"rewriter":{if(!x("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await Rewriter.availability(t);return{available:n!=="unavailable",status:n,reason:a}}case"summarizer":{if(!x("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await Summarizer.availability(t);return{available:n!=="unavailable",status:n,reason:a}}case"proofreader":{if(!x("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await Proofreader.availability(t);return{available:n!=="unavailable",status:n,reason:a}}case"language-detector":{if(!x("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await LanguageDetector.availability(t);return{available:n!=="unavailable",status:n,reason:a}}case"translator":{if(!x("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:a};let n=t;if(!n?.sourceLanguage||!n?.targetLanguage)return{available:!1,status:"error",reason:a,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let o=await Translator.availability({...n,sourceLanguage:n.sourceLanguage==="auto"?"en":n.sourceLanguage,targetLanguage:n.sourceLanguage==="auto"||n.sourceLanguage===n.targetLanguage?"hu":n.targetLanguage});return{available:o!=="unavailable",status:o,reason:a}}case"prompt":{if(!x("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:a};let n=await LanguageModel.availability(t);return{available:n!=="unavailable",status:n,reason:a}}default:return{available:!1,status:"unknown-feature",reason:a}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function M(e,t,r){let a=await Y(),n=r||Ie(a),o=await Me(),i=await ne(e,t),u=i.available,l=o.available,s={feature:e,mode:n,onDeviceAvailable:u,onDeviceStatus:i.status,onDeviceReason:i.reason,backendAvailable:l,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason};return n==="local-only"?u?{...s,source:"on-device",reason:`local-only: on-device available (${i.reason??i.status})`}:{...s,source:"none",reason:`local-only: on-device unavailable (${i.reason??i.status})`}:n==="backend-only"?l?{...s,source:"backend",reason:`backend-only: backend available (${o.reason??"n/a"})`}:{...s,source:"none",reason:`backend-only: backend unavailable (${o.reason??"n/a"})`}:u?{...s,source:"on-device",reason:`backend-fallback: using on-device (${i.reason??i.status})`}:l?{...s,source:"backend",reason:`backend-fallback: using backend (${o.reason??"n/a"}; on-device: ${i.reason??i.status})`}:{...s,source:"none",reason:`No on-device AI or backend available (on-device: ${i.reason??i.status}; backend: ${o.reason??"n/a"})`}}var Fe,te,_=h(()=>{"use strict";F();Fe=Ee();te={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var oe={};U(oe,{dispatchBackend:()=>q,withRecaptchaHeaders:()=>O});import{getRecaptcha as Ne}from"@smart-cloud/wpsuite-core";function _e(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}async function qe(e){if(e!=="frontend")return;let t=_e();if(!t?.reCaptchaSiteKey)return;let{execute:r}=await Ne(t?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let n=await r(t.reCaptchaSiteKey,{action:"generate"});return typeof n=="string"&&n?n:void 0}catch{return}}async function O(e,t){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await qe(e);return r?{...t,"X-Recaptcha-Token":r}:t}function T(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 Ge(e,t){if(!$e(t))return t;let r=je[e];if(!r)return t;let a={};for(let n of r)n in t&&(a[n]=t[n]);return a}function Xe(e,t){return(e==="admin"?He:Ve)[t]}async function q(e,t,r,a,n={}){let o=Xe(t,r),i=Ge(r,a);if(!o)throw new P(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new P("backendTransport=fetch but backendBaseUrl is missing.",e);return Je(e.backendBaseUrl,o,i,n,e,r,t)}if(!e.backendApiName)throw new P("backendTransport=gatey but backendApiName is missing.",e);return Ze(e.backendApiName,o,i,n,e,r,t)}async function Je(e,t,r,a,n,o,i){let u=`${e.replace(/\/+$/,"")}${t}`,l={"content-type":"application/json",...a.headers??{}},s=await O(i,l),d=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([p,w])=>[p,String(w)])).toString():"";T(a,{feature:o,context:i,step:"backend:request",source:"backend"}),T(a,{feature:o,context:i,step:"backend:waiting",source:"backend"});let g=await fetch(u+d,{method:"POST",headers:s,body:JSON.stringify(r??{}),signal:a.signal,credentials:"omit"});if(T(a,{feature:o,context:i,step:"backend:response",source:"backend"}),!g.ok){let p=`HTTP ${g.status}`;try{let w=await g.text();w&&(p=`${p}: ${w.substring(0,400)}`)}catch{}throw new P(`Fetch backend call failed: ${p}`,n,g.status)}return(g.headers.get("content-type")||"").includes("application/json")?await g.json():await g.text()}async function Ze(e,t,r,a,n,o,i){let l=globalThis.WpSuite?.plugins?.gatey;if(!l?.cognito?.post)throw new P("Gatey backend selected, but Gatey.cognito.post is not available.",n);let s=await O(i,{...a.headers??{}});T(a,{feature:o,context:i,step:"backend:request",source:"backend"}),T(a,{feature:o,context:i,step:"backend:waiting",source:"backend"});let d=l.cognito.post({apiName:e,path:t,options:{body:r,headers:s}});a?.signal?.addEventListener?.("abort",()=>{d.cancel()});let g=await d.response.then(y=>y.body.json());return T(a,{feature:o,context:i,step:"backend:response",source:"backend"}),g}var je,He,Ve,$=h(()=>{"use strict";N();je={prompt:["text","context","responseConstraint","sessionId","images","imageUrls","rejected","knowledgeBaseId","disableKB","enableRerank","kb_filters"],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"]};He={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Ve={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var me={};U(me,{detectLanguage:()=>dt,getPromptOptions:()=>pe,getProofreadOptions:()=>ce,getRewriteOptions:()=>le,getSummarizeOptions:()=>de,getTranslateOptions:()=>ge,getWriteOptions:()=>ue,prompt:()=>ht,proofread:()=>lt,rewrite:()=>ut,summarize:()=>ct,translate:()=>K,write:()=>st});import{getWpSuite as Qe}from"@smart-cloud/wpsuite-core";function C(){return(ie?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function B(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(a=>r===a.toLowerCase())}function c(e,t,r,a){try{r?.onStatus?.({feature:e,context:t,...a})}catch{}}function D(){return ie?.plugins?.aiKit?.settings?.sharedContext??void 0}function L(e){return e?.context??"admin"}function se(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}function Ye(e){return typeof e=="string"?e:e.map(t=>`${t.role.toUpperCase()}: ${t.content}`).join(`
|
|
1
|
+
var ke=Object.defineProperty;var h=(e,t)=>()=>(e&&(t=e(e=0)),t);var W=(e,t)=>{for(var r in t)ke(e,r,{get:t[r],enumerable:!0})};function R(){return globalThis.WpSuite?.plugins?.aiKit}async function X(e=8e3){let t=R();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,n)=>{let a=()=>i(r),o=()=>i(()=>n(new Error("AiKit failed"))),i=c=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),u&&clearTimeout(u),c()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let u=e?window.setTimeout(()=>i(()=>n(new Error("AiKit timeout"))),e):0})}}async function Ce(e=1e4){await X(e);let r=R()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var N=h(()=>{"use strict"});import{getConfig as he}from"@smart-cloud/wpsuite-core";import{createReduxStore as Ae,dispatch as Pe,register as xe,select as Le,subscribe as Se}from"@wordpress/data";import{I18n as J}from"aws-amplify/utils";var _,Z,Re,Te,Oe,Be,Ke,Fe,M,Q,Ee,U=h(()=>{"use strict";N();typeof WpSuite<"u"?_=WpSuite.siteSettings:_={};Z=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),r},Re=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="+_.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},Te=async()=>{let e=Z(await he("aiKit")),t=await Re();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Oe={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?J.setLanguage(""):J.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Be={getConfig(e){return e.config},getChatbotSettings(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},Ke={},Fe=e=>Pe(e),M=e=>Le(e),Q=async()=>{let e=await Te(),t=Ae("wpsuite/ai-kit",{reducer(r=e,n){switch(n.type){case"SET_LANGUAGE":return{...r,language:n.language};case"SET_DIRECTION":return{...r,direction:n.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:n.showChatbotPreview}}return r},actions:Oe,selectors:Be,resolvers:Ke});return xe(t),t},Ee=(e,t,r)=>{let n;function a(){let i=M(e).getState(),u=t(i);if(u!==n){let c=n;n=u,r(n,c)}}let o=Se(a,e);return a(),o}});import{jsx as k,jsxs as Y}from"react/jsx-runtime";var Mt,Ut,ee=h(()=>{"use strict";Mt=e=>Y("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:[k("path",{d:"M19 27H33"}),k("path",{d:"M19 33H33"}),k("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),k("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),k("path",{d:"M16 10V40H36V22"}),k("path",{d:"M16 10H22"}),k("path",{d:"M22 10V23H36"}),k("path",{d:"M22 10L36 22"})]}),Ut=e=>Y("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:[k("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"}),k("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),k("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),k("path",{d:"M16 24H32"})]})});var A,q=h(()=>{"use strict";A=class extends Error{constructor(r,n,a){super(r);this.decision=n;this.status=a;this.name="AiBackendError"}}});var ie={};W(ie,{MIN_CHROME_VERSION:()=>ae,checkOnDeviceAvailability:()=>oe,decideCapability:()=>z,resolveBackend:()=>O});import{getWpSuite as Ie}from"@smart-cloud/wpsuite-core";async function te(){let t=await Me?.plugins?.aiKit?.features.store;return M(t).getConfig()??{}}function re(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function Ue(e){if(e.mode)return e.mode;let{transport:t}=re(e);return t?"backend-fallback":"local-only"}async function O(){let e=await te(),{transport:t,backendApiName:r,backendBaseUrl:n}=re(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return n?{available:!0,transport:t,baseUrl:n,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let a=globalThis.WpSuite?.plugins?.gatey;return!a?.availability||await a.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:r,reason:"Gatey backend"}}function x(e){return typeof globalThis[e]<"u"}function ne(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function D(e,t){return e?.find(r=>r.brand===t)?.version}async function De(){let e=navigator?.userAgentData;if(e){try{let r=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(r)&&r.length>0)return r}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function ze(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?ne(t[1]):void 0}function We(){return!!navigator?.brave}async function Ne(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",r=await De(),n=D(r,"Microsoft Edge")??D(r,"Microsoft Edge WebView2"),a=D(r,"Google Chrome")??D(r,"Chromium"),o=!!n||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),i=/\bOPR\//i.test(t),u=/\bVivaldi\//i.test(t),c=/\bSamsungBrowser\//i.test(t),s=/\bFirefox\//i.test(t),d=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),g=We()||/\bBrave\//i.test(t);if(o||i||u||c||s||d||g)return{allowed:!1,reason:o?"edge":g?"brave":s?"firefox":d?"safari":i?"opera":u?"vivaldi":c?"samsung":"unsupported-browser"};let y=ne(a)??ze(t),p=ae[e];return p?y?y<p?{allowed:!1,reason:`chrome-too-old-${y}-lt-${p}`,chromeMajor:y}:{allowed:!0,reason:"ok",chromeMajor:y}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:y}}async function oe(e,t){try{let r=await Ne(e),n=`browser-gate:${r.reason}${r.chromeMajor?` (chrome ${r.chromeMajor})`:""}`;if(!r.allowed)return{available:!1,status:"unavailable",reason:n};switch(e){case"writer":{if(!x("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"rewriter":{if(!x("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"summarizer":{if(!x("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"proofreader":{if(!x("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"language-detector":{if(!x("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:n}}case"translator":{if(!x("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:n};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:n,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let o=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:o!=="unavailable",status:o,reason:n}}case"prompt":{if(!x("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:n};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:n}}default:return{available:!1,status:"unknown-feature",reason:n}}}catch(r){return{available:!1,status:"error",reason:"exception in availability()",error:r}}}async function z(e,t,r){let n=await te(),a=r||Ue(n),o=await O(),i=await oe(e,t),u=i.available,c=o.available,s={feature:e,mode:a,onDeviceAvailable:u,onDeviceStatus:i.status,onDeviceReason:i.reason,backendAvailable:c,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason};return a==="local-only"?u?{...s,source:"on-device",reason:`local-only: on-device available (${i.reason??i.status})`}:{...s,source:"none",reason:`local-only: on-device unavailable (${i.reason??i.status})`}:a==="backend-only"?c?{...s,source:"backend",reason:`backend-only: backend available (${o.reason??"n/a"})`}:{...s,source:"none",reason:`backend-only: backend unavailable (${o.reason??"n/a"})`}:u?{...s,source:"on-device",reason:`backend-fallback: using on-device (${i.reason??i.status})`}:c?{...s,source:"backend",reason:`backend-fallback: using backend (${o.reason??"n/a"}; on-device: ${i.reason??i.status})`}:{...s,source:"none",reason:`No on-device AI or backend available (on-device: ${i.reason??i.status}; backend: ${o.reason??"n/a"})`}}var Me,ae,H=h(()=>{"use strict";U();Me=Ie();ae={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var se={};W(se,{dispatchBackend:()=>K,withRecaptchaHeaders:()=>B});import{getRecaptcha as _e}from"@smart-cloud/wpsuite-core";function qe(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}async function He(e){if(e!=="frontend")return;let t=qe();if(!t?.reCaptchaSiteKey)return;let{execute:r}=await _e(t?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let a=await r(t.reCaptchaSiteKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function B(e,t){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await He(e);return r?{...t,"X-Recaptcha-Token":r}:t}function T(e,t){try{e?.onStatus?.(t)}catch{}}function je(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function $e(e,t){if(!je(t))return t;let r=Ge[e];if(!r)return t;let n={};for(let a of r)a in t&&(n[a]=t[a]);return n}function Je(e,t){return(e==="admin"?Ve:Xe)[t]}async function K(e,t,r,n,a={}){let o=Je(t,r),i=$e(r,n);if(!o)throw new A(`No backend path configured for "${r}" (${t}).`,e);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new A("backendTransport=fetch but backendBaseUrl is missing.",e);return Ze(e.backendBaseUrl,o,i,a,e,r,t)}if(!e.backendApiName)throw new A("backendTransport=gatey but backendApiName is missing.",e);return Qe(e.backendApiName,o,i,a,e,r,t)}async function Ze(e,t,r,n,a,o,i){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...n.headers??{}},s=await B(i,c),d=n.query&&Object.keys(n.query).length>0?"?"+new URLSearchParams(Object.entries(n.query).map(([p,w])=>[p,String(w)])).toString():"";T(n,{feature:o,context:i,step:"backend:request",source:"backend"}),T(n,{feature:o,context:i,step:"backend:waiting",source:"backend"});let g=await fetch(u+d,{method:"POST",headers:s,body:JSON.stringify(r??{}),signal:n.signal,credentials:"omit"});if(T(n,{feature:o,context:i,step:"backend:response",source:"backend"}),!g.ok){let p=`HTTP ${g.status}`;try{let w=await g.text();w&&(p=`${p}: ${w.substring(0,400)}`)}catch{}throw new A(`Fetch backend call failed: ${p}`,a,g.status)}return(g.headers.get("content-type")||"").includes("application/json")?await g.json():await g.text()}async function Qe(e,t,r,n,a,o,i){let c=globalThis.WpSuite?.plugins?.gatey;if(!c?.cognito?.post)throw new A("Gatey backend selected, but Gatey.cognito.post is not available.",a);let s=await B(i,{...n.headers??{}});T(n,{feature:o,context:i,step:"backend:request",source:"backend"}),T(n,{feature:o,context:i,step:"backend:waiting",source:"backend"});let d=c.cognito.post({apiName:e,path:t,options:{body:r,headers:s}});n?.signal?.addEventListener?.("abort",()=>{d.cancel()});let g=await d.response.then(y=>y.body.json());return T(n,{feature:o,context:i,step:"backend:response",source:"backend"}),g}var Ge,Ve,Xe,j=h(()=>{"use strict";q();Ge={prompt:["text","systemPrompt","context","responseConstraint","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","kb_filters"],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"]};Ve={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Xe={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var be={};W(be,{detectLanguage:()=>pt,getPromptOptions:()=>fe,getProofreadOptions:()=>de,getRewriteOptions:()=>ce,getSummarizeOptions:()=>ge,getTranslateOptions:()=>pe,getWriteOptions:()=>le,prompt:()=>At,proofread:()=>dt,rewrite:()=>ct,sendChatMessage:()=>Pt,sendFeedbackMessage:()=>xt,summarize:()=>gt,translate:()=>I,write:()=>lt});import{getWpSuite as Ye}from"@smart-cloud/wpsuite-core";function C(){return(ue?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function F(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(n=>r===n.toLowerCase())}function l(e,t,r,n){try{r?.onStatus?.({feature:e,context:t,...n})}catch{}}function E(){return ue?.plugins?.aiKit?.settings?.sharedContext??void 0}function L(e){return e?.context??"admin"}function G(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function et(e,t,r,n){let a=G(e),o=await me(e.images,r,t,n);return{text:e.messages.filter(i=>i.role==="user").map(i=>i.content).join(`
|
|
2
|
+
`),systemPrompt:e.messages.filter(i=>i.role==="system").map(i=>i.content).join(`
|
|
3
|
+
`),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function tt(e,t,r){let n=G(e),a=await me(e.images,t,"frontend",r);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,saveChatSession:!0,...n}}async function rt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function at(e){let t=G(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function nt(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 ot(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function it(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function st(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function ut(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function S(e,t,r,n,a,o,i){l(r,e,i,{step:"decide",message:"Deciding capability"});let u=await z(r,n,t);if(l(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`}),u.source==="on-device")try{l(r,e,i,{step:"on-device:init",source:"on-device"});let c=await a();return l(r,e,i,{step:"done",source:"on-device"}),c}catch(c){console.error(`Error in on-device ${r}:`,c),l(r,e,i,{step:"error",source:"on-device",message:c.message}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){l(r,e,i,{step:"backend:request",source:"backend"});let c=typeof o=="function"?await o(u):o,s=await K(u,e,r,c,i);return l(r,e,i,{step:"done",source:"backend"}),s}throw new Error(`No capability for "${r}" (${e}). Reason: ${u.reason}`)}function mt(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],n=t?r.map(o=>({type:"image",value:o})):[],a;if(typeof e.messages=="string")a=t?[{role:"user",content:[{type:"text",value:e.messages},...n]}]:e.messages;else{let o=e.messages.filter(i=>i.role!=="system").map(i=>({role:i.role==="assistant"?"assistant":"user",content:i.content}));if(t){let i=-1;for(let u=o.length-1;u>=0;u--)if(o[u].role==="user"){i=u;break}if(i===-1)o.push({role:"user",content:[{type:"text",value:""},...n]});else{let u=String(o[i].content??"");o[i]={...o[i],content:[{type:"text",value:u},...n]}}}a=o}return a}function bt(e){return typeof Blob<"u"&&e instanceof Blob}function yt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function wt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function vt(e){return new Promise((t,r)=>{let n=new FileReader;n.onerror=()=>r(n.error??new Error("FileReader error")),n.onload=()=>t(String(n.result??"")),n.readAsDataURL(e)})}async function kt(e){let t=await vt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Ct(e,t,r,n,a,o){let i=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",u={...o?.headers??{}},c=await B(t,u);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let p=new URLSearchParams({fileName:r,contentType:n,contentLength:String(a)}).toString(),w=`${e.backendBaseUrl.replace(/\/+$/,"")}${i}?${p}`,v=await fetch(w,{method:"GET",headers:c,signal:o?.signal,credentials:"omit"});if(!v.ok){let V=await v.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${v.status}${V?": "+V.substring(0,200):""}`)}let P=await v.json();if(!P?.uploadUrl||!P?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:P.uploadUrl,imageKey:P.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let s=globalThis.WpSuite?.plugins?.gatey,d={fileName:r,contentType:n,contentLength:a};if(s?.cognito?.get){let p=await s.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((v,P)=>(v[P]=String(d[P]),v),{}),headers:c}});o?.signal?.addEventListener?.("abort",()=>{p.cancel()});let w=await p.response.then(v=>v.body.json());if(!w?.uploadUrl||!w?.imageKey)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/imageKey");return{uploadUrl:w.uploadUrl,imageKey:w.imageKey}}if(!s?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let g=s.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:c}});o?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(p=>p.body.json());if(!y?.uploadUrl||!y?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:y.uploadUrl,imageKey:y.imageKey}}async function ht(e,t,r,n){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:n?.signal});if(!a.ok){let o=await a.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${a.status}${o?": "+o.substring(0,200):""}`)}}async function me(e,t,r,n){if(!e||e.length===0)return;let a=[];for(let s of e){if(!bt(s))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(s)}let o=a.reduce((s,d)=>s+(d.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=ft){l("prompt",r,n,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let s=[];for(let d of a)s.push({format:wt(d.type),data:await kt(d)});return{images:s}}l("prompt",r,n,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let c=[];for(let s=0;s<a.length;s++){let d=a[s],g=d.type||"application/octet-stream",y=d.name||`image_${s}.${yt(g)}`;l("prompt",r,n,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:p,imageKey:w}=await Ct(t,r,y,g,d.size||0,n);l("prompt",r,n,{step:"backend:waiting",source:"backend",message:"Uploading"}),await ht(p,d,g,n),c.push(w)}return{imageUrls:c}}var ue,le,lt,ce,ct,de,dt,ge,gt,pt,pe,I,ft,fe,At,Pt,xt,ye=h(()=>{"use strict";j();H();ve();ue=Ye();le=e=>{let t=e.outputLanguage?e.outputLanguage:C(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},lt=async(e,t)=>{let r=L(t),n=e.sharedContext??E(),a=e.outputLanguage?e.outputLanguage:C(),o=a,i=!1;F(a)||(i=!0,a="en");let u=le({...e,outputLanguage:a});return S(r,t?.modeOverride,"writer",u,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");l("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let c=await Writer.create({...u,sharedContext:n,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;l("writer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});l("writer",r,t,{step:"on-device:ready",source:"on-device"});try{l("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let s=await c.write(e.prompt,{context:e.context,signal:t?.signal});return i?{result:(await I({text:s,sourceLanguage:a,targetLanguage:o})).result}:{result:s}}finally{try{c.destroy()}catch(s){console.error("Error destroying writer:",s)}}},at({...e,sharedContext:n,outputLanguage:o}),t)},ce=e=>{let t=e.outputLanguage?e.outputLanguage:C(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},ct=async(e,t)=>{let r=L(t),n=e.sharedContext??E(),a=e.outputLanguage?e.outputLanguage:C(),o=a,i=!1;F(a)||(i=!0,a="en");let u=ce({...e,outputLanguage:a});return S(r,t?.modeOverride,"rewriter",u,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");l("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let c=await Rewriter.create({...u,sharedContext:n,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;l("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});l("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{l("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let s=await c.rewrite(e.text,{context:e.context,signal:t?.signal});return i?{result:(await I({text:s,sourceLanguage:a,targetLanguage:o})).result}:{result:s}}finally{try{c.destroy()}catch(s){console.error("Error destroying rewriter:",s)}}},nt({...e,sharedContext:n,outputLanguage:o}),t)},de=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),dt=async(e,t)=>{let r=L(t),n=await de();return S(r,t?.modeOverride,"proofreader",n,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");l("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=await Proofreader.create({...n,monitor(o){o.addEventListener("downloadprogress",i=>{let u=i.loaded;l("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}});l("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return l("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await a.proofread(e.text,{signal:t?.signal})}}finally{try{a.destroy()}catch(o){console.error("Error destroying proofreader:",o)}}},ut(e),t)},ge=e=>{let t=e.outputLanguage?e.outputLanguage:C(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},gt=async(e,t)=>{let r=L(t),n=e.sharedContext??E(),a=e.outputLanguage?e.outputLanguage:C(),o=a,i=!1;F(a)||(i=!0,a="en");let u=await ge({...e,outputLanguage:a});return S(r,t?.modeOverride,"summarizer",u,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");l("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let c=await Summarizer.create({...u,sharedContext:n,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;l("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});l("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{l("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let s=await c.summarize(e.text,{context:e.context,signal:t?.signal});return i?{result:(await I({text:s,sourceLanguage:a,targetLanguage:o})).result}:{result:s}}finally{try{c.destroy()}catch(s){console.error("Error destroying summarizer:",s)}}},ot({...e,sharedContext:n,outputLanguage:o}),t)},pt=async(e,t)=>{let r=L(t);return S(r,t?.modeOverride,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");l("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session"});let n=await LanguageDetector.create({monitor(a){a.addEventListener("downloadprogress",o=>{let i=o.loaded;l("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:i,loaded:i})})}});l("language-detector",r,t,{step:"on-device:ready",source:"on-device"});try{return l("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language"}),{result:{candidates:(await n.detect(e.text,{signal:t?.signal})).filter(o=>we.find(i=>i.value===o.detectedLanguage))}}}finally{try{n.destroy()}catch(a){console.error("Error destroying language detector:",a)}}},st(e.text,t),t)},pe=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??C()??"en"};return Promise.resolve(t)},I=async(e,t)=>{let r=L(t),n=await pe({...e});return S(r,t?.modeOverride,"translator",n,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");l("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session"});let a=await Translator.create({...n,monitor(o){o.addEventListener("downloadprogress",i=>{let u=i.loaded;l("translator",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}});l("translator",r,t,{step:"on-device:ready",source:"on-device"});try{l("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating"});let o=[];return e.text.split(`
|
|
4
|
+
`).forEach(u=>o.push(a.translate(u.trim()))),{result:(await Promise.all(o)).join(`
|
|
5
|
+
`)}}finally{try{a.destroy()}catch(o){console.error("Error destroying translator:",o)}}},it(e.text,e.sourceLanguage,e.targetLanguage),t)};ft=4*1024*1024;fe=async e=>{let t=e.outputLanguage?e.outputLanguage:C();return F(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},At=async(e,t)=>{let r=L(t),n=e.sharedContext??E(),a=e.outputLanguage?e.outputLanguage:C(),o=a,i=!1;F(a)||(i=!0,a="en");let u=await fe({...e,outputLanguage:a}),c=await z("prompt",u,t?.modeOverride);return S(r,t?.modeOverride,"prompt",u,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");l("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let s=[];if(typeof e.messages!="string"){for(let p of e.messages)p.role==="system"&&p.content.trim()&&s.push(p.content.trim());n&&n.trim()&&s.push("SHARED CONTEXT: "+n.trim())}let d=s.length>0?s.join(`
|
|
2
6
|
|
|
3
|
-
`)}async function et(e,t,r,a){let n=se(e),o=await Ct(e.images,r,t,a);return{text:Ye(e.messages),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,responseConstraint:e.responseConstraint,...n}}function tt(e){let t=se(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 rt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function nt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function at(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function ot(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function it(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function S(e,t,r,a,n,o,i){c(r,e,i,{step:"decide",message:"Deciding capability"});let u=await M(r,a,t);if(c(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`}),u.source==="on-device")try{c(r,e,i,{step:"on-device:init",source:"on-device"});let l=await n();return c(r,e,i,{step:"done",source:"on-device"}),l}catch(l){console.error(`Error in on-device ${r}:`,l),c(r,e,i,{step:"error",source:"on-device",message:l.message}),i?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){c(r,e,i,{step:"backend:request",source:"backend"});let l=typeof o=="function"?await o(u):o,s=await q(u,e,r,l,i);return c(r,e,i,{step:"done",source:"backend"}),s}throw new Error(`No capability for "${r}" (${e}). Reason: ${u.reason}`)}function gt(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],a=t?r.map(o=>({type:"image",value:o})):[],n;if(typeof e.messages=="string")n=t?[{role:"user",content:[{type:"text",value:e.messages},...a]}]: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 u=o.length-1;u>=0;u--)if(o[u].role==="user"){i=u;break}if(i===-1)o.push({role:"user",content:[{type:"text",value:""},...a]});else{let u=String(o[i].content??"");o[i]={...o[i],content:[{type:"text",value:u},...a]}}}n=o}return n}function mt(e){return typeof Blob<"u"&&e instanceof Blob}function ft(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function bt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function yt(e){return new Promise((t,r)=>{let a=new FileReader;a.onerror=()=>r(a.error??new Error("FileReader error")),a.onload=()=>t(String(a.result??"")),a.readAsDataURL(e)})}async function wt(e){let t=await yt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function vt(e,t,r,a,n,o){let i=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",u={...o?.headers??{}},l=await O(t,u);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let p=new URLSearchParams({fileName:r,contentType:a,contentLength:String(n)}).toString(),w=`${e.backendBaseUrl.replace(/\/+$/,"")}${i}?${p}`,v=await fetch(w,{method:"GET",headers:l,signal:o?.signal,credentials:"omit"});if(!v.ok){let G=await v.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${v.status}${G?": "+G.substring(0,200):""}`)}let k=await v.json();if(!k?.uploadUrl||!k?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:k.uploadUrl,imageKey:k.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let s=globalThis.WpSuite?.plugins?.gatey,d={fileName:r,contentType:a,contentLength:n};if(s?.cognito?.get){let p=await s.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((v,k)=>(v[k]=String(d[k]),v),{}),headers:l}});o?.signal?.addEventListener?.("abort",()=>{p.cancel()});let w=await p.response.then(v=>v.body.json());if(!w?.uploadUrl||!w?.imageKey)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/imageKey");return{uploadUrl:w.uploadUrl,imageKey:w.imageKey}}if(!s?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let g=s.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:l}});o?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(p=>p.body.json());if(!y?.uploadUrl||!y?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:y.uploadUrl,imageKey:y.imageKey}}async function At(e,t,r,a){let n=await fetch(e,{method:"PUT",headers:{"Content-Type":r||"application/octet-stream"},body:t,signal:a?.signal});if(!n.ok){let o=await n.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${n.status}${o?": "+o.substring(0,200):""}`)}}async function Ct(e,t,r,a){if(!e||e.length===0)return;let n=[];for(let s of e){if(!mt(s))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");n.push(s)}let o=n.reduce((s,d)=>s+(d.size||0),0);if(Math.ceil(o*1.37+2048*n.length)<=pt){c("prompt",r,a,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let s=[];for(let d of n)s.push({format:bt(d.type),data:await wt(d)});return{images:s}}c("prompt",r,a,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let l=[];for(let s=0;s<n.length;s++){let d=n[s],g=d.type||"application/octet-stream",y=d.name||`image_${s}.${ft(g)}`;c("prompt",r,a,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:p,imageKey:w}=await vt(t,r,y,g,d.size||0,a);c("prompt",r,a,{step:"backend:waiting",source:"backend",message:"Uploading"}),await At(p,d,g,a),l.push(w)}return{imageUrls:l}}var ie,ue,st,le,ut,ce,lt,de,ct,dt,ge,K,pt,pe,ht,fe=h(()=>{"use strict";$();_();ye();ie=Qe();ue=e=>{let t=e.outputLanguage?e.outputLanguage:C(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},st=async(e,t)=>{let r=L(t),a=e.sharedContext??D(),n=e.outputLanguage?e.outputLanguage:C(),o=n,i=!1;B(n)||(i=!0,n="en");let u=ue({...e,outputLanguage:n});return S(r,t?.modeOverride,"writer",u,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");c("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let l=await Writer.create({...u,sharedContext:a,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;c("writer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});c("writer",r,t,{step:"on-device:ready",source:"on-device"});try{c("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let s=await l.write(e.prompt,{context:e.context,signal:t?.signal});return i?{result:(await K({text:s,sourceLanguage:n,targetLanguage:o})).result}:{result:s}}finally{try{l.destroy()}catch(s){console.error("Error destroying writer:",s)}}},tt({...e,sharedContext:a,outputLanguage:o}),t)},le=e=>{let t=e.outputLanguage?e.outputLanguage:C(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},ut=async(e,t)=>{let r=L(t),a=e.sharedContext??D(),n=e.outputLanguage?e.outputLanguage:C(),o=n,i=!1;B(n)||(i=!0,n="en");let u=le({...e,outputLanguage:n});return S(r,t?.modeOverride,"rewriter",u,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");c("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let l=await Rewriter.create({...u,sharedContext:a,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;c("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});c("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{c("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let s=await l.rewrite(e.text,{context:e.context,signal:t?.signal});return i?{result:(await K({text:s,sourceLanguage:n,targetLanguage:o})).result}:{result:s}}finally{try{l.destroy()}catch(s){console.error("Error destroying rewriter:",s)}}},rt({...e,sharedContext:a,outputLanguage:o}),t)},ce=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),lt=async(e,t)=>{let r=L(t),a=await ce();return S(r,t?.modeOverride,"proofreader",a,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");c("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let n=await Proofreader.create({...a,monitor(o){o.addEventListener("downloadprogress",i=>{let u=i.loaded;c("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}});c("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return c("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await n.proofread(e.text,{signal:t?.signal})}}finally{try{n.destroy()}catch(o){console.error("Error destroying proofreader:",o)}}},it(e),t)},de=e=>{let t=e.outputLanguage?e.outputLanguage:C(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},ct=async(e,t)=>{let r=L(t),a=e.sharedContext??D(),n=e.outputLanguage?e.outputLanguage:C(),o=n,i=!1;B(n)||(i=!0,n="en");let u=await de({...e,outputLanguage:n});return S(r,t?.modeOverride,"summarizer",u,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");c("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let l=await Summarizer.create({...u,sharedContext:a,monitor(s){s.addEventListener("downloadprogress",d=>{let g=d.loaded;c("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});c("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{c("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let s=await l.summarize(e.text,{context:e.context,signal:t?.signal});return i?{result:(await K({text:s,sourceLanguage:n,targetLanguage:o})).result}:{result:s}}finally{try{l.destroy()}catch(s){console.error("Error destroying summarizer:",s)}}},nt({...e,sharedContext:a,outputLanguage:o}),t)},dt=async(e,t)=>{let r=L(t);return S(r,t?.modeOverride,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");c("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session"});let a=await LanguageDetector.create({monitor(n){n.addEventListener("downloadprogress",o=>{let i=o.loaded;c("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:i,loaded:i})})}});c("language-detector",r,t,{step:"on-device:ready",source:"on-device"});try{return c("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language"}),{result:{candidates:(await a.detect(e.text,{signal:t?.signal})).filter(o=>be.find(i=>i.value===o.detectedLanguage))}}}finally{try{a.destroy()}catch(n){console.error("Error destroying language detector:",n)}}},ot(e.text,t),t)},ge=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??C()??"en"};return Promise.resolve(t)},K=async(e,t)=>{let r=L(t),a=await ge({...e});return S(r,t?.modeOverride,"translator",a,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");c("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session"});let n=await Translator.create({...a,monitor(o){o.addEventListener("downloadprogress",i=>{let u=i.loaded;c("translator",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}});c("translator",r,t,{step:"on-device:ready",source:"on-device"});try{c("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating"});let o=[];return e.text.split(`
|
|
4
|
-
`).forEach(u=>o.push(n.translate(u.trim()))),{result:(await Promise.all(o)).join(`
|
|
5
|
-
`)}}finally{try{n.destroy()}catch(o){console.error("Error destroying translator:",o)}}},at(e.text,e.sourceLanguage,e.targetLanguage),t)};pt=4*1024*1024;pe=async e=>{let t=e.outputLanguage?e.outputLanguage:C();return B(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},ht=async(e,t)=>{let r=L(t),a=e.sharedContext??D(),n=e.outputLanguage?e.outputLanguage:C(),o=n,i=!1;B(n)||(i=!0,n="en");let u=await pe({...e,outputLanguage:n}),l=await M("prompt",u,t?.modeOverride);return S(r,t?.modeOverride,"prompt",u,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");c("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let s=[];if(typeof e.messages!="string"){for(let p of e.messages)p.role==="system"&&p.content.trim()&&s.push(p.content.trim());a&&a.trim()&&s.push("SHARED CONTEXT: "+a.trim())}let d=s.length>0?s.join(`
|
|
6
|
-
|
|
7
|
-
`):void 0,g=d?[{role:"system",content:d}]:void 0,y=await LanguageModel.create({...u,initialPrompts:g,monitor(p){p.addEventListener("downloadprogress",w=>{let v=w.loaded;c("prompt",r,t,{step:"on-device:download",source:"on-device",progress:v,loaded:v})})}});c("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{c("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let p=await y.prompt(gt(e),{signal:t?.signal,responseConstraint:e.responseConstraint});return i?{result:(await K({text:p,sourceLanguage:n,targetLanguage:o})).result}:{result:p}}finally{try{y.destroy()}catch(p){console.error("Error destroying LanguageModel:",p)}}},await et({...e,sharedContext:a},r,l,t),t)}});import{attachDefaultPluginRuntime as Pt,TEXT_DOMAIN as m}from"@smart-cloud/wpsuite-core";import{__ as f}from"@wordpress/i18n";var be,j,Jt,Zt,Qt,kt,Yt,b,er,tr,rr,nr,ar,or,ir,sr,ur,lr,cr,dr,gr,pr,ye=h(()=>{z();F();F();N();Q();be=[{label:f("Arabic",m),value:"ar"},{label:f("Chinese",m),value:"zh"},{label:f("Dutch",m),value:"nl"},{label:f("English",m),value:"en"},{label:f("French",m),value:"fr"},{label:f("German",m),value:"de"},{label:f("Hebrew",m),value:"he"},{label:f("Hindi",m),value:"hi"},{label:f("Hungarian",m),value:"hu"},{label:f("Indonesian",m),value:"id"},{label:f("Italian",m),value:"it"},{label:f("Japanese",m),value:"ja"},{label:f("Korean",m),value:"ko"},{label:f("Norwegian",m),value:"no"},{label:f("Polish",m),value:"pl"},{label:f("Portuguese",m),value:"pt"},{label:f("Russian",m),value:"ru"},{label:f("Spanish",m),value:"es"},{label:f("Swedish",m),value:"sv"},{label:f("Thai",m),value:"th"},{label:f("Turkish",m),value:"tr"},{label:f("Ukrainian",m),value:"uk"}],j=Promise.resolve().then(()=>(_(),ae)),Jt=async()=>(await j).MIN_CHROME_VERSION,Zt=async(...e)=>(await j).decideCapability(...e),Qt=async(...e)=>(await j).checkOnDeviceAvailability(...e),kt=Promise.resolve().then(()=>($(),oe)),Yt=async(...e)=>(await kt).dispatchBackend(...e),b=Promise.resolve().then(()=>(fe(),me)),er=async(...e)=>(await b).getWriteOptions(...e),tr=async(...e)=>(await b).write(...e),rr=async(...e)=>(await b).getRewriteOptions(...e),nr=async(...e)=>(await b).rewrite(...e),ar=async(...e)=>(await b).getProofreadOptions(...e),or=async(...e)=>(await b).proofread(...e),ir=async(...e)=>(await b).getSummarizeOptions(...e),sr=async(...e)=>(await b).summarize(...e),ur=async(...e)=>(await b).getTranslateOptions(...e),lr=async(...e)=>(await b).translate(...e),cr=async(...e)=>(await b).detectLanguage(...e),dr=async(...e)=>(await b).getPromptOptions(...e),gr=async(...e)=>(await b).prompt(...e),pr=e=>{let t=globalThis.WpSuite,r=R();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");Pt(r),r.status=r.status??"initializing";let a=J();return r.features={store:a,renderFeature:async n=>await e({...n,store:await a}),write:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.write(...n)},rewrite:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.rewrite(...n)},proofread:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.proofread(...n)},summarize:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.summarize(...n)},translate:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.translate(...n)},detectLanguage:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.detectLanguage(...n)},prompt:async(...n)=>{let o=await b,i=n[1]||{};return n[1]={context:"frontend",...i},o.prompt(...n)}},a.then(()=>{r.status="available",t?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(n=>{r.status="error",console.error("AiKit plugin failed to initialize:",n),t?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(n)})}),r}});ye();export{It as AiKitChatbotIcon,Ft as AiKitFeatureIcon,P as BackendError,be as LANGUAGE_OPTIONS,m as TEXT_DOMAIN,Qt as checkOnDeviceAvailability,Zt as decideCapability,cr as detectLanguage,Yt as dispatchBackend,R as getAiKitPlugin,Jt as getMinChromeVersions,dr as getPromptOptions,ar as getProofreadOptions,rr as getRewriteOptions,ve as getStore,Be as getStoreDispatch,E as getStoreSelect,ir as getSummarizeOptions,ur as getTranslateOptions,er as getWriteOptions,pr as initializeAiKit,Ke as observeStore,gr as prompt,or as proofread,nr as rewrite,X as sanitizeAiKitConfig,sr as summarize,lr as translate,H as waitForAiKitReady,tr as write};
|
|
7
|
+
`):void 0,g=d?[{role:"system",content:d}]:void 0,y=await LanguageModel.create({...u,initialPrompts:g,monitor(p){p.addEventListener("downloadprogress",w=>{let v=w.loaded;l("prompt",r,t,{step:"on-device:download",source:"on-device",progress:v,loaded:v})})}});l("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{l("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let p=await y.prompt(mt(e),{signal:t?.signal,responseConstraint:e.responseConstraint});return i?{result:(await I({text:p,sourceLanguage:a,targetLanguage:o})).result}:{result:p}}finally{try{y.destroy()}catch(p){console.error("Error destroying LanguageModel:",p)}}},await et({...e,sharedContext:n},r,c,t),t)},Pt=async(e,t)=>{let r="frontend",n=e.sharedContext??E(),a="prompt",o=await O(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},u=await tt({sessionId:e.sessionId,message:e.message,images:e.images,sharedContext:n},i,t);l(a,r,t,{step:"backend:request",source:"backend"});let c=await K(i,r,a,u,t);return l(a,r,t,{step:"done",source:"backend"}),c},xt=async(e,t)=>{let r="frontend",n="prompt",a=await O(),o={feature:n,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await rt({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});l(n,r,t,{step:"backend:request",source:"backend"});let u=await K(o,r,n,i,t);return l(n,r,t,{step:"done",source:"backend"}),u}});import{attachDefaultPluginRuntime as Lt,TEXT_DOMAIN as f}from"@smart-cloud/wpsuite-core";import{__ as b}from"@wordpress/i18n";var we,$,Yt,er,tr,St,rr,m,ar,nr,or,ir,sr,ur,lr,cr,dr,gr,pr,mr,fr,br,yr,wr,ve=h(()=>{N();U();U();ee();q();we=[{label:b("Arabic",f),value:"ar"},{label:b("Chinese",f),value:"zh"},{label:b("Dutch",f),value:"nl"},{label:b("English",f),value:"en"},{label:b("French",f),value:"fr"},{label:b("German",f),value:"de"},{label:b("Hebrew",f),value:"he"},{label:b("Hindi",f),value:"hi"},{label:b("Hungarian",f),value:"hu"},{label:b("Indonesian",f),value:"id"},{label:b("Italian",f),value:"it"},{label:b("Japanese",f),value:"ja"},{label:b("Korean",f),value:"ko"},{label:b("Norwegian",f),value:"no"},{label:b("Polish",f),value:"pl"},{label:b("Portuguese",f),value:"pt"},{label:b("Russian",f),value:"ru"},{label:b("Spanish",f),value:"es"},{label:b("Swedish",f),value:"sv"},{label:b("Thai",f),value:"th"},{label:b("Turkish",f),value:"tr"},{label:b("Ukrainian",f),value:"uk"}],$=Promise.resolve().then(()=>(H(),ie)),Yt=async()=>(await $).MIN_CHROME_VERSION,er=async(...e)=>(await $).decideCapability(...e),tr=async(...e)=>(await $).checkOnDeviceAvailability(...e),St=Promise.resolve().then(()=>(j(),se)),rr=async(...e)=>(await St).dispatchBackend(...e),m=Promise.resolve().then(()=>(ye(),be)),ar=async(...e)=>(await m).getWriteOptions(...e),nr=async(...e)=>(await m).write(...e),or=async(...e)=>(await m).getRewriteOptions(...e),ir=async(...e)=>(await m).rewrite(...e),sr=async(...e)=>(await m).getProofreadOptions(...e),ur=async(...e)=>(await m).proofread(...e),lr=async(...e)=>(await m).getSummarizeOptions(...e),cr=async(...e)=>(await m).summarize(...e),dr=async(...e)=>(await m).getTranslateOptions(...e),gr=async(...e)=>(await m).translate(...e),pr=async(...e)=>(await m).detectLanguage(...e),mr=async(...e)=>(await m).getPromptOptions(...e),fr=async(...e)=>(await m).prompt(...e),br=async(...e)=>(await m).sendChatMessage(...e),yr=async(...e)=>(await m).sendFeedbackMessage(...e),wr=e=>{let t=globalThis.WpSuite,r=R();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");Lt(r),r.status=r.status??"initializing";let n=Q();return r.features={store:n,renderFeature:async a=>await e({...a,store:await n}),write:async(...a)=>{let o=await m,i=a[1]||{};return a[1]={context:"frontend",...i},o.write(...a)},rewrite:async(...a)=>{let o=await m,i=a[1]||{};return a[1]={context:"frontend",...i},o.rewrite(...a)},proofread:async(...a)=>{let o=await m,i=a[1]||{};return a[1]={context:"frontend",...i},o.proofread(...a)},summarize:async(...a)=>{let o=await m,i=a[1]||{};return a[1]={context:"frontend",...i},o.summarize(...a)},translate:async(...a)=>{let o=await m,i=a[1]||{};return a[1]={context:"frontend",...i},o.translate(...a)},detectLanguage:async(...a)=>{let o=await m,i=a[1]||{};return a[1]={context:"frontend",...i},o.detectLanguage(...a)},prompt:async(...a)=>{let o=await m,i=a[1]||{};return a[1]={context:"frontend",...i},o.prompt(...a)},sendChatMessage:async(...a)=>(await m).sendChatMessage(...a),sendFeedbackMessage:async(...a)=>(await m).sendFeedbackMessage(...a)},n.then(()=>{r.status="available",t?.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),t?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(a)})}),r}});ve();export{Ut as AiKitChatbotIcon,Mt as AiKitFeatureIcon,A as BackendError,we as LANGUAGE_OPTIONS,f as TEXT_DOMAIN,tr as checkOnDeviceAvailability,er as decideCapability,pr as detectLanguage,rr as dispatchBackend,R as getAiKitPlugin,Yt as getMinChromeVersions,mr as getPromptOptions,sr as getProofreadOptions,or as getRewriteOptions,Ce as getStore,Fe as getStoreDispatch,M as getStoreSelect,lr as getSummarizeOptions,dr as getTranslateOptions,ar as getWriteOptions,wr as initializeAiKit,Ee as observeStore,fr as prompt,ur as proofread,ir as rewrite,Z as sanitizeAiKitConfig,br as sendChatMessage,yr as sendFeedbackMessage,cr as summarize,gr as translate,X as waitForAiKitReady,nr as write};
|