(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8457],{25960:(e,t,s)=>{Promise.resolve().then(s.bind(s,50994))},40505:(e,t,s)=>{"use strict";s.d(t,{Y7:()=>c,Yc:()=>u,tR:()=>r,yT:()=>l,zT:()=>o});var n=s(98306),i=s(17745),a=s(94927);function r(e){let t="number"==typeof e&&Number.isFinite(e)?e:0;return new Intl.NumberFormat("fr-FR",{style:"currency",currency:"EUR",minimumFractionDigits:2,maximumFractionDigits:4}).format(t/1e6)}function o(e){let t=e.cost_limit_month_micro_eur;return!t||t<=0?null:Math.min(100,Math.round(e.cost_used_month_micro_eur/t*100))}function c(){return(0,n.I)({queryKey:["ai","config"],queryFn:()=>a.uE.get("/ai/config"),staleTime:6e4})}function u(e=!0){return(0,n.I)({queryKey:["ai","quota"],queryFn:()=>a.uE.get("/ai/quota"),enabled:e,staleTime:3e4})}function l(){return(0,i.n)({mutationFn:e=>a.uE.post("/ai/sessions",{app:e.app,temporary:e.temporary??!0,message_id:e.messageId,account_id:e.accountId,drive_path:e.drivePath,file_id:e.fileId,contact_id:e.contactId,subject:e.subject,snippet:e.snippet})})}},50994:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>l});var n=s(4208),i=s(35855),a=s.n(i),r=s(26362),o=s(65044),c=s(40505),u=s(61554);function l(){let{data:e,isLoading:t,isError:s}=(0,c.Y7)();return t?(0,n.jsx)("div",{className:"flex h-dvh items-center justify-center text-sm text-muted-foreground",children:"Chargement UltiAI…"}):s?(0,n.jsxs)("div",{className:"flex h-dvh flex-col items-center justify-center gap-3 px-6 text-center",children:[(0,n.jsx)(r.A,{className:"h-8 w-8 text-muted-foreground"}),(0,n.jsx)("p",{className:"text-sm text-muted-foreground",children:"Impossible de contacter l'API UltiAI. V\xe9rifiez que le backend est d\xe9marr\xe9."})]}):e?.enabled?(0,n.jsx)(o.z,{publicPath:e.public_path,context:{app:"standalone",temporary:!1},className:"h-dvh w-full border-0"}):(0,n.jsxs)("div",{className:"flex h-dvh flex-col items-center justify-center gap-3 px-6 text-center",children:[(0,n.jsx)(r.A,{className:"h-8 w-8 text-muted-foreground"}),(0,n.jsxs)("p",{className:"max-w-md text-sm text-muted-foreground",children:["UltiAI n'est pas activ\xe9. Activez le plugin"," ",(0,n.jsx)("strong",{children:"UltiAI"})," dans Administration → Plugins (puis enregistrez), ou d\xe9finissez"," ",(0,n.jsx)("code",{className:"rounded bg-muted px-1",children:"AI_ASSISTANT_ENABLED=true"})," dans le d\xe9ploiement backend."]}),(0,n.jsx)(u.$,{asChild:!0,variant:"outline",size:"sm",children:(0,n.jsx)(a(),{href:"/admin/settings/plugins",children:"Ouvrir les plugins"})})]})}},65044:(e,t,s)=>{"use strict";s.d(t,{z:()=>u});var n=s(4208),i=s(91356),a=s(29994);function r(e="/ai"){let t=(e||"/ai").replace(/\/$/,"")||"/ai",s=t.startsWith("/")?t:`/${t}`,n=(0,a.PW)()?.trim().replace(/\/$/,"");return n?`${n}${s}`:s}var o=s(40505),c=s(17996);function u({publicPath:e="/ai",context:t,className:s}){let a=(0,i.useRef)(null),{resolvedTheme:l}=(0,c.D)(),{data:d,isSuccess:p}=(0,o.Y7)(),m=(0,o.yT)(),[h,f]=(0,i.useState)(),[x,g]=(0,i.useState)(),_=(0,i.useMemo)(()=>[t.app,t.temporary,t.messageId,t.accountId,t.drivePath,t.fileId,t.contactId].join("|"),[t.app,t.temporary,t.messageId,t.accountId,t.drivePath,t.fileId,t.contactId]),I=(0,i.useMemo)(()=>(function(e="/ai"){let t=r(e);return t.startsWith("http://")||t.startsWith("https://")?new URL(t).origin:window.location.origin})(e),[e]),v=d?.enabled_tools??[],b=d?.mcp_url??"/api/v1/ai/mcp",y=(0,i.useMemo)(()=>{var s;let n,i,a;if(!p||!d?.enabled)return null;let o=(s=d.default_model,n=new URLSearchParams,(i=s?.trim())&&n.set("model",i),!1!==t.temporary&&n.set("temporary-chat","true"),t.app&&n.set("app",t.app),t.messageId&&n.set("message_id",t.messageId),t.accountId&&n.set("account_id",t.accountId),t.drivePath&&n.set("path",t.drivePath),t.fileId&&n.set("file_id",t.fileId),t.contactId&&n.set("contact_id",t.contactId),t.subject&&n.set("subject",t.subject),t.snippet&&n.set("snippet",t.snippet),n.toString());return a=r(e),o?`${a}/?${o}`:`${a}/`},[p,d,e,t]);return((0,i.useEffect)(()=>{if(!I)return;let e=e=>{if(e.origin!==I)return;let t=e.data;t?.type==="ULTI_OPEN_LINK"&&"string"==typeof t.href&&window.open(t.href,"_blank","noopener,noreferrer")};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[I]),(0,i.useEffect)(()=>{if(!d?.enabled)return;let e=!1;return m.mutateAsync(t).then(t=>{e||(f(t.token_secret),g(t.session_id))}).catch(()=>{e||(f(void 0),g(void 0))}),()=>{e=!0}},[d?.enabled,_,t,m.mutateAsync]),(0,i.useEffect)(()=>{let e=a.current;e?.contentWindow&&I&&e.contentWindow.postMessage({type:"ULTI_THEME",theme:"dark"===l?"dark":"light"},I)},[l,I]),(0,i.useEffect)(()=>{let e,s=a.current;if(!s?.contentWindow||!I)return;let n=[(e=["Tu es UltiAI, l'assistant int\xe9gr\xe9 \xe0 la suite Ultimail (mail, drive, contacts, UltiCal).","R\xe9ponds en fran\xe7ais sauf demande contraire. Utilise les tools disponibles pour agir sur les donn\xe9es utilisateur.","Recherche suite (index local) via suite_search ; recherche web publique via web_search si configur\xe9e.","Apr\xe8s chaque appel d'outil, r\xe9ponds toujours en langage naturel : r\xe9sume le r\xe9sultat, cite les sources (sujet, chemin, nom), propose la suite.","Ne termine jamais un tour utilisateur avec uniquement un appel d'outil sans texte explicatif.","Respecte strictement le param\xe8tre limit des tools (ne demande pas plus de r\xe9sultats que n\xe9cessaire)."],"mail"===t.app&&t.subject&&(e.push(`Contexte mail — sujet: ${t.subject}`),t.snippet&&e.push(`Extrait: ${t.snippet}`)),"drive"===t.app&&t.drivePath&&e.push(`Contexte drive — fichier/dossier: ${t.drivePath}`),"contacts"===t.app&&t.contactId&&e.push(`Contexte contacts — fiche: ${t.contactId}`),"docs"===t.app&&(t.documentTitle&&e.push(`Document: ${t.documentTitle}`),t.drivePath&&e.push(`Sidecar: ${t.drivePath}`),t.sourcePath&&e.push(`Source: ${t.sourcePath}`),t.selectionText&&e.push(`S\xe9lection: ${t.selectionText}`),t.documentExcerpt&&e.push(`Contenu: ${t.documentExcerpt}`)),t.systemPromptExtra&&e.push("",t.systemPromptExtra),e.join("\n")),t.systemPromptExtra].filter(Boolean).join("\n\n");s.contentWindow.postMessage({type:"ULTI_CONTEXT_UPDATE",context:t,systemPrompt:n||void 0},I)},[t,I]),(0,i.useEffect)(()=>{let e=a.current;e?.contentWindow&&I&&h&&e.contentWindow.postMessage({type:"ULTI_SESSION",token_secret:h,session_id:x,mcp_url:b,enabled_tools:v,default_model:d?.default_model},I)},[h,x,b,v,d?.default_model,I]),y)?(0,n.jsx)("iframe",{ref:a,title:"UltiAI",src:y,className:s,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups allow-downloads",allow:"clipboard-read; clipboard-write"},y):(0,n.jsx)("div",{className:s,"aria-busy":"true","aria-label":"Chargement UltiAI"})}}},e=>{e.O(0,[1909,2082,8306,5855,367,563,4927,1614,1506,7358],()=>e(e.s=25960)),_N_E=e.O()}]);