@smart-cloud/ai-kit-core 1.5.7 → 1.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +9 -9
- package/dist/index.js +9 -9
- package/dist/types.d.ts +5 -1
- package/package.json +28 -17
package/dist/index.cjs
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
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
|
|
1
|
+
"use strict";var ge=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var St=Object.prototype.hasOwnProperty;var S=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var J=(e,t)=>{for(var n in t)ge(e,n,{get:t[n],enumerable:!0})},Tt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Pt(t))!St.call(e,a)&&a!==n&&ge(e,a,{get:()=>t[a],enumerable:!(r=xt(t,a))||r.enumerable});return e};var Lt=e=>Tt(ge({},"__esModule",{value:!0}),e);function O(){return globalThis.WpSuite?.plugins?.aiKit}async function me(e=8e3){let t=O();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let a=()=>i(n),o=()=>i(()=>r(new Error("AiKit failed"))),i=u=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),s&&clearTimeout(s),u()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let s=e?window.setTimeout(()=>i(()=>r(new Error("AiKit timeout"))),e):0})}}async function Te(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 I,T,fe,te,Ot,Rt,Bt,It,Le,j,Oe,Re,Be,ne=S(()=>{"use strict";I=require("@smart-cloud/wpsuite-core"),T=require("@wordpress/data"),fe=require("aws-amplify/utils");ee();te=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},Ot=async()=>{let e=te(await(0,I.getConfig)("aiKit")),t=await(0,I.getCustomTranslations)({legacyUrl:O()?.settings.customTranslationsUrl});return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Rt={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})},Bt={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={},Le=e=>{let t=(0,T.dispatch)(e);return delete t.setConfig,t},j=e=>(0,T.select)(e),Oe=async e=>{(0,I.getWpSuite)().siteSettings.lastUpdate=Date.now();let t=await(0,I.getConfig)("aiKit"),n=te(t);(0,T.dispatch)(e).setConfig(n)},Re=async()=>{let e=await Ot(),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:Rt,selectors:Bt,resolvers:It});return(0,T.register)(t),t},Be=(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,Ie=S(()=>{"use strict";h="smartcloud-ai-kit"});var v,Et,Kt,Mt,Ee=S(()=>{"use strict";v=require("react/jsx-runtime"),Et=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"})]}),Kt=e=>(0,v.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 48 48",width:"48",height:"48",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,v.jsx)("path",{d:"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"})]}),Mt=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,be=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 Ft,Dt,Ut,Ke=S(()=>{"use strict";Ft="Answers from {name} are generated by AI and may contain mistakes. Check important information.",Dt="This summary was generated by AI and may contain mistakes. Check important information.",Ut=(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 Me(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 Fe(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 De(e){let t=H(e,"source");return G(t,["producer","siteId","blogId","postType","postId"],"source"),t.producer!=="wordpress"&&A("unsupported_producer","source.producer","Only wordpress is supported in v1."),{producer:"wordpress",siteId: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 _t(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 zt(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:Fe(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:Me(t.modifiedGmt,"document.modifiedGmt"),metadata:t.metadata.map(_t)}}function Nt(e,t){let n=H(e,"projection");G(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==1&&A("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=De(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&A("source_boundary_mismatch","projection.source","Projection source does not match the authenticated producer boundary.");let a={schemaVersion:1,source:r,sourceVersion:q(n.sourceVersion,"projection.sourceVersion"),correlationId:x(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:Me(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&A("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:zt(n.document)}):n.operation==="delete"?(n.document!==null&&A("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:Fe(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):A("invalid_operation","projection.operation","Unsupported desired operation.")}function Vt(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 $t(e,t){let n=BigInt(q(e,"candidateSourceVersion")),r=BigInt(q(t,"acceptedSourceVersion"));return n<r?"older":n>r?"newer":"same"}function Wt(e){let t=De(e);return[t.producer,t.siteId,t.blogId,t.postType,t.postId].map(encodeURIComponent).join(":")}var Pr,re,Ue=S(()=>{"use strict";Pr=1,re=class extends Error{constructor(n,r,a){super(a);this.code=n;this.field=r;this.name="KnowledgeSyncContractError"}code;field}});function ye(e,t){return`ai.${t}.${e}`}function we(e,t){if(t.startsWith("/kb/"))return e==="admin"?"knowledge.admin":"knowledge.query.frontend"}function Ht(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 Gt(e){if(e.transport==="fetch"){if(!e.baseUrl)throw new Error("backendBaseUrl is missing");let r=await fetch(`${e.baseUrl.replace(/\/+$/,"")}${_e}`,{method:"GET",credentials:"omit"});if(!r.ok)throw new Error(`HTTP ${r.status}`);return r.json()}if(!e.apiName)throw new Error("backendApiName is missing");let t=(0,Ne.getGateyPlugin)()?.cognito?.get;if(!t)throw new Error("Gatey GET transport is unavailable");return(await t({apiName:e.apiName,path:_e,options:{retryStrategy:{strategy:"no-retry"}}}).response).body.json()}async function U(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 Gt(e);r=Ht(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()+jt,value:r}),r}function _(e,t,n=1){if(e.status==="legacy")return n<=1&&qt.has(t);let r=e.manifest?.capabilities[t];return typeof r=="number"&&r>=n}var Ne,_e,jt,qt,ze,ae=S(()=>{"use strict";Ne=require("@smart-cloud/gatey-core"),_e="/meta/capabilities",jt=300*1e3,qt=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 Ye={};J(Ye,{MIN_CHROME_VERSION:()=>qe,checkOnDeviceAvailability:()=>Ge,decideCapability:()=>ie,isOnDeviceLanguageSupported:()=>K,resolveBackend:()=>z});async function We(){let t=await(0,Ve.getWpSuite)()?.plugins?.aiKit?.features.store;return j(t).getConfig()??{}}function je(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function Yt(e){if(e.mode)return e.mode;let{transport:t}=je(e);return t?"backend-fallback":"local-only"}async function z(e){let t=await We(),{transport:n,backendApiName:r,backendBaseUrl:a}=je(t);if(!n)return{available:!1,reason:"No backend configured"};if(n==="fetch"){if(!a)return{available:!1,reason:"backendBaseUrl is missing"};let s=await U({transport:n,baseUrl:a});return e&&!_(s,e)?{available:!1,transport:n,baseUrl:a,compatibility:s,reason:`Backend does not support ${e}.`}:{available:!0,transport:n,baseUrl:a,compatibility:s,reason:"Custom fetch backend"}}if(!r)return{available:!1,reason:"backendApiName is missing"};let o=(0,$e.getGateyPlugin)();if(!o?.availability||await o.availability()!=="available")return{available:!1,reason:"Gatey is not available"};let i=await U({transport:n,apiName:r});return e&&!_(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 E(e){return typeof globalThis[e]<"u"}function He(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function oe(e,t){return e?.find(n=>n.brand===t)?.version}async function Xt(){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]?He(t[1]):void 0}function Jt(){return!!navigator?.brave}async function en(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 Xt(),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=Jt()||/\bBrave\//i.test(t);if(o||i||s||u||c||d||l)return{allowed:!1,reason:o?"edge":l?"brave":c?"firefox":d?"safari":i?"opera":s?"vivaldi":u?"samsung":"unsupported-browser"};let m=He(a)??Zt(t),g=qe[e];return g?m?m<g?{allowed:!1,reason:`chrome-too-old-${m}-lt-${g}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function Ge(e,t){try{let n=await en(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"?Qt.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(!E("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(!E("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(!E("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(!E("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(!E("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(!E("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(!E("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 K(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function ie(e,t,n,r="admin"){let a=await We(),o=n||Yt(a),i=await z(ye(r,e)),s=await Ge(e,t),u=s.available,c=i.available,d={feature:e,mode:o,onDeviceAvailable:u,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:c,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason,backendCompatibility:i.compatibility};return o==="local-only"?u?{...d,source:"on-device",reason:`local-only, on-device available (${s.reason??s.status})`}:{...d,source:"none",reason:`local-only, but on-device unavailable (${s.reason??s.status})`}:o==="backend-only"?c?{...d,source:"backend",reason:`backend-only, backend available (${i.reason??"n/a"})`}:{...d,source:"none",reason:`backend-only, but backend unavailable (${i.reason??"n/a"})`}:u?{...d,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:c?{...d,source:"backend",reason:`backend-fallback, using backend (${i.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...d,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${i.reason??"n/a"})`}}var Ve,$e,qe,Qt,ke=S(()=>{"use strict";Ve=require("@smart-cloud/wpsuite-core"),$e=require("@smart-cloud/gatey-core");ne();ae();qe={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},Qt=new Set(["writer","rewriter","proofreader","prompt"])});var nt={};J(nt,{dispatchCustomBackend:()=>pn,dispatchFeatureBackend:()=>V,withRecaptchaHeaders:()=>Y});function tn(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function nn(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function rn(e,t){let n=nn(t);if(n<=0)return!1;let r=Xe.get(e);return r?Date.now()-r<n:!1}function he(e,t){let n=tn(t);n&&Xe.set(e,n)}function Ze(e,t){if(e!=="frontend"||!et(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Je(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 an(e,t){if(e!=="frontend")return;let n=(0,se.getWpSuite)()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&rn(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 an(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function N(e,t){try{e?.onStatus?.(t)}catch{}}function et(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function sn(e,t){if(!et(t))return t;let n=on[e];if(!n)return t;let r={};for(let a of n)a in t&&(r[a]=t[a]);return r}function ln(e,t){return(e==="admin"?un:cn)[t]}function dn(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function V(e,t,n,r,a={}){let o=ln(t,n);if(!o)throw new L(`No backend path configured for "${n}" (${t}).`,e);let i=sn(n,r);return tt(e,t,n,o,"POST",i,a)}async function pn(e,t,n,r,a,o={}){let i=we(t,n);if(i){let u=await U({transport:e.backendTransport??"gatey",apiName:e.backendApiName,baseUrl:e.backendBaseUrl});if(!_(u,i))throw new L(`Backend does not support ${i}.`,{...e,backendCompatibility:u})}let s=dn(t,n);return tt(e,t,"prompt",s,r,a,o)}async function tt(e,t,n,r,a,o,i={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new L("backendTransport=fetch but backendBaseUrl is missing.",e);return gn(e.backendBaseUrl,r,a,o,i,e,n,t)}if(!e.backendApiName)throw new L("backendTransport=gatey but backendApiName is missing.",e);return mn(e.backendApiName,r,a,o,i,e,n,t)}async function gn(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=Je(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&&he(k,f),b}return f&&d&&he(d,f),await g.text()}async function mn(e,t,n,r,a,o,i,s){let u=(0,Qe.getGateyPlugin)(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new L(`Unsupported HTTP method "${n}" for Gatey backend.`,o)}if(!c)throw new L(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,o);let d=i==="prompt"?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=Je(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??d;return y&&typeof b=="string"&&b.trim()&&he(b.trim(),y),N(a,{feature:i,context:s,step:"backend:response",source:"backend"}),f}var Qe,se,Xe,on,un,cn,Ce=S(()=>{"use strict";Qe=require("@smart-cloud/gatey-core"),se=require("@smart-cloud/wpsuite-core");ee();be();ae();Xe=new Map;on={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"]};un={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},cn={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function fn(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 bn(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
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
|
-
`,a);if(i>r+t*.5)a=i+2;else{let s=
|
|
5
|
+
`,a);if(i>r+t*.5)a=i+2;else{let s=fn(e,r,a);if(s>0)a=s;else{let u=bn(e,r,a);if(u>0)a=u;else{let c=e.lastIndexOf(" ",a);c>r+t*.5&&(a=c+1)}}}}let o=e.substring(r,a).trim();o.length>0&&n.push({text:o,start:r,end:a}),r=a}return n}var rt=S(()=>{"use strict"});var ht={};J(ht,{detectLanguage:()=>Kn,getPromptOptions:()=>kt,getProofreadOptions:()=>lt,getRewriteOptions:()=>ct,getSummarizeOptions:()=>dt,getTranslateOptions:()=>pt,getWriteOptions:()=>ut,prompt:()=>Vn,proofread:()=>In,rewrite:()=>Bn,sendChatMessage:()=>$n,sendFeedbackMessage:()=>jn,sendSearchMessage:()=>Wn,summarize:()=>En,translate:()=>X,write:()=>Rn});function Ae(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(Ae).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+Ae(t[r])).join(",")+"}"}function yn(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function wn(e,t){return`${e}:${yn(Ae(t))}`}function ve(){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<=ot)){r.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of r){if(e.get(n).length<=ot)break;if(!(a.refCount>0)){try{a.destroy()}catch{}P.delete(a.key),e.set(n,(e.get(n)??[]).filter(o=>o.key!==a.key))}}}if(P.size<=at)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<=at)break;if(!(n.refCount>0)){try{n.destroy()}catch{}P.delete(n.key)}}}async function M(e,t,n,r){let a=wn(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(),ve())}};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),ve(),{model:u,fromCache:!1,release:()=>{let d=P.get(a);d&&(d.refCount=Math.max(0,d.refCount-1),d.lastUsed=Date.now(),ve())}}})().catch(u=>{throw Q.delete(a),u});return Q.set(a,s),s}function R(){return((0,Pe.getWpSuite)()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function p(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function $(){return(0,Pe.getWpSuite)()?.plugins?.aiKit?.settings?.sharedContext??void 0}function B(e){return e?.context??"admin"}function F(e,t=kn){let n=new AbortController,r=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,i,s=!1,u=()=>{if(n.signal.aborted)return;let c=typeof r?.reason<"u"?r?.reason:void 0;n.abort(c??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?u():r.addEventListener("abort",u)),o&&o>0&&(i=setTimeout(()=>{n.signal.aborted||(s=!0,n.abort(new xe(o)))},o)),{signal:n.signal,timedOut:()=>s,dispose:()=>{i&&(clearTimeout(i),i=void 0),r&&r.removeEventListener("abort",u)}}}function le(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function hn(e,t,n,r){let a=le(e),o=await yt(e.images,n,t,r);return{text:e.messages.filter(i=>i.role==="user").map(i=>i.content).join(`
|
|
6
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(`
|
|
7
|
+
`),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function Cn(e,t,n,r){let a=le(e),o=await yt(e.images,n,t,r),i=await wt(e.audio,n,t,r);return{sessionId:e.sessionId,text:e.message,images:o?.images,imageUrls:o?.imageUrls,audio:i?.audio,audioUrl:i?.audioUrl,context:e.sessionId?void 0:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!0,...a}}async function vn(e,t,n,r){let a=le(e),o=await wt(e.audio,n,t,r);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:o?.audio,audioUrl:o?.audioUrl,maxTokens:e.maxTokens,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...a}}async function An(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function xn(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 Pn(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 Sn(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 Tn(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Ln(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function On(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function D(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 V(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 Mn(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 Fn(e){return typeof Blob<"u"&&e instanceof Blob}function Dn(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 _n(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 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":"webm"}async function Nn(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function mt(e){let t=await Nn(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function ft(e,t,n,r,a,o){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");let i=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",s={...o?.headers??{}},u=await Y(t,s);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("Backend base URL not available for signed URL request");let g=new URLSearchParams({fileName:n,contentType:r,contentLength:String(a)}).toString(),y=`${e.backendBaseUrl.replace(/\/+$/,"")}${i}?${g}`,f=await fetch(y,{method:"GET",headers:u,signal:o?.signal,credentials:"omit"});if(!f.ok){let k=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${k?": "+k.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=(0,it.getGateyPlugin)(),d={fileName:n,contentType:r,contentLength:a};if(c?.cognito?.get){let g=c.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((f,b)=>(f[b]=String(d[b]),f),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(f=>f.body.json());if(!y?.uploadUrl||!y?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:y.uploadUrl,key:y.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(g=>g.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function bt(e,t,n,r){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.signal});if(!a.ok){let o=await a.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${a.status}${o?": "+o.substring(0,200):""}`)}}async function yt(e,t,n,r){if(!e||e.length===0)return;let a=[];for(let c of e){if(!Fn(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(c)}let o=a.reduce((c,d)=>c+(d.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=gt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let d of a)c.push({format:Un(d.type),data:await mt(d)});return{images:c}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<a.length;c++){let d=a[c],l=d.type||"application/octet-stream",m=d.name||`image_${c}.${Dn(l)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await ft(t,n,m,l,d.size||0,r);p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await bt(g,d,l,r),u.push(y)}return{imageUrls:u}}async function wt(e,t,n,r){if(!e)return;let a=e.size||0;if(Math.ceil(a*1.37+2048)<=gt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=zn(e.type||"audio/webm"),m=await mt(e);return{audio:{format:l,data:m}}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let s=e.type||"audio/webm",u=e.name||`audio.${_n(s)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:d}=await ft(t,n,u,s,e.size||0,r);return p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await bt(c,e,s,r),{audioUrl:d}}var it,Pe,ce,at,ot,P,Q,kn,st,xe,ut,Rn,ct,Bn,lt,In,dt,En,Kn,pt,X,gt,kt,Vn,$n,Wn,jn,Ct=S(()=>{"use strict";it=require("@smart-cloud/gatey-core"),Pe=require("@smart-cloud/wpsuite-core");Ce();ke();ce=require("aws-amplify/utils");vt();rt();at=8,ot=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()});kn=45e3,st=5e3,xe=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};ut=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Rn=async(e,t)=>{let n=B(t),r=e.sharedContext??$(),a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;K(a)||(i=!0,a="en");let s=ut({...e,outputLanguage:a});return D(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=F(t);try{let{model:c,release:d}=await M("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 W=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:W});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})),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()}},
|
|
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()}},xn({...e,sharedContext:r,outputLanguage:o}),t)},ct=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Bn=async(e,t)=>{let n=B(t),r=e.sharedContext??$(),a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;K(a)||(i=!0,a="en");let s=ct({...e,outputLanguage:a});return D(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=F(t);try{let{model:c,release:d}=await M("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 W=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:W});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})),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()}},
|
|
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()}},Pn({...e,sharedContext:r,outputLanguage:o}),t)},lt=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),In=async(e,t)=>{let n=B(t),r=await lt();return D(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=F(t);try{let{model:o,release:i}=await M("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()}},On(e),t)},dt=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},En=async(e,t)=>{let n=B(t),r=e.sharedContext??$(),a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;K(a)||(i=!0,a="en");let s=await dt({...e,outputLanguage:a});return D(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=F(t);try{let{model:c,release:d}=await M("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 W=await c.summarize(y[b].text,{context:e.context,signal:u.signal});f.push(W)}e.text=f.join(`
|
|
12
12
|
|
|
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()}},
|
|
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()}},Sn({...e,sharedContext:r,outputLanguage:o}),t)},Kn=async(e,t)=>{let n=B(t);return D(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=F(t,st);try{let{model:a,release:o}=await M("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=>Se.find(u=>u.value===s.detectedLanguage))}}}finally{try{o()}catch(i){console.error("Error destroying language detector:",i)}}}finally{r.dispose()}},Ln(e.text,t),t)},pt=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??R()??"en"};return Promise.resolve(t)},X=async(e,t)=>{let n=B(t),r=await pt({...e});return D(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=F(t,st);try{let{model:o,release:i}=await M("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
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()}},
|
|
15
|
+
`)}}finally{try{i()}catch(s){console.error("Error destroying translator:",s)}}}finally{a.dispose()}},Tn(e.text,e.sourceLanguage,e.targetLanguage),t)};gt=4*1024*1024;kt=async e=>{let t=e.outputLanguage?e.outputLanguage:R();return K(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Vn=async(e,t)=>{let n=B(t),r=e.sharedContext??$(),a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;K(a)||(i=!0,a="en");let s=await kt({...e,outputLanguage:a}),u=await ie("prompt",s,t?.modeOverride,n);return D(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=d?[{role:"system",content:d}]:void 0,m=
|
|
17
|
+
`):void 0,l=d?[{role:"system",content:d}]:void 0,m=F(t);try{let{model:g,release:y}=await M("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(Mn(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 hn({...e,sharedContext:r},n,u,t),t)},$n=async(e,t)=>{let n=B(t),r=e.sharedContext??$(),a="prompt",o=await z(),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 Cn({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 V(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),u},Wn=async(e,t)=>{let n=B(t),r=e.sharedContext??$(),a="prompt",o=await z(),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 vn({...e,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let u=await V(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),u},jn=async(e,t)=>{let n="frontend",r="prompt",a=await z(),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 An({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});p(r,n,t,{step:"backend:request",source:"backend"});let s=await V(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s}});var br={};J(br,{AiKitChatbotIcon:()=>Kt,AiKitDocSearchIcon:()=>Mt,AiKitFeatureIcon:()=>Et,BackendError:()=>L,DEFAULT_CHATBOT_AI_DISCLOSURE:()=>Ft,DEFAULT_DOC_SEARCH_AI_DISCLOSURE:()=>Dt,KNOWLEDGE_SYNC_CONTRACT_VERSION:()=>Pr,KnowledgeSyncContractError:()=>re,LANGUAGE_OPTIONS:()=>Se,TEXT_DOMAIN:()=>h,capabilityForCustomPath:()=>we,capabilityForFeature:()=>ye,checkOnDeviceAvailability:()=>Yn,compareKnowledgeSourceVersions:()=>$t,decideCapability:()=>Gn,detectLanguage:()=>cr,dispatchBackend:()=>Zn,formatAiDisclosure:()=>Ut,getAiKitPlugin:()=>O,getMinChromeVersions:()=>qn,getPromptOptions:()=>lr,getProofreadOptions:()=>rr,getRewriteOptions:()=>tr,getStore:()=>Te,getStoreDispatch:()=>Le,getStoreSelect:()=>j,getSummarizeOptions:()=>or,getTranslateOptions:()=>sr,getWriteOptions:()=>Jn,initializeAiKit:()=>fr,isOnDeviceLanguageSupported:()=>Hn,knowledgeSyncSourceKey:()=>Wt,observeStore:()=>Be,parseKnowledgeSyncPolicyV1:()=>Vt,parsePublicContentProjectionV1:()=>Nt,prompt:()=>dr,proofread:()=>ar,reloadConfig:()=>Oe,resolveBackend:()=>Qn,resolveBackendCompatibility:()=>U,rewrite:()=>nr,sanitizeAiKitConfig:()=>te,sendChatMessage:()=>pr,sendFeedbackMessage:()=>gr,sendSearchMessage:()=>mr,summarize:()=>ir,supportsBackendCapability:()=>_,translate:()=>ur,waitForAiKitReady:()=>me,write:()=>er});module.exports=Lt(br);var At,C,Se,Z,qn,Hn,Gn,Yn,Qn,Xn,Zn,w,Jn,er,tr,nr,rr,ar,or,ir,sr,ur,cr,lr,dr,pr,gr,mr,fr,vt=S(()=>{At=require("@smart-cloud/wpsuite-core"),C=require("@wordpress/i18n");ee();ne();Ie();ne();Ee();be();Ke();Ue();ae();Se=[{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"}],Z=Promise.resolve().then(()=>(ke(),Ye)),qn=async()=>(await Z).MIN_CHROME_VERSION,Hn=async(...e)=>(await Z).isOnDeviceLanguageSupported(...e),Gn=async(...e)=>(await Z).decideCapability(...e),Yn=async(...e)=>(await Z).checkOnDeviceAvailability(...e),Qn=async(...e)=>(await Z).resolveBackend(...e),Xn=Promise.resolve().then(()=>(Ce(),nt)),Zn=async(...e)=>(await Xn).dispatchCustomBackend(...e),w=Promise.resolve().then(()=>(Ct(),ht)),Jn=async(...e)=>(await w).getWriteOptions(...e),er=async(...e)=>(await w).write(...e),tr=async(...e)=>(await w).getRewriteOptions(...e),nr=async(...e)=>(await w).rewrite(...e),rr=async(...e)=>(await w).getProofreadOptions(...e),ar=async(...e)=>(await w).proofread(...e),or=async(...e)=>(await w).getSummarizeOptions(...e),ir=async(...e)=>(await w).summarize(...e),sr=async(...e)=>(await w).getTranslateOptions(...e),ur=async(...e)=>(await w).translate(...e),cr=async(...e)=>(await w).detectLanguage(...e),lr=async(...e)=>(await w).getPromptOptions(...e),dr=async(...e)=>(await w).prompt(...e),pr=async(...e)=>(await w).sendChatMessage(...e),gr=async(...e)=>(await w).sendFeedbackMessage(...e),mr=async(...e)=>(await w).sendSearchMessage(...e),fr=(e,t)=>{let n=globalThis.WpSuite,r=O();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");(0,At.attachDefaultPluginRuntime)(r),r.status=r.status??"initializing";let a=Re();return r.features={store:a,renderFeature:async o=>await e({...o,store:await a}),renderSearchComponent:async o=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...o,store:await a})},write:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.write(...o)},rewrite:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.rewrite(...o)},proofread:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.proofread(...o)},summarize:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.summarize(...o)},translate:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.translate(...o)},detectLanguage:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.detectLanguage(...o)},prompt:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.prompt(...o)},sendChatMessage:async(...o)=>(await w).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await w).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await w).sendSearchMessage(...o)},a.then(()=>{r.status="available",n?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(o=>{r.status="error",console.error("AiKit plugin failed to initialize:",o),n?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(o)})}),r}});vt();0&&(module.exports={AiKitChatbotIcon,AiKitDocSearchIcon,AiKitFeatureIcon,BackendError,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.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
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
|
|
1
|
+
var gt=Object.defineProperty;var S=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var ie=(e,t)=>{for(var n in t)gt(e,n,{get:t[n],enumerable:!0})};function R(){return globalThis.WpSuite?.plugins?.aiKit}async function we(e=8e3){let t=R();if(t?.status!=="available"){if(t?.status==="error")throw new Error("AiKit failed");await new Promise((n,r)=>{let a=()=>i(n),o=()=>i(()=>r(new Error("AiKit failed"))),i=u=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),s&&clearTimeout(s),u()};window.addEventListener("wpsuite:ai-kit:ready",a,{once:!0}),window.addEventListener("wpsuite:ai-kit:error",o,{once:!0});let s=e?window.setTimeout(()=>i(()=>r(new Error("AiKit timeout"))),e):0})}}async function mt(e=1e4){await we(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 he,getCustomTranslations as ft,getWpSuite as bt}from"@smart-cloud/wpsuite-core";import{createReduxStore as yt,dispatch as Ce,register as wt,select as kt,subscribe as ht}from"@wordpress/data";import{I18n as ke}from"aws-amplify/utils";var se,Ct,vt,At,xt,Pt,X,St,ve,Tt,Z=S(()=>{"use strict";Q();se=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=se(await he("aiKit")),t=await ft({legacyUrl:R()?.settings.customTranslationsUrl});return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},vt={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?ke.setLanguage(""):ke.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},At={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},xt={},Pt=e=>{let t=Ce(e);return delete t.setConfig,t},X=e=>kt(e),St=async e=>{bt().siteSettings.lastUpdate=Date.now();let t=await he("aiKit"),n=se(t);Ce(e).setConfig(n)},ve=async()=>{let e=await Ct(),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:vt,selectors:At,resolvers:xt});return wt(t),t},Tt=(e,t,n)=>{let r;function a(){let i=X(e).getState(),s=t(i);if(s!==r){let u=r;r=s,n(r,u)}}let o=ht(a,e);return a(),o}});var h,Ae=S(()=>{"use strict";h="smartcloud-ai-kit"});import{jsx as A,jsxs as ue}from"react/jsx-runtime";var Gn,Yn,Qn,xe=S(()=>{"use strict";Gn=e=>ue("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"})]}),Yn=e=>ue("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"})]}),Qn=e=>ue("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,ce=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 er,tr,nr,Pe=S(()=>{"use strict";er="Answers from {name} are generated by AI and may contain mistakes. Check important information.",tr="This summary was generated by AI and may contain mistakes. Check important information.",nr=(e,t)=>e.split("{name}").join(t)});function v(e,t,n){throw new le(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 N(e,t){return x(e,t,/^(?:0|[1-9][0-9]*)$/)}function Se(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 Te(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 Le(e){let t=V(e,"source");return $(t,["producer","siteId","blogId","postType","postId"],"source"),t.producer!=="wordpress"&&v("unsupported_producer","source.producer","Only wordpress is supported in v1."),{producer:"wordpress",siteId:x(t.siteId,"source.siteId",/^[A-Za-z0-9._:-]+$/),blogId:N(t.blogId,"source.blogId"),postType:x(t.postType,"source.postType",/^[a-z0-9_-]+$/),postId:N(t.postId,"source.postId")}}function Lt(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 Ot(e){let t=V(e,"document");return $(t,["profile","canonicalUrl","title","excerpt","content","contentType","contentSha256","modifiedGmt","metadata"],"document"),t.contentType!=="text/markdown"&&v("unsupported_content_type","document.contentType","Contract v1 supports text/markdown documents only."),Array.isArray(t.metadata)||v("invalid_type","document.metadata","document.metadata must be an array."),{profile:x(t.profile,"document.profile",/^[a-z0-9][a-z0-9._-]*$/),canonicalUrl:Te(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:Se(t.modifiedGmt,"document.modifiedGmt"),metadata:t.metadata.map(Lt)}}function or(e,t){let n=V(e,"projection");$(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==1&&v("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=Le(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&v("source_boundary_mismatch","projection.source","Projection source does not match the authenticated producer boundary.");let a={schemaVersion:1,source:r,sourceVersion:N(n.sourceVersion,"projection.sourceVersion"),correlationId:x(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:Se(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&v("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:Ot(n.document)}):n.operation==="delete"?(n.document!==null&&v("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:Te(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):v("invalid_operation","projection.operation","Unsupported desired operation.")}function ir(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 sr(e,t){let n=BigInt(N(e,"candidateSourceVersion")),r=BigInt(N(t,"acceptedSourceVersion"));return n<r?"older":n>r?"newer":"same"}function ur(e){let t=Le(e);return[t.producer,t.siteId,t.blogId,t.postType,t.postId].map(encodeURIComponent).join(":")}var ar,le,Oe=S(()=>{"use strict";ar=1,le=class extends Error{constructor(n,r,a){super(a);this.code=n;this.field=r;this.name="KnowledgeSyncContractError"}code;field}});import{getGateyPlugin as Rt}from"@smart-cloud/gatey-core";function Ie(e,t){return`ai.${t}.${e}`}function Ee(e,t){if(t.startsWith("/kb/"))return e==="admin"?"knowledge.admin":"knowledge.query.frontend"}function Et(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.schemaVersion===1&&t.product==="smartcloud-ai-kit-backend"&&typeof t.release=="string"&&!!t.capabilities&&typeof t.capabilities=="object"&&!Array.isArray(t.capabilities)}async function Kt(e){if(e.transport==="fetch"){if(!e.baseUrl)throw new Error("backendBaseUrl is missing");let r=await fetch(`${e.baseUrl.replace(/\/+$/,"")}${Re}`,{method:"GET",credentials:"omit"});if(!r.ok)throw new Error(`HTTP ${r.status}`);return r.json()}if(!e.apiName)throw new Error("backendApiName is missing");let t=Rt()?.cognito?.get;if(!t)throw new Error("Gatey GET transport is unavailable");return(await t({apiName:e.apiName,path:Re,options:{retryStrategy:{strategy:"no-retry"}}}).response).body.json()}async function W(e){let t=`${e.transport}:${e.apiName??e.baseUrl??""}`,n=Be.get(t);if(n&&n.expiresAt>Date.now())return n.value;let r;try{let a=await Kt(e);r=Et(a)?{status:"verified",manifest:a}:{status:"legacy",reason:"Backend returned an unsupported capability manifest."}}catch(a){r={status:"legacy",reason:a instanceof Error?`Capability manifest is unavailable: ${a.message}`:"Capability manifest is unavailable."}}return Be.set(t,{expiresAt:Date.now()+Bt,value:r}),r}function j(e,t,n=1){if(e.status==="legacy")return n<=1&&It.has(t);let r=e.manifest?.capabilities[t];return typeof r=="number"&&r>=n}var Re,Bt,It,Be,J=S(()=>{"use strict";Re="/meta/capabilities",Bt=300*1e3,It=new Set(["ai.prompt.admin","ai.summarizer.admin","ai.writer.admin","ai.rewriter.admin","ai.translator.admin","ai.proofreader.admin","ai.language-detector.admin","ai.prompt.frontend","ai.summarizer.frontend","ai.writer.frontend","ai.rewriter.frontend","ai.translator.frontend","ai.proofreader.frontend","ai.language-detector.frontend","knowledge.admin","knowledge.query.frontend"]),Be=new Map});var _e={};ie(_e,{MIN_CHROME_VERSION:()=>Fe,checkOnDeviceAvailability:()=>Ue,decideCapability:()=>te,isOnDeviceLanguageSupported:()=>I,resolveBackend:()=>F});import{getWpSuite as Mt}from"@smart-cloud/wpsuite-core";import{getGateyPlugin as Ft}from"@smart-cloud/gatey-core";async function Ke(){let t=await Mt()?.plugins?.aiKit?.features.store;return X(t).getConfig()??{}}function Me(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function Dt(e){if(e.mode)return e.mode;let{transport:t}=Me(e);return t?"backend-fallback":"local-only"}async function F(e){let t=await Ke(),{transport:n,backendApiName:r,backendBaseUrl:a}=Me(t);if(!n)return{available:!1,reason:"No backend configured"};if(n==="fetch"){if(!a)return{available:!1,reason:"backendBaseUrl is missing"};let s=await W({transport:n,baseUrl:a});return e&&!j(s,e)?{available:!1,transport:n,baseUrl:a,compatibility:s,reason:`Backend does not support ${e}.`}:{available:!0,transport:n,baseUrl:a,compatibility:s,reason:"Custom fetch backend"}}if(!r)return{available:!1,reason:"backendApiName is missing"};let o=Ft();if(!o?.availability||await o.availability()!=="available")return{available:!1,reason:"Gatey is not available"};let i=await W({transport:n,apiName:r});return e&&!j(i,e)?{available:!1,transport:n,apiName:r,compatibility:i,reason:`Backend does not support ${e}.`}:{available:!0,transport:n,apiName:r,compatibility:i,reason:"Gatey backend"}}function B(e){return typeof globalThis[e]<"u"}function De(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function ee(e,t){return e?.find(n=>n.brand===t)?.version}async function _t(){let e=navigator?.userAgentData;if(e){try{let n=(await e.getHighEntropyValues?.(["fullVersionList"]))?.fullVersionList;if(Array.isArray(n)&&n.length>0)return n}catch{}if(Array.isArray(e.brands)&&e.brands.length>0)return e.brands}}function zt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?De(t[1]):void 0}function Nt(){return!!navigator?.brave}async function Vt(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",n=await _t(),r=ee(n,"Microsoft Edge")??ee(n,"Microsoft Edge WebView2"),a=ee(n,"Google Chrome")??ee(n,"Chromium"),o=!!r||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),i=/\bOPR\//i.test(t),s=/\bVivaldi\//i.test(t),u=/\bSamsungBrowser\//i.test(t),c=/\bFirefox\//i.test(t),d=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=Nt()||/\bBrave\//i.test(t);if(o||i||s||u||c||d||l)return{allowed:!1,reason:o?"edge":l?"brave":c?"firefox":d?"safari":i?"opera":s?"vivaldi":u?"samsung":"unsupported-browser"};let m=De(a)??zt(t),g=Fe[e];return g?m?m<g?{allowed:!1,reason:`chrome-too-old-${m}-lt-${g}`,chromeMajor:m}:{allowed:!0,reason:"ok",chromeMajor:m}:{allowed:!1,reason:"unknown-chrome-version"}:{allowed:!1,reason:"no-min-version",chromeMajor:m}}async function Ue(e,t){try{let n=await Vt(e),r=`browser-gate:${n.reason}${n.chromeMajor?` (chrome ${n.chromeMajor})`:""}`;if(!n.allowed)return{available:!1,status:"unavailable",reason:r};let a=o=>o==="unavailable"?Ut.has(e)?"requires Chrome flags or Origin Trial tokens \u2014 see AI-Kit Diagnostics":"check hardware requirements or see AI-Kit Diagnostics":r;switch(e){case"writer":{if(!B("Writer")||!Writer?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Writer.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"rewriter":{if(!B("Rewriter")||!Rewriter?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Rewriter.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"summarizer":{if(!B("Summarizer")||!Summarizer?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Summarizer.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"proofreader":{if(!B("Proofreader")||!Proofreader?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await Proofreader.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"language-detector":{if(!B("LanguageDetector")||!LanguageDetector?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await LanguageDetector.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}case"translator":{if(!B("Translator")||!Translator?.availability)return{available:!1,status:"api-not-present",reason:r};let o=t;if(!o?.sourceLanguage||!o?.targetLanguage)return{available:!1,status:"error",reason:r,error:new Error("Translator.availability requires sourceLanguage/targetLanguage")};let i=await Translator.availability({...o,sourceLanguage:o.sourceLanguage==="auto"?"en":o.sourceLanguage,targetLanguage:o.sourceLanguage==="auto"||o.sourceLanguage===o.targetLanguage?"hu":o.targetLanguage});return{available:i!=="unavailable",status:i,reason:a(i)}}case"prompt":{if(!B("LanguageModel")||!LanguageModel?.availability)return{available:!1,status:"api-not-present",reason:r};let o=await LanguageModel.availability(t);return{available:o!=="unavailable",status:o,reason:a(o)}}default:return{available:!1,status:"unknown-feature",reason:r}}}catch(n){return{available:!1,status:"error",reason:"exception in availability()",error:n}}}function I(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function te(e,t,n,r="admin"){let a=await Ke(),o=n||Dt(a),i=await F(Ie(r,e)),s=await Ue(e,t),u=s.available,c=i.available,d={feature:e,mode:o,onDeviceAvailable:u,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:c,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason,backendCompatibility:i.compatibility};return o==="local-only"?u?{...d,source:"on-device",reason:`local-only, on-device available (${s.reason??s.status})`}:{...d,source:"none",reason:`local-only, but on-device unavailable (${s.reason??s.status})`}:o==="backend-only"?c?{...d,source:"backend",reason:`backend-only, backend available (${i.reason??"n/a"})`}:{...d,source:"none",reason:`backend-only, but backend unavailable (${i.reason??"n/a"})`}:u?{...d,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:c?{...d,source:"backend",reason:`backend-fallback, using backend (${i.reason??"n/a"}; on-device: ${s.reason??s.status})`}:{...d,source:"none",reason:`No on-device AI or backend available (on-device: ${s.reason??s.status}; backend: ${i.reason??"n/a"})`}}var Fe,Ut,de=S(()=>{"use strict";Z();J();Fe={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},Ut=new Set(["writer","rewriter","proofreader","prompt"])});var je={};ie(je,{dispatchCustomBackend:()=>nn,dispatchFeatureBackend:()=>U,withRecaptchaHeaders:()=>q});import{getGateyPlugin as $t}from"@smart-cloud/gatey-core";import{getRecaptcha as Wt,getWpSuite as jt}from"@smart-cloud/wpsuite-core";function qt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function Ht(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function Gt(e,t){let n=Ht(t);if(n<=0)return!1;let r=ze.get(e);return r?Date.now()-r<n:!1}function pe(e,t){let n=qt(t);n&&ze.set(e,n)}function Ne(e,t){if(e!=="frontend"||!$e(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function Ve(e,t){if(!e)return;try{if(typeof e.get=="function")return e.get(t)??void 0}catch{}let n=Object.keys(e).find(a=>a.toLowerCase()===t.toLowerCase());if(!n)return;let r=e[n];return typeof r=="string"&&r?r:void 0}async function Yt(e,t){if(e!=="frontend")return;let n=jt()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&Gt(t.cacheKey,R()?.settings||{}))return;let{execute:r}=await Wt(n?.useRecaptchaEnterprise||!1);if(typeof r=="function")try{let o=await r(n.reCaptchaPublicKey,{action:"generate"});return typeof o=="string"&&o?o:void 0}catch{return}}async function q(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await Yt(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function D(e,t){try{e?.onStatus?.(t)}catch{}}function $e(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Xt(e,t){if(!$e(t))return t;let n=Qt[e];if(!n)return t;let r={};for(let a of n)a in t&&(r[a]=t[a]);return r}function en(e,t){return(e==="admin"?Zt:Jt)[t]}function tn(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function U(e,t,n,r,a={}){let o=en(t,n);if(!o)throw new T(`No backend path configured for "${n}" (${t}).`,e);let i=Xt(n,r);return We(e,t,n,o,"POST",i,a)}async function nn(e,t,n,r,a,o={}){let i=Ee(t,n);if(i){let u=await W({transport:e.backendTransport??"gatey",apiName:e.backendApiName,baseUrl:e.backendBaseUrl});if(!j(u,i))throw new T(`Backend does not support ${i}.`,{...e,backendCompatibility:u})}let s=tn(t,n);return We(e,t,"prompt",s,r,a,o)}async function We(e,t,n,r,a,o,i={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new T("backendTransport=fetch but backendBaseUrl is missing.",e);return rn(e.backendBaseUrl,r,a,o,i,e,n,t)}if(!e.backendApiName)throw new T("backendTransport=gatey but backendApiName is missing.",e);return an(e.backendApiName,r,a,o,i,e,n,t)}async function rn(e,t,n,r,a,o,i,s){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...a.headers??{}},d=i==="prompt"?Ne(s,r):void 0,l=await q(s,c,{cacheKey:d}),m=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([b,k])=>[b,String(k)])).toString():"";D(a,{feature:i,context:s,step:"backend:request",source:"backend"}),D(a,{feature:i,context:s,step:"backend:waiting",source:"backend"});let g=await fetch(u+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:a.signal,credentials:"omit"});if(D(a,{feature:i,context:s,step:"backend:response",source:"backend"}),!g.ok){let b=`HTTP ${g.status}`;try{let k=await g.text();k&&(b=`${b}: ${k.substring(0,400)}`)}catch{}throw new T(`Fetch backend call failed: ${b}`,o,g.status)}let y=g.headers.get("content-type")||"",f=Ve(g.headers,"x-recaptcha-verified-at");if(y.includes("application/json")){let b=await g.json(),k=(b&&typeof b.sessionId=="string"&&b.sessionId.trim()?b.sessionId.trim():void 0)??d;return f&&k&&pe(k,f),b}return f&&d&&pe(d,f),await g.text()}async function an(e,t,n,r,a,o,i,s){let u=$t(),c;switch(n.toUpperCase()){case"POST":c=u?.cognito?.post;break;case"GET":c=u?.cognito?.get;break;case"PUT":c=u?.cognito?.put;break;case"PATCH":c=u?.cognito?.patch;break;case"DELETE":c=u?.cognito?.del;break;default:throw new T(`Unsupported HTTP method "${n}" for Gatey backend.`,o)}if(!c)throw new T(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,o);let d=i==="prompt"?Ne(s,r):void 0,l=await q(s,{...a.headers??{}},{cacheKey:d});D(a,{feature:i,context:s,step:"backend:request",source:"backend"}),D(a,{feature:i,context:s,step:"backend:waiting",source:"backend"});let m=c({apiName:e,path:t,options:{body:r,headers:l,retryStrategy:{strategy:"no-retry"}}});a?.signal?.addEventListener?.("abort",()=>{m.cancel()});let g=await m.response,y=Ve(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??d;return y&&typeof b=="string"&&b.trim()&&pe(b.trim(),y),D(a,{feature:i,context:s,step:"backend:response",source:"backend"}),f}var ze,Qt,Zt,Jt,ge=S(()=>{"use strict";Q();ce();J();ze=new Map;Qt={prompt:["text","audio","audioUrl","systemPrompt","context","maxTokens","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","topK","temperature","userSelectedCategories","userSelectedSubcategories","userSelectedTags"],writer:["text","outputLanguage","instruction","context","tone","format","length","knowledgeBaseId","disableKB"],rewriter:["text","outputLanguage","instruction","context","tone","format","length"],summarizer:["text","outputLanguage","instruction","context","type","format","length"],translator:["text","sourceLanguage","targetLanguage"],"language-detector":["text","maxCandidates"],proofreader:["text","expectedInputLanguages"]};Zt={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},Jt={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function on(e,t,n){let r=-1;for(let a=n-1;a>=t;a--){let o=e[a],i=a+1<e.length?e[a+1]:"";if((o==="."||o==="!"||o==="?")&&(i===" "||i===`
|
|
2
|
+
`||i==="\r"||a===e.length-1)){r=a+1;break}}return r>t+(n-t)*.5?r:-1}function sn(e,t,n){let r=-1;for(let a=n-1;a>=t;a--){let o=e[a],i=a+1<e.length?e[a+1]:"";if((o===","||o===";"||o===":")&&(i===" "||i===`
|
|
3
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
|
-
`,a);if(i>r+t*.5)a=i+2;else{let s=
|
|
5
|
+
`,a);if(i>r+t*.5)a=i+2;else{let s=on(e,r,a);if(s>0)a=s;else{let u=sn(e,r,a);if(u>0)a=u;else{let c=e.lastIndexOf(" ",a);c>r+t*.5&&(a=c+1)}}}}let o=e.substring(r,a).trim();o.length>0&&n.push({text:o,start:r,end:a}),r=a}return n}var qe=S(()=>{"use strict"});var ct={};ie(ct,{detectLanguage:()=>Sn,getPromptOptions:()=>ut,getProofreadOptions:()=>Je,getRewriteOptions:()=>Ze,getSummarizeOptions:()=>et,getTranslateOptions:()=>tt,getWriteOptions:()=>Xe,prompt:()=>Kn,proofread:()=>xn,rewrite:()=>An,sendChatMessage:()=>Mn,sendFeedbackMessage:()=>Dn,sendSearchMessage:()=>Fn,summarize:()=>Pn,translate:()=>G,write:()=>vn});import{getGateyPlugin as un}from"@smart-cloud/gatey-core";import{getWpSuite as Ye}from"@smart-cloud/wpsuite-core";import{I18n as ye}from"aws-amplify/utils";function fe(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(fe).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+fe(t[r])).join(",")+"}"}function cn(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function ln(e,t){return`${e}:${cn(fe(t))}`}function me(){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<=Ge)){r.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of r){if(e.get(n).length<=Ge)break;if(!(a.refCount>0)){try{a.destroy()}catch{}P.delete(a.key),e.set(n,(e.get(n)??[]).filter(o=>o.key!==a.key))}}}if(P.size<=He)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<=He)break;if(!(n.refCount>0)){try{n.destroy()}catch{}P.delete(n.key)}}}async function E(e,t,n,r){let a=ln(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(),me())}};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),me(),{model:u,fromCache:!1,release:()=>{let d=P.get(a);d&&(d.refCount=Math.max(0,d.refCount-1),d.lastUsed=Date.now(),me())}}})().catch(u=>{throw H.delete(a),u});return H.set(a,s),s}function L(){return(Ye()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function p(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function _(){return Ye()?.plugins?.aiKit?.settings?.sharedContext??void 0}function O(e){return e?.context??"admin"}function K(e,t=dn){let n=new AbortController,r=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,i,s=!1,u=()=>{if(n.signal.aborted)return;let c=typeof r?.reason<"u"?r?.reason:void 0;n.abort(c??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?u():r.addEventListener("abort",u)),o&&o>0&&(i=setTimeout(()=>{n.signal.aborted||(s=!0,n.abort(new be(o)))},o)),{signal:n.signal,timedOut:()=>s,dispose:()=>{i&&(clearTimeout(i),i=void 0),r&&r.removeEventListener("abort",u)}}}function re(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function pn(e,t,n,r){let a=re(e),o=await it(e.images,n,t,r);return{text:e.messages.filter(i=>i.role==="user").map(i=>i.content).join(`
|
|
6
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(`
|
|
7
|
+
`),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function gn(e,t,n,r){let a=re(e),o=await it(e.images,n,t,r),i=await st(e.audio,n,t,r);return{sessionId:e.sessionId,text:e.message,images:o?.images,imageUrls:o?.imageUrls,audio:i?.audio,audioUrl:i?.audioUrl,context:e.sessionId?void 0:e.sharedContext,maxTokens:e.maxTokens,saveChatSession:!0,...a}}async function mn(e,t,n,r){let a=re(e),o=await st(e.audio,n,t,r);return{engine:"kb_rag",sessionId:e.sessionId,text:e.query,audio:o?.audio,audioUrl:o?.audioUrl,maxTokens:e.maxTokens,topK:e.topK,context:e.sessionId?void 0:e.sharedContext,saveChatSession:!1,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...a}}async function fn(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function bn(e){let t=re(e);return{text:e.prompt,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length,...t}}function yn(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function wn(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function kn(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function hn(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Cn(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function M(e,t,n,r,a,o,i,s){p(r,e,s,{step:"decide",message:"Deciding capability",silent:n});let u=await te(r,a,t,e);p(r,e,s,{step:"decide",source:u.source,message:`Using ${u.source}`,silent:n});let c=!1;if(u.source==="on-device")try{let l=await o();return p(r,e,s,{step:"done",source:"on-device",silent:n}),l}catch(l){console.error(`Error in on-device ${r}:`,l),p(r,e,s,{step:"error",source:"on-device",message:l.message,silent:n}),s?.signal?.throwIfAborted(),l instanceof DOMException&&l.name==="QuotaExceededError"&&(c=!0)}if(u.mode!=="local-only"&&u.backendAvailable){p(r,e,s,{step:"backend:request",source:"backend",silent:n});let l=typeof i=="function"?await i(u):i,m=await U(u,e,r,l,s);return p(r,e,s,{step:"done",source:"backend",silent:n}),m}let d=c?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":u.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${d}`)}function Tn(e){let t=Array.isArray(e.images)&&e.images.length>0,n=e.images??[],r=t?n.map(o=>({type:"image",value:o})):[],a;if(typeof e.messages=="string")a=t?[{role:"user",content:[{type:"text",value:e.messages},...r]}]:e.messages;else{let o=e.messages.filter(i=>i.role!=="system").map(i=>({role:i.role==="assistant"?"assistant":"user",content:i.content}));if(t){let i=-1;for(let s=o.length-1;s>=0;s--)if(o[s].role==="user"){i=s;break}if(i===-1)o.push({role:"user",content:[{type:"text",value:""},...r]});else{let s=String(o[i].content??"");o[i]={...o[i],content:[{type:"text",value:s},...r]}}}a=o}return a}function Ln(e){return typeof Blob<"u"&&e instanceof Blob}function On(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Rn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function Bn(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":(t.includes("webm"),"webm")}function In(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":"webm"}async function En(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function rt(e){let t=await En(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function at(e,t,n,r,a,o){if(!e.backendAvailable)throw new Error("Backend not available for signed URL request");let i=t==="admin"?"/admin/generate-upload-url":"/frontend/generate-upload-url",s={...o?.headers??{}},u=await q(t,s);if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new Error("Backend base URL not available for signed URL request");let g=new URLSearchParams({fileName:n,contentType:r,contentLength:String(a)}).toString(),y=`${e.backendBaseUrl.replace(/\/+$/,"")}${i}?${g}`,f=await fetch(y,{method:"GET",headers:u,signal:o?.signal,credentials:"omit"});if(!f.ok){let k=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${k?": "+k.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let c=un(),d={fileName:n,contentType:r,contentLength:a};if(c?.cognito?.get){let g=c.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((f,b)=>(f[b]=String(d[b]),f),{}),headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{g.cancel()});let y=await g.response.then(f=>f.body.json());if(!y?.uploadUrl||!y?.key)throw new Error("generate-upload-url (gatey get) response missing uploadUrl/key");return{uploadUrl:y.uploadUrl,key:y.key}}if(!c?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=c.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:u,retryStrategy:{strategy:"no-retry"}}});o?.signal?.addEventListener?.("abort",()=>{l.cancel()});let m=await l.response.then(g=>g.body.json());if(!m?.uploadUrl||!m?.key)throw new Error("generate-upload-url (gatey post) response missing uploadUrl/key");return{uploadUrl:m.uploadUrl,key:m.key}}async function ot(e,t,n,r){let a=await fetch(e,{method:"PUT",headers:{"Content-Type":n||"application/octet-stream"},body:t,signal:r?.signal});if(!a.ok){let o=await a.text().catch(()=>"");throw new Error(`S3 upload failed: HTTP ${a.status}${o?": "+o.substring(0,200):""}`)}}async function it(e,t,n,r){if(!e||e.length===0)return;let a=[];for(let c of e){if(!Ln(c))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(c)}let o=a.reduce((c,d)=>c+(d.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=nt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let c=[];for(let d of a)c.push({format:Rn(d.type),data:await rt(d)});return{images:c}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let u=[];for(let c=0;c<a.length;c++){let d=a[c],l=d.type||"application/octet-stream",m=d.name||`image_${c}.${On(l)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await at(t,n,m,l,d.size||0,r);p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await ot(g,d,l,r),u.push(y)}return{imageUrls:u}}async function st(e,t,n,r){if(!e)return;let a=e.size||0;if(Math.ceil(a*1.37+2048)<=nt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=In(e.type||"audio/webm"),m=await rt(e);return{audio:{format:l,data:m}}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading audio via signed URL"});let s=e.type||"audio/webm",u=e.name||`audio.${Bn(s)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:d}=await at(t,n,u,s,e.size||0,r);return p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await ot(c,e,s,r),{audioUrl:d}}var He,Ge,P,H,dn,Qe,be,Xe,vn,Ze,An,Je,xn,et,Pn,Sn,tt,G,nt,ut,Kn,Mn,Fn,Dn,lt=S(()=>{"use strict";ge();de();pt();qe();He=8,Ge=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()});dn=45e3,Qe=5e3,be=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Xe=e=>{let t=e.outputLanguage?e.outputLanguage:L(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},vn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;I(a)||(i=!0,a="en");let s=Xe({...e,outputLanguage:a});return M(n,t?.modeOverride,!1,"writer",s,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");p("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=K(t);try{let{model:c,release:d}=await E("writer",{core:s,sharedContext:r},()=>Writer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("writer",n,t,{step:"on-device:ready",source:"on-device"});try{p("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await c.measureInputUsage(e.prompt,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=ne(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let k=0;k<f.length;k++){let z=ye.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:z});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})),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()}},
|
|
9
|
+
`)}}return m||(l=await c.write(e.prompt,{context:e.context,signal:u.signal})),i?{result:(await G({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:u.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying writer:",l)}}}finally{u.dispose()}},bn({...e,sharedContext:r,outputLanguage:o}),t)},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)},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=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 z=ye.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:z});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})),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()}},
|
|
11
|
+
`)}}return m||(l=await c.rewrite(e.text,{context:e.context,signal:u.signal})),i?{result:(await G({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:u.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{u.dispose()}},yn({...e,sharedContext:r,outputLanguage:o}),t)},Je=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),xn=async(e,t)=>{let n=O(t),r=await Je();return M(n,t?.modeOverride,!1,"proofreader",r,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");p("proofreader",n,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=K(t);try{let{model:o,release:i}=await E("proofreader",{core:r},()=>Proofreader.create({...r,monitor(s){s.addEventListener("downloadprogress",u=>{let c=u.loaded;p("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),s=>s.destroy());p("proofreader",n,t,{step:"on-device:ready",source:"on-device"});try{return p("proofreader",n,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await o.proofread(e.text,{signal:a.signal})}}finally{try{i()}catch(s){console.error("Error destroying proofreader:",s)}}}finally{a.dispose()}},Cn(e),t)},et=e=>{let t=e.outputLanguage?e.outputLanguage:L(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Pn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;I(a)||(i=!0,a="en");let s=await et({...e,outputLanguage:a});return M(n,t?.modeOverride,!1,"summarizer",s,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");p("summarizer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=K(t);try{let{model:c,release:d}=await E("summarizer",{core:s,sharedContext:r},()=>Summarizer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{p("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),m=c.inputQuota;if(l>m){let y=ne(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let ae=ye.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 z=await c.summarize(y[b].text,{context:e.context,signal:u.signal});f.push(z)}e.text=f.join(`
|
|
12
12
|
|
|
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()}},
|
|
13
|
+
`)}}let g=await c.summarize(e.text,{context:e.context,signal:u.signal});return i?{result:(await G({text:g,sourceLanguage:a,targetLanguage:o},{context:n,signal:u.signal})).result}:{result:g}}finally{try{d()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{u.dispose()}},wn({...e,sharedContext:r,outputLanguage:o}),t)},Sn=async(e,t)=>{let n=O(t);return M(n,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");p("language-detector",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let r=K(t,Qe);try{let{model:a,release:o}=await E("language-detector",{},()=>LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",s=>{let u=s.loaded;p("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),i=>i.destroy());p("language-detector",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return p("language-detector",n,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await a.detect(e.text,{signal:r.signal})).filter(s=>dt.find(u=>u.value===s.detectedLanguage))}}}finally{try{o()}catch(i){console.error("Error destroying language detector:",i)}}}finally{r.dispose()}},hn(e.text,t),t)},tt=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??L()??"en"};return Promise.resolve(t)},G=async(e,t)=>{let n=O(t),r=await tt({...e});return M(n,t?.modeOverride,t?.silent,"translator",r,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");p("translator",n,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let a=K(t,Qe);try{let{model:o,release:i}=await E("translator",{core:r},()=>Translator.create({...r,monitor(s){s.addEventListener("downloadprogress",u=>{let c=u.loaded;p("translator",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),s=>s.destroy());p("translator",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{p("translator",n,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let s=[],u=()=>{if(typeof a.signal.throwIfAborted=="function")a.signal.throwIfAborted();else if(a.signal.aborted)throw a.signal.reason??new DOMException("Aborted","AbortError")};for(let d of e.text.split(`
|
|
14
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()}},
|
|
15
|
+
`)}}finally{try{i()}catch(s){console.error("Error destroying translator:",s)}}}finally{a.dispose()}},kn(e.text,e.sourceLanguage,e.targetLanguage),t)};nt=4*1024*1024;ut=async e=>{let t=e.outputLanguage?e.outputLanguage:L();return I(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Kn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;I(a)||(i=!0,a="en");let s=await ut({...e,outputLanguage:a}),u=await te("prompt",s,t?.modeOverride,n);return M(n,t?.modeOverride,!1,"prompt",s,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");p("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&c.push(g.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let d=c.length>0?c.join(`
|
|
16
16
|
|
|
17
|
-
`):void 0,l=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(
|
|
17
|
+
`):void 0,l=d?[{role:"system",content:d}]:void 0,m=K(t);try{let{model:g,release:y}=await E("language-model",{core:s,initialPrompts:l},()=>LanguageModel.create({...s,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let k=b.loaded;p("prompt",n,t,{step:"on-device:download",source:"on-device",progress:k,loaded:k})})}}),f=>f.destroy());p("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{p("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(Tn(e),{signal:m.signal,responseConstraint:e.responseConstraint});return i?{result:(await G({text:f,sourceLanguage:a,targetLanguage:o},{context:n,signal:m.signal})).result}:{result:f}}finally{try{y()}catch(f){console.error("Error destroying LanguageModel:",f)}}}finally{m.dispose()}},await pn({...e,sharedContext:r},n,u,t),t)},Mn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a="prompt",o=await F(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await gn({sessionId:e.sessionId,message:e.message,audio:e.audio,images:e.images,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let u=await U(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),u},Fn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a="prompt",o=await F(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await mn({...e,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let u=await U(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),u},Dn=async(e,t)=>{let n="frontend",r="prompt",a=await F(),o={feature:r,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await fn({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});p(r,n,t,{step:"backend:request",source:"backend"});let s=await U(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s}});import{attachDefaultPluginRuntime as Un}from"@smart-cloud/wpsuite-core";import{__ as C}from"@wordpress/i18n";var dt,Y,Kr,Mr,Fr,Dr,Ur,_n,_r,w,zr,Nr,Vr,$r,Wr,jr,qr,Hr,Gr,Yr,Qr,Xr,Zr,Jr,ea,ta,na,pt=S(()=>{Q();Z();Ae();Z();xe();ce();Pe();Oe();J();dt=[{label:C("Arabic",h),value:"ar"},{label:C("Chinese",h),value:"zh"},{label:C("Dutch",h),value:"nl"},{label:C("English",h),value:"en"},{label:C("French",h),value:"fr"},{label:C("German",h),value:"de"},{label:C("Hebrew",h),value:"he"},{label:C("Hindi",h),value:"hi"},{label:C("Hungarian",h),value:"hu"},{label:C("Indonesian",h),value:"id"},{label:C("Italian",h),value:"it"},{label:C("Japanese",h),value:"ja"},{label:C("Korean",h),value:"ko"},{label:C("Norwegian",h),value:"no"},{label:C("Polish",h),value:"pl"},{label:C("Portuguese",h),value:"pt"},{label:C("Russian",h),value:"ru"},{label:C("Spanish",h),value:"es"},{label:C("Swedish",h),value:"sv"},{label:C("Thai",h),value:"th"},{label:C("Turkish",h),value:"tr"},{label:C("Ukrainian",h),value:"uk"}],Y=Promise.resolve().then(()=>(de(),_e)),Kr=async()=>(await Y).MIN_CHROME_VERSION,Mr=async(...e)=>(await Y).isOnDeviceLanguageSupported(...e),Fr=async(...e)=>(await Y).decideCapability(...e),Dr=async(...e)=>(await Y).checkOnDeviceAvailability(...e),Ur=async(...e)=>(await Y).resolveBackend(...e),_n=Promise.resolve().then(()=>(ge(),je)),_r=async(...e)=>(await _n).dispatchCustomBackend(...e),w=Promise.resolve().then(()=>(lt(),ct)),zr=async(...e)=>(await w).getWriteOptions(...e),Nr=async(...e)=>(await w).write(...e),Vr=async(...e)=>(await w).getRewriteOptions(...e),$r=async(...e)=>(await w).rewrite(...e),Wr=async(...e)=>(await w).getProofreadOptions(...e),jr=async(...e)=>(await w).proofread(...e),qr=async(...e)=>(await w).getSummarizeOptions(...e),Hr=async(...e)=>(await w).summarize(...e),Gr=async(...e)=>(await w).getTranslateOptions(...e),Yr=async(...e)=>(await w).translate(...e),Qr=async(...e)=>(await w).detectLanguage(...e),Xr=async(...e)=>(await w).getPromptOptions(...e),Zr=async(...e)=>(await w).prompt(...e),Jr=async(...e)=>(await w).sendChatMessage(...e),ea=async(...e)=>(await w).sendFeedbackMessage(...e),ta=async(...e)=>(await w).sendSearchMessage(...e),na=(e,t)=>{let n=globalThis.WpSuite,r=R();if(!r)throw console.error("AiKit plugin is not available"),new Error("AiKit plugin is not available");Un(r),r.status=r.status??"initializing";let a=ve();return r.features={store:a,renderFeature:async o=>await e({...o,store:await a}),renderSearchComponent:async o=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...o,store:await a})},write:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.write(...o)},rewrite:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.rewrite(...o)},proofread:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.proofread(...o)},summarize:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.summarize(...o)},translate:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.translate(...o)},detectLanguage:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.detectLanguage(...o)},prompt:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.prompt(...o)},sendChatMessage:async(...o)=>(await w).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await w).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await w).sendSearchMessage(...o)},a.then(()=>{r.status="available",n?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(o=>{r.status="error",console.error("AiKit plugin failed to initialize:",o),n?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(o)})}),r}});pt();export{Yn as AiKitChatbotIcon,Qn as AiKitDocSearchIcon,Gn as AiKitFeatureIcon,T as BackendError,er as DEFAULT_CHATBOT_AI_DISCLOSURE,tr as DEFAULT_DOC_SEARCH_AI_DISCLOSURE,ar as KNOWLEDGE_SYNC_CONTRACT_VERSION,le as KnowledgeSyncContractError,dt as LANGUAGE_OPTIONS,h as TEXT_DOMAIN,Ee as capabilityForCustomPath,Ie as capabilityForFeature,Dr as checkOnDeviceAvailability,sr as compareKnowledgeSourceVersions,Fr as decideCapability,Qr as detectLanguage,_r as dispatchBackend,nr as formatAiDisclosure,R as getAiKitPlugin,Kr as getMinChromeVersions,Xr as getPromptOptions,Wr as getProofreadOptions,Vr as getRewriteOptions,mt as getStore,Pt as getStoreDispatch,X as getStoreSelect,qr as getSummarizeOptions,Gr as getTranslateOptions,zr as getWriteOptions,na as initializeAiKit,Mr as isOnDeviceLanguageSupported,ur as knowledgeSyncSourceKey,Tt as observeStore,ir as parseKnowledgeSyncPolicyV1,or as parsePublicContentProjectionV1,Zr as prompt,jr as proofread,St as reloadConfig,Ur as resolveBackend,W as resolveBackendCompatibility,$r as rewrite,se as sanitizeAiKitConfig,Jr as sendChatMessage,ea as sendFeedbackMessage,ta as sendSearchMessage,Hr as summarize,j as supportsBackendCapability,Yr as translate,we as waitForAiKitReady,Nr as write};
|
package/dist/types.d.ts
CHANGED
|
@@ -57,7 +57,10 @@ export interface AiKitSettings {
|
|
|
57
57
|
* Keep this lightweight: most users will rely on defaults.
|
|
58
58
|
*/
|
|
59
59
|
defaultOutputLanguage?: AiKitLanguageCode;
|
|
60
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* @deprecated Configure the site-wide custom translations URL in WP Suite
|
|
62
|
+
* settings. This property remains as a fallback for rolling upgrades.
|
|
63
|
+
*/
|
|
61
64
|
customTranslationsUrl?: string;
|
|
62
65
|
/** Chat optimization: number of seconds a successful reCAPTCHA assessment remains valid for the current chat session. */
|
|
63
66
|
reCaptchaChatTtlSeconds?: number;
|
|
@@ -231,6 +234,7 @@ export type AiFeatureProps = AiWorkerProps & {
|
|
|
231
234
|
context?: ContextKind;
|
|
232
235
|
modeOverride?: AiModePreference;
|
|
233
236
|
autoRun?: boolean;
|
|
237
|
+
showLanguageSwitcher?: boolean;
|
|
234
238
|
onDeviceTimeout?: number;
|
|
235
239
|
editable?: boolean;
|
|
236
240
|
acceptButtonTitle?: string;
|
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.9",
|
|
4
4
|
"description": "AI Kit Core Package",
|
|
5
5
|
"author": "Smart Cloud Solutions Inc.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,6 +32,17 @@
|
|
|
32
32
|
},
|
|
33
33
|
"resolutions": {
|
|
34
34
|
"brace-expansion": "^5.0.9",
|
|
35
|
+
"@humanfs/node": "^0.16.8",
|
|
36
|
+
"esbuild": "^0.28.1",
|
|
37
|
+
"fast-xml-builder": "^1.3.0",
|
|
38
|
+
"fast-xml-parser": "^5.10.1",
|
|
39
|
+
"flatted": "^3.4.4",
|
|
40
|
+
"picomatch": "^4.0.5",
|
|
41
|
+
"rollup": "^4.62.3"
|
|
42
|
+
},
|
|
43
|
+
"overrides": {
|
|
44
|
+
"brace-expansion": "^5.0.9",
|
|
45
|
+
"@humanfs/node": "^0.16.8",
|
|
35
46
|
"esbuild": "^0.28.1",
|
|
36
47
|
"fast-xml-builder": "^1.3.0",
|
|
37
48
|
"fast-xml-parser": "^5.10.1",
|
|
@@ -40,35 +51,35 @@
|
|
|
40
51
|
"rollup": "^4.62.3"
|
|
41
52
|
},
|
|
42
53
|
"dependencies": {
|
|
43
|
-
"@smart-cloud/gatey-core": "^2.3.
|
|
44
|
-
"@smart-cloud/wpsuite-core": "^2.
|
|
54
|
+
"@smart-cloud/gatey-core": "^2.3.7",
|
|
55
|
+
"@smart-cloud/wpsuite-core": "^2.4.1",
|
|
45
56
|
"aws-amplify": "^6.20.0"
|
|
46
57
|
},
|
|
47
58
|
"peerDependencies": {
|
|
48
|
-
"@wordpress/data": "^10.
|
|
49
|
-
"@wordpress/i18n": "^6.
|
|
59
|
+
"@wordpress/data": "^10.54.0",
|
|
60
|
+
"@wordpress/i18n": "^6.27.0",
|
|
50
61
|
"react": "^18.3.1"
|
|
51
62
|
},
|
|
52
63
|
"devDependencies": {
|
|
53
64
|
"@aws-amplify/core": "^6.18.0",
|
|
54
|
-
"@smart-cloud/aws-amplify-ui": "6.15.5",
|
|
55
|
-
"@smart-cloud/aws-amplify-ui-react": "6.15.5",
|
|
56
65
|
"@eslint/js": "^10.0.1",
|
|
66
|
+
"@smart-cloud/aws-amplify-ui": "6.15.7-preview.1",
|
|
67
|
+
"@smart-cloud/aws-amplify-ui-react": "6.15.7-preview.1",
|
|
57
68
|
"@types/dom-chromium-ai": "^0.0.17",
|
|
58
|
-
"@types/node": "^26.1
|
|
59
|
-
"@types/react": "^18.3.
|
|
69
|
+
"@types/node": "^26.4.1",
|
|
70
|
+
"@types/react": "^18.3.31",
|
|
60
71
|
"@types/react-dom": "^18.3.7",
|
|
61
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
62
|
-
"@typescript-eslint/parser": "^8.
|
|
63
|
-
"@wordpress/data": "^10.
|
|
64
|
-
"@wordpress/i18n": "^6.
|
|
65
|
-
"eslint": "^10.
|
|
66
|
-
"globals": "^17.
|
|
67
|
-
"jose": "^6.2.
|
|
72
|
+
"@typescript-eslint/eslint-plugin": "^8.69.0",
|
|
73
|
+
"@typescript-eslint/parser": "^8.69.0",
|
|
74
|
+
"@wordpress/data": "^10.54.0",
|
|
75
|
+
"@wordpress/i18n": "^6.27.0",
|
|
76
|
+
"eslint": "^10.10.0",
|
|
77
|
+
"globals": "^17.12.0",
|
|
78
|
+
"jose": "^6.2.12",
|
|
68
79
|
"react": "^18.3.1",
|
|
69
80
|
"react-dom": "^18.3.1",
|
|
70
81
|
"tsup": "^8.5.1",
|
|
71
82
|
"typescript": "^6.0.3",
|
|
72
|
-
"typescript-eslint": "^8.
|
|
83
|
+
"typescript-eslint": "^8.69.0"
|
|
73
84
|
}
|
|
74
85
|
}
|