@smart-cloud/ai-kit-core 1.4.6 → 1.4.8
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/constants.d.ts +1 -0
- package/dist/icons.d.ts +3 -0
- package/dist/index.cjs +8 -8
- package/dist/index.d.ts +32 -605
- package/dist/index.js +4 -4
- package/dist/protected/backend.d.ts +17 -0
- package/dist/protected/capabilities.d.ts +25 -0
- package/dist/protected/chunking-utils.d.ts +22 -0
- package/dist/protected/features.d.ts +17 -0
- package/dist/public/backend.d.ts +3 -0
- package/dist/public/capabilities.d.ts +14 -0
- package/dist/public/features.d.ts +17 -0
- package/dist/runtime.d.ts +8 -0
- package/dist/store.d.ts +65 -0
- package/dist/{index.d.cts → types.d.ts} +61 -173
- package/package.json +19 -17
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
var Xe=Object.defineProperty;var P=(e,t)=>()=>(e&&(t=e(e=0)),t);var Z=(e,t)=>{for(var n in t)Xe(e,n,{get:t[n],enumerable:!0})};function T(){return globalThis.WpSuite?.plugins?.aiKit}async function le(e=8e3){let t=T();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let o=()=>s(n),a=()=>s(()=>r(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",o),window.removeEventListener("wpsuite:ai-kit:error",a),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",o,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",a,{once:!0});let i=e?window.setTimeout(()=>s(()=>r(new Error("AiKit timeout"))),e):0})}}async function Je(e=1e4){await le(e);let n=T()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var q=P(()=>{"use strict"});import{getConfig as ge,getWpSuite as Ze}from"@smart-cloud/wpsuite-core";import{createReduxStore as Ye,dispatch as pe,register as et,select as tt,subscribe as nt}from"@wordpress/data";import{I18n as de}from"aws-amplify/utils";var Y,ee,rt,at,ot,st,it,ut,H,ct,me,lt,j=P(()=>{"use strict";q();typeof WpSuite<"u"?Y=WpSuite.siteSettings:Y={};ee=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},rt=async()=>{let e=T();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+Y.lastUpdate).then(n=>n.ok?n.text():null).then(n=>n?JSON.parse(n):null).catch(()=>null)),t??null},at=async()=>{let e=ee(await ge("aiKit")),t=await rt();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},ot={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?de.setLanguage(""):de.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},st={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},it={},ut=e=>{let t=pe(e);return delete t.setConfig,t},H=e=>tt(e),ct=async e=>{Ze().siteSettings.lastUpdate=Date.now();let t=await ge("aiKit"),n=ee(t);pe(e).setConfig(n)},me=async()=>{let e=await at(),t=Ye("smartcloud/ai-kit",{reducer(n=e,r){switch(r.type){case"SET_LANGUAGE":return{...n,language:r.language};case"SET_DIRECTION":return{...n,direction:r.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...n,showChatbotPreview:r.showChatbotPreview};case"SET_CONFIG":return{...n,config:r.config}}return n},actions:ot,selectors:st,resolvers:it});return et(t),t},lt=(e,t,n)=>{let r;function o(){let s=H(e).getState(),i=t(s);if(i!==r){let u=r;r=i,n(r,u)}}let a=nt(o,e);return o(),a}});var k,fe=P(()=>{"use strict";k="smartcloud-ai-kit"});import{jsx as v,jsxs as te}from"react/jsx-runtime";var xn,Sn,Ln,be=P(()=>{"use strict";xn=e=>te("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{d:"M19 27H33"}),v("path",{d:"M19 33H33"}),v("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),v("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),v("path",{d:"M16 10V40H36V22"}),v("path",{d:"M16 10H22"}),v("path",{d:"M22 10V23H36"}),v("path",{d:"M22 10L36 22"})]}),Sn=e=>te("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),v("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),v("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),v("path",{d:"M16 24H32"})]}),Ln=e=>te("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),v("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),v("path",{d:"M42 42l-12 -12"}),v("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),v("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var x,ne=P(()=>{"use strict";x=class extends Error{constructor(n,r,o){super(n);this.decision=r;this.status=o;this.name="AiBackendError"}}});var ve={};Z(ve,{MIN_CHROME_VERSION:()=>he,checkOnDeviceAvailability:()=>Ce,decideCapability:()=>$,isOnDeviceLanguageSupported:()=>R,resolveBackend:()=>M});import{getWpSuite as dt}from"@smart-cloud/wpsuite-core";async function ye(){let t=await gt?.plugins?.aiKit?.features.store;return H(t).getConfig()??{}}function we(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function pt(e){if(e.mode)return e.mode;let{transport:t}=we(e);return t?"backend-fallback":"local-only"}async function M(){let e=await ye(),{transport:t,backendApiName:n,backendBaseUrl:r}=we(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return r?{available:!0,transport:t,baseUrl:r,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!n)return{available:!1,reason:"backendApiName is missing"};let o=globalThis.WpSuite?.plugins?.gatey;return!o?.availability||await o.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:n,reason:"Gatey backend"}}function O(e){return typeof globalThis[e]<"u"}function ke(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function V(e,t){return e?.find(n=>n.brand===t)?.version}async function ft(){let e=navigator?.userAgentData;if(e){try{let n=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(n)&&n.length>0)return n}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function bt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?ke(t[1]):void 0}function yt(){return!!navigator?.brave}async function wt(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",n=await ft(),r=V(n,"Microsoft Edge")??V(n,"Microsoft Edge WebView2"),o=V(n,"Google Chrome")??V(n,"Chromium"),a=!!r||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),p=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=yt()||/\bBrave\//i.test(t);if(a||s||i||u||c||p||l)return{allowed:!1,reason:a?"edge":l?"brave":c?"firefox":p?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let m=ke(o)??bt(t),g=he[e];return g?m?m<g?{allowed:!1,reason:`chrome-too-old-${m}-lt-${g}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function Ce(e,t){try{let n=await wt(e),r=`browser-gate:${n.reason}${n.chromeMajor?` (chrome ${n.chromeMajor})`:""}`;if(!n.allowed)return{available:!1,status:"unavailable",reason:r};let o=a=>a==="unavailable"?mt.has(e)?"requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics":"check hardware requirements or see AI-Kit Diagnostics":r;switch(e){case"writer":{if(!O("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"rewriter":{if(!O("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"summarizer":{if(!O("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"proofreader":{if(!O("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"language-detector":{if(!O("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"translator":{if(!O("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:r};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:r,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let s=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:s!=="unavailable",status:s,reason:o(s)}}case"prompt":{if(!O("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}default:return{available:!1,status:"unknown-feature",reason:r}}}catch(n){return{available:!1,status:"error",reason:"exception in availability()",error:n}}}function R(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function $(e,t,n){let r=await ye(),o=n||pt(r),a=await M(),s=await Ce(e,t),i=s.available,u=a.available,c={feature:e,mode:o,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason};return o==="local-only"?i?{...c,source:"on-device",reason:`local-only, on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only, but on-device unavailable (${s.reason??s.status})`}:o==="backend-only"?u?{...c,source:"backend",reason:`backend-only, backend available (${a.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only, but backend unavailable (${a.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback, using backend (${a.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${a.reason??"n/a"})`}}var gt,he,mt,re=P(()=>{"use strict";j();gt=dt();he={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},mt=new Set(["writer","rewriter","proofreader","prompt"])});var Te={};Z(Te,{dispatchCustomBackend:()=>Et,dispatchFeatureBackend:()=>K,withRecaptchaHeaders:()=>z});import{getGateyPlugin as ht}from"@smart-cloud/gatey-core";import{getRecaptcha as kt,getWpSuite as Ct}from"@smart-cloud/wpsuite-core";function vt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function At(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function Pt(e,t){let n=At(t);if(n<=0)return!1;let r=Ae.get(e);return r?Date.now()-r<n:!1}function ae(e,t){let n=vt(t);n&&Ae.set(e,n)}function Pe(e,t){if(e!=="frontend"||!Se(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function xe(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let n=Object.keys(e).find(o=>o.toLowerCase()===t.toLowerCase());if(!n)return;let r=e[n];return typeof r=="string"&&r?r:void 0}async function xt(e,t){if(e!=="frontend")return;let n=Ct()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&Pt(t.cacheKey,T()?.settings||{}))return;let{execute:r}=await kt(n?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let a=await r(n.reCaptchaPublicKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function z(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await xt(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function F(e,t){try{e?.onStatus?.(t)}catch{}}function Se(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Lt(e,t){if(!Se(t))return t;let n=St[e];if(!n)return t;let r={};for(let o of n)o in t&&(r[o]=t[o]);return r}function Rt(e,t){return(e==="admin"?Tt:Ot)[t]}function Bt(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function K(e,t,n,r,o={}){let a=Rt(t,n);if(!a)throw new x(`No backend path configured for "${n}" (${t}).`,e);let s=Lt(n,r);return Le(e,t,n,a,"POST",s,o)}async function Et(e,t,n,r,o,a={}){let s=Bt(t,n);return Le(e,t,"prompt",s,r,o,a)}async function Le(e,t,n,r,o,a,s={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new x("backendTransport=fetch but backendBaseUrl is missing.",e);return It(e.backendBaseUrl,r,o,a,s,e,n,t)}if(!e.backendApiName)throw new x("backendTransport=gatey but backendApiName is missing.",e);return Mt(e.backendApiName,r,o,a,s,e,n,t)}async function It(e,t,n,r,o,a,s,i){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...o.headers??{}},p=s==="prompt"?Pe(i,r):void 0,l=await z(i,c,{cacheKey:p}),m=o.query&&Object.keys(o.query).length>0?"?"+new URLSearchParams(Object.entries(o.query).map(([b,h])=>[b,String(h)])).toString():"";F(o,{feature:s,context:i,step:"backend:request",source:"backend"}),F(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let g=await fetch(u+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:o.signal,credentials:"omit"});if(F(o,{feature:s,context:i,step:"backend:response",source:"backend"}),!g.ok){let b=`HTTP ${g.status}`;try{let h=await g.text();h&&(b=`${b}: ${h.substring(0,400)}`)}catch{}throw new x(`Fetch backend call failed: ${b}`,a,g.status)}let y=g.headers.get("content-type")||"",f=xe(g.headers,"x-recaptcha-verified-at");if(y.includes("application/json")){let b=await g.json(),h=(b&&typeof b.sessionId=="string"&&b.sessionId.trim()?b.sessionId.trim():void 0)??p;return f&&h&&ae(h,f),b}return f&&p&&ae(p,f),await g.text()}async function Mt(e,t,n,r,o,a,s,i){let u=ht(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new x(`Unsupported HTTP method "${n}" for Gatey backend.`,a)}if(!c)throw new x(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,a);let p=s==="prompt"?Pe(i,r):void 0,l=await z(i,{...o.headers??{}},{cacheKey:p});F(o,{feature:s,context:i,step:"backend:request",source:"backend"}),F(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let m=c({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response,y=xe(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??p;return y&&typeof b=="string"&&b.trim()&&ae(b.trim(),y),F(o,{feature:s,context:i,step:"backend:response",source:"backend"}),f}var Ae,St,Tt,Ot,oe=P(()=>{"use strict";q();ne();Ae=new Map;St={prompt:["text","audio","audioUrl","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature","userSelectedCategories","userSelectedSubcategories","userSelectedTags"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};Tt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Ot={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function Ft(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a==="."||a==="!"||a==="?")&&(s===" "||s===`
|
|
1
|
+
var Xe=Object.defineProperty;var P=(e,t)=>()=>(e&&(t=e(e=0)),t);var Z=(e,t)=>{for(var n in t)Xe(e,n,{get:t[n],enumerable:!0})};function T(){return globalThis.WpSuite?.plugins?.aiKit}async function le(e=8e3){let t=T();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let o=()=>s(n),a=()=>s(()=>r(new Error("AiKit failed"))),s=u=>{window.removeEventListener("wpsuite:ai-kit:ready",o),window.removeEventListener("wpsuite:ai-kit:error",a),i&&clearTimeout(i),u()};window.addEventListener("wpsuite:ai-kit:ready",o,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",a,{once:!0});let i=e?window.setTimeout(()=>s(()=>r(new Error("AiKit timeout"))),e):0})}}async function Je(e=1e4){await le(e);let n=T()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var q=P(()=>{"use strict"});import{getConfig as ge,getWpSuite as Ze}from"@smart-cloud/wpsuite-core";import{createReduxStore as Ye,dispatch as pe,register as et,select as tt,subscribe as nt}from"@wordpress/data";import{I18n as de}from"aws-amplify/utils";var Y,ee,rt,at,ot,st,it,ut,H,ct,me,lt,j=P(()=>{"use strict";q();typeof WpSuite<"u"?Y=WpSuite.siteSettings:Y={};ee=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},rt=async()=>{let e=T();if(!e)throw new Error("AI-Kit plugin is not available");let t=null;return e.settings.customTranslationsUrl&&(t=await fetch(e.settings.customTranslationsUrl+(e.settings.customTranslationsUrl.includes("?")?"&":"?")+"t="+Y.lastUpdate).then(n=>n.ok?n.text():null).then(n=>n?JSON.parse(n):null).catch(()=>null)),t??null},at=async()=>{let e=ee(await ge("aiKit")),t=await rt();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},ot={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?de.setLanguage(""):de.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},st={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},it={},ut=e=>{let t=pe(e);return delete t.setConfig,t},H=e=>tt(e),ct=async e=>{Ze().siteSettings.lastUpdate=Date.now();let t=await ge("aiKit"),n=ee(t);pe(e).setConfig(n)},me=async()=>{let e=await at(),t=Ye("smartcloud/ai-kit",{reducer(n=e,r){switch(r.type){case"SET_LANGUAGE":return{...n,language:r.language};case"SET_DIRECTION":return{...n,direction:r.direction};case"SET_SHOW_CHATBOT_PREVIEW":return{...n,showChatbotPreview:r.showChatbotPreview};case"SET_CONFIG":return{...n,config:r.config}}return n},actions:ot,selectors:st,resolvers:it});return et(t),t},lt=(e,t,n)=>{let r;function o(){let s=H(e).getState(),i=t(s);if(i!==r){let u=r;r=i,n(r,u)}}let a=nt(o,e);return o(),a}});var k,fe=P(()=>{"use strict";k="smartcloud-ai-kit"});import{jsx as v,jsxs as te}from"react/jsx-runtime";var xn,Sn,Ln,be=P(()=>{"use strict";xn=e=>te("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{d:"M19 27H33"}),v("path",{d:"M19 33H33"}),v("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),v("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),v("path",{d:"M16 10V40H36V22"}),v("path",{d:"M16 10H22"}),v("path",{d:"M22 10V23H36"}),v("path",{d:"M22 10L36 22"})]}),Sn=e=>te("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{d:"M42 38L34 30H10C7.79086 30 6 28.2091 6 26V8C6 5.79086 7.79086 4 10 4H38C40.2091 4 42 5.79086 42 8V38Z"}),v("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),v("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),v("path",{d:"M16 24H32"})]}),Ln=e=>te("svg",{xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 48 48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[v("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),v("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),v("path",{d:"M42 42l-12 -12"}),v("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),v("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var x,ne=P(()=>{"use strict";x=class extends Error{constructor(n,r,o){super(n);this.decision=r;this.status=o;this.name="AiBackendError"}}});var ve={};Z(ve,{MIN_CHROME_VERSION:()=>he,checkOnDeviceAvailability:()=>Ce,decideCapability:()=>$,isOnDeviceLanguageSupported:()=>R,resolveBackend:()=>M});import{getWpSuite as dt}from"@smart-cloud/wpsuite-core";import{getGateyPlugin as gt}from"@smart-cloud/gatey-core";async function ye(){let t=await dt()?.plugins?.aiKit?.features.store;return H(t).getConfig()??{}}function we(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function pt(e){if(e.mode)return e.mode;let{transport:t}=we(e);return t?"backend-fallback":"local-only"}async function M(){let e=await ye(),{transport:t,backendApiName:n,backendBaseUrl:r}=we(e);if(!t)return{available:!1,reason:"No backend configured"};if(t==="fetch")return r?{available:!0,transport:t,baseUrl:r,reason:"Custom fetch backend"}:{available:!1,reason:"backendBaseUrl is missing"};if(!n)return{available:!1,reason:"backendApiName is missing"};let o=gt();return!o?.availability||await o.availability()!=="available"?{available:!1,reason:"Gatey is not available"}:{available:!0,transport:t,apiName:n,reason:"Gatey backend"}}function O(e){return typeof globalThis[e]<"u"}function ke(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function V(e,t){return e?.find(n=>n.brand===t)?.version}async function ft(){let e=navigator?.userAgentData;if(e){try{let n=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(n)&&n.length>0)return n}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function bt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?ke(t[1]):void 0}function yt(){return!!navigator?.brave}async function wt(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",n=await ft(),r=V(n,"Microsoft Edge")??V(n,"Microsoft Edge WebView2"),o=V(n,"Google Chrome")??V(n,"Chromium"),a=!!r||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),s=/\bOPR\//i.test(t),i=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),p=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=yt()||/\bBrave\//i.test(t);if(a||s||i||u||c||p||l)return{allowed:!1,reason:a?"edge":l?"brave":c?"firefox":p?"safari":s?"opera":i?"vivaldi":u?"samsung":"unsupported-browser"};let m=ke(o)??bt(t),g=he[e];return g?m?m<g?{allowed:!1,reason:`chrome-too-old-${m}-lt-${g}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function Ce(e,t){try{let n=await wt(e),r=`browser-gate:${n.reason}${n.chromeMajor?` (chrome ${n.chromeMajor})`:""}`;if(!n.allowed)return{available:!1,status:"unavailable",reason:r};let o=a=>a==="unavailable"?mt.has(e)?"requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics":"check hardware requirements or see AI-Kit Diagnostics":r;switch(e){case"writer":{if(!O("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Writer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"rewriter":{if(!O("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Rewriter.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"summarizer":{if(!O("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Summarizer.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"proofreader":{if(!O("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await Proofreader.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"language-detector":{if(!O("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageDetector.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}case"translator":{if(!O("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:r};let a=t;if(!a?.sourceLanguage||!a?.targetLanguage)return{available:!1,status:"error",reason:r,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let s=await Translator.availability({...a,sourceLanguage:a.sourceLanguage==="auto"?"en":a.sourceLanguage,targetLanguage:a.sourceLanguage==="auto"||a.sourceLanguage===a.targetLanguage?"hu":a.targetLanguage});return{available:s!=="unavailable",status:s,reason:o(s)}}case"prompt":{if(!O("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:r};let a=await LanguageModel.availability(t);return{available:a!=="unavailable",status:a,reason:o(a)}}default:return{available:!1,status:"unknown-feature",reason:r}}}catch(n){return{available:!1,status:"error",reason:"exception in availability()",error:n}}}function R(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function $(e,t,n){let r=await ye(),o=n||pt(r),a=await M(),s=await Ce(e,t),i=s.available,u=a.available,c={feature:e,mode:o,onDeviceAvailable:i,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason};return o==="local-only"?i?{...c,source:"on-device",reason:`local-only, on-device available (${s.reason??s.status})`}:{...c,source:"none",reason:`local-only, but on-device unavailable (${s.reason??s.status})`}:o==="backend-only"?u?{...c,source:"backend",reason:`backend-only, backend available (${a.reason??"n/a"})`}:{...c,source:"none",reason:`backend-only, but backend unavailable (${a.reason??"n/a"})`}:i?{...c,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:u?{...c,source:"backend",reason:`backend-fallback, using backend (${a.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...c,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${a.reason??"n/a"})`}}var he,mt,re=P(()=>{"use strict";j();he={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},mt=new Set(["writer","rewriter","proofreader","prompt"])});var Te={};Z(Te,{dispatchCustomBackend:()=>Et,dispatchFeatureBackend:()=>K,withRecaptchaHeaders:()=>z});import{getGateyPlugin as ht}from"@smart-cloud/gatey-core";import{getRecaptcha as kt,getWpSuite as Ct}from"@smart-cloud/wpsuite-core";function vt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function At(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function Pt(e,t){let n=At(t);if(n<=0)return!1;let r=Ae.get(e);return r?Date.now()-r<n:!1}function ae(e,t){let n=vt(t);n&&Ae.set(e,n)}function Pe(e,t){if(e!=="frontend"||!Se(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function xe(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let n=Object.keys(e).find(o=>o.toLowerCase()===t.toLowerCase());if(!n)return;let r=e[n];return typeof r=="string"&&r?r:void 0}async function xt(e,t){if(e!=="frontend")return;let n=Ct()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&Pt(t.cacheKey,T()?.settings||{}))return;let{execute:r}=await kt(n?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let a=await r(n.reCaptchaPublicKey,{action:"generate"});return typeof a=="string"&&a?a:void 0}catch{return}}async function z(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await xt(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function F(e,t){try{e?.onStatus?.(t)}catch{}}function Se(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Lt(e,t){if(!Se(t))return t;let n=St[e];if(!n)return t;let r={};for(let o of n)o in t&&(r[o]=t[o]);return r}function Rt(e,t){return(e==="admin"?Tt:Ot)[t]}function Bt(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function K(e,t,n,r,o={}){let a=Rt(t,n);if(!a)throw new x(`No backend path configured for "${n}" (${t}).`,e);let s=Lt(n,r);return Le(e,t,n,a,"POST",s,o)}async function Et(e,t,n,r,o,a={}){let s=Bt(t,n);return Le(e,t,"prompt",s,r,o,a)}async function Le(e,t,n,r,o,a,s={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new x("backendTransport=fetch but backendBaseUrl is missing.",e);return It(e.backendBaseUrl,r,o,a,s,e,n,t)}if(!e.backendApiName)throw new x("backendTransport=gatey but backendApiName is missing.",e);return Mt(e.backendApiName,r,o,a,s,e,n,t)}async function It(e,t,n,r,o,a,s,i){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...o.headers??{}},p=s==="prompt"?Pe(i,r):void 0,l=await z(i,c,{cacheKey:p}),m=o.query&&Object.keys(o.query).length>0?"?"+new URLSearchParams(Object.entries(o.query).map(([b,h])=>[b,String(h)])).toString():"";F(o,{feature:s,context:i,step:"backend:request",source:"backend"}),F(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let g=await fetch(u+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:o.signal,credentials:"omit"});if(F(o,{feature:s,context:i,step:"backend:response",source:"backend"}),!g.ok){let b=`HTTP ${g.status}`;try{let h=await g.text();h&&(b=`${b}: ${h.substring(0,400)}`)}catch{}throw new x(`Fetch backend call failed: ${b}`,a,g.status)}let y=g.headers.get("content-type")||"",f=xe(g.headers,"x-recaptcha-verified-at");if(y.includes("application/json")){let b=await g.json(),h=(b&&typeof b.sessionId=="string"&&b.sessionId.trim()?b.sessionId.trim():void 0)??p;return f&&h&&ae(h,f),b}return f&&p&&ae(p,f),await g.text()}async function Mt(e,t,n,r,o,a,s,i){let u=ht(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new x(`Unsupported HTTP method "${n}" for Gatey backend.`,a)}if(!c)throw new x(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,a);let p=s==="prompt"?Pe(i,r):void 0,l=await z(i,{...o.headers??{}},{cacheKey:p});F(o,{feature:s,context:i,step:"backend:request",source:"backend"}),F(o,{feature:s,context:i,step:"backend:waiting",source:"backend"});let m=c({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response,y=xe(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??p;return y&&typeof b=="string"&&b.trim()&&ae(b.trim(),y),F(o,{feature:s,context:i,step:"backend:response",source:"backend"}),f}var Ae,St,Tt,Ot,oe=P(()=>{"use strict";q();ne();Ae=new Map;St={prompt:["text","audio","audioUrl","systemPrompt","context","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","enableRerank","topK","temperature","userSelectedCategories","userSelectedSubcategories","userSelectedTags"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};Tt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Ot={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function Ft(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a==="."||a==="!"||a==="?")&&(s===" "||s===`
|
|
2
2
|
`||s==="\r"||o===e.length-1)){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function Kt(e,t,n){let r=-1;for(let o=n-1;o>=t;o--){let a=e[o],s=o+1<e.length?e[o+1]:"";if((a===","||a===";"||a===":")&&(s===" "||s===`
|
|
3
3
|
`||s==="\r")){r=o+1;break}}return r>t+(n-t)*.5?r:-1}function G(e,t){let n=[],r=0;for(;r<e.length;){let o=Math.min(r+t,e.length);if(o<e.length){let s=e.lastIndexOf(`
|
|
4
4
|
|
|
5
|
-
`,o);if(s>r+t*.5)o=s+2;else{let i=Ft(e,r,o);if(i>0)o=i;else{let u=Kt(e,r,o);if(u>0)o=u;else{let c=e.lastIndexOf(" ",o);c>r+t*.5&&(o=c+1)}}}}let a=e.substring(r,o).trim();a.length>0&&n.push({text:a,start:r,end:o}),r=o}return n}var Oe=P(()=>{"use strict"});var Ve={};Z(Ve,{detectLanguage:()=>tn,getPromptOptions:()=>je,getProofreadOptions:()=>Ke,getRewriteOptions:()=>Fe,getSummarizeOptions:()=>De,getTranslateOptions:()=>Ue,getWriteOptions:()=>Me,prompt:()=>ln,proofread:()=>Yt,rewrite:()=>Zt,sendChatMessage:()=>dn,sendFeedbackMessage:()=>pn,sendSearchMessage:()=>gn,summarize:()=>en,translate:()=>_,write:()=>Jt});import{
|
|
5
|
+
`,o);if(s>r+t*.5)o=s+2;else{let i=Ft(e,r,o);if(i>0)o=i;else{let u=Kt(e,r,o);if(u>0)o=u;else{let c=e.lastIndexOf(" ",o);c>r+t*.5&&(o=c+1)}}}}let a=e.substring(r,o).trim();a.length>0&&n.push({text:a,start:r,end:o}),r=o}return n}var Oe=P(()=>{"use strict"});var Ve={};Z(Ve,{detectLanguage:()=>tn,getPromptOptions:()=>je,getProofreadOptions:()=>Ke,getRewriteOptions:()=>Fe,getSummarizeOptions:()=>De,getTranslateOptions:()=>Ue,getWriteOptions:()=>Me,prompt:()=>ln,proofread:()=>Yt,rewrite:()=>Zt,sendChatMessage:()=>dn,sendFeedbackMessage:()=>pn,sendSearchMessage:()=>gn,summarize:()=>en,translate:()=>_,write:()=>Jt});import{getGateyPlugin as Dt}from"@smart-cloud/gatey-core";import{getWpSuite as Ee}from"@smart-cloud/wpsuite-core";import{I18n as ce}from"aws-amplify/utils";function ie(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(ie).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+ie(t[r])).join(",")+"}"}function Ut(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function zt(e,t){return`${e}:${Ut(ie(t))}`}function se(){let e=new Map;for(let n of A.values()){let r=e.get(n.kind)??[];r.push(n),e.set(n.kind,r)}for(let[n,r]of e.entries())if(!(r.length<=Be)){r.sort((o,a)=>o.refCount-a.refCount||o.lastUsed-a.lastUsed||o.key.localeCompare(a.key));for(let o of r){if(e.get(n).length<=Be)break;if(!(o.refCount>0)){try{o.destroy()}catch{}A.delete(o.key),e.set(n,(e.get(n)??[]).filter(a=>a.key!==o.key))}}}if(A.size<=Re)return;let t=Array.from(A.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(A.size<=Re)break;if(!(n.refCount>0)){try{n.destroy()}catch{}A.delete(n.key)}}}async function B(e,t,n,r){let o=zt(e,t),a=A.get(o);if(a)return a.refCount++,a.lastUsed=Date.now(),A.delete(o),A.set(o,a),{model:a.model,fromCache:!0,release:()=>{let u=A.get(o);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),se())}};let s=W.get(o);if(s)return s;let i=(async()=>{let u=await n(),c={kind:e,key:o,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>r(u)};return A.set(o,c),W.delete(o),se(),{model:u,fromCache:!1,release:()=>{let p=A.get(o);p&&(p.refCount=Math.max(0,p.refCount-1),p.lastUsed=Date.now(),se())}}})().catch(u=>{throw W.delete(o),u});return W.set(o,i),i}function S(){return(Ee()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function d(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function D(){return Ee()?.plugins?.aiKit?.settings?.sharedContext??void 0}function L(e){return e?.context??"admin"}function E(e,t=Wt){let n=new AbortController,r=e?.signal,o=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,a=typeof o=="number"?o:t,s,i=!1,u=()=>{if(n.signal.aborted)return;let c=typeof r?.reason<"u"?r?.reason:void 0;n.abort(c??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?u():r.addEventListener("abort",u)),a&&a>0&&(s=setTimeout(()=>{n.signal.aborted||(i=!0,n.abort(new ue(a)))},a)),{signal:n.signal,timedOut:()=>i,dispose:()=>{s&&(clearTimeout(s),s=void 0),r&&r.removeEventListener("abort",u)}}}function Q(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function _t(e,t,n,r){let o=Q(e),a=await qe(e.images,n,t,r);return{text:e.messages.filter(s=>s.role==="user").map(s=>s.content).join(`
|
|
6
6
|
`),systemPrompt:e.messages.filter(s=>s.role==="system").map(s=>s.content).join(`
|
|
7
|
-
`),images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...o}}async function Nt(e,t,n,r){let o=Q(e),a=await qe(e.images,n,t,r),s=await He(e.audio,n,t,r);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,audio:s?.audio,audioUrl:s?.audioUrl,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...o}}async function qt(e,t,n,r){let o=Q(e),a=await He(e.audio,n,t,r);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:a?.audio,audioUrl:a?.audioUrl,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...o}}async function Ht(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function jt(e){let t=Q(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function Vt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function $t(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Gt(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Qt(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Xt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function I(e,t,n,r,o,a,s,i){d(r,e,i,{step:"decide",message:"Deciding capability",silent:n});let u=await $(r,o,t);d(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:n});let c=!1;if(u.source==="on-device")try{let l=await a();return d(r,e,i,{step:"done",source:"on-device",silent:n}),l}catch(l){console.error(`Error in on-device ${r}:`,l),d(r,e,i,{step:"error",source:"on-device",message:l.message,silent:n}),i?.signal?.throwIfAborted(),l instanceof DOMException&&l.name==="QuotaExceededError"&&(c=!0)}if(u.mode!=="local-only"&&u.backendAvailable){d(r,e,i,{step:"backend:request",source:"backend",silent:n});let l=typeof s=="function"?await s(u):s,m=await K(u,e,r,l,i);return d(r,e,i,{step:"done",source:"backend",silent:n}),m}let p=c?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":u.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${p}`)}function nn(e){let t=Array.isArray(e.images)&&e.images.length>0,n=e.images??[],r=t?n.map(a=>({type:"image",value:a})):[],o;if(typeof e.messages=="string")o=t?[{role:"user",content:[{type:"text",value:e.messages},...r]}]:e.messages;else{let a=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=a.length-1;i>=0;i--)if(a[i].role==="user"){s=i;break}if(s===-1)a.push({role:"user",content:[{type:"text",value:""},...r]});else{let i=String(a[s].content??"");a[s]={...a[s],content:[{type:"text",value:i},...r]}}}o=a}return o}function rn(e){return typeof Blob<"u"&&e instanceof Blob}function an(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function on(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function sn(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":(t.includes("webm"),"webm")}function un(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":"webm"}async function cn(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function We(e){let t=await cn(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function _e(e,t,n,r,o,a){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...a?.headers??{}},u=await z(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("Backend base URL not available for signed URL request");let g=new URLSearchParams({fileName:n,contentType:r,contentLength:String(o)}).toString(),y=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${g}`,f=await fetch(y,{method:"GET",headers:u,signal:a?.signal,credentials:"omit"});if(!f.ok){let h=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${h?": "+h.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=globalThis.WpSuite?.plugins?.gatey,p={fileName:n,contentType:r,contentLength:o};if(c?.cognito?.get){let g=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(p).reduce((f,b)=>(f[b]=String(p[b]),f),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(f=>f.body.json());if(!y?.uploadUrl||!y?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:y.uploadUrl,key:y.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:p,headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(g=>g.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function Ne(e,t,n,r){let o=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.signal});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${o.status}${a?": "+a.substring(0,200):""}`)}}async function qe(e,t,n,r){if(!e||e.length===0)return;let o=[];for(let c of e){if(!rn(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");o.push(c)}let a=o.reduce((c,p)=>c+(p.size||0),0);if(Math.ceil(a*1.37+2048*o.length)<=ze){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let p of o)c.push({format:on(p.type),data:await We(p)});return{images:c}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<o.length;c++){let p=o[c],l=p.type||"application/octet-stream",m=p.name||`image_${c}.${an(l)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await _e(t,n,m,l,p.size||0,r);d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Ne(g,p,l,r),u.push(y)}return{imageUrls:u}}async function He(e,t,n,r){if(!e)return;let o=e.size||0;if(Math.ceil(o*1.37+2048)<=ze){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=un(e.type||"audio/webm"),m=await We(e);return{audio:{format:l,data:m}}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||`audio.${sn(i)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:p}=await _e(t,n,u,i,e.size||0,r);return d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await Ne(c,e,i,r),{audioUrl:p}}var Re,Be,A,W,Ee,Wt,Ie,ue,Me,Jt,Fe,Zt,Ke,Yt,De,en,tn,Ue,_,ze,je,ln,dn,gn,pn,$e=P(()=>{"use strict";oe();re();Qe();Oe();Re=8,Be=2,A=new Map,W=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of A.values())try{e.destroy()}catch{}A.clear(),W.clear()});Ee=Dt();Wt=45e3,Ie=5e3,ue=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Me=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Jt=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=Me({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=E(t);try{let{model:c,release:p}=await B("writer",{core:i,sharedContext:r},()=>Writer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("writer",n,t,{step:"on-device:ready",source:"on-device"});try{d("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await c.measureInputUsage(e.prompt,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=G(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let U=ce.get("Writing part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));d("writer",n,t,{step:"on-device:run",source:"on-device",message:U});let J=await c.write(f[h].text,{context:e.context,signal:u.signal});b.push(J)}l=b.join(`
|
|
7
|
+
`),images:a?.images,imageUrls:a?.imageUrls,context:e.sharedContext,saveChatSession:!1,responseConstraint:e.responseConstraint,...o}}async function Nt(e,t,n,r){let o=Q(e),a=await qe(e.images,n,t,r),s=await He(e.audio,n,t,r);return{sessionId:e.sessionId,text:e.message,images:a?.images,imageUrls:a?.imageUrls,audio:s?.audio,audioUrl:s?.audioUrl,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!0,...o}}async function qt(e,t,n,r){let o=Q(e),a=await He(e.audio,n,t,r);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:a?.audio,audioUrl:a?.audioUrl,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...o}}async function Ht(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function jt(e){let t=Q(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function Vt(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function $t(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Gt(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Qt(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Xt(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function I(e,t,n,r,o,a,s,i){d(r,e,i,{step:"decide",message:"Deciding capability",silent:n});let u=await $(r,o,t);d(r,e,i,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:n});let c=!1;if(u.source==="on-device")try{let l=await a();return d(r,e,i,{step:"done",source:"on-device",silent:n}),l}catch(l){console.error(`Error in on-device ${r}:`,l),d(r,e,i,{step:"error",source:"on-device",message:l.message,silent:n}),i?.signal?.throwIfAborted(),l instanceof DOMException&&l.name==="QuotaExceededError"&&(c=!0)}if(u.mode!=="local-only"&&u.backendAvailable){d(r,e,i,{step:"backend:request",source:"backend",silent:n});let l=typeof s=="function"?await s(u):s,m=await K(u,e,r,l,i);return d(r,e,i,{step:"done",source:"backend",silent:n}),m}let p=c?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":u.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${p}`)}function nn(e){let t=Array.isArray(e.images)&&e.images.length>0,n=e.images??[],r=t?n.map(a=>({type:"image",value:a})):[],o;if(typeof e.messages=="string")o=t?[{role:"user",content:[{type:"text",value:e.messages},...r]}]:e.messages;else{let a=e.messages.filter(s=>s.role!=="system").map(s=>({role:s.role==="assistant"?"assistant":"user",content:s.content}));if(t){let s=-1;for(let i=a.length-1;i>=0;i--)if(a[i].role==="user"){s=i;break}if(s===-1)a.push({role:"user",content:[{type:"text",value:""},...r]});else{let i=String(a[s].content??"");a[s]={...a[s],content:[{type:"text",value:i},...r]}}}o=a}return o}function rn(e){return typeof Blob<"u"&&e instanceof Blob}function an(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function on(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function sn(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":(t.includes("webm"),"webm")}function un(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":"webm"}async function cn(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function We(e){let t=await cn(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function _e(e,t,n,r,o,a){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");let s=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",i={...a?.headers??{}},u=await z(t,i);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("Backend base URL not available for signed URL request");let g=new URLSearchParams({fileName:n,contentType:r,contentLength:String(o)}).toString(),y=`${e.backendBaseUrl.replace(/\/+$/,"")}${s}?${g}`,f=await fetch(y,{method:"GET",headers:u,signal:a?.signal,credentials:"omit"});if(!f.ok){let h=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${h?": "+h.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=Dt(),p={fileName:n,contentType:r,contentLength:o};if(c?.cognito?.get){let g=c.cognito.get({apiName:e.backendApiName,path:s,options:{queryParams:Object.keys(p).reduce((f,b)=>(f[b]=String(p[b]),f),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(f=>f.body.json());if(!y?.uploadUrl||!y?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:y.uploadUrl,key:y.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:s,options:{body:p,headers:u,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(g=>g.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function Ne(e,t,n,r){let o=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.signal});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${o.status}${a?": "+a.substring(0,200):""}`)}}async function qe(e,t,n,r){if(!e||e.length===0)return;let o=[];for(let c of e){if(!rn(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");o.push(c)}let a=o.reduce((c,p)=>c+(p.size||0),0);if(Math.ceil(a*1.37+2048*o.length)<=ze){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let p of o)c.push({format:on(p.type),data:await We(p)});return{images:c}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<o.length;c++){let p=o[c],l=p.type||"application/octet-stream",m=p.name||`image_${c}.${an(l)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await _e(t,n,m,l,p.size||0,r);d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await Ne(g,p,l,r),u.push(y)}return{imageUrls:u}}async function He(e,t,n,r){if(!e)return;let o=e.size||0;if(Math.ceil(o*1.37+2048)<=ze){d("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=un(e.type||"audio/webm"),m=await We(e);return{audio:{format:l,data:m}}}d("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let i=e.type||"audio/webm",u=e.name||`audio.${sn(i)}`;d("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:p}=await _e(t,n,u,i,e.size||0,r);return d("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await Ne(c,e,i,r),{audioUrl:p}}var Re,Be,A,W,Wt,Ie,ue,Me,Jt,Fe,Zt,Ke,Yt,De,en,tn,Ue,_,ze,je,ln,dn,gn,pn,$e=P(()=>{"use strict";oe();re();Qe();Oe();Re=8,Be=2,A=new Map,W=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of A.values())try{e.destroy()}catch{}A.clear(),W.clear()});Wt=45e3,Ie=5e3,ue=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Me=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Jt=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=Me({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"writer",i,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");d("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=E(t);try{let{model:c,release:p}=await B("writer",{core:i,sharedContext:r},()=>Writer.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("writer",n,t,{step:"on-device:ready",source:"on-device"});try{d("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await c.measureInputUsage(e.prompt,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=G(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let U=ce.get("Writing part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));d("writer",n,t,{step:"on-device:run",source:"on-device",message:U});let J=await c.write(f[h].text,{context:e.context,signal:u.signal});b.push(J)}l=b.join(`
|
|
8
8
|
|
|
9
9
|
`)}}return m||(l=await c.write(e.prompt,{context:e.context,signal:u.signal})),s?{result:(await _({text:l,sourceLanguage:o,targetLanguage:a},{context:n,signal:u.signal})).result}:{result:l}}finally{try{p()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},jt({...e,sharedContext:r,outputLanguage:a}),t)},Fe=e=>{let t=e.outputLanguage?e.outputLanguage:S(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Zt=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=Fe({...e,outputLanguage:o});return I(n,t?.modeOverride,!1,"rewriter",i,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");d("rewriter",n,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=E(t);try{let{model:c,release:p}=await B("rewriter",{core:i,sharedContext:r},()=>Rewriter.create({...i,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;d("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());d("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l="",m=!1,g=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=G(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let U=ce.get("Rewriting part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));d("rewriter",n,t,{step:"on-device:run",source:"on-device",message:U});let J=await c.rewrite(f[h].text,{context:e.context,signal:u.signal});b.push(J)}l=b.join(`
|
|
10
10
|
|
|
@@ -14,4 +14,4 @@ var Xe=Object.defineProperty;var P=(e,t)=>()=>(e&&(t=e(e=0)),t);var Z=(e,t)=>{fo
|
|
|
14
14
|
`))u(),i.push(a.translate(p.trim()));return{result:(await Promise.all(i)).join(`
|
|
15
15
|
`)}}finally{try{s()}catch(i){console.error("Error destroying translator:",i)}}}finally{o.dispose()}},Gt(e.text,e.sourceLanguage,e.targetLanguage),t)};ze=4*1024*1024;je=async e=>{let t=e.outputLanguage?e.outputLanguage:S();return R(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},ln=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o=e.outputLanguage?e.outputLanguage:S(),a=o,s=!1;R(o)||(s=!0,o="en");let i=await je({...e,outputLanguage:o}),u=await $("prompt",i,t?.modeOverride);return I(n,t?.modeOverride,!1,"prompt",i,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");d("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&c.push(g.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let p=c.length>0?c.join(`
|
|
16
16
|
|
|
17
|
-
`):void 0,l=p?[{role:"system",content:p}]:void 0,m=E(t);try{let{model:g,release:y}=await B("language-model",{core:i,initialPrompts:l},()=>LanguageModel.create({...i,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let h=b.loaded;d("prompt",n,t,{step:"on-device:download",source:"on-device",progress:h,loaded:h})})}}),f=>f.destroy());d("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(nn(e),{signal:m.signal,responseConstraint:e.responseConstraint});return s?{result:(await _({text:f,sourceLanguage:o,targetLanguage:a},{context:n,signal:m.signal})).result}:{result:f}}finally{try{y()}catch(f){console.error("Error destroying LanguageModel:",f)}}}finally{m.dispose()}},await _t({...e,sharedContext:r},n,u,t),t)},dn=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o="prompt",a=await M(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await Nt({sessionId:e.sessionId,message:e.message,audio:e.audio,images:e.images,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await K(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},gn=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o="prompt",a=await M(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await qt({...e,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await K(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},pn=async(e,t)=>{let n="frontend",r="prompt",o=await M(),a={feature:r,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await Ht({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});d(r,n,t,{step:"backend:request",source:"backend"});let i=await K(a,n,r,s,t);return d(r,n,t,{step:"done",source:"backend"}),i}});import{attachDefaultPluginRuntime as mn}from"@smart-cloud/wpsuite-core";import{__ as C}from"@wordpress/i18n";var Ge,N,
|
|
17
|
+
`):void 0,l=p?[{role:"system",content:p}]:void 0,m=E(t);try{let{model:g,release:y}=await B("language-model",{core:i,initialPrompts:l},()=>LanguageModel.create({...i,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let h=b.loaded;d("prompt",n,t,{step:"on-device:download",source:"on-device",progress:h,loaded:h})})}}),f=>f.destroy());d("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{d("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(nn(e),{signal:m.signal,responseConstraint:e.responseConstraint});return s?{result:(await _({text:f,sourceLanguage:o,targetLanguage:a},{context:n,signal:m.signal})).result}:{result:f}}finally{try{y()}catch(f){console.error("Error destroying LanguageModel:",f)}}}finally{m.dispose()}},await _t({...e,sharedContext:r},n,u,t),t)},dn=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o="prompt",a=await M(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await Nt({sessionId:e.sessionId,message:e.message,audio:e.audio,images:e.images,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await K(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},gn=async(e,t)=>{let n=L(t),r=e.sharedContext??D(),o="prompt",a=await M(),s={feature:o,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await qt({...e,sharedContext:r},n,s,t);d(o,n,t,{step:"backend:request",source:"backend"});let u=await K(s,n,o,i,t);return d(o,n,t,{step:"done",source:"backend"}),u},pn=async(e,t)=>{let n="frontend",r="prompt",o=await M(),a={feature:r,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await Ht({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});d(r,n,t,{step:"backend:request",source:"backend"});let i=await K(a,n,r,s,t);return d(r,n,t,{step:"done",source:"backend"}),i}});import{attachDefaultPluginRuntime as mn}from"@smart-cloud/wpsuite-core";import{__ as C}from"@wordpress/i18n";var Ge,N,Jn,Zn,Yn,er,tr,fn,nr,w,rr,ar,or,sr,ir,ur,cr,lr,dr,gr,pr,mr,fr,br,yr,wr,hr,Qe=P(()=>{q();j();fe();j();be();ne();Ge=[{label:C("Arabic",k),value:"ar"},{label:C("Chinese",k),value:"zh"},{label:C("Dutch",k),value:"nl"},{label:C("English",k),value:"en"},{label:C("French",k),value:"fr"},{label:C("German",k),value:"de"},{label:C("Hebrew",k),value:"he"},{label:C("Hindi",k),value:"hi"},{label:C("Hungarian",k),value:"hu"},{label:C("Indonesian",k),value:"id"},{label:C("Italian",k),value:"it"},{label:C("Japanese",k),value:"ja"},{label:C("Korean",k),value:"ko"},{label:C("Norwegian",k),value:"no"},{label:C("Polish",k),value:"pl"},{label:C("Portuguese",k),value:"pt"},{label:C("Russian",k),value:"ru"},{label:C("Spanish",k),value:"es"},{label:C("Swedish",k),value:"sv"},{label:C("Thai",k),value:"th"},{label:C("Turkish",k),value:"tr"},{label:C("Ukrainian",k),value:"uk"}],N=Promise.resolve().then(()=>(re(),ve)),Jn=async()=>(await N).MIN_CHROME_VERSION,Zn=async(...e)=>(await N).isOnDeviceLanguageSupported(...e),Yn=async(...e)=>(await N).decideCapability(...e),er=async(...e)=>(await N).checkOnDeviceAvailability(...e),tr=async(...e)=>(await N).resolveBackend(...e),fn=Promise.resolve().then(()=>(oe(),Te)),nr=async(...e)=>(await fn).dispatchCustomBackend(...e),w=Promise.resolve().then(()=>($e(),Ve)),rr=async(...e)=>(await w).getWriteOptions(...e),ar=async(...e)=>(await w).write(...e),or=async(...e)=>(await w).getRewriteOptions(...e),sr=async(...e)=>(await w).rewrite(...e),ir=async(...e)=>(await w).getProofreadOptions(...e),ur=async(...e)=>(await w).proofread(...e),cr=async(...e)=>(await w).getSummarizeOptions(...e),lr=async(...e)=>(await w).summarize(...e),dr=async(...e)=>(await w).getTranslateOptions(...e),gr=async(...e)=>(await w).translate(...e),pr=async(...e)=>(await w).detectLanguage(...e),mr=async(...e)=>(await w).getPromptOptions(...e),fr=async(...e)=>(await w).prompt(...e),br=async(...e)=>(await w).sendChatMessage(...e),yr=async(...e)=>(await w).sendFeedbackMessage(...e),wr=async(...e)=>(await w).sendSearchMessage(...e),hr=(e,t)=>{let n=globalThis.WpSuite,r=T();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");mn(r),r.status=r.status??"initializing";let o=me();return r.features={store:o,renderFeature:async a=>await e({...a,store:await o}),renderSearchComponent:async a=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...a,store:await o})},write:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.write(...a)},rewrite:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.rewrite(...a)},proofread:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.proofread(...a)},summarize:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.summarize(...a)},translate:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.translate(...a)},detectLanguage:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.detectLanguage(...a)},prompt:async(...a)=>{let s=await w,i=a[1]||{};return a[1]={context:"frontend",...i},s.prompt(...a)},sendChatMessage:async(...a)=>(await w).sendChatMessage(...a),sendFeedbackMessage:async(...a)=>(await w).sendFeedbackMessage(...a),sendSearchMessage:async(...a)=>(await w).sendSearchMessage(...a)},o.then(()=>{r.status="available",n?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(a=>{r.status="error",console.error("AiKit plugin failed to initialize:",a),n?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(a)})}),r}});Qe();export{Sn as AiKitChatbotIcon,Ln as AiKitDocSearchIcon,xn as AiKitFeatureIcon,x as BackendError,Ge as LANGUAGE_OPTIONS,k as TEXT_DOMAIN,er as checkOnDeviceAvailability,Yn as decideCapability,pr as detectLanguage,nr as dispatchBackend,T as getAiKitPlugin,Jn as getMinChromeVersions,mr as getPromptOptions,ir as getProofreadOptions,or as getRewriteOptions,Je as getStore,ut as getStoreDispatch,H as getStoreSelect,cr as getSummarizeOptions,dr as getTranslateOptions,rr as getWriteOptions,hr as initializeAiKit,Zn as isOnDeviceLanguageSupported,lt as observeStore,fr as prompt,ur as proofread,ct as reloadConfig,tr as resolveBackend,sr as rewrite,ee as sanitizeAiKitConfig,br as sendChatMessage,yr as sendFeedbackMessage,wr as sendSearchMessage,lr as summarize,gr as translate,le as waitForAiKitReady,ar as write};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { BackendCallOptions, BuiltInAiFeature, CapabilityDecision, ContextKind } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Adds X-Recaptcha-Token header for frontend calls when configured.
|
|
4
|
+
*/
|
|
5
|
+
export declare function withRecaptchaHeaders(context: ContextKind, headers: Record<string, string>, opts?: {
|
|
6
|
+
cacheKey?: string;
|
|
7
|
+
}): Promise<Record<string, string>>;
|
|
8
|
+
/**
|
|
9
|
+
* Dispatch feature backend call using an already computed decision.
|
|
10
|
+
* Callers should compute decision via decideCapability() once, then call this.
|
|
11
|
+
*/
|
|
12
|
+
export declare function dispatchFeatureBackend<TResponse>(decision: CapabilityDecision, context: ContextKind, feature: BuiltInAiFeature, requestBody: unknown, options?: BackendCallOptions): Promise<TResponse>;
|
|
13
|
+
/**
|
|
14
|
+
* Dispatch feature backend call using an already computed decision.
|
|
15
|
+
* Callers should compute decision via decideCapability() once, then call this.
|
|
16
|
+
*/
|
|
17
|
+
export declare function dispatchCustomBackend<TResponse>(decision: CapabilityDecision, context: ContextKind, customPath: string, method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", requestBody: unknown, options?: BackendCallOptions): Promise<TResponse>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AiKitLanguageCode, AiModePreference, AnyCreateCoreOptions, BackendTransport, BuiltInAiFeature, CapabilityDecision, DeviceAvailability } from "../types";
|
|
2
|
+
export declare function resolveBackend(): Promise<{
|
|
3
|
+
available: boolean;
|
|
4
|
+
transport?: BackendTransport;
|
|
5
|
+
apiName?: string;
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
reason?: string;
|
|
8
|
+
}>;
|
|
9
|
+
/**
|
|
10
|
+
* Browser gate for Chrome Built-in AI.
|
|
11
|
+
*
|
|
12
|
+
* Motivation:
|
|
13
|
+
* Some Chromium-derived browsers (Edge/Brave/etc.) may expose partial globals that look
|
|
14
|
+
* present but crash later on availability()/create(). We pre-filter to "real" Chrome/Chromium
|
|
15
|
+
* and enforce per-feature minimum Chrome major versions.
|
|
16
|
+
*
|
|
17
|
+
* Approach:
|
|
18
|
+
* - Prefer UA-CH (navigator.userAgentData) brands/fullVersionList when available.
|
|
19
|
+
* - Fall back to navigator.userAgent parsing.
|
|
20
|
+
* - Explicitly exclude Edge/Opera/Vivaldi/Samsung/Firefox/Safari/Brave.
|
|
21
|
+
*/
|
|
22
|
+
export declare const MIN_CHROME_VERSION: Partial<Record<BuiltInAiFeature, number>>;
|
|
23
|
+
export declare function checkOnDeviceAvailability(feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions): Promise<DeviceAvailability>;
|
|
24
|
+
export declare function isOnDeviceLanguageSupported(outputLanguage: AiKitLanguageCode): boolean;
|
|
25
|
+
export declare function decideCapability(feature: BuiltInAiFeature, availabilityOptions?: AnyCreateCoreOptions, modeOverride?: AiModePreference): Promise<CapabilityDecision>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text chunking utilities for handling large inputs in AI features
|
|
3
|
+
*
|
|
4
|
+
* Chunking is needed for:
|
|
5
|
+
* - On-device models with token quotas (~8000 tokens)
|
|
6
|
+
* - AWS Translate backend (10,000 character limit)
|
|
7
|
+
*/
|
|
8
|
+
export interface TextChunk {
|
|
9
|
+
text: string;
|
|
10
|
+
start: number;
|
|
11
|
+
end: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Split text into chunks at intelligent boundaries
|
|
15
|
+
*
|
|
16
|
+
* Priority order for splitting:
|
|
17
|
+
* 1. Paragraph breaks (\n\n)
|
|
18
|
+
* 2. Sentence endings (. ! ?)
|
|
19
|
+
* 3. Clause markers (, ; :)
|
|
20
|
+
* 4. Word boundaries (space)
|
|
21
|
+
*/
|
|
22
|
+
export declare function splitTextIntoChunks(text: string, maxCharsPerChunk: number): TextChunk[];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Features, PromptArgs, RewriteArgs, SummarizeArgs, TranslateArgs, WriteArgs } from "../types";
|
|
2
|
+
export declare const getWriteOptions: (args: Partial<WriteArgs>) => Promise<WriterCreateCoreOptions>;
|
|
3
|
+
export declare const write: Features["write"];
|
|
4
|
+
export declare const getRewriteOptions: (args: Partial<RewriteArgs>) => Promise<RewriterCreateCoreOptions>;
|
|
5
|
+
export declare const rewrite: Features["rewrite"];
|
|
6
|
+
export declare const getProofreadOptions: () => Promise<ProofreaderCreateCoreOptions>;
|
|
7
|
+
export declare const proofread: Features["proofread"];
|
|
8
|
+
export declare const getSummarizeOptions: (args: Partial<SummarizeArgs>) => Promise<SummarizerCreateCoreOptions>;
|
|
9
|
+
export declare const summarize: Features["summarize"];
|
|
10
|
+
export declare const detectLanguage: Features["detectLanguage"];
|
|
11
|
+
export declare const getTranslateOptions: (args: Partial<TranslateArgs>) => Promise<TranslatorCreateCoreOptions>;
|
|
12
|
+
export declare const translate: Features["translate"];
|
|
13
|
+
export declare const getPromptOptions: (args: Partial<PromptArgs>) => Promise<LanguageModelCreateCoreOptions>;
|
|
14
|
+
export declare const prompt: Features["prompt"];
|
|
15
|
+
export declare const sendChatMessage: Features["sendChatMessage"];
|
|
16
|
+
export declare const sendSearchMessage: Features["sendSearchMessage"];
|
|
17
|
+
export declare const sendFeedbackMessage: Features["sendFeedbackMessage"];
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { BackendCallOptions, BuiltInAiFeature, CapabilityDecision, ContextKind } from "../types";
|
|
2
|
+
export declare function dispatchFeatureBackend<TResponse>(_decision: CapabilityDecision, _context: ContextKind, _feature: BuiltInAiFeature, _requestBody: unknown, _options: BackendCallOptions): Promise<TResponse>;
|
|
3
|
+
export declare function dispatchCustomBackend<TResponse>(_decision: CapabilityDecision, _context: ContextKind, _customPath: string, _method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", _requestBody: unknown, _options: BackendCallOptions): Promise<TResponse>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AiKitLanguageCode, AiModePreference, AnyCreateCoreOptions, BackendTransport, BuiltInAiFeature, CapabilityDecision } from "../types";
|
|
2
|
+
export declare const isOnDeviceLanguageSupported: (_outputLanguage: AiKitLanguageCode) => boolean;
|
|
3
|
+
export declare const checkOnDeviceAvailability: (_feature: BuiltInAiFeature, _availabilityOptions?: never) => Promise<{
|
|
4
|
+
available: boolean;
|
|
5
|
+
status: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare const decideCapability: (_feature: BuiltInAiFeature, _availabilityOptions?: AnyCreateCoreOptions, _modeOverride?: AiModePreference) => Promise<CapabilityDecision>;
|
|
8
|
+
export declare function resolveBackend(): Promise<{
|
|
9
|
+
available: boolean;
|
|
10
|
+
transport?: BackendTransport;
|
|
11
|
+
apiName?: string;
|
|
12
|
+
baseUrl?: string;
|
|
13
|
+
reason?: string;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { PromptArgs, RewriteArgs, SummarizeArgs, TranslateArgs, WriteArgs, Features } from "../types";
|
|
2
|
+
export declare const getWriteOptions: (args: Partial<WriteArgs>) => Promise<WriterCreateCoreOptions>;
|
|
3
|
+
export declare const write: Features["write"];
|
|
4
|
+
export declare const getRewriteOptions: (args: Partial<RewriteArgs>) => Promise<RewriterCreateCoreOptions>;
|
|
5
|
+
export declare const rewrite: Features["rewrite"];
|
|
6
|
+
export declare const getProofreadOptions: () => Promise<ProofreaderCreateCoreOptions>;
|
|
7
|
+
export declare const proofread: Features["proofread"];
|
|
8
|
+
export declare const getSummarizeOptions: (args: Partial<SummarizeArgs>) => Promise<SummarizerCreateCoreOptions>;
|
|
9
|
+
export declare const summarize: Features["summarize"];
|
|
10
|
+
export declare const getTranslateOptions: (args: Partial<TranslateArgs>) => Promise<TranslatorCreateCoreOptions>;
|
|
11
|
+
export declare const translate: Features["translate"];
|
|
12
|
+
export declare const detectLanguage: Features["detectLanguage"];
|
|
13
|
+
export declare const getPromptOptions: (args: Partial<PromptArgs>) => Promise<LanguageModelCreateCoreOptions>;
|
|
14
|
+
export declare const prompt: Features["prompt"];
|
|
15
|
+
export declare const sendChatMessage: Features["sendChatMessage"];
|
|
16
|
+
export declare const sendFeedbackMessage: Features["sendFeedbackMessage"];
|
|
17
|
+
export declare const sendSearchMessage: Features["sendSearchMessage"];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WpSuitePluginBase } from "@smart-cloud/wpsuite-core";
|
|
2
|
+
import { AiKit } from "./index";
|
|
3
|
+
export type AiKitReadyEvent = "wpsuite:ai-kit:ready";
|
|
4
|
+
export type AiKitErrorEvent = "wpsuite:ai-kit:error";
|
|
5
|
+
export type AiKitPlugin = WpSuitePluginBase & AiKit;
|
|
6
|
+
export declare function getAiKitPlugin(): AiKitPlugin;
|
|
7
|
+
export declare function waitForAiKitReady(timeoutMs?: number): Promise<void>;
|
|
8
|
+
export declare function getStore(timeoutMs?: number): Promise<import("./store").Store>;
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type SubscriptionType } from "@smart-cloud/wpsuite-core";
|
|
2
|
+
import { type StoreDescriptor } from "@wordpress/data";
|
|
3
|
+
import { AiChatbotProps, type AiModePreference, type BackendTransport } from "./types";
|
|
4
|
+
export interface AiKitConfig {
|
|
5
|
+
mode?: AiModePreference;
|
|
6
|
+
backendTransport?: BackendTransport;
|
|
7
|
+
backendApiName?: string;
|
|
8
|
+
backendBaseUrl?: string;
|
|
9
|
+
subscriptionType?: SubscriptionType;
|
|
10
|
+
enableChatbot?: boolean;
|
|
11
|
+
chatbot?: AiChatbotProps;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Ensures we only keep runtime keys that are part of AiKitConfig.
|
|
15
|
+
*
|
|
16
|
+
* Defensive: upstream getConfig("ai-kit") or persisted site.settings may include
|
|
17
|
+
* additional keys, but the admin UI and core should only operate on AiKitConfig.
|
|
18
|
+
*/
|
|
19
|
+
export declare const sanitizeAiKitConfig: (input: unknown) => AiKitConfig;
|
|
20
|
+
declare const actions: {
|
|
21
|
+
setShowChatbotPreview(showChatbotPreview: boolean): {
|
|
22
|
+
type: string;
|
|
23
|
+
showChatbotPreview: boolean;
|
|
24
|
+
};
|
|
25
|
+
setLanguage(language: string | undefined | null): {
|
|
26
|
+
type: string;
|
|
27
|
+
language: string | null | undefined;
|
|
28
|
+
};
|
|
29
|
+
setDirection(direction: "ltr" | "rtl" | "auto" | undefined | null): {
|
|
30
|
+
type: string;
|
|
31
|
+
direction: "ltr" | "rtl" | "auto" | null | undefined;
|
|
32
|
+
};
|
|
33
|
+
setConfig: (config: AiKitConfig) => {
|
|
34
|
+
type: "SET_CONFIG";
|
|
35
|
+
config: AiKitConfig;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export interface CustomTranslations {
|
|
39
|
+
[key: string]: Record<string, string>;
|
|
40
|
+
}
|
|
41
|
+
export interface State {
|
|
42
|
+
config: AiKitConfig | null;
|
|
43
|
+
showChatbotPreview: boolean;
|
|
44
|
+
language: string | undefined | null;
|
|
45
|
+
direction: "ltr" | "rtl" | "auto" | undefined | null;
|
|
46
|
+
customTranslations: CustomTranslations | null;
|
|
47
|
+
}
|
|
48
|
+
export type Store = StoreDescriptor;
|
|
49
|
+
export type StoreSelectors = {
|
|
50
|
+
getConfig(): AiKitConfig | null;
|
|
51
|
+
isShowChatbotPreview(): boolean;
|
|
52
|
+
getCustomTranslations(): CustomTranslations | null;
|
|
53
|
+
getLanguage(): string | undefined | null;
|
|
54
|
+
getDirection(): "ltr" | "rtl" | "auto" | undefined | null;
|
|
55
|
+
getState(): State;
|
|
56
|
+
};
|
|
57
|
+
export type StoreActions = Omit<typeof actions, "setConfig"> & {
|
|
58
|
+
setConfig?: typeof actions.setConfig;
|
|
59
|
+
};
|
|
60
|
+
export declare const getStoreDispatch: (store: Store) => Omit<StoreActions, "setConfig">;
|
|
61
|
+
export declare const getStoreSelect: (store: Store) => StoreSelectors;
|
|
62
|
+
export declare const reloadConfig: (store: Store) => Promise<void>;
|
|
63
|
+
export declare const createStore: () => Promise<Store>;
|
|
64
|
+
export declare const observeStore: (observableStore: Store, selector: (state: State) => boolean | number | string | null | undefined, onChange: (nextValue: boolean | number | string | null | undefined, previousValue: boolean | number | string | null | undefined) => void) => () => void;
|
|
65
|
+
export {};
|