@smart-cloud/ai-kit-core 1.5.7 → 1.5.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +9 -9
- package/dist/index.js +9 -9
- 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 St=Object.getOwnPropertyDescriptor;var Tt=Object.getOwnPropertyNames;var Lt=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})},Ot=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Tt(t))!Lt.call(e,a)&&a!==n&&ge(e,a,{get:()=>t[a],enumerable:!(r=St(t,a))||r.enumerable});return e};var Rt=e=>Ot(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 Oe,W,T,fe,be,te,Bt,It,Et,Kt,Mt,Re,j,Be,Ie,Ee,ne=S(()=>{"use strict";Oe=require("@smart-cloud/wpsuite-core"),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},Bt=async()=>{let e=O();if(!e)throw new Error("AI-Kit plugin is not available");return(0,Oe.loadTranslationCatalogs)(e.settings.customTranslationsUrl,{cacheVersion:be.lastUpdate})},It=async()=>{let e=te(await(0,W.getConfig)("aiKit")),t=await Bt();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Et={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})},Kt={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}},Mt={},Re=e=>{let t=(0,T.dispatch)(e);return delete t.setConfig,t},j=e=>(0,T.select)(e),Be=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)},Ie=async()=>{let e=await It(),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:Et,selectors:Kt,resolvers:Mt});return(0,T.register)(t),t},Ee=(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,Ke=S(()=>{"use strict";h="smartcloud-ai-kit"});var v,Ft,Dt,Ut,Me=S(()=>{"use strict";v=require("react/jsx-runtime"),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:"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"})]}),Dt=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"})]}),Ut=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 _t,zt,Nt,Fe=S(()=>{"use strict";_t="Answers from {name} are generated by AI and may contain mistakes. Check important information.",zt="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 De(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 Ue(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 _e(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 Vt(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 $t(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:Ue(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:De(t.modifiedGmt,"document.modifiedGmt"),metadata:t.metadata.map(Vt)}}function Wt(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=_e(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:De(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:$t(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:Ue(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):A("invalid_operation","projection.operation","Unsupported desired operation.")}function jt(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 qt(e,t){let n=BigInt(q(e,"candidateSourceVersion")),r=BigInt(q(t,"acceptedSourceVersion"));return n<r?"older":n>r?"newer":"same"}function Ht(e){let t=_e(e);return[t.producer,t.siteId,t.blogId,t.postType,t.postId].map(encodeURIComponent).join(":")}var Or,re,ze=S(()=>{"use strict";Or=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 Qt(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 Xt(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,$e.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=Ve.get(t);if(n&&n.expiresAt>Date.now())return n.value;let r;try{let a=await Xt(e);r=Qt(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 Ve.set(t,{expiresAt:Date.now()+Gt,value:r}),r}function U(e,t,n=1){if(e.status==="legacy")return n<=1&&Yt.has(t);let r=e.manifest?.capabilities[t];return typeof r=="number"&&r>=n}var $e,Ne,Gt,Yt,Ve,ae=S(()=>{"use strict";$e=require("@smart-cloud/gatey-core"),Ne="/meta/capabilities",Gt=300*1e3,Yt=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"]),Ve=new Map});var Xe={};J(Xe,{MIN_CHROME_VERSION:()=>Ge,checkOnDeviceAvailability:()=>Qe,decideCapability:()=>ie,isOnDeviceLanguageSupported:()=>E,resolveBackend:()=>_});async function qe(){let t=await(0,We.getWpSuite)()?.plugins?.aiKit?.features.store;return j(t).getConfig()??{}}function He(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 Zt(e){if(e.mode)return e.mode;let{transport:t}=He(e);return t?"backend-fallback":"local-only"}async function _(e){let t=await qe(),{transport:n,backendApiName:r,backendBaseUrl:a}=He(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,je.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 Ye(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 en(){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 tn(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?Ye(t[1]):void 0}function nn(){return!!navigator?.brave}async function rn(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 en(),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=nn()||/\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=Ye(a)??tn(t),g=Ge[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 Qe(e,t){try{let n=await rn(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 qe(),o=n||Zt(a),i=await _(we(r,e)),s=await Qe(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 We,je,Ge,Jt,he=S(()=>{"use strict";We=require("@smart-cloud/wpsuite-core"),je=require("@smart-cloud/gatey-core");ne();ae();Ge={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},Jt=new Set(["writer","rewriter","proofreader","prompt"])});var at={};J(at,{dispatchCustomBackend:()=>fn,dispatchFeatureBackend:()=>N,withRecaptchaHeaders:()=>Y});function an(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function on(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function sn(e,t){let n=on(t);if(n<=0)return!1;let r=Je.get(e);return r?Date.now()-r<n:!1}function Ce(e,t){let n=an(t);n&&Je.set(e,n)}function et(e,t){if(e!=="frontend"||!nt(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function tt(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 un(e,t){if(e!=="frontend")return;let n=(0,se.getWpSuite)()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&sn(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 un(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function z(e,t){try{e?.onStatus?.(t)}catch{}}function nt(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function ln(e,t){if(!nt(t))return t;let n=cn[e];if(!n)return t;let r={};for(let a of n)a in t&&(r[a]=t[a]);return r}function gn(e,t){return(e==="admin"?dn:pn)[t]}function mn(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function N(e,t,n,r,a={}){let o=gn(t,n);if(!o)throw new L(`No backend path configured for "${n}" (${t}).`,e);let i=ln(n,r);return rt(e,t,n,o,"POST",i,a)}async function fn(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=mn(t,n);return rt(e,t,"prompt",s,r,a,o)}async function rt(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 bn(e.backendBaseUrl,r,a,o,i,e,n,t)}if(!e.backendApiName)throw new L("backendTransport=gatey but backendApiName is missing.",e);return yn(e.backendApiName,r,a,o,i,e,n,t)}async function bn(e,t,n,r,a,o,i,s){let u=`${e.replace(/\/+$/,"")}${t}`,c={"content-type":"application/json",...a.headers??{}},d=i==="prompt"?et(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():"";z(a,{feature:i,context:s,step:"backend:request",source:"backend"}),z(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(z(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=tt(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 yn(e,t,n,r,a,o,i,s){let u=(0,Ze.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"?et(s,r):void 0,l=await Y(s,{...a.headers??{}},{cacheKey:d});z(a,{feature:i,context:s,step:"backend:request",source:"backend"}),z(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=tt(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),z(a,{feature:i,context:s,step:"backend:response",source:"backend"}),f}var Ze,se,Je,cn,dn,pn,ve=S(()=>{"use strict";Ze=require("@smart-cloud/gatey-core"),se=require("@smart-cloud/wpsuite-core");ee();ye();ae();Je=new Map;cn={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"]};dn={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},pn={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function wn(e,t,n){let r=-1;for(let a=n-1;a>=t;a--){let o=e[a],i=a+1<e.length?e[a+1]:"";if((o==="."||o==="!"||o==="?")&&(i===" "||i===`
|
|
2
|
+
`||i==="\r"||a===e.length-1)){r=a+1;break}}return r>t+(n-t)*.5?r:-1}function kn(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=wn(e,r,a);if(s>0)a=s;else{let u=kn(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 ot=S(()=>{"use strict"});var vt={};J(vt,{detectLanguage:()=>Dn,getPromptOptions:()=>Ct,getProofreadOptions:()=>pt,getRewriteOptions:()=>dt,getSummarizeOptions:()=>gt,getTranslateOptions:()=>mt,getWriteOptions:()=>lt,prompt:()=>jn,proofread:()=>Mn,rewrite:()=>Kn,sendChatMessage:()=>qn,sendFeedbackMessage:()=>Gn,sendSearchMessage:()=>Hn,summarize:()=>Fn,translate:()=>X,write:()=>En});function xe(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(xe).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+xe(t[r])).join(",")+"}"}function hn(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function Cn(e,t){return`${e}:${hn(xe(t))}`}function Ae(){let e=new Map;for(let n of P.values()){let r=e.get(n.kind)??[];r.push(n),e.set(n.kind,r)}for(let[n,r]of e.entries())if(!(r.length<=st)){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<=st)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<=it)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<=it)break;if(!(n.refCount>0)){try{n.destroy()}catch{}P.delete(n.key)}}}async function K(e,t,n,r){let a=Cn(e,t),o=P.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),P.delete(a),P.set(a,o),{model:o.model,fromCache:!0,release:()=>{let u=P.get(a);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),Ae())}};let i=Q.get(a);if(i)return i;let s=(async()=>{let u=await n(),c={kind:e,key:a,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>r(u)};return P.set(a,c),Q.delete(a),Ae(),{model:u,fromCache:!1,release:()=>{let d=P.get(a);d&&(d.refCount=Math.max(0,d.refCount-1),d.lastUsed=Date.now(),Ae())}}})().catch(u=>{throw Q.delete(a),u});return Q.set(a,s),s}function R(){return((0,Se.getWpSuite)()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function p(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function V(){return(0,Se.getWpSuite)()?.plugins?.aiKit?.settings?.sharedContext??void 0}function B(e){return e?.context??"admin"}function M(e,t=vn){let n=new AbortController,r=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,i,s=!1,u=()=>{if(n.signal.aborted)return;let c=typeof r?.reason<"u"?r?.reason:void 0;n.abort(c??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?u():r.addEventListener("abort",u)),o&&o>0&&(i=setTimeout(()=>{n.signal.aborted||(s=!0,n.abort(new Pe(o)))},o)),{signal:n.signal,timedOut:()=>s,dispose:()=>{i&&(clearTimeout(i),i=void 0),r&&r.removeEventListener("abort",u)}}}function le(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function An(e,t,n,r){let a=le(e),o=await kt(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 xn(e,t,n,r){let a=le(e),o=await kt(e.images,n,t,r),i=await ht(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 Pn(e,t,n,r){let a=le(e),o=await ht(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 Sn(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function Tn(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 Ln(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 On(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 Rn(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Bn(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function In(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 N(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 Un(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 _n(e){return typeof Blob<"u"&&e instanceof Blob}function zn(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 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":(t.includes("webm"),"webm")}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":"webm"}async function Wn(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 bt(e){let t=await Wn(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function yt(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,ut.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 wt(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 kt(e,t,n,r){if(!e||e.length===0)return;let a=[];for(let c of e){if(!_n(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)<=ft){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 bt(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}.${zn(l)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await yt(t,n,m,l,d.size||0,r);p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await wt(g,d,l,r),u.push(y)}return{imageUrls:u}}async function ht(e,t,n,r){if(!e)return;let a=e.size||0;if(Math.ceil(a*1.37+2048)<=ft){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=$n(e.type||"audio/webm"),m=await bt(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.${Vn(s)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:c,key:d}=await yt(t,n,u,s,e.size||0,r);return p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await wt(c,e,s,r),{audioUrl:d}}var ut,Se,ce,it,st,P,Q,vn,ct,Pe,lt,En,dt,Kn,pt,Mn,gt,Fn,Dn,mt,X,ft,Ct,jn,qn,Hn,Gn,At=S(()=>{"use strict";ut=require("@smart-cloud/gatey-core"),Se=require("@smart-cloud/wpsuite-core");ve();he();ce=require("aws-amplify/utils");xt();ot();it=8,st=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()});vn=45e3,ct=5e3,Pe=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};lt=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},En=async(e,t)=>{let n=B(t),r=e.sharedContext??V(),a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;E(a)||(i=!0,a="en");let s=lt({...e,outputLanguage:a});return F(n,t?.modeOverride,!1,"writer",s,async()=>{if(typeof Writer>"u")throw new Error("Writer API not available in this browser.");p("writer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Writer session"});let u=M(t);try{let{model:c,release:d}=await K("writer",{core:s,sharedContext:r},()=>Writer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("writer",n,t,{step:"on-device:ready",source:"on-device"});try{p("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await c.measureInputUsage(e.prompt,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=ue(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let k=0;k<f.length;k++){let $=ce.I18n.get("Writing part {current}/{total}...").replace("{current}",String(k+1)).replace("{total}",String(f.length));p("writer",n,t,{step:"on-device:run",source:"on-device",message:$});let pe=await c.write(f[k].text,{context:e.context,signal:u.signal});b.push(pe)}l=b.join(`
|
|
8
8
|
|
|
9
|
-
`)}}return m||(l=await c.write(e.prompt,{context:e.context,signal:u.signal})),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()}},Tn({...e,sharedContext:r,outputLanguage:o}),t)},dt=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Kn=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=dt({...e,outputLanguage:a});return F(n,t?.modeOverride,!1,"rewriter",s,async()=>{if(typeof Rewriter>"u")throw new Error("Rewriter API not available in this browser.");p("rewriter",n,t,{step:"on-device:init",source:"on-device",message:"Creating Rewriter session"});let u=M(t);try{let{model:c,release:d}=await K("rewriter",{core:s,sharedContext:r},()=>Rewriter.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{p("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l="",m=!1,g=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),y=c.inputQuota;if(g>y){let f=ue(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let k=0;k<f.length;k++){let $=ce.I18n.get("Rewriting part {current}/{total}...").replace("{current}",String(k+1)).replace("{total}",String(f.length));p("rewriter",n,t,{step:"on-device:run",source:"on-device",message:$});let pe=await c.rewrite(f[k].text,{context:e.context,signal:u.signal});b.push(pe)}l=b.join(`
|
|
10
10
|
|
|
11
|
-
`)}}return m||(l=await c.rewrite(e.text,{context:e.context,signal:u.signal})),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()}},Ln({...e,sharedContext:r,outputLanguage:o}),t)},pt=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Mn=async(e,t)=>{let n=B(t),r=await pt();return F(n,t?.modeOverride,!1,"proofreader",r,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");p("proofreader",n,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=M(t);try{let{model:o,release:i}=await K("proofreader",{core:r},()=>Proofreader.create({...r,monitor(s){s.addEventListener("downloadprogress",u=>{let c=u.loaded;p("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),s=>s.destroy());p("proofreader",n,t,{step:"on-device:ready",source:"on-device"});try{return p("proofreader",n,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await o.proofread(e.text,{signal:a.signal})}}finally{try{i()}catch(s){console.error("Error destroying proofreader:",s)}}}finally{a.dispose()}},In(e),t)},gt=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Fn=async(e,t)=>{let n=B(t),r=e.sharedContext??V(),a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;E(a)||(i=!0,a="en");let s=await gt({...e,outputLanguage:a});return F(n,t?.modeOverride,!1,"summarizer",s,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");p("summarizer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=M(t);try{let{model:c,release:d}=await K("summarizer",{core:s,sharedContext:r},()=>Summarizer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{p("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),m=c.inputQuota;if(l>m){let y=ue(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let de=ce.I18n.get("Summarizing part {current}/{total}...").replace("{current}",String(b+1)).replace("{total}",String(y.length));p("summarizer",n,t,{step:"on-device:run",source:"on-device",message:de});let $=await c.summarize(y[b].text,{context:e.context,signal:u.signal});f.push($)}e.text=f.join(`
|
|
12
12
|
|
|
13
|
-
`)}}let g=await c.summarize(e.text,{context:e.context,signal:u.signal});return 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()}},On({...e,sharedContext:r,outputLanguage:o}),t)},Dn=async(e,t)=>{let n=B(t);return F(n,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");p("language-detector",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let r=M(t,ct);try{let{model:a,release:o}=await K("language-detector",{},()=>LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",s=>{let u=s.loaded;p("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),i=>i.destroy());p("language-detector",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return p("language-detector",n,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await a.detect(e.text,{signal:r.signal})).filter(s=>Te.find(u=>u.value===s.detectedLanguage))}}}finally{try{o()}catch(i){console.error("Error destroying language detector:",i)}}}finally{r.dispose()}},Bn(e.text,t),t)},mt=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 mt({...e});return F(n,t?.modeOverride,t?.silent,"translator",r,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");p("translator",n,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let a=M(t,ct);try{let{model:o,release:i}=await K("translator",{core:r},()=>Translator.create({...r,monitor(s){s.addEventListener("downloadprogress",u=>{let c=u.loaded;p("translator",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),s=>s.destroy());p("translator",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{p("translator",n,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let s=[],u=()=>{if(typeof a.signal.throwIfAborted=="function")a.signal.throwIfAborted();else if(a.signal.aborted)throw a.signal.reason??new DOMException("Aborted","AbortError")};for(let d of e.text.split(`
|
|
14
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()}},Rn(e.text,e.sourceLanguage,e.targetLanguage),t)};ft=4*1024*1024;Ct=async e=>{let t=e.outputLanguage?e.outputLanguage:R();return E(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},jn=async(e,t)=>{let n=B(t),r=e.sharedContext??V(),a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;E(a)||(i=!0,a="en");let s=await Ct({...e,outputLanguage:a}),u=await ie("prompt",s,t?.modeOverride,n);return F(n,t?.modeOverride,!1,"prompt",s,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");p("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&c.push(g.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let d=c.length>0?c.join(`
|
|
16
16
|
|
|
17
|
-
`):void 0,l=d?[{role:"system",content:d}]:void 0,m=M(t);try{let{model:g,release:y}=await K("language-model",{core:s,initialPrompts:l},()=>LanguageModel.create({...s,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let k=b.loaded;p("prompt",n,t,{step:"on-device:download",source:"on-device",progress:k,loaded:k})})}}),f=>f.destroy());p("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{p("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(
|
|
17
|
+
`):void 0,l=d?[{role:"system",content:d}]:void 0,m=M(t);try{let{model:g,release:y}=await K("language-model",{core:s,initialPrompts:l},()=>LanguageModel.create({...s,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let k=b.loaded;p("prompt",n,t,{step:"on-device:download",source:"on-device",progress:k,loaded:k})})}}),f=>f.destroy());p("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{p("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(Un(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 An({...e,sharedContext:r},n,u,t),t)},qn=async(e,t)=>{let n=B(t),r=e.sharedContext??V(),a="prompt",o=await _(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await xn({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 N(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),u},Hn=async(e,t)=>{let n=B(t),r=e.sharedContext??V(),a="prompt",o=await _(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await Pn({...e,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let u=await N(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),u},Gn=async(e,t)=>{let n="frontend",r="prompt",a=await _(),o={feature:r,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await Sn({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});p(r,n,t,{step:"backend:request",source:"backend"});let s=await N(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s}});var kr={};J(kr,{AiKitChatbotIcon:()=>Dt,AiKitDocSearchIcon:()=>Ut,AiKitFeatureIcon:()=>Ft,BackendError:()=>L,DEFAULT_CHATBOT_AI_DISCLOSURE:()=>_t,DEFAULT_DOC_SEARCH_AI_DISCLOSURE:()=>zt,KNOWLEDGE_SYNC_CONTRACT_VERSION:()=>Or,KnowledgeSyncContractError:()=>re,LANGUAGE_OPTIONS:()=>Te,TEXT_DOMAIN:()=>h,capabilityForCustomPath:()=>ke,capabilityForFeature:()=>we,checkOnDeviceAvailability:()=>Zn,compareKnowledgeSourceVersions:()=>qt,decideCapability:()=>Xn,detectLanguage:()=>pr,dispatchBackend:()=>tr,formatAiDisclosure:()=>Nt,getAiKitPlugin:()=>O,getMinChromeVersions:()=>Yn,getPromptOptions:()=>gr,getProofreadOptions:()=>ir,getRewriteOptions:()=>ar,getStore:()=>Le,getStoreDispatch:()=>Re,getStoreSelect:()=>j,getSummarizeOptions:()=>ur,getTranslateOptions:()=>lr,getWriteOptions:()=>nr,initializeAiKit:()=>wr,isOnDeviceLanguageSupported:()=>Qn,knowledgeSyncSourceKey:()=>Ht,observeStore:()=>Ee,parseKnowledgeSyncPolicyV1:()=>jt,parsePublicContentProjectionV1:()=>Wt,prompt:()=>mr,proofread:()=>sr,reloadConfig:()=>Be,resolveBackend:()=>Jn,resolveBackendCompatibility:()=>D,rewrite:()=>or,sanitizeAiKitConfig:()=>te,sendChatMessage:()=>fr,sendFeedbackMessage:()=>br,sendSearchMessage:()=>yr,summarize:()=>cr,supportsBackendCapability:()=>U,translate:()=>dr,waitForAiKitReady:()=>me,write:()=>rr});module.exports=Rt(kr);var Pt,C,Te,Z,Yn,Qn,Xn,Zn,Jn,er,tr,w,nr,rr,ar,or,ir,sr,ur,cr,lr,dr,pr,gr,mr,fr,br,yr,wr,xt=S(()=>{Pt=require("@smart-cloud/wpsuite-core"),C=require("@wordpress/i18n");ee();ne();Ke();ne();Me();ye();Fe();ze();ae();Te=[{label:(0,C.__)("Arabic",h),value:"ar"},{label:(0,C.__)("Chinese",h),value:"zh"},{label:(0,C.__)("Dutch",h),value:"nl"},{label:(0,C.__)("English",h),value:"en"},{label:(0,C.__)("French",h),value:"fr"},{label:(0,C.__)("German",h),value:"de"},{label:(0,C.__)("Hebrew",h),value:"he"},{label:(0,C.__)("Hindi",h),value:"hi"},{label:(0,C.__)("Hungarian",h),value:"hu"},{label:(0,C.__)("Indonesian",h),value:"id"},{label:(0,C.__)("Italian",h),value:"it"},{label:(0,C.__)("Japanese",h),value:"ja"},{label:(0,C.__)("Korean",h),value:"ko"},{label:(0,C.__)("Norwegian",h),value:"no"},{label:(0,C.__)("Polish",h),value:"pl"},{label:(0,C.__)("Portuguese",h),value:"pt"},{label:(0,C.__)("Russian",h),value:"ru"},{label:(0,C.__)("Spanish",h),value:"es"},{label:(0,C.__)("Swedish",h),value:"sv"},{label:(0,C.__)("Thai",h),value:"th"},{label:(0,C.__)("Turkish",h),value:"tr"},{label:(0,C.__)("Ukrainian",h),value:"uk"}],Z=Promise.resolve().then(()=>(he(),Xe)),Yn=async()=>(await Z).MIN_CHROME_VERSION,Qn=async(...e)=>(await Z).isOnDeviceLanguageSupported(...e),Xn=async(...e)=>(await Z).decideCapability(...e),Zn=async(...e)=>(await Z).checkOnDeviceAvailability(...e),Jn=async(...e)=>(await Z).resolveBackend(...e),er=Promise.resolve().then(()=>(ve(),at)),tr=async(...e)=>(await er).dispatchCustomBackend(...e),w=Promise.resolve().then(()=>(At(),vt)),nr=async(...e)=>(await w).getWriteOptions(...e),rr=async(...e)=>(await w).write(...e),ar=async(...e)=>(await w).getRewriteOptions(...e),or=async(...e)=>(await w).rewrite(...e),ir=async(...e)=>(await w).getProofreadOptions(...e),sr=async(...e)=>(await w).proofread(...e),ur=async(...e)=>(await w).getSummarizeOptions(...e),cr=async(...e)=>(await w).summarize(...e),lr=async(...e)=>(await w).getTranslateOptions(...e),dr=async(...e)=>(await w).translate(...e),pr=async(...e)=>(await w).detectLanguage(...e),gr=async(...e)=>(await w).getPromptOptions(...e),mr=async(...e)=>(await w).prompt(...e),fr=async(...e)=>(await w).sendChatMessage(...e),br=async(...e)=>(await w).sendFeedbackMessage(...e),yr=async(...e)=>(await w).sendSearchMessage(...e),wr=(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,Pt.attachDefaultPluginRuntime)(r),r.status=r.status??"initializing";let a=Ie();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}});xt();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 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{loadTranslationCatalogs as bt}from"@smart-cloud/wpsuite-core";import{getConfig as Ce,getWpSuite as yt}from"@smart-cloud/wpsuite-core";import{createReduxStore as wt,dispatch as ve,register as kt,select as ht,subscribe as Ct}from"@wordpress/data";import{I18n as he}from"aws-amplify/utils";var se,ue,vt,At,xt,Pt,St,Tt,X,Lt,Ae,Ot,Z=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},vt=async()=>{let e=R();if(!e)throw new Error("AI-Kit plugin is not available");return bt(e.settings.customTranslationsUrl,{cacheVersion:se.lastUpdate})},At=async()=>{let e=ue(await Ce("aiKit")),t=await vt();return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},xt={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})},Pt={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}},St={},Tt=e=>{let t=ve(e);return delete t.setConfig,t},X=e=>ht(e),Lt=async e=>{yt().siteSettings.lastUpdate=Date.now();let t=await Ce("aiKit"),n=ue(t);ve(e).setConfig(n)},Ae=async()=>{let e=await At(),t=wt("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:xt,selectors:Pt,resolvers:St});return kt(t),t},Ot=(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=Ct(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 Zn,Jn,er,Pe=S(()=>{"use strict";Zn=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"})]}),Jn=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"})]}),er=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 ar,or,ir,Se=S(()=>{"use strict";ar="Answers from {name} are generated by AI and may contain mistakes. Check important information.",or="This summary was generated by AI and may contain mistakes. Check important information.",ir=(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 N(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:N(t.blogId,"source.blogId"),postType:x(t.postType,"source.postType",/^[a-z0-9_-]+$/),postId:N(t.postId,"source.postId")}}function Rt(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 Bt(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(Rt)}}function cr(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:N(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:Bt(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 lr(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 dr(e,t){let n=BigInt(N(e,"candidateSourceVersion")),r=BigInt(N(t,"acceptedSourceVersion"));return n<r?"older":n>r?"newer":"same"}function pr(e){let t=Oe(e);return[t.producer,t.siteId,t.blogId,t.postType,t.postId].map(encodeURIComponent).join(":")}var ur,de,Re=S(()=>{"use strict";ur=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 It}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 Mt(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 Ft(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=It()?.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 Ft(e);r=Mt(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()+Et,value:r}),r}function j(e,t,n=1){if(e.status==="legacy")return n<=1&&Kt.has(t);let r=e.manifest?.capabilities[t];return typeof r=="number"&&r>=n}var Be,Et,Kt,Ie,J=S(()=>{"use strict";Be="/meta/capabilities",Et=300*1e3,Kt=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 ze={};ie(ze,{MIN_CHROME_VERSION:()=>De,checkOnDeviceAvailability:()=>_e,decideCapability:()=>te,isOnDeviceLanguageSupported:()=>I,resolveBackend:()=>F});import{getWpSuite as Dt}from"@smart-cloud/wpsuite-core";import{getGateyPlugin as Ut}from"@smart-cloud/gatey-core";async function Me(){let t=await Dt()?.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 _t(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=Ut();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 Vt(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?Ue(t[1]):void 0}function $t(){return!!navigator?.brave}async function Wt(e){if(typeof navigator>"u")return{allowed:!1,reason:"no-navigator"};if(typeof globalThis.isSecureContext=="boolean"&&!globalThis.isSecureContext)return{allowed:!1,reason:"not-secure-context"};let t=navigator.userAgent??"",n=await 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=$t()||/\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)??Vt(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 Wt(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"?zt.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||_t(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,zt,pe=S(()=>{"use strict";Z();J();De={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},zt=new Set(["writer","rewriter","proofreader","prompt"])});var qe={};ie(qe,{dispatchCustomBackend:()=>an,dispatchFeatureBackend:()=>U,withRecaptchaHeaders:()=>q});import{getGateyPlugin as jt}from"@smart-cloud/gatey-core";import{getRecaptcha as qt,getWpSuite as Ht}from"@smart-cloud/wpsuite-core";function Gt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function Yt(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function Qt(e,t){let n=Yt(t);if(n<=0)return!1;let r=Ne.get(e);return r?Date.now()-r<n:!1}function ge(e,t){let n=Gt(t);n&&Ne.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 Xt(e,t){if(e!=="frontend")return;let n=Ht()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&Qt(t.cacheKey,R()?.settings||{}))return;let{execute:r}=await qt(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 Xt(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=Zt[e];if(!n)return t;let r={};for(let a of n)a in t&&(r[a]=t[a]);return r}function nn(e,t){return(e==="admin"?en:tn)[t]}function rn(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function U(e,t,n,r,a={}){let o=nn(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 an(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=rn(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 on(e.backendBaseUrl,r,a,o,i,e,n,t)}if(!e.backendApiName)throw new T("backendTransport=gatey but backendApiName is missing.",e);return sn(e.backendApiName,r,a,o,i,e,n,t)}async function on(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 sn(e,t,n,r,a,o,i,s){let u=jt(),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 Ne,Zt,en,tn,me=S(()=>{"use strict";Q();le();J();Ne=new Map;Zt={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"]};en={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},tn={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function un(e,t,n){let r=-1;for(let a=n-1;a>=t;a--){let o=e[a],i=a+1<e.length?e[a+1]:"";if((o==="."||o==="!"||o==="?")&&(i===" "||i===`
|
|
2
|
+
`||i==="\r"||a===e.length-1)){r=a+1;break}}return r>t+(n-t)*.5?r:-1}function cn(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=un(e,r,a);if(s>0)a=s;else{let u=cn(e,r,a);if(u>0)a=u;else{let c=e.lastIndexOf(" ",a);c>r+t*.5&&(a=c+1)}}}}let o=e.substring(r,a).trim();o.length>0&&n.push({text:o,start:r,end:a}),r=a}return n}var He=S(()=>{"use strict"});var lt={};ie(lt,{detectLanguage:()=>Ln,getPromptOptions:()=>ct,getProofreadOptions:()=>et,getRewriteOptions:()=>Je,getSummarizeOptions:()=>tt,getTranslateOptions:()=>nt,getWriteOptions:()=>Ze,prompt:()=>Fn,proofread:()=>Sn,rewrite:()=>Pn,sendChatMessage:()=>Dn,sendFeedbackMessage:()=>_n,sendSearchMessage:()=>Un,summarize:()=>Tn,translate:()=>G,write:()=>xn});import{getGateyPlugin as ln}from"@smart-cloud/gatey-core";import{getWpSuite as Qe}from"@smart-cloud/wpsuite-core";import{I18n as we}from"aws-amplify/utils";function be(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(be).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+be(t[r])).join(",")+"}"}function dn(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function pn(e,t){return`${e}:${dn(be(t))}`}function fe(){let e=new Map;for(let n of P.values()){let r=e.get(n.kind)??[];r.push(n),e.set(n.kind,r)}for(let[n,r]of e.entries())if(!(r.length<=Ye)){r.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of r){if(e.get(n).length<=Ye)break;if(!(a.refCount>0)){try{a.destroy()}catch{}P.delete(a.key),e.set(n,(e.get(n)??[]).filter(o=>o.key!==a.key))}}}if(P.size<=Ge)return;let t=Array.from(P.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(P.size<=Ge)break;if(!(n.refCount>0)){try{n.destroy()}catch{}P.delete(n.key)}}}async function E(e,t,n,r){let a=pn(e,t),o=P.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),P.delete(a),P.set(a,o),{model:o.model,fromCache:!0,release:()=>{let u=P.get(a);u&&(u.refCount=Math.max(0,u.refCount-1),u.lastUsed=Date.now(),fe())}};let i=H.get(a);if(i)return i;let s=(async()=>{let u=await n(),c={kind:e,key:a,model:u,refCount:1,lastUsed:Date.now(),destroy:()=>r(u)};return P.set(a,c),H.delete(a),fe(),{model:u,fromCache:!1,release:()=>{let d=P.get(a);d&&(d.refCount=Math.max(0,d.refCount-1),d.lastUsed=Date.now(),fe())}}})().catch(u=>{throw H.delete(a),u});return H.set(a,s),s}function L(){return(Qe()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function p(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function _(){return Qe()?.plugins?.aiKit?.settings?.sharedContext??void 0}function O(e){return e?.context??"admin"}function K(e,t=gn){let n=new AbortController,r=e?.signal,a=typeof e?.onDeviceTimeoutOverride=="number"?e.onDeviceTimeoutOverride:void 0,o=typeof a=="number"?a:t,i,s=!1,u=()=>{if(n.signal.aborted)return;let c=typeof r?.reason<"u"?r?.reason:void 0;n.abort(c??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?u():r.addEventListener("abort",u)),o&&o>0&&(i=setTimeout(()=>{n.signal.aborted||(s=!0,n.abort(new ye(o)))},o)),{signal:n.signal,timedOut:()=>s,dispose:()=>{i&&(clearTimeout(i),i=void 0),r&&r.removeEventListener("abort",u)}}}function re(e){let t=e;return{knowledgeBaseId:typeof t.knowledgeBaseId=="string"?t.knowledgeBaseId:void 0,disableKB:typeof t.disableKB=="boolean"?t.disableKB:void 0}}async function mn(e,t,n,r){let a=re(e),o=await st(e.images,n,t,r);return{text:e.messages.filter(i=>i.role==="user").map(i=>i.content).join(`
|
|
6
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 fn(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 bn(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 yn(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function wn(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 kn(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 hn(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 Cn(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function vn(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function An(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 On(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 Rn(e){return typeof Blob<"u"&&e instanceof Blob}function Bn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function In(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}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":(t.includes("webm"),"webm")}function Kn(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 Mn(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 Mn(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=ln(),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(!Rn(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:In(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}.${Bn(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=Kn(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.${En(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,gn,Xe,ye,Ze,xn,Je,Pn,et,Sn,tt,Tn,Ln,nt,G,rt,ct,Fn,Dn,Un,_n,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()});gn=45e3,Xe=5e3,ye=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Ze=e=>{let t=e.outputLanguage?e.outputLanguage:L(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},xn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;I(a)||(i=!0,a="en");let s=Ze({...e,outputLanguage:a});return M(n,t?.modeOverride,!1,"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=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: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()}},wn({...e,sharedContext:r,outputLanguage:o}),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)},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=Je({...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=we.get("Rewriting part {current}/{total}...").replace("{current}",String(k+1)).replace("{total}",String(f.length));p("rewriter",n,t,{step:"on-device:run",source:"on-device",message: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()}},kn({...e,sharedContext:r,outputLanguage:o}),t)},et=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Sn=async(e,t)=>{let n=O(t),r=await et();return M(n,t?.modeOverride,!1,"proofreader",r,async()=>{if(typeof Proofreader>"u")throw new Error("Proofreader API not available in this browser.");p("proofreader",n,t,{step:"on-device:init",source:"on-device",message:"Creating Proofreader session"});let a=K(t);try{let{model:o,release:i}=await E("proofreader",{core:r},()=>Proofreader.create({...r,monitor(s){s.addEventListener("downloadprogress",u=>{let c=u.loaded;p("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c})})}}),s=>s.destroy());p("proofreader",n,t,{step:"on-device:ready",source:"on-device"});try{return p("proofreader",n,t,{step:"on-device:run",source:"on-device",message:"Proofreading"}),{result:await o.proofread(e.text,{signal:a.signal})}}finally{try{i()}catch(s){console.error("Error destroying proofreader:",s)}}}finally{a.dispose()}},An(e),t)},tt=e=>{let t=e.outputLanguage?e.outputLanguage:L(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Tn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;I(a)||(i=!0,a="en");let s=await tt({...e,outputLanguage:a});return M(n,t?.modeOverride,!1,"summarizer",s,async()=>{if(typeof Summarizer>"u")throw new Error("Summarizer API not available in this browser.");p("summarizer",n,t,{step:"on-device:init",source:"on-device",message:"Creating Summarizer session"});let u=K(t);try{let{model:c,release:d}=await E("summarizer",{core:s,sharedContext:r},()=>Summarizer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{p("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await c.measureInputUsage(e.text,{context:e.context,signal:u.signal}),m=c.inputQuota;if(l>m){let y=ne(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let ae=we.get("Summarizing part {current}/{total}...").replace("{current}",String(b+1)).replace("{total}",String(y.length));p("summarizer",n,t,{step:"on-device:run",source:"on-device",message:ae});let 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()}},hn({...e,sharedContext:r,outputLanguage:o}),t)},Ln=async(e,t)=>{let n=O(t);return M(n,t?.modeOverride,t?.silent,"language-detector",void 0,async()=>{if(typeof LanguageDetector>"u")throw new Error("LanguageDetector API not available in this browser.");p("language-detector",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageDetector session",silent:t?.silent});let r=K(t,Xe);try{let{model:a,release:o}=await E("language-detector",{},()=>LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",s=>{let u=s.loaded;p("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,silent:t?.silent})})}}),i=>i.destroy());p("language-detector",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{return p("language-detector",n,t,{step:"on-device:run",source:"on-device",message:"Detecting language",silent:t?.silent}),{result:{candidates:(await a.detect(e.text,{signal:r.signal})).filter(s=>pt.find(u=>u.value===s.detectedLanguage))}}}finally{try{o()}catch(i){console.error("Error destroying language detector:",i)}}}finally{r.dispose()}},vn(e.text,t),t)},nt=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??L()??"en"};return Promise.resolve(t)},G=async(e,t)=>{let n=O(t),r=await nt({...e});return M(n,t?.modeOverride,t?.silent,"translator",r,async()=>{if(typeof Translator>"u")throw new Error("Translator API not available in this browser.");p("translator",n,t,{step:"on-device:init",source:"on-device",message:"Creating Translator session",silent:t?.silent});let a=K(t,Xe);try{let{model:o,release:i}=await E("translator",{core:r},()=>Translator.create({...r,monitor(s){s.addEventListener("downloadprogress",u=>{let c=u.loaded;p("translator",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,silent:t?.silent})})}}),s=>s.destroy());p("translator",n,t,{step:"on-device:ready",source:"on-device",silent:t?.silent});try{p("translator",n,t,{step:"on-device:run",source:"on-device",message:"Translating",silent:t?.silent});let s=[],u=()=>{if(typeof a.signal.throwIfAborted=="function")a.signal.throwIfAborted();else if(a.signal.aborted)throw a.signal.reason??new DOMException("Aborted","AbortError")};for(let d of e.text.split(`
|
|
14
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()}},Cn(e.text,e.sourceLanguage,e.targetLanguage),t)};rt=4*1024*1024;ct=async e=>{let t=e.outputLanguage?e.outputLanguage:L();return I(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Fn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;I(a)||(i=!0,a="en");let s=await ct({...e,outputLanguage:a}),u=await te("prompt",s,t?.modeOverride,n);return M(n,t?.modeOverride,!1,"prompt",s,async()=>{if(typeof LanguageModel>"u")throw new Error("LanguageModel API not available in this browser.");p("prompt",n,t,{step:"on-device:init",source:"on-device",message:"Creating LanguageModel session"});let c=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&c.push(g.content.trim());r&&r.trim()&&c.push("SHARED CONTEXT: "+r.trim())}let d=c.length>0?c.join(`
|
|
16
16
|
|
|
17
|
-
`):void 0,l=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(On(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 mn({...e,sharedContext:r},n,u,t),t)},Dn=async(e,t)=>{let n=O(t),r=e.sharedContext??_(),a="prompt",o=await F(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await fn({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},Un=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 bn({...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},_n=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 yn({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 zn}from"@smart-cloud/wpsuite-core";import{__ as C}from"@wordpress/i18n";var pt,Y,Ur,_r,zr,Nr,Vr,Nn,$r,w,Wr,jr,qr,Hr,Gr,Yr,Qr,Xr,Zr,Jr,ea,ta,na,ra,aa,oa,ia,gt=S(()=>{Q();Z();xe();Z();Pe();le();Se();Re();J();pt=[{label:C("Arabic",h),value:"ar"},{label:C("Chinese",h),value:"zh"},{label:C("Dutch",h),value:"nl"},{label:C("English",h),value:"en"},{label:C("French",h),value:"fr"},{label:C("German",h),value:"de"},{label:C("Hebrew",h),value:"he"},{label:C("Hindi",h),value:"hi"},{label:C("Hungarian",h),value:"hu"},{label:C("Indonesian",h),value:"id"},{label:C("Italian",h),value:"it"},{label:C("Japanese",h),value:"ja"},{label:C("Korean",h),value:"ko"},{label:C("Norwegian",h),value:"no"},{label:C("Polish",h),value:"pl"},{label:C("Portuguese",h),value:"pt"},{label:C("Russian",h),value:"ru"},{label:C("Spanish",h),value:"es"},{label:C("Swedish",h),value:"sv"},{label:C("Thai",h),value:"th"},{label:C("Turkish",h),value:"tr"},{label:C("Ukrainian",h),value:"uk"}],Y=Promise.resolve().then(()=>(pe(),ze)),Ur=async()=>(await Y).MIN_CHROME_VERSION,_r=async(...e)=>(await Y).isOnDeviceLanguageSupported(...e),zr=async(...e)=>(await Y).decideCapability(...e),Nr=async(...e)=>(await Y).checkOnDeviceAvailability(...e),Vr=async(...e)=>(await Y).resolveBackend(...e),Nn=Promise.resolve().then(()=>(me(),qe)),$r=async(...e)=>(await Nn).dispatchCustomBackend(...e),w=Promise.resolve().then(()=>(dt(),lt)),Wr=async(...e)=>(await w).getWriteOptions(...e),jr=async(...e)=>(await w).write(...e),qr=async(...e)=>(await w).getRewriteOptions(...e),Hr=async(...e)=>(await w).rewrite(...e),Gr=async(...e)=>(await w).getProofreadOptions(...e),Yr=async(...e)=>(await w).proofread(...e),Qr=async(...e)=>(await w).getSummarizeOptions(...e),Xr=async(...e)=>(await w).summarize(...e),Zr=async(...e)=>(await w).getTranslateOptions(...e),Jr=async(...e)=>(await w).translate(...e),ea=async(...e)=>(await w).detectLanguage(...e),ta=async(...e)=>(await w).getPromptOptions(...e),na=async(...e)=>(await w).prompt(...e),ra=async(...e)=>(await w).sendChatMessage(...e),aa=async(...e)=>(await w).sendFeedbackMessage(...e),oa=async(...e)=>(await w).sendSearchMessage(...e),ia=(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");zn(r),r.status=r.status??"initializing";let a=Ae();return r.features={store:a,renderFeature:async o=>await e({...o,store:await a}),renderSearchComponent:async o=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...o,store:await a})},write:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.write(...o)},rewrite:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.rewrite(...o)},proofread:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.proofread(...o)},summarize:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.summarize(...o)},translate:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.translate(...o)},detectLanguage:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.detectLanguage(...o)},prompt:async(...o)=>{let i=await w,s=o[1]||{};return o[1]={context:"frontend",...s},i.prompt(...o)},sendChatMessage:async(...o)=>(await w).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await w).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await w).sendSearchMessage(...o)},a.then(()=>{r.status="available",n?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(o=>{r.status="error",console.error("AiKit plugin failed to initialize:",o),n?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(o)})}),r}});gt();export{Jn as AiKitChatbotIcon,er as AiKitDocSearchIcon,Zn as AiKitFeatureIcon,T as BackendError,ar as DEFAULT_CHATBOT_AI_DISCLOSURE,or as DEFAULT_DOC_SEARCH_AI_DISCLOSURE,ur as KNOWLEDGE_SYNC_CONTRACT_VERSION,de as KnowledgeSyncContractError,pt as LANGUAGE_OPTIONS,h as TEXT_DOMAIN,Ke as capabilityForCustomPath,Ee as capabilityForFeature,Nr as checkOnDeviceAvailability,dr as compareKnowledgeSourceVersions,zr as decideCapability,ea as detectLanguage,$r as dispatchBackend,ir as formatAiDisclosure,R as getAiKitPlugin,Ur as getMinChromeVersions,ta as getPromptOptions,Gr as getProofreadOptions,qr as getRewriteOptions,ft as getStore,Tt as getStoreDispatch,X as getStoreSelect,Qr as getSummarizeOptions,Zr as getTranslateOptions,Wr as getWriteOptions,ia as initializeAiKit,_r as isOnDeviceLanguageSupported,pr as knowledgeSyncSourceKey,Ot as observeStore,lr as parseKnowledgeSyncPolicyV1,cr as parsePublicContentProjectionV1,na as prompt,Yr as proofread,Lt as reloadConfig,Vr as resolveBackend,W as resolveBackendCompatibility,Hr as rewrite,ue as sanitizeAiKitConfig,ra as sendChatMessage,aa as sendFeedbackMessage,oa as sendSearchMessage,Xr as summarize,j as supportsBackendCapability,Jr as translate,ke as waitForAiKitReady,jr as write};
|
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.8",
|
|
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.6",
|
|
55
|
+
"@smart-cloud/wpsuite-core": "^2.4.0",
|
|
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
|
}
|