@smart-cloud/ai-kit-core 1.5.12 → 1.5.14

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.
@@ -0,0 +1,99 @@
1
+ import type { ProcessedCitations, PromptResult } from "./types";
2
+ export declare const CHAT_STREAM_PROTOCOL_VERSION: 1;
3
+ export type ChatStreamActivityKind = "knowledge_search" | "web_search" | "web_read" | "calculation" | "script" | "validation" | "thinking" | "generating_response" | "checking_sources" | "other";
4
+ export type ChatStreamActivity = {
5
+ activityId: string;
6
+ kind: ChatStreamActivityKind;
7
+ labelKey: string;
8
+ labelParams?: Record<string, string | number>;
9
+ safeDomain?: string;
10
+ safeDomains?: string[];
11
+ query?: string;
12
+ categoryCount?: number;
13
+ subcategoryCount?: number;
14
+ tagCount?: number;
15
+ resultCount?: number;
16
+ urls?: string[];
17
+ status: "running" | "completed" | "failed";
18
+ };
19
+ export type ChatStreamClientCommand = {
20
+ version: typeof CHAT_STREAM_PROTOCOL_VERSION;
21
+ type: "turn.start";
22
+ requestId: string;
23
+ conversationId?: string;
24
+ locale?: string;
25
+ message: {
26
+ text: string;
27
+ };
28
+ } | {
29
+ version: typeof CHAT_STREAM_PROTOCOL_VERSION;
30
+ type: "turn.cancel";
31
+ requestId: string;
32
+ conversationId: string;
33
+ turnId: string;
34
+ } | {
35
+ version: typeof CHAT_STREAM_PROTOCOL_VERSION;
36
+ type: "turn.resume";
37
+ requestId: string;
38
+ conversationId: string;
39
+ turnId: string;
40
+ afterSeq: number;
41
+ };
42
+ type ChatStreamEnvelope<TType extends string, TPayload> = {
43
+ version: typeof CHAT_STREAM_PROTOCOL_VERSION;
44
+ conversationId: string;
45
+ turnId: string;
46
+ eventId: string;
47
+ seq: number;
48
+ timestamp: string;
49
+ type: TType;
50
+ payload: TPayload;
51
+ };
52
+ export type ChatStreamServerEvent = ChatStreamEnvelope<"turn.accepted", {
53
+ sessionId: string;
54
+ userMessageId: string;
55
+ assistantMessageId: string;
56
+ status: "queued" | "running";
57
+ }> | ChatStreamEnvelope<"activity.started" | "activity.completed" | "activity.failed", ChatStreamActivity> | ChatStreamEnvelope<"answer.delta", {
58
+ messageId: string;
59
+ text: string;
60
+ }> | ChatStreamEnvelope<"citation.upsert", {
61
+ messageId: string;
62
+ citation: {
63
+ citationId: string;
64
+ docId?: string;
65
+ chunkId?: string;
66
+ title?: string;
67
+ sourceUrl?: string;
68
+ snippet?: string;
69
+ };
70
+ }> | ChatStreamEnvelope<"answer.completed", {
71
+ messageId: string;
72
+ result: string;
73
+ citations?: ProcessedCitations;
74
+ activities?: ChatStreamActivity[];
75
+ completion: "complete" | "partial" | "truncated";
76
+ metadata?: PromptResult["metadata"];
77
+ }> | ChatStreamEnvelope<"turn.failed", {
78
+ code: string;
79
+ messageKey: string;
80
+ fallbackMessage?: string;
81
+ status?: number;
82
+ retryable: boolean;
83
+ correlationId: string;
84
+ }> | ChatStreamEnvelope<"turn.cancelled", {
85
+ reason: string;
86
+ }> | ChatStreamEnvelope<"turn.snapshot", {
87
+ lastSeq: number;
88
+ active: boolean;
89
+ result?: string;
90
+ citations?: ProcessedCitations;
91
+ activities: ChatStreamActivity[];
92
+ }>;
93
+ /**
94
+ * Performs the transport boundary checks shared by browser clients. Detailed
95
+ * payload validation remains event-specific in the reducer; malformed or future
96
+ * event types are ignored instead of being rendered as trusted content.
97
+ */
98
+ export declare function parseChatStreamServerEvent(value: unknown): ChatStreamServerEvent | undefined;
99
+ export {};
package/dist/index.cjs CHANGED
@@ -1,17 +1,17 @@
1
- "use strict";var pe=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 Z=(e,t)=>{for(var n in t)pe(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&&pe(e,a,{get:()=>t[a],enumerable:!(r=St(t,a))||r.enumerable});return e};var Rt=e=>Ot(pe({},"__esModule",{value:!0}),e);function O(){return globalThis.WpSuite?.plugins?.aiKit}async function ge(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=c=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),s&&clearTimeout(s),c()};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 ge(e);let n=O()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var J=S(()=>{"use strict"});var I,T,me,ee,Bt,Et,It,Kt,Oe,H,Re,Be,Ee,te=S(()=>{"use strict";I=require("@smart-cloud/wpsuite-core"),T=require("@wordpress/data"),me=require("aws-amplify/utils");J();ee=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},Bt=async()=>{let e=ee(await(0,I.getConfig)("aiKit")),t=await(0,I.getCustomTranslations)({legacyUrl:O()?.settings.customTranslationsUrl});return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Et={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?me.I18n.setLanguage(""):me.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},It={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},H=e=>(0,T.select)(e),Re=async e=>{(0,I.getWpSuite)().siteSettings.lastUpdate=Date.now();let t=await(0,I.getConfig)("aiKit"),n=ee(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:Et,selectors:It,resolvers:Kt});return(0,T.register)(t),t},Ee=(e,t,n)=>{let r;function a(){let i=H(e).getState(),s=t(i);if(s!==r){let c=r;r=s,n(r,c)}}let o=(0,T.subscribe)(a,e);return a(),o}});var C,Ie=S(()=>{"use strict";C="smartcloud-ai-kit"});var A,Mt,Dt,Ft,Ke=S(()=>{"use strict";A=require("react/jsx-runtime"),Mt=e=>(0,A.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,A.jsx)("path",{d:"M19 27H33"}),(0,A.jsx)("path",{d:"M19 33H33"}),(0,A.jsx)("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),(0,A.jsx)("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),(0,A.jsx)("path",{d:"M16 10V40H36V22"}),(0,A.jsx)("path",{d:"M16 10H22"}),(0,A.jsx)("path",{d:"M22 10V23H36"}),(0,A.jsx)("path",{d:"M22 10L36 22"})]}),Dt=e=>(0,A.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,A.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,A.jsx)("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),(0,A.jsx)("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),(0,A.jsx)("path",{d:"M16 24H32"})]}),Ft=e=>(0,A.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,A.jsx)("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),(0,A.jsx)("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),(0,A.jsx)("path",{d:"M42 42l-12 -12"}),(0,A.jsx)("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),(0,A.jsx)("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var L,fe=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 w(e,t,n){throw new ne(e,t,n)}function E(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&w("invalid_type",t,`${t} must be an object.`),e}function K(e,t,n){let r=new Set(t),a=Object.keys(e).find(o=>!r.has(o));a&&w("unknown_field",`${n}.${a}`,`${n}.${a} is not part of contract v1.`)}function P(e,t,n){(typeof e!="string"||e.trim()==="")&&w("invalid_string",t,`${t} must be a non-empty string.`);let r=e.trim();return n&&!n.test(r)&&w("invalid_format",t,`${t} has an invalid format.`),r}function N(e,t){return P(e,t,/^(?:0|[1-9][0-9]*)$/)}function be(e,t){let n=P(e,t);return(!/^\d{4}-\d{2}-\d{2}T/.test(n)||!Number.isFinite(Date.parse(n)))&&w("invalid_timestamp",t,`${t} must be an ISO-8601 timestamp.`),n}function ye(e,t){let n=P(e,t),r;try{r=new URL(n)}catch{w("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`)}return r.protocol!=="http:"&&r.protocol!=="https:"&&w("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`),n}function Vt(e,t){let n=P(e,t).replace(/_/g,"-");try{let r=new Intl.Locale(n).language.toLowerCase();if(!/^[a-z]{2,8}$/.test(r))throw new Error("invalid language");return r}catch{return w("invalid_locale",t,`${t} must be a valid BCP 47 locale.`)}}function we(e){let t=E(e,"source");return K(t,["producer","siteId","blogId","postType","postId"],"source"),t.producer!=="wordpress"&&w("unsupported_producer","source.producer","Only wordpress is supported in v1."),{producer:"wordpress",siteId:P(t.siteId,"source.siteId",/^[A-Za-z0-9._:-]+$/),blogId:N(t.blogId,"source.blogId"),postType:P(t.postType,"source.postType",/^[a-z0-9_-]+$/),postId:N(t.postId,"source.postId")}}function zt(e,t){let n=`document.metadata[${t}]`,r=E(e,n);return K(r,["namespace","slug","label"],n),{namespace:P(r.namespace,`${n}.namespace`,/^[a-z0-9_.:-]+$/),slug:P(r.slug,`${n}.slug`,/^[a-z0-9][a-z0-9._-]*$/),label:P(r.label,`${n}.label`)}}function De(e){let t=E(e,"document");return K(t,["profile","canonicalUrl","title","excerpt","content","contentType","contentSha256","modifiedGmt","metadata"],"document"),t.contentType!=="text/markdown"&&w("unsupported_content_type","document.contentType","Contract v1 supports text/markdown documents only."),Array.isArray(t.metadata)||w("invalid_type","document.metadata","document.metadata must be an array."),{profile:P(t.profile,"document.profile",/^[a-z0-9][a-z0-9._-]*$/),canonicalUrl:ye(t.canonicalUrl,"document.canonicalUrl"),title:P(t.title,"document.title"),excerpt:typeof t.excerpt=="string"?t.excerpt:"",content:P(t.content,"document.content"),contentType:"text/markdown",contentSha256:P(t.contentSha256,"document.contentSha256",/^[a-f0-9]{64}$/),modifiedGmt:be(t.modifiedGmt,"document.modifiedGmt"),metadata:t.metadata.map(zt)}}function jt(e){let t=E(e,"document");K(t,["profile","locale","canonicalUrl","title","excerpt","content","contentType","contentSha256","modifiedGmt","metadata"],"document");let n={...t};return delete n.locale,{...De(n),locale:Vt(t.locale,"document.locale")}}function Fe(e,t){let n=E(e,"projection");K(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==1&&w("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=we(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&w("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:P(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:be(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&w("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:De(n.document)}):n.operation==="delete"?(n.document!==null&&w("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:ye(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):w("invalid_operation","projection.operation","Unsupported desired operation.")}function Ue(e,t){let n=E(e,"projection");K(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==2&&w("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=we(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&w("source_boundary_mismatch","projection.source","Projection source does not match the authenticated producer boundary.");let a={schemaVersion:2,source:r,sourceVersion:N(n.sourceVersion,"projection.sourceVersion"),correlationId:P(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:be(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&w("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:jt(n.document)}):n.operation==="delete"?(n.document!==null&&w("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:ye(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):w("invalid_operation","projection.operation","Unsupported desired operation.")}function Wt(e,t){let n=E(e,"projection").schemaVersion;return n===1?Fe(e,t):n===2?Ue(e,t):w("unsupported_schema","projection.schemaVersion","Unsupported contract version.")}function $t(e){let t=E(e,"policy");K(t,["schemaVersion","postType","enabled","autoEnableSource","reviewPolicy","onPublish","onPublishedUpdate","onUnpublish","metadataRefresh","includeTaxonomies","documentProfile"],"policy"),t.schemaVersion!==1&&w("unsupported_schema","policy.schemaVersion","Unsupported policy version."),typeof t.enabled!="boolean"&&w("invalid_type","policy.enabled","policy.enabled must be boolean."),t.autoEnableSource!=="administrator"&&t.autoEnableSource!=="migration"&&t.autoEnableSource!=="system"&&w("invalid_policy","policy.autoEnableSource","Invalid auto-enable source."),t.reviewPolicy!=="wordpress-publish-is-approval"&&t.reviewPolicy!=="manual-kb-review"&&t.reviewPolicy!=="disabled"&&w("invalid_policy","policy.reviewPolicy","Invalid review policy."),(t.onPublish!=="upsert"||t.onPublishedUpdate!=="upsert"||t.onUnpublish!=="delete"||t.metadataRefresh!=="reconcile")&&w("invalid_policy","policy","Unsupported policy action in contract v1."),Array.isArray(t.includeTaxonomies)||w("invalid_type","policy.includeTaxonomies","policy.includeTaxonomies must be an array.");let n=[...new Set(t.includeTaxonomies.map((r,a)=>P(r,`policy.includeTaxonomies[${a}]`,/^[a-z0-9_-]+$/)))].sort();return{schemaVersion:1,postType:P(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:P(t.documentProfile,"policy.documentProfile",/^[a-z0-9][a-z0-9._-]*$/)}}function qt(e,t){let n=BigInt(N(e,"candidateSourceVersion")),r=BigInt(N(t,"acceptedSourceVersion"));return n<r?"older":n>r?"newer":"same"}function Ht(e){let t=we(e);return[t.producer,t.siteId,t.blogId,t.postType,t.postId].map(encodeURIComponent).join(":")}var Lr,Or,ne,_e=S(()=>{"use strict";Lr=1,Or=2,ne=class extends Error{constructor(n,r,a){super(a);this.code=n;this.field=r;this.name="KnowledgeSyncContractError"}code;field}});function ke(e,t){return`ai.${t}.${e}`}function he(e,t){if(t==="/conversation-profile")return e==="admin"?"ai.conversation-profile.admin":void 0;if(t==="/cost-policy")return e==="admin"?"ai.cost-policy.admin":void 0;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,ze.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 V(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 z(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 ze,Ne,Gt,Yt,Ve,re=S(()=>{"use strict";ze=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 Qe={};Z(Qe,{MIN_CHROME_VERSION:()=>He,checkOnDeviceAvailability:()=>Ye,decideCapability:()=>oe,isOnDeviceLanguageSupported:()=>D,resolveBackend:()=>j});async function $e(){let t=await(0,je.getWpSuite)()?.plugins?.aiKit?.features.store;return H(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 Zt(e){if(e.mode)return e.mode;let{transport:t}=qe(e);return t?"backend-fallback":"local-only"}async function j(e){let t=await $e(),{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 V({transport:n,baseUrl:a});return e&&!z(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 V({transport:n,apiName:r});return e&&!z(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 M(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 ae(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]?Ge(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=ae(n,"Microsoft Edge")??ae(n,"Microsoft Edge WebView2"),a=ae(n,"Google Chrome")??ae(n,"Chromium"),o=!!r||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),i=/\bOPR\//i.test(t),s=/\bVivaldi\//i.test(t),c=/\bSamsungBrowser\//i.test(t),u=/\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||c||u||d||l)return{allowed:!1,reason:o?"edge":l?"brave":u?"firefox":d?"safari":i?"opera":s?"vivaldi":c?"samsung":"unsupported-browser"};let m=Ge(a)??tn(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 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(!M("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(!M("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(!M("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(!M("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(!M("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(!M("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(!M("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 D(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function oe(e,t,n,r="admin"){let a=await $e(),o=n||Zt(a),i=await j(ke(r,e)),s=await Ye(e,t),c=s.available,u=i.available,d={feature:e,mode:o,onDeviceAvailable:c,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason,backendCompatibility:i.compatibility};return o==="local-only"?c?{...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"?u?{...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"})`}:c?{...d,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:u?{...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 je,We,He,Jt,Ce=S(()=>{"use strict";je=require("@smart-cloud/wpsuite-core"),We=require("@smart-cloud/gatey-core");te();re();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:()=>fn,dispatchFeatureBackend:()=>$,withRecaptchaHeaders:()=>G});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=Ze.get(e);return r?Date.now()-r<n:!1}function ve(e,t){let n=an(t);n&&Ze.set(e,n)}function Je(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 cn(e,t){if(e!=="frontend")return;let n=(0,ie.getWpSuite)()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&sn(t.cacheKey,O()?.settings||{}))return;let{execute:r}=await(0,ie.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 G(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await cn(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function W(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 ln(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 gn(e,t){return(e==="admin"?dn:pn)[t]}function mn(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function $(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 nt(e,t,n,o,"POST",i,a)}async function fn(e,t,n,r,a,o={}){let i=he(t,n);if(i){let c=await V({transport:e.backendTransport??"gatey",apiName:e.backendApiName,baseUrl:e.backendBaseUrl});if(!z(c,i))throw new L(`Backend does not support ${i}.`,{...e,backendCompatibility:c})}let s=mn(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 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 c=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...a.headers??{}},d=i==="prompt"?Je(s,r):void 0,l=await G(s,u,{cacheKey:d}),m=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([b,h])=>[b,String(h)])).toString():"";W(a,{feature:i,context:s,step:"backend:request",source:"backend"}),W(a,{feature:i,context:s,step:"backend:waiting",source:"backend"});let g=await fetch(c+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:a.signal,credentials:"omit"});if(W(a,{feature:i,context:s,step:"backend:response",source:"backend"}),!g.ok){let b=`HTTP ${g.status}`;try{let h=await g.text();h&&(b=`${b}: ${h.substring(0,400)}`)}catch{}throw new 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(),h=(b&&typeof b.sessionId=="string"&&b.sessionId.trim()?b.sessionId.trim():void 0)??d;return f&&h&&ve(h,f),b}return f&&d&&ve(d,f),await g.text()}async function yn(e,t,n,r,a,o,i,s){let c=(0,Xe.getGateyPlugin)(),u;switch(n.toUpperCase()){case"POST":u=c?.cognito?.post;break;case"GET":u=c?.cognito?.get;break;case"PUT":u=c?.cognito?.put;break;case"PATCH":u=c?.cognito?.patch;break;case"DELETE":u=c?.cognito?.del;break;default:throw new L(`Unsupported HTTP method "${n}" for Gatey backend.`,o)}if(!u)throw new L(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,o);let d=i==="prompt"?Je(s,r):void 0,l=await G(s,{...a.headers??{}},{cacheKey:d});W(a,{feature:i,context:s,step:"backend:request",source:"backend"}),W(a,{feature:i,context:s,step:"backend:waiting",source:"backend"});let m=u({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()&&ve(b.trim(),y),W(a,{feature:i,context:s,step:"backend:response",source:"backend"}),f}var Xe,ie,Ze,un,dn,pn,Ae=S(()=>{"use strict";Xe=require("@smart-cloud/gatey-core"),ie=require("@smart-cloud/wpsuite-core");J();fe();re();Ze=new Map;un={prompt:["text","audio","audioUrl","systemPrompt","context","maxTokens","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","locale","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===`
1
+ "use strict";var pe=Object.defineProperty;var Lt=Object.getOwnPropertyDescriptor;var Ot=Object.getOwnPropertyNames;var Rt=Object.prototype.hasOwnProperty;var P=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var Z=(e,t)=>{for(var n in t)pe(e,n,{get:t[n],enumerable:!0})},Et=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Ot(t))!Rt.call(e,a)&&a!==n&&pe(e,a,{get:()=>t[a],enumerable:!(r=Lt(t,a))||r.enumerable});return e};var It=e=>Et(pe({},"__esModule",{value:!0}),e);function O(){return globalThis.WpSuite?.plugins?.aiKit}async function ge(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=c=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),s&&clearTimeout(s),c()};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 ge(e);let n=O()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var J=P(()=>{"use strict"});var B,T,me,ee,Bt,Kt,Mt,Dt,Oe,H,Re,Ee,Ie,te=P(()=>{"use strict";B=require("@smart-cloud/wpsuite-core"),T=require("@wordpress/data"),me=require("aws-amplify/utils");J();ee=e=>{let t=e&&typeof e=="object"?e:{},n={};return typeof t.mode=="string"&&(n.mode=t.mode),typeof t.backendTransport=="string"&&(n.backendTransport=t.backendTransport),typeof t.backendApiName=="string"&&(n.backendApiName=t.backendApiName),typeof t.backendBaseUrl=="string"&&(n.backendBaseUrl=t.backendBaseUrl),typeof t.subscriptionType=="string"&&(n.subscriptionType=t.subscriptionType),typeof t.enableChatbot=="boolean"&&(n.enableChatbot=t.enableChatbot),typeof t.chatbot=="object"&&t.chatbot!==null&&(n.chatbot=t.chatbot),n},Bt=async()=>{let e=ee(await(0,B.getConfig)("aiKit")),t=await(0,B.getCustomTranslations)({legacyUrl:O()?.settings.customTranslationsUrl});return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Kt={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?me.I18n.setLanguage(""):me.I18n.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},Mt={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},Dt={},Oe=e=>{let t=(0,T.dispatch)(e);return delete t.setConfig,t},H=e=>(0,T.select)(e),Re=async e=>{(0,B.getWpSuite)().siteSettings.lastUpdate=Date.now();let t=await(0,B.getConfig)("aiKit"),n=ee(t);(0,T.dispatch)(e).setConfig(n)},Ee=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:Kt,selectors:Mt,resolvers:Dt});return(0,T.register)(t),t},Ie=(e,t,n)=>{let r;function a(){let i=H(e).getState(),s=t(i);if(s!==r){let c=r;r=s,n(r,c)}}let o=(0,T.subscribe)(a,e);return a(),o}});var C,Be=P(()=>{"use strict";C="smartcloud-ai-kit"});var A,Ut,_t,Ft,Ke=P(()=>{"use strict";A=require("react/jsx-runtime"),Ut=e=>(0,A.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,A.jsx)("path",{d:"M19 27H33"}),(0,A.jsx)("path",{d:"M19 33H33"}),(0,A.jsx)("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),(0,A.jsx)("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),(0,A.jsx)("path",{d:"M16 10V40H36V22"}),(0,A.jsx)("path",{d:"M16 10H22"}),(0,A.jsx)("path",{d:"M22 10V23H36"}),(0,A.jsx)("path",{d:"M22 10L36 22"})]}),_t=e=>(0,A.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,A.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,A.jsx)("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),(0,A.jsx)("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),(0,A.jsx)("path",{d:"M16 24H32"})]}),Ft=e=>(0,A.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,A.jsx)("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),(0,A.jsx)("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),(0,A.jsx)("path",{d:"M42 42l-12 -12"}),(0,A.jsx)("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),(0,A.jsx)("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var L,fe=P(()=>{"use strict";L=class extends Error{constructor(n,r,a){super(n);this.decision=r;this.status=a;this.name="AiBackendError"}decision;status}});var Nt,Vt,zt,Me=P(()=>{"use strict";Nt="Answers from {name} are generated by AI and may contain mistakes. Check important information.",Vt="This summary was generated by AI and may contain mistakes. Check important information.",zt=(e,t)=>e.split("{name}").join(t)});function w(e,t,n){throw new ne(e,t,n)}function I(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&w("invalid_type",t,`${t} must be an object.`),e}function K(e,t,n){let r=new Set(t),a=Object.keys(e).find(o=>!r.has(o));a&&w("unknown_field",`${n}.${a}`,`${n}.${a} is not part of contract v1.`)}function S(e,t,n){(typeof e!="string"||e.trim()==="")&&w("invalid_string",t,`${t} must be a non-empty string.`);let r=e.trim();return n&&!n.test(r)&&w("invalid_format",t,`${t} has an invalid format.`),r}function N(e,t){return S(e,t,/^(?:0|[1-9][0-9]*)$/)}function be(e,t){let n=S(e,t);return(!/^\d{4}-\d{2}-\d{2}T/.test(n)||!Number.isFinite(Date.parse(n)))&&w("invalid_timestamp",t,`${t} must be an ISO-8601 timestamp.`),n}function ye(e,t){let n=S(e,t),r;try{r=new URL(n)}catch{w("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`)}return r.protocol!=="http:"&&r.protocol!=="https:"&&w("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`),n}function jt(e,t){let n=S(e,t).replace(/_/g,"-");try{let r=new Intl.Locale(n).language.toLowerCase();if(!/^[a-z]{2,8}$/.test(r))throw new Error("invalid language");return r}catch{return w("invalid_locale",t,`${t} must be a valid BCP 47 locale.`)}}function we(e){let t=I(e,"source");return K(t,["producer","siteId","blogId","postType","postId"],"source"),t.producer!=="wordpress"&&w("unsupported_producer","source.producer","Only wordpress is supported in v1."),{producer:"wordpress",siteId:S(t.siteId,"source.siteId",/^[A-Za-z0-9._:-]+$/),blogId:N(t.blogId,"source.blogId"),postType:S(t.postType,"source.postType",/^[a-z0-9_-]+$/),postId:N(t.postId,"source.postId")}}function Wt(e,t){let n=`document.metadata[${t}]`,r=I(e,n);return K(r,["namespace","slug","label"],n),{namespace:S(r.namespace,`${n}.namespace`,/^[a-z0-9_.:-]+$/),slug:S(r.slug,`${n}.slug`,/^[a-z0-9][a-z0-9._-]*$/),label:S(r.label,`${n}.label`)}}function De(e){let t=I(e,"document");return K(t,["profile","canonicalUrl","title","excerpt","content","contentType","contentSha256","modifiedGmt","metadata"],"document"),t.contentType!=="text/markdown"&&w("unsupported_content_type","document.contentType","Contract v1 supports text/markdown documents only."),Array.isArray(t.metadata)||w("invalid_type","document.metadata","document.metadata must be an array."),{profile:S(t.profile,"document.profile",/^[a-z0-9][a-z0-9._-]*$/),canonicalUrl:ye(t.canonicalUrl,"document.canonicalUrl"),title:S(t.title,"document.title"),excerpt:typeof t.excerpt=="string"?t.excerpt:"",content:S(t.content,"document.content"),contentType:"text/markdown",contentSha256:S(t.contentSha256,"document.contentSha256",/^[a-f0-9]{64}$/),modifiedGmt:be(t.modifiedGmt,"document.modifiedGmt"),metadata:t.metadata.map(Wt)}}function $t(e){let t=I(e,"document");K(t,["profile","locale","canonicalUrl","title","excerpt","content","contentType","contentSha256","modifiedGmt","metadata"],"document");let n={...t};return delete n.locale,{...De(n),locale:jt(t.locale,"document.locale")}}function Ue(e,t){let n=I(e,"projection");K(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==1&&w("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=we(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&w("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:S(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:be(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&w("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:De(n.document)}):n.operation==="delete"?(n.document!==null&&w("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:ye(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):w("invalid_operation","projection.operation","Unsupported desired operation.")}function _e(e,t){let n=I(e,"projection");K(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==2&&w("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=we(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&w("source_boundary_mismatch","projection.source","Projection source does not match the authenticated producer boundary.");let a={schemaVersion:2,source:r,sourceVersion:N(n.sourceVersion,"projection.sourceVersion"),correlationId:S(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:be(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&w("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:$t(n.document)}):n.operation==="delete"?(n.document!==null&&w("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:ye(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):w("invalid_operation","projection.operation","Unsupported desired operation.")}function qt(e,t){let n=I(e,"projection").schemaVersion;return n===1?Ue(e,t):n===2?_e(e,t):w("unsupported_schema","projection.schemaVersion","Unsupported contract version.")}function Ht(e){let t=I(e,"policy");K(t,["schemaVersion","postType","enabled","autoEnableSource","reviewPolicy","onPublish","onPublishedUpdate","onUnpublish","metadataRefresh","includeTaxonomies","documentProfile"],"policy"),t.schemaVersion!==1&&w("unsupported_schema","policy.schemaVersion","Unsupported policy version."),typeof t.enabled!="boolean"&&w("invalid_type","policy.enabled","policy.enabled must be boolean."),t.autoEnableSource!=="administrator"&&t.autoEnableSource!=="migration"&&t.autoEnableSource!=="system"&&w("invalid_policy","policy.autoEnableSource","Invalid auto-enable source."),t.reviewPolicy!=="wordpress-publish-is-approval"&&t.reviewPolicy!=="manual-kb-review"&&t.reviewPolicy!=="disabled"&&w("invalid_policy","policy.reviewPolicy","Invalid review policy."),(t.onPublish!=="upsert"||t.onPublishedUpdate!=="upsert"||t.onUnpublish!=="delete"||t.metadataRefresh!=="reconcile")&&w("invalid_policy","policy","Unsupported policy action in contract v1."),Array.isArray(t.includeTaxonomies)||w("invalid_type","policy.includeTaxonomies","policy.includeTaxonomies must be an array.");let n=[...new Set(t.includeTaxonomies.map((r,a)=>S(r,`policy.includeTaxonomies[${a}]`,/^[a-z0-9_-]+$/)))].sort();return{schemaVersion:1,postType:S(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:S(t.documentProfile,"policy.documentProfile",/^[a-z0-9][a-z0-9._-]*$/)}}function Gt(e,t){let n=BigInt(N(e,"candidateSourceVersion")),r=BigInt(N(t,"acceptedSourceVersion"));return n<r?"older":n>r?"newer":"same"}function Yt(e){let t=we(e);return[t.producer,t.siteId,t.blogId,t.postType,t.postId].map(encodeURIComponent).join(":")}var Ir,Br,ne,Fe=P(()=>{"use strict";Ir=1,Br=2,ne=class extends Error{constructor(n,r,a){super(a);this.code=n;this.field=r;this.name="KnowledgeSyncContractError"}code;field}});function he(e,t){return`ai.${t}.${e}`}function ke(e,t){if(t==="/conversation-profile")return e==="admin"?"ai.conversation-profile.admin":void 0;if(t==="/cost-policy")return e==="admin"?"ai.cost-policy.admin":void 0;if(t.startsWith("/kb/"))return e==="admin"?"knowledge.admin":"knowledge.query.frontend"}function Zt(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e,n=t.transports,r=n===void 0||!!n&&typeof n=="object"&&!Array.isArray(n)&&(n.chatWebSocketUrl===void 0||typeof n.chatWebSocketUrl=="string")&&(n.chatStreamTicketUrl===void 0||typeof n.chatStreamTicketUrl=="string");return t.schemaVersion===1&&t.product==="smartcloud-ai-kit-backend"&&typeof t.release=="string"&&!!t.capabilities&&typeof t.capabilities=="object"&&!Array.isArray(t.capabilities)&&r}async function Jt(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,ze.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 V(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 Jt(e);r=Zt(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()+Qt,value:r}),r}function z(e,t,n=1){if(e.status==="legacy")return n<=1&&Xt.has(t);let r=e.manifest?.capabilities[t];return typeof r=="number"&&r>=n}var ze,Ne,Qt,Xt,Ve,re=P(()=>{"use strict";ze=require("@smart-cloud/gatey-core"),Ne="/meta/capabilities",Qt=300*1e3,Xt=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});function tn(e){if(!(!je(e)||e.version!==1)&&!(typeof e.type!="string"||!en.has(e.type)||typeof e.conversationId!="string"||!e.conversationId||typeof e.turnId!="string"||!e.turnId||typeof e.eventId!="string"||!e.eventId||typeof e.timestamp!="string"||!e.timestamp||!Number.isSafeInteger(e.seq)||e.seq<0||!je(e.payload)))return e}var Dr,en,je,We=P(()=>{"use strict";Dr=1,en=new Set(["turn.accepted","activity.started","activity.completed","activity.failed","answer.delta","citation.upsert","answer.completed","turn.failed","turn.cancelled","turn.snapshot"]),je=e=>!!e&&typeof e=="object"&&!Array.isArray(e)});var Ze={};Z(Ze,{MIN_CHROME_VERSION:()=>Ye,checkOnDeviceAvailability:()=>Xe,decideCapability:()=>oe,isOnDeviceLanguageSupported:()=>D,resolveBackend:()=>j});async function He(){let t=await(0,$e.getWpSuite)()?.plugins?.aiKit?.features.store;return H(t).getConfig()??{}}function Ge(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 nn(e){if(e.mode)return e.mode;let{transport:t}=Ge(e);return t?"backend-fallback":"local-only"}async function j(e){let t=await He(),{transport:n,backendApiName:r,backendBaseUrl:a}=Ge(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 V({transport:n,baseUrl:a});return e&&!z(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,qe.getGateyPlugin)();if(!o?.availability||await o.availability()!=="available")return{available:!1,reason:"Gatey is not available"};let i=await V({transport:n,apiName:r});return e&&!z(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 M(e){return typeof globalThis[e]<"u"}function Qe(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function ae(e,t){return e?.find(n=>n.brand===t)?.version}async function an(){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 on(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?Qe(t[1]):void 0}function sn(){return!!navigator?.brave}async function cn(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 an(),r=ae(n,"Microsoft Edge")??ae(n,"Microsoft Edge WebView2"),a=ae(n,"Google Chrome")??ae(n,"Chromium"),o=!!r||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),i=/\bOPR\//i.test(t),s=/\bVivaldi\//i.test(t),c=/\bSamsungBrowser\//i.test(t),u=/\bFirefox\//i.test(t),d=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=sn()||/\bBrave\//i.test(t);if(o||i||s||c||u||d||l)return{allowed:!1,reason:o?"edge":l?"brave":u?"firefox":d?"safari":i?"opera":s?"vivaldi":c?"samsung":"unsupported-browser"};let m=Qe(a)??on(t),g=Ye[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 Xe(e,t){try{let n=await cn(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"?rn.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(!M("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(!M("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(!M("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(!M("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(!M("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(!M("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(!M("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 D(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function oe(e,t,n,r="admin"){let a=await He(),o=n||nn(a),i=await j(he(r,e)),s=await Xe(e,t),c=s.available,u=i.available,d={feature:e,mode:o,onDeviceAvailable:c,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason,backendCompatibility:i.compatibility};return o==="local-only"?c?{...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"?u?{...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"})`}:c?{...d,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:u?{...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,qe,Ye,rn,Ce=P(()=>{"use strict";$e=require("@smart-cloud/wpsuite-core"),qe=require("@smart-cloud/gatey-core");te();re();Ye={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},rn=new Set(["writer","rewriter","proofreader","prompt"])});var ot={};Z(ot,{dispatchCustomBackend:()=>hn,dispatchFeatureBackend:()=>$,withRecaptchaHeaders:()=>G});function un(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function ln(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function dn(e,t){let n=ln(t);if(n<=0)return!1;let r=et.get(e);return r?Date.now()-r<n:!1}function ve(e,t){let n=un(t);n&&et.set(e,n)}function tt(e,t){if(e!=="frontend"||!rt(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function nt(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 pn(e,t){if(e!=="frontend")return;let n=(0,ie.getWpSuite)()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&dn(t.cacheKey,O()?.settings||{}))return;let{execute:r}=await(0,ie.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 G(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await pn(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function W(e,t){try{e?.onStatus?.(t)}catch{}}function rt(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function mn(e,t){if(!rt(t))return t;let n=gn[e];if(!n)return t;let r={};for(let a of n)a in t&&(r[a]=t[a]);return r}function yn(e,t){return(e==="admin"?fn:bn)[t]}function wn(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function $(e,t,n,r,a={}){let o=yn(t,n);if(!o)throw new L(`No backend path configured for "${n}" (${t}).`,e);let i=mn(n,r);return at(e,t,n,o,"POST",i,a)}async function hn(e,t,n,r,a,o={}){let i=ke(t,n);if(i){let c=await V({transport:e.backendTransport??"gatey",apiName:e.backendApiName,baseUrl:e.backendBaseUrl});if(!z(c,i))throw new L(`Backend does not support ${i}.`,{...e,backendCompatibility:c})}let s=wn(t,n);return at(e,t,"prompt",s,r,a,o)}async function at(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 kn(e.backendBaseUrl,r,a,o,i,e,n,t)}if(!e.backendApiName)throw new L("backendTransport=gatey but backendApiName is missing.",e);return Cn(e.backendApiName,r,a,o,i,e,n,t)}async function kn(e,t,n,r,a,o,i,s){let c=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...a.headers??{}},d=i==="prompt"?tt(s,r):void 0,l=await G(s,u,{cacheKey:d}),m=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([b,k])=>[b,String(k)])).toString():"";W(a,{feature:i,context:s,step:"backend:request",source:"backend"}),W(a,{feature:i,context:s,step:"backend:waiting",source:"backend"});let g=await fetch(c+m,{method:n,headers:l,body:JSON.stringify(r??{}),signal:a.signal,credentials:"omit"});if(W(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=nt(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&&ve(k,f),b}return f&&d&&ve(d,f),await g.text()}async function Cn(e,t,n,r,a,o,i,s){let c=(0,Je.getGateyPlugin)(),u;switch(n.toUpperCase()){case"POST":u=c?.cognito?.post;break;case"GET":u=c?.cognito?.get;break;case"PUT":u=c?.cognito?.put;break;case"PATCH":u=c?.cognito?.patch;break;case"DELETE":u=c?.cognito?.del;break;default:throw new L(`Unsupported HTTP method "${n}" for Gatey backend.`,o)}if(!u)throw new L(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,o);let d=i==="prompt"?tt(s,r):void 0,l=await G(s,{...a.headers??{}},{cacheKey:d});W(a,{feature:i,context:s,step:"backend:request",source:"backend"}),W(a,{feature:i,context:s,step:"backend:waiting",source:"backend"});let m=u({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=nt(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??d;return y&&typeof b=="string"&&b.trim()&&ve(b.trim(),y),W(a,{feature:i,context:s,step:"backend:response",source:"backend"}),f}var Je,ie,et,gn,fn,bn,Ae=P(()=>{"use strict";Je=require("@smart-cloud/gatey-core"),ie=require("@smart-cloud/wpsuite-core");J();fe();re();et=new Map;gn={prompt:["text","audio","audioUrl","systemPrompt","context","maxTokens","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","locale","outputLanguage","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"]};fn={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},bn={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function vn(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 An(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 se(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=wn(e,r,a);if(s>0)a=s;else{let c=kn(e,r,a);if(c>0)a=c;else{let u=e.lastIndexOf(" ",a);u>r+t*.5&&(a=u+1)}}}}let o=e.substring(r,a).trim();o.length>0&&n.push({text:o,start:r,end:a}),r=a}return n}var at=S(()=>{"use strict"});var vt={};Z(vt,{detectLanguage:()=>Fn,getPromptOptions:()=>Ct,getProofreadOptions:()=>pt,getRewriteOptions:()=>dt,getSummarizeOptions:()=>gt,getTranslateOptions:()=>mt,getWriteOptions:()=>lt,prompt:()=>$n,proofread:()=>Mn,rewrite:()=>Kn,sendChatMessage:()=>qn,sendFeedbackMessage:()=>Gn,sendSearchMessage:()=>Hn,summarize:()=>Dn,translate:()=>Q,write:()=>In});function xe(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(xe).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+xe(t[r])).join(",")+"}"}function 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 Pe(){let e=new Map;for(let n of x.values()){let r=e.get(n.kind)??[];r.push(n),e.set(n.kind,r)}for(let[n,r]of e.entries())if(!(r.length<=it)){r.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of r){if(e.get(n).length<=it)break;if(!(a.refCount>0)){try{a.destroy()}catch{}x.delete(a.key),e.set(n,(e.get(n)??[]).filter(o=>o.key!==a.key))}}}if(x.size<=ot)return;let t=Array.from(x.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(x.size<=ot)break;if(!(n.refCount>0)){try{n.destroy()}catch{}x.delete(n.key)}}}async function F(e,t,n,r){let a=Cn(e,t),o=x.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),x.delete(a),x.set(a,o),{model:o.model,fromCache:!0,release:()=>{let c=x.get(a);c&&(c.refCount=Math.max(0,c.refCount-1),c.lastUsed=Date.now(),Pe())}};let i=Y.get(a);if(i)return i;let s=(async()=>{let c=await n(),u={kind:e,key:a,model:c,refCount:1,lastUsed:Date.now(),destroy:()=>r(c)};return x.set(a,u),Y.delete(a),Pe(),{model:c,fromCache:!1,release:()=>{let d=x.get(a);d&&(d.refCount=Math.max(0,d.refCount-1),d.lastUsed=Date.now(),Pe())}}})().catch(c=>{throw Y.delete(a),c});return Y.set(a,s),s}function R(){return((0,ct.getWpSuite)()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function p(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function B(e){return e?.context??"admin"}function U(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,c=()=>{if(n.signal.aborted)return;let u=typeof r?.reason<"u"?r?.reason:void 0;n.abort(u??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?c():r.addEventListener("abort",c)),o&&o>0&&(i=setTimeout(()=>{n.signal.aborted||(s=!0,n.abort(new Se(o)))},o)),{signal:n.signal,timedOut:()=>s,dispose:()=>{i&&(clearTimeout(i),i=void 0),r&&r.removeEventListener("abort",c)}}}function ue(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=ue(e),o=await kt(e.images,n,t,r);return{text:e.messages.filter(i=>i.role==="user").map(i=>i.content).join(`
5
+ `,a);if(i>r+t*.5)a=i+2;else{let s=vn(e,r,a);if(s>0)a=s;else{let c=An(e,r,a);if(c>0)a=c;else{let u=e.lastIndexOf(" ",a);u>r+t*.5&&(a=u+1)}}}}let o=e.substring(r,a).trim();o.length>0&&n.push({text:o,start:r,end:a}),r=a}return n}var it=P(()=>{"use strict"});var St={};Z(St,{detectLanguage:()=>Vn,getPromptOptions:()=>At,getProofreadOptions:()=>mt,getRewriteOptions:()=>gt,getSummarizeOptions:()=>ft,getTranslateOptions:()=>bt,getWriteOptions:()=>pt,prompt:()=>Yn,proofread:()=>Fn,rewrite:()=>_n,sendChatMessage:()=>Qn,sendFeedbackMessage:()=>Zn,sendSearchMessage:()=>Xn,summarize:()=>Nn,translate:()=>Q,write:()=>Un});function Pe(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(Pe).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+Pe(t[r])).join(",")+"}"}function Sn(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}:${Sn(Pe(t))}`}function Se(){let e=new Map;for(let n of x.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<=ct)){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<=ct)break;if(!(a.refCount>0)){try{a.destroy()}catch{}x.delete(a.key),e.set(n,(e.get(n)??[]).filter(o=>o.key!==a.key))}}}if(x.size<=st)return;let t=Array.from(x.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(x.size<=st)break;if(!(n.refCount>0)){try{n.destroy()}catch{}x.delete(n.key)}}}async function U(e,t,n,r){let a=Pn(e,t),o=x.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),x.delete(a),x.set(a,o),{model:o.model,fromCache:!0,release:()=>{let c=x.get(a);c&&(c.refCount=Math.max(0,c.refCount-1),c.lastUsed=Date.now(),Se())}};let i=Y.get(a);if(i)return i;let s=(async()=>{let c=await n(),u={kind:e,key:a,model:c,refCount:1,lastUsed:Date.now(),destroy:()=>r(c)};return x.set(a,u),Y.delete(a),Se(),{model:c,fromCache:!1,release:()=>{let d=x.get(a);d&&(d.refCount=Math.max(0,d.refCount-1),d.lastUsed=Date.now(),Se())}}})().catch(c=>{throw Y.delete(a),c});return Y.set(a,s),s}function R(){return((0,lt.getWpSuite)()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function p(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function E(e){return e?.context??"admin"}function _(e,t=xn){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,c=()=>{if(n.signal.aborted)return;let u=typeof r?.reason<"u"?r?.reason:void 0;n.abort(u??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?c():r.addEventListener("abort",c)),o&&o>0&&(i=setTimeout(()=>{n.signal.aborted||(s=!0,n.abort(new xe(o)))},o)),{signal:n.signal,timedOut:()=>s,dispose:()=>{i&&(clearTimeout(i),i=void 0),r&&r.removeEventListener("abort",c)}}}function ue(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 Tn(e,t,n,r){let a=ue(e),o=await Ct(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 Pn(e,t,n,r){let a=ue(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,locale:e.locale,maxTokens:e.maxTokens,saveChatSession:!0,...a}}async function xn(e,t,n,r){let a=ue(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,locale:e.locale,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=ue(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 En(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function _(e,t,n,r,a,o,i,s){p(r,e,s,{step:"decide",message:"Deciding capability",silent:n});let c=await oe(r,a,t,e);p(r,e,s,{step:"decide",source:c.source,message:`Using ${c.source}`,silent:n});let u=!1;if(c.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"&&(u=!0)}if(c.mode!=="local-only"&&c.backendAvailable){p(r,e,s,{step:"backend:request",source:"backend",silent:n});let l=typeof i=="function"?await i(c):i,m=await $(c,e,r,l,s);return p(r,e,s,{step:"done",source:"backend",silent:n}),m}let d=u?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":c.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 Nn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Vn(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 jn(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??{}},c=await G(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:c,signal:o?.signal,credentials:"omit"});if(!f.ok){let h=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${h?": "+h.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let u=(0,st.getGateyPlugin)(),d={fileName:n,contentType:r,contentLength:a};if(u?.cognito?.get){let g=u.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((f,b)=>(f[b]=String(d[b]),f),{}),headers:c,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(!u?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=u.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:c,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 u of e){if(!_n(u))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(u)}let o=a.reduce((u,d)=>u+(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 u=[];for(let d of a)u.push({format:Vn(d.type),data:await bt(d)});return{images:u}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let c=[];for(let u=0;u<a.length;u++){let d=a[u],l=d.type||"application/octet-stream",m=d.name||`image_${u}.${Nn(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),c.push(y)}return{imageUrls:c}}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=jn(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",c=e.name||`audio.${zn(s)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:u,key:d}=await yt(t,n,c,s,e.size||0,r);return p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await wt(u,e,s,r),{audioUrl:d}}var st,ct,ce,ot,it,x,Y,vn,ut,Se,lt,In,dt,Kn,pt,Mn,gt,Dn,Fn,mt,Q,ft,Ct,$n,qn,Hn,Gn,At=S(()=>{"use strict";st=require("@smart-cloud/gatey-core"),ct=require("@smart-cloud/wpsuite-core");Ae();Ce();ce=require("aws-amplify/utils");Pt();at();ot=8,it=2,x=new Map,Y=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of x.values())try{e.destroy()}catch{}x.clear(),Y.clear()});vn=45e3,ut=5e3,Se=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)},In=async(e,t)=>{let n=B(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;D(a)||(i=!0,a="en");let s=lt({...e,outputLanguage:a});return _(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 c=U(t);try{let{model:u,release:d}=await F("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 u.measureInputUsage(e.prompt,{context:e.context,signal:c.signal}),y=u.inputQuota;if(g>y){let f=se(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let q=ce.I18n.get("Writing part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));p("writer",n,t,{step:"on-device:run",source:"on-device",message:q});let de=await u.write(f[h].text,{context:e.context,signal:c.signal});b.push(de)}l=b.join(`
7
+ `),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,maxTokens:e.maxTokens,outputLanguage:e.outputLanguage,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function Ln(e,t,n,r){let a=ue(e),o=await Ct(e.images,n,t,r),i=await vt(e.audio,n,t,r);return{sessionId:e.sessionId,text:e.message,images:o?.images,imageUrls:o?.imageUrls,audio:i?.audio,audioUrl:i?.audioUrl,locale:e.locale,maxTokens:e.maxTokens,saveChatSession:!0,...a}}async function On(e,t,n,r){let a=ue(e),o=await vt(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,locale:e.locale,saveChatSession:!1,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...a}}async function Rn(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function En(e){let t=ue(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 In(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 Bn(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Kn(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function Mn(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Dn(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 c=await oe(r,a,t,e);p(r,e,s,{step:"decide",source:c.source,message:`Using ${c.source}`,silent:n});let u=!1;if(c.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"&&(u=!0)}if(c.mode!=="local-only"&&c.backendAvailable){p(r,e,s,{step:"backend:request",source:"backend",silent:n});let l=typeof i=="function"?await i(c):i,m=await $(c,e,r,l,s);return p(r,e,s,{step:"done",source:"backend",silent:n}),m}let d=u?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":c.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${d}`)}function zn(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 jn(e){return typeof Blob<"u"&&e instanceof Blob}function Wn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function $n(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function qn(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 Hn(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 Gn(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 wt(e){let t=await Gn(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function ht(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??{}},c=await G(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:c,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 u=(0,ut.getGateyPlugin)(),d={fileName:n,contentType:r,contentLength:a};if(u?.cognito?.get){let g=u.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((f,b)=>(f[b]=String(d[b]),f),{}),headers:c,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(!u?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=u.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:c,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 kt(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 Ct(e,t,n,r){if(!e||e.length===0)return;let a=[];for(let u of e){if(!jn(u))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(u)}let o=a.reduce((u,d)=>u+(d.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=yt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let u=[];for(let d of a)u.push({format:$n(d.type),data:await wt(d)});return{images:u}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let c=[];for(let u=0;u<a.length;u++){let d=a[u],l=d.type||"application/octet-stream",m=d.name||`image_${u}.${Wn(l)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await ht(t,n,m,l,d.size||0,r);p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await kt(g,d,l,r),c.push(y)}return{imageUrls:c}}async function vt(e,t,n,r){if(!e)return;let a=e.size||0;if(Math.ceil(a*1.37+2048)<=yt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=Hn(e.type||"audio/webm"),m=await wt(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",c=e.name||`audio.${qn(s)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:u,key:d}=await ht(t,n,c,s,e.size||0,r);return p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await kt(u,e,s,r),{audioUrl:d}}var ut,lt,ce,st,ct,x,Y,xn,dt,xe,pt,Un,gt,_n,mt,Fn,ft,Nn,Vn,bt,Q,yt,At,Yn,Qn,Xn,Zn,Pt=P(()=>{"use strict";ut=require("@smart-cloud/gatey-core"),lt=require("@smart-cloud/wpsuite-core");Ae();Ce();ce=require("aws-amplify/utils");xt();it();st=8,ct=2,x=new Map,Y=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of x.values())try{e.destroy()}catch{}x.clear(),Y.clear()});xn=45e3,dt=5e3,xe=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};pt=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Un=async(e,t)=>{let n=E(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;D(a)||(i=!0,a="en");let s=pt({...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 c=_(t);try{let{model:u,release:d}=await U("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 u.measureInputUsage(e.prompt,{context:e.context,signal:c.signal}),y=u.inputQuota;if(g>y){let f=se(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let k=0;k<f.length;k++){let q=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:q});let de=await u.write(f[k].text,{context:e.context,signal:c.signal});b.push(de)}l=b.join(`
8
8
 
9
- `)}}return m||(l=await u.write(e.prompt,{context:e.context,signal:c.signal})),i?{result:(await Q({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying writer:",l)}}}finally{c.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,a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;D(a)||(i=!0,a="en");let s=dt({...e,outputLanguage:a});return _(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 c=U(t);try{let{model:u,release:d}=await F("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 u.measureInputUsage(e.text,{context:e.context,signal:c.signal}),y=u.inputQuota;if(g>y){let f=se(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let q=ce.I18n.get("Rewriting part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));p("rewriter",n,t,{step:"on-device:run",source:"on-device",message:q});let de=await u.rewrite(f[h].text,{context:e.context,signal:c.signal});b.push(de)}l=b.join(`
9
+ `)}}return m||(l=await u.write(e.prompt,{context:e.context,signal:c.signal})),i?{result:(await Q({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying writer:",l)}}}finally{c.dispose()}},En({...e,sharedContext:r,outputLanguage:o}),t)},gt=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},_n=async(e,t)=>{let n=E(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;D(a)||(i=!0,a="en");let s=gt({...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 c=_(t);try{let{model:u,release:d}=await U("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 u.measureInputUsage(e.text,{context:e.context,signal:c.signal}),y=u.inputQuota;if(g>y){let f=se(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let k=0;k<f.length;k++){let q=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:q});let de=await u.rewrite(f[k].text,{context:e.context,signal:c.signal});b.push(de)}l=b.join(`
10
10
 
11
- `)}}return m||(l=await u.rewrite(e.text,{context:e.context,signal:c.signal})),i?{result:(await Q({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{c.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 _(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=U(t);try{let{model:o,release:i}=await F("proofreader",{core:r},()=>Proofreader.create({...r,monitor(s){s.addEventListener("downloadprogress",c=>{let u=c.loaded;p("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}}),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()}},En(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)},Dn=async(e,t)=>{let n=B(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;D(a)||(i=!0,a="en");let s=await gt({...e,outputLanguage:a});return _(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 c=U(t);try{let{model:u,release:d}=await F("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 u.measureInputUsage(e.text,{context:e.context,signal:c.signal}),m=u.inputQuota;if(l>m){let y=se(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let le=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:le});let q=await u.summarize(y[b].text,{context:e.context,signal:c.signal});f.push(q)}e.text=f.join(`
11
+ `)}}return m||(l=await u.rewrite(e.text,{context:e.context,signal:c.signal})),i?{result:(await Q({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{c.dispose()}},In({...e,sharedContext:r,outputLanguage:o}),t)},mt=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Fn=async(e,t)=>{let n=E(t),r=await mt();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=_(t);try{let{model:o,release:i}=await U("proofreader",{core:r},()=>Proofreader.create({...r,monitor(s){s.addEventListener("downloadprogress",c=>{let u=c.loaded;p("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}}),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()}},Dn(e),t)},ft=e=>{let t=e.outputLanguage?e.outputLanguage:R(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Nn=async(e,t)=>{let n=E(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;D(a)||(i=!0,a="en");let s=await ft({...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 c=_(t);try{let{model:u,release:d}=await U("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 u.measureInputUsage(e.text,{context:e.context,signal:c.signal}),m=u.inputQuota;if(l>m){let y=se(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let le=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:le});let q=await u.summarize(y[b].text,{context:e.context,signal:c.signal});f.push(q)}e.text=f.join(`
12
12
 
13
- `)}}let g=await u.summarize(e.text,{context:e.context,signal:c.signal});return i?{result:(await Q({text:g,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:g}}finally{try{d()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{c.dispose()}},On({...e,sharedContext:r,outputLanguage:o}),t)},Fn=async(e,t)=>{let n=B(t);return _(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=U(t,ut);try{let{model:a,release:o}=await F("language-detector",{},()=>LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",s=>{let c=s.loaded;p("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,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(c=>c.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)},Q=async(e,t)=>{let n=B(t),r=await mt({...e});return _(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=U(t,ut);try{let{model:o,release:i}=await F("translator",{core:r},()=>Translator.create({...r,monitor(s){s.addEventListener("downloadprogress",c=>{let u=c.loaded;p("translator",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,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=[],c=()=>{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(`
13
+ `)}}let g=await u.summarize(e.text,{context:e.context,signal:c.signal});return i?{result:(await Q({text:g,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:g}}finally{try{d()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{c.dispose()}},Bn({...e,sharedContext:r,outputLanguage:o}),t)},Vn=async(e,t)=>{let n=E(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=_(t,dt);try{let{model:a,release:o}=await U("language-detector",{},()=>LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",s=>{let c=s.loaded;p("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,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(c=>c.value===s.detectedLanguage))}}}finally{try{o()}catch(i){console.error("Error destroying language detector:",i)}}}finally{r.dispose()}},Mn(e.text,t),t)},bt=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??R()??"en"};return Promise.resolve(t)},Q=async(e,t)=>{let n=E(t),r=await bt({...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=_(t,dt);try{let{model:o,release:i}=await U("translator",{core:r},()=>Translator.create({...r,monitor(s){s.addEventListener("downloadprogress",c=>{let u=c.loaded;p("translator",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,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=[],c=()=>{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
  `))c(),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()}},Rn(e.text,e.sourceLanguage,e.targetLanguage),t)};ft=4*1024*1024;Ct=async e=>{let t=e.outputLanguage?e.outputLanguage:R();return D(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},$n=async(e,t)=>{let n=B(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;D(a)||(i=!0,a="en");let s=await Ct({...e,outputLanguage:a}),c=await oe("prompt",s,t?.modeOverride,n);return _(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 u=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&u.push(g.content.trim());r&&r.trim()&&u.push("SHARED CONTEXT: "+r.trim())}let d=u.length>0?u.join(`
15
+ `)}}finally{try{i()}catch(s){console.error("Error destroying translator:",s)}}}finally{a.dispose()}},Kn(e.text,e.sourceLanguage,e.targetLanguage),t)};yt=4*1024*1024;At=async e=>{let t=e.outputLanguage?e.outputLanguage:R();return D(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Yn=async(e,t)=>{let n=E(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:R(),o=a,i=!1;D(a)||(i=!0,a="en");let s=await At({...e,outputLanguage:a}),c=await oe("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 u=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&u.push(g.content.trim());r&&r.trim()&&u.push("SHARED CONTEXT: "+r.trim())}let d=u.length>0?u.join(`
16
16
 
17
- `):void 0,l=d?[{role:"system",content:d}]:void 0,m=U(t);try{let{model:g,release:y}=await F("language-model",{core:s,initialPrompts:l},()=>LanguageModel.create({...s,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let h=b.loaded;p("prompt",n,t,{step:"on-device:download",source:"on-device",progress:h,loaded:h})})}}),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 Q({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,c,t),t)},qn=async(e,t)=>{let n=B(t),r="prompt",a=await j(),o={feature:r,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:a.available,backendTransport:a.transport,backendApiName:a.apiName,backendBaseUrl:a.baseUrl,backendReason:a.reason},i=await Pn(e,n,o,t);p(r,n,t,{step:"backend:request",source:"backend"});let s=await $(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s},Hn=async(e,t)=>{let n=B(t),r=e.sharedContext,a="prompt",o=await j(),i={feature:a,mode:"backend-only",onDeviceAvailable:!1,backendAvailable:o.available,backendTransport:o.transport,backendApiName:o.apiName,backendBaseUrl:o.baseUrl,backendReason:o.reason},s=await xn({...e,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let c=await $(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),c},Gn=async(e,t)=>{let n="frontend",r="prompt",a=await j(),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 $(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s}});var kr={};Z(kr,{AiKitChatbotIcon:()=>Dt,AiKitDocSearchIcon:()=>Ft,AiKitFeatureIcon:()=>Mt,BackendError:()=>L,DEFAULT_CHATBOT_AI_DISCLOSURE:()=>Ut,DEFAULT_DOC_SEARCH_AI_DISCLOSURE:()=>_t,KNOWLEDGE_SYNC_CONTRACT_VERSION:()=>Lr,KNOWLEDGE_SYNC_LOCALE_CONTRACT_VERSION:()=>Or,KnowledgeSyncContractError:()=>ne,LANGUAGE_OPTIONS:()=>Te,TEXT_DOMAIN:()=>C,capabilityForCustomPath:()=>he,capabilityForFeature:()=>ke,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:()=>Oe,getStoreSelect:()=>H,getSummarizeOptions:()=>cr,getTranslateOptions:()=>lr,getWriteOptions:()=>nr,initializeAiKit:()=>wr,isOnDeviceLanguageSupported:()=>Qn,knowledgeSyncSourceKey:()=>Ht,observeStore:()=>Ee,parseKnowledgeSyncPolicyV1:()=>$t,parsePublicContentProjection:()=>Wt,parsePublicContentProjectionV1:()=>Fe,parsePublicContentProjectionV2:()=>Ue,prompt:()=>mr,proofread:()=>sr,reloadConfig:()=>Re,resolveBackend:()=>Jn,resolveBackendCompatibility:()=>V,rewrite:()=>or,sanitizeAiKitConfig:()=>ee,sendChatMessage:()=>fr,sendFeedbackMessage:()=>br,sendSearchMessage:()=>yr,summarize:()=>ur,supportsBackendCapability:()=>z,translate:()=>dr,waitForAiKitReady:()=>ge,write:()=>rr});module.exports=Rt(kr);var xt,v,Te,X,Yn,Qn,Xn,Zn,Jn,er,tr,k,nr,rr,ar,or,ir,sr,cr,ur,lr,dr,pr,gr,mr,fr,br,yr,wr,Pt=S(()=>{xt=require("@smart-cloud/wpsuite-core"),v=require("@wordpress/i18n");J();te();Ie();te();Ke();fe();Me();_e();re();Te=[{label:(0,v.__)("Arabic",C),value:"ar"},{label:(0,v.__)("Chinese",C),value:"zh"},{label:(0,v.__)("Dutch",C),value:"nl"},{label:(0,v.__)("English",C),value:"en"},{label:(0,v.__)("French",C),value:"fr"},{label:(0,v.__)("German",C),value:"de"},{label:(0,v.__)("Hebrew",C),value:"he"},{label:(0,v.__)("Hindi",C),value:"hi"},{label:(0,v.__)("Hungarian",C),value:"hu"},{label:(0,v.__)("Indonesian",C),value:"id"},{label:(0,v.__)("Italian",C),value:"it"},{label:(0,v.__)("Japanese",C),value:"ja"},{label:(0,v.__)("Korean",C),value:"ko"},{label:(0,v.__)("Norwegian",C),value:"no"},{label:(0,v.__)("Polish",C),value:"pl"},{label:(0,v.__)("Portuguese",C),value:"pt"},{label:(0,v.__)("Russian",C),value:"ru"},{label:(0,v.__)("Spanish",C),value:"es"},{label:(0,v.__)("Swedish",C),value:"sv"},{label:(0,v.__)("Thai",C),value:"th"},{label:(0,v.__)("Turkish",C),value:"tr"},{label:(0,v.__)("Ukrainian",C),value:"uk"}],X=Promise.resolve().then(()=>(Ce(),Qe)),Yn=async()=>(await X).MIN_CHROME_VERSION,Qn=async(...e)=>(await X).isOnDeviceLanguageSupported(...e),Xn=async(...e)=>(await X).decideCapability(...e),Zn=async(...e)=>(await X).checkOnDeviceAvailability(...e),Jn=async(...e)=>(await X).resolveBackend(...e),er=Promise.resolve().then(()=>(Ae(),rt)),tr=async(...e)=>(await er).dispatchCustomBackend(...e),k=Promise.resolve().then(()=>(At(),vt)),nr=async(...e)=>(await k).getWriteOptions(...e),rr=async(...e)=>(await k).write(...e),ar=async(...e)=>(await k).getRewriteOptions(...e),or=async(...e)=>(await k).rewrite(...e),ir=async(...e)=>(await k).getProofreadOptions(...e),sr=async(...e)=>(await k).proofread(...e),cr=async(...e)=>(await k).getSummarizeOptions(...e),ur=async(...e)=>(await k).summarize(...e),lr=async(...e)=>(await k).getTranslateOptions(...e),dr=async(...e)=>(await k).translate(...e),pr=async(...e)=>(await k).detectLanguage(...e),gr=async(...e)=>(await k).getPromptOptions(...e),mr=async(...e)=>(await k).prompt(...e),fr=async(...e)=>(await k).sendChatMessage(...e),br=async(...e)=>(await k).sendFeedbackMessage(...e),yr=async(...e)=>(await k).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,xt.attachDefaultPluginRuntime)(r),r.status=r.status??"initializing";let a=Be();return r.features={store:a,renderFeature:async o=>await e({...o,store:await a}),renderSearchComponent:async o=>{if(!t)throw new Error("renderSearchComponent is not configured");return await t({...o,store:await a})},write:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.write(...o)},rewrite:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.rewrite(...o)},proofread:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.proofread(...o)},summarize:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.summarize(...o)},translate:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.translate(...o)},detectLanguage:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.detectLanguage(...o)},prompt:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.prompt(...o)},sendChatMessage:async(...o)=>(await k).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await k).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await k).sendSearchMessage(...o)},a.then(()=>{r.status="available",n?.events?.emit("wpsuite:ai-kit:ready",{key:r.key,version:r.version})}).catch(o=>{r.status="error",console.error("AiKit plugin failed to initialize:",o),n?.events?.emit("wpsuite:ai-kit:error",{key:r.key,error:String(o)})}),r}});Pt();0&&(module.exports={AiKitChatbotIcon,AiKitDocSearchIcon,AiKitFeatureIcon,BackendError,DEFAULT_CHATBOT_AI_DISCLOSURE,DEFAULT_DOC_SEARCH_AI_DISCLOSURE,KNOWLEDGE_SYNC_CONTRACT_VERSION,KNOWLEDGE_SYNC_LOCALE_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,parsePublicContentProjection,parsePublicContentProjectionV1,parsePublicContentProjectionV2,prompt,proofread,reloadConfig,resolveBackend,resolveBackendCompatibility,rewrite,sanitizeAiKitConfig,sendChatMessage,sendFeedbackMessage,sendSearchMessage,summarize,supportsBackendCapability,translate,waitForAiKitReady,write});
17
+ `):void 0,l=d?[{role:"system",content:d}]:void 0,m=_(t);try{let{model:g,release:y}=await U("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(zn(e),{signal:m.signal,responseConstraint:e.responseConstraint});return i?{result:(await Q({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 Tn({...e,sharedContext:r},n,c,t),t)},Qn=async(e,t)=>{let n=E(t),r="prompt",a=await j(),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 Ln(e,n,o,t);p(r,n,t,{step:"backend:request",source:"backend"});let s=await $(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s},Xn=async(e,t)=>{let n=E(t),r=e.sharedContext,a="prompt",o=await j(),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 On({...e,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let c=await $(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),c},Zn=async(e,t)=>{let n="frontend",r="prompt",a=await j(),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 Rn({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});p(r,n,t,{step:"backend:request",source:"backend"});let s=await $(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s}});var Ar={};Z(Ar,{AiKitChatbotIcon:()=>_t,AiKitDocSearchIcon:()=>Ft,AiKitFeatureIcon:()=>Ut,BackendError:()=>L,CHAT_STREAM_PROTOCOL_VERSION:()=>Dr,DEFAULT_CHATBOT_AI_DISCLOSURE:()=>Nt,DEFAULT_DOC_SEARCH_AI_DISCLOSURE:()=>Vt,KNOWLEDGE_SYNC_CONTRACT_VERSION:()=>Ir,KNOWLEDGE_SYNC_LOCALE_CONTRACT_VERSION:()=>Br,KnowledgeSyncContractError:()=>ne,LANGUAGE_OPTIONS:()=>Te,TEXT_DOMAIN:()=>C,capabilityForCustomPath:()=>ke,capabilityForFeature:()=>he,checkOnDeviceAvailability:()=>nr,compareKnowledgeSourceVersions:()=>Gt,decideCapability:()=>tr,detectLanguage:()=>br,dispatchBackend:()=>or,formatAiDisclosure:()=>zt,getAiKitPlugin:()=>O,getMinChromeVersions:()=>Jn,getPromptOptions:()=>yr,getProofreadOptions:()=>lr,getRewriteOptions:()=>cr,getStore:()=>Le,getStoreDispatch:()=>Oe,getStoreSelect:()=>H,getSummarizeOptions:()=>pr,getTranslateOptions:()=>mr,getWriteOptions:()=>ir,initializeAiKit:()=>vr,isOnDeviceLanguageSupported:()=>er,knowledgeSyncSourceKey:()=>Yt,observeStore:()=>Ie,parseChatStreamServerEvent:()=>tn,parseKnowledgeSyncPolicyV1:()=>Ht,parsePublicContentProjection:()=>qt,parsePublicContentProjectionV1:()=>Ue,parsePublicContentProjectionV2:()=>_e,prompt:()=>wr,proofread:()=>dr,reloadConfig:()=>Re,resolveBackend:()=>rr,resolveBackendCompatibility:()=>V,rewrite:()=>ur,sanitizeAiKitConfig:()=>ee,sendChatMessage:()=>hr,sendFeedbackMessage:()=>kr,sendSearchMessage:()=>Cr,summarize:()=>gr,supportsBackendCapability:()=>z,translate:()=>fr,waitForAiKitReady:()=>ge,write:()=>sr});module.exports=It(Ar);var Tt,v,Te,X,Jn,er,tr,nr,rr,ar,or,h,ir,sr,cr,ur,lr,dr,pr,gr,mr,fr,br,yr,wr,hr,kr,Cr,vr,xt=P(()=>{Tt=require("@smart-cloud/wpsuite-core"),v=require("@wordpress/i18n");J();te();Be();te();Ke();fe();Me();Fe();re();We();Te=[{label:(0,v.__)("Arabic",C),value:"ar"},{label:(0,v.__)("Chinese",C),value:"zh"},{label:(0,v.__)("Dutch",C),value:"nl"},{label:(0,v.__)("English",C),value:"en"},{label:(0,v.__)("French",C),value:"fr"},{label:(0,v.__)("German",C),value:"de"},{label:(0,v.__)("Hebrew",C),value:"he"},{label:(0,v.__)("Hindi",C),value:"hi"},{label:(0,v.__)("Hungarian",C),value:"hu"},{label:(0,v.__)("Indonesian",C),value:"id"},{label:(0,v.__)("Italian",C),value:"it"},{label:(0,v.__)("Japanese",C),value:"ja"},{label:(0,v.__)("Korean",C),value:"ko"},{label:(0,v.__)("Norwegian",C),value:"no"},{label:(0,v.__)("Polish",C),value:"pl"},{label:(0,v.__)("Portuguese",C),value:"pt"},{label:(0,v.__)("Russian",C),value:"ru"},{label:(0,v.__)("Spanish",C),value:"es"},{label:(0,v.__)("Swedish",C),value:"sv"},{label:(0,v.__)("Thai",C),value:"th"},{label:(0,v.__)("Turkish",C),value:"tr"},{label:(0,v.__)("Ukrainian",C),value:"uk"}],X=Promise.resolve().then(()=>(Ce(),Ze)),Jn=async()=>(await X).MIN_CHROME_VERSION,er=async(...e)=>(await X).isOnDeviceLanguageSupported(...e),tr=async(...e)=>(await X).decideCapability(...e),nr=async(...e)=>(await X).checkOnDeviceAvailability(...e),rr=async(...e)=>(await X).resolveBackend(...e),ar=Promise.resolve().then(()=>(Ae(),ot)),or=async(...e)=>(await ar).dispatchCustomBackend(...e),h=Promise.resolve().then(()=>(Pt(),St)),ir=async(...e)=>(await h).getWriteOptions(...e),sr=async(...e)=>(await h).write(...e),cr=async(...e)=>(await h).getRewriteOptions(...e),ur=async(...e)=>(await h).rewrite(...e),lr=async(...e)=>(await h).getProofreadOptions(...e),dr=async(...e)=>(await h).proofread(...e),pr=async(...e)=>(await h).getSummarizeOptions(...e),gr=async(...e)=>(await h).summarize(...e),mr=async(...e)=>(await h).getTranslateOptions(...e),fr=async(...e)=>(await h).translate(...e),br=async(...e)=>(await h).detectLanguage(...e),yr=async(...e)=>(await h).getPromptOptions(...e),wr=async(...e)=>(await h).prompt(...e),hr=async(...e)=>(await h).sendChatMessage(...e),kr=async(...e)=>(await h).sendFeedbackMessage(...e),Cr=async(...e)=>(await h).sendSearchMessage(...e),vr=(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,Tt.attachDefaultPluginRuntime)(r),r.status=r.status??"initializing";let a=Ee();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 h,s=o[1]||{};return o[1]={context:"frontend",...s},i.write(...o)},rewrite:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.rewrite(...o)},proofread:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.proofread(...o)},summarize:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.summarize(...o)},translate:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.translate(...o)},detectLanguage:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.detectLanguage(...o)},prompt:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.prompt(...o)},sendChatMessage:async(...o)=>(await h).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await h).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await h).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,CHAT_STREAM_PROTOCOL_VERSION,DEFAULT_CHATBOT_AI_DISCLOSURE,DEFAULT_DOC_SEARCH_AI_DISCLOSURE,KNOWLEDGE_SYNC_CONTRACT_VERSION,KNOWLEDGE_SYNC_LOCALE_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,parseChatStreamServerEvent,parseKnowledgeSyncPolicyV1,parsePublicContentProjection,parsePublicContentProjectionV1,parsePublicContentProjectionV2,prompt,proofread,reloadConfig,resolveBackend,resolveBackendCompatibility,rewrite,sanitizeAiKitConfig,sendChatMessage,sendFeedbackMessage,sendSearchMessage,summarize,supportsBackendCapability,translate,waitForAiKitReady,write});
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export * from "./types";
8
8
  export * from "./ai-disclosures";
9
9
  export * from "./knowledge-sync";
10
10
  export * from "./backend-compatibility";
11
+ export * from "./chat-stream-types";
11
12
  export declare const LANGUAGE_OPTIONS: {
12
13
  label: string;
13
14
  value: AiKitLanguageCode;
package/dist/index.js CHANGED
@@ -1,17 +1,17 @@
1
- var pt=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 oe=(e,t)=>{for(var n in t)pt(e,n,{get:t[n],enumerable:!0})};function R(){return globalThis.WpSuite?.plugins?.aiKit}async function he(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=c=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),s&&clearTimeout(s),c()};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 gt(e=1e4){await he(e);let n=R()?.features?.store;if(!n)throw new Error("AiKit store is not available");return n}var Y=S(()=>{"use strict"});import{getConfig as ve,getCustomTranslations as mt,getWpSuite as ft}from"@smart-cloud/wpsuite-core";import{createReduxStore as bt,dispatch as Ae,register as yt,select as wt,subscribe as kt}from"@wordpress/data";import{I18n as Ce}from"aws-amplify/utils";var ie,ht,Ct,vt,At,Pt,Q,xt,Pe,St,X=S(()=>{"use strict";Y();ie=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},ht=async()=>{let e=ie(await ve("aiKit")),t=await mt({legacyUrl:R()?.settings.customTranslationsUrl});return{config:e,showChatbotPreview:!1,language:void 0,direction:void 0,customTranslations:t}},Ct={setShowChatbotPreview(e){return{type:"SET_SHOW_CHATBOT_PREVIEW",showChatbotPreview:e}},setLanguage(e){return!e||e==="system"?Ce.setLanguage(""):Ce.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},vt={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}},At={},Pt=e=>{let t=Ae(e);return delete t.setConfig,t},Q=e=>wt(e),xt=async e=>{ft().siteSettings.lastUpdate=Date.now();let t=await ve("aiKit"),n=ie(t);Ae(e).setConfig(n)},Pe=async()=>{let e=await ht(),t=bt("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:Ct,selectors:vt,resolvers:At});return yt(t),t},St=(e,t,n)=>{let r;function a(){let i=Q(e).getState(),s=t(i);if(s!==r){let c=r;r=s,n(r,c)}}let o=kt(a,e);return a(),o}});var C,xe=S(()=>{"use strict";C="smartcloud-ai-kit"});import{jsx as P,jsxs as se}from"react/jsx-runtime";var Xn,Zn,Jn,Se=S(()=>{"use strict";Xn=e=>se("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:[P("path",{d:"M19 27H33"}),P("path",{d:"M19 33H33"}),P("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),P("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),P("path",{d:"M16 10V40H36V22"}),P("path",{d:"M16 10H22"}),P("path",{d:"M22 10V23H36"}),P("path",{d:"M22 10L36 22"})]}),Zn=e=>se("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:[P("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"}),P("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),P("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),P("path",{d:"M16 24H32"})]}),Jn=e=>se("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:[P("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),P("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),P("path",{d:"M42 42l-12 -12"}),P("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),P("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var T,ce=S(()=>{"use strict";T=class extends Error{constructor(n,r,a){super(n);this.decision=r;this.status=a;this.name="AiBackendError"}decision;status}});var rr,ar,or,Te=S(()=>{"use strict";rr="Answers from {name} are generated by AI and may contain mistakes. Check important information.",ar="This summary was generated by AI and may contain mistakes. Check important information.",or=(e,t)=>e.split("{name}").join(t)});function w(e,t,n){throw new ue(e,t,n)}function B(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&w("invalid_type",t,`${t} must be an object.`),e}function E(e,t,n){let r=new Set(t),a=Object.keys(e).find(o=>!r.has(o));a&&w("unknown_field",`${n}.${a}`,`${n}.${a} is not part of contract v1.`)}function A(e,t,n){(typeof e!="string"||e.trim()==="")&&w("invalid_string",t,`${t} must be a non-empty string.`);let r=e.trim();return n&&!n.test(r)&&w("invalid_format",t,`${t} has an invalid format.`),r}function U(e,t){return A(e,t,/^(?:0|[1-9][0-9]*)$/)}function le(e,t){let n=A(e,t);return(!/^\d{4}-\d{2}-\d{2}T/.test(n)||!Number.isFinite(Date.parse(n)))&&w("invalid_timestamp",t,`${t} must be an ISO-8601 timestamp.`),n}function de(e,t){let n=A(e,t),r;try{r=new URL(n)}catch{w("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`)}return r.protocol!=="http:"&&r.protocol!=="https:"&&w("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`),n}function Tt(e,t){let n=A(e,t).replace(/_/g,"-");try{let r=new Intl.Locale(n).language.toLowerCase();if(!/^[a-z]{2,8}$/.test(r))throw new Error("invalid language");return r}catch{return w("invalid_locale",t,`${t} must be a valid BCP 47 locale.`)}}function pe(e){let t=B(e,"source");return E(t,["producer","siteId","blogId","postType","postId"],"source"),t.producer!=="wordpress"&&w("unsupported_producer","source.producer","Only wordpress is supported in v1."),{producer:"wordpress",siteId:A(t.siteId,"source.siteId",/^[A-Za-z0-9._:-]+$/),blogId:U(t.blogId,"source.blogId"),postType:A(t.postType,"source.postType",/^[a-z0-9_-]+$/),postId:U(t.postId,"source.postId")}}function Lt(e,t){let n=`document.metadata[${t}]`,r=B(e,n);return E(r,["namespace","slug","label"],n),{namespace:A(r.namespace,`${n}.namespace`,/^[a-z0-9_.:-]+$/),slug:A(r.slug,`${n}.slug`,/^[a-z0-9][a-z0-9._-]*$/),label:A(r.label,`${n}.label`)}}function Le(e){let t=B(e,"document");return E(t,["profile","canonicalUrl","title","excerpt","content","contentType","contentSha256","modifiedGmt","metadata"],"document"),t.contentType!=="text/markdown"&&w("unsupported_content_type","document.contentType","Contract v1 supports text/markdown documents only."),Array.isArray(t.metadata)||w("invalid_type","document.metadata","document.metadata must be an array."),{profile:A(t.profile,"document.profile",/^[a-z0-9][a-z0-9._-]*$/),canonicalUrl:de(t.canonicalUrl,"document.canonicalUrl"),title:A(t.title,"document.title"),excerpt:typeof t.excerpt=="string"?t.excerpt:"",content:A(t.content,"document.content"),contentType:"text/markdown",contentSha256:A(t.contentSha256,"document.contentSha256",/^[a-f0-9]{64}$/),modifiedGmt:le(t.modifiedGmt,"document.modifiedGmt"),metadata:t.metadata.map(Lt)}}function Ot(e){let t=B(e,"document");E(t,["profile","locale","canonicalUrl","title","excerpt","content","contentType","contentSha256","modifiedGmt","metadata"],"document");let n={...t};return delete n.locale,{...Le(n),locale:Tt(t.locale,"document.locale")}}function Rt(e,t){let n=B(e,"projection");E(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==1&&w("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=pe(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&w("source_boundary_mismatch","projection.source","Projection source does not match the authenticated producer boundary.");let a={schemaVersion:1,source:r,sourceVersion:U(n.sourceVersion,"projection.sourceVersion"),correlationId:A(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:le(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&w("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:Le(n.document)}):n.operation==="delete"?(n.document!==null&&w("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:de(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):w("invalid_operation","projection.operation","Unsupported desired operation.")}function Bt(e,t){let n=B(e,"projection");E(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==2&&w("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=pe(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&w("source_boundary_mismatch","projection.source","Projection source does not match the authenticated producer boundary.");let a={schemaVersion:2,source:r,sourceVersion:U(n.sourceVersion,"projection.sourceVersion"),correlationId:A(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:le(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&w("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:Ot(n.document)}):n.operation==="delete"?(n.document!==null&&w("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:de(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):w("invalid_operation","projection.operation","Unsupported desired operation.")}function ur(e,t){let n=B(e,"projection").schemaVersion;return n===1?Rt(e,t):n===2?Bt(e,t):w("unsupported_schema","projection.schemaVersion","Unsupported contract version.")}function lr(e){let t=B(e,"policy");E(t,["schemaVersion","postType","enabled","autoEnableSource","reviewPolicy","onPublish","onPublishedUpdate","onUnpublish","metadataRefresh","includeTaxonomies","documentProfile"],"policy"),t.schemaVersion!==1&&w("unsupported_schema","policy.schemaVersion","Unsupported policy version."),typeof t.enabled!="boolean"&&w("invalid_type","policy.enabled","policy.enabled must be boolean."),t.autoEnableSource!=="administrator"&&t.autoEnableSource!=="migration"&&t.autoEnableSource!=="system"&&w("invalid_policy","policy.autoEnableSource","Invalid auto-enable source."),t.reviewPolicy!=="wordpress-publish-is-approval"&&t.reviewPolicy!=="manual-kb-review"&&t.reviewPolicy!=="disabled"&&w("invalid_policy","policy.reviewPolicy","Invalid review policy."),(t.onPublish!=="upsert"||t.onPublishedUpdate!=="upsert"||t.onUnpublish!=="delete"||t.metadataRefresh!=="reconcile")&&w("invalid_policy","policy","Unsupported policy action in contract v1."),Array.isArray(t.includeTaxonomies)||w("invalid_type","policy.includeTaxonomies","policy.includeTaxonomies must be an array.");let n=[...new Set(t.includeTaxonomies.map((r,a)=>A(r,`policy.includeTaxonomies[${a}]`,/^[a-z0-9_-]+$/)))].sort();return{schemaVersion:1,postType:A(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:A(t.documentProfile,"policy.documentProfile",/^[a-z0-9][a-z0-9._-]*$/)}}function dr(e,t){let n=BigInt(U(e,"candidateSourceVersion")),r=BigInt(U(t,"acceptedSourceVersion"));return n<r?"older":n>r?"newer":"same"}function pr(e){let t=pe(e);return[t.producer,t.siteId,t.blogId,t.postType,t.postId].map(encodeURIComponent).join(":")}var sr,cr,ue,Oe=S(()=>{"use strict";sr=1,cr=2,ue=class extends Error{constructor(n,r,a){super(a);this.code=n;this.field=r;this.name="KnowledgeSyncContractError"}code;field}});import{getGateyPlugin as Et}from"@smart-cloud/gatey-core";function Ee(e,t){return`ai.${t}.${e}`}function Ie(e,t){if(t==="/conversation-profile")return e==="admin"?"ai.conversation-profile.admin":void 0;if(t==="/cost-policy")return e==="admin"?"ai.cost-policy.admin":void 0;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 Dt(e){if(e.transport==="fetch"){if(!e.baseUrl)throw new Error("backendBaseUrl is missing");let r=await fetch(`${e.baseUrl.replace(/\/+$/,"")}${Re}`,{method:"GET",credentials:"omit"});if(!r.ok)throw new Error(`HTTP ${r.status}`);return r.json()}if(!e.apiName)throw new Error("backendApiName is missing");let t=Et()?.cognito?.get;if(!t)throw new Error("Gatey GET transport is unavailable");return(await t({apiName:e.apiName,path:Re,options:{retryStrategy:{strategy:"no-retry"}}}).response).body.json()}async function j(e){let t=`${e.transport}:${e.apiName??e.baseUrl??""}`,n=Be.get(t);if(n&&n.expiresAt>Date.now())return n.value;let r;try{let a=await Dt(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 Be.set(t,{expiresAt:Date.now()+It,value:r}),r}function W(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 Re,It,Kt,Be,Z=S(()=>{"use strict";Re="/meta/capabilities",It=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"]),Be=new Map});var _e={};oe(_e,{MIN_CHROME_VERSION:()=>De,checkOnDeviceAvailability:()=>Ue,decideCapability:()=>ee,isOnDeviceLanguageSupported:()=>K,resolveBackend:()=>_});import{getWpSuite as Ft}from"@smart-cloud/wpsuite-core";import{getGateyPlugin as Ut}from"@smart-cloud/gatey-core";async function Ke(){let t=await Ft()?.plugins?.aiKit?.features.store;return Q(t).getConfig()??{}}function Me(e){let t=e.backendApiName?.trim()||void 0,n=e.backendBaseUrl?.trim()||void 0;return{transport:e.backendTransport??(n?"fetch":t?"gatey":void 0),backendApiName:t,backendBaseUrl:n}}function _t(e){if(e.mode)return e.mode;let{transport:t}=Me(e);return t?"backend-fallback":"local-only"}async function _(e){let t=await Ke(),{transport:n,backendApiName:r,backendBaseUrl:a}=Me(t);if(!n)return{available:!1,reason:"No backend configured"};if(n==="fetch"){if(!a)return{available:!1,reason:"backendBaseUrl is missing"};let s=await j({transport:n,baseUrl:a});return e&&!W(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 j({transport:n,apiName:r});return e&&!W(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 Fe(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function J(e,t){return e?.find(n=>n.brand===t)?.version}async function Vt(){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]?Fe(t[1]):void 0}function jt(){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 Vt(),r=J(n,"Microsoft Edge")??J(n,"Microsoft Edge WebView2"),a=J(n,"Google Chrome")??J(n,"Chromium"),o=!!r||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),i=/\bOPR\//i.test(t),s=/\bVivaldi\//i.test(t),c=/\bSamsungBrowser\//i.test(t),u=/\bFirefox\//i.test(t),d=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=jt()||/\bBrave\//i.test(t);if(o||i||s||c||u||d||l)return{allowed:!1,reason:o?"edge":l?"brave":u?"firefox":d?"safari":i?"opera":s?"vivaldi":c?"samsung":"unsupported-browser"};let m=Fe(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 Ue(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"?Nt.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 K(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function ee(e,t,n,r="admin"){let a=await Ke(),o=n||_t(a),i=await _(Ee(r,e)),s=await Ue(e,t),c=s.available,u=i.available,d={feature:e,mode:o,onDeviceAvailable:c,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason,backendCompatibility:i.compatibility};return o==="local-only"?c?{...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"?u?{...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"})`}:c?{...d,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:u?{...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,Nt,ge=S(()=>{"use strict";X();Z();De={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},Nt=new Set(["writer","rewriter","proofreader","prompt"])});var $e={};oe($e,{dispatchCustomBackend:()=>an,dispatchFeatureBackend:()=>V,withRecaptchaHeaders:()=>$});import{getGateyPlugin as $t}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 me(e,t){let n=Gt(t);n&&Ne.set(e,n)}function Ve(e,t){if(e!=="frontend"||!je(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function ze(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 $(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 N(e,t){try{e?.onStatus?.(t)}catch{}}function je(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Jt(e,t){if(!je(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 V(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 We(e,t,n,o,"POST",i,a)}async function an(e,t,n,r,a,o={}){let i=Ie(t,n);if(i){let c=await j({transport:e.backendTransport??"gatey",apiName:e.backendApiName,baseUrl:e.backendBaseUrl});if(!W(c,i))throw new T(`Backend does not support ${i}.`,{...e,backendCompatibility:c})}let s=rn(t,n);return We(e,t,"prompt",s,r,a,o)}async function We(e,t,n,r,a,o,i={}){if(e.backendTransport==="fetch"){if(!e.backendBaseUrl)throw new T("backendTransport=fetch but backendBaseUrl is missing.",e);return 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 c=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...a.headers??{}},d=i==="prompt"?Ve(s,r):void 0,l=await $(s,u,{cacheKey:d}),m=a.query&&Object.keys(a.query).length>0?"?"+new URLSearchParams(Object.entries(a.query).map(([b,h])=>[b,String(h)])).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(c+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 h=await g.text();h&&(b=`${b}: ${h.substring(0,400)}`)}catch{}throw new T(`Fetch backend call failed: ${b}`,o,g.status)}let y=g.headers.get("content-type")||"",f=ze(g.headers,"x-recaptcha-verified-at");if(y.includes("application/json")){let b=await g.json(),h=(b&&typeof b.sessionId=="string"&&b.sessionId.trim()?b.sessionId.trim():void 0)??d;return f&&h&&me(h,f),b}return f&&d&&me(d,f),await g.text()}async function sn(e,t,n,r,a,o,i,s){let c=$t(),u;switch(n.toUpperCase()){case"POST":u=c?.cognito?.post;break;case"GET":u=c?.cognito?.get;break;case"PUT":u=c?.cognito?.put;break;case"PATCH":u=c?.cognito?.patch;break;case"DELETE":u=c?.cognito?.del;break;default:throw new T(`Unsupported HTTP method "${n}" for Gatey backend.`,o)}if(!u)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 $(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=u({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=ze(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??d;return y&&typeof b=="string"&&b.trim()&&me(b.trim(),y),N(a,{feature:i,context:s,step:"backend:response",source:"backend"}),f}var Ne,Zt,en,tn,fe=S(()=>{"use strict";Y();ce();Z();Ne=new Map;Zt={prompt:["text","audio","audioUrl","systemPrompt","context","maxTokens","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","locale","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 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===`
2
- `||i==="\r"||a===e.length-1)){r=a+1;break}}return r>t+(n-t)*.5?r:-1}function un(e,t,n){let r=-1;for(let a=n-1;a>=t;a--){let o=e[a],i=a+1<e.length?e[a+1]:"";if((o===","||o===";"||o===":")&&(i===" "||i===`
1
+ var mt=Object.defineProperty;var P=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var oe=(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=c=>{window.removeEventListener("wpsuite:ai-kit:ready",a),window.removeEventListener("wpsuite:ai-kit:error",o),s&&clearTimeout(s),c()};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 Y=P(()=>{"use strict"});import{getConfig as ve,getCustomTranslations as bt,getWpSuite as yt}from"@smart-cloud/wpsuite-core";import{createReduxStore as wt,dispatch as Ae,register as ht,select as kt,subscribe as Ct}from"@wordpress/data";import{I18n as Ce}from"aws-amplify/utils";var ie,vt,At,St,Pt,xt,Q,Tt,Se,Lt,X=P(()=>{"use strict";Y();ie=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=ie(await ve("aiKit")),t=await bt({legacyUrl:R()?.settings.customTranslationsUrl});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"?Ce.setLanguage(""):Ce.setLanguage(e),{type:"SET_LANGUAGE",language:e}},setDirection(e){return{type:"SET_DIRECTION",direction:e}},setConfig:e=>({type:"SET_CONFIG",config:e})},St={getConfig(e){return e.config},isShowChatbotPreview(e){return e.showChatbotPreview},getCustomTranslations(e){return e.customTranslations},getLanguage(e){return e.language},getDirection(e){return e.direction},getState(e){return e}},Pt={},xt=e=>{let t=Ae(e);return delete t.setConfig,t},Q=e=>kt(e),Tt=async e=>{yt().siteSettings.lastUpdate=Date.now();let t=await ve("aiKit"),n=ie(t);Ae(e).setConfig(n)},Se=async()=>{let e=await vt(),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:At,selectors:St,resolvers:Pt});return ht(t),t},Lt=(e,t,n)=>{let r;function a(){let i=Q(e).getState(),s=t(i);if(s!==r){let c=r;r=s,n(r,c)}}let o=Ct(a,e);return a(),o}});var C,Pe=P(()=>{"use strict";C="smartcloud-ai-kit"});import{jsx as S,jsxs as se}from"react/jsx-runtime";var er,tr,nr,xe=P(()=>{"use strict";er=e=>se("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:[S("path",{d:"M19 27H33"}),S("path",{d:"M19 33H33"}),S("path",{d:"M8 21L9.5 24L12.5 25.5L9.5 27L8 30L6.5 27L3.5 25.5L6.5 24Z"}),S("path",{d:"M36 4L38 8L42 10L38 12L36 16L34 12L30 10L34 8Z"}),S("path",{d:"M16 10V40H36V22"}),S("path",{d:"M16 10H22"}),S("path",{d:"M22 10V23H36"}),S("path",{d:"M22 10L36 22"})]}),tr=e=>se("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:[S("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"}),S("rect",{x:"14",y:"13",width:"6",height:"6",rx:"1"}),S("rect",{x:"28",y:"13",width:"6",height:"6",rx:"1"}),S("path",{d:"M16 24H32"})]}),nr=e=>se("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:[S("path",{stroke:"none",d:"M0 0h48v48H0z",fill:"none"}),S("path",{d:"M6 20a14 14 0 1 0 28 0a14 14 0 1 0 -28 0"}),S("path",{d:"M42 42l-12 -12"}),S("path",{d:"M20 20a3 3 0 1 0 -2.28 -4.948"}),S("circle",{cx:"20",cy:"26",r:"0.9",fill:"currentColor",stroke:"none"})]})});var T,ce=P(()=>{"use strict";T=class extends Error{constructor(n,r,a){super(n);this.decision=r;this.status=a;this.name="AiBackendError"}decision;status}});var ir,sr,cr,Te=P(()=>{"use strict";ir="Answers from {name} are generated by AI and may contain mistakes. Check important information.",sr="This summary was generated by AI and may contain mistakes. Check important information.",cr=(e,t)=>e.split("{name}").join(t)});function w(e,t,n){throw new ue(e,t,n)}function E(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&w("invalid_type",t,`${t} must be an object.`),e}function I(e,t,n){let r=new Set(t),a=Object.keys(e).find(o=>!r.has(o));a&&w("unknown_field",`${n}.${a}`,`${n}.${a} is not part of contract v1.`)}function A(e,t,n){(typeof e!="string"||e.trim()==="")&&w("invalid_string",t,`${t} must be a non-empty string.`);let r=e.trim();return n&&!n.test(r)&&w("invalid_format",t,`${t} has an invalid format.`),r}function _(e,t){return A(e,t,/^(?:0|[1-9][0-9]*)$/)}function le(e,t){let n=A(e,t);return(!/^\d{4}-\d{2}-\d{2}T/.test(n)||!Number.isFinite(Date.parse(n)))&&w("invalid_timestamp",t,`${t} must be an ISO-8601 timestamp.`),n}function de(e,t){let n=A(e,t),r;try{r=new URL(n)}catch{w("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`)}return r.protocol!=="http:"&&r.protocol!=="https:"&&w("invalid_url",t,`${t} must be an absolute HTTP(S) URL.`),n}function Ot(e,t){let n=A(e,t).replace(/_/g,"-");try{let r=new Intl.Locale(n).language.toLowerCase();if(!/^[a-z]{2,8}$/.test(r))throw new Error("invalid language");return r}catch{return w("invalid_locale",t,`${t} must be a valid BCP 47 locale.`)}}function pe(e){let t=E(e,"source");return I(t,["producer","siteId","blogId","postType","postId"],"source"),t.producer!=="wordpress"&&w("unsupported_producer","source.producer","Only wordpress is supported in v1."),{producer:"wordpress",siteId:A(t.siteId,"source.siteId",/^[A-Za-z0-9._:-]+$/),blogId:_(t.blogId,"source.blogId"),postType:A(t.postType,"source.postType",/^[a-z0-9_-]+$/),postId:_(t.postId,"source.postId")}}function Rt(e,t){let n=`document.metadata[${t}]`,r=E(e,n);return I(r,["namespace","slug","label"],n),{namespace:A(r.namespace,`${n}.namespace`,/^[a-z0-9_.:-]+$/),slug:A(r.slug,`${n}.slug`,/^[a-z0-9][a-z0-9._-]*$/),label:A(r.label,`${n}.label`)}}function Le(e){let t=E(e,"document");return I(t,["profile","canonicalUrl","title","excerpt","content","contentType","contentSha256","modifiedGmt","metadata"],"document"),t.contentType!=="text/markdown"&&w("unsupported_content_type","document.contentType","Contract v1 supports text/markdown documents only."),Array.isArray(t.metadata)||w("invalid_type","document.metadata","document.metadata must be an array."),{profile:A(t.profile,"document.profile",/^[a-z0-9][a-z0-9._-]*$/),canonicalUrl:de(t.canonicalUrl,"document.canonicalUrl"),title:A(t.title,"document.title"),excerpt:typeof t.excerpt=="string"?t.excerpt:"",content:A(t.content,"document.content"),contentType:"text/markdown",contentSha256:A(t.contentSha256,"document.contentSha256",/^[a-f0-9]{64}$/),modifiedGmt:le(t.modifiedGmt,"document.modifiedGmt"),metadata:t.metadata.map(Rt)}}function Et(e){let t=E(e,"document");I(t,["profile","locale","canonicalUrl","title","excerpt","content","contentType","contentSha256","modifiedGmt","metadata"],"document");let n={...t};return delete n.locale,{...Le(n),locale:Ot(t.locale,"document.locale")}}function It(e,t){let n=E(e,"projection");I(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==1&&w("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=pe(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&w("source_boundary_mismatch","projection.source","Projection source does not match the authenticated producer boundary.");let a={schemaVersion:1,source:r,sourceVersion:_(n.sourceVersion,"projection.sourceVersion"),correlationId:A(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:le(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&w("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:Le(n.document)}):n.operation==="delete"?(n.document!==null&&w("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:de(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):w("invalid_operation","projection.operation","Unsupported desired operation.")}function Bt(e,t){let n=E(e,"projection");I(n,["schemaVersion","source","sourceVersion","correlationId","observedAt","operation","document","lastPublicUrl"],"projection"),n.schemaVersion!==2&&w("unsupported_schema","projection.schemaVersion","Unsupported contract version.");let r=pe(n.source);t&&(r.producer!==t.producer||r.siteId!==t.siteId)&&w("source_boundary_mismatch","projection.source","Projection source does not match the authenticated producer boundary.");let a={schemaVersion:2,source:r,sourceVersion:_(n.sourceVersion,"projection.sourceVersion"),correlationId:A(n.correlationId,"projection.correlationId",/^[A-Za-z0-9._:-]+$/),observedAt:le(n.observedAt,"projection.observedAt")};return n.operation==="upsert"?("lastPublicUrl"in n&&w("unknown_field","projection.lastPublicUrl","lastPublicUrl is valid only for delete projections."),{...a,operation:"upsert",document:Et(n.document)}):n.operation==="delete"?(n.document!==null&&w("invalid_delete","projection.document","Delete projections require document=null."),{...a,operation:"delete",document:null,...n.lastPublicUrl!==void 0?{lastPublicUrl:de(n.lastPublicUrl,"projection.lastPublicUrl")}:{}}):w("invalid_operation","projection.operation","Unsupported desired operation.")}function pr(e,t){let n=E(e,"projection").schemaVersion;return n===1?It(e,t):n===2?Bt(e,t):w("unsupported_schema","projection.schemaVersion","Unsupported contract version.")}function gr(e){let t=E(e,"policy");I(t,["schemaVersion","postType","enabled","autoEnableSource","reviewPolicy","onPublish","onPublishedUpdate","onUnpublish","metadataRefresh","includeTaxonomies","documentProfile"],"policy"),t.schemaVersion!==1&&w("unsupported_schema","policy.schemaVersion","Unsupported policy version."),typeof t.enabled!="boolean"&&w("invalid_type","policy.enabled","policy.enabled must be boolean."),t.autoEnableSource!=="administrator"&&t.autoEnableSource!=="migration"&&t.autoEnableSource!=="system"&&w("invalid_policy","policy.autoEnableSource","Invalid auto-enable source."),t.reviewPolicy!=="wordpress-publish-is-approval"&&t.reviewPolicy!=="manual-kb-review"&&t.reviewPolicy!=="disabled"&&w("invalid_policy","policy.reviewPolicy","Invalid review policy."),(t.onPublish!=="upsert"||t.onPublishedUpdate!=="upsert"||t.onUnpublish!=="delete"||t.metadataRefresh!=="reconcile")&&w("invalid_policy","policy","Unsupported policy action in contract v1."),Array.isArray(t.includeTaxonomies)||w("invalid_type","policy.includeTaxonomies","policy.includeTaxonomies must be an array.");let n=[...new Set(t.includeTaxonomies.map((r,a)=>A(r,`policy.includeTaxonomies[${a}]`,/^[a-z0-9_-]+$/)))].sort();return{schemaVersion:1,postType:A(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:A(t.documentProfile,"policy.documentProfile",/^[a-z0-9][a-z0-9._-]*$/)}}function mr(e,t){let n=BigInt(_(e,"candidateSourceVersion")),r=BigInt(_(t,"acceptedSourceVersion"));return n<r?"older":n>r?"newer":"same"}function fr(e){let t=pe(e);return[t.producer,t.siteId,t.blogId,t.postType,t.postId].map(encodeURIComponent).join(":")}var lr,dr,ue,Oe=P(()=>{"use strict";lr=1,dr=2,ue=class extends Error{constructor(n,r,a){super(a);this.code=n;this.field=r;this.name="KnowledgeSyncContractError"}code;field}});import{getGateyPlugin as Kt}from"@smart-cloud/gatey-core";function Ie(e,t){return`ai.${t}.${e}`}function Be(e,t){if(t==="/conversation-profile")return e==="admin"?"ai.conversation-profile.admin":void 0;if(t==="/cost-policy")return e==="admin"?"ai.cost-policy.admin":void 0;if(t.startsWith("/kb/"))return e==="admin"?"knowledge.admin":"knowledge.query.frontend"}function Ut(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e,n=t.transports,r=n===void 0||!!n&&typeof n=="object"&&!Array.isArray(n)&&(n.chatWebSocketUrl===void 0||typeof n.chatWebSocketUrl=="string")&&(n.chatStreamTicketUrl===void 0||typeof n.chatStreamTicketUrl=="string");return t.schemaVersion===1&&t.product==="smartcloud-ai-kit-backend"&&typeof t.release=="string"&&!!t.capabilities&&typeof t.capabilities=="object"&&!Array.isArray(t.capabilities)&&r}async function _t(e){if(e.transport==="fetch"){if(!e.baseUrl)throw new Error("backendBaseUrl is missing");let r=await fetch(`${e.baseUrl.replace(/\/+$/,"")}${Re}`,{method:"GET",credentials:"omit"});if(!r.ok)throw new Error(`HTTP ${r.status}`);return r.json()}if(!e.apiName)throw new Error("backendApiName is missing");let t=Kt()?.cognito?.get;if(!t)throw new Error("Gatey GET transport is unavailable");return(await t({apiName:e.apiName,path:Re,options:{retryStrategy:{strategy:"no-retry"}}}).response).body.json()}async function j(e){let t=`${e.transport}:${e.apiName??e.baseUrl??""}`,n=Ee.get(t);if(n&&n.expiresAt>Date.now())return n.value;let r;try{let a=await _t(e);r=Ut(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 Ee.set(t,{expiresAt:Date.now()+Mt,value:r}),r}function W(e,t,n=1){if(e.status==="legacy")return n<=1&&Dt.has(t);let r=e.manifest?.capabilities[t];return typeof r=="number"&&r>=n}var Re,Mt,Dt,Ee,Z=P(()=>{"use strict";Re="/meta/capabilities",Mt=300*1e3,Dt=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"]),Ee=new Map});function kr(e){if(!(!Ke(e)||e.version!==1)&&!(typeof e.type!="string"||!Ft.has(e.type)||typeof e.conversationId!="string"||!e.conversationId||typeof e.turnId!="string"||!e.turnId||typeof e.eventId!="string"||!e.eventId||typeof e.timestamp!="string"||!e.timestamp||!Number.isSafeInteger(e.seq)||e.seq<0||!Ke(e.payload)))return e}var hr,Ft,Ke,Me=P(()=>{"use strict";hr=1,Ft=new Set(["turn.accepted","activity.started","activity.completed","activity.failed","answer.delta","citation.upsert","answer.completed","turn.failed","turn.cancelled","turn.snapshot"]),Ke=e=>!!e&&typeof e=="object"&&!Array.isArray(e)});var Ve={};oe(Ve,{MIN_CHROME_VERSION:()=>_e,checkOnDeviceAvailability:()=>Ne,decideCapability:()=>ee,isOnDeviceLanguageSupported:()=>K,resolveBackend:()=>F});import{getWpSuite as Nt}from"@smart-cloud/wpsuite-core";import{getGateyPlugin as Vt}from"@smart-cloud/gatey-core";async function De(){let t=await Nt()?.plugins?.aiKit?.features.store;return Q(t).getConfig()??{}}function Ue(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}=Ue(e);return t?"backend-fallback":"local-only"}async function F(e){let t=await De(),{transport:n,backendApiName:r,backendBaseUrl:a}=Ue(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 j({transport:n,baseUrl:a});return e&&!W(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=Vt();if(!o?.availability||await o.availability()!=="available")return{available:!1,reason:"Gatey is not available"};let i=await j({transport:n,apiName:r});return e&&!W(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 Fe(e){if(!e)return;let t=Number.parseInt(String(e).split(".")[0]??"",10);return Number.isFinite(t)?t:void 0}function J(e,t){return e?.find(n=>n.brand===t)?.version}async function Wt(){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 $t(e){let t=e.match(/\b(?:Chrome|Chromium)\/(\d{2,3})\b/i);return t?.[1]?Fe(t[1]):void 0}function qt(){return!!navigator?.brave}async function Ht(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 Wt(),r=J(n,"Microsoft Edge")??J(n,"Microsoft Edge WebView2"),a=J(n,"Google Chrome")??J(n,"Chromium"),o=!!r||/\bEdg\//i.test(t)||/\bEdgiOS\//i.test(t),i=/\bOPR\//i.test(t),s=/\bVivaldi\//i.test(t),c=/\bSamsungBrowser\//i.test(t),u=/\bFirefox\//i.test(t),d=!/\bChrome\//i.test(t)&&/\bSafari\//i.test(t)&&!/\bChromium\//i.test(t),l=qt()||/\bBrave\//i.test(t);if(o||i||s||c||u||d||l)return{allowed:!1,reason:o?"edge":l?"brave":u?"firefox":d?"safari":i?"opera":s?"vivaldi":c?"samsung":"unsupported-browser"};let m=Fe(a)??$t(t),g=_e[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 Ne(e,t){try{let n=await Ht(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(!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 K(e){let t=["en","ja","es"],n=e.toLowerCase();return t.some(r=>n===r.toLowerCase())}async function ee(e,t,n,r="admin"){let a=await De(),o=n||zt(a),i=await F(Ie(r,e)),s=await Ne(e,t),c=s.available,u=i.available,d={feature:e,mode:o,onDeviceAvailable:c,onDeviceStatus:s.status,onDeviceReason:s.reason,backendAvailable:u,backendTransport:i.transport,backendApiName:i.apiName,backendBaseUrl:i.baseUrl,backendReason:i.reason,backendCompatibility:i.compatibility};return o==="local-only"?c?{...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"?u?{...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"})`}:c?{...d,source:"on-device",reason:`backend-fallback, using on-device (${s.reason??s.status})`}:u?{...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,jt,ge=P(()=>{"use strict";X();Z();_e={summarizer:138,translator:138,"language-detector":138,writer:137,rewriter:137,proofreader:141,prompt:138},jt=new Set(["writer","rewriter","proofreader","prompt"])});var He={};oe(He,{dispatchCustomBackend:()=>cn,dispatchFeatureBackend:()=>V,withRecaptchaHeaders:()=>$});import{getGateyPlugin as Gt}from"@smart-cloud/gatey-core";import{getRecaptcha as Yt,getWpSuite as Qt}from"@smart-cloud/wpsuite-core";function Xt(e){if(!e)return;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function Zt(e){let t=e?.reCaptchaChatTtlSeconds,n=typeof t=="number"&&Number.isFinite(t)?Math.max(0,t):120;return Math.min(3600,n)*1e3}function Jt(e,t){let n=Zt(t);if(n<=0)return!1;let r=ze.get(e);return r?Date.now()-r<n:!1}function me(e,t){let n=Xt(t);n&&ze.set(e,n)}function je(e,t){if(e!=="frontend"||!$e(t)||t.saveChatSession!==!0)return;let n=t.sessionId;return typeof n=="string"&&n.trim()?n.trim():void 0}function We(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 en(e,t){if(e!=="frontend")return;let n=Qt()?.siteSettings;if(!n?.reCaptchaPublicKey||t?.cacheKey&&Jt(t.cacheKey,R()?.settings||{}))return;let{execute:r}=await Yt(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 $(e,t,n){if(e!=="frontend"||t["X-Recaptcha-Token"]||t["x-recaptcha-token"])return t;let r=await en(e,n);return r?{...t,"X-Recaptcha-Token":r}:t}function N(e,t){try{e?.onStatus?.(t)}catch{}}function $e(e){return typeof e=="object"&&e!==null&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function nn(e,t){if(!$e(t))return t;let n=tn[e];if(!n)return t;let r={};for(let a of n)a in t&&(r[a]=t[a]);return r}function on(e,t){return(e==="admin"?rn:an)[t]}function sn(e,t){return`${e==="admin"?"/admin":"/frontend"}${t}`}async function V(e,t,n,r,a={}){let o=on(t,n);if(!o)throw new T(`No backend path configured for "${n}" (${t}).`,e);let i=nn(n,r);return qe(e,t,n,o,"POST",i,a)}async function cn(e,t,n,r,a,o={}){let i=Be(t,n);if(i){let c=await j({transport:e.backendTransport??"gatey",apiName:e.backendApiName,baseUrl:e.backendBaseUrl});if(!W(c,i))throw new T(`Backend does not support ${i}.`,{...e,backendCompatibility:c})}let s=sn(t,n);return qe(e,t,"prompt",s,r,a,o)}async function qe(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 un(e.backendBaseUrl,r,a,o,i,e,n,t)}if(!e.backendApiName)throw new T("backendTransport=gatey but backendApiName is missing.",e);return ln(e.backendApiName,r,a,o,i,e,n,t)}async function un(e,t,n,r,a,o,i,s){let c=`${e.replace(/\/+$/,"")}${t}`,u={"content-type":"application/json",...a.headers??{}},d=i==="prompt"?je(s,r):void 0,l=await $(s,u,{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(c+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 T(`Fetch backend call failed: ${b}`,o,g.status)}let y=g.headers.get("content-type")||"",f=We(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&&me(k,f),b}return f&&d&&me(d,f),await g.text()}async function ln(e,t,n,r,a,o,i,s){let c=Gt(),u;switch(n.toUpperCase()){case"POST":u=c?.cognito?.post;break;case"GET":u=c?.cognito?.get;break;case"PUT":u=c?.cognito?.put;break;case"PATCH":u=c?.cognito?.patch;break;case"DELETE":u=c?.cognito?.del;break;default:throw new T(`Unsupported HTTP method "${n}" for Gatey backend.`,o)}if(!u)throw new T(`Gatey backend selected, but Gatey.cognito.${n.toLowerCase()} is not available.`,o);let d=i==="prompt"?je(s,r):void 0,l=await $(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=u({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=We(g.headers,"x-recaptcha-verified-at"),f=await g.body.json(),b=f?.sessionId??d;return y&&typeof b=="string"&&b.trim()&&me(b.trim(),y),N(a,{feature:i,context:s,step:"backend:response",source:"backend"}),f}var ze,tn,rn,an,fe=P(()=>{"use strict";Y();ce();Z();ze=new Map;tn={prompt:["text","audio","audioUrl","systemPrompt","context","maxTokens","responseConstraint","saveChatSession","engine","sessionId","images","imageUrls","feedbackMessageId","feedbackType","knowledgeBaseId","disableKB","locale","outputLanguage","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"]};rn={prompt:"/admin/prompt",writer:"/admin/write",rewriter:"/admin/rewrite",summarizer:"/admin/summarize",translator:"/admin/translate","language-detector":"/admin/detect-language",proofreader:"/admin/proofread"},an={prompt:"/frontend/prompt",writer:"/frontend/write",rewriter:"/frontend/rewrite",summarizer:"/frontend/summarize",translator:"/frontend/translate","language-detector":"/frontend/detect-language",proofreader:"/frontend/proofread"}});function dn(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 pn(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 te(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=cn(e,r,a);if(s>0)a=s;else{let c=un(e,r,a);if(c>0)a=c;else{let u=e.lastIndexOf(" ",a);u>r+t*.5&&(a=u+1)}}}}let o=e.substring(r,a).trim();o.length>0&&n.push({text:o,start:r,end:a}),r=a}return n}var qe=S(()=>{"use strict"});var ct={};oe(ct,{detectLanguage:()=>On,getPromptOptions:()=>st,getProofreadOptions:()=>Ze,getRewriteOptions:()=>Xe,getSummarizeOptions:()=>Je,getTranslateOptions:()=>et,getWriteOptions:()=>Qe,prompt:()=>Fn,proofread:()=>Tn,rewrite:()=>Sn,sendChatMessage:()=>Un,sendFeedbackMessage:()=>Nn,sendSearchMessage:()=>_n,summarize:()=>Ln,translate:()=>H,write:()=>xn});import{getGateyPlugin as ln}from"@smart-cloud/gatey-core";import{getWpSuite as dn}from"@smart-cloud/wpsuite-core";import{I18n as ke}from"aws-amplify/utils";function ye(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(ye).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+ye(t[r])).join(",")+"}"}function pn(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function gn(e,t){return`${e}:${pn(ye(t))}`}function be(){let e=new Map;for(let n of x.values()){let r=e.get(n.kind)??[];r.push(n),e.set(n.kind,r)}for(let[n,r]of e.entries())if(!(r.length<=Ge)){r.sort((a,o)=>a.refCount-o.refCount||a.lastUsed-o.lastUsed||a.key.localeCompare(o.key));for(let a of r){if(e.get(n).length<=Ge)break;if(!(a.refCount>0)){try{a.destroy()}catch{}x.delete(a.key),e.set(n,(e.get(n)??[]).filter(o=>o.key!==a.key))}}}if(x.size<=He)return;let t=Array.from(x.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(x.size<=He)break;if(!(n.refCount>0)){try{n.destroy()}catch{}x.delete(n.key)}}}async function M(e,t,n,r){let a=gn(e,t),o=x.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),x.delete(a),x.set(a,o),{model:o.model,fromCache:!0,release:()=>{let c=x.get(a);c&&(c.refCount=Math.max(0,c.refCount-1),c.lastUsed=Date.now(),be())}};let i=q.get(a);if(i)return i;let s=(async()=>{let c=await n(),u={kind:e,key:a,model:c,refCount:1,lastUsed:Date.now(),destroy:()=>r(c)};return x.set(a,u),q.delete(a),be(),{model:c,fromCache:!1,release:()=>{let d=x.get(a);d&&(d.refCount=Math.max(0,d.refCount-1),d.lastUsed=Date.now(),be())}}})().catch(c=>{throw q.delete(a),c});return q.set(a,s),s}function L(){return(dn()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function p(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function O(e){return e?.context??"admin"}function D(e,t=mn){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,c=()=>{if(n.signal.aborted)return;let u=typeof r?.reason<"u"?r?.reason:void 0;n.abort(u??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?c():r.addEventListener("abort",c)),o&&o>0&&(i=setTimeout(()=>{n.signal.aborted||(s=!0,n.abort(new we(o)))},o)),{signal:n.signal,timedOut:()=>s,dispose:()=>{i&&(clearTimeout(i),i=void 0),r&&r.removeEventListener("abort",c)}}}function ne(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 fn(e,t,n,r){let a=ne(e),o=await ot(e.images,n,t,r);return{text:e.messages.filter(i=>i.role==="user").map(i=>i.content).join(`
5
+ `,a);if(i>r+t*.5)a=i+2;else{let s=dn(e,r,a);if(s>0)a=s;else{let c=pn(e,r,a);if(c>0)a=c;else{let u=e.lastIndexOf(" ",a);u>r+t*.5&&(a=u+1)}}}}let o=e.substring(r,a).trim();o.length>0&&n.push({text:o,start:r,end:a}),r=a}return n}var Ge=P(()=>{"use strict"});var lt={};oe(lt,{detectLanguage:()=>In,getPromptOptions:()=>ut,getProofreadOptions:()=>et,getRewriteOptions:()=>Je,getSummarizeOptions:()=>tt,getTranslateOptions:()=>nt,getWriteOptions:()=>Ze,prompt:()=>Nn,proofread:()=>Rn,rewrite:()=>On,sendChatMessage:()=>Vn,sendFeedbackMessage:()=>jn,sendSearchMessage:()=>zn,summarize:()=>En,translate:()=>H,write:()=>Ln});import{getGateyPlugin as gn}from"@smart-cloud/gatey-core";import{getWpSuite as mn}from"@smart-cloud/wpsuite-core";import{I18n as he}from"aws-amplify/utils";function ye(e){if(e==null)return String(e);if(typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return"["+e.map(ye).join(",")+"]";let t=e;return"{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+ye(t[r])).join(",")+"}"}function fn(e){let t=5381;for(let n=0;n<e.length;n++)t=t*33^e.charCodeAt(n);return(t>>>0).toString(36)}function bn(e,t){return`${e}:${fn(ye(t))}`}function be(){let e=new Map;for(let n of x.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<=Qe)){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<=Qe)break;if(!(a.refCount>0)){try{a.destroy()}catch{}x.delete(a.key),e.set(n,(e.get(n)??[]).filter(o=>o.key!==a.key))}}}if(x.size<=Ye)return;let t=Array.from(x.values());t.sort((n,r)=>n.refCount-r.refCount||n.lastUsed-r.lastUsed||n.key.localeCompare(r.key));for(let n of t){if(x.size<=Ye)break;if(!(n.refCount>0)){try{n.destroy()}catch{}x.delete(n.key)}}}async function M(e,t,n,r){let a=bn(e,t),o=x.get(a);if(o)return o.refCount++,o.lastUsed=Date.now(),x.delete(a),x.set(a,o),{model:o.model,fromCache:!0,release:()=>{let c=x.get(a);c&&(c.refCount=Math.max(0,c.refCount-1),c.lastUsed=Date.now(),be())}};let i=q.get(a);if(i)return i;let s=(async()=>{let c=await n(),u={kind:e,key:a,model:c,refCount:1,lastUsed:Date.now(),destroy:()=>r(c)};return x.set(a,u),q.delete(a),be(),{model:c,fromCache:!1,release:()=>{let d=x.get(a);d&&(d.refCount=Math.max(0,d.refCount-1),d.lastUsed=Date.now(),be())}}})().catch(c=>{throw q.delete(a),c});return q.set(a,s),s}function L(){return(mn()?.plugins?.aiKit?.settings??{}).defaultOutputLanguage??"en"}function p(e,t,n,r){try{n?.onStatus?.({feature:e,context:t,...r})}catch{}}function O(e){return e?.context??"admin"}function D(e,t=yn){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,c=()=>{if(n.signal.aborted)return;let u=typeof r?.reason<"u"?r?.reason:void 0;n.abort(u??new DOMException("Aborted","AbortError"))};return r&&(r.aborted?c():r.addEventListener("abort",c)),o&&o>0&&(i=setTimeout(()=>{n.signal.aborted||(s=!0,n.abort(new we(o)))},o)),{signal:n.signal,timedOut:()=>s,dispose:()=>{i&&(clearTimeout(i),i=void 0),r&&r.removeEventListener("abort",c)}}}function ne(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 wn(e,t,n,r){let a=ne(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 bn(e,t,n,r){let a=ne(e),o=await ot(e.images,n,t,r),i=await it(e.audio,n,t,r);return{sessionId:e.sessionId,text:e.message,images:o?.images,imageUrls:o?.imageUrls,audio:i?.audio,audioUrl:i?.audioUrl,locale:e.locale,maxTokens:e.maxTokens,saveChatSession:!0,...a}}async function yn(e,t,n,r){let a=ne(e),o=await it(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,locale:e.locale,saveChatSession:!1,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...a}}async function wn(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function kn(e){let t=ne(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 hn(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 Cn(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 vn(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function An(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Pn(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 c=await ee(r,a,t,e);p(r,e,s,{step:"decide",source:c.source,message:`Using ${c.source}`,silent:n});let u=!1;if(c.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"&&(u=!0)}if(c.mode!=="local-only"&&c.backendAvailable){p(r,e,s,{step:"backend:request",source:"backend",silent:n});let l=typeof i=="function"?await i(c):i,m=await V(c,e,r,l,s);return p(r,e,s,{step:"done",source:"backend",silent:n}),m}let d=u?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":c.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${d}`)}function Rn(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 Bn(e){return typeof Blob<"u"&&e instanceof Blob}function En(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 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":(t.includes("webm"),"webm")}function Mn(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":"webm"}async function Dn(e){return new Promise((t,n)=>{let r=new FileReader;r.onerror=()=>n(r.error??new Error("FileReader error")),r.onload=()=>t(String(r.result??"")),r.readAsDataURL(e)})}async function nt(e){let t=await Dn(e),n=t.indexOf(",");return n>=0?t.substring(n+1):t}async function rt(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??{}},c=await $(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:c,signal:o?.signal,credentials:"omit"});if(!f.ok){let h=await f.text().catch(()=>"");throw new Error(`generate-upload-url (fetch) failed: HTTP ${f.status}${h?": "+h.substring(0,200):""}`)}let b=await f.json();if(!b?.uploadUrl||!b?.key)throw new Error("generate-upload-url (fetch) response missing uploadUrl/key");return{uploadUrl:b.uploadUrl,key:b.key}}if(!e.backendApiName)throw new Error("Backend not available for signed URL request");let u=ln(),d={fileName:n,contentType:r,contentLength:a};if(u?.cognito?.get){let g=u.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((f,b)=>(f[b]=String(d[b]),f),{}),headers:c,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(!u?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=u.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:c,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 at(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 ot(e,t,n,r){if(!e||e.length===0)return;let a=[];for(let u of e){if(!Bn(u))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(u)}let o=a.reduce((u,d)=>u+(d.size||0),0);if(Math.ceil(o*1.37+2048*a.length)<=tt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining images as base64"});let u=[];for(let d of a)u.push({format:In(d.type),data:await nt(d)});return{images:u}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let c=[];for(let u=0;u<a.length;u++){let d=a[u],l=d.type||"application/octet-stream",m=d.name||`image_${u}.${En(l)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL"});let{uploadUrl:g,key:y}=await rt(t,n,m,l,d.size||0,r);p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading"}),await at(g,d,l,r),c.push(y)}return{imageUrls:c}}async function it(e,t,n,r){if(!e)return;let a=e.size||0;if(Math.ceil(a*1.37+2048)<=tt){p("prompt",n,r,{step:"backend:request",source:"backend",message:"Inlining audio as base64"});let l=Mn(e.type||"audio/webm"),m=await nt(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",c=e.name||`audio.${Kn(s)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:u,key:d}=await rt(t,n,c,s,e.size||0,r);return p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await at(u,e,s,r),{audioUrl:d}}var He,Ge,x,q,mn,Ye,we,Qe,xn,Xe,Sn,Ze,Tn,Je,Ln,On,et,H,tt,st,Fn,Un,_n,Nn,ut=S(()=>{"use strict";fe();ge();dt();qe();He=8,Ge=2,x=new Map,q=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of x.values())try{e.destroy()}catch{}x.clear(),q.clear()});mn=45e3,Ye=5e3,we=class extends Error{timeoutMs;constructor(t){super(`On-device execution exceeded ${t}ms`),this.name="OnDeviceTimeoutError",this.timeoutMs=t}};Qe=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;K(a)||(i=!0,a="en");let s=Qe({...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 c=D(t);try{let{model:u,release:d}=await M("writer",{core:s,sharedContext:r},()=>Writer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("writer",n,t,{step:"on-device:ready",source:"on-device"});try{p("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await u.measureInputUsage(e.prompt,{context:e.context,signal:c.signal}),y=u.inputQuota;if(g>y){let f=te(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let z=ke.get("Writing part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));p("writer",n,t,{step:"on-device:run",source:"on-device",message:z});let ae=await u.write(f[h].text,{context:e.context,signal:c.signal});b.push(ae)}l=b.join(`
7
+ `),images:o?.images,imageUrls:o?.imageUrls,context:e.sharedContext,maxTokens:e.maxTokens,outputLanguage:e.outputLanguage,saveChatSession:!1,responseConstraint:e.responseConstraint,...a}}async function hn(e,t,n,r){let a=ne(e),o=await st(e.images,n,t,r),i=await ct(e.audio,n,t,r);return{sessionId:e.sessionId,text:e.message,images:o?.images,imageUrls:o?.imageUrls,audio:i?.audio,audioUrl:i?.audioUrl,locale:e.locale,maxTokens:e.maxTokens,saveChatSession:!0,...a}}async function kn(e,t,n,r){let a=ne(e),o=await ct(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,locale:e.locale,saveChatSession:!1,userSelectedCategories:e.userSelectedCategories,userSelectedSubcategories:e.userSelectedSubcategories,userSelectedTags:e.userSelectedTags,...a}}async function Cn(e){return{sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType,saveChatSession:!0}}function vn(e){let t=ne(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 An(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,tone:e.tone,format:e.format,length:e.length}}function Sn(e){return{text:e.text,outputLanguage:e.outputLanguage,instruction:e.context?.trim()?e.context.trim():void 0,context:e.sharedContext,type:e.type,format:e.format,length:e.length}}function Pn(e,t,n){return{text:e,sourceLanguage:t,targetLanguage:n}}function xn(e,t){let n=t;return{text:e,maxCandidates:typeof n?.maxCandidates=="number"?n.maxCandidates:void 0}}function Tn(e){return{text:e.text,expectedInputLanguages:e.expectedInputLanguages}}async function U(e,t,n,r,a,o,i,s){p(r,e,s,{step:"decide",message:"Deciding capability",silent:n});let c=await ee(r,a,t,e);p(r,e,s,{step:"decide",source:c.source,message:`Using ${c.source}`,silent:n});let u=!1;if(c.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"&&(u=!0)}if(c.mode!=="local-only"&&c.backendAvailable){p(r,e,s,{step:"backend:request",source:"backend",silent:n});let l=typeof i=="function"?await i(c):i,m=await V(c,e,r,l,s);return p(r,e,s,{step:"done",source:"backend",silent:n}),m}let d=u?"On-device quota exceeded. The browser has reached its limit for AI operations. Please try again later or contact support.":c.reason;throw new Error(`No capability for "${r}" (${e}). Reason: ${d}`)}function Bn(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 Kn(e){return typeof Blob<"u"&&e instanceof Blob}function Mn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":t.includes("bmp")?"bmp":"jpg"}function Dn(e){let t=(e??"").toLowerCase();return t.includes("png")?"png":t.includes("webp")?"webp":t.includes("gif")?"gif":"jpeg"}function Un(e){let t=(e??"").toLowerCase();return t.includes("mp3")?"mp3":t.includes("wav")?"wav":t.includes("ogg")?"ogg":t.includes("aac")?"aac":t.includes("flac")?"flac":t.includes("m4a")?"m4a":(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 Fn(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 Fn(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??{}},c=await $(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:c,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 u=gn(),d={fileName:n,contentType:r,contentLength:a};if(u?.cognito?.get){let g=u.cognito.get({apiName:e.backendApiName,path:i,options:{queryParams:Object.keys(d).reduce((f,b)=>(f[b]=String(d[b]),f),{}),headers:c,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(!u?.cognito?.post)throw new Error("Gatey.cognito.post is not available");let l=u.cognito.post({apiName:e.backendApiName,path:i,options:{body:d,headers:c,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 u of e){if(!Kn(u))throw new Error("Backend multimodal prompting currently supports only Blob/File inputs for images.");a.push(u)}let o=a.reduce((u,d)=>u+(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 u=[];for(let d of a)u.push({format:Dn(d.type),data:await at(d)});return{images:u}}p("prompt",n,r,{step:"backend:request",source:"backend",message:"Uploading images via signed URL"});let c=[];for(let u=0;u<a.length;u++){let d=a[u],l=d.type||"application/octet-stream",m=d.name||`image_${u}.${Mn(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),c.push(y)}return{imageUrls:c}}async function ct(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=_n(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",c=e.name||`audio.${Un(s)}`;p("prompt",n,r,{step:"backend:request",source:"backend",message:"Requesting signed URL for audio"});let{uploadUrl:u,key:d}=await ot(t,n,c,s,e.size||0,r);return p("prompt",n,r,{step:"backend:waiting",source:"backend",message:"Uploading audio"}),await it(u,e,s,r),{audioUrl:d}}var Ye,Qe,x,q,yn,Xe,we,Ze,Ln,Je,On,et,Rn,tt,En,In,nt,H,rt,ut,Nn,Vn,zn,jn,dt=P(()=>{"use strict";fe();ge();gt();Ge();Ye=8,Qe=2,x=new Map,q=new Map;typeof window<"u"&&window.addEventListener("beforeunload",()=>{for(let e of x.values())try{e.destroy()}catch{}x.clear(),q.clear()});yn=45e3,Xe=5e3,we=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)},Ln=async(e,t)=>{let n=O(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;K(a)||(i=!0,a="en");let s=Ze({...e,outputLanguage:a});return U(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 c=D(t);try{let{model:u,release:d}=await M("writer",{core:s,sharedContext:r},()=>Writer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("writer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("writer",n,t,{step:"on-device:ready",source:"on-device"});try{p("writer",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let l="",m=!1,g=await u.measureInputUsage(e.prompt,{context:e.context,signal:c.signal}),y=u.inputQuota;if(g>y){let f=te(e.prompt,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let k=0;k<f.length;k++){let z=he.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 ae=await u.write(f[k].text,{context:e.context,signal:c.signal});b.push(ae)}l=b.join(`
8
8
 
9
- `)}}return m||(l=await u.write(e.prompt,{context:e.context,signal:c.signal})),i?{result:(await H({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying writer:",l)}}}finally{c.dispose()}},kn({...e,sharedContext:r,outputLanguage:o}),t)},Xe=e=>{let t=e.outputLanguage?e.outputLanguage:L(),n={tone:e.tone,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Sn=async(e,t)=>{let n=O(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;K(a)||(i=!0,a="en");let s=Xe({...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 c=D(t);try{let{model:u,release:d}=await M("rewriter",{core:s,sharedContext:r},()=>Rewriter.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{p("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l="",m=!1,g=await u.measureInputUsage(e.text,{context:e.context,signal:c.signal}),y=u.inputQuota;if(g>y){let f=te(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let h=0;h<f.length;h++){let z=ke.get("Rewriting part {current}/{total}...").replace("{current}",String(h+1)).replace("{total}",String(f.length));p("rewriter",n,t,{step:"on-device:run",source:"on-device",message:z});let ae=await u.rewrite(f[h].text,{context:e.context,signal:c.signal});b.push(ae)}l=b.join(`
9
+ `)}}return m||(l=await u.write(e.prompt,{context:e.context,signal:c.signal})),i?{result:(await H({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying writer:",l)}}}finally{c.dispose()}},vn({...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)},On=async(e,t)=>{let n=O(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;K(a)||(i=!0,a="en");let s=Je({...e,outputLanguage:a});return U(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 c=D(t);try{let{model:u,release:d}=await M("rewriter",{core:s,sharedContext:r},()=>Rewriter.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("rewriter",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("rewriter",n,t,{step:"on-device:ready",source:"on-device"});try{p("rewriter",n,t,{step:"on-device:run",source:"on-device",message:"Rewriting text"});let l="",m=!1,g=await u.measureInputUsage(e.text,{context:e.context,signal:c.signal}),y=u.inputQuota;if(g>y){let f=te(e.text,y*.8*3.5);if(f.length>1){let b=[];m=!0;for(let k=0;k<f.length;k++){let z=he.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 ae=await u.rewrite(f[k].text,{context:e.context,signal:c.signal});b.push(ae)}l=b.join(`
10
10
 
11
- `)}}return m||(l=await u.rewrite(e.text,{context:e.context,signal:c.signal})),i?{result:(await H({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{c.dispose()}},hn({...e,sharedContext:r,outputLanguage:o}),t)},Ze=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Tn=async(e,t)=>{let n=O(t),r=await Ze();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=D(t);try{let{model:o,release:i}=await M("proofreader",{core:r},()=>Proofreader.create({...r,monitor(s){s.addEventListener("downloadprogress",c=>{let u=c.loaded;p("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}}),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()}},Pn(e),t)},Je=e=>{let t=e.outputLanguage?e.outputLanguage:L(),n={type:e.type,format:e.format,length:e.length,outputLanguage:t};return Promise.resolve(n)},Ln=async(e,t)=>{let n=O(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;K(a)||(i=!0,a="en");let s=await Je({...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 c=D(t);try{let{model:u,release:d}=await M("summarizer",{core:s,sharedContext:r},()=>Summarizer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{p("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await u.measureInputUsage(e.text,{context:e.context,signal:c.signal}),m=u.inputQuota;if(l>m){let y=te(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let re=ke.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:re});let z=await u.summarize(y[b].text,{context:e.context,signal:c.signal});f.push(z)}e.text=f.join(`
11
+ `)}}return m||(l=await u.rewrite(e.text,{context:e.context,signal:c.signal})),i?{result:(await H({text:l,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:l}}finally{try{d()}catch(l){console.error("Error destroying rewriter:",l)}}}finally{c.dispose()}},An({...e,sharedContext:r,outputLanguage:o}),t)},et=()=>Promise.resolve({includeCorrectionTypes:!0,includeCorrectionExplanations:!0}),Rn=async(e,t)=>{let n=O(t),r=await et();return U(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=D(t);try{let{model:o,release:i}=await M("proofreader",{core:r},()=>Proofreader.create({...r,monitor(s){s.addEventListener("downloadprogress",c=>{let u=c.loaded;p("proofreader",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u})})}}),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()}},Tn(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)},En=async(e,t)=>{let n=O(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;K(a)||(i=!0,a="en");let s=await tt({...e,outputLanguage:a});return U(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 c=D(t);try{let{model:u,release:d}=await M("summarizer",{core:s,sharedContext:r},()=>Summarizer.create({...s,sharedContext:r,monitor(l){l.addEventListener("downloadprogress",m=>{let g=m.loaded;p("summarizer",n,t,{step:"on-device:download",source:"on-device",progress:g,loaded:g})})}}),l=>l.destroy());p("summarizer",n,t,{step:"on-device:ready",source:"on-device"});try{p("summarizer",n,t,{step:"on-device:run",source:"on-device",message:"Summarizing"});let l=await u.measureInputUsage(e.text,{context:e.context,signal:c.signal}),m=u.inputQuota;if(l>m){let y=te(e.text,m*.8*3.5);if(y.length>1){let f=[];for(let b=0;b<y.length;b++){let re=he.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:re});let z=await u.summarize(y[b].text,{context:e.context,signal:c.signal});f.push(z)}e.text=f.join(`
12
12
 
13
- `)}}let g=await u.summarize(e.text,{context:e.context,signal:c.signal});return i?{result:(await H({text:g,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:g}}finally{try{d()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{c.dispose()}},Cn({...e,sharedContext:r,outputLanguage:o}),t)},On=async(e,t)=>{let n=O(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=D(t,Ye);try{let{model:a,release:o}=await M("language-detector",{},()=>LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",s=>{let c=s.loaded;p("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,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=>lt.find(c=>c.value===s.detectedLanguage))}}}finally{try{o()}catch(i){console.error("Error destroying language detector:",i)}}}finally{r.dispose()}},An(e.text,t),t)},et=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??L()??"en"};return Promise.resolve(t)},H=async(e,t)=>{let n=O(t),r=await et({...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=D(t,Ye);try{let{model:o,release:i}=await M("translator",{core:r},()=>Translator.create({...r,monitor(s){s.addEventListener("downloadprogress",c=>{let u=c.loaded;p("translator",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,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=[],c=()=>{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(`
13
+ `)}}let g=await u.summarize(e.text,{context:e.context,signal:c.signal});return i?{result:(await H({text:g,sourceLanguage:a,targetLanguage:o},{context:n,signal:c.signal})).result}:{result:g}}finally{try{d()}catch(l){console.error("Error destroying summarizer:",l)}}}finally{c.dispose()}},Sn({...e,sharedContext:r,outputLanguage:o}),t)},In=async(e,t)=>{let n=O(t);return U(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=D(t,Xe);try{let{model:a,release:o}=await M("language-detector",{},()=>LanguageDetector.create({monitor(i){i.addEventListener("downloadprogress",s=>{let c=s.loaded;p("language-detector",n,t,{step:"on-device:download",source:"on-device",progress:c,loaded:c,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(c=>c.value===s.detectedLanguage))}}}finally{try{o()}catch(i){console.error("Error destroying language detector:",i)}}}finally{r.dispose()}},xn(e.text,t),t)},nt=e=>{let t={sourceLanguage:e.sourceLanguage??"auto",targetLanguage:e.targetLanguage??L()??"en"};return Promise.resolve(t)},H=async(e,t)=>{let n=O(t),r=await nt({...e});return U(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=D(t,Xe);try{let{model:o,release:i}=await M("translator",{core:r},()=>Translator.create({...r,monitor(s){s.addEventListener("downloadprogress",c=>{let u=c.loaded;p("translator",n,t,{step:"on-device:download",source:"on-device",progress:u,loaded:u,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=[],c=()=>{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
  `))c(),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()}},vn(e.text,e.sourceLanguage,e.targetLanguage),t)};tt=4*1024*1024;st=async e=>{let t=e.outputLanguage?e.outputLanguage:L();return K(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;K(a)||(i=!0,a="en");let s=await st({...e,outputLanguage:a}),c=await ee("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 u=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&u.push(g.content.trim());r&&r.trim()&&u.push("SHARED CONTEXT: "+r.trim())}let d=u.length>0?u.join(`
15
+ `)}}finally{try{i()}catch(s){console.error("Error destroying translator:",s)}}}finally{a.dispose()}},Pn(e.text,e.sourceLanguage,e.targetLanguage),t)};rt=4*1024*1024;ut=async e=>{let t=e.outputLanguage?e.outputLanguage:L();return K(t)||(t="en"),{topK:e.topK,temperature:e.temperature,expectedInputs:[{type:"text"},{type:"image"}],expectedOutputs:[{type:"text",languages:[t]}]}},Nn=async(e,t)=>{let n=O(t),r=e.sharedContext,a=e.outputLanguage?e.outputLanguage:L(),o=a,i=!1;K(a)||(i=!0,a="en");let s=await ut({...e,outputLanguage:a}),c=await ee("prompt",s,t?.modeOverride,n);return U(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 u=[];if(typeof e.messages!="string"){for(let g of e.messages)g.role==="system"&&g.content.trim()&&u.push(g.content.trim());r&&r.trim()&&u.push("SHARED CONTEXT: "+r.trim())}let d=u.length>0?u.join(`
16
16
 
17
- `):void 0,l=d?[{role:"system",content:d}]:void 0,m=D(t);try{let{model:g,release:y}=await M("language-model",{core:s,initialPrompts:l},()=>LanguageModel.create({...s,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let h=b.loaded;p("prompt",n,t,{step:"on-device:download",source:"on-device",progress:h,loaded:h})})}}),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(Rn(e),{signal:m.signal,responseConstraint:e.responseConstraint});return i?{result:(await H({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 fn({...e,sharedContext:r},n,c,t),t)},Un=async(e,t)=>{let n=O(t),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 bn(e,n,o,t);p(r,n,t,{step:"backend:request",source:"backend"});let s=await V(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s},_n=async(e,t)=>{let n=O(t),r=e.sharedContext,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 yn({...e,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let c=await V(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),c},Nn=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 wn({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});p(r,n,t,{step:"backend:request",source:"backend"});let s=await V(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s}});import{attachDefaultPluginRuntime as Vn}from"@smart-cloud/wpsuite-core";import{__ as v}from"@wordpress/i18n";var lt,G,Ur,_r,Nr,Vr,zr,zn,jr,k,Wr,$r,qr,Hr,Gr,Yr,Qr,Xr,Zr,Jr,ea,ta,na,ra,aa,oa,ia,dt=S(()=>{Y();X();xe();X();Se();ce();Te();Oe();Z();lt=[{label:v("Arabic",C),value:"ar"},{label:v("Chinese",C),value:"zh"},{label:v("Dutch",C),value:"nl"},{label:v("English",C),value:"en"},{label:v("French",C),value:"fr"},{label:v("German",C),value:"de"},{label:v("Hebrew",C),value:"he"},{label:v("Hindi",C),value:"hi"},{label:v("Hungarian",C),value:"hu"},{label:v("Indonesian",C),value:"id"},{label:v("Italian",C),value:"it"},{label:v("Japanese",C),value:"ja"},{label:v("Korean",C),value:"ko"},{label:v("Norwegian",C),value:"no"},{label:v("Polish",C),value:"pl"},{label:v("Portuguese",C),value:"pt"},{label:v("Russian",C),value:"ru"},{label:v("Spanish",C),value:"es"},{label:v("Swedish",C),value:"sv"},{label:v("Thai",C),value:"th"},{label:v("Turkish",C),value:"tr"},{label:v("Ukrainian",C),value:"uk"}],G=Promise.resolve().then(()=>(ge(),_e)),Ur=async()=>(await G).MIN_CHROME_VERSION,_r=async(...e)=>(await G).isOnDeviceLanguageSupported(...e),Nr=async(...e)=>(await G).decideCapability(...e),Vr=async(...e)=>(await G).checkOnDeviceAvailability(...e),zr=async(...e)=>(await G).resolveBackend(...e),zn=Promise.resolve().then(()=>(fe(),$e)),jr=async(...e)=>(await zn).dispatchCustomBackend(...e),k=Promise.resolve().then(()=>(ut(),ct)),Wr=async(...e)=>(await k).getWriteOptions(...e),$r=async(...e)=>(await k).write(...e),qr=async(...e)=>(await k).getRewriteOptions(...e),Hr=async(...e)=>(await k).rewrite(...e),Gr=async(...e)=>(await k).getProofreadOptions(...e),Yr=async(...e)=>(await k).proofread(...e),Qr=async(...e)=>(await k).getSummarizeOptions(...e),Xr=async(...e)=>(await k).summarize(...e),Zr=async(...e)=>(await k).getTranslateOptions(...e),Jr=async(...e)=>(await k).translate(...e),ea=async(...e)=>(await k).detectLanguage(...e),ta=async(...e)=>(await k).getPromptOptions(...e),na=async(...e)=>(await k).prompt(...e),ra=async(...e)=>(await k).sendChatMessage(...e),aa=async(...e)=>(await k).sendFeedbackMessage(...e),oa=async(...e)=>(await k).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");Vn(r),r.status=r.status??"initializing";let a=Pe();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 k,s=o[1]||{};return o[1]={context:"frontend",...s},i.write(...o)},rewrite:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.rewrite(...o)},proofread:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.proofread(...o)},summarize:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.summarize(...o)},translate:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.translate(...o)},detectLanguage:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.detectLanguage(...o)},prompt:async(...o)=>{let i=await k,s=o[1]||{};return o[1]={context:"frontend",...s},i.prompt(...o)},sendChatMessage:async(...o)=>(await k).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await k).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await k).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}});dt();export{Zn as AiKitChatbotIcon,Jn as AiKitDocSearchIcon,Xn as AiKitFeatureIcon,T as BackendError,rr as DEFAULT_CHATBOT_AI_DISCLOSURE,ar as DEFAULT_DOC_SEARCH_AI_DISCLOSURE,sr as KNOWLEDGE_SYNC_CONTRACT_VERSION,cr as KNOWLEDGE_SYNC_LOCALE_CONTRACT_VERSION,ue as KnowledgeSyncContractError,lt as LANGUAGE_OPTIONS,C as TEXT_DOMAIN,Ie as capabilityForCustomPath,Ee as capabilityForFeature,Vr as checkOnDeviceAvailability,dr as compareKnowledgeSourceVersions,Nr as decideCapability,ea as detectLanguage,jr as dispatchBackend,or as formatAiDisclosure,R as getAiKitPlugin,Ur as getMinChromeVersions,ta as getPromptOptions,Gr as getProofreadOptions,qr as getRewriteOptions,gt as getStore,Pt as getStoreDispatch,Q as getStoreSelect,Qr as getSummarizeOptions,Zr as getTranslateOptions,Wr as getWriteOptions,ia as initializeAiKit,_r as isOnDeviceLanguageSupported,pr as knowledgeSyncSourceKey,St as observeStore,lr as parseKnowledgeSyncPolicyV1,ur as parsePublicContentProjection,Rt as parsePublicContentProjectionV1,Bt as parsePublicContentProjectionV2,na as prompt,Yr as proofread,xt as reloadConfig,zr as resolveBackend,j as resolveBackendCompatibility,Hr as rewrite,ie as sanitizeAiKitConfig,ra as sendChatMessage,aa as sendFeedbackMessage,oa as sendSearchMessage,Xr as summarize,W as supportsBackendCapability,Jr as translate,he as waitForAiKitReady,$r as write};
17
+ `):void 0,l=d?[{role:"system",content:d}]:void 0,m=D(t);try{let{model:g,release:y}=await M("language-model",{core:s,initialPrompts:l},()=>LanguageModel.create({...s,initialPrompts:l,monitor(f){f.addEventListener("downloadprogress",b=>{let k=b.loaded;p("prompt",n,t,{step:"on-device:download",source:"on-device",progress:k,loaded:k})})}}),f=>f.destroy());p("prompt",n,t,{step:"on-device:ready",source:"on-device"});try{p("prompt",n,t,{step:"on-device:run",source:"on-device",message:"Generating text"});let f=await g.prompt(Bn(e),{signal:m.signal,responseConstraint:e.responseConstraint});return i?{result:(await H({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 wn({...e,sharedContext:r},n,c,t),t)},Vn=async(e,t)=>{let n=O(t),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 hn(e,n,o,t);p(r,n,t,{step:"backend:request",source:"backend"});let s=await V(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s},zn=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 kn({...e,sharedContext:r},n,i,t);p(a,n,t,{step:"backend:request",source:"backend"});let c=await V(i,n,a,s,t);return p(a,n,t,{step:"done",source:"backend"}),c},jn=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 Cn({sessionId:e.sessionId,feedbackMessageId:e.feedbackMessageId,feedbackType:e.feedbackType});p(r,n,t,{step:"backend:request",source:"backend"});let s=await V(o,n,r,i,t);return p(r,n,t,{step:"done",source:"backend"}),s}});import{attachDefaultPluginRuntime as Wn}from"@smart-cloud/wpsuite-core";import{__ as v}from"@wordpress/i18n";var pt,G,Wr,$r,qr,Hr,Gr,$n,Yr,h,Qr,Xr,Zr,Jr,ea,ta,na,ra,aa,oa,ia,sa,ca,ua,la,da,pa,gt=P(()=>{Y();X();Pe();X();xe();ce();Te();Oe();Z();Me();pt=[{label:v("Arabic",C),value:"ar"},{label:v("Chinese",C),value:"zh"},{label:v("Dutch",C),value:"nl"},{label:v("English",C),value:"en"},{label:v("French",C),value:"fr"},{label:v("German",C),value:"de"},{label:v("Hebrew",C),value:"he"},{label:v("Hindi",C),value:"hi"},{label:v("Hungarian",C),value:"hu"},{label:v("Indonesian",C),value:"id"},{label:v("Italian",C),value:"it"},{label:v("Japanese",C),value:"ja"},{label:v("Korean",C),value:"ko"},{label:v("Norwegian",C),value:"no"},{label:v("Polish",C),value:"pl"},{label:v("Portuguese",C),value:"pt"},{label:v("Russian",C),value:"ru"},{label:v("Spanish",C),value:"es"},{label:v("Swedish",C),value:"sv"},{label:v("Thai",C),value:"th"},{label:v("Turkish",C),value:"tr"},{label:v("Ukrainian",C),value:"uk"}],G=Promise.resolve().then(()=>(ge(),Ve)),Wr=async()=>(await G).MIN_CHROME_VERSION,$r=async(...e)=>(await G).isOnDeviceLanguageSupported(...e),qr=async(...e)=>(await G).decideCapability(...e),Hr=async(...e)=>(await G).checkOnDeviceAvailability(...e),Gr=async(...e)=>(await G).resolveBackend(...e),$n=Promise.resolve().then(()=>(fe(),He)),Yr=async(...e)=>(await $n).dispatchCustomBackend(...e),h=Promise.resolve().then(()=>(dt(),lt)),Qr=async(...e)=>(await h).getWriteOptions(...e),Xr=async(...e)=>(await h).write(...e),Zr=async(...e)=>(await h).getRewriteOptions(...e),Jr=async(...e)=>(await h).rewrite(...e),ea=async(...e)=>(await h).getProofreadOptions(...e),ta=async(...e)=>(await h).proofread(...e),na=async(...e)=>(await h).getSummarizeOptions(...e),ra=async(...e)=>(await h).summarize(...e),aa=async(...e)=>(await h).getTranslateOptions(...e),oa=async(...e)=>(await h).translate(...e),ia=async(...e)=>(await h).detectLanguage(...e),sa=async(...e)=>(await h).getPromptOptions(...e),ca=async(...e)=>(await h).prompt(...e),ua=async(...e)=>(await h).sendChatMessage(...e),la=async(...e)=>(await h).sendFeedbackMessage(...e),da=async(...e)=>(await h).sendSearchMessage(...e),pa=(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");Wn(r),r.status=r.status??"initializing";let a=Se();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 h,s=o[1]||{};return o[1]={context:"frontend",...s},i.write(...o)},rewrite:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.rewrite(...o)},proofread:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.proofread(...o)},summarize:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.summarize(...o)},translate:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.translate(...o)},detectLanguage:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.detectLanguage(...o)},prompt:async(...o)=>{let i=await h,s=o[1]||{};return o[1]={context:"frontend",...s},i.prompt(...o)},sendChatMessage:async(...o)=>(await h).sendChatMessage(...o),sendFeedbackMessage:async(...o)=>(await h).sendFeedbackMessage(...o),sendSearchMessage:async(...o)=>(await h).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{tr as AiKitChatbotIcon,nr as AiKitDocSearchIcon,er as AiKitFeatureIcon,T as BackendError,hr as CHAT_STREAM_PROTOCOL_VERSION,ir as DEFAULT_CHATBOT_AI_DISCLOSURE,sr as DEFAULT_DOC_SEARCH_AI_DISCLOSURE,lr as KNOWLEDGE_SYNC_CONTRACT_VERSION,dr as KNOWLEDGE_SYNC_LOCALE_CONTRACT_VERSION,ue as KnowledgeSyncContractError,pt as LANGUAGE_OPTIONS,C as TEXT_DOMAIN,Be as capabilityForCustomPath,Ie as capabilityForFeature,Hr as checkOnDeviceAvailability,mr as compareKnowledgeSourceVersions,qr as decideCapability,ia as detectLanguage,Yr as dispatchBackend,cr as formatAiDisclosure,R as getAiKitPlugin,Wr as getMinChromeVersions,sa as getPromptOptions,ea as getProofreadOptions,Zr as getRewriteOptions,ft as getStore,xt as getStoreDispatch,Q as getStoreSelect,na as getSummarizeOptions,aa as getTranslateOptions,Qr as getWriteOptions,pa as initializeAiKit,$r as isOnDeviceLanguageSupported,fr as knowledgeSyncSourceKey,Lt as observeStore,kr as parseChatStreamServerEvent,gr as parseKnowledgeSyncPolicyV1,pr as parsePublicContentProjection,It as parsePublicContentProjectionV1,Bt as parsePublicContentProjectionV2,ca as prompt,ta as proofread,Tt as reloadConfig,Gr as resolveBackend,j as resolveBackendCompatibility,Jr as rewrite,ie as sanitizeAiKitConfig,ua as sendChatMessage,la as sendFeedbackMessage,da as sendSearchMessage,ra as summarize,W as supportsBackendCapability,oa as translate,ke as waitForAiKitReady,Xr as write};
package/dist/types.d.ts CHANGED
@@ -4,13 +4,19 @@ export type AiModePreference = "local-only" | "backend-fallback" | "backend-only
4
4
  export type BuiltInAiFeature = "prompt" | "summarizer" | "writer" | "rewriter" | "proofreader" | "language-detector" | "translator";
5
5
  export type CapabilitySource = "on-device" | "backend" | "none";
6
6
  export type BackendTransport = "gatey" | "fetch";
7
- export type AiKitBackendCapability = `ai.${BuiltInAiFeature}.${ContextKind}` | "ai.conversation-profile.admin" | "ai.cost-policy.admin" | "knowledge.admin" | "knowledge.query.frontend" | "knowledge.automation";
7
+ export type AiKitBackendCapability = `ai.${BuiltInAiFeature}.${ContextKind}` | "ai.chat.stream.frontend" | "ai.conversation-profile.admin" | "ai.cost-policy.admin" | "knowledge.admin" | "knowledge.query.frontend" | "knowledge.automation";
8
8
  export interface BackendManifest {
9
9
  schemaVersion: 1;
10
10
  product: "smartcloud-ai-kit-backend";
11
11
  release: string;
12
12
  apiSchemaVersion?: number;
13
13
  capabilities: Partial<Record<AiKitBackendCapability, number>>;
14
+ transports?: {
15
+ /** HTTPS endpoint that issues a short-lived chat WebSocket connection ticket. */
16
+ chatStreamTicketUrl?: string;
17
+ /** WSS endpoint; never connect without a server-issued ticket. */
18
+ chatWebSocketUrl?: string;
19
+ };
14
20
  }
15
21
  export interface BackendCompatibility {
16
22
  status: "verified" | "legacy";
@@ -184,6 +190,10 @@ export type AiChatbotLabels = Partial<{
184
190
  export type AiChatbotProps = AiWorkerProps & {
185
191
  context?: ContextKind;
186
192
  placeholder?: string;
193
+ /** Authored welcome text shown before the visitor sends a message. */
194
+ greeting?: string;
195
+ /** Authored questions offered before the first message. */
196
+ starterQuestions?: string[];
187
197
  maxImages?: number;
188
198
  maxImageBytes?: number;
189
199
  maxTokens?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smart-cloud/ai-kit-core",
3
- "version": "1.5.12",
3
+ "version": "1.5.14",
4
4
  "description": "AI Kit Core Package",
5
5
  "author": "Smart Cloud Solutions Inc.",
6
6
  "license": "MIT",