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