@smart-cloud/ai-kit-ui 1.3.14 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.js +4 -4
- package/package.json +23 -23
- package/src/ai-feature/AiFeature.tsx +3 -3
package/dist/index.cjs
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
initial-value: 0deg;
|
|
6
6
|
}
|
|
7
7
|
`,(e.head??e.documentElement).appendChild(a)}function sn({stylesheets:e,children:a,rootElementId:c,mode:l="local",overlayRootId:n="ai-kit-overlay-root",setHost:p}){let I=(0,ot.useRef)(null),[H,de]=(0,ot.useState)(null),[ie,ne]=(0,ot.useState)(null),se=(0,ot.useMemo)(()=>[...e].join("|"),[e]);(0,ot.useLayoutEffect)(()=>{if(!I.current)return;let le=l==="overlay"?or():I.current.ownerDocument,L;if(l==="overlay"){let G=le.getElementById(n);G||(G=le.createElement("div"),G.id=n,G.style.position="fixed",G.style.inset="0",G.style.width="0",G.style.height="0",G.style.zIndex="2147483647",G.style.pointerEvents="none",le.body.appendChild(G)),L=G}else L=I.current;p(L);let m=L.shadowRoot??L.attachShadow({mode:"open"}),P=m.querySelector(`#${CSS.escape(c)}`);P||(P=le.createElement("div"),P.id=c,P.style.margin="0",l==="overlay"&&(P.style.pointerEvents="auto"),m.appendChild(P));let fe=()=>P.getAttribute("data-mantine-color-scheme"),X=()=>P.getAttribute("data-ai-kit-variation"),te=()=>{L.setAttribute("data-ai-kit-variation",X()||"default"),L.setAttribute("data-mantine-color-scheme",fe()||"auto")};te();let ke=new MutationObserver(te);ke.observe(P,{attributes:!0,attributeFilter:["data-mantine-color-scheme"]});let T=window.matchMedia?.("(prefers-color-scheme: dark)"),D=()=>te();return T?.addEventListener?.("change",D),sr(le),ir(le,P,m,se?se.split("|"):[]),de(m),ne(P),()=>{ke.disconnect(),T?.removeEventListener?.("change",D)}},[l,n,c,se]);let Oe=(0,ot.useMemo)(()=>ie?(0,nn.default)({key:l==="overlay"?"ai-kit-ov":"ai-kit-local",container:ie}):null,[ie,l]);return(0,da.jsx)("div",{ref:I,style:{outline:"none",boxShadow:"none",backgroundColor:"transparent"},children:ie&&H&&Oe?(0,on.createPortal)((0,da.jsx)(rn.CacheProvider,{value:Oe,children:a({rootElement:ie,shadowRoot:H})}),ie):null})}var Gt=require("react/jsx-runtime"),lr=e=>{let a=5381;for(let c=0;c<e.length;c++)a=(a<<5)+a^e.charCodeAt(c);return(a>>>0).toString(36)},ln=e=>e.replace(/<\/?(?:style|script)\b[^>]*>/gi,"").replace(/@import\s+['"]?javascript:[^;]+;?/gi,"").replace(/url\(\s*(['"]?)javascript:[^)]+\)/gi,"").replace(/\bexpression\s*\([^)]*\)/gi,""),un="ai-kit-style-text";function vt(e,a){let c=l=>{let{store:n,variation:p,showOpenButton:I,colors:H,colorMode:de,primaryColor:ie,primaryShade:ne,themeOverrides:se,language:Oe,direction:le}={...l,...a},[L,m]=(0,tt.useState)(null),P=(0,Zt.useSelect)(()=>(0,$t.getStoreSelect)(n).getLanguage()),fe=(0,Zt.useSelect)(()=>(0,$t.getStoreSelect)(n).getDirection()),X=(0,Zt.useSelect)(()=>(0,$t.getStoreSelect)(n).getCustomTranslations()),[te]=(0,tt.useState)(new URLSearchParams(window.location.search).get("language")??""),[ke]=(0,tt.useState)(new URLSearchParams(window.location.search).get("direction")??""),T=(0,tt.useMemo)(()=>{Qt.I18n.putVocabularies(X||{});let M=P||te||Oe;if(!M||M==="system"){Qt.I18n.setLanguage("");return}return Qt.I18n.setLanguage(M),M},[Oe,te,P,X]),D=(0,tt.useMemo)(()=>{let M=fe||ke||le;return!M||M==="auto"?T==="ar"||T==="he"?"rtl":"ltr":M},[T,le,fe,ke]),G=(0,tt.useMemo)(()=>[WpSuite?.constants?.aiKit?.mantineCssHref,WpSuite?.constants?.aiKit?.aiKitUiCssHref],[WpSuite]),be;H&&(be={},Object.keys(H).forEach(M=>{try{be[M]=(0,dn.generateColors)(H[M])}catch{be[M]=(0,Ee.colorsTuple)(H[M])}}));let W=(0,Ee.createTheme)({respectReducedMotion:!0,...be&&{colors:be},...ie&&[...Object.keys(Ee.DEFAULT_THEME.colors),...Object.keys(be||{})].includes(ie)&&{primaryColor:ie},...ne&&Object.keys(ne).length>0&&{primaryShade:{light:ne.light??(typeof Ee.DEFAULT_THEME.primaryShade=="object"?Ee.DEFAULT_THEME.primaryShade.light:Ee.DEFAULT_THEME.primaryShade??6),dark:ne.dark??(typeof Ee.DEFAULT_THEME.primaryShade=="object"?Ee.DEFAULT_THEME.primaryShade.dark:Ee.DEFAULT_THEME.primaryShade??6)}},components:{Button:{styles:{root:{borderRadius:"inherit"}}},Tooltip:{defaultProps:{withinPortal:!1,zIndex:100002}},Modal:{defaultProps:{withinPortal:!1,zIndex:100002}},Select:{defaultProps:{comboboxProps:{withinPortal:!1,floatingStrategy:"fixed",positionDependencies:[],position:"bottom",middlewares:{flip:!1,shift:{padding:10,boundary:"clippingAncestors"}}}}},MultiSelect:{defaultProps:{comboboxProps:{withinPortal:!1,floatingStrategy:"fixed",positionDependencies:[],position:"bottom",middlewares:{flip:!1,shift:{padding:10,boundary:"clippingAncestors"}}}}},TagsInput:{defaultProps:{comboboxProps:{withinPortal:!1,floatingStrategy:"fixed",positionDependencies:[],position:"bottom",middlewares:{flip:!1,shift:{padding:10,boundary:"clippingAncestors"}}}}}}}),Te=(0,tt.useMemo)(()=>se?lr(se):"",[se]);return(0,tt.useEffect)(()=>{if(!L)return;let M=L.shadowRoot.getElementById(un);if(se)if(M)(M.getAttribute("data-hash")||"")!==Te&&(M.textContent=ln(se));else{let $=L.shadowRoot.ownerDocument.createElement("style");$.id=un,$.setAttribute("data-hash",Te),$.textContent=ln(se),L.shadowRoot.appendChild($)}else M&&M.remove()},[L,se,Te]),(0,Gt.jsx)(sn,{mode:p==="modal"&&!I?"overlay":"local",variation:p,overlayRootId:"ai-kit-overlay-root",stylesheets:G,setHost:m,rootElementId:p==="modal"&&!I?"ai-kit-portal-root":"ai-kit-inline-root",children:({rootElement:M})=>{M.setAttribute("data-ai-kit-variation",p||"default"),M.setAttribute("dir",D),T&&M.setAttribute("lang",T);let $=de==="auto"?window.matchMedia?.("(prefers-color-scheme: dark)")?.matches?"dark":"light":de;return(0,Gt.jsx)(Ee.DirectionProvider,{initialDirection:D,children:(0,Gt.jsx)(Ee.MantineProvider,{forceColorScheme:$,theme:W,getRootElement:()=>M,children:(0,Gt.jsx)(e,{...l,colorMode:$,language:T,rootElement:M})})})}})};return c.displayName=`withAiKitShell(${e.displayName??e.name??"Component"})`,c}var ca=require("react/jsx-runtime");function Pt({enabled:e=!0,working:a=!1,variation:c="default",children:l}){return(0,ca.jsx)("div",{className:"ai-kit-feature-border","data-ai-kit-active":!!(e&&a)?"true":"false","data-ai-kit-variation":c,children:(0,ca.jsx)("div",{className:"ai-kit-feature-border__content",children:l})})}var cn=require("@mantine/core"),gn=require("react"),Mt=require("aws-amplify/utils"),Ft=require("react/jsx-runtime");function ur(e){let a=[...e].sort((n,p)=>n.startIndex-p.startIndex),c=[],l=-1;for(let n of a)typeof n.startIndex!="number"||typeof n.endIndex!="number"||n.startIndex<0||n.endIndex<=n.startIndex||n.startIndex<l||(c.push(n),l=n.endIndex);return c}function mn({original:e,corrections:a}){let c=(0,gn.useMemo)(()=>{let l=ur(a||[]),n=[],p=0;for(let I of l){I.startIndex>p&&n.push({kind:"plain",text:e.slice(p,I.startIndex)});let H=e.slice(I.startIndex,I.endIndex);n.push({kind:"corr",original:H,corr:I}),p=I.endIndex}return p<e.length&&n.push({kind:"plain",text:e.slice(p)}),n},[e,a]);return(0,Ft.jsx)("div",{style:{padding:12,border:"1px solid rgba(0,0,0,0.1)",borderRadius:6,background:"rgba(0,0,0,0.02)",whiteSpace:"pre-wrap",lineHeight:1.5},children:c.map((l,n)=>{if(l.kind==="plain")return(0,Ft.jsx)("span",{children:l.text},n);let p=(l.corr.replacement??l.corr.correction??"").trim(),I=(l.corr.explanation??"").trim(),H=(l.corr.type??"").trim(),de=[H?Mt.I18n.get("Type")+": - "+Mt.I18n.get(H):"",p?Mt.I18n.get("Replace with")+": "+p:"",I?Mt.I18n.get("Why")+": "+I:""].filter(Boolean).join(`
|
|
8
|
-
`);return(0,Ft.jsx)(cn.Tooltip,{label:de||Mt.I18n.get("Suggested change"),multiline:!0,children:(0,Ft.jsx)("span",{style:{textDecoration:"underline",textDecorationStyle:"wavy",cursor:"help",padding:"0 1px"},children:l.original})},n)})})}var Xt=Ve(require("rehype-sanitize"),1),pn=Ve(require("rehype-stringify"),1),hn=Ve(require("remark-gfm"),1),fn=Ve(require("remark-parse"),1),kn=Ve(require("remark-rehype"),1),bn=require("unified"),ea=async e=>String(await(0,bn.unified)().use(fn.default).use(hn.default).use(kn.default,{allowDangerousHtml:!1}).use(Xt.default,Xt.defaultSchema).use(pn.default).process(e));var g=require("react/jsx-runtime");r.I18n.putVocabularies(yt);var yn=(0,j.getAiKitPlugin)(),dr={type:"object",properties:{title:{type:"string",minLength:1,maxLength:60},excerpt:{type:"string",minLength:1,maxLength:155}},required:["title","excerpt"],additionalProperties:!1},cr={type:"object",properties:{alt:{type:"string",minLength:1,maxLength:125},title:{type:"string",minLength:1,maxLength:80},caption:{type:"string",minLength:1,maxLength:150},description:{type:"string",minLength:1,maxLength:300}},required:["alt","title","caption","description"],additionalProperties:!1};function gr(e){let a=(e??"").trim();return a&&a.toLowerCase().split("-")[0]||null}async function ga(e,a){let c=await(0,j.detectLanguage)({text:e},a);return gr(c.result?.candidates?.[0]?.detectedLanguage)??"en"}async function mr(e,a,c){let l=Lt(e||"").trim();if(!l)return{};try{let n=JSON.parse(l);return{alt_text:typeof n.alt=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.alt,sourceLanguage:"en",targetLanguage:a},c)).result:n.alt:"",title:typeof n.title=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.title,sourceLanguage:"en",targetLanguage:a},c)).result:n.title:"",caption:typeof n.caption=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.caption,sourceLanguage:"en",targetLanguage:a},c)).result:n.caption:"",description:typeof n.description=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.description,sourceLanguage:"en",targetLanguage:a},c)).result:n.description:""}}catch(n){return console.warn("AI Kit: failed to parse JSON metadata output",n),{}}}async function pr(e,a,c){let l=Lt(e||"").trim();if(!l)return{};try{let n=JSON.parse(l);return{title:typeof n.title=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.title,sourceLanguage:"en",targetLanguage:a},c)).result:n.title:"",excerpt:typeof n.excerpt=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.excerpt,sourceLanguage:"en",targetLanguage:a},c)).result:n.excerpt:""}}catch(n){return console.warn("AI Kit: failed to parse JSON metadata output",n),{}}}var hr=e=>{let{allowOverride:a,autoRun:c=!0,editable:l=!0,onDeviceTimeout:n,variation:p=
|
|
8
|
+
`);return(0,Ft.jsx)(cn.Tooltip,{label:de||Mt.I18n.get("Suggested change"),multiline:!0,children:(0,Ft.jsx)("span",{style:{textDecoration:"underline",textDecorationStyle:"wavy",cursor:"help",padding:"0 1px"},children:l.original})},n)})})}var Xt=Ve(require("rehype-sanitize"),1),pn=Ve(require("rehype-stringify"),1),hn=Ve(require("remark-gfm"),1),fn=Ve(require("remark-parse"),1),kn=Ve(require("remark-rehype"),1),bn=require("unified"),ea=async e=>String(await(0,bn.unified)().use(fn.default).use(hn.default).use(kn.default,{allowDangerousHtml:!1}).use(Xt.default,Xt.defaultSchema).use(pn.default).process(e));var g=require("react/jsx-runtime");r.I18n.putVocabularies(yt);var yn=(0,j.getAiKitPlugin)(),dr={type:"object",properties:{title:{type:"string",minLength:1,maxLength:60},excerpt:{type:"string",minLength:1,maxLength:155}},required:["title","excerpt"],additionalProperties:!1},cr={type:"object",properties:{alt:{type:"string",minLength:1,maxLength:125},title:{type:"string",minLength:1,maxLength:80},caption:{type:"string",minLength:1,maxLength:150},description:{type:"string",minLength:1,maxLength:300}},required:["alt","title","caption","description"],additionalProperties:!1};function gr(e){let a=(e??"").trim();return a&&a.toLowerCase().split("-")[0]||null}async function ga(e,a){let c=await(0,j.detectLanguage)({text:e},a);return gr(c.result?.candidates?.[0]?.detectedLanguage)??"en"}async function mr(e,a,c){let l=Lt(e||"").trim();if(!l)return{};try{let n=JSON.parse(l);return{alt_text:typeof n.alt=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.alt,sourceLanguage:"en",targetLanguage:a},c)).result:n.alt:"",title:typeof n.title=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.title,sourceLanguage:"en",targetLanguage:a},c)).result:n.title:"",caption:typeof n.caption=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.caption,sourceLanguage:"en",targetLanguage:a},c)).result:n.caption:"",description:typeof n.description=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.description,sourceLanguage:"en",targetLanguage:a},c)).result:n.description:""}}catch(n){return console.warn("AI Kit: failed to parse JSON metadata output",n),{}}}async function pr(e,a,c){let l=Lt(e||"").trim();if(!l)return{};try{let n=JSON.parse(l);return{title:typeof n.title=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.title,sourceLanguage:"en",targetLanguage:a},c)).result:n.title:"",excerpt:typeof n.excerpt=="string"?a&&a!=="en"?(await(0,j.translate)({text:n.excerpt,sourceLanguage:"en",targetLanguage:a},c)).result:n.excerpt:""}}catch(n){return console.warn("AI Kit: failed to parse JSON metadata output",n),{}}}var hr=e=>{let{allowOverride:a,autoRun:c=!0,editable:l=!0,onDeviceTimeout:n,variation:p="default",title:I,showOpenButton:H=!1,showOpenButtonTitle:de=!0,showOpenButtonIcon:ie=!0,openButtonTitle:ne,openButtonIcon:se,showRegenerateOnBackendButton:Oe=!0,acceptButtonTitle:le="Accept",optionsDisplay:L="collapse",mode:m,context:P,modeOverride:fe,colorMode:X,default:te,onClose:ke,onAccept:T,onOptionsChanged:D,language:G,rootElement:be}=e,W={text:a?.text??!0,instructions:a?.instructions??!0,tone:a?.tone??!0,length:a?.length??!0,type:a?.type??!0,outputLanguage:a?.outputLanguage??!0,outputFormat:a?.outputFormat??!0},Te=(0,B.useMemo)(()=>!!(m==="write"&&W?.text||(m==="write"||m==="rewrite"||m==="generateImageMetadata"||m==="generatePostMetadata")&&W?.instructions||(m==="write"||m==="rewrite")&&W?.tone||(m==="write"||m==="rewrite"||m==="summarize")&&W?.length||m==="summarize"&&W?.type||W?.outputLanguage),[W]),[M,$]=(0,B.useState)(),[ye,ce]=(0,B.useState)(!H),[St,Ze]=(0,B.useState)(!1),[lt,Qe]=(0,B.useState)(!1),[Ne,xe]=(0,B.useState)(null),[E,U]=(0,B.useState)(null),[Se,we]=(0,B.useState)(te?.text),[je]=(0,B.useState)(te?.image),[ue,ut]=(0,B.useState)(te?.instructions),[Re,dt]=(0,B.useState)(),[ct,ht]=(0,B.useState)(te?.inputLanguage),[F,ft]=(0,B.useState)(te?.outputFormat),[N,gt]=(0,B.useState)(te?.outputLanguage||yn.settings.defaultOutputLanguage||(m==="rewrite"?"auto":void 0)),[me,at]=(0,B.useState)(te?.length),[_e,pe]=(0,B.useState)(te?.tone),[Le,Ct]=(0,B.useState)(te?.type),K=(0,B.useRef)(!1),Rt=(0,B.useMemo)(()=>{if(G&&r.I18n.setLanguage(G||"en"),I)return I;let o;switch(m){default:case"summarize":o="Summarize";break;case"proofread":o="Proofread";break;case"write":o="Write";break;case"rewrite":o="Rewrite";break;case"translate":o="Translate";break;case"generatePostMetadata":o="Generate Post Metadata";break;case"generateImageMetadata":o="Generate Image Metadata";break}return o},[I,m,G]),Kt=(0,B.useCallback)(o=>{if(!o||o.silent)return null;let w=o.step,q=r.I18n.get((o.message??"").trim()),Y=typeof o.progress=="number"?o.progress:null,re=Y==null?null:Math.round(Y*100);switch(w){case"decide":return q||r.I18n.get("Checking capabilities...");case"on-device:init":return q||r.I18n.get("Initializing on-device AI...");case"on-device:download":return q||(re==null?r.I18n.get("Downloading model..."):r.I18n.get("Downloading model...")+" "+re+"%");case"on-device:ready":return q||r.I18n.get("On-device model ready.");case"on-device:run":return q||r.I18n.get("Generating...");case"backend:request":case"backend:waiting":case"backend:response":switch(m){case"translate":return r.I18n.get("Translating text");case"rewrite":return r.I18n.get("Rewriting text");case"summarize":return r.I18n.get("Summarizing");case"proofread":return r.I18n.get("Proofreading");default:return r.I18n.get("Generating text")}case"done":return q||r.I18n.get("Done.");case"error":return q||r.I18n.get("Something went wrong.");default:return q||r.I18n.get("Working...")}},[G,m]),Pe=(0,B.useMemo)(()=>Se??te?.getText,[Se,te]),he=(0,B.useMemo)(()=>{let o=typeof Pe=="function"?Pe():Pe;switch(m){case"generateImageMetadata":return!!je;case"translate":return!!(o&&o.trim().length>0)&&(!N||Re!==N);case"summarize":case"proofread":case"rewrite":case"write":case"generatePostMetadata":return!!(o&&o.trim().length>0);default:return!1}},[Pe,m,je,Re,N,ye]),z=zt(),mt=Kt(z.statusEvent)??(M?r.I18n.get(M):null),Ie=(0,B.useCallback)(async o=>{if(he){Te&&m!=="proofread"&&he&&Ze(!1),xe(null),U(null);try{let w=typeof Pe=="function"?Pe():Pe;switch(m){case"summarize":{let q=await z.run(async({signal:Y,onStatus:re})=>{let V=(N&&N!=="auto"?N:null)||At(),ae={text:w.trim(),format:F==="plain-text"?"plain-text":"markdown",length:me,type:Le,outputLanguage:V};return(await(0,j.summarize)(ae,{signal:Y,onStatus:re,context:P,modeOverride:o,onDeviceTimeoutOverride:n})).result});U(q??"");break}case"proofread":{let q=await z.run(async({signal:Y,onStatus:re})=>{let V=[];try{$("Detecting input language...");let h=(await(0,j.detectLanguage)({text:w.trim()},{signal:Y,context:P,modeOverride:o,onDeviceTimeoutOverride:n,silent:!0})).result?.candidates?.filter(A=>A.confidence&&A.confidence>.1).map(A=>A.detectedLanguage);V.push(...h)}catch{V.push("en")}let ae={text:w.trim(),expectedInputLanguages:V};return(await(0,j.proofread)(ae,{signal:Y,onStatus:re,context:P,modeOverride:o,onDeviceTimeoutOverride:n})).result});U(q??"");break}case"translate":{let q=await z.run(async({signal:Y,onStatus:re})=>{let V=ct??"auto";V==="auto"&&($("Detecting input language..."),V=await ga(w.trim(),{signal:Y,context:P,modeOverride:o,onDeviceTimeoutOverride:n,silent:!0})),dt(V);let ae=(N&&N!=="auto"?N:null)||At();if(ae===V)throw console.warn("AI Kit: input and output languages are the same",{inputLang:V,outLang:ae}),xe(r.I18n.get("Input and output languages cannot be the same.")),new Error(r.I18n.get("Input and output languages cannot be the same."));let oe={text:w.trim(),sourceLanguage:V,targetLanguage:ae};return(await(0,j.translate)(oe,{signal:Y,onStatus:re,context:P,modeOverride:o,onDeviceTimeoutOverride:n})).result});U(q??"");break}case"rewrite":{let q=await z.run(async({signal:Y,onStatus:re})=>{let V=(N&&N!=="auto"?N:null)||At();N==="auto"&&($("Detecting input language..."),V=await ga(w.trim(),{signal:Y,context:P,modeOverride:o,onDeviceTimeoutOverride:n,silent:!0}),gt(V));let ae={text:w.trim(),context:ue?.trim()||void 0,format:F==="plain-text"?"plain-text":"markdown",tone:_e,length:me,outputLanguage:V};return(await(0,j.rewrite)(ae,{signal:Y,onStatus:re,context:P,modeOverride:o,onDeviceTimeoutOverride:n})).result});U(q??"");break}case"write":{let q=(N&&N!=="auto"?N:null)||At(),Y={prompt:w.trim(),context:ue?.trim()||void 0,format:F==="plain-text"?"plain-text":"markdown",tone:_e,length:me,outputLanguage:q},re=await z.run(async({signal:V,onStatus:ae})=>{let oe={signal:V,context:P,modeOverride:o,onDeviceTimeoutOverride:n,silent:!0};$("Detecting input language...");let Ye=await ga(w.trim()+`
|
|
9
9
|
`+(ue?.trim()||""),oe);return Ye!==q&&Ye!=="en"&&($("Translating instructions..."),Y.prompt=(await(0,j.translate)({text:Y.prompt,sourceLanguage:Ye,targetLanguage:"en"},oe)).result,ue&&(Y.context=(await(0,j.translate)({text:ue,sourceLanguage:Ye,targetLanguage:"en"},oe)).result)),(await(0,j.write)(Y,{signal:V,onStatus:ae,context:P,modeOverride:o,onDeviceTimeoutOverride:n})).result});U(re??"");break}case"generatePostMetadata":{let q=[{role:"system",content:`You generate SEO metadata for a WordPress post.
|
|
10
10
|
Return ONLY a minified JSON object with keys: title, excerpt.
|
|
11
11
|
Constraints: title <= 60 chars, excerpt <= 155 chars.
|