@smart-cloud/ai-kit-core 1.1.19 → 1.1.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +5 -5
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5 -5
- package/package.json +8 -8
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var q=Object.defineProperty;var Ke=Object.getOwnPropertyDescriptor;var Fe=Object.getOwnPropertyNames;var Ie=Object.prototype.hasOwnProperty;var C=(e,t)=>()=>(e&&(t=e(e=0)),t);var z=(e,t)=>{for(var r in t)q(e,r,{get:t[r],enumerable:!0})},Me=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Fe(t))!Ie.call(e,n)&&n!==r&&q(e,n,{get:()=>t[n],enumerable:!(a=Ke(t,n))||a.enumerable});return e};var De=e=>Me(q({},"__esModule",{value:!0}),e);function L(){return globalThis.WpSuite?.plugins?.aiKit}async function H(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=()=>o(r),i=()=>o(()=>a(new Error("AiKit failed"))),o=u=>{window.removeEventListener("wpsuite:ai-kit:ready",n),window.removeEventListener("wpsuite:ai-kit:error",i),s&&clearTimeout(s),u()};window.addEventListener("wpsuite:ai-kit:ready",n,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",i,{once:!0});let s=e?window.setTimeout(()=>o(()=>a(new Error("AiKit timeout"))),e):0})}}async function ne(e=1e4){await H(e);let r=L()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var j=C(()=>{"use strict"});var ae,k,V,$,G,Ue,ze,We,Ne,_e,oe,E,ie,se,W=C(()=>{"use strict";ae=require("@smart-cloud/wpsuite-core"),k=require("@wordpress/data"),V=require("aws-amplify/utils");j();typeof WpSuite<"u"?$=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),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},Ue=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},ze=async()=>{let e=G(await(0,ae.getConfig)("aiKit")),t=await Ue();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},We={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?V.I18n.setLanguage(""):V.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Ne={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},_e={},oe=e=>(0,k.dispatch)(e),E=e=>(0,k.select)(e),ie=async()=>{let e=await ze(),t=(0,k.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};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:a.showChatbotPreview}}return r},actions:We,selectors:Ne,resolvers:_e});return(0,k.register)(t),t},se=(e,t,r)=>{let a;function n(){let o=E(e).getState(),s=t(o);if(s!==a){let u=a;a=s,r(a,u)}}let i=(0,k.subscribe)(n,e);return n(),i}});var f,ue=C(()=>{"use strict";f="smartcloud-ai-kit"});var v,qe,He,le=C(()=>{"use strict";v=require("react/jsx-runtime"),qe=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"})]}),He=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 P,X=C(()=>{"use strict";P=class extends Error{constructor(r,a,n){super(r);this.decision=a;this.status=n;this.name="AiBackendError"}}});var be={};z(be,{MIN_CHROME_VERSION:()=>pe,checkOnDeviceAvailability:()=>fe,decideCapability:()=>_,resolveBackend:()=>K});async function de(){let t=await je?.plugins?.aiKit?.features.store;return E(t).getConfig()??{}}function ge(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 Ve(e){if(e.mode)return e.mode;let{transport:t}=ge(e);return t?"backend-fallback":"local-only"}async function K(){let e=await de(),{transport:t,backendApiName:r,backendBaseUrl:a}=ge(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 me(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function N(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 Ge(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?me(t[1]):void 0}function Xe(){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(),a=N(r,"Microsoft Edge")??N(r,"Microsoft Edge WebView2"),n=N(r,"Google Chrome")??N(r,"Chromium"),i=!!a||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),o=/\bOPR\//i.test(t),s=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),l=/\bFirefox\//i.test(t),c=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),g=Xe()||/\bBrave\//i.test(t);if(i||o||s||u||l||c||g)return{allowed:!1,reason:i?"edge":g?"brave":l?"firefox":c?"safari":o?"opera":s?"vivaldi":u?"samsung":"unsupported-browser"};let p=me(n)??Ge(t),m=pe[e];return m?p?p<m?{allowed:!1,reason:`chrome-too-old-${p}-lt-${m}`,chromeMajor:p}:{allowed:!0,reason:"ok",chromeMajor:p}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:p}}async function fe(e,t){try{let r=await Je(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 i=await Translator.availability({...n,sourceLanguage:n.sourceLanguage==="auto"?"en":n.sourceLanguage,targetLanguage:n.sourceLanguage==="auto"||n.sourceLanguage===n.targetLanguage?"hu":n.targetLanguage});return{available:i!=="unavailable",status:i,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 _(e,t,r){let a=await de(),n=r||Ve(a),i=await K(),o=await fe(e,t),s=o.available,u=i.available,l={feature:e,mode:n,onDeviceAvailable:s,onDeviceStatus:o.status,onDeviceReason:o.reason,backendAvailable:u,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason};return n==="local-only"?s?{...l,source:"on-device",reason:`local-only: on-device available (${o.reason??o.status})`}:{...l,source:"none",reason:`local-only: on-device unavailable (${o.reason??o.status})`}:n==="backend-only"?u?{...l,source:"backend",reason:`backend-only: backend available (${i.reason??"n/a"})`}:{...l,source:"none",reason:`backend-only: backend unavailable (${i.reason??"n/a"})`}:s?{...l,source:"on-device",reason:`backend-fallback: using on-device (${o.reason??o.status})`}:u?{...l,source:"backend",reason:`backend-fallback: using backend (${i.reason??"n/a"}; on-device: ${o.reason??o.status})`}:{...l,source:"none",reason:`No on-device AI or backend available (on-device: ${o.reason??o.status}; backend: ${i.reason??"n/a"})`}}var ce,je,pe,J=C(()=>{"use strict";ce=require("@smart-cloud/wpsuite-core");W();je=(0,ce.getWpSuite)();pe={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var we={};z(we,{dispatchBackend:()=>I,withRecaptchaHeaders:()=>F});function Qe(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}async function Ze(e){if(e!=="frontend")return;let t=Qe();if(!t?.reCaptchaSiteKey)return;let{execute:r}=await(0,ye.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 F(e,t){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await Ze(e);return r?{...t,"X-Recaptcha-Token":r}:t}function B(e,t){try{e?.onStatus?.(t)}catch{}}function Ye(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function tt(e,t){if(!Ye(t))return t;let r=et[e];if(!r)return t;let a={};for(let n of r)n in t&&(a[n]=t[n]);return a}function at(e,t){return(e==="admin"?rt:nt)[t]}async function I(e,t,r,a,n={}){let i=at(t,r),o=tt(r,a);if(!i)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 ot(e.backendBaseUrl,i,o,n,e,r,t)}if(!e.backendApiName)throw new P("backendTransport=gatey but backendApiName is missing.",e);return it(e.backendApiName,i,o,n,e,r,t)}async function ot(e,t,r,a,n,i,o){let s=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...a.headers??{}},l=await F(o,u),c=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([m,w])=>[m,String(w)])).toString():"";B(a,{feature:i,context:o,step:"backend:request",source:"backend"}),B(a,{feature:i,context:o,step:"backend:waiting",source:"backend"});let g=await fetch(s+c,{method:"POST",headers:l,body:JSON.stringify(r??{}),signal:a.signal,credentials:"omit"});if(B(a,{feature:i,context:o,step:"backend:response",source:"backend"}),!g.ok){let m=`HTTP ${g.status}`;try{let w=await g.text();w&&(m=`${m}: ${w.substring(0,400)}`)}catch{}throw new P(`Fetch backend call failed: ${m}`,n,g.status)}return(g.headers.get("content-type")||"").includes("application/json")?await g.json():await g.text()}async function it(e,t,r,a,n,i,o){let u=globalThis.WpSuite?.plugins?.gatey;if(!u?.cognito?.post)throw new P("Gatey backend selected, but Gatey.cognito.post is not available.",n);let l=await F(o,{...a.headers??{}});B(a,{feature:i,context:o,step:"backend:request",source:"backend"}),B(a,{feature:i,context:o,step:"backend:waiting",source:"backend"});let c=u.cognito.post({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{c.cancel()});let g=await c.response.then(p=>p.body.json());return B(a,{feature:i,context:o,step:"backend:response",source:"backend"}),g}var ye,et,rt,nt,Q=C(()=>{"use strict";ye=require("@smart-cloud/wpsuite-core");X();et={prompt:["text","systemPrompt","context","responseConstraint","saveChatSession","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"]};rt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},nt={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var Oe={};z(Oe,{detectLanguage:()=>At,getPromptOptions:()=>Te,getProofreadOptions:()=>Pe,getRewriteOptions:()=>Ce,getSummarizeOptions:()=>xe,getTranslateOptions:()=>Le,getWriteOptions:()=>ke,prompt:()=>Bt,proofread:()=>vt,rewrite:()=>wt,sendChatMessage:()=>Et,sendFeedbackMessage:()=>Kt,summarize:()=>ht,translate:()=>U,write:()=>yt});function x(){return(he?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function M(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(a=>r===a.toLowerCase())}function d(e,t,r,a){try{r?.onStatus?.({feature:e,context:t,...a})}catch{}}function D(){return he?.plugins?.aiKit?.settings?.sharedContext??void 0}function T(e){return e?.context??"admin"}function O(e,t=st){let r=new AbortController,a=e?.signal,n=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,i=typeof n=="number"?n:t,o,s=!1,u=()=>{if(r.signal.aborted)return;let l=typeof a?.reason<"u"?a?.reason:void 0;r.abort(l??new DOMException("Aborted","AbortError"))};return a&&(a.aborted?u():a.addEventListener("abort",u)),i&&i>0&&(o=setTimeout(()=>{r.signal.aborted||(s=!0,r.abort(new Z(i)))},i)),{signal:r.signal,timedOut:()=>s,dispose:()=>{o&&(clearTimeout(o),o=void 0),a&&a.removeEventListener("abort",u)}}}function Y(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 ut(e,t,r,a){let n=Y(e),i=await Se(e.images,r,t,a);return{text:e.messages.filter(o=>o.role==="user").map(o=>o.content).join(`
|
|
1
|
+
"use strict";var q=Object.defineProperty;var Ue=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var We=Object.prototype.hasOwnProperty;var k=(e,t)=>()=>(e&&(t=e(e=0)),t);var z=(e,t)=>{for(var r in t)q(e,r,{get:t[r],enumerable:!0})},Ne=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ze(t))!We.call(e,n)&&n!==r&&q(e,n,{get:()=>t[n],enumerable:!(a=Ue(t,n))||a.enumerable});return e};var _e=e=>Ne(q({},"__esModule",{value:!0}),e);function L(){return globalThis.WpSuite?.plugins?.aiKit}async function H(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=()=>o(r),i=()=>o(()=>a(new Error("AiKit failed"))),o=l=>{window.removeEventListener("wpsuite:ai-kit:ready",n),window.removeEventListener("wpsuite:ai-kit:error",i),s&&clearTimeout(s),l()};window.addEventListener("wpsuite:ai-kit:ready",n,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",i,{once:!0});let s=e?window.setTimeout(()=>o(()=>a(new Error("AiKit timeout"))),e):0})}}async function ae(e=1e4){await H(e);let r=L()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var j=k(()=>{"use strict"});var oe,A,V,$,G,qe,He,je,Ve,$e,ie,K,se,ue,W=k(()=>{"use strict";oe=require("@smart-cloud/wpsuite-core"),A=require("@wordpress/data"),V=require("aws-amplify/utils");j();typeof WpSuite<"u"?$=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),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},qe=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},He=async()=>{let e=G(await(0,oe.getConfig)("aiKit")),t=await qe();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},je={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?V.I18n.setLanguage(""):V.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Ve={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},$e={},ie=e=>(0,A.dispatch)(e),K=e=>(0,A.select)(e),se=async()=>{let e=await He(),t=(0,A.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};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:a.showChatbotPreview}}return r},actions:je,selectors:Ve,resolvers:$e});return(0,A.register)(t),t},ue=(e,t,r)=>{let a;function n(){let o=K(e).getState(),s=t(o);if(s!==a){let l=a;a=s,r(a,l)}}let i=(0,A.subscribe)(n,e);return n(),i}});var y,le=k(()=>{"use strict";y="smartcloud-ai-kit"});var C,Ge,Xe,ce=k(()=>{"use strict";C=require("react/jsx-runtime"),Ge=e=>(0,C.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,C.jsx)("path",{d:"M19 27H33"}),(0,C.jsx)("path",{d:"M19 33H33"}),(0,C.jsx)("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),(0,C.jsx)("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),(0,C.jsx)("path",{d:"M16 10V40H36V22"}),(0,C.jsx)("path",{d:"M16 10H22"}),(0,C.jsx)("path",{d:"M22 10V23H36"}),(0,C.jsx)("path",{d:"M22 10L36 22"})]}),Xe=e=>(0,C.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,C.jsx)("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),(0,C.jsx)("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),(0,C.jsx)("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),(0,C.jsx)("path",{d:"M16 24H32"})]})});var P,X=k(()=>{"use strict";P=class extends Error{constructor(r,a,n){super(r);this.decision=a;this.status=n;this.name="AiBackendError"}}});var ye={};z(ye,{MIN_CHROME_VERSION:()=>me,checkOnDeviceAvailability:()=>be,decideCapability:()=>_,resolveBackend:()=>E});async function ge(){let t=await Je?.plugins?.aiKit?.features.store;return K(t).getConfig()??{}}function pe(e){let t=e.backendApiName?.trim()||void 0,r=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(r?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:r}}function Qe(e){if(e.mode)return e.mode;let{transport:t}=pe(e);return t?"backend-fallback":"local-only"}async function E(){let e=await ge(),{transport:t,backendApiName:r,backendBaseUrl:a}=pe(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return a?{available:!0,transport:t,baseUrl:a,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!r)return{available:!1,reason:"backendApiName is missing"};let 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 fe(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function N(e,t){return e?.find(r=>r.brand===t)?.version}async function Ze(){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 Ye(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?fe(t[1]):void 0}function et(){return!!navigator?.brave}async function tt(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 Ze(),a=N(r,"Microsoft Edge")??N(r,"Microsoft Edge WebView2"),n=N(r,"Google Chrome")??N(r,"Chromium"),i=!!a||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),o=/\bOPR\//i.test(t),s=/\bVivaldi\//i.test(t),l=/\bSamsungBrowser\//i.test(t),u=/\bFirefox\//i.test(t),c=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),m=et()||/\bBrave\//i.test(t);if(i||o||s||l||u||c||m)return{allowed:!1,reason:i?"edge":m?"brave":u?"firefox":c?"safari":o?"opera":s?"vivaldi":l?"samsung":"unsupported-browser"};let g=fe(n)??Ye(t),f=me[e];return f?g?g<f?{allowed:!1,reason:`chrome-too-old-${g}-lt-${f}`,chromeMajor:g}:{allowed:!0,reason:"ok",chromeMajor:g}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:g}}async function be(e,t){try{let r=await tt(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 i=await Translator.availability({...n,sourceLanguage:n.sourceLanguage==="auto"?"en":n.sourceLanguage,targetLanguage:n.sourceLanguage==="auto"||n.sourceLanguage===n.targetLanguage?"hu":n.targetLanguage});return{available:i!=="unavailable",status:i,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 _(e,t,r){let a=await ge(),n=r||Qe(a),i=await E(),o=await be(e,t),s=o.available,l=i.available,u={feature:e,mode:n,onDeviceAvailable:s,onDeviceStatus:o.status,onDeviceReason:o.reason,backendAvailable:l,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason};return n==="local-only"?s?{...u,source:"on-device",reason:`local-only: on-device available (${o.reason??o.status})`}:{...u,source:"none",reason:`local-only: on-device unavailable (${o.reason??o.status})`}:n==="backend-only"?l?{...u,source:"backend",reason:`backend-only: backend available (${i.reason??"n/a"})`}:{...u,source:"none",reason:`backend-only: backend unavailable (${i.reason??"n/a"})`}:s?{...u,source:"on-device",reason:`backend-fallback: using on-device (${o.reason??o.status})`}:l?{...u,source:"backend",reason:`backend-fallback: using backend (${i.reason??"n/a"}; on-device: ${o.reason??o.status})`}:{...u,source:"none",reason:`No on-device AI or backend available (on-device: ${o.reason??o.status}; backend: ${i.reason??"n/a"})`}}var de,Je,me,J=k(()=>{"use strict";de=require("@smart-cloud/wpsuite-core");W();Je=(0,de.getWpSuite)();me={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var ke={};z(ke,{dispatchBackend:()=>I,withRecaptchaHeaders:()=>F});function rt(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}function nt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function at(e){let t=e?.reCaptchaChatTtlSeconds,r=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,r)*1e3}function ot(e,t){let r=at(t);if(r<=0)return!1;let a=ve.get(e);return a?Date.now()-a<r:!1}function Q(e,t){let r=nt(t);r&&ve.set(e,r)}function he(e,t,r){if(e!=="frontend"||t!=="prompt"||!Ae(r)||r.saveChatSession!==!0)return;let a=r.sessionId;return typeof a=="string"&&a.trim()?a.trim():void 0}function Ce(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let r=Object.keys(e).find(n=>n.toLowerCase()===t.toLowerCase());if(!r)return;let a=e[r];return typeof a=="string"&&a?a:void 0}async function it(e,t){if(e!=="frontend")return;let r=rt();if(!r?.reCaptchaSiteKey||t?.cacheKey&&ot(t.cacheKey,r))return;let{execute:a}=await(0,we.getRecaptcha)(r?.useRecaptchaEnterprise||!1);if(typeof a=="function")try{let i=await a(r.reCaptchaSiteKey,{action:"generate"});return typeof i=="string"&&i?i:void 0}catch{return}}async function F(e,t,r){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let a=await it(e,r);return a?{...t,"X-Recaptcha-Token":a}:t}function B(e,t){try{e?.onStatus?.(t)}catch{}}function Ae(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function ut(e,t){if(!Ae(t))return t;let r=st[e];if(!r)return t;let a={};for(let n of r)n in t&&(a[n]=t[n]);return a}function dt(e,t){return(e==="admin"?lt:ct)[t]}async function I(e,t,r,a,n={}){let i=dt(t,r),o=ut(r,a);if(!i)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 gt(e.backendBaseUrl,i,o,n,e,r,t)}if(!e.backendApiName)throw new P("backendTransport=gatey but backendApiName is missing.",e);return pt(e.backendApiName,i,o,n,e,r,t)}async function gt(e,t,r,a,n,i,o){let s=`${e.replace(/\/+$/,"")}${t}`,l={"content-type":"application/json",...a.headers??{}},u=he(o,i,r),c=await F(o,l,{cacheKey:u}),m=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([p,h])=>[p,String(h)])).toString():"";B(a,{feature:i,context:o,step:"backend:request",source:"backend"}),B(a,{feature:i,context:o,step:"backend:waiting",source:"backend"});let g=await fetch(s+m,{method:"POST",headers:c,body:JSON.stringify(r??{}),signal:a.signal,credentials:"omit"});if(B(a,{feature:i,context:o,step:"backend:response",source:"backend"}),!g.ok){let p=`HTTP ${g.status}`;try{let h=await g.text();h&&(p=`${p}: ${h.substring(0,400)}`)}catch{}throw new P(`Fetch backend call failed: ${p}`,n,g.status)}let f=g.headers.get("content-type")||"",b=Ce(g.headers,"x-recaptcha-verified-at");if(f.includes("application/json")){let p=await g.json(),h=(p&&typeof p.sessionId=="string"&&p.sessionId.trim()?p.sessionId.trim():void 0)??u;return b&&h&&Q(h,b),p}return b&&u&&Q(u,b),await g.text()}async function pt(e,t,r,a,n,i,o){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 u=he(o,i,r),c=await F(o,{...a.headers??{}},{cacheKey:u});B(a,{feature:i,context:o,step:"backend:request",source:"backend"}),B(a,{feature:i,context:o,step:"backend:waiting",source:"backend"});let m=l.cognito.post({apiName:e,path:t,options:{body:r,headers:c,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response,f=Ce(g.headers,"x-recaptcha-verified-at"),b=await g.body.json(),p=b?.sessionId??u;return f&&typeof p=="string"&&p.trim()&&Q(p.trim(),f),B(a,{feature:i,context:o,step:"backend:response",source:"backend"}),b}var we,ve,st,lt,ct,Z=k(()=>{"use strict";we=require("@smart-cloud/wpsuite-core");X();ve=new Map;st={prompt:["text","systemPrompt","context","responseConstraint","saveChatSession","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"]};lt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},ct={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var Fe={};z(Fe,{detectLanguage:()=>Tt,getPromptOptions:()=>Ee,getProofreadOptions:()=>Oe,getRewriteOptions:()=>Te,getSummarizeOptions:()=>Re,getTranslateOptions:()=>Be,getWriteOptions:()=>Se,prompt:()=>Ut,proofread:()=>Lt,rewrite:()=>xt,sendChatMessage:()=>zt,sendFeedbackMessage:()=>Wt,summarize:()=>St,translate:()=>U,write:()=>Pt});function x(){return(xe?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function M(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(a=>r===a.toLowerCase())}function d(e,t,r,a){try{r?.onStatus?.({feature:e,context:t,...a})}catch{}}function D(){return xe?.plugins?.aiKit?.settings?.sharedContext??void 0}function T(e){return e?.context??"admin"}function O(e,t=mt){let r=new AbortController,a=e?.signal,n=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,i=typeof n=="number"?n:t,o,s=!1,l=()=>{if(r.signal.aborted)return;let u=typeof a?.reason<"u"?a?.reason:void 0;r.abort(u??new DOMException("Aborted","AbortError"))};return a&&(a.aborted?l():a.addEventListener("abort",l)),i&&i>0&&(o=setTimeout(()=>{r.signal.aborted||(s=!0,r.abort(new Y(i)))},i)),{signal:r.signal,timedOut:()=>s,dispose:()=>{o&&(clearTimeout(o),o=void 0),a&&a.removeEventListener("abort",l)}}}function ee(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 ft(e,t,r,a){let n=ee(e),i=await Ke(e.images,r,t,a);return{text:e.messages.filter(o=>o.role==="user").map(o=>o.content).join(`
|
|
2
2
|
`),systemPrompt:e.messages.filter(o=>o.role==="system").map(o=>o.content).join(`
|
|
3
|
-
`),images:i?.images,imageUrls:i?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...n}}async function lt(e,t,r){let a=Y(e),n=await Se(e.images,t,"frontend",r);return{sessionId:e.sessionId,text:e.message,images:n?.images,imageUrls:n?.imageUrls,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...a}}async function ct(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function dt(e){let t=Y(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function gt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function pt(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 mt(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function ft(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function bt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function R(e,t,r,a,n,i,o,s){d(a,e,s,{step:"decide",message:"Deciding capability",silent:r});let u=await _(a,n,t);if(d(a,e,s,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:r}),u.source==="on-device")try{let l=await i();return d(a,e,s,{step:"done",source:"on-device",silent:r}),l}catch(l){console.error(`Error in on-device ${a}:`,l),d(a,e,s,{step:"error",source:"on-device",message:l.message,silent:r}),s?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){d(a,e,s,{step:"backend:request",source:"backend",silent:r});let l=typeof o=="function"?await o(u):o,c=await I(u,e,a,l,s);return d(a,e,s,{step:"done",source:"backend",silent:r}),c}throw new Error(`No capability for "${a}" (${e}). Reason: ${u.reason}`)}function kt(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],a=t?r.map(i=>({type:"image",value:i})):[],n;if(typeof e.messages=="string")n=t?[{role:"user",content:[{type:"text",value:e.messages},...a]}]:e.messages;else{let i=e.messages.filter(o=>o.role!=="system").map(o=>({role:o.role==="assistant"?"assistant":"user",content:o.content}));if(t){let o=-1;for(let s=i.length-1;s>=0;s--)if(i[s].role==="user"){o=s;break}if(o===-1)i.push({role:"user",content:[{type:"text",value:""},...a]});else{let s=String(i[o].content??"");i[o]={...i[o],content:[{type:"text",value:s},...a]}}}n=i}return n}function Pt(e){return typeof Blob<"u"&&e instanceof Blob}function xt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Lt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function St(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 Tt(e){let t=await St(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Ot(e,t,r,a,n,i){let o=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",s={...i?.headers??{}},u=await F(t,s);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let m=new URLSearchParams({fileName:r,contentType:a,contentLength:String(n)}).toString(),w=`${e.backendBaseUrl.replace(/\/+$/,"")}${o}?${m}`,h=await fetch(w,{method:"GET",headers:u,signal:i?.signal,credentials:"omit"});if(!h.ok){let re=await h.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${h.status}${re?": "+re.substring(0,200):""}`)}let A=await h.json();if(!A?.uploadUrl||!A?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:A.uploadUrl,imageKey:A.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let l=globalThis.WpSuite?.plugins?.gatey,c={fileName:r,contentType:a,contentLength:n};if(l?.cognito?.get){let m=l.cognito.get({apiName:e.backendApiName,path:o,options:{queryParams:Object.keys(c).reduce((h,A)=>(h[A]=String(c[A]),h),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});i?.signal?.addEventListener?.("abort",()=>{m.cancel()});let w=await m.response.then(h=>h.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(!l?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let g=l.cognito.post({apiName:e.backendApiName,path:o,options:{body:c,headers:u,retryStrategy:{strategy:"no-retry"}}});i?.signal?.addEventListener?.("abort",()=>{g.cancel()});let p=await g.response.then(m=>m.body.json());if(!p?.uploadUrl||!p?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:p.uploadUrl,imageKey:p.imageKey}}async function Rt(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 i=await n.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${n.status}${i?": "+i.substring(0,200):""}`)}}async function Se(e,t,r,a){if(!e||e.length===0)return;let n=[];for(let l of e){if(!Pt(l))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");n.push(l)}let i=n.reduce((l,c)=>l+(c.size||0),0);if(Math.ceil(i*1.37+2048*n.length)<=Ct){d("prompt",r,a,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let l=[];for(let c of n)l.push({format:Lt(c.type),data:await Tt(c)});return{images:l}}d("prompt",r,a,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let l=0;l<n.length;l++){let c=n[l],g=c.type||"application/octet-stream",p=c.name||`image_${l}.${xt(g)}`;d("prompt",r,a,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:m,imageKey:w}=await Ot(t,r,p,g,c.size||0,a);d("prompt",r,a,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Rt(m,c,g,a),u.push(w)}return{imageUrls:u}}var ve,he,st,Ae,Z,ke,yt,Ce,wt,Pe,vt,xe,ht,At,Le,U,Ct,Te,Bt,Et,Kt,Re=C(()=>{"use strict";ve=require("@smart-cloud/wpsuite-core");Q();J();Be();he=(0,ve.getWpSuite)();st=45e3,Ae=5e3,Z=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};ke=e=>{let t=e.outputLanguage?e.outputLanguage:x(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},yt=async(e,t)=>{let r=T(t),a=e.sharedContext??D(),n=e.outputLanguage?e.outputLanguage:x(),i=n,o=!1;M(n)||(o=!0,n="en");let s=ke({...e,outputLanguage:n});return R(r,t?.modeOverride,!1,"writer",s,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=O(t);try{let l=await Writer.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",g=>{let p=g.loaded;d("writer",r,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}});d("writer",r,t,{step:"on-device:ready",source:"on-device"});try{d("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let c=await l.write(e.prompt,{context:e.context,signal:u.signal});return o?{result:(await U({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:u.signal})).result}:{result:c}}finally{try{l.destroy()}catch(c){console.error("Error destroying writer:",c)}}}finally{u.dispose()}},dt({...e,sharedContext:a,outputLanguage:i}),t)},Ce=e=>{let t=e.outputLanguage?e.outputLanguage:x(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},wt=async(e,t)=>{let r=T(t),a=e.sharedContext??D(),n=e.outputLanguage?e.outputLanguage:x(),i=n,o=!1;M(n)||(o=!0,n="en");let s=Ce({...e,outputLanguage:n});return R(r,t?.modeOverride,!1,"rewriter",s,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=O(t);try{let l=await Rewriter.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",g=>{let p=g.loaded;d("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}});d("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let c=await l.rewrite(e.text,{context:e.context,signal:u.signal});return o?{result:(await U({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:u.signal})).result}:{result:c}}finally{try{l.destroy()}catch(c){console.error("Error destroying rewriter:",c)}}}finally{u.dispose()}},gt({...e,sharedContext:a,outputLanguage:i}),t)},Pe=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),vt=async(e,t)=>{let r=T(t),a=await Pe();return R(r,t?.modeOverride,!1,"proofreader",a,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let n=O(t);try{let i=await Proofreader.create({...a,monitor(o){o.addEventListener("downloadprogress",s=>{let u=s.loaded;d("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}});d("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await i.proofread(e.text,{signal:n.signal})}}finally{try{i.destroy()}catch(o){console.error("Error destroying proofreader:",o)}}}finally{n.dispose()}},bt(e),t)},xe=e=>{let t=e.outputLanguage?e.outputLanguage:x(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},ht=async(e,t)=>{let r=T(t),a=e.sharedContext??D(),n=e.outputLanguage?e.outputLanguage:x(),i=n,o=!1;M(n)||(o=!0,n="en");let s=await xe({...e,outputLanguage:n});return R(r,t?.modeOverride,!1,"summarizer",s,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=O(t);try{let l=await Summarizer.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",g=>{let p=g.loaded;d("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}});d("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let c=await l.summarize(e.text,{context:e.context,signal:u.signal});return o?{result:(await U({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:u.signal})).result}:{result:c}}finally{try{l.destroy()}catch(c){console.error("Error destroying summarizer:",c)}}}finally{u.dispose()}},pt({...e,sharedContext:a,outputLanguage:i}),t)},At=async(e,t)=>{let r=T(t);return R(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let a=O(t,Ae);try{let n=await LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",o=>{let s=o.loaded;d("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:s,loaded:s,silent:t?.silent})})}});d("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await n.detect(e.text,{signal:a.signal})).filter(o=>ee.find(s=>s.value===o.detectedLanguage))}}}finally{try{n.destroy()}catch(i){console.error("Error destroying language detector:",i)}}}finally{a.dispose()}},ft(e.text,t),t)},Le=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??x()??"en"};return Promise.resolve(t)},U=async(e,t)=>{let r=T(t),a=await Le({...e});return R(r,t?.modeOverride,t?.silent,"translator",a,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let n=O(t,Ae);try{let i=await Translator.create({...a,monitor(o){o.addEventListener("downloadprogress",s=>{let u=s.loaded;d("translator",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}});d("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let o=[],s=()=>{if(typeof n.signal.throwIfAborted=="function")n.signal.throwIfAborted();else if(n.signal.aborted)throw n.signal.reason??new DOMException("Aborted","AbortError")};for(let l of e.text.split(`
|
|
4
|
-
`))s(),o.push(i.translate(
|
|
5
|
-
`)}}finally{try{i.destroy()}catch(o){console.error("Error destroying translator:",o)}}}finally{n.dispose()}},
|
|
3
|
+
`),images:i?.images,imageUrls:i?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...n}}async function bt(e,t,r){let a=ee(e),n=await Ke(e.images,t,"frontend",r);return{sessionId:e.sessionId,text:e.message,images:n?.images,imageUrls:n?.imageUrls,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...a}}async function yt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function wt(e){let t=ee(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function vt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function ht(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 Ct(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function At(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function kt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function R(e,t,r,a,n,i,o,s){d(a,e,s,{step:"decide",message:"Deciding capability",silent:r});let l=await _(a,n,t);if(d(a,e,s,{step:"decide",source:l.source,message:`Using ${l.source}`,silent:r}),l.source==="on-device")try{let u=await i();return d(a,e,s,{step:"done",source:"on-device",silent:r}),u}catch(u){console.error(`Error in on-device ${a}:`,u),d(a,e,s,{step:"error",source:"on-device",message:u.message,silent:r}),s?.signal?.throwIfAborted()}if(l.mode!=="local-only"&&l.backendAvailable){d(a,e,s,{step:"backend:request",source:"backend",silent:r});let u=typeof o=="function"?await o(l):o,c=await I(l,e,a,u,s);return d(a,e,s,{step:"done",source:"backend",silent:r}),c}throw new Error(`No capability for "${a}" (${e}). Reason: ${l.reason}`)}function Ot(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],a=t?r.map(i=>({type:"image",value:i})):[],n;if(typeof e.messages=="string")n=t?[{role:"user",content:[{type:"text",value:e.messages},...a]}]:e.messages;else{let i=e.messages.filter(o=>o.role!=="system").map(o=>({role:o.role==="assistant"?"assistant":"user",content:o.content}));if(t){let o=-1;for(let s=i.length-1;s>=0;s--)if(i[s].role==="user"){o=s;break}if(o===-1)i.push({role:"user",content:[{type:"text",value:""},...a]});else{let s=String(i[o].content??"");i[o]={...i[o],content:[{type:"text",value:s},...a]}}}n=i}return n}function Bt(e){return typeof Blob<"u"&&e instanceof Blob}function Kt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Et(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function Ft(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 It(e){let t=await Ft(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Mt(e,t,r,a,n,i){let o=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",s={...i?.headers??{}},l=await F(t,s);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let f=new URLSearchParams({fileName:r,contentType:a,contentLength:String(n)}).toString(),b=`${e.backendBaseUrl.replace(/\/+$/,"")}${o}?${f}`,p=await fetch(b,{method:"GET",headers:l,signal:i?.signal,credentials:"omit"});if(!p.ok){let ne=await p.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${p.status}${ne?": "+ne.substring(0,200):""}`)}let h=await p.json();if(!h?.uploadUrl||!h?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:h.uploadUrl,imageKey:h.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let u=globalThis.WpSuite?.plugins?.gatey,c={fileName:r,contentType:a,contentLength:n};if(u?.cognito?.get){let f=u.cognito.get({apiName:e.backendApiName,path:o,options:{queryParams:Object.keys(c).reduce((p,h)=>(p[h]=String(c[h]),p),{}),headers:l,retryStrategy:{strategy:"no-retry"}}});i?.signal?.addEventListener?.("abort",()=>{f.cancel()});let b=await f.response.then(p=>p.body.json());if(!b?.uploadUrl||!b?.imageKey)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/imageKey");return{uploadUrl:b.uploadUrl,imageKey:b.imageKey}}if(!u?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let m=u.cognito.post({apiName:e.backendApiName,path:o,options:{body:c,headers:l,retryStrategy:{strategy:"no-retry"}}});i?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response.then(f=>f.body.json());if(!g?.uploadUrl||!g?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:g.uploadUrl,imageKey:g.imageKey}}async function Dt(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 i=await n.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${n.status}${i?": "+i.substring(0,200):""}`)}}async function Ke(e,t,r,a){if(!e||e.length===0)return;let n=[];for(let u of e){if(!Bt(u))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");n.push(u)}let i=n.reduce((u,c)=>u+(c.size||0),0);if(Math.ceil(i*1.37+2048*n.length)<=Rt){d("prompt",r,a,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let u=[];for(let c of n)u.push({format:Et(c.type),data:await It(c)});return{images:u}}d("prompt",r,a,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let l=[];for(let u=0;u<n.length;u++){let c=n[u],m=c.type||"application/octet-stream",g=c.name||`image_${u}.${Kt(m)}`;d("prompt",r,a,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:f,imageKey:b}=await Mt(t,r,g,m,c.size||0,a);d("prompt",r,a,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Dt(f,c,m,a),l.push(b)}return{imageUrls:l}}var Pe,xe,mt,Le,Y,Se,Pt,Te,xt,Oe,Lt,Re,St,Tt,Be,U,Rt,Ee,Ut,zt,Wt,Ie=k(()=>{"use strict";Pe=require("@smart-cloud/wpsuite-core");Z();J();Me();xe=(0,Pe.getWpSuite)();mt=45e3,Le=5e3,Y=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Se=e=>{let t=e.outputLanguage?e.outputLanguage:x(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Pt=async(e,t)=>{let r=T(t),a=e.sharedContext??D(),n=e.outputLanguage?e.outputLanguage:x(),i=n,o=!1;M(n)||(o=!0,n="en");let s=Se({...e,outputLanguage:n});return R(r,t?.modeOverride,!1,"writer",s,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let l=O(t);try{let u=await Writer.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",m=>{let g=m.loaded;d("writer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});d("writer",r,t,{step:"on-device:ready",source:"on-device"});try{d("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let c=await u.write(e.prompt,{context:e.context,signal:l.signal});return o?{result:(await U({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:l.signal})).result}:{result:c}}finally{try{u.destroy()}catch(c){console.error("Error destroying writer:",c)}}}finally{l.dispose()}},wt({...e,sharedContext:a,outputLanguage:i}),t)},Te=e=>{let t=e.outputLanguage?e.outputLanguage:x(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},xt=async(e,t)=>{let r=T(t),a=e.sharedContext??D(),n=e.outputLanguage?e.outputLanguage:x(),i=n,o=!1;M(n)||(o=!0,n="en");let s=Te({...e,outputLanguage:n});return R(r,t?.modeOverride,!1,"rewriter",s,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let l=O(t);try{let u=await Rewriter.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",m=>{let g=m.loaded;d("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});d("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let c=await u.rewrite(e.text,{context:e.context,signal:l.signal});return o?{result:(await U({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:l.signal})).result}:{result:c}}finally{try{u.destroy()}catch(c){console.error("Error destroying rewriter:",c)}}}finally{l.dispose()}},vt({...e,sharedContext:a,outputLanguage:i}),t)},Oe=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Lt=async(e,t)=>{let r=T(t),a=await Oe();return R(r,t?.modeOverride,!1,"proofreader",a,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let n=O(t);try{let i=await Proofreader.create({...a,monitor(o){o.addEventListener("downloadprogress",s=>{let l=s.loaded;d("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:l,loaded:l})})}});d("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await i.proofread(e.text,{signal:n.signal})}}finally{try{i.destroy()}catch(o){console.error("Error destroying proofreader:",o)}}}finally{n.dispose()}},kt(e),t)},Re=e=>{let t=e.outputLanguage?e.outputLanguage:x(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},St=async(e,t)=>{let r=T(t),a=e.sharedContext??D(),n=e.outputLanguage?e.outputLanguage:x(),i=n,o=!1;M(n)||(o=!0,n="en");let s=await Re({...e,outputLanguage:n});return R(r,t?.modeOverride,!1,"summarizer",s,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let l=O(t);try{let u=await Summarizer.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",m=>{let g=m.loaded;d("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});d("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let c=await u.summarize(e.text,{context:e.context,signal:l.signal});return o?{result:(await U({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:l.signal})).result}:{result:c}}finally{try{u.destroy()}catch(c){console.error("Error destroying summarizer:",c)}}}finally{l.dispose()}},ht({...e,sharedContext:a,outputLanguage:i}),t)},Tt=async(e,t)=>{let r=T(t);return R(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let a=O(t,Le);try{let n=await LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",o=>{let s=o.loaded;d("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:s,loaded:s,silent:t?.silent})})}});d("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await n.detect(e.text,{signal:a.signal})).filter(o=>te.find(s=>s.value===o.detectedLanguage))}}}finally{try{n.destroy()}catch(i){console.error("Error destroying language detector:",i)}}}finally{a.dispose()}},At(e.text,t),t)},Be=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??x()??"en"};return Promise.resolve(t)},U=async(e,t)=>{let r=T(t),a=await Be({...e});return R(r,t?.modeOverride,t?.silent,"translator",a,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let n=O(t,Le);try{let i=await Translator.create({...a,monitor(o){o.addEventListener("downloadprogress",s=>{let l=s.loaded;d("translator",r,t,{step:"on-device:download",source:"on-device",progress:l,loaded:l,silent:t?.silent})})}});d("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let o=[],s=()=>{if(typeof n.signal.throwIfAborted=="function")n.signal.throwIfAborted();else if(n.signal.aborted)throw n.signal.reason??new DOMException("Aborted","AbortError")};for(let u of e.text.split(`
|
|
4
|
+
`))s(),o.push(i.translate(u.trim()));return{result:(await Promise.all(o)).join(`
|
|
5
|
+
`)}}finally{try{i.destroy()}catch(o){console.error("Error destroying translator:",o)}}}finally{n.dispose()}},Ct(e.text,e.sourceLanguage,e.targetLanguage),t)};Rt=4*1024*1024;Ee=async e=>{let t=e.outputLanguage?e.outputLanguage:x();return M(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Ut=async(e,t)=>{let r=T(t),a=e.sharedContext??D(),n=e.outputLanguage?e.outputLanguage:x(),i=n,o=!1;M(n)||(o=!0,n="en");let s=await Ee({...e,outputLanguage:n}),l=await _("prompt",s,t?.modeOverride);return R(r,t?.modeOverride,!1,"prompt",s,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");d("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let u=[];if(typeof e.messages!="string"){for(let f of e.messages)f.role==="system"&&f.content.trim()&&u.push(f.content.trim());a&&a.trim()&&u.push("SHARED CONTEXT: "+a.trim())}let c=u.length>0?u.join(`
|
|
6
6
|
|
|
7
|
-
`):void 0,
|
|
7
|
+
`):void 0,m=c?[{role:"system",content:c}]:void 0,g=O(t);try{let f=await LanguageModel.create({...s,initialPrompts:m,monitor(b){b.addEventListener("downloadprogress",p=>{let h=p.loaded;d("prompt",r,t,{step:"on-device:download",source:"on-device",progress:h,loaded:h})})}});d("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let b=await f.prompt(Ot(e),{signal:g.signal,responseConstraint:e.responseConstraint});return o?{result:(await U({text:b,sourceLanguage:n,targetLanguage:i},{context:r,signal:g.signal})).result}:{result:b}}finally{try{f.destroy()}catch(b){console.error("Error destroying LanguageModel:",b)}}}finally{g.dispose()}},await ft({...e,sharedContext:a},r,l,t),t)},zt=async(e,t)=>{let r="frontend",a=e.sharedContext??D(),n="prompt",i=await E(),o={feature:n,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:i.available,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason},s=await bt({sessionId:e.sessionId,message:e.message,images:e.images,sharedContext:a},o,t);d(n,r,t,{step:"backend:request",source:"backend"});let l=await I(o,r,n,s,t);return d(n,r,t,{step:"done",source:"backend"}),l},Wt=async(e,t)=>{let r="frontend",a="prompt",n=await E(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:n.available,backendTransport:n.transport,backendApiName:n.apiName,backendBaseUrl:n.baseUrl,backendReason:n.reason},o=await yt({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});d(a,r,t,{step:"backend:request",source:"backend"});let s=await I(i,r,a,o,t);return d(a,r,t,{step:"done",source:"backend"}),s}});var ur={};z(ur,{AiKitChatbotIcon:()=>Xe,AiKitFeatureIcon:()=>Ge,BackendError:()=>P,LANGUAGE_OPTIONS:()=>te,TEXT_DOMAIN:()=>y,checkOnDeviceAvailability:()=>qt,decideCapability:()=>_t,detectLanguage:()=>rr,dispatchBackend:()=>jt,getAiKitPlugin:()=>L,getMinChromeVersions:()=>Nt,getPromptOptions:()=>nr,getProofreadOptions:()=>Jt,getRewriteOptions:()=>Gt,getStore:()=>ae,getStoreDispatch:()=>ie,getStoreSelect:()=>K,getSummarizeOptions:()=>Zt,getTranslateOptions:()=>er,getWriteOptions:()=>Vt,initializeAiKit:()=>sr,observeStore:()=>ue,prompt:()=>ar,proofread:()=>Qt,rewrite:()=>Xt,sanitizeAiKitConfig:()=>G,sendChatMessage:()=>or,sendFeedbackMessage:()=>ir,summarize:()=>Yt,translate:()=>tr,waitForAiKitReady:()=>H,write:()=>$t});module.exports=_e(ur);var De,v,te,re,Nt,_t,qt,Ht,jt,w,Vt,$t,Gt,Xt,Jt,Qt,Zt,Yt,er,tr,rr,nr,ar,or,ir,sr,Me=k(()=>{De=require("@smart-cloud/wpsuite-core"),v=require("@wordpress/i18n");j();W();le();W();ce();X();te=[{label:(0,v.__)("Arabic",y),value:"ar"},{label:(0,v.__)("Chinese",y),value:"zh"},{label:(0,v.__)("Dutch",y),value:"nl"},{label:(0,v.__)("English",y),value:"en"},{label:(0,v.__)("French",y),value:"fr"},{label:(0,v.__)("German",y),value:"de"},{label:(0,v.__)("Hebrew",y),value:"he"},{label:(0,v.__)("Hindi",y),value:"hi"},{label:(0,v.__)("Hungarian",y),value:"hu"},{label:(0,v.__)("Indonesian",y),value:"id"},{label:(0,v.__)("Italian",y),value:"it"},{label:(0,v.__)("Japanese",y),value:"ja"},{label:(0,v.__)("Korean",y),value:"ko"},{label:(0,v.__)("Norwegian",y),value:"no"},{label:(0,v.__)("Polish",y),value:"pl"},{label:(0,v.__)("Portuguese",y),value:"pt"},{label:(0,v.__)("Russian",y),value:"ru"},{label:(0,v.__)("Spanish",y),value:"es"},{label:(0,v.__)("Swedish",y),value:"sv"},{label:(0,v.__)("Thai",y),value:"th"},{label:(0,v.__)("Turkish",y),value:"tr"},{label:(0,v.__)("Ukrainian",y),value:"uk"}],re=Promise.resolve().then(()=>(J(),ye)),Nt=async()=>(await re).MIN_CHROME_VERSION,_t=async(...e)=>(await re).decideCapability(...e),qt=async(...e)=>(await re).checkOnDeviceAvailability(...e),Ht=Promise.resolve().then(()=>(Z(),ke)),jt=async(...e)=>(await Ht).dispatchBackend(...e),w=Promise.resolve().then(()=>(Ie(),Fe)),Vt=async(...e)=>(await w).getWriteOptions(...e),$t=async(...e)=>(await w).write(...e),Gt=async(...e)=>(await w).getRewriteOptions(...e),Xt=async(...e)=>(await w).rewrite(...e),Jt=async(...e)=>(await w).getProofreadOptions(...e),Qt=async(...e)=>(await w).proofread(...e),Zt=async(...e)=>(await w).getSummarizeOptions(...e),Yt=async(...e)=>(await w).summarize(...e),er=async(...e)=>(await w).getTranslateOptions(...e),tr=async(...e)=>(await w).translate(...e),rr=async(...e)=>(await w).detectLanguage(...e),nr=async(...e)=>(await w).getPromptOptions(...e),ar=async(...e)=>(await w).prompt(...e),or=async(...e)=>(await w).sendChatMessage(...e),ir=async(...e)=>(await w).sendFeedbackMessage(...e),sr=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,De.attachDefaultPluginRuntime)(r),r.status=r.status??"initializing";let a=se();return r.features={store:a,renderFeature:async n=>await e({...n,store:await a}),write:async(...n)=>{let i=await w,o=n[1]||{};return n[1]={context:"frontend",...o},i.write(...n)},rewrite:async(...n)=>{let i=await w,o=n[1]||{};return n[1]={context:"frontend",...o},i.rewrite(...n)},proofread:async(...n)=>{let i=await w,o=n[1]||{};return n[1]={context:"frontend",...o},i.proofread(...n)},summarize:async(...n)=>{let i=await w,o=n[1]||{};return n[1]={context:"frontend",...o},i.summarize(...n)},translate:async(...n)=>{let i=await w,o=n[1]||{};return n[1]={context:"frontend",...o},i.translate(...n)},detectLanguage:async(...n)=>{let i=await w,o=n[1]||{};return n[1]={context:"frontend",...o},i.detectLanguage(...n)},prompt:async(...n)=>{let i=await w,o=n[1]||{};return n[1]={context:"frontend",...o},i.prompt(...n)},sendChatMessage:async(...n)=>(await w).sendChatMessage(...n),sendFeedbackMessage:async(...n)=>(await w).sendFeedbackMessage(...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}});Me();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
|
@@ -99,6 +99,8 @@ interface AiKitSettings {
|
|
|
99
99
|
reCaptchaSiteKey?: string;
|
|
100
100
|
useRecaptchaNet?: boolean;
|
|
101
101
|
useRecaptchaEnterprise?: boolean;
|
|
102
|
+
/** Chat optimization: number of seconds a successful reCAPTCHA assessment remains valid for the current chat session. */
|
|
103
|
+
reCaptchaChatTtlSeconds?: number;
|
|
102
104
|
/** Whether to show "Powered by WPSuite AI-Kit" branding in UIs. */
|
|
103
105
|
enablePoweredBy?: boolean;
|
|
104
106
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -99,6 +99,8 @@ interface AiKitSettings {
|
|
|
99
99
|
reCaptchaSiteKey?: string;
|
|
100
100
|
useRecaptchaNet?: boolean;
|
|
101
101
|
useRecaptchaEnterprise?: boolean;
|
|
102
|
+
/** Chat optimization: number of seconds a successful reCAPTCHA assessment remains valid for the current chat session. */
|
|
103
|
+
reCaptchaChatTtlSeconds?: number;
|
|
102
104
|
/** Whether to show "Powered by WPSuite AI-Kit" branding in UIs. */
|
|
103
105
|
enablePoweredBy?: boolean;
|
|
104
106
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var Pe=Object.defineProperty;var k=(e,t)=>()=>(e&&(t=e(e=0)),t);var N=(e,t)=>{for(var r in t)Pe(e,r,{get:t[r],enumerable:!0})};function O(){return globalThis.WpSuite?.plugins?.aiKit}async function Q(e=8e3){let t=O();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,a)=>{let n=()=>o(r),i=()=>o(()=>a(new Error("AiKit failed"))),o=u=>{window.removeEventListener("wpsuite:ai-kit:ready",n),window.removeEventListener("wpsuite:ai-kit:error",i),s&&clearTimeout(s),u()};window.addEventListener("wpsuite:ai-kit:ready",n,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",i,{once:!0});let s=e?window.setTimeout(()=>o(()=>a(new Error("AiKit timeout"))),e):0})}}async function xe(e=1e4){await Q(e);let r=O()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var _=k(()=>{"use strict"});import{getConfig as Le}from"@smart-cloud/wpsuite-core";import{createReduxStore as Se,dispatch as Te,register as Oe,select as Re,subscribe as Be}from"@wordpress/data";import{I18n as Z}from"aws-amplify/utils";var q,Y,Ee,Ke,Fe,Ie,Me,De,D,ee,Ue,U=k(()=>{"use strict";_();typeof WpSuite<"u"?q=WpSuite.siteSettings:q={};Y=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},Ee=async()=>{let e=O();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+q.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},Ke=async()=>{let e=Y(await Le("aiKit")),t=await Ee();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Fe={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?Z.setLanguage(""):Z.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},Ie={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},Me={},De=e=>Te(e),D=e=>Re(e),ee=async()=>{let e=await Ke(),t=Se("wpsuite/ai-kit",{reducer(r=e,a){switch(a.type){case"SET_LANGUAGE":return{...r,language:a.language};case"SET_DIRECTION":return{...r,direction:a.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:a.showChatbotPreview}}return r},actions:Fe,selectors:Ie,resolvers:Me});return Oe(t),t},Ue=(e,t,r)=>{let a;function n(){let o=D(e).getState(),s=t(o);if(s!==a){let u=a;a=s,r(a,u)}}let i=Be(n,e);return n(),i}});var b,te=k(()=>{"use strict";b="smartcloud-ai-kit"});import{jsx as h,jsxs as re}from"react/jsx-runtime";var _t,qt,ne=k(()=>{"use strict";_t=e=>re("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:[h("path",{d:"M19 27H33"}),h("path",{d:"M19 33H33"}),h("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),h("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),h("path",{d:"M16 10V40H36V22"}),h("path",{d:"M16 10H22"}),h("path",{d:"M22 10V23H36"}),h("path",{d:"M22 10L36 22"})]}),qt=e=>re("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:[h("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"}),h("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),h("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),h("path",{d:"M16 24H32"})]})});var P,H=k(()=>{"use strict";P=class extends Error{constructor(r,a,n){super(r);this.decision=a;this.status=n;this.name="AiBackendError"}}});var le={};N(le,{MIN_CHROME_VERSION:()=>ie,checkOnDeviceAvailability:()=>ue,decideCapability:()=>W,resolveBackend:()=>B});import{getWpSuite as ze}from"@smart-cloud/wpsuite-core";async function ae(){let t=await We?.plugins?.aiKit?.features.store;return D(t).getConfig()??{}}function oe(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}=oe(e);return t?"backend-fallback":"local-only"}async function B(){let e=await ae(),{transport:t,backendApiName:r,backendBaseUrl:a}=oe(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 se(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function z(e,t){return e?.find(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]?se(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(),a=z(r,"Microsoft Edge")??z(r,"Microsoft Edge WebView2"),n=z(r,"Google Chrome")??z(r,"Chromium"),i=!!a||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),o=/\bOPR\//i.test(t),s=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),l=/\bFirefox\//i.test(t),c=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),g=He()||/\bBrave\//i.test(t);if(i||o||s||u||l||c||g)return{allowed:!1,reason:i?"edge":g?"brave":l?"firefox":c?"safari":o?"opera":s?"vivaldi":u?"samsung":"unsupported-browser"};let p=se(n)??qe(t),m=ie[e];return m?p?p<m?{allowed:!1,reason:`chrome-too-old-${p}-lt-${m}`,chromeMajor:p}:{allowed:!0,reason:"ok",chromeMajor:p}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:p}}async function ue(e,t){try{let r=await je(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 i=await Translator.availability({...n,sourceLanguage:n.sourceLanguage==="auto"?"en":n.sourceLanguage,targetLanguage:n.sourceLanguage==="auto"||n.sourceLanguage===n.targetLanguage?"hu":n.targetLanguage});return{available:i!=="unavailable",status:i,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 W(e,t,r){let a=await ae(),n=r||Ne(a),i=await B(),o=await ue(e,t),s=o.available,u=i.available,l={feature:e,mode:n,onDeviceAvailable:s,onDeviceStatus:o.status,onDeviceReason:o.reason,backendAvailable:u,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason};return n==="local-only"?s?{...l,source:"on-device",reason:`local-only: on-device available (${o.reason??o.status})`}:{...l,source:"none",reason:`local-only: on-device unavailable (${o.reason??o.status})`}:n==="backend-only"?u?{...l,source:"backend",reason:`backend-only: backend available (${i.reason??"n/a"})`}:{...l,source:"none",reason:`backend-only: backend unavailable (${i.reason??"n/a"})`}:s?{...l,source:"on-device",reason:`backend-fallback: using on-device (${o.reason??o.status})`}:u?{...l,source:"backend",reason:`backend-fallback: using backend (${i.reason??"n/a"}; on-device: ${o.reason??o.status})`}:{...l,source:"none",reason:`No on-device AI or backend available (on-device: ${o.reason??o.status}; backend: ${i.reason??"n/a"})`}}var We,ie,j=k(()=>{"use strict";U();We=ze();ie={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var ce={};N(ce,{dispatchBackend:()=>K,withRecaptchaHeaders:()=>E});import{getRecaptcha as Ve}from"@smart-cloud/wpsuite-core";function $e(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}async function Ge(e){if(e!=="frontend")return;let t=$e();if(!t?.reCaptchaSiteKey)return;let{execute:r}=await Ve(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 E(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 R(e,t){try{e?.onStatus?.(t)}catch{}}function Xe(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Qe(e,t){if(!Xe(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 et(e,t){return(e==="admin"?Ze:Ye)[t]}async function K(e,t,r,a,n={}){let i=et(t,r),o=Qe(r,a);if(!i)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 tt(e.backendBaseUrl,i,o,n,e,r,t)}if(!e.backendApiName)throw new P("backendTransport=gatey but backendApiName is missing.",e);return rt(e.backendApiName,i,o,n,e,r,t)}async function tt(e,t,r,a,n,i,o){let s=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...a.headers??{}},l=await E(o,u),c=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([m,w])=>[m,String(w)])).toString():"";R(a,{feature:i,context:o,step:"backend:request",source:"backend"}),R(a,{feature:i,context:o,step:"backend:waiting",source:"backend"});let g=await fetch(s+c,{method:"POST",headers:l,body:JSON.stringify(r??{}),signal:a.signal,credentials:"omit"});if(R(a,{feature:i,context:o,step:"backend:response",source:"backend"}),!g.ok){let m=`HTTP ${g.status}`;try{let w=await g.text();w&&(m=`${m}: ${w.substring(0,400)}`)}catch{}throw new P(`Fetch backend call failed: ${m}`,n,g.status)}return(g.headers.get("content-type")||"").includes("application/json")?await g.json():await g.text()}async function rt(e,t,r,a,n,i,o){let u=globalThis.WpSuite?.plugins?.gatey;if(!u?.cognito?.post)throw new P("Gatey backend selected, but Gatey.cognito.post is not available.",n);let l=await E(o,{...a.headers??{}});R(a,{feature:i,context:o,step:"backend:request",source:"backend"}),R(a,{feature:i,context:o,step:"backend:waiting",source:"backend"});let c=u.cognito.post({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{c.cancel()});let g=await c.response.then(p=>p.body.json());return R(a,{feature:i,context:o,step:"backend:response",source:"backend"}),g}var Je,Ze,Ye,V=k(()=>{"use strict";H();Je={prompt:["text","systemPrompt","context","responseConstraint","saveChatSession","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"},Ye={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});var he={};N(he,{detectLanguage:()=>wt,getPromptOptions:()=>ve,getProofreadOptions:()=>fe,getRewriteOptions:()=>me,getSummarizeOptions:()=>be,getTranslateOptions:()=>ye,getWriteOptions:()=>pe,prompt:()=>Tt,proofread:()=>bt,rewrite:()=>ft,sendChatMessage:()=>Ot,sendFeedbackMessage:()=>Rt,summarize:()=>yt,translate:()=>M,write:()=>mt});import{getWpSuite as nt}from"@smart-cloud/wpsuite-core";function C(){return(de?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function F(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(a=>r===a.toLowerCase())}function d(e,t,r,a){try{r?.onStatus?.({feature:e,context:t,...a})}catch{}}function I(){return de?.plugins?.aiKit?.settings?.sharedContext??void 0}function L(e){return e?.context??"admin"}function S(e,t=at){let r=new AbortController,a=e?.signal,n=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,i=typeof n=="number"?n:t,o,s=!1,u=()=>{if(r.signal.aborted)return;let l=typeof a?.reason<"u"?a?.reason:void 0;r.abort(l??new DOMException("Aborted","AbortError"))};return a&&(a.aborted?u():a.addEventListener("abort",u)),i&&i>0&&(o=setTimeout(()=>{r.signal.aborted||(s=!0,r.abort(new $(i)))},i)),{signal:r.signal,timedOut:()=>s,dispose:()=>{o&&(clearTimeout(o),o=void 0),a&&a.removeEventListener("abort",u)}}}function G(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function ot(e,t,r,a){let n=G(e),i=await we(e.images,r,t,a);return{text:e.messages.filter(o=>o.role==="user").map(o=>o.content).join(`
|
|
1
|
+
var Oe=Object.defineProperty;var A=(e,t)=>()=>(e&&(t=e(e=0)),t);var N=(e,t)=>{for(var r in t)Oe(e,r,{get:t[r],enumerable:!0})};function O(){return globalThis.WpSuite?.plugins?.aiKit}async function Z(e=8e3){let t=O();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((r,a)=>{let n=()=>o(r),i=()=>o(()=>a(new Error("AiKit failed"))),o=l=>{window.removeEventListener("wpsuite:ai-kit:ready",n),window.removeEventListener("wpsuite:ai-kit:error",i),s&&clearTimeout(s),l()};window.addEventListener("wpsuite:ai-kit:ready",n,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",i,{once:!0});let s=e?window.setTimeout(()=>o(()=>a(new Error("AiKit timeout"))),e):0})}}async function Re(e=1e4){await Z(e);let r=O()?.features?.store;if(!r)throw new Error("AiKit store is not available");return r}var _=A(()=>{"use strict"});import{getConfig as Be}from"@smart-cloud/wpsuite-core";import{createReduxStore as Ke,dispatch as Ee,register as Fe,select as Ie,subscribe as Me}from"@wordpress/data";import{I18n as Y}from"aws-amplify/utils";var q,ee,De,Ue,ze,We,Ne,_e,D,te,qe,U=A(()=>{"use strict";_();typeof WpSuite<"u"?q=WpSuite.siteSettings:q={};ee=e=>{let t=e&&typeof e=="object"?e:{},r={};return typeof t.mode=="string"&&(r.mode=t.mode),typeof t.backendTransport=="string"&&(r.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(r.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(r.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(r.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(r.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(r.chatbot=t.chatbot),r},De=async()=>{let e=O();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+q.lastUpdate).then(r=>r.ok?r.text():null).then(r=>r?JSON.parse(r):null).catch(()=>null)),t??null},Ue=async()=>{let e=ee(await Be("aiKit")),t=await De();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},ze={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?Y.setLanguage(""):Y.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}}},We={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},Ne={},_e=e=>Ee(e),D=e=>Ie(e),te=async()=>{let e=await Ue(),t=Ke("wpsuite/ai-kit",{reducer(r=e,a){switch(a.type){case"SET_LANGUAGE":return{...r,language:a.language};case"SET_DIRECTION":return{...r,direction:a.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...r,showChatbotPreview:a.showChatbotPreview}}return r},actions:ze,selectors:We,resolvers:Ne});return Fe(t),t},qe=(e,t,r)=>{let a;function n(){let o=D(e).getState(),s=t(o);if(s!==a){let l=a;a=s,r(a,l)}}let i=Me(n,e);return n(),i}});var w,re=A(()=>{"use strict";w="smartcloud-ai-kit"});import{jsx as C,jsxs as ne}from"react/jsx-runtime";var Xt,Jt,ae=A(()=>{"use strict";Xt=e=>ne("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[C("path",{d:"M19 27H33"}),C("path",{d:"M19 33H33"}),C("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),C("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),C("path",{d:"M16 10V40H36V22"}),C("path",{d:"M16 10H22"}),C("path",{d:"M22 10V23H36"}),C("path",{d:"M22 10L36 22"})]}),Jt=e=>ne("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[C("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),C("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),C("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),C("path",{d:"M16 24H32"})]})});var P,H=A(()=>{"use strict";P=class extends Error{constructor(r,a,n){super(r);this.decision=a;this.status=n;this.name="AiBackendError"}}});var ce={};N(ce,{MIN_CHROME_VERSION:()=>se,checkOnDeviceAvailability:()=>le,decideCapability:()=>W,resolveBackend:()=>B});import{getWpSuite as He}from"@smart-cloud/wpsuite-core";async function oe(){let t=await je?.plugins?.aiKit?.features.store;return D(t).getConfig()??{}}function ie(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 Ve(e){if(e.mode)return e.mode;let{transport:t}=ie(e);return t?"backend-fallback":"local-only"}async function B(){let e=await oe(),{transport:t,backendApiName:r,backendBaseUrl:a}=ie(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 ue(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function z(e,t){return e?.find(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 Ge(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?ue(t[1]):void 0}function Xe(){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(),a=z(r,"Microsoft Edge")??z(r,"Microsoft Edge WebView2"),n=z(r,"Google Chrome")??z(r,"Chromium"),i=!!a||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),o=/\bOPR\//i.test(t),s=/\bVivaldi\//i.test(t),l=/\bSamsungBrowser\//i.test(t),u=/\bFirefox\//i.test(t),c=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),m=Xe()||/\bBrave\//i.test(t);if(i||o||s||l||u||c||m)return{allowed:!1,reason:i?"edge":m?"brave":u?"firefox":c?"safari":o?"opera":s?"vivaldi":l?"samsung":"unsupported-browser"};let g=ue(n)??Ge(t),f=se[e];return f?g?g<f?{allowed:!1,reason:`chrome-too-old-${g}-lt-${f}`,chromeMajor:g}:{allowed:!0,reason:"ok",chromeMajor:g}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:g}}async function le(e,t){try{let r=await Je(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 i=await Translator.availability({...n,sourceLanguage:n.sourceLanguage==="auto"?"en":n.sourceLanguage,targetLanguage:n.sourceLanguage==="auto"||n.sourceLanguage===n.targetLanguage?"hu":n.targetLanguage});return{available:i!=="unavailable",status:i,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 W(e,t,r){let a=await oe(),n=r||Ve(a),i=await B(),o=await le(e,t),s=o.available,l=i.available,u={feature:e,mode:n,onDeviceAvailable:s,onDeviceStatus:o.status,onDeviceReason:o.reason,backendAvailable:l,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason};return n==="local-only"?s?{...u,source:"on-device",reason:`local-only: on-device available (${o.reason??o.status})`}:{...u,source:"none",reason:`local-only: on-device unavailable (${o.reason??o.status})`}:n==="backend-only"?l?{...u,source:"backend",reason:`backend-only: backend available (${i.reason??"n/a"})`}:{...u,source:"none",reason:`backend-only: backend unavailable (${i.reason??"n/a"})`}:s?{...u,source:"on-device",reason:`backend-fallback: using on-device (${o.reason??o.status})`}:l?{...u,source:"backend",reason:`backend-fallback: using backend (${i.reason??"n/a"}; on-device: ${o.reason??o.status})`}:{...u,source:"none",reason:`No on-device AI or backend available (on-device: ${o.reason??o.status}; backend: ${i.reason??"n/a"})`}}var je,se,j=A(()=>{"use strict";U();je=He();se={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138}});var fe={};N(fe,{dispatchBackend:()=>E,withRecaptchaHeaders:()=>K});import{getRecaptcha as Qe}from"@smart-cloud/wpsuite-core";function Ze(){return globalThis.WpSuite?.plugins?.aiKit?.settings??{}}function Ye(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function et(e){let t=e?.reCaptchaChatTtlSeconds,r=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,r)*1e3}function tt(e,t){let r=et(t);if(r<=0)return!1;let a=de.get(e);return a?Date.now()-a<r:!1}function V(e,t){let r=Ye(t);r&&de.set(e,r)}function ge(e,t,r){if(e!=="frontend"||t!=="prompt"||!me(r)||r.saveChatSession!==!0)return;let a=r.sessionId;return typeof a=="string"&&a.trim()?a.trim():void 0}function pe(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let r=Object.keys(e).find(n=>n.toLowerCase()===t.toLowerCase());if(!r)return;let a=e[r];return typeof a=="string"&&a?a:void 0}async function rt(e,t){if(e!=="frontend")return;let r=Ze();if(!r?.reCaptchaSiteKey||t?.cacheKey&&tt(t.cacheKey,r))return;let{execute:a}=await Qe(r?.useRecaptchaEnterprise||!1);if(typeof a=="function")try{let i=await a(r.reCaptchaSiteKey,{action:"generate"});return typeof i=="string"&&i?i:void 0}catch{return}}async function K(e,t,r){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let a=await rt(e,r);return a?{...t,"X-Recaptcha-Token":a}:t}function R(e,t){try{e?.onStatus?.(t)}catch{}}function me(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function at(e,t){if(!me(t))return t;let r=nt[e];if(!r)return t;let a={};for(let n of r)n in t&&(a[n]=t[n]);return a}function st(e,t){return(e==="admin"?ot:it)[t]}async function E(e,t,r,a,n={}){let i=st(t,r),o=at(r,a);if(!i)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 ut(e.backendBaseUrl,i,o,n,e,r,t)}if(!e.backendApiName)throw new P("backendTransport=gatey but backendApiName is missing.",e);return lt(e.backendApiName,i,o,n,e,r,t)}async function ut(e,t,r,a,n,i,o){let s=`${e.replace(/\/+$/,"")}${t}`,l={"content-type":"application/json",...a.headers??{}},u=ge(o,i,r),c=await K(o,l,{cacheKey:u}),m=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([p,h])=>[p,String(h)])).toString():"";R(a,{feature:i,context:o,step:"backend:request",source:"backend"}),R(a,{feature:i,context:o,step:"backend:waiting",source:"backend"});let g=await fetch(s+m,{method:"POST",headers:c,body:JSON.stringify(r??{}),signal:a.signal,credentials:"omit"});if(R(a,{feature:i,context:o,step:"backend:response",source:"backend"}),!g.ok){let p=`HTTP ${g.status}`;try{let h=await g.text();h&&(p=`${p}: ${h.substring(0,400)}`)}catch{}throw new P(`Fetch backend call failed: ${p}`,n,g.status)}let f=g.headers.get("content-type")||"",b=pe(g.headers,"x-recaptcha-verified-at");if(f.includes("application/json")){let p=await g.json(),h=(p&&typeof p.sessionId=="string"&&p.sessionId.trim()?p.sessionId.trim():void 0)??u;return b&&h&&V(h,b),p}return b&&u&&V(u,b),await g.text()}async function lt(e,t,r,a,n,i,o){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 u=ge(o,i,r),c=await K(o,{...a.headers??{}},{cacheKey:u});R(a,{feature:i,context:o,step:"backend:request",source:"backend"}),R(a,{feature:i,context:o,step:"backend:waiting",source:"backend"});let m=l.cognito.post({apiName:e,path:t,options:{body:r,headers:c,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response,f=pe(g.headers,"x-recaptcha-verified-at"),b=await g.body.json(),p=b?.sessionId??u;return f&&typeof p=="string"&&p.trim()&&V(p.trim(),f),R(a,{feature:i,context:o,step:"backend:response",source:"backend"}),b}var de,nt,ot,it,$=A(()=>{"use strict";H();de=new Map;nt={prompt:["text","systemPrompt","context","responseConstraint","saveChatSession","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"]};ot={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},it={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={};N(xe,{detectLanguage:()=>xt,getPromptOptions:()=>Pe,getProofreadOptions:()=>he,getRewriteOptions:()=>ve,getSummarizeOptions:()=>Ce,getTranslateOptions:()=>Ae,getWriteOptions:()=>we,prompt:()=>It,proofread:()=>kt,rewrite:()=>At,sendChatMessage:()=>Mt,sendFeedbackMessage:()=>Dt,summarize:()=>Pt,translate:()=>M,write:()=>Ct});import{getWpSuite as ct}from"@smart-cloud/wpsuite-core";function k(){return(be?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function F(e){let t=["en","ja","es"],r=e.toLowerCase();return t.some(a=>r===a.toLowerCase())}function d(e,t,r,a){try{r?.onStatus?.({feature:e,context:t,...a})}catch{}}function I(){return be?.plugins?.aiKit?.settings?.sharedContext??void 0}function L(e){return e?.context??"admin"}function S(e,t=dt){let r=new AbortController,a=e?.signal,n=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,i=typeof n=="number"?n:t,o,s=!1,l=()=>{if(r.signal.aborted)return;let u=typeof a?.reason<"u"?a?.reason:void 0;r.abort(u??new DOMException("Aborted","AbortError"))};return a&&(a.aborted?l():a.addEventListener("abort",l)),i&&i>0&&(o=setTimeout(()=>{r.signal.aborted||(s=!0,r.abort(new G(i)))},i)),{signal:r.signal,timedOut:()=>s,dispose:()=>{o&&(clearTimeout(o),o=void 0),a&&a.removeEventListener("abort",l)}}}function X(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function gt(e,t,r,a){let n=X(e),i=await ke(e.images,r,t,a);return{text:e.messages.filter(o=>o.role==="user").map(o=>o.content).join(`
|
|
2
2
|
`),systemPrompt:e.messages.filter(o=>o.role==="system").map(o=>o.content).join(`
|
|
3
|
-
`),images:i?.images,imageUrls:i?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...n}}async function it(e,t,r){let a=G(e),n=await we(e.images,t,"frontend",r);return{sessionId:e.sessionId,text:e.message,images:n?.images,imageUrls:n?.imageUrls,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...a}}async function st(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function ut(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 lt(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 ct(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function dt(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function gt(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function pt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function T(e,t,r,a,n,i,o,s){d(a,e,s,{step:"decide",message:"Deciding capability",silent:r});let u=await W(a,n,t);if(d(a,e,s,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:r}),u.source==="on-device")try{let l=await i();return d(a,e,s,{step:"done",source:"on-device",silent:r}),l}catch(l){console.error(`Error in on-device ${a}:`,l),d(a,e,s,{step:"error",source:"on-device",message:l.message,silent:r}),s?.signal?.throwIfAborted()}if(u.mode!=="local-only"&&u.backendAvailable){d(a,e,s,{step:"backend:request",source:"backend",silent:r});let l=typeof o=="function"?await o(u):o,c=await K(u,e,a,l,s);return d(a,e,s,{step:"done",source:"backend",silent:r}),c}throw new Error(`No capability for "${a}" (${e}). Reason: ${u.reason}`)}function vt(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],a=t?r.map(i=>({type:"image",value:i})):[],n;if(typeof e.messages=="string")n=t?[{role:"user",content:[{type:"text",value:e.messages},...a]}]:e.messages;else{let i=e.messages.filter(o=>o.role!=="system").map(o=>({role:o.role==="assistant"?"assistant":"user",content:o.content}));if(t){let o=-1;for(let s=i.length-1;s>=0;s--)if(i[s].role==="user"){o=s;break}if(o===-1)i.push({role:"user",content:[{type:"text",value:""},...a]});else{let s=String(i[o].content??"");i[o]={...i[o],content:[{type:"text",value:s},...a]}}}n=i}return n}function At(e){return typeof Blob<"u"&&e instanceof Blob}function kt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Ct(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function Pt(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 xt(e){let t=await Pt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Lt(e,t,r,a,n,i){let o=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",s={...i?.headers??{}},u=await E(t,s);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let m=new URLSearchParams({fileName:r,contentType:a,contentLength:String(n)}).toString(),w=`${e.backendBaseUrl.replace(/\/+$/,"")}${o}?${m}`,v=await fetch(w,{method:"GET",headers:u,signal:i?.signal,credentials:"omit"});if(!v.ok){let J=await v.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${v.status}${J?": "+J.substring(0,200):""}`)}let A=await v.json();if(!A?.uploadUrl||!A?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:A.uploadUrl,imageKey:A.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let l=globalThis.WpSuite?.plugins?.gatey,c={fileName:r,contentType:a,contentLength:n};if(l?.cognito?.get){let m=l.cognito.get({apiName:e.backendApiName,path:o,options:{queryParams:Object.keys(c).reduce((v,A)=>(v[A]=String(c[A]),v),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});i?.signal?.addEventListener?.("abort",()=>{m.cancel()});let w=await m.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(!l?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let g=l.cognito.post({apiName:e.backendApiName,path:o,options:{body:c,headers:u,retryStrategy:{strategy:"no-retry"}}});i?.signal?.addEventListener?.("abort",()=>{g.cancel()});let p=await g.response.then(m=>m.body.json());if(!p?.uploadUrl||!p?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:p.uploadUrl,imageKey:p.imageKey}}async function St(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 i=await n.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${n.status}${i?": "+i.substring(0,200):""}`)}}async function we(e,t,r,a){if(!e||e.length===0)return;let n=[];for(let l of e){if(!At(l))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");n.push(l)}let i=n.reduce((l,c)=>l+(c.size||0),0);if(Math.ceil(i*1.37+2048*n.length)<=ht){d("prompt",r,a,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let l=[];for(let c of n)l.push({format:Ct(c.type),data:await xt(c)});return{images:l}}d("prompt",r,a,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let l=0;l<n.length;l++){let c=n[l],g=c.type||"application/octet-stream",p=c.name||`image_${l}.${kt(g)}`;d("prompt",r,a,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:m,imageKey:w}=await Lt(t,r,p,g,c.size||0,a);d("prompt",r,a,{step:"backend:waiting",source:"backend",message:"Uploading"}),await St(m,c,g,a),u.push(w)}return{imageUrls:u}}var de,at,ge,$,pe,mt,me,ft,fe,bt,be,yt,wt,ye,M,ht,ve,Tt,Ot,Rt,Ae=k(()=>{"use strict";V();j();Ce();de=nt();at=45e3,ge=5e3,$=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};pe=e=>{let t=e.outputLanguage?e.outputLanguage:C(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},mt=async(e,t)=>{let r=L(t),a=e.sharedContext??I(),n=e.outputLanguage?e.outputLanguage:C(),i=n,o=!1;F(n)||(o=!0,n="en");let s=pe({...e,outputLanguage:n});return T(r,t?.modeOverride,!1,"writer",s,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=S(t);try{let l=await Writer.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",g=>{let p=g.loaded;d("writer",r,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}});d("writer",r,t,{step:"on-device:ready",source:"on-device"});try{d("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let c=await l.write(e.prompt,{context:e.context,signal:u.signal});return o?{result:(await M({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:u.signal})).result}:{result:c}}finally{try{l.destroy()}catch(c){console.error("Error destroying writer:",c)}}}finally{u.dispose()}},ut({...e,sharedContext:a,outputLanguage:i}),t)},me=e=>{let t=e.outputLanguage?e.outputLanguage:C(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},ft=async(e,t)=>{let r=L(t),a=e.sharedContext??I(),n=e.outputLanguage?e.outputLanguage:C(),i=n,o=!1;F(n)||(o=!0,n="en");let s=me({...e,outputLanguage:n});return T(r,t?.modeOverride,!1,"rewriter",s,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=S(t);try{let l=await Rewriter.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",g=>{let p=g.loaded;d("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}});d("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let c=await l.rewrite(e.text,{context:e.context,signal:u.signal});return o?{result:(await M({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:u.signal})).result}:{result:c}}finally{try{l.destroy()}catch(c){console.error("Error destroying rewriter:",c)}}}finally{u.dispose()}},lt({...e,sharedContext:a,outputLanguage:i}),t)},fe=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),bt=async(e,t)=>{let r=L(t),a=await fe();return T(r,t?.modeOverride,!1,"proofreader",a,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let n=S(t);try{let i=await Proofreader.create({...a,monitor(o){o.addEventListener("downloadprogress",s=>{let u=s.loaded;d("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}});d("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await i.proofread(e.text,{signal:n.signal})}}finally{try{i.destroy()}catch(o){console.error("Error destroying proofreader:",o)}}}finally{n.dispose()}},pt(e),t)},be=e=>{let t=e.outputLanguage?e.outputLanguage:C(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},yt=async(e,t)=>{let r=L(t),a=e.sharedContext??I(),n=e.outputLanguage?e.outputLanguage:C(),i=n,o=!1;F(n)||(o=!0,n="en");let s=await be({...e,outputLanguage:n});return T(r,t?.modeOverride,!1,"summarizer",s,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=S(t);try{let l=await Summarizer.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",g=>{let p=g.loaded;d("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:p,loaded:p})})}});d("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let c=await l.summarize(e.text,{context:e.context,signal:u.signal});return o?{result:(await M({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:u.signal})).result}:{result:c}}finally{try{l.destroy()}catch(c){console.error("Error destroying summarizer:",c)}}}finally{u.dispose()}},ct({...e,sharedContext:a,outputLanguage:i}),t)},wt=async(e,t)=>{let r=L(t);return T(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let a=S(t,ge);try{let n=await LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",o=>{let s=o.loaded;d("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:s,loaded:s,silent:t?.silent})})}});d("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await n.detect(e.text,{signal:a.signal})).filter(o=>ke.find(s=>s.value===o.detectedLanguage))}}}finally{try{n.destroy()}catch(i){console.error("Error destroying language detector:",i)}}}finally{a.dispose()}},gt(e.text,t),t)},ye=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??C()??"en"};return Promise.resolve(t)},M=async(e,t)=>{let r=L(t),a=await ye({...e});return T(r,t?.modeOverride,t?.silent,"translator",a,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let n=S(t,ge);try{let i=await Translator.create({...a,monitor(o){o.addEventListener("downloadprogress",s=>{let u=s.loaded;d("translator",r,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}});d("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let o=[],s=()=>{if(typeof n.signal.throwIfAborted=="function")n.signal.throwIfAborted();else if(n.signal.aborted)throw n.signal.reason??new DOMException("Aborted","AbortError")};for(let l of e.text.split(`
|
|
4
|
-
`))s(),o.push(i.translate(
|
|
5
|
-
`)}}finally{try{i.destroy()}catch(o){console.error("Error destroying translator:",o)}}}finally{n.dispose()}},
|
|
3
|
+
`),images:i?.images,imageUrls:i?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...n}}async function pt(e,t,r){let a=X(e),n=await ke(e.images,t,"frontend",r);return{sessionId:e.sessionId,text:e.message,images:n?.images,imageUrls:n?.imageUrls,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...a}}async function mt(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function ft(e){let t=X(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function bt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function yt(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 wt(e,t,r){return{text:e,sourceLanguage:t,targetLanguage:r}}function vt(e,t){let r=t;return{text:e,maxCandidates:typeof r?.maxCandidates=="number"?r.maxCandidates:void 0}}function ht(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function T(e,t,r,a,n,i,o,s){d(a,e,s,{step:"decide",message:"Deciding capability",silent:r});let l=await W(a,n,t);if(d(a,e,s,{step:"decide",source:l.source,message:`Using ${l.source}`,silent:r}),l.source==="on-device")try{let u=await i();return d(a,e,s,{step:"done",source:"on-device",silent:r}),u}catch(u){console.error(`Error in on-device ${a}:`,u),d(a,e,s,{step:"error",source:"on-device",message:u.message,silent:r}),s?.signal?.throwIfAborted()}if(l.mode!=="local-only"&&l.backendAvailable){d(a,e,s,{step:"backend:request",source:"backend",silent:r});let u=typeof o=="function"?await o(l):o,c=await E(l,e,a,u,s);return d(a,e,s,{step:"done",source:"backend",silent:r}),c}throw new Error(`No capability for "${a}" (${e}). Reason: ${l.reason}`)}function Lt(e){let t=Array.isArray(e.images)&&e.images.length>0,r=e.images??[],a=t?r.map(i=>({type:"image",value:i})):[],n;if(typeof e.messages=="string")n=t?[{role:"user",content:[{type:"text",value:e.messages},...a]}]:e.messages;else{let i=e.messages.filter(o=>o.role!=="system").map(o=>({role:o.role==="assistant"?"assistant":"user",content:o.content}));if(t){let o=-1;for(let s=i.length-1;s>=0;s--)if(i[s].role==="user"){o=s;break}if(o===-1)i.push({role:"user",content:[{type:"text",value:""},...a]});else{let s=String(i[o].content??"");i[o]={...i[o],content:[{type:"text",value:s},...a]}}}n=i}return n}function Tt(e){return typeof Blob<"u"&&e instanceof Blob}function Ot(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Rt(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}async function Bt(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 Kt(e){let t=await Bt(e),r=t.indexOf(",");return r>=0?t.substring(r+1):t}async function Et(e,t,r,a,n,i){let o=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",s={...i?.headers??{}},l=await K(t,s);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("backendBaseUrl missing for fetch transport");let f=new URLSearchParams({fileName:r,contentType:a,contentLength:String(n)}).toString(),b=`${e.backendBaseUrl.replace(/\/+$/,"")}${o}?${f}`,p=await fetch(b,{method:"GET",headers:l,signal:i?.signal,credentials:"omit"});if(!p.ok){let Q=await p.text().catch(()=>"");throw new Error(`generate-upload-url failed (fetch): HTTP ${p.status}${Q?": "+Q.substring(0,200):""}`)}let h=await p.json();if(!h?.uploadUrl||!h?.imageKey)throw new Error("generate-upload-url response missing uploadUrl/imageKey");return{uploadUrl:h.uploadUrl,imageKey:h.imageKey}}if(!e.backendApiName)throw new Error("backendApiName missing for gatey transport");let u=globalThis.WpSuite?.plugins?.gatey,c={fileName:r,contentType:a,contentLength:n};if(u?.cognito?.get){let f=u.cognito.get({apiName:e.backendApiName,path:o,options:{queryParams:Object.keys(c).reduce((p,h)=>(p[h]=String(c[h]),p),{}),headers:l,retryStrategy:{strategy:"no-retry"}}});i?.signal?.addEventListener?.("abort",()=>{f.cancel()});let b=await f.response.then(p=>p.body.json());if(!b?.uploadUrl||!b?.imageKey)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/imageKey");return{uploadUrl:b.uploadUrl,imageKey:b.imageKey}}if(!u?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let m=u.cognito.post({apiName:e.backendApiName,path:o,options:{body:c,headers:l,retryStrategy:{strategy:"no-retry"}}});i?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response.then(f=>f.body.json());if(!g?.uploadUrl||!g?.imageKey)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/imageKey");return{uploadUrl:g.uploadUrl,imageKey:g.imageKey}}async function Ft(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 i=await n.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${n.status}${i?": "+i.substring(0,200):""}`)}}async function ke(e,t,r,a){if(!e||e.length===0)return;let n=[];for(let u of e){if(!Tt(u))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");n.push(u)}let i=n.reduce((u,c)=>u+(c.size||0),0);if(Math.ceil(i*1.37+2048*n.length)<=St){d("prompt",r,a,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let u=[];for(let c of n)u.push({format:Rt(c.type),data:await Kt(c)});return{images:u}}d("prompt",r,a,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let l=[];for(let u=0;u<n.length;u++){let c=n[u],m=c.type||"application/octet-stream",g=c.name||`image_${u}.${Ot(m)}`;d("prompt",r,a,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:f,imageKey:b}=await Et(t,r,g,m,c.size||0,a);d("prompt",r,a,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Ft(f,c,m,a),l.push(b)}return{imageUrls:l}}var be,dt,ye,G,we,Ct,ve,At,he,kt,Ce,Pt,xt,Ae,M,St,Pe,It,Mt,Dt,Le=A(()=>{"use strict";$();j();Te();be=ct();dt=45e3,ye=5e3,G=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};we=e=>{let t=e.outputLanguage?e.outputLanguage:k(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Ct=async(e,t)=>{let r=L(t),a=e.sharedContext??I(),n=e.outputLanguage?e.outputLanguage:k(),i=n,o=!1;F(n)||(o=!0,n="en");let s=we({...e,outputLanguage:n});return T(r,t?.modeOverride,!1,"writer",s,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let l=S(t);try{let u=await Writer.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",m=>{let g=m.loaded;d("writer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});d("writer",r,t,{step:"on-device:ready",source:"on-device"});try{d("writer",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let c=await u.write(e.prompt,{context:e.context,signal:l.signal});return o?{result:(await M({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:l.signal})).result}:{result:c}}finally{try{u.destroy()}catch(c){console.error("Error destroying writer:",c)}}}finally{l.dispose()}},ft({...e,sharedContext:a,outputLanguage:i}),t)},ve=e=>{let t=e.outputLanguage?e.outputLanguage:k(),r={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},At=async(e,t)=>{let r=L(t),a=e.sharedContext??I(),n=e.outputLanguage?e.outputLanguage:k(),i=n,o=!1;F(n)||(o=!0,n="en");let s=ve({...e,outputLanguage:n});return T(r,t?.modeOverride,!1,"rewriter",s,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",r,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let l=S(t);try{let u=await Rewriter.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",m=>{let g=m.loaded;d("rewriter",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});d("rewriter",r,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",r,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let c=await u.rewrite(e.text,{context:e.context,signal:l.signal});return o?{result:(await M({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:l.signal})).result}:{result:c}}finally{try{u.destroy()}catch(c){console.error("Error destroying rewriter:",c)}}}finally{l.dispose()}},bt({...e,sharedContext:a,outputLanguage:i}),t)},he=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),kt=async(e,t)=>{let r=L(t),a=await he();return T(r,t?.modeOverride,!1,"proofreader",a,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");d("proofreader",r,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let n=S(t);try{let i=await Proofreader.create({...a,monitor(o){o.addEventListener("downloadprogress",s=>{let l=s.loaded;d("proofreader",r,t,{step:"on-device:download",source:"on-device",progress:l,loaded:l})})}});d("proofreader",r,t,{step:"on-device:ready",source:"on-device"});try{return d("proofreader",r,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await i.proofread(e.text,{signal:n.signal})}}finally{try{i.destroy()}catch(o){console.error("Error destroying proofreader:",o)}}}finally{n.dispose()}},ht(e),t)},Ce=e=>{let t=e.outputLanguage?e.outputLanguage:k(),r={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(r)},Pt=async(e,t)=>{let r=L(t),a=e.sharedContext??I(),n=e.outputLanguage?e.outputLanguage:k(),i=n,o=!1;F(n)||(o=!0,n="en");let s=await Ce({...e,outputLanguage:n});return T(r,t?.modeOverride,!1,"summarizer",s,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");d("summarizer",r,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let l=S(t);try{let u=await Summarizer.create({...s,sharedContext:a,monitor(c){c.addEventListener("downloadprogress",m=>{let g=m.loaded;d("summarizer",r,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}});d("summarizer",r,t,{step:"on-device:ready",source:"on-device"});try{d("summarizer",r,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let c=await u.summarize(e.text,{context:e.context,signal:l.signal});return o?{result:(await M({text:c,sourceLanguage:n,targetLanguage:i},{context:r,signal:l.signal})).result}:{result:c}}finally{try{u.destroy()}catch(c){console.error("Error destroying summarizer:",c)}}}finally{l.dispose()}},yt({...e,sharedContext:a,outputLanguage:i}),t)},xt=async(e,t)=>{let r=L(t);return T(r,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");d("language-detector",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let a=S(t,ye);try{let n=await LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",o=>{let s=o.loaded;d("language-detector",r,t,{step:"on-device:download",source:"on-device",progress:s,loaded:s,silent:t?.silent})})}});d("language-detector",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return d("language-detector",r,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await n.detect(e.text,{signal:a.signal})).filter(o=>Se.find(s=>s.value===o.detectedLanguage))}}}finally{try{n.destroy()}catch(i){console.error("Error destroying language detector:",i)}}}finally{a.dispose()}},vt(e.text,t),t)},Ae=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??k()??"en"};return Promise.resolve(t)},M=async(e,t)=>{let r=L(t),a=await Ae({...e});return T(r,t?.modeOverride,t?.silent,"translator",a,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");d("translator",r,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let n=S(t,ye);try{let i=await Translator.create({...a,monitor(o){o.addEventListener("downloadprogress",s=>{let l=s.loaded;d("translator",r,t,{step:"on-device:download",source:"on-device",progress:l,loaded:l,silent:t?.silent})})}});d("translator",r,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{d("translator",r,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let o=[],s=()=>{if(typeof n.signal.throwIfAborted=="function")n.signal.throwIfAborted();else if(n.signal.aborted)throw n.signal.reason??new DOMException("Aborted","AbortError")};for(let u of e.text.split(`
|
|
4
|
+
`))s(),o.push(i.translate(u.trim()));return{result:(await Promise.all(o)).join(`
|
|
5
|
+
`)}}finally{try{i.destroy()}catch(o){console.error("Error destroying translator:",o)}}}finally{n.dispose()}},wt(e.text,e.sourceLanguage,e.targetLanguage),t)};St=4*1024*1024;Pe=async e=>{let t=e.outputLanguage?e.outputLanguage:k();return F(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},It=async(e,t)=>{let r=L(t),a=e.sharedContext??I(),n=e.outputLanguage?e.outputLanguage:k(),i=n,o=!1;F(n)||(o=!0,n="en");let s=await Pe({...e,outputLanguage:n}),l=await W("prompt",s,t?.modeOverride);return T(r,t?.modeOverride,!1,"prompt",s,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");d("prompt",r,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let u=[];if(typeof e.messages!="string"){for(let f of e.messages)f.role==="system"&&f.content.trim()&&u.push(f.content.trim());a&&a.trim()&&u.push("SHARED CONTEXT: "+a.trim())}let c=u.length>0?u.join(`
|
|
6
6
|
|
|
7
|
-
`):void 0,
|
|
7
|
+
`):void 0,m=c?[{role:"system",content:c}]:void 0,g=S(t);try{let f=await LanguageModel.create({...s,initialPrompts:m,monitor(b){b.addEventListener("downloadprogress",p=>{let h=p.loaded;d("prompt",r,t,{step:"on-device:download",source:"on-device",progress:h,loaded:h})})}});d("prompt",r,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",r,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let b=await f.prompt(Lt(e),{signal:g.signal,responseConstraint:e.responseConstraint});return o?{result:(await M({text:b,sourceLanguage:n,targetLanguage:i},{context:r,signal:g.signal})).result}:{result:b}}finally{try{f.destroy()}catch(b){console.error("Error destroying LanguageModel:",b)}}}finally{g.dispose()}},await gt({...e,sharedContext:a},r,l,t),t)},Mt=async(e,t)=>{let r="frontend",a=e.sharedContext??I(),n="prompt",i=await B(),o={feature:n,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:i.available,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason},s=await pt({sessionId:e.sessionId,message:e.message,images:e.images,sharedContext:a},o,t);d(n,r,t,{step:"backend:request",source:"backend"});let l=await E(o,r,n,s,t);return d(n,r,t,{step:"done",source:"backend"}),l},Dt=async(e,t)=>{let r="frontend",a="prompt",n=await B(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:n.available,backendTransport:n.transport,backendApiName:n.apiName,backendBaseUrl:n.baseUrl,backendReason:n.reason},o=await mt({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});d(a,r,t,{step:"backend:request",source:"backend"});let s=await E(i,r,a,o,t);return d(a,r,t,{step:"done",source:"backend"}),s}});import{attachDefaultPluginRuntime as Ut}from"@smart-cloud/wpsuite-core";import{__ as v}from"@wordpress/i18n";var Se,J,pr,mr,fr,zt,br,y,yr,wr,vr,hr,Cr,Ar,kr,Pr,xr,Lr,Sr,Tr,Or,Rr,Br,Kr,Te=A(()=>{_();U();re();U();ae();H();Se=[{label:v("Arabic",w),value:"ar"},{label:v("Chinese",w),value:"zh"},{label:v("Dutch",w),value:"nl"},{label:v("English",w),value:"en"},{label:v("French",w),value:"fr"},{label:v("German",w),value:"de"},{label:v("Hebrew",w),value:"he"},{label:v("Hindi",w),value:"hi"},{label:v("Hungarian",w),value:"hu"},{label:v("Indonesian",w),value:"id"},{label:v("Italian",w),value:"it"},{label:v("Japanese",w),value:"ja"},{label:v("Korean",w),value:"ko"},{label:v("Norwegian",w),value:"no"},{label:v("Polish",w),value:"pl"},{label:v("Portuguese",w),value:"pt"},{label:v("Russian",w),value:"ru"},{label:v("Spanish",w),value:"es"},{label:v("Swedish",w),value:"sv"},{label:v("Thai",w),value:"th"},{label:v("Turkish",w),value:"tr"},{label:v("Ukrainian",w),value:"uk"}],J=Promise.resolve().then(()=>(j(),ce)),pr=async()=>(await J).MIN_CHROME_VERSION,mr=async(...e)=>(await J).decideCapability(...e),fr=async(...e)=>(await J).checkOnDeviceAvailability(...e),zt=Promise.resolve().then(()=>($(),fe)),br=async(...e)=>(await zt).dispatchBackend(...e),y=Promise.resolve().then(()=>(Le(),xe)),yr=async(...e)=>(await y).getWriteOptions(...e),wr=async(...e)=>(await y).write(...e),vr=async(...e)=>(await y).getRewriteOptions(...e),hr=async(...e)=>(await y).rewrite(...e),Cr=async(...e)=>(await y).getProofreadOptions(...e),Ar=async(...e)=>(await y).proofread(...e),kr=async(...e)=>(await y).getSummarizeOptions(...e),Pr=async(...e)=>(await y).summarize(...e),xr=async(...e)=>(await y).getTranslateOptions(...e),Lr=async(...e)=>(await y).translate(...e),Sr=async(...e)=>(await y).detectLanguage(...e),Tr=async(...e)=>(await y).getPromptOptions(...e),Or=async(...e)=>(await y).prompt(...e),Rr=async(...e)=>(await y).sendChatMessage(...e),Br=async(...e)=>(await y).sendFeedbackMessage(...e),Kr=e=>{let t=globalThis.WpSuite,r=O();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");Ut(r),r.status=r.status??"initializing";let a=te();return r.features={store:a,renderFeature:async n=>await e({...n,store:await a}),write:async(...n)=>{let i=await y,o=n[1]||{};return n[1]={context:"frontend",...o},i.write(...n)},rewrite:async(...n)=>{let i=await y,o=n[1]||{};return n[1]={context:"frontend",...o},i.rewrite(...n)},proofread:async(...n)=>{let i=await y,o=n[1]||{};return n[1]={context:"frontend",...o},i.proofread(...n)},summarize:async(...n)=>{let i=await y,o=n[1]||{};return n[1]={context:"frontend",...o},i.summarize(...n)},translate:async(...n)=>{let i=await y,o=n[1]||{};return n[1]={context:"frontend",...o},i.translate(...n)},detectLanguage:async(...n)=>{let i=await y,o=n[1]||{};return n[1]={context:"frontend",...o},i.detectLanguage(...n)},prompt:async(...n)=>{let i=await y,o=n[1]||{};return n[1]={context:"frontend",...o},i.prompt(...n)},sendChatMessage:async(...n)=>(await y).sendChatMessage(...n),sendFeedbackMessage:async(...n)=>(await y).sendFeedbackMessage(...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}});Te();export{Jt as AiKitChatbotIcon,Xt as AiKitFeatureIcon,P as BackendError,Se as LANGUAGE_OPTIONS,w as TEXT_DOMAIN,fr as checkOnDeviceAvailability,mr as decideCapability,Sr as detectLanguage,br as dispatchBackend,O as getAiKitPlugin,pr as getMinChromeVersions,Tr as getPromptOptions,Cr as getProofreadOptions,vr as getRewriteOptions,Re as getStore,_e as getStoreDispatch,D as getStoreSelect,kr as getSummarizeOptions,xr as getTranslateOptions,yr as getWriteOptions,Kr as initializeAiKit,qe as observeStore,Or as prompt,Ar as proofread,hr as rewrite,ee as sanitizeAiKitConfig,Rr as sendChatMessage,Br as sendFeedbackMessage,Pr as summarize,Lr as translate,Z as waitForAiKitReady,wr as write};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smart-cloud/ai-kit-core",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.20",
|
|
4
4
|
"description": "AI Kit Core Package",
|
|
5
5
|
"author": "Smart Cloud Solutions Inc.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,18 +32,18 @@
|
|
|
32
32
|
"react": "^18.3.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@eslint/js": "^
|
|
36
|
-
"@types/dom-chromium-ai": "^0.0.
|
|
37
|
-
"@types/node": "^25.2.
|
|
38
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
39
|
-
"@typescript-eslint/parser": "^8.
|
|
35
|
+
"@eslint/js": "^10.0.1",
|
|
36
|
+
"@types/dom-chromium-ai": "^0.0.14",
|
|
37
|
+
"@types/node": "^25.2.3",
|
|
38
|
+
"@typescript-eslint/eslint-plugin": "^8.55.0",
|
|
39
|
+
"@typescript-eslint/parser": "^8.55.0",
|
|
40
40
|
"@wordpress/data": "^10.39.0",
|
|
41
41
|
"@wordpress/i18n": "^6.12.0",
|
|
42
|
-
"eslint": "^
|
|
42
|
+
"eslint": "^10.0.0",
|
|
43
43
|
"globals": "^17.3.0",
|
|
44
44
|
"react": "^18.3.1",
|
|
45
45
|
"tsup": "^8.5.1",
|
|
46
46
|
"typescript": "^5.9.3",
|
|
47
|
-
"typescript-eslint": "^8.
|
|
47
|
+
"typescript-eslint": "^8.55.0"
|
|
48
48
|
}
|
|
49
49
|
}
|