@heroui/agent 0.2.0-beta.13 → 0.2.0-beta.15
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/CHANGELOG.md +21 -0
- package/README.md +2 -2
- package/dist/chunk-HIZ5SSLG.js +2 -0
- package/dist/chunk-YXZJD5XQ.js +2 -0
- package/dist/contracts.d.ts +3 -1
- package/dist/contracts.js +2 -2
- package/dist/css/index.css +1 -1
- package/dist/{embed-runtime-7MSWJUQM.js → embed-runtime-YTHRILKV.js} +2 -2
- package/dist/index.d.ts +19 -0
- package/dist/index.js +1 -1
- package/dist/next.js +1 -1
- package/dist/server.js +1 -1
- package/package.json +6 -6
- package/dist/chunk-S3NBK5KL.js +0 -2
- package/dist/chunk-WVP7S2A4.js +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.0-beta.15
|
|
4
|
+
|
|
5
|
+
- Add `appearance.shouldCloseOnInteractOutside` for floating panels: omitted or
|
|
6
|
+
`true` closes on outside click; `false` or a predicate that returns false keeps
|
|
7
|
+
the panel open. Type is `boolean | ((element: Element) => boolean)`, matching
|
|
8
|
+
React Aria (#997).
|
|
9
|
+
- Add optional `showBetaBadge` to render a compact Beta chip in the open panel
|
|
10
|
+
header, including when set from the project's remote appearance configuration
|
|
11
|
+
(#994).
|
|
12
|
+
- Move optional runtime libraries (including `mermaid`, `maplibre-gl`, `motion`,
|
|
13
|
+
`shiki`, `recharts`, and related HeroUI packages) from peer dependencies into
|
|
14
|
+
`@heroui/agent` dependencies so `npm i @heroui/agent@beta` installs the full
|
|
15
|
+
graph. React and React DOM remain the only peer dependencies hosts must
|
|
16
|
+
provide. Renderers still load heavy libraries on demand and do not bundle them
|
|
17
|
+
into the published JavaScript (#993).
|
|
18
|
+
|
|
19
|
+
## 0.2.0-beta.14
|
|
20
|
+
|
|
21
|
+
- Restore user-message bubbles to `--ha-surface` / `--ha-fg`, reverting the accent bubble from
|
|
22
|
+
`0.2.0-beta.13` / #949 (#959).
|
|
23
|
+
|
|
3
24
|
## 0.2.0-beta.13
|
|
4
25
|
|
|
5
26
|
- Apply the configured Design System accent across Agent controls, generated UI, focus states,
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# HeroUI Agents SDK
|
|
4
4
|
|
|
5
|
-
Embed a hosted generative-UI agent in your React app with [`@heroui/agent`](https://
|
|
5
|
+
Embed a hosted generative-UI agent in your React app with [`@heroui/agent`](https://heroui.pro/agents). Declare typed client tools that read your data — the hosted runtime plans the answer, runs calculations in a sandbox, and streams back charts, tables, and metrics.
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -202,7 +202,7 @@ This SDK speaks protocol version `6`. The hosted API returns `426 Upgrade Requir
|
|
|
202
202
|
## Support
|
|
203
203
|
|
|
204
204
|
- [Documentation](https://heroui.pro/docs/agent)
|
|
205
|
-
- [Agents product](https://
|
|
205
|
+
- [Agents product](https://heroui.pro/agents)
|
|
206
206
|
- [Issues](https://github.com/heroui-inc/heroui-platform/issues)
|
|
207
207
|
- [Discord](https://discord.gg/9b6yyZKmH4)
|
|
208
208
|
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{E as rn,a as qe,c as je,d as ze,f as fe,g as Ke,j as Je,k as Ze,l as en,o as me,q as nn,r as tn,w as on}from"./chunk-YXZJD5XQ.js";import{a as Xe}from"./chunk-6ZJJN322.js";import{d as Ye,e as Qe}from"./chunk-UHHKMESI.js";import{useCallback as b,useEffect as C,useEffectEvent as yt,useLayoutEffect as kn,useMemo as Ce,useRef as E,useState as p,useSyncExternalStore as Tn}from"react";import{createRoot as wt}from"react-dom/client";import{SparklesFill as Jn}from"@gravity-ui/icons";import{jsx as Xn}from"react/jsx-runtime";function sn(e){return Xn(Jn,{...e})}import{jsx as pe}from"react/jsx-runtime";function Yn(e){return/\.svg(?:[?#]|$)/i.test(e)||/^data:image\/svg\+xml[;,]/i.test(e)}function an(e){return`url("${e.replace(/["\\\n\r]/g,encodeURIComponent)}")`}function cn({icon:e}){return e?Yn(e)?pe("span",{"aria-hidden":"true",className:"ha-launcher__icon ha-launcher__icon--tinted",style:{WebkitMaskImage:an(e),maskImage:an(e)}}):pe("img",{alt:"",className:"ha-launcher__icon",src:e}):pe(sn,{})}function ln(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function un(e,n){if(n===void 0)return e;if(!ln(e)||!ln(n))return n;let t={...e};for(let[r,a]of Object.entries(n))a!==void 0&&(t[r]=r in e?un(e[r],a):a);return t}function dn(e,n){if(!e)return n;let t={appearance:e.appearance,capabilities:e.capabilities,composer:e.composer,markdown:e.markdown,permissions:e.permissions,responseActions:e.responseActions,showBetaBadge:e.showBetaBadge,startScreen:e.startScreen},r=un(t,{appearance:n.appearance,capabilities:n.capabilities,composer:n.composer,markdown:n.markdown?{...n.markdown,plugins:void 0}:void 0,permissions:n.permissions,responseActions:n.responseActions,showBetaBadge:n.showBetaBadge,startScreen:n.startScreen});return{...n,...r}}function fn(e){return!!e.appearance?.theme?.typography?.fontFamily?.trim()}var mn=1,c=Symbol("invalid");function G(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function k(e){if(e!==void 0)return typeof e=="string"?e:c}function S(e){if(e!==void 0)return typeof e=="boolean"?e:c}function ge(e){if(e!==void 0)return typeof e=="number"&&Number.isFinite(e)?e:c}function M(e){return n=>{if(n!==void 0)return typeof n=="string"&&e.includes(n)?n:c}}function pn(e){if(e===void 0)return;if(typeof e=="string")return e;if(!G(e))return c;let n=k(e.dark),t=k(e.light);return n===c||t===c?c:{...n===void 0?{}:{dark:n},...t===void 0?{}:{light:t}}}function Qn(e){if(e===void 0)return;if(!G(e))return c;let n={};for(let[t,r]of Object.entries(e)){if(typeof r!="string")return c;n[t]=r}return n}function Zn(e){if(e!==void 0)return!Array.isArray(e)||e.some(n=>typeof n!="string")?c:e}function w(e,n){if(e===void 0||!G(e))return c;let t={};for(let[r,a]of Object.entries(n)){let l=a(e[r]);if(l===c)return c;l!==void 0&&(t[r]=l)}return t}function v(e){return e===c?void 0:e}var et=["accent","background","foreground","overlay","surface","surfaceSecondary","tooltip"];function nt(e){return w(e,{launcher:n=>n===void 0?void 0:w(n,{background:pn,icon:k,position:M(["bottom-left","bottom-right"]),style:Qn}),panel:n=>n===void 0?void 0:w(n,{expandable:S,expanded:S,initialHeight:t=>t===void 0||typeof t=="string"?t:ge(t),initialWidth:t=>t===void 0||typeof t=="string"?t:ge(t)}),theme:n=>n===void 0?void 0:w(n,{colorScheme:M(["dark","light","system"]),colors:t=>t===void 0?void 0:w(t,Object.fromEntries(et.map(r=>[r,pn]))),designTheme:M(["base","brutalism","glass","mouve"]),radius:M(["pill","round","sharp","soft"]),typography:t=>t===void 0?void 0:w(t,{baseSize:ge,fontFamily:k})}),viewMode:M(["floating","sidebar"])})}function tt(e){return w(e,{attachments:n=>{if(n===void 0||n===!1)return n;if(!Array.isArray(n))return c;let t=n.filter(r=>typeof r=="string"&&Je(r));return t.length===n.length?t:c},defaultModel:k,dictation:S,disclaimer:n=>n===!1?!1:k(n),modelPicker:S,placeholder:k})}function ot(e){return w(e,{animated:n=>{if(n===void 0||n===!1)return n;if(!G(n))return c;let t=M(["blurIn","fadeIn","slideUp"])(n.animation);return t===c||t===void 0?c:{...n,animation:t}},caret:n=>n===!1?!1:M(["block","circle"])(n)})}function rt(e){if(e===void 0||e===!1)return e;if(!Array.isArray(e))return c;let n=["copy","feedback","retry"],t=e.filter(r=>typeof r=="string"&&n.includes(r));return t.length===e.length?t:c}function Z(e){if(!G(e)||e.version!==mn)return null;let n=e.revision;if(typeof n!="string"||!n)return null;let t=v(nt(e.appearance)),r=v(w(e.capabilities,{imageSearch:S,newsSearch:S,webSearch:S})),a=v(tt(e.composer)),l=v(ot(e.markdown)),f=v(w(e.permissions,{defaultMode:M(["ask","auto","full"]),showPicker:S})),u=v(rt(e.responseActions)),m=v(S(e.showBetaBadge)),I=v(w(e.startScreen,{greeting:k,promptShortcuts:S,prompts:Zn})),h=v(w(e.webfont,{familyName:N=>typeof N=="string"&&N?N:c,fontFaceUrl:k,stylesheetUrl:k}));return{...t?{appearance:t}:{},...r?{capabilities:r}:{},...a?{composer:a}:{},...l?{markdown:l}:{},...f?{permissions:f}:{},...u===void 0?{}:{responseActions:u},...m===void 0?{}:{showBetaBadge:m},...I?{startScreen:I}:{},...h?{webfont:h}:{},revision:n,version:mn}}function he(e){return`heroui-agent:config:${e}`}var gn=1;function hn(e){try{let n=window.localStorage.getItem(he(e));if(!n)return null;let t=JSON.parse(n);if(typeof t=="object"&&t!==null&&!Array.isArray(t)){let a=t;if(a.cacheVersion===gn&&typeof a.cachedAt=="number"&&Number.isFinite(a.cachedAt)){let l=Z(a.config);return l?{cachedAt:a.cachedAt,config:l,legacy:!1}:null}}let r=Z(t);return r?{cachedAt:0,config:r,legacy:!0}:null}catch{return null}}function ye(e,n,t=Date.now()){try{let r={cacheVersion:gn,cachedAt:t,config:n};window.localStorage.setItem(he(e),JSON.stringify(r))}catch{}}function yn(e){try{window.localStorage.removeItem(he(e))}catch{}}async function wn(e,n,t={}){try{let r=await fetch(`${e}/v1/agents/${encodeURIComponent(n)}/appearance`,{headers:t.revision?{"If-None-Match":`"${t.revision}"`}:{},...t.signal?{signal:t.signal}:{}});if(r.status===304)return{status:"not-modified"};if(r.status===404||r.status===410)return{status:"missing"};if(!r.ok)return{status:"unavailable"};let a=Z(await r.json());return a?{config:a,status:"ok"}:{status:"unavailable"}}catch{return{status:"unavailable"}}}import{ChevronDown as st,Microphone as it,Plus as at,ShieldCheck as ct}from"@gravity-ui/icons";import{useEffect as lt,useRef as ut}from"react";import{Fragment as Rn,jsx as g,jsxs as we}from"react/jsx-runtime";var dt={ask:"Ask for approval",auto:"Approve for me",full:"Full access"};function Cn({onFileDialogActiveChange:e,onIntent:n,options:t}){return{end:g(mt,{options:t}),footer:t.composerDisclaimer?g("p",{className:"ha-footnote",children:Xe(t.composerDisclaimer)}):null,start:t.composerAttachmentContentTypes.length>0?g(ft,{accept:t.composerAttachmentAccept,agentId:t.agentId,onFileDialogActiveChange:e,onIntent:n}):null}}function ft({accept:e,agentId:n,onFileDialogActiveChange:t,onIntent:r}){let a=ut(null);return lt(()=>{let l=a.current,f,u=()=>t(!1),m=()=>{f=window.setTimeout(u,0)};return l?.addEventListener("cancel",u),window.addEventListener("focus",m),()=>{l?.removeEventListener("cancel",u),window.removeEventListener("focus",m),window.clearTimeout(f)}},[t]),we(Rn,{children:[g("input",{ref:a,multiple:!0,accept:e,"aria-label":"Choose files to attach",className:"ha-file-input",type:"file",onChange:l=>{tn(n,Array.from(l.currentTarget.files??[])),l.currentTarget.value="",t(!1),r()}}),g("button",{"aria-label":"Attach files",className:"ha-attach",type:"button",onClick:()=>{t(!0),a.current?.click()},children:g(at,{"aria-hidden":"true"})})]})}function mt({options:e}){let n=e.composerDefaultModel??Ye,t=Qe.find(r=>r.id===n)?.label??n;return we(Rn,{children:[e.permissionShowPicker&&e.tools.length>0?g(bn,{icon:g(ct,{"aria-hidden":"true",className:"aui-permission-picker__trigger-icon"}),kind:"permission",label:dt[e.permissionDefaultMode],tone:e.permissionDefaultMode==="full"?"warning":void 0}):null,e.composerModelPicker?g(bn,{kind:"model",label:t}):null,e.composerDictation?g("button",{disabled:!0,"aria-label":"Dictate message",className:"ha-dictation",type:"button",children:g(it,{"aria-hidden":"true"})}):null]})}function bn({icon:e,kind:n,label:t,tone:r}){let a=`aui-${n}-picker`;return g("div",{className:`${a} ha-${n}-picker`,"data-tone":r,children:we("button",{disabled:!0,"aria-label":n==="model"?"AI model":"Tool permissions",className:`${a}__trigger ha-shell-picker-trigger`,type:"button",children:[e,g("span",{className:`${a}__value`,children:t}),g(st,{"aria-hidden":"true",className:`${a}__indicator`})]})})}var pt=[".woff2",".woff",".ttf",".otf",".eot"];function gt(e){return`heroui-agent-font-${e.familyName.toLowerCase().replace(/[^a-z0-9]+/g,"-")}`}function ht(e){let n=e.includes(":vf@")||e.includes("-wght-")||e.includes("-opsz-");return e.endsWith(".woff")?"woff":e.endsWith(".ttf")?"truetype":e.endsWith(".otf")?"opentype":n?"woff2-variations":"woff2"}function An(e,n){try{let t=new URL(e);if(t.protocol!=="https:")return!1;if(!n)return!0;let r=t.pathname.toLowerCase();return pt.some(a=>r.endsWith(a))}catch{return!1}}function Sn(e){if(!e||typeof document>"u")return()=>{};let n=gt(e);if(document.getElementById(n))return()=>{};if(e.stylesheetUrl&&An(e.stylesheetUrl,!1)){let t=document.createElement("link");return t.id=n,t.rel="stylesheet",t.href=e.stylesheetUrl,document.head.append(t),()=>t.remove()}if(e.fontFaceUrl&&An(e.fontFaceUrl,!0)){let t=document.createElement("style"),r=e.fontFaceUrl.includes(":vf@")||e.fontFaceUrl.includes("-wght-")||e.fontFaceUrl.includes("-opsz-");return t.id=n,t.textContent=["@font-face {",` font-family: '${e.familyName.replaceAll("'","")}';`," font-style: normal;"," font-display: swap;",` font-weight: ${r?"100 900":"400"};`,` src: url(${e.fontFaceUrl}) format('${ht(e.fontFaceUrl)}');`,"}"].join(`
|
|
2
|
+
`),document.head.append(t),()=>t.remove()}return()=>{}}import{Fragment as On,jsx as P,jsxs as Nn}from"react/jsx-runtime";var bt=600,Ct=5*6e4,Rt="heroui-agent:open:";function Re(e){return`${Rt}${e}`}function At(e){if(typeof window>"u")return!1;try{return window.sessionStorage.getItem(Re(e))==="true"}catch{return!1}}function be(e,n){try{n?window.sessionStorage.setItem(Re(e),"true"):window.sessionStorage.removeItem(Re(e))}catch{}}var In;function vn(){return In??=import(/* webpackPrefetch: true */"./embed-runtime-YTHRILKV.js").then(e=>e.default),In}var D=new Map,Ae=new Set;function Mn(e){return e?D.get(e):[...D.values()][D.size-1]}function En(){for(let e of Ae)e()}function St(e){return Ae.add(e),()=>Ae.delete(e)}function kt(e){let n=window.matchMedia?.("(prefers-color-scheme: dark)");return n?.addEventListener?.("change",e),()=>n?.removeEventListener?.("change",e)}function It(){return window.matchMedia?.("(prefers-color-scheme: dark)").matches===!0}function x(e,n,...t){let r=Mn(e);if(!r){console.warn("HeroUI Agent is not mounted yet. Add <HeroUIAgent /> to your layout.");return}let a=r[n];a(...t)}function vt(e,n,t){let[r]=p(()=>!t||typeof window>"u"?null:hn(e)),[a,l]=p(()=>{if(!t)return{config:null,presentationReady:!0};let f=r?Date.now()-r.cachedAt:Number.POSITIVE_INFINITY,u=r!==null&&!r.legacy&&f>=0&&f<=Ct;return{config:u?r.config:null,presentationReady:u}});return C(()=>{if(!t)return;let f=new AbortController,u=!0,m=h=>{l(N=>N.presentationReady?N:{config:h,presentationReady:!0})},I=window.setTimeout(()=>{u&&(f.abort(),m(r?.config??null))},bt);return wn(n,e,{...r?.config.revision?{revision:r.config.revision}:{},signal:f.signal}).then(h=>{if(!(!u||f.signal.aborted)){if(h.status==="ok"){ye(e,h.config),m(h.config);return}if(h.status==="not-modified"){r&&ye(e,r.config),m(r?.config??null);return}if(h.status==="missing"){yn(e),m(null);return}m(r?.config??null)}}).finally(()=>{!u||f.signal.aborted||window.clearTimeout(I)}),()=>{u=!1,f.abort(),window.clearTimeout(I)}},[n,r,t,e]),t?a:{config:null,presentationReady:!0}}function co(e){let n=b(()=>Mn(e)?.ready??!1,[e]),t=Tn(St,n,()=>!1);return Ce(()=>({hide:()=>x(e,"hide"),newConversation:r=>x(e,"newConversation",r),preload:()=>x(e,"preload"),ready:t,refreshAuth:()=>x(e,"refreshAuth"),show:()=>x(e,"show"),shutdown:()=>x(e,"shutdown"),toggle:()=>x(e,"toggle")}),[e,t])}function lo(e){let n=`${e.agentId}\0${e._api?.baseUrl??""}\0${e.remoteConfig!==!1}`;return P(Et,{...e},n)}function Et(e){let{_api:n,agentId:t,appearance:r,capabilities:a,componentExports:l,composer:f,context:u,getAuthToken:m,markdown:I,onFeedback:h,onReady:N,permissions:Pn,preload:_n,remoteConfig:Un=!0,reopenOnRefresh:Se,responseActions:Ln,showLauncher:xn,startNewConversationOnOpen:Fn,startScreen:$n,tools:ke}=e,q=I?.plugins,ee=r?.shouldCloseOnInteractOutside,Hn=(n?.baseUrl??je).replace(/\/$/,""),{config:Ie,presentationReady:F}=vt(t,Hn,Un),ve=JSON.stringify({_api:n,appearance:r?{...r,shouldCloseOnInteractOutside:void 0}:void 0,capabilities:a,componentExports:l,composer:f,markdown:I?{...I,plugins:void 0}:void 0,permissions:Pn,preload:_n,remote:Ie,reopenOnRefresh:Se,responseActions:Ln,showLauncher:xn,startNewConversationOnOpen:Fn,startScreen:$n}),o=Ce(()=>{let{remote:s,...i}=JSON.parse(ve),d=dn(s,{...i,agentId:t,getAuthToken:m,...ee!==void 0?{appearance:{...i.appearance,shouldCloseOnInteractOutside:ee}}:{}});return rn({...d,context:u,markdown:d.markdown?{...d.markdown,plugins:q}:q?{plugins:q}:void 0,onFeedback:h,tools:ke})},[u,m,q,h,t,ve,ee,ke]),j=Ce(()=>new qe(t,m),[t,m]),Ee=fn(e),Ne=Ie?.webfont;C(()=>{if(!Ee)return Sn(Ne)},[Ee,Ne]);let[z]=p(()=>Se===!0&&At(t)),[ne,V]=p(z),[_,Bn]=p(1),[Oe,Te]=p(1),[Me,Pe]=p(!1),[K,Dn]=p(z||o.startNewConversationOnOpen?null:void 0),[O,Vn]=p(null),[J,Wn]=p(null),[_e,Gn]=p(!1),[te,oe]=p(!1),[qn,Ue]=p(null),re=E(1),Le=E(null),se=E(!1),ie=E(null),xe=E(null),$=E(z),ae=E(null),X=E(null),ce=E([]),jn=Tn(kt,It,()=>!1),le=o.designTheme==="base"?null:`${o.designTheme}-${o.colorScheme==="system"?jn?"dark":"light":o.colorScheme}`,U=F&&qn===_&&J!==null,y=F&&ne,[Y,zn]=p(z||o.preload),R=b(()=>zn(!0),[]),[W,H]=p(!1),[Fe,$e]=p(!1),ue=b(()=>H(!0),[]);C(()=>{if(!W||!O)return;let s=()=>{queueMicrotask(()=>{let i=O.querySelector(".ha-composer:not([hidden] *)");i&&nn(i,document.activeElement)||H(!1)})};return O.addEventListener("focusout",s),()=>O.removeEventListener("focusout",s)},[W,O]),C(()=>{Y&&j.get().catch(()=>{})},[Y,j]),C(()=>{o.reopenOnRefresh?be(o.agentId,ne):be(o.agentId,!1)},[ne,o.agentId,o.reopenOnRefresh]),C(()=>{if(!Y)return;if(!F){vn().catch(()=>{});return}let s=!0;return vn().then(i=>{s&&Wn(()=>i)}).catch(()=>{}),()=>{s=!1}},[F,Y]),C(()=>{if(!y||o.viewMode!=="sidebar"||window.innerWidth<640)return;let s=document.documentElement,i=s.style.marginRight,d=s.style.transition,A=window.matchMedia("(prefers-reduced-motion: reduce)").matches,de=Math.min(fe(o.agentId,window.innerWidth),window.innerWidth);return A||(s.style.transition=[d,"margin-right .28s cubic-bezier(.2,.8,.2,1)"].filter(Boolean).join(", ")),s.style.marginRight=`${de}px`,()=>{s.style.marginRight=i,window.setTimeout(()=>{s.style.transition=d},300)}},[y,o.agentId,o.viewMode]),C(()=>{let s=document.createElement("div"),i=document.createElement("div");s.dataset.herouiAgent=o.agentId,i.className="ha-root",ae.current=s,ie.current=i,X.current=wt(i),s.append(i),document.body.append(s);let d=!0;return queueMicrotask(()=>{d&&Vn(i)}),()=>{d=!1,me(o.agentId,!1);let A=X.current;ie.current=null,ae.current=null,X.current=null,ce.current=[],queueMicrotask(()=>{A?.unmount(),s.remove()})}},[o.agentId]),kn(()=>{let s=ie.current,i=ae.current;if(!s||!i)return;s.className=le?`ha-root ${le}`:"ha-root",s.dataset.theme=o.colorScheme,s.dataset.viewMode=o.viewMode,s.dataset.position=o.launcherPosition,i.dataset.open=y?"true":"false",i.dataset.viewMode=o.viewMode,i.dataset.position=o.launcherPosition,o.launcherOffset?(i.style.setProperty("--ha-launcher-x",`${o.launcherOffset.x}px`),i.style.setProperty("--ha-launcher-y",`${o.launcherOffset.y}px`)):(i.style.removeProperty("--ha-launcher-x"),i.style.removeProperty("--ha-launcher-y")),o.viewMode==="sidebar"&&i.style.setProperty("--ha-sidebar-width",`${fe(o.agentId,window.innerWidth)}px`);let d={...o.themeStyle,...o.panelStyle};for(let A of ce.current)A in d||s.style.removeProperty(A);for(let[A,de]of Object.entries(d))s.style.setProperty(A,de);ce.current=Object.keys(d)},[le,y,o.colorScheme,o.agentId,o.launcherOffset,o.launcherPosition,o.panelStyle,o.themeStyle,o.viewMode,O]);let T=b(s=>{me(o.agentId,!1),$e(!1),Ue(null),Dn(s);let i=re.current+1;re.current=i,Bn(i)},[o.agentId]),He=b(s=>{re.current===s&&(Gn(!0),Ue(s))},[]),Kn=yt(()=>N?.());C(()=>{!U||xe.current===_||(xe.current=_,Kn())},[_,U]);let L=b(()=>{$.current=!1,se.current=!0,V(!1),H(!1),T(o.startNewConversationOnOpen?null:void 0)},[o.startNewConversationOnOpen,T]);C(()=>{y||!U||!se.current||(se.current=!1,requestAnimationFrame(()=>Le.current?.focus()))},[y,U]);let B=b(()=>{$.current=!0,V(!0),R()},[R]),Be=R,Q=b(s=>{let i=s?Ze(s):null;i&&en(o.agentId,i),$.current=!0,V(!0),H(!1),R(),T(null)},[o.agentId,T,R]),De=b(s=>{$.current=!0,V(!0),H(!1),R(),T(s)},[T,R]),Ve=b(()=>{y||$.current?L():B()},[L,y,B]),We=b(()=>{oe(!1),Pe(!1),Te(s=>s+1)},[]),Ge=b(()=>{let s=[`heroui-agent:anonymous:${o.agentId}`,`heroui-agent:conversation:${o.agentId}:`,`heroui-agent:history:${o.agentId}:`];for(let i=localStorage.length-1;i>=0;i-=1){let d=localStorage.key(i);d&&s.some(A=>d.startsWith(A))&&localStorage.removeItem(d)}$.current=!1,oe(!1),V(!1),H(!1),be(o.agentId,!1),Pe(!0),Te(i=>i+1),T(),window.setTimeout(()=>{import("./composer-draft-NSKK65F3.js").then(({clearAgentComposerDraftsForProject:i})=>i(o.agentId)).catch(()=>{})},0)},[o.agentId,T]);return C(()=>{let s={hide:L,newConversation:Q,preload:Be,ready:U,refreshAuth:We,show:B,shutdown:Ge,toggle:Ve};return D.set(o.agentId,s),En(),()=>{D.get(o.agentId)===s&&(D.delete(o.agentId),En())}},[L,Q,o.agentId,Be,U,We,B,Ge,Ve]),kn(()=>{let s=X.current;if(!O||!s)return;let i=Cn({onFileDialogActiveChange:$e,onIntent:R,options:o});s.render(Nn(On,{children:[F&&o.showLauncher&&!y?Nn("button",{ref:Le,"aria-expanded":!1,"aria-haspopup":"dialog",className:"ha-launcher",style:o.launcherStyle,type:"button","aria-label":te?"Open data assistant, unread messages":"Open data assistant",onClick:B,children:[P(cn,{icon:o.launcherIcon}),te?P("span",{"aria-hidden":"true",className:"ha-launcher__unread"}):null]}):null,J&&!Fe?P(J,{composerControlsRevealed:W,conversationEpoch:_,identityEpoch:Oe,identityReset:Me,open:y,options:o,requestedConversationId:K,shellComposerEndSlot:i.end,shellComposerFooterSlot:i.footer,showReadyLoader:!_e&&K!==null,tokenManager:j,onClose:L,onComposerControlsReveal:ue,onNewConversation:Q,onReady:He,onSelectConversation:De,onUnreadChange:oe}):P(Ke,{agentId:o.agentId,shouldCloseOnInteractOutside:o.shouldCloseOnInteractOutside,defaultExpanded:o.panelExpanded,expandable:o.panelExpandable,historySlot:P(On,{}),name:"Data assistant",open:y,showBetaBadge:o.showBetaBadge,viewMode:o.viewMode,onClose:L,children:K===null?P(on,{composerConnecting:!0,agentId:o.agentId,composerControlsAvailable:o.composerControlsAvailable,composerControlsRevealed:W,composerEndSlot:i.end,composerFooterSlot:i.footer,composerStartSlot:i.start,greeting:o.greeting,placeholder:o.composerPlaceholder,suggestedPrompts:o.suggestedPrompts??[],onComposerControlsReveal:ue,onIntent:R},`shell-${_}`):P(ze,{})})]}))},[J,W,Fe,_,He,te,_e,L,Oe,Me,y,Q,o,O,U,F,K,R,ue,De,B,j]),null}export{co as a,lo as b};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as de,e as ue,f as me}from"./chunk-4JEZZR5J.js";var yt="0.2.0-beta.15",pe="https://api.heroui.pro";import{jsx as Ue,jsxs as We}from"react/jsx-runtime";function Tt({indicator:e,label:t="Loading agent\u2026"}){return We("div",{"aria-live":"polite",className:"ha-agent-loading",role:"status",children:[e,Ue("span",{children:t})]})}import{jsx as ge,jsxs as Ge}from"react/jsx-runtime";function V({children:e,shortcut:t}){return Ge("span",{"aria-hidden":"true",className:"ha-control-tooltip",children:[ge("span",{children:e}),t?ge("kbd",{className:"ha-control-tooltip__shortcut",children:t}):null]})}import{ChevronsCollapseUpRight as $e,ChevronsExpandUpRight as Xe}from"@gravity-ui/icons";import{useCallback as Ae,useEffect as z,useEffectEvent as Ye,useLayoutEffect as je,useRef as re,useState as $}from"react";function he(e){return`heroui-agent:sidebar-width:${e}`}function ne(e,t){let n=Math.min(720,Math.floor(t*.9)),o=Math.max(n,320);return Math.min(Math.max(Math.round(e),320),o)}function fe(e,t){let n=Number.NaN;try{n=Number(localStorage.getItem(he(e))??Number.NaN)}catch{}return ne(Number.isFinite(n)?n:420,t)}function oe(e,t){try{localStorage.setItem(he(e),String(Math.round(t)))}catch{}}import{jsx as d,jsxs as R}from"react/jsx-runtime";function qe(e,t){return e===!1?!1:e===void 0||e===!0||!(t instanceof Element)?!0:e(t)}function Ht({actionsSlot:e,agentId:t,children:n,defaultExpanded:o=!1,expandable:s=!0,expandedSidebarSlot:b,expandedTitle:w,historySlot:a,keepMounted:c=!1,name:m,onClose:M,onNewConversation:P,open:f,shouldCloseOnInteractOutside:y,showBetaBadge:L=!1,viewMode:p}){let E=re(null),O=re(0),[_,C]=$(()=>typeof window>"u"||typeof window.matchMedia!="function"?!1:null),N=Ye(M),[v,Q]=$(o),F=_!==null,x=_??!1,i=p==="floating",g=!i&&!x,h=x||g&&v,[ee,ce]=$(!1),Ie=!x&&s,B=g&&v&&b;return je(()=>{let r=window.matchMedia?.("(max-width: 639px)");if(!r)return;let A=()=>C(r.matches);return A(),r.addEventListener?.("change",A),()=>r.removeEventListener?.("change",A)},[]),z(()=>{if(!ee)return;let r=E.current;if(!r)return;let A=()=>ce(!1),S=U=>{let{propertyName:u,target:T}=U;T===r&&(u!=="width"&&u!=="height"||A())},te=window.setTimeout(A,600);return r.addEventListener("transitionend",S),()=>{window.clearTimeout(te),r.removeEventListener("transitionend",S)}},[ee]),z(()=>{if(!f||!F)return;let r=E.current;if(!r)return;let A=document.activeElement instanceof HTMLElement?document.activeElement:null;r.open||(h&&typeof r.showModal=="function"?r.showModal():!h&&typeof r.show=="function"?r.show():r.open=!0);let S;if(h){let u=document.documentElement,T=window.scrollX,I=window.scrollY,W=u.style.overflow,G=document.body.style.overflow,K=document.body.style.position,De=document.body.style.top,Le=document.body.style.left,Fe=document.body.style.right,Be=document.body.style.width;u.style.overflow="hidden",document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.top=`${-I}px`,document.body.style.left=`${-T}px`,document.body.style.right="0",document.body.style.width="100%",S=()=>{u.style.overflow=W,document.body.style.overflow=G,document.body.style.position=K,document.body.style.top=De,document.body.style.left=Le,document.body.style.right=Fe,document.body.style.width=Be,window.scrollTo(T,I)}}let te=r.querySelector("button,textarea,input,[tabindex]:not([tabindex='-1'])");r.contains(document.activeElement)||te?.focus();let U=u=>{if(!h&&u.key==="Escape"){if(be(r)){O.current=Date.now(),u.preventDefault(),u.stopPropagation();return}u.preventDefault(),N();return}if(!h||u.key!=="Tab")return;let T=Array.from(r.querySelectorAll("button:not(:disabled),textarea:not(:disabled),input:not(:disabled),[tabindex]:not([tabindex='-1'])"));if(T.length===0)return;let I=T[0],W=T[T.length-1],G=r.getRootNode(),K=G instanceof ShadowRoot?G.activeElement:document.activeElement;u.shiftKey&&K===I?(u.preventDefault(),W.focus()):!u.shiftKey&&K===W&&(u.preventDefault(),I.focus())};return r.addEventListener("keydown",U),()=>{r.removeEventListener("keydown",U),typeof r.close=="function"?r.close():r.open=!1,S?.(),document.activeElement===document.body&&A?.focus()}},[h,f,F]),z(()=>{if(!f||!i||h)return;let r=E.current;if(!r)return;let A=S=>{S.composedPath().includes(r)||qe(y,S.target)&&N()};return document.addEventListener("click",A,!0),()=>document.removeEventListener("click",A,!0)},[h,i,f,y]),!f&&!c?null:R("dialog",{ref:E,"aria-label":m,"aria-modal":h,className:"ha-panel","data-agent-overlay-root":"","data-expanded":!x&&v?"true":void 0,"data-expanded-sidebar":B?"true":void 0,"data-resizing":ee?"true":void 0,hidden:!f,onCancel:r=>{if(r.preventDefault(),Date.now()-O.current<350||be(E.current)){O.current=Date.now();return}M()},children:[g&&!v?d(Ze,{agentId:t,panelRef:E}):null,B?d("aside",{"aria-label":"Chat history",className:"ha-expanded-sidebar",children:b}):null,R("div",{className:"ha-panel-main",children:[R("header",{className:"ha-header",children:[R("div",{className:"ha-header-title",children:[B?d("span",{className:"ha-session-title ha-expanded-chat-title",children:w??m}):a??d("strong",{children:m}),L?d("span",{className:"ha-beta-badge",children:"Beta"}):null]}),R("div",{className:"ha-header-actions",children:[B?null:e??(P?d("button",{"aria-label":"New chat",className:"ha-icon-button ha-new-chat-button",type:"button",onClick:P,children:d(Qe,{})}):null),Ie?d("button",{"aria-expanded":v,"aria-label":v?"Collapse assistant":"Expand assistant",className:"ha-expand-button ha-icon-button",type:"button",onClick:()=>{ce(!0),Q(r=>!r)},children:v?d($e,{"aria-hidden":"true"}):d(Xe,{"aria-hidden":"true"})}):null,R("button",{"aria-keyshortcuts":"Escape","aria-label":"Close assistant",className:"ha-close-button ha-icon-button","data-shortcut":"ESC","data-tooltip":"Close assistant",type:"button",onClick:M,children:[d(Je,{}),d(V,{shortcut:"ESC",children:"Close assistant"})]})]})]}),n,d("div",{className:"ha-overlay-portal","data-agent-overlay-portal":""})]})]})}function be(e){let t=e?.querySelector(['[data-slot$="-popover"]','[data-slot="agent-ui-image-modal"]','[data-slot="modal-dialog"]',".ha-feedback-popover"].join(","));return t?(t.querySelector('button[aria-label="Dismiss"]')?.click(),!0):!1}function Ze({agentId:e,panelRef:t}){let[n,o]=$(420),s=re(null),b=Ae(a=>{let c=t.current,m=c?.getRootNode();(m instanceof ShadowRoot?m.host:c?.closest("[data-heroui-agent]"))?.style.setProperty("--ha-sidebar-width",`${a}px`),window.innerWidth>=640&&(document.documentElement.style.marginRight=`${Math.min(a,window.innerWidth)}px`),o(a)},[t]);z(()=>{o(fe(e,window.innerWidth))},[e]);let w=Ae((a,c)=>{let m=ne(a,window.innerWidth);return b(m),c&&oe(e,m),m},[b,e]);return d("div",{"aria-label":"Resize assistant panel","aria-orientation":"vertical","aria-valuemax":720,"aria-valuemin":320,"aria-valuenow":n,className:"ha-resize-handle",role:"separator",tabIndex:0,onKeyDown:a=>{let c=a.key==="ArrowLeft"?24:a.key==="ArrowRight"?-24:0;c!==0&&(a.preventDefault(),w(n+c,!0))},onPointerCancel:a=>{let c=s.current;c&&(s.current=null,delete a.currentTarget.dataset.resizing,t.current&&delete t.current.dataset.dragResizing,document.documentElement.style.transition=c.pageTransition,w(c.startWidth,!1))},onPointerDown:a=>{a.button!==0&&a.pointerType==="mouse"||(a.preventDefault(),a.currentTarget.setPointerCapture(a.pointerId),a.currentTarget.dataset.resizing="true",s.current={currentWidth:n,pageTransition:document.documentElement.style.transition,startWidth:n,startX:a.clientX},document.documentElement.style.transition="none",t.current&&(t.current.dataset.dragResizing="true"))},onPointerMove:a=>{let c=s.current;c&&(c.currentWidth=w(c.startWidth+(c.startX-a.clientX),!1))},onPointerUp:a=>{let c=s.current;c&&(s.current=null,delete a.currentTarget.dataset.resizing,t.current&&delete t.current.dataset.dragResizing,a.currentTarget.releasePointerCapture(a.pointerId),document.documentElement.style.transition=c.pageTransition,oe(e,c.currentWidth))}})}function Je(){return d("svg",{"aria-hidden":"true",fill:"none",height:"18",viewBox:"0 0 18 18",width:"18",children:d("path",{d:"m4.25 4.25 9.5 9.5m0-9.5-9.5 9.5",stroke:"currentColor",strokeLinecap:"round",strokeWidth:"1.6"})})}function Qe(){return d("svg",{"aria-hidden":"true",fill:"none",height:"18",viewBox:"0 0 18 18",width:"18",children:d("path",{d:"M9 4v10M4 9h10",stroke:"currentColor",strokeLinecap:"round",strokeWidth:"1.6"})})}function ye(e,{generateConversationTitle:t=!0}={}){let n=performance.now(),o=Date.now(),s=e.trim();return s?{...t?{}:{generateConversationTitle:!1},messageId:crypto.randomUUID(),prompt:s,startedAt:n,startedAtWallClock:o,submitted:!0}:null}var H=new Map,X=new Map,et=10080*60*1e3,Y=new Map;function ve(e){return`heroui-agent:shell-draft:${e}:composer-draft:v1`}function ae(e,t){try{let n=ve(e);t.trim()?localStorage.setItem(n,JSON.stringify({prompt:t,savedAt:Date.now()})):localStorage.removeItem(n)}catch{}}function tt(e){let t=ve(e);try{let n=JSON.parse(localStorage.getItem(t)??"null");if(n&&typeof n.prompt=="string"&&n.prompt.trim()&&typeof n.savedAt=="number"&&Date.now()-n.savedAt<=et)return n.prompt;localStorage.removeItem(t)}catch{}return""}function j(e,t){if(!t.prompt.trim()&&!t.submitted){H.delete(e),ae(e,"");return}H.set(e,t),t.submitted||ae(e,t.prompt)}function ie(e){let t=H.get(e);if(t)return t;let n=tt(e);return n?{prompt:n,submitted:!1}:void 0}function Te(e,t,n){let o=H.get(e);!o?.submitted||o.messageId!==t||o.firstFeedbackPaintedAt!==void 0||H.set(e,{...o,firstFeedbackPaintedAt:n})}function _t(e){let t=ie(e);return H.delete(e),ae(e,""),t}function D(e,t,n){t?Y.set(e,[n?.selectionStart??0,n?.selectionEnd??0,n?.selectionDirection??"none"]):Y.delete(e)}function we(e,t){let n=Y.get(e);if(!n||!t)return;t.focus({preventScroll:!0});let o=Math.min(n[0],t.value.length),s=Math.min(n[1],t.value.length);t.setSelectionRange(o,s,n[2]),Y.set(e,[o,s,n[2]])}function Ee(e,t){return t instanceof Node?e.contains(t)||e.closest(".ha-composer-wrap")?.querySelector(".ha-footnote")?.contains(t)===!0||e.closest(".ha-root")?.querySelector(".ha-overlay-portal")?.contains(t)===!0:!1}function It(e,t){t.length===0?X.delete(e):X.set(e,t)}function nt(e){return X.get(e)??[]}function Dt(e){let t=nt(e);return X.delete(e),t}function xe(e){let t=Number.parseFloat(e);return Number.isFinite(t)?t:0}function ot(e){let t=getComputedStyle(e),n=Number.parseFloat(t.lineHeight);if(Number.isFinite(n)&&n>0)return n;let o=Number.parseFloat(t.fontSize);return Number.isFinite(o)&&o>0?o*1.2:20}function rt(e){let t=getComputedStyle(e);return xe(t.paddingTop)+xe(t.paddingBottom)}function at(e){let t=e.style.height,n=e.style.minHeight,o=e.style.maxHeight;e.style.height="0px",e.style.minHeight="0px",e.style.maxHeight="none";let s=e.scrollHeight;return e.style.height=t,e.style.minHeight=n,e.style.maxHeight=o,s}function it(e){if(e.value.includes(`
|
|
2
|
+
`))return!0;if(e.clientWidth===0)return!1;let t=at(e),n=rt(e),o=ot(e);return Math.max(0,t-n)>o*1.5}function se(e,{hasAttachments:t=!1,maxHeight:n=120}={}){if(!e)return!1;let o=e.value.length>0;return t||o&&it(e)?(e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,n)}px`,!0):(e.style.height="auto",!1)}import{jsx as le,jsxs as Se}from"react/jsx-runtime";var st="https://heroui.pro/?utm_source=heroui-agent&utm_medium=referral&utm_campaign=powered-by-hero";function ke(){return Se("a",{"aria-label":"Powered by HeroUI Pro (opens in a new tab)",className:"ha-powered-by",href:st,rel:"noopener noreferrer",target:"_blank",children:[le("span",{children:"Powered by"}),Se("svg",{"aria-hidden":"true",className:"ha-powered-by-logo",fill:"none",viewBox:"0 0 140 44",children:[le("path",{d:"M.678 11.385V24.04c0 .599.307 1.155.813 1.471l8.628 5.396c1.15.719 2.639-.11 2.639-1.47V18.798c0-.612.322-1.18.847-1.491l5.263-3.13v27.267c0 1.355 1.48 2.186 2.63 1.476l8.905-5.497a1.72 1.72 0 0 0 .822-1.476V9.765c0-1.349-1.467-2.18-2.618-1.484l-9.74 5.897V2.556c0-1.345-1.46-2.177-2.61-1.488L1.52 9.897a1.72 1.72 0 0 0-.842 1.488Z",fill:"currentColor"}),le("path",{d:"M63.876 24.071c0-3.59-1.468-5.246-4.405-5.246-3.363 0-5.732 2.255-5.732 7.316v11.595h-6.063V5.528h6.063v11.779c1.468-2.393 3.884-3.59 7.2-3.59 5.637 0 8.953 3.451 8.953 9.25v14.769h-6.016V24.071ZM84.9 38.473c-7.533 0-12.317-4.877-12.317-12.378 0-7.408 4.737-12.378 12.317-12.378 8.195 0 12.648 5.798 11.416 13.942H78.647c.331 3.865 2.605 6.075 6.253 6.075 2.984 0 4.784-1.52 5.258-3.037h6.016c-.947 4.509-5.115 7.776-11.274 7.776ZM78.789 23.657h11.653c-.047-3.175-2.132-5.338-5.685-5.338-3.174 0-5.4 1.84-5.968 5.338ZM99.623 20.344c0-3.82 2.131-5.89 6.205-5.89h7.77v4.97h-7.912v18.312h-6.063V20.344ZM126.863 38.473c-7.674 0-12.553-4.924-12.553-12.378 0-7.454 4.879-12.378 12.553-12.378 7.58 0 12.459 4.924 12.459 12.378 0 7.454-4.88 12.378-12.46 12.378Zm0-5.016c3.79 0 6.3-2.898 6.3-7.362 0-4.463-2.51-7.408-6.3-7.408-3.838 0-6.348 2.945-6.348 7.408 0 4.464 2.51 7.362 6.348 7.362Z",fill:"currentColor"})]})]})}var Me=new Set(["ask","auto","full"]);function q(e){return Me.has(e)?e:"auto"}function Wt(e,t){return`${e}:permission-mode:${t}:v1`}function Gt(e,t){return`${e}:active-permission-mode:${t}:v1`}function Kt(e){try{let t=localStorage.getItem(e);return t!==null&&Me.has(t)?q(t):void 0}catch{return}}function Vt(e,t){try{localStorage.setItem(e,t)}catch{}}function zt(e){try{localStorage.removeItem(e)}catch{}}function $t(e,t){let n=q(t);if(n==="auto")return e;let o=n==="ask";return e.map(s=>!!s.needsApproval===o?s:{...s,needsApproval:o})}function Ce(e){return`heroui-agent:anonymous:${e}`}function lt(e){return e instanceof Error?e:new Error("Auth token request failed")}var Ne=class{constructor(t,n){this.agentId=t;this.getAuthToken=n}cached=null;failure=null;generation=0;pending=null;clear(){this.generation+=1,this.cached=null,this.failure=null,this.pending=null}reset(){this.clear();try{localStorage.removeItem(Ce(this.agentId))}catch{}}async get(){if(this.cached&&this.expiresAt(this.cached)>Date.now()+6e4)return this.cached.token;if(!this.pending&&this.failure&&Date.now()<this.failure.retryAt)throw this.failure.error;let t=this.generation,n=this.pending??this.refresh();this.pending||(this.pending=n);try{let o=await n;return t!==this.generation?this.get():(this.cached=o,this.failure=null,o.token)}catch(o){throw t===this.generation&&(this.failure={error:lt(o),retryAt:Date.now()+5e3}),o}finally{this.pending===n&&(this.pending=null)}}async subjectHash(){let t=await this.get(),n=ct(t),o=typeof n.sub=="string"?n.sub:"anonymous",s=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(`${this.agentId}:${o}`));return Array.from(new Uint8Array(s),b=>b.toString(16).padStart(2,"0")).join("").slice(0,24)}anonymousId(){let t=Ce(this.agentId);try{let n=localStorage.getItem(t);if(n)return n;let o=crypto.randomUUID();return localStorage.setItem(t,o),o}catch{return crypto.randomUUID()}}expiresAt(t){return t.expiresAt}async refresh(){let t=await this.getAuthToken({agentId:this.agentId,anonymousId:this.anonymousId()});if(!t||typeof t.token!="string"||!t.token.trim()||typeof t.expiresAt!="number"||!Number.isFinite(t.expiresAt)||t.expiresAt<=0)throw new Error("Auth token callback returned invalid data");return{expiresAt:t.expiresAt,token:t.token}}};function ct(e){try{let t=e.split(".")[1];if(!t)return{};let n=t.replace(/-/g,"+").replace(/_/g,"/"),o=n.padEnd(Math.ceil(n.length/4)*4,"=");return JSON.parse(atob(o))}catch{return{}}}var dt={"application/json":"json","application/pdf":"pdf","image/gif":"gif","image/jpeg":"jpg","image/png":"png","image/webp":"webp","text/csv":"csv","text/markdown":"md","text/plain":"txt","text/tab-separated-values":"tsv"},Z=Object.freeze(Object.keys(dt)),jt=Z.join(","),ut=new Set(Z);function Re(e){return ut.has(e.trim().toLowerCase())}import{useEffect as mt,useLayoutEffect as He,useRef as pt,useState as J}from"react";import{Fragment as Pe,jsx as l,jsxs as k}from"react/jsx-runtime";function nn({agentId:e,composerConnecting:t=!1,composerControlsAvailable:n,composerControlsRevealed:o,composerEndSlot:s,composerFooterSlot:b,composerStartSlot:w,greeting:a,onComposerControlsReveal:c,onIntent:m,placeholder:M,suggestedPrompts:P}){let[f]=J(()=>ie(e)),[y,L]=J(()=>f?.submitted?"":f?.prompt??""),[p,E]=J(()=>f?.submitted?f:null),[O,_]=J(!1),C=pt(null),N=n??!!(w||s),v=o??(N&&O),Q=i=>{D(e,!0,i.currentTarget),_(N),N&&c?.(),m()},F=i=>{let g=i.currentTarget.querySelector(".ha-composer");g&&Ee(g,i.relatedTarget)||(_(!1),D(e,!1))};He(()=>{we(e,C.current),se(C.current)},[e]),mt(()=>{p||j(e,{prompt:y,submitted:!1})},[y,e,p]),He(()=>{if(!p)return;let i=requestAnimationFrame(g=>{Te(e,p.messageId,g)});return()=>cancelAnimationFrame(i)},[e,p]);let x=(i,g=!0)=>{if(p)return;let h=ye(i,{generateConversationTitle:g});h&&(E(h),L(""),C.current.style.height="auto",j(e,h),m())};return k(Pe,{children:[l("div",{className:"ha-conversation",children:l("div",{"aria-live":"polite",className:"ha-messages",role:"log",children:p?k(Pe,{children:[l("div",{className:"ha-message","data-role":"user",children:l("div",{className:"ha-bubble",children:l("div",{className:"ha-message-content",children:l("p",{className:"ha-message-text",children:p.prompt})})})}),l("div",{className:"ha-message","data-role":"assistant","data-stream-anchor":"true","data-turn-feedback-id":p.messageId,children:l("div",{className:"ha-message-body",children:l("div",{"aria-label":"Working on your request\u2026",className:"ha-progress ha-activity-status ha-progress-shimmer",role:"status",children:l("span",{"aria-hidden":"true",className:"ha-shimmer",children:"Thinking\u2026"})})})})]}):k("div",{className:"ha-empty",children:[l("h2",{children:a}),l("p",{children:"Live answers with charts, metrics, and tables."})]})})}),k("form",{className:"ha-composer-wrap",onBlur:F,onSubmit:i=>{i.preventDefault(),x(y)},children:[!p&&P.length>0?l("div",{"aria-label":"Suggested prompts",className:"ha-suggestions",role:"group",children:P.map(i=>k("button",{className:"ha-suggestion",type:"button",onClick:()=>x(i,!1),children:[l("span",{children:i}),l(ht,{})]},i))}):null,k("div",{className:"@container ha-composer","data-connecting":t||void 0,"data-controls-revealed":v||void 0,children:[w,l("textarea",{ref:C,"aria-label":"Message the assistant",placeholder:M,readOnly:!!p,rows:1,value:y,onFocus:Q,onSelect:i=>D(e,!0,i.currentTarget),onChange:i=>{let g=i.currentTarget.value;j(e,{prompt:g,submitted:!1}),D(e,!0,i.currentTarget),L(g),se(i.currentTarget),m()},onKeyDown:i=>{i.key!=="Enter"||i.shiftKey||(i.preventDefault(),x(y))}}),s,k("button",{"aria-label":"Send message",className:"ha-send",disabled:!y.trim()||!!p,type:"submit",children:[l(gt,{}),l(V,{shortcut:"\u21B5",children:"Send message"})]})]}),l("div",{className:"ha-composer-footer","data-revealed":!!b||void 0,children:l("div",{className:"ha-composer-footer-content",children:b})}),l(ke,{})]})]})}function gt(){return l("svg",{"aria-hidden":"true",fill:"none",height:"18",viewBox:"0 0 18 18",width:"18",children:l("path",{d:"M9 14.5V3.5m0 0L4.5 8M9 3.5 13.5 8",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.6"})})}function ht(){return l("svg",{"aria-hidden":"true",fill:"none",height:"16",viewBox:"0 0 16 16",width:"16",children:l("path",{d:"M5 11 11 5m0 0H6m5 0v5",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.5"})})}var ft={animation:"fadeIn",duration:160,easing:"ease-out",sep:"word",stagger:18};function Oe(e){return typeof e=="number"?Number.isFinite(e)?`${Math.round(e)}px`:void 0:e?.trim()||void 0}function At(e){let t=Oe(e?.initialWidth),n=Oe(e?.initialHeight);return{...t?{"--ha-panel-width":t}:{},...n?{"--ha-panel-height":n}:{}}}function _e(e){return e===void 0||!Number.isFinite(e)?24:Math.min(Math.max(Math.round(e),0),200)}function bt(e){if(e===void 0)return[...Z];if(e===!1||!Array.isArray(e))return[];let t=new Set;for(let n of e){if(typeof n!="string")continue;let o=n.trim().toLowerCase();Re(o)&&t.add(o)}return[...t]}function dn(e){if(typeof e.agentId!="string"||!e.agentId.trim())throw new Error("HeroUI Agent agentId is required");if(typeof e.getAuthToken!="function")throw new Error("HeroUI Agent getAuthToken is required");let t=bt(e.composer?.attachments),n=typeof e.composer?.disclaimer=="string"&&e.composer.disclaimer.trim().slice(0,240)||void 0;return{apiBaseUrl:(e._api?.baseUrl??pe).replace(/\/$/,""),colorScheme:e.appearance?.theme?.colorScheme??"system",componentExportFormats:e.componentExports===!1?[]:e.componentExports??["csv","svg","png"],composerAttachmentAccept:t.join(","),composerAttachmentContentTypes:t,composerControlsAvailable:t.length>0||e.permissions?.showPicker===!0&&!!e.tools?.length||e.composer?.modelPicker===!0||(e.composer?.dictation??!0),composerDefaultModel:e.composer?.defaultModel,composerDictation:e.composer?.dictation??!0,designTheme:de(e.appearance?.theme?.designTheme),...n?{composerDisclaimer:n}:{},agentId:e.agentId,...e.appearance?.shouldCloseOnInteractOutside!==void 0?{shouldCloseOnInteractOutside:e.appearance.shouldCloseOnInteractOutside}:{},composerModelPicker:e.composer?.modelPicker??!1,composerPlaceholder:e.composer?.placeholder?.trim().slice(0,120)||"Ask anything\u2026",context:e.context,getAuthToken:e.getAuthToken,greeting:e.startScreen?.greeting?.trim().slice(0,120)||"Ask about your data",launcherPosition:e.appearance?.launcher?.position??"bottom-right",markdownAnimation:e.markdown?.animated??ft,markdownCaret:e.markdown?.caret??"block",markdownPlugins:e.markdown?.plugins,messageActions:e.responseActions===!1?[]:e.responseActions??["copy","feedback","retry"],onFeedback:e.onFeedback,panelExpandable:e.appearance?.panel?.expandable??!0,panelExpanded:e.appearance?.panel?.expanded??!1,panelStyle:At(e.appearance?.panel),permissionDefaultMode:q(e.permissions?.defaultMode),permissionShowPicker:e.permissions?.showPicker===!0,preload:e.preload??!0,reopenOnRefresh:e.reopenOnRefresh??!1,showBetaBadge:e.showBetaBadge??!1,showLauncher:e.showLauncher??!0,startNewConversationOnOpen:e.startNewConversationOnOpen??!1,suggestedPromptShortcuts:e.startScreen?.promptShortcuts??!1,...e.appearance?.launcher?.icon?.trim()?{launcherIcon:e.appearance.launcher.icon.trim()}:{},...e.appearance?.launcher?.style?{launcherStyle:e.appearance.launcher.style}:{},...e.appearance?.launcher?.offset?{launcherOffset:{x:_e(e.appearance.launcher.offset.x),y:_e(e.appearance.launcher.offset.y)}}:{},imageSearch:(e.capabilities?.webSearch??!1)&&(e.capabilities?.imageSearch??!0),newsSearch:(e.capabilities?.webSearch??!1)&&(e.capabilities?.newsSearch??!1),suggestedPrompts:e.startScreen?.prompts?.map(o=>o.trim()).filter(Boolean).slice(0,5),themeStyle:{...me(e.appearance?.theme),...ue(e.appearance?.launcher?.background)},tools:e.tools??[],viewMode:e.appearance?.viewMode??"floating",webSearch:e.capabilities?.webSearch??!1}}export{Ne as a,yt as b,pe as c,Tt as d,V as e,fe as f,Ht as g,dt as h,Z as i,Re as j,ye as k,j as l,ie as m,_t as n,D as o,we as p,Ee as q,It as r,nt as s,Dt as t,se as u,ke as v,nn as w,Wt as x,Gt as y,Kt as z,Vt as A,zt as B,$t as C,ft as D,dn as E};
|
package/dist/contracts.d.ts
CHANGED
|
@@ -110,6 +110,8 @@ type AgentRemoteConfig = {
|
|
|
110
110
|
showPicker?: boolean;
|
|
111
111
|
};
|
|
112
112
|
responseActions?: ("copy" | "feedback" | "retry")[] | false;
|
|
113
|
+
/** Compact Beta chip in the open panel header. */
|
|
114
|
+
showBetaBadge?: boolean;
|
|
113
115
|
startScreen?: {
|
|
114
116
|
greeting?: string;
|
|
115
117
|
promptShortcuts?: boolean;
|
|
@@ -1181,7 +1183,7 @@ declare const clientToolsSchema: z.ZodArray<z.ZodObject<{
|
|
|
1181
1183
|
type ClientToolManifestEntry = z.infer<typeof clientToolManifestEntrySchema>;
|
|
1182
1184
|
|
|
1183
1185
|
declare const HEROUI_AGENT_PROTOCOL_VERSION: 6;
|
|
1184
|
-
declare const HEROUI_AGENT_SDK_VERSION: "0.2.0-beta.
|
|
1186
|
+
declare const HEROUI_AGENT_SDK_VERSION: "0.2.0-beta.15";
|
|
1185
1187
|
/** Production Agent API origin used when hosts omit `_api.baseUrl` / `apiBaseUrl`. */
|
|
1186
1188
|
declare const HEROUI_AGENT_API_BASE_URL: "https://api.heroui.pro";
|
|
1187
1189
|
|
package/dist/contracts.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var vo=5,wo=10485760,ht={"application/json":"json","application/pdf":"pdf","image/gif":"gif","image/jpeg":"jpg","image/png":"png","image/webp":"webp","text/csv":"csv","text/markdown":"md","text/plain":"txt","text/tab-separated-values":"tsv"},he=Object.freeze(Object.keys(ht)),_o=he.join(","),ft=new Set(he),Eo=new Set(["application/json","text/csv","text/markdown","text/plain","text/tab-separated-values"]);function fe(t){return ft.has(t.trim().toLowerCase())}var ye=1,u=Symbol("invalid");function D(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function v(t){if(t!==void 0)return typeof t=="string"?t:u}function _(t){if(t!==void 0)return typeof t=="boolean"?t:u}function Y(t){if(t!==void 0)return typeof t=="number"&&Number.isFinite(t)?t:u}function z(t){return n=>{if(n!==void 0)return typeof n=="string"&&t.includes(n)?n:u}}function Ce(t){if(t===void 0)return;if(typeof t=="string")return t;if(!D(t))return u;let n=v(t.dark),a=v(t.light);return n===u||a===u?u:{...n===void 0?{}:{dark:n},...a===void 0?{}:{light:a}}}function yt(t){if(t===void 0)return;if(!D(t))return u;let n={};for(let[a,i]of Object.entries(t)){if(typeof i!="string")return u;n[a]=i}return n}function Ct(t){if(t!==void 0)return!Array.isArray(t)||t.some(n=>typeof n!="string")?u:t}function x(t,n){if(t===void 0||!D(t))return u;let a={};for(let[i,l]of Object.entries(n)){let d=l(t[i]);if(d===u)return u;d!==void 0&&(a[i]=d)}return a}function U(t){return t===u?void 0:t}var bt=["accent","background","foreground","overlay","surface","surfaceSecondary","tooltip"];function xt(t){return x(t,{launcher:n=>n===void 0?void 0:x(n,{background:Ce,icon:v,position:z(["bottom-left","bottom-right"]),style:yt}),panel:n=>n===void 0?void 0:x(n,{expandable:_,expanded:_,initialHeight:a=>a===void 0||typeof a=="string"?a:Y(a),initialWidth:a=>a===void 0||typeof a=="string"?a:Y(a)}),theme:n=>n===void 0?void 0:x(n,{colorScheme:z(["dark","light","system"]),colors:a=>a===void 0?void 0:x(a,Object.fromEntries(bt.map(i=>[i,Ce]))),designTheme:z(["base","brutalism","glass","mouve"]),radius:z(["pill","round","sharp","soft"]),typography:a=>a===void 0?void 0:x(a,{baseSize:Y,fontFamily:v})}),viewMode:z(["floating","sidebar"])})}function At(t){return x(t,{attachments:n=>{if(n===void 0||n===!1)return n;if(!Array.isArray(n))return u;let a=n.filter(i=>typeof i=="string"&&fe(i));return a.length===n.length?a:u},defaultModel:v,dictation:_,disclaimer:n=>n===!1?!1:v(n),modelPicker:_,placeholder:v})}function kt(t){return x(t,{animated:n=>{if(n===void 0||n===!1)return n;if(!D(n))return u;let a=z(["blurIn","fadeIn","slideUp"])(n.animation);return a===u||a===void 0?u:{...n,animation:a}},caret:n=>n===!1?!1:z(["block","circle"])(n)})}function It(t){if(t===void 0||t===!1)return t;if(!Array.isArray(t))return u;let n=["copy","feedback","retry"],a=t.filter(i=>typeof i=="string"&&n.includes(i));return a.length===t.length?a:u}function Uo(t){if(!D(t)||t.version!==ye)return null;let n=t.revision;if(typeof n!="string"||!n)return null;let a=U(xt(t.appearance)),i=U(x(t.capabilities,{imageSearch:_,newsSearch:_,webSearch:_})),l=U(At(t.composer)),d=U(kt(t.markdown)),f=U(x(t.permissions,{defaultMode:z(["ask","auto","full"]),showPicker:_})),h=U(It(t.responseActions)),R=U(x(t.startScreen,{greeting:v,promptShortcuts:_,prompts:Ct})),b=U(x(t.webfont,{familyName:S=>typeof S=="string"&&S?S:u,fontFaceUrl:v,stylesheetUrl:v}));return{...a?{appearance:a}:{},...i?{capabilities:i}:{},...l?{composer:l}:{},...d?{markdown:d}:{},...f?{permissions:f}:{},...h===void 0?{}:{responseActions:h},...R?{startScreen:R}:{},...b?{webfont:b}:{},revision:n,version:ye}}var be={accordion:"display-information","action-group":"actions","area-chart":"data-visualization","bar-chart":"data-visualization",callout:"display-information","candlestick-chart":"data-visualization","channel-message":"display-information","code-block":"display-information","comparison-list":"data-visualization","composed-chart":"data-visualization","create-event":"display-information","data-table":"data-visualization",diagram:"display-information","donut-chart":"data-visualization","enable-notification":"display-information","event-session":"display-information","flight-tracker":"display-information",followup:"actions",form:"form-elements","funnel-chart":"data-visualization","gauge-chart":"data-visualization",heatmap:"data-visualization",image:"display-information","kpi-grid":"data-visualization","line-chart":"data-visualization",list:"display-information","list-block":"display-information",map:"display-information","meter-list":"data-visualization","metric-grid":"data-visualization","pie-chart":"data-visualization","player-card":"display-information",playlist:"display-information","product-card":"display-information","product-signals":"data-visualization","purchase-complete":"display-information","purchase-items":"display-information","radar-chart":"data-visualization","radial-chart":"data-visualization","record-card":"display-information","ride-status":"display-information","sankey-chart":"data-visualization","scatter-chart":"data-visualization",steps:"display-information","sunburst-chart":"data-visualization","switch-group":"form-elements",tabs:"display-information","tag-list":"display-information",text:"display-information","toggle-group":"form-elements","view-event":"display-information","weather-current":"display-information","weather-forecast":"display-information"};import{z as e}from"zod";function xe(t){return{maximum:t.max??(t.format?.style==="percent"?1:100),minimum:t.min??0}}var Tt=["activity","alert","briefcase","calendar","chart","check","clock","code","credit-card","database","device-desktop","device-mobile","document","dollar","flag","globe","heart","home","info","lightning","location","mail","percent","person","question","receipt","rocket","route","search","shopping-bag","speedometer","star","tag","target","users"],St=["clear","partly-cloudy","cloudy","fog","drizzle","rain","snow","thunderstorm","windy","unknown"],vt=e.string().trim().min(1).max(120),r=e.string().trim().min(1).max(320),G=e.string().trim().min(1).max(1e4),c=e.string().trim().min(1).max(80),m=e.string().trim().min(1).max(100),M=e.string().regex(/^\d{4}-\d{2}-\d{2}$/),W=e.string().regex(/^(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/),wt=e.union([e.string().max(500),e.number(),e.boolean(),e.null()]),O=e.record(e.string().max(80),wt),s=e.object({description:r.optional(),id:m,title:vt}),ee=e.enum(["outline","plain","surface","surface-secondary","surface-tertiary","widget"]).describe("Card hierarchy: surface for the primary standalone group; surface-secondary for supporting information; surface-tertiary for one featured or emphasized group; outline for equal peers and comparisons; plain for a structural section already separated by surrounding layout; widget for a compact interactive group with actions or controls."),_t=e.enum(["compact","details","media"]).describe("Record information layout: details for a full labeled fact set; compact for a brief summary or repeated peer cards; media for an image-led product, place, person, or event and only when an image is available."),C=e.discriminatedUnion("style",[e.object({compact:e.boolean().optional(),style:e.literal("number")}),e.object({maximumFractionDigits:e.number().int().min(0).max(4).optional(),style:e.literal("percent")}),e.object({compact:e.boolean().optional(),currency:e.string().regex(/^[A-Z]{3}$/),style:e.literal("currency")})]),w=e.enum(["accent","chart-1","chart-2","chart-3","chart-4","chart-5","danger","default","success","warning"]),Ie=e.record(e.string().trim().min(1).max(80),w).refine(t=>Object.keys(t).length<=50,"At most 50 category colors are allowed"),ne=e.object({color:w.optional(),dataKey:c,format:C.optional(),label:r}),Et=ne.extend({axis:e.enum(["left","right"]).optional(),stacked:e.boolean().optional(),type:e.enum(["area","bar","line"])}),Nt=e.object({id:m,label:r,maxItems:e.number().int().min(1).max(200).optional()}),H=s.extend({data:e.array(O).min(1).max(200),defaultRangeId:m.optional(),ranges:e.array(Nt).min(2).max(8).optional(),series:e.array(ne).min(1).max(5),showSummary:e.boolean().optional(),xKey:c}),q=s.extend({colors:Ie.optional(),data:e.array(O).min(1).max(50),format:C.optional(),labelKey:c,valueKey:c}),Rt=s.extend({colors:Ie.optional(),data:e.array(O).min(1).max(200),format:C.optional(),groupKey:c.optional(),kind:e.literal("scatter-chart"),labelKey:c.optional(),sizeKey:c.optional(),xKey:c,yKey:c}),Ut=s.extend({color:w.optional(),data:e.array(O).min(1).max(400),format:C.optional(),kind:e.literal("heatmap"),valueKey:c,xKey:c,yKey:c}),zt=H.extend({baseline:e.number().finite().optional(),kind:e.literal("line-chart"),mode:e.enum(["live","profit-loss","standard"]).optional(),negativeColor:w.optional(),positiveColor:w.optional(),windowSize:e.number().int().min(2).max(200).optional()}).superRefine((t,n)=>{(t.mode==="live"||t.mode==="profit-loss")&&t.series.length!==1&&n.addIssue({code:"custom",message:`${t.mode} line charts require exactly one series`,path:["series"]})}),Ot=s.extend({closeKey:c,data:e.array(O).min(1).max(200),downColor:w.optional(),format:C.optional(),highKey:c,kind:e.literal("candlestick-chart"),lowKey:c,openKey:c,upColor:w.optional(),xKey:c}).superRefine((t,n)=>{for(let[a,i]of t.data.entries()){let l=i[t.openKey],d=i[t.highKey],f=i[t.lowKey],h=i[t.closeKey];if([l,d,f,h].some(ge=>typeof ge!="number"||!Number.isFinite(ge))){n.addIssue({code:"custom",message:"Every candlestick row needs finite open, high, low, and close values",path:["data",a]});continue}let b=l,S=d,K=f,ue=h;(K>Math.min(b,ue)||S<Math.max(b,ue)||K>S)&&n.addIssue({code:"custom",message:"Candlestick low/high values must contain the open and close values",path:["data",a]})}}),Lt=q.extend({data:e.array(O).min(2).max(20),kind:e.literal("funnel-chart"),orientation:e.enum(["horizontal","vertical"]).optional(),showPercentages:e.boolean().optional()}).superRefine((t,n)=>{let a=t.data.map((i,l)=>{let d=i[t.valueKey];return typeof d!="number"||!Number.isFinite(d)||d<0?(n.addIssue({code:"custom",message:"Every funnel stage needs a finite, non-negative value",path:["data",l,t.valueKey]}),0):d});a.some(i=>i>0)||n.addIssue({code:"custom",message:"A funnel needs at least one stage above zero",path:["data"]}),(a[0]??0)<=0&&n.addIssue({code:"custom",message:"A funnel's first stage must be above zero",path:["data",0,t.valueKey]});for(let i=1;i<a.length;i+=1)(a[i]??0)>(a[i-1]??0)&&n.addIssue({code:"custom",message:"Funnel stages must not increase",path:["data",i,t.valueKey]})}),Gt=s.extend({color:w.optional(),format:C.optional(),kind:e.literal("gauge-chart"),label:r,max:e.number().finite().optional(),min:e.number().finite().optional(),notches:e.number().int().min(6).max(60).optional(),orientation:e.enum(["arc","linear"]).optional(),value:e.number().finite()}).superRefine((t,n)=>{let{maximum:a,minimum:i}=xe(t);a<=i?n.addIssue({code:"custom",message:"Gauge max must be greater than min",path:["max"]}):(t.value<i||t.value>a)&&n.addIssue({code:"custom",message:"Gauge value must be within its min/max range",path:["value"]})}),Te=e.lazy(()=>e.object({children:e.array(Te).min(1).max(12).optional(),color:w.optional(),id:m,label:r,value:e.number().finite().positive().optional()}).superRefine((t,n)=>{t.children?.length&&t.value!==void 0&&n.addIssue({code:"custom",message:"Sunburst branch values are derived from their children",path:["value"]}),!t.children?.length&&t.value===void 0&&n.addIssue({code:"custom",message:"Every sunburst leaf needs a positive value",path:["value"]})})),Mt=s.extend({data:Te,format:C.optional(),kind:e.literal("sunburst-chart")}).superRefine((t,n)=>{let a=new Set,i=0,l=0,d=(f,h)=>{i+=1,l=Math.max(l,h),a.has(f.id)&&n.addIssue({code:"custom",message:`Duplicate sunburst node id "${f.id}"`}),a.add(f.id),f.children?.forEach(R=>d(R,h+1))};t.data.children?.length||n.addIssue({code:"custom",message:"A sunburst root needs at least one child",path:["data","children"]}),d(t.data,0),i>60&&n.addIssue({code:"custom",message:"Sunburst charts allow at most 60 nodes"}),l>4&&n.addIssue({code:"custom",message:"Sunburst charts allow at most four nested levels"})}),Z=e.object({label:r,value:c}),jt=e.object({end:M,start:M}).refine(t=>t.start<=t.end,"The start date must not be after the end date"),A={description:r.optional(),label:r,name:c,required:e.boolean().optional()},Bt=e.discriminatedUnion("kind",[e.object({...A,defaultValue:e.string().max(500).optional(),inputType:e.enum(["email","number","password","search","tel","text","url"]).optional(),kind:e.literal("input"),placeholder:e.string().max(160).optional()}),e.object({...A,defaultValue:e.string().max(2e3).optional(),kind:e.literal("textarea"),placeholder:e.string().max(160).optional(),rows:e.number().int().min(2).max(12).optional()}),e.object({...A,defaultValue:c.optional(),kind:e.literal("select"),options:e.array(Z).min(1).max(30),placeholder:e.string().max(160).optional()}),e.object({...A,defaultValue:c.optional(),kind:e.literal("radio-group"),options:e.array(Z).min(1).max(12),placeholder:e.string().max(160).optional()}),e.object({...A,defaultValue:e.array(c).max(20).optional(),kind:e.literal("checkbox-group"),options:e.array(Z).min(1).max(20)}),e.object({...A,defaultValue:e.array(c).max(50).optional(),kind:e.literal("combobox"),options:e.array(Z.extend({description:e.string().trim().min(1).max(120).optional()})).min(1).max(200).describe("Prefer this over select once there are more options than someone would scan \u2014 it filters as they type. Values must be unique."),placeholder:e.string().max(160).optional(),selectionMode:e.enum(["multiple","single"]).optional()}).superRefine((t,n)=>{let a=new Set(t.options.map(i=>i.value));a.size!==t.options.length&&n.addIssue({code:"custom",message:"Combobox option values must be unique",path:["options"]}),(t.selectionMode??"single")==="single"&&(t.defaultValue?.length??0)>1&&n.addIssue({code:"custom",message:"A single-selection combobox takes at most one default value",path:["defaultValue"]}),t.defaultValue?.some(i=>!a.has(i))&&n.addIssue({code:"custom",message:"Every combobox default value must be one of the options",path:["defaultValue"]})}),e.object({...A,defaultValue:e.number().optional(),kind:e.literal("slider"),max:e.number(),min:e.number(),step:e.number().positive().optional()}),e.object({...A,defaultValue:e.number().optional(),format:C.optional(),kind:e.literal("number"),max:e.number().optional(),min:e.number().optional(),placeholder:e.string().max(160).optional(),step:e.number().positive().optional()}),e.object({...A,defaultValue:e.boolean().optional(),kind:e.literal("switch")}),e.object({...A,defaultValue:M.optional(),kind:e.literal("date-picker"),max:M.optional(),min:M.optional()}),e.object({...A,defaultValue:jt.optional(),kind:e.literal("date-range-picker"),max:M.optional(),min:M.optional()}),e.object({...A,defaultValue:W.optional(),hourCycle:e.union([e.literal(12),e.literal(24)]).optional(),kind:e.literal("time-field"),max:W.optional(),min:W.optional()})]),oe=e.enum(["danger","outline","primary","secondary","tertiary"]),N=e.enum(Tt),Se=e.object({arguments:e.record(e.string().max(80),e.unknown()).refine(t=>JSON.stringify(t).length<=4096,"Tool call arguments must serialize to at most 4KB of JSON"),name:e.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/)}),y=e.object({id:m,label:r,prompt:e.string().trim().min(1).max(2e3).optional(),toolCall:Se.optional(),variant:oe.optional()}),ve=e.object({latitude:e.number().finite().min(-85.051129).max(85.051129),longitude:e.number().finite().min(-180).max(180)}),te=e.string().trim().min(1).max(2e3).refine(t=>{try{let n=new URL(t);return["http:","https:"].includes(n.protocol)&&!n.username&&!n.password}catch{return!1}},{message:"URL must use HTTP or HTTPS and cannot include credentials"}),Dt=e.string().trim().min(1).max(2e3).refine(t=>{try{let n=new URL(t);return["http:","https:","mailto:","tel:"].includes(n.protocol)&&!n.username&&!n.password}catch{return!1}},{message:"Link must use HTTP, HTTPS, mailto, or tel and cannot include credentials"}),F={id:m,label:r,variant:oe.optional()},Pt=e.string().trim().min(5).max(2e3).refine(t=>/^tel:\+?[0-9().\-\s]+$/.test(t)&&/\d/.test(t.slice(4)),"Phone links must use the tel: scheme and contain a phone number"),Vt=e.discriminatedUnion("kind",[e.object({...F,href:Pt,kind:e.literal("call")}),e.object({...F,href:te,kind:e.literal("directions")}),e.object({...F,href:Dt,kind:e.literal("other")}),e.object({...F,href:te,kind:e.literal("website")})]),Kt=ve.extend({actions:e.array(Vt).max(4).optional(),address:r.optional(),category:e.string().trim().min(1).max(100).optional(),id:m,images:e.array(e.object({alt:r,src:te})).max(4).optional().describe("Prefer one representative image per location when a trusted tool or web image search returns one. The first image becomes the result-card thumbnail; initials are the fallback."),notes:e.string().trim().min(1).max(2e3).optional(),rating:e.number().finite().min(0).max(5).optional(),relevance:e.number().finite().min(0).max(1).optional(),reviewCount:e.number().int().nonnegative().max(1e9).optional(),title:r}),P=e.string().trim().min(1).max(2e3).refine(t=>{if(t.startsWith("/"))return!t.startsWith("//");try{let n=new URL(t);return["http:","https:"].includes(n.protocol)&&!n.username&&!n.password}catch{return!1}},{message:"Image sources must be HTTP(S) URLs or root-relative paths"}),I=e.object({alt:r,src:P.refine(t=>!t.split(/[?#]/,1)[0]?.toLowerCase().endsWith(".svg"),"Response-composition images must be raster images")}),ae=e.string().regex(/^[A-Z]{3}$/),Zt=e.object({amount:e.number().finite().nonnegative().max(1e9),currency:ae}),X=e.enum(St),Ae=e.enum(["celsius","fahrenheit"]),ke=e.object({label:r,status:r.optional(),time:e.string().trim().min(1).max(80)}),j=e.enum(["accent","danger","default","muted","success","warning"]),Ft=e.object({actions:e.array(y).max(3).optional(),badge:e.object({label:r,tone:j.optional()}).optional(),description:r.optional(),id:m,image:e.object({alt:r,src:P}),meta:e.string().trim().min(1).max(160).optional(),name:r,price:e.object({amount:e.number().finite().nonnegative().max(1e9),currency:ae.optional()}),rating:e.object({count:e.number().int().nonnegative().max(1e9).optional(),value:e.number().finite().min(0).max(5)}).optional()}),Ht=e.enum(["accent","danger","default","success","warning"]),qt=e.object({description:r.optional(),format:C.optional(),id:m,label:r,max:e.number().optional(),min:e.number().optional(),tone:Ht.optional(),value:e.number()}).superRefine((t,n)=>{let a=t.min??0,i=t.max??(t.format?.style==="percent"?1:100);i<=a&&n.addIssue({code:"custom",message:"Meter max must be greater than min"}),(t.value<a||t.value>i)&&n.addIssue({code:"custom",message:"Meter value must be within its min/max range"})}),o={accordion:s.extend({kind:e.literal("accordion"),sections:e.array(e.object({content:G,defaultOpen:e.boolean().optional(),id:m,title:r})).min(1).max(12)}),actions:s.extend({actions:e.array(y).min(1).max(8),kind:e.literal("action-group"),orientation:e.enum(["horizontal","vertical"]).optional()}),area:H.extend({kind:e.literal("area-chart"),stacked:e.boolean().optional()}),bar:H.extend({kind:e.literal("bar-chart"),layout:e.enum(["horizontal","vertical"]).optional(),stacked:e.boolean().optional()}),callout:s.extend({content:G,icon:N.optional(),kind:e.literal("callout"),tone:e.enum(["accent","danger","neutral","success","warning"]).optional()}),candlestick:Ot,channelMessage:s.extend({attachments:e.array(e.object({id:m,image:I.optional(),name:r})).max(8).optional(),author:e.object({image:I.optional(),name:r}),channel:r,content:G,kind:e.literal("channel-message"),timestamp:e.string().trim().min(1).max(80)}),code:s.extend({code:e.string().min(1).max(2e4),kind:e.literal("code-block"),language:e.string().trim().max(40).optional()}),comparison:s.extend({items:e.array(e.object({change:e.number().optional(),format:C.optional(),label:r,note:e.string().trim().max(180).optional(),value:e.number()})).min(1).max(12),kind:e.literal("comparison-list")}),composed:H.extend({kind:e.literal("composed-chart"),series:e.array(Et).min(2).max(5)}),createEvent:s.extend({actions:e.array(y).max(2).optional(),date:e.object({day:e.number().int().min(1).max(31),weekday:e.string().trim().min(1).max(20)}),events:e.array(e.object({id:m,status:e.enum(["existing","proposed"]).optional(),time:e.string().trim().min(1).max(80),title:r,tone:j.optional()})).min(1).max(12),kind:e.literal("create-event")}),diagram:s.extend({chart:e.string().trim().min(1).max(4e3).describe('Mermaid source. Pick the diagram type from the relationship: "flowchart LR" for a process or decision path, "sequenceDiagram" for an exchange between parties over time, "erDiagram" for how records relate, "stateDiagram-v2" for the states something moves between. Example: "flowchart LR\\n A[Order placed] --> B{In stock?}\\n B -- yes --> C[Ship]\\n B -- no --> D[Backorder]". Never include HTML, script tags, or click directives.'),kind:e.literal("diagram")}).superRefine((t,n)=>{/<\s*script|javascript:|^\s*click\s+\S/im.test(t.chart)&&n.addIssue({code:"custom",message:"Diagram source cannot contain HTML, script URLs, or click directives",path:["chart"]})}),donut:q.extend({kind:e.literal("donut-chart")}),enableNotification:s.extend({actions:e.tuple([y,y]),kind:e.literal("enable-notification")}),eventSession:s.extend({action:y.optional(),eyebrow:e.string().trim().min(1).max(100).optional(),kind:e.literal("event-session"),location:r,speakers:e.array(e.object({image:I.optional(),name:r,role:r})).max(8),time:e.string().trim().min(1).max(80)}),flightTracker:s.extend({airline:e.object({logo:I.optional(),name:r}),date:e.string().trim().min(1).max(80),destination:ke,flightNumber:e.string().trim().min(1).max(40),kind:e.literal("flight-tracker"),origin:ke,progress:e.number().finite().min(0).max(100).optional()}),followup:s.extend({kind:e.literal("followup"),prompts:e.array(e.object({id:m,label:r,prompt:G})).min(1).max(8)}),form:s.extend({actions:e.array(y).min(1).max(4),fields:e.array(Bt).min(1).max(20),kind:e.literal("form")}),funnel:Lt,gauge:Gt,heatmap:Ut,image:s.extend({images:e.array(e.object({alt:r,aspectRatio:e.enum(["landscape","portrait","square","wide"]).optional(),caption:r.optional(),src:P})).min(1).max(6),kind:e.literal("image"),variant:e.enum(["grid","horizontal"]).optional().describe("Use horizontal for a swipeable gallery in narrow chat interfaces.")}),kpiGrid:s.extend({kind:e.literal("kpi-grid"),metrics:e.array(e.object({change:e.number().optional(),color:w.optional(),format:C.optional(),icon:N.optional(),label:r,trend:e.array(e.number().finite()).min(2).max(60).describe("The values behind this KPI, oldest to newest, drawn as a sparkline. The last point should agree with value."),value:e.number()})).min(1).max(4)}),line:zt,list:s.extend({items:e.array(e.object({checked:e.boolean().optional(),children:e.array(r).max(8).optional(),id:m,text:r})).min(1).max(30),kind:e.literal("list"),style:e.enum(["bulleted","checklist","numbered"]).optional()}),listBlock:s.extend({items:e.array(e.object({description:r.optional(),icon:N.optional(),id:m,imageAlt:r.optional(),imageUrl:P.optional(),meta:e.string().trim().max(100).optional(),rating:e.number().min(0).max(5).optional(),title:r})).min(1).max(20),kind:e.literal("list-block")}),map:s.extend({initialLocationId:m.optional(),kind:e.literal("map"),locations:e.array(Kt).min(1).max(12),viewport:e.object({center:ve,zoom:e.number().int().min(1).max(18)}).optional()}).superRefine((t,n)=>{let a=new Set;for(let[i,l]of t.locations.entries()){a.has(l.id)&&n.addIssue({code:"custom",message:`Duplicate map location id "${l.id}"`,path:["locations",i,"id"]}),a.add(l.id);let d=new Set;for(let[f,h]of(l.actions??[]).entries())d.has(h.id)&&n.addIssue({code:"custom",message:`Duplicate action id "${h.id}" for map location "${l.id}"`,path:["locations",i,"actions",f,"id"]}),d.add(h.id)}t.initialLocationId&&!a.has(t.initialLocationId)&&n.addIssue({code:"custom",message:"The initial map location must reference one of the locations",path:["initialLocationId"]})}).describe("A ranked, map-synchronized set of places or professionals. Coordinates and listing facts must come from tools or user data; never invent them."),meterList:s.extend({items:e.array(qt).min(1).max(8),kind:e.literal("meter-list")}),metricGrid:s.extend({kind:e.literal("metric-grid"),metrics:e.array(e.object({change:e.number().optional(),format:C.optional(),icon:N.optional(),label:r,value:e.number()})).min(1).max(4)}),pie:q.extend({kind:e.literal("pie-chart")}),playerCard:s.extend({backgroundImage:I.optional(),jerseyNumber:e.string().trim().min(1).max(20).optional(),kind:e.literal("player-card"),playerName:r,stats:e.array(e.object({label:e.string().trim().min(1).max(40),value:e.union([e.string().trim().min(1).max(80),e.number().finite()])})).min(1).max(8)}),playlist:s.extend({actions:e.array(y).max(2).optional(),cover:I.optional(),kind:e.literal("playlist"),tracks:e.array(e.object({action:y.optional(),artist:r,id:m,image:I.optional(),title:r})).min(1).max(20)}),productCard:s.extend({actions:e.array(y).max(3).optional(),kind:e.literal("product-card"),products:e.array(Ft).min(1).max(8),variant:ee.optional()}).superRefine((t,n)=>{let a=new Set;for(let[i,l]of t.products.entries())a.has(l.id)&&n.addIssue({code:"custom",message:`Duplicate product id "${l.id}"`,path:["products",i,"id"]}),a.add(l.id)}).describe("A commerce product presentation: one product renders an image-led spotlight, several render a store-style grid. Product facts (id, name, image, price, rating, availability) must come from tools or user data; never invent them."),purchaseComplete:s.extend({action:y.optional(),details:e.array(e.object({label:r,value:r})).max(8),kind:e.literal("purchase-complete"),paid:Zt.optional(),product:e.object({description:r.optional(),image:I.optional(),name:r})}),purchaseItems:s.extend({actions:e.array(y).max(3).optional(),currency:ae,items:e.array(e.object({description:r.optional(),id:m,image:I.optional(),name:r,price:e.number().finite().nonnegative().max(1e9).optional(),quantity:e.number().int().positive().max(1e4).optional()})).min(1).max(20),kind:e.literal("purchase-items"),totals:e.array(e.object({amount:e.number().finite().nonnegative().max(1e9),emphasis:e.boolean().optional(),label:r})).min(1).max(8)}),radar:s.extend({angleKey:c,data:e.array(O).min(3).max(50),kind:e.literal("radar-chart"),series:e.array(ne).min(1).max(5)}),radial:q.extend({endAngle:e.number().min(-360).max(360).optional(),kind:e.literal("radial-chart"),maxValue:e.number().positive().optional(),startAngle:e.number().min(-360).max(360).optional()}),recordCard:s.extend({actions:e.array(y).max(4).optional(),eyebrow:e.string().trim().max(100).optional(),fields:e.array(e.object({icon:N.optional(),label:r,tone:j.optional(),value:e.string().trim().min(1).max(500)})).max(12),image:e.object({alt:r,src:P}).optional(),kind:e.literal("record-card"),layout:_t.optional(),status:e.object({label:r,tone:j.optional()}).optional(),variant:ee.optional()}).superRefine((t,n)=>{t.layout==="media"&&!t.image&&n.addIssue({code:"custom",message:"The media record layout requires an image",path:["image"]}),t.layout==="compact"&&t.fields.length>4&&n.addIssue({code:"custom",message:"The compact record layout supports at most four fields",path:["fields"]})}),rideStatus:s.extend({driver:e.object({image:I.optional(),name:r}),eta:e.string().trim().min(1).max(80),kind:e.literal("ride-status"),pickup:r}),sankey:s.extend({format:C.optional(),kind:e.literal("sankey-chart"),links:e.array(e.object({source:m,target:m,value:e.number().positive()})).min(1).max(100),nodes:e.array(e.object({id:m,label:r})).min(2).max(40)}),scatter:Rt,steps:s.extend({kind:e.literal("steps"),steps:e.array(e.object({content:r.optional(),icon:N.optional(),id:m,image:I.optional().describe("A representative raster image for this step. Prefer this over icon for place itineraries when a trusted image URL is available."),meta:e.string().trim().max(100).optional(),progress:e.number().min(0).max(100).optional(),status:e.enum(["blocked","cancelled","completed","failed","in-progress","pending","complete","current","upcoming"]).optional(),timestamp:e.string().trim().max(100).optional(),title:r})).min(1).max(12),variant:e.enum(["steps","timeline"]).optional()}),sunburst:Mt,switches:s.extend({items:e.array(e.object({defaultSelected:e.boolean().optional(),description:r.optional(),id:m,label:r})).min(1).max(20),kind:e.literal("switch-group")}),table:s.extend({columns:e.array(e.object({format:C.optional(),key:c,label:r})).min(1).max(12),filterable:e.boolean().optional(),kind:e.literal("data-table"),rows:e.array(O).max(200),variant:e.enum(["primary","secondary"]).optional()}),tabs:s.extend({defaultValue:m.optional(),kind:e.literal("tabs"),tabs:e.array(e.union([e.object({children:e.never().optional(),content:G,id:m,label:r}),e.object({children:e.array(e.lazy(()=>le)).min(1).max(12),content:e.never().optional(),id:m,label:r})])).min(1).max(10),variant:e.enum(["primary","secondary"]).optional()}),tags:s.extend({kind:e.literal("tag-list"),tags:e.array(r).min(1).max(30)}),text:s.extend({content:G,kind:e.literal("text"),variant:e.enum(["card","clear"]).optional()}),toggles:s.extend({defaultValue:e.array(m).max(12).optional(),items:e.array(e.object({id:m,label:r})).min(1).max(12),kind:e.literal("toggle-group"),selectionMode:e.enum(["multiple","single"]).optional()}),viewEvent:s.extend({date:e.string().trim().min(1).max(80),kind:e.literal("view-event"),time:e.string().trim().min(1).max(80),tone:j.optional()}),weatherCurrent:s.extend({condition:X,details:e.array(e.object({label:r,value:r})).max(6).optional(),kind:e.literal("weather-current"),location:r,temperature:e.number().finite().min(-150).max(150),unit:Ae}),weatherForecast:s.extend({condition:X,forecast:e.array(e.object({condition:X,label:e.string().trim().min(1).max(40),temperature:e.number().finite().min(-150).max(150)})).min(2).max(10),high:e.number().finite().min(-150).max(150),kind:e.literal("weather-forecast"),location:r,low:e.number().finite().min(-150).max(150),unit:Ae})},$t=o.metricGrid,Yt=o.kpiGrid,Wt=o.line,Xt=o.area,Jt=o.bar,Qt=o.composed,en=o.pie,tn=o.donut,nn=o.radar,on=o.radial,an=o.sankey,rn=o.scatter,sn=o.heatmap,ln=o.candlestick,pn=o.funnel,mn=o.gauge,cn=o.sunburst,dn=o.table,un=o.comparison,gn=o.meterList,hn=o.form,fn=o.text,yn=o.callout,Cn=o.image,bn=o.map,xn=o.tags,An=o.list,kn=o.listBlock,In=o.accordion,Tn=o.steps,Sn=o.code,vn=o.diagram,jo=o.tabs.superRefine(st),wn=o.actions,_n=o.followup,En=o.switches,Nn=o.toggles,Rn=o.recordCard,Un=o.productCard,zn=o.flightTracker,On=o.createEvent,Ln=o.playlist,Gn=o.rideStatus,Mn=o.purchaseItems,jn=o.channelMessage,Bn=o.purchaseComplete,Dn=o.playerCard,Pn=o.viewEvent,Vn=o.eventSession,Kn=o.enableNotification,Zn=o.weatherForecast,Fn=o.weatherCurrent,Hn=e.discriminatedUnion("kind",[o.metricGrid,o.kpiGrid,o.line,o.area,o.bar,o.composed,o.pie,o.donut,o.radar,o.radial,o.sankey,o.scatter,o.heatmap,o.candlestick,o.funnel,o.gauge,o.sunburst,o.table,o.comparison,o.meterList]),we=s.extend({defaultValue:m.optional(),kind:e.literal("product-signals"),tabs:e.array(e.object({component:Hn,id:m,label:r})).min(2).max(4)}),qn=we.superRefine((t,n)=>{let a=new Set;for(let[i,l]of t.tabs.entries())a.has(l.id)&&n.addIssue({code:"custom",message:`Duplicate product signal tab id "${l.id}"`,path:["tabs",i,"id"]}),a.add(l.id);t.defaultValue&&!a.has(t.defaultValue)&&n.addIssue({code:"custom",message:"The default product signal must reference one of the tabs",path:["defaultValue"]})}),$n=e.discriminatedUnion("kind",[o.metricGrid,o.kpiGrid,o.line,o.area,o.bar,o.composed,o.pie,o.donut,o.radar,o.radial,o.sankey,o.scatter,o.heatmap,o.candlestick,o.funnel,o.gauge,o.sunburst,o.table,o.comparison,o.meterList,o.form,o.text,o.callout,o.image,o.map,o.tags,o.list,o.listBlock,o.accordion,o.steps,o.code,o.diagram,o.tabs,o.actions,o.followup,o.switches,o.toggles,o.recordCard,o.productCard,o.flightTracker,o.createEvent,o.playlist,o.rideStatus,o.purchaseItems,o.channelMessage,o.purchaseComplete,o.playerCard,o.viewEvent,o.eventSession,o.enableNotification,o.weatherForecast,o.weatherCurrent]);function Yn(t){if(!t)return;let n=new Set;for(let a of t){if(n.has(a.id))return a.id;n.add(a.id)}}var re=e.union([$n,qn]).superRefine((t,n)=>{let a=[];switch(t.kind){case"channel-message":a.push({items:t.attachments,path:"attachments"});break;case"create-event":a.push({items:t.events,path:"events"}),a.push({items:t.actions,path:"actions"});break;case"enable-notification":a.push({items:t.actions,path:"actions"});break;case"playlist":a.push({items:t.tracks,path:"tracks"}),a.push({items:t.actions,path:"actions"});break;case"purchase-items":a.push({items:t.items,path:"items"}),a.push({items:t.actions,path:"actions"});break;case"tabs":{st(t,n);break}default:break}for(let i of a){let l=Yn(i.items);l&&n.addIssue({code:"custom",message:`Duplicate ${i.path} id "${l}"`,path:[i.path]})}}),_e=s.extend({children:e.array(re).min(1).max(4),kind:e.literal("dashboard"),layout:e.enum(["chart-table","grid","metrics-chart","stack"])}),Wn=_e,Ee=e.union([re,Wn]),Bo=e.object({component:Ee}),J=6,B=48,Ne=new Set(["card","col","grid","item-card","item-card-group","row"]),Re=new Set(["divider","spacer"]),Ue=new Set(["badge","button","heading","icon","progress","rating"]),ze=Ne,Oe=Re,Le=Ue;function Ge(t){return Ne.has(t.kind)}function Me(t){return t.kind==="item-card"?[...t.left??[],...t.middle,...t.right??[]]:t.children}function Do(t){return Re.has(t.kind)}function Po(t){return Ue.has(t.kind)}var T=e.object({id:m}),ie=e.enum(["lg","md","none","sm"]),je=e.enum(["center","end","start","stretch"]),Be=e.enum(["between","center","end","start"]),$=e.array(e.lazy(()=>le)).min(1).max(B),De=T.extend({kind:e.literal("spacer"),size:e.enum(["auto","lg","md","sm"]).optional()}),Pe=T.extend({kind:e.literal("divider")}),Ve=T.extend({icon:N.optional(),kind:e.literal("heading"),level:e.union([e.literal(1),e.literal(2),e.literal(3),e.literal(4)]).optional(),text:r}),Ke=T.extend({icon:N.optional(),kind:e.literal("button"),label:r,prompt:e.string().trim().min(1).max(2e3).optional(),toolCall:Se.optional(),variant:oe.optional()}).refine(t=>!!(t.prompt??t.toolCall),{message:"Buttons need a prompt or a toolCall to do something when pressed"}),Ze=T.extend({kind:e.literal("badge"),label:r,tone:j.optional(),variant:e.enum(["soft","solid"]).optional()}),Fe=T.extend({kind:e.literal("icon"),name:N,size:e.enum(["lg","md","sm"]).optional(),tone:j.optional()}),He=T.extend({count:e.number().int().nonnegative().max(1e9).optional(),kind:e.literal("rating"),value:e.number().finite().min(0).max(5)}),qe=T.extend({kind:e.literal("progress"),label:r.optional(),value:e.number().finite().min(0).max(100)}),$e=e.enum(["default","outline","secondary","tertiary","transparent"]),Q=e.lazy(()=>le),Ye=s.extend({action:y.optional().describe("Makes the whole row pressable. Omit when a slot contains its own button or other interactive control."),isDisabled:e.boolean().optional(),isSelected:e.boolean().optional(),kind:e.literal("item-card"),left:e.array(Q).min(1).max(4).optional().describe("Leading slot. Prefer one icon node or a compact visual."),middle:e.array(Q).min(1).max(8).describe("Primary flexible slot. Prefer a level-4 heading followed by a clear text node for a title and description."),right:e.array(Q).min(1).max(4).optional().describe("Trailing slot. Prefer a badge, short value, icon, or button."),variant:$e.optional()}),Xn=new Set(["accordion","action-group","button","followup","form","map","switch-group","tabs","toggle-group"]);function We(t){for(let n of t)if(Xn.has(n.kind)||Ge(n)&&We(Me(n)))return!0;return!1}var se=Ye.superRefine((t,n)=>{t.action&&We([...t.left??[],...t.middle,...t.right??[]])&&n.addIssue({code:"custom",message:"A pressable item-card cannot contain buttons or other interactive descendants. Remove action from the card or move the nested control outside it."})}),Xe=s.extend({children:e.array(se).min(1).max(12),columns:e.union([e.literal(2),e.literal(3)]).optional(),kind:e.literal("item-card-group"),layout:e.enum(["grid","list"]).optional(),showHeader:e.boolean().optional(),variant:$e.optional()}),Je=Xe.superRefine((t,n)=>{t.columns&&t.layout!=="grid"&&n.addIssue({code:"custom",message:"Item-card group columns only apply when layout is grid.",path:["columns"]})}),Qe=T.extend({align:je.optional(),children:$,gap:ie.optional(),justify:Be.optional(),kind:e.literal("row")}),et=T.extend({align:je.optional(),children:$,gap:ie.optional(),justify:Be.optional(),kind:e.literal("col")}),tt=T.extend({children:$,columns:e.union([e.literal(1),e.literal(2),e.literal(3),e.literal(4)]),gap:ie.optional(),kind:e.literal("grid")}),nt=s.extend({children:$,kind:e.literal("card"),variant:ee.optional()}),ot=Qe,at=et,rt=tt,it=nt,le=e.union([re,De,Pe,Ve,Ke,Ze,Fe,He,qe,ot,at,rt,it,se,Je]);function Jn(t,n){to(t,n)}function Qn(t,n){let a=t.tabs.flatMap(i=>i.children??[]);a.length!==0&<(a,n,t.id,2,1)}function st(t,n){let a=new Set;for(let[i,l]of t.tabs.entries())a.has(l.id)&&n.addIssue({code:"custom",message:`Duplicate tab id "${l.id}"`,path:["tabs",i,"id"]}),a.add(l.id);t.defaultValue&&!a.has(t.defaultValue)&&n.addIssue({code:"custom",message:"The default tab must reference one of the tabs",path:["defaultValue"]}),Qn(t,n)}function eo(t){return Ge(t)?Me(t):t.kind==="tabs"?t.tabs.flatMap(n=>n.children??[]):[]}function lt(t,n,a,i=1,l=0){let d=new Set,f=l,h=l>0?i-1:0;a&&d.add(a);let R=(b,S)=>{if(f+=1,h=Math.max(h,S),d.has(b.id)&&n.addIssue({code:"custom",message:`Duplicate component id "${b.id}" in the composed UI tree. Every node needs a unique id.`}),d.add(b.id),!(S>J))for(let K of eo(b))R(K,S+1)};for(let b of t)R(b,i);h>J&&n.addIssue({code:"custom",message:`Composed UI trees can nest at most ${J} levels deep.`}),f>B&&n.addIssue({code:"custom",message:`Composed UI trees can contain at most ${B} components.`})}function to(t,n){lt([t],n)}var pt=e.union([ot,at,rt,it,se,Je]).superRefine(Jn),Vo=e.union([Ee,pt]),Ko=e.object({component:pt}),E=t=>e.array(e.unknown()).min(1).max(t).describe("Child nodes. Each is any catalog component; look its kind up separately."),Zo={accordion:In,"action-group":wn,"area-chart":Xt,badge:Ze,"bar-chart":Jt,button:Ke,callout:yn,"candlestick-chart":ln,card:nt.extend({children:E(B)}),"channel-message":jn,"code-block":Sn,col:et.extend({children:E(B)}),"comparison-list":un,"composed-chart":Qt,"create-event":On,dashboard:_e.extend({children:E(4)}),"data-table":dn,diagram:vn,divider:Pe,"donut-chart":tn,"enable-notification":Kn,"event-session":Vn,"flight-tracker":zn,followup:_n,form:hn,"funnel-chart":pn,"gauge-chart":mn,grid:tt.extend({children:E(B)}),heading:Ve,heatmap:sn,icon:Fe,image:Cn,"item-card":Ye.extend({left:E(4).optional().describe("Leading slot nodes."),middle:E(8).describe("Primary flexible slot nodes."),right:E(4).optional().describe("Trailing slot nodes.")}),"item-card-group":Xe.extend({children:e.array(e.unknown()).min(1).max(12).describe("One to twelve item-card children. Look up item-card for each child's schema.")}),"kpi-grid":Yt,"line-chart":Wt,list:An,"list-block":kn,map:bn,"meter-list":gn,"metric-grid":$t,"pie-chart":en,"player-card":Dn,playlist:Ln,"product-card":Un,"product-signals":we.extend({tabs:e.array(e.object({component:e.unknown().describe("One analytical component: metric-grid, kpi-grid, any chart, data-table, comparison-list, or meter-list. Look its kind up separately."),id:m,label:r})).min(2).max(4)}),progress:qe,"purchase-complete":Bn,"purchase-items":Mn,"radar-chart":nn,"radial-chart":on,rating:He,"record-card":Rn,"ride-status":Gn,row:Qe.extend({children:E(B)}),"sankey-chart":an,"scatter-chart":rn,spacer:De,steps:Tn,"sunburst-chart":cn,"switch-group":En,tabs:s.extend({defaultValue:m.optional(),kind:e.literal("tabs"),tabs:e.array(e.union([e.object({content:G,id:m,label:r}),e.object({children:E(12).describe("Rich panel nodes rendered as one vertical stack. Look up every child kind separately."),id:m,label:r})])).min(1).max(10),variant:e.enum(["primary","secondary"]).optional()}),"tag-list":xn,text:fn,"toggle-group":Nn,"view-event":Pn,"weather-current":Fn,"weather-forecast":Zn};var ct={accordion:"collapsible sections of longer prose","action-group":"buttons that send prompts or call client tools","area-chart":"one continuous time series with a filled trend",badge:"a small toned status label","bar-chart":"ranked or categorical comparison, horizontal layout for rankings",button:"one action with a prompt or client-tool call",callout:"one short toned notice: info, success, warning, or danger","candlestick-chart":"open-high-low-close price movement over ordered periods",card:"titled surface grouping related children","channel-message":"a quoted workspace message with author and attachments","code-block":"a syntax-highlighted snippet",col:"stacks children vertically","comparison-list":"labeled values with change deltas, no axes","composed-chart":"two to five mixed area/bar/line series, optional dual axis","create-event":"a proposed calendar slot beside surrounding events",dashboard:"up to four analytical children in a fixed layout","data-table":"exact values in filterable rows and columns",diagram:"a flowchart, sequence, ER, or state diagram from Mermaid source, for processes and relationships prose cannot show",divider:"a rule between sections","donut-chart":"proportions of a whole with a hollow center","enable-notification":"a binary notification opt-in with two actions","event-session":"a conference session with time, location, and speakers","flight-tracker":"a flight's route, times, and live progress",followup:"suggested next prompts the user can send",form:"input fields with submit actions","funnel-chart":"drop-off through ordered conversion or pipeline stages","gauge-chart":"one bounded value against its minimum and maximum",grid:"one to four equal columns of peers",heading:"a section title, levels one to four",heatmap:"two-dimensional intensity across x and y",icon:"one semantic glyph from the icon vocabulary",image:"one to six real image URLs with captions in a grid or horizontal chat gallery","item-card":"one compact three-slot row with composable left, middle, and right content","item-card-group":"one to twelve related item-card rows in a list or grid","kpi-grid":"up to four headline KPIs, each with a sparkline of its own history","line-chart":"overlapping series, a live signal, or one series split around a baseline",list:"bulleted, numbered, or checklist items with optional children","list-block":"richer rows with title, description, meta, rating, icon, or image",map:"ranked places pinned by exact latitude and longitude","meter-list":"bounded quantities such as quota, utilization, or budget","metric-grid":"up to four headline KPIs with no history to plot","pie-chart":"proportions of a whole","player-card":"an athlete with jersey, portrait, and stat lines",playlist:"a track collection with cover and per-track actions","product-card":"purchasable items with image, price, rating, availability","product-signals":"two to four related analytical views in tabs",progress:"a zero to one hundred percentage bar","purchase-complete":"confirmation after a successful transaction","purchase-items":"a cart or order summary with line items and totals","radar-chart":"multivariate comparison across three or more axes","radial-chart":"compact circular measure",rating:"a zero to five star score with optional count","record-card":"one entity's labeled facts, layouts details/compact/media","ride-status":"pickup ETA and driver for a ride in progress",row:"places complementary children side by side","sankey-chart":"flow volumes between source and target nodes","scatter-chart":"correlation between two numeric fields, optional grouping",spacer:"a gap between siblings",steps:"task progress or a chronological timeline, up to twelve entries","sunburst-chart":"hierarchical part-to-whole values across nested levels","switch-group":"toggleable boolean preferences",tabs:"parallel text or rich multi-component sections behind labeled tabs","tag-list":"short keyword chips",text:"explanatory markdown prose","toggle-group":"single or multiple choice from short options","view-event":"one calendar event's date, time, and tone","weather-current":"current conditions in one location","weather-forecast":"multi-day or future conditions with highs and lows"},no={actions:"actions","data-visualization":"data","display-information":"display","form-elements":"forms"};function oo(t){return t==="dashboard"||ze.has(t)?"containers":Oe.has(t)?"layout":Le.has(t)?"primitives":no[be[t]]??"display"}var mt=Object.fromEntries(Object.entries(ct).map(([t,n])=>[t,{group:oo(t),summary:n}])),pe=Object.keys(ct).sort(),ao=[["containers","Containers"],["layout","Layout"],["primitives","Primitives"],["data","Data"],["display","Content"],["actions","Actions"],["forms","Forms"]];function $o(){return ao.map(([n,a])=>{let i=pe.filter(l=>mt[l].group===n).map(l=>`${l} \u2014 ${mt[l].summary}`);return`${a}: ${i.join("; ")}.`}).join(`
|
|
2
|
-
`)}import{z as L}from"zod";var ro=["callMcpTool","composeUI","executeSandbox","getComponentSchema","renderComponent","searchKnowledge","searchMcpTools","searchWeb"],io="mcp_",so=20,lo=16*1024,po=L.object({description:L.string().trim().min(1).max(1e3),inputSchema:L.record(L.string(),L.unknown()),name:L.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/).refine(t=>!ro.includes(t)&&!t.toLowerCase().startsWith(io),"Client tool name is reserved by the HeroUI Agent runtime"),needsApproval:L.boolean().optional()}),Xo=L.array(po).max(so).superRefine((t,n)=>{let a=new Set;for(let i of t)a.has(i.name)&&n.addIssue({code:"custom",message:`Duplicate client tool name: ${i.name}`}),a.add(i.name);new TextEncoder().encode(JSON.stringify(t)).byteLength>lo&&n.addIssue({code:"custom",message:"Client tool manifest exceeds 16KB"})});import{z as p}from"zod";var V=6,dt="0.2.0-beta.13",Qo="https://api.heroui.pro";var mo=p.enum(["light","dark","system"]),co=p.enum(["outline","plain","surface","surface-secondary"]),uo=new Set(["[object object]","0","anonymous","distinct_id","distinctid","email","false","guest","id","nan","none","not_authenticated","null","true","undefined"]),me=p.string().trim().min(1).max(200).refine(t=>!uo.has(t.toLowerCase()),{message:"Identity id is reserved"}),go=p.discriminatedUnion("type",[p.object({id:me,type:p.literal("anonymous")}),p.object({id:me,type:p.literal("user")})]),ho=p.object({avatarUrl:p.string().trim().pipe(p.url()).optional(),email:p.string().trim().max(320).pipe(p.email()).optional(),name:p.string().trim().max(120).optional()}),oa=p.object({anonymousId:me.optional(),identity:go,profile:ho.optional()}),aa=p.object({expiresAt:p.number().int().positive(),token:p.string().trim().min(1)}),ra=p.object({agentId:p.string().trim().min(1).max(100),apiKeyId:p.string().trim().min(1).max(100),aud:p.literal("heroui-agent"),exp:p.number().int().positive(),iat:p.number().int().positive(),iss:p.literal("https://api.heroui.com"),jti:p.uuid(),protocolVersion:p.literal(6),sub:p.string().trim().min(1).max(200)}),ia={embed:"embed",preview:"preview"},sa=p.object({agentId:p.string(),minimumProtocolVersion:p.literal(6),name:p.string().trim().min(1).max(120),protocolVersion:p.literal(6),sdkVersion:p.string().default(dt),suggestedPrompts:p.array(p.string().trim().min(1).max(160)).max(5),surfaceVariant:co.default("plain"),theme:mo});import{z as k}from"zod";var ut=k.object({excerpt:k.string().trim().min(1).max(2e3).optional(),locator:k.string().trim().min(1).max(160).optional(),sourceId:k.string().trim().min(1).max(120)}),fo=k.string().trim().max(2048).refine(t=>{try{return["http:","https:"].includes(new URL(t).protocol)}catch{return!1}}),yo=k.union([ut.extend({sourceType:k.literal("document"),title:k.string().trim().min(1).max(200)}),ut.extend({sourceType:k.literal("url").optional(),title:k.string().trim().min(1).max(200).optional(),url:fo})]),ma=k.object({items:k.array(yo).min(1).max(16)});var ce=["moonshotai/Kimi-K3","openai/gpt-5.6-luna","openai/gpt-5.6-terra","openai/gpt-5.6-sol","google/gemini-3.7-flash","anthropic/claude-sonnet-5","anthropic/claude-opus-4.8"],Co={"google/gemini-3.5-flash":"google/gemini-3.7-flash","google/gemini-3.6-flash":"google/gemini-3.7-flash"};function de(t){return Co[t]??t}var da="google/gemini-3.7-flash",bo=[{description:"Flagship model for coding, reasoning, and knowledge work",id:"moonshotai/Kimi-K3",label:"Kimi K3",provider:"Moonshot AI",tier:"light"},{description:"Fast answers and lightweight agent workflows",id:"openai/gpt-5.6-luna",label:"GPT-5.6 Luna",provider:"OpenAI",tier:"light"},{description:"Balanced reasoning for everyday agent tasks",id:"openai/gpt-5.6-terra",label:"GPT-5.6 Terra",provider:"OpenAI",tier:"codegen"},{description:"Deep reasoning for complex, multi-step analysis",id:"openai/gpt-5.6-sol",label:"GPT-5.6 Sol",provider:"OpenAI",tier:"complex"},{description:"Fast multimodal analysis with a large context window",id:"google/gemini-3.7-flash",label:"Gemini 3.7 Flash",provider:"Google",tier:"light"},{description:"Strong agentic reasoning and polished UI decisions",id:"anthropic/claude-sonnet-5",label:"Claude Sonnet 5",provider:"Anthropic",tier:"codegen"},{description:"Highest-capability Claude for difficult research and analysis",id:"anthropic/claude-opus-4.8",label:"Claude Opus 4.8",provider:"Anthropic",tier:"complex"}],xo=new Set(ce);function ua(t){return typeof t=="string"&&xo.has(t)}function ga(t){let n=t?de(t):void 0;return bo.find(a=>a.id===n)?.tier??"light"}import{z as gt}from"zod";var Ca=gt.preprocess(t=>typeof t=="string"?de(t):t,gt.enum(ce));var xa="heroui-agent:runtime-timing",Aa="heroui_agent_turn_admitted",ka="getTurnAdmissionStatuses",Ia=50;import{z as g}from"zod";var Ao=["action_approved","action_declined","component_copy","component_export","component_followup","component_rendered","component_submit","component_tool","embed_loaded","failure","feedback_down","feedback_up","first_chunk","first_feedback_paint","first_server_content_paint","first_text_paint","message_copied","message_sent","opened","reconnected","retry","stopped","turn_completed","turn_stalled"],ko=["client-inactivity-watchdog","cloudflare-chat","message-send-failed","stream-error"],Io=["did_not_follow_instructions","incomplete","incorrect","not_relevant","other","unclear"],To=["client_stopped","conversation_deleted","provider_error","provider_rate_limited","provider_timeout","turn_deadline_exceeded","turn_stalled","unknown"],So=g.object({actionId:g.string().trim().min(1).max(256).optional(),componentId:g.string().trim().min(1).max(256).optional(),componentType:g.enum(pe).optional(),feedbackComment:g.string().trim().max(1e3).optional(),feedbackCommentLength:g.number().int().min(0).max(1e3).optional(),feedbackReasons:g.array(g.enum(Io)).max(6).optional(),format:g.enum(["csv","json","png","svg","text"]).optional(),hasFeedbackComment:g.boolean().optional(),hasToolName:g.boolean().optional(),latencyMs:g.number().finite().min(0).max(1800*1e3).optional(),latencyOrigin:g.literal("user_submit").optional(),messageId:g.string().trim().min(1).max(256).optional(),protocolVersion:g.literal(6).optional(),sdkVersion:g.string().trim().min(1).max(80).optional(),source:g.enum(ko).optional(),toolName:g.string().trim().min(1).max(160).optional()}).strict(),wa=g.object({conversationId:g.string().uuid(),event:g.enum(Ao),properties:So.default({})}).strict(),_a=g.enum(To);export{ia as AGENT_CONVERSATION_SOURCE,ce as AGENT_MODEL_IDS,bo as AGENT_MODEL_OPTIONS,mt as AGENT_UI_CATALOG,ze as AGENT_UI_CONTAINER_KINDS,pe as AGENT_UI_KIND_NAMES,Zo as AGENT_UI_KIND_SCHEMAS,Oe as AGENT_UI_LAYOUT_LEAF_KINDS,Le as AGENT_UI_PRIMITIVE_KINDS,J as COMPOSED_UI_MAX_DEPTH,B as COMPOSED_UI_MAX_NODES,da as DEFAULT_AGENT_PICKER_MODEL_ID,Qo as HEROUI_AGENT_API_BASE_URL,_o as HEROUI_AGENT_ATTACHMENT_ACCEPT,he as HEROUI_AGENT_ATTACHMENT_CONTENT_TYPES,ht as HEROUI_AGENT_ATTACHMENT_EXTENSION_BY_CONTENT_TYPE,wo as HEROUI_AGENT_ATTACHMENT_MAX_BYTES,Ao as HEROUI_AGENT_EMBED_EVENT_NAMES,ko as HEROUI_AGENT_EMBED_EVENT_SOURCES,Io as HEROUI_AGENT_FEEDBACK_REASONS,vo as HEROUI_AGENT_MAX_ATTACHMENTS,V as HEROUI_AGENT_PROTOCOL_VERSION,ye as HEROUI_AGENT_REMOTE_CONFIG_VERSION,xa as HEROUI_AGENT_RUNTIME_TIMING_EVENT,dt as HEROUI_AGENT_SDK_VERSION,Eo as HEROUI_AGENT_TEXT_ATTACHMENT_CONTENT_TYPES,Ia as HEROUI_AGENT_TURN_ADMISSION_STATUS_MAX_IDS,ka as HEROUI_AGENT_TURN_ADMISSION_STATUS_METHOD,Aa as HEROUI_AGENT_TURN_ADMITTED_FRAME_TYPE,To as HEROUI_AGENT_TURN_ERROR_CODES,Co as LEGACY_AGENT_MODEL_IDS,so as MAX_CLIENT_TOOLS,lo as MAX_CLIENT_TOOLS_BYTES,ro as RESERVED_AGENT_TOOL_NAMES,io as RESERVED_AGENT_TOOL_PREFIX,In as accordionComponentSchema,wn as actionGroupComponentSchema,go as agentAuthIdentitySchema,ho as agentAuthProfileSchema,aa as agentAuthTokenSchema,Tt as agentIconNames,N as agentIconSchema,me as agentIdentityIdSchema,Ca as agentModelIdSchema,sa as agentProjectConfigSchema,yo as agentSourceSchema,ma as agentSourcesSchema,co as agentSurfaceVariantSchema,mo as agentThemeSchema,ra as agentTokenClaimsSchema,Ee as agentUIComponentSchema,re as agentUILeafComponentSchema,le as agentUINodeSchema,Vo as agentUIRenderableSchema,Hn as analyticalLeafComponentSchema,Xt as areaChartComponentSchema,Ze as badgeComponentSchema,Jt as barChartComponentSchema,Ke as buttonComponentSchema,yn as calloutComponentSchema,ln as candlestickChartComponentSchema,it as cardComponentSchema,ee as cardComponentVariantSchema,jn as channelMessageComponentSchema,w as chartColorSchema,po as clientToolManifestEntrySchema,Xo as clientToolsSchema,Sn as codeBlockComponentSchema,at as colComponentSchema,un as comparisonListComponentSchema,Ko as composeUIInputSchema,Qt as composedChartComponentSchema,pt as composedUIComponentSchema,oa as createAgentAuthTokenRequestSchema,On as createEventComponentSchema,Wn as dashboardComponentSchema,dn as dataTableComponentSchema,vn as diagramComponentSchema,Pe as dividerComponentSchema,tn as donutChartComponentSchema,Kn as enableNotificationComponentSchema,Vn as eventSessionComponentSchema,zn as flightTrackerComponentSchema,_n as followupComponentSchema,hn as formComponentSchema,pn as funnelChartComponentSchema,mn as gaugeChartComponentSchema,ga as getAgentModelTier,Me as getAgentUIContainerChildren,rt as gridComponentSchema,Ve as headingComponentSchema,sn as heatmapComponentSchema,So as heroUIAgentEmbedEventPropertiesSchema,wa as heroUIAgentEmbedEventSchema,_a as heroUIAgentTurnErrorCodeSchema,Fe as iconComponentSchema,Cn as imageComponentSchema,ua as isAgentModelId,Ge as isAgentUIContainerComponent,Do as isAgentUILayoutLeafComponent,Po as isAgentUIPrimitiveComponent,fe as isHeroUIAgentAttachmentContentType,se as itemCardComponentSchema,Je as itemCardGroupComponentSchema,Yt as kpiGridComponentSchema,Wt as lineChartComponentSchema,kn as listBlockComponentSchema,An as listComponentSchema,bn as mapComponentSchema,gn as meterListComponentSchema,$t as metricGridComponentSchema,C as numberFormatSchema,Uo as parseAgentRemoteConfig,en as pieChartComponentSchema,Dn as playerCardComponentSchema,Ln as playlistComponentSchema,Un as productCardComponentSchema,qn as productSignalsComponentSchema,qe as progressComponentSchema,Bn as purchaseCompleteComponentSchema,Mn as purchaseItemsComponentSchema,nn as radarChartComponentSchema,on as radialChartComponentSchema,He as ratingComponentSchema,Rn as recordCardComponentSchema,_t as recordCardLayoutSchema,$o as renderAgentUICatalogPrompt,Bo as renderComponentInputSchema,de as resolveAgentModelId,Gn as rideStatusComponentSchema,ot as rowComponentSchema,an as sankeyChartComponentSchema,rn as scatterChartComponentSchema,De as spacerComponentSchema,Tn as stepsComponentSchema,cn as sunburstChartComponentSchema,En as switchGroupComponentSchema,jo as tabsComponentSchema,xn as tagListComponentSchema,fn as textComponentSchema,Nn as toggleGroupComponentSchema,Pn as viewEventComponentSchema,X as weatherConditionSchema,St as weatherConditions,Fn as weatherCurrentComponentSchema,Zn as weatherForecastComponentSchema};
|
|
1
|
+
var vo=5,wo=10485760,ht={"application/json":"json","application/pdf":"pdf","image/gif":"gif","image/jpeg":"jpg","image/png":"png","image/webp":"webp","text/csv":"csv","text/markdown":"md","text/plain":"txt","text/tab-separated-values":"tsv"},he=Object.freeze(Object.keys(ht)),_o=he.join(","),ft=new Set(he),Eo=new Set(["application/json","text/csv","text/markdown","text/plain","text/tab-separated-values"]);function fe(t){return ft.has(t.trim().toLowerCase())}var ye=1,u=Symbol("invalid");function P(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function v(t){if(t!==void 0)return typeof t=="string"?t:u}function S(t){if(t!==void 0)return typeof t=="boolean"?t:u}function Y(t){if(t!==void 0)return typeof t=="number"&&Number.isFinite(t)?t:u}function O(t){return n=>{if(n!==void 0)return typeof n=="string"&&t.includes(n)?n:u}}function Ce(t){if(t===void 0)return;if(typeof t=="string")return t;if(!P(t))return u;let n=v(t.dark),a=v(t.light);return n===u||a===u?u:{...n===void 0?{}:{dark:n},...a===void 0?{}:{light:a}}}function yt(t){if(t===void 0)return;if(!P(t))return u;let n={};for(let[a,i]of Object.entries(t)){if(typeof i!="string")return u;n[a]=i}return n}function Ct(t){if(t!==void 0)return!Array.isArray(t)||t.some(n=>typeof n!="string")?u:t}function x(t,n){if(t===void 0||!P(t))return u;let a={};for(let[i,l]of Object.entries(n)){let d=l(t[i]);if(d===u)return u;d!==void 0&&(a[i]=d)}return a}function E(t){return t===u?void 0:t}var bt=["accent","background","foreground","overlay","surface","surfaceSecondary","tooltip"];function xt(t){return x(t,{launcher:n=>n===void 0?void 0:x(n,{background:Ce,icon:v,position:O(["bottom-left","bottom-right"]),style:yt}),panel:n=>n===void 0?void 0:x(n,{expandable:S,expanded:S,initialHeight:a=>a===void 0||typeof a=="string"?a:Y(a),initialWidth:a=>a===void 0||typeof a=="string"?a:Y(a)}),theme:n=>n===void 0?void 0:x(n,{colorScheme:O(["dark","light","system"]),colors:a=>a===void 0?void 0:x(a,Object.fromEntries(bt.map(i=>[i,Ce]))),designTheme:O(["base","brutalism","glass","mouve"]),radius:O(["pill","round","sharp","soft"]),typography:a=>a===void 0?void 0:x(a,{baseSize:Y,fontFamily:v})}),viewMode:O(["floating","sidebar"])})}function At(t){return x(t,{attachments:n=>{if(n===void 0||n===!1)return n;if(!Array.isArray(n))return u;let a=n.filter(i=>typeof i=="string"&&fe(i));return a.length===n.length?a:u},defaultModel:v,dictation:S,disclaimer:n=>n===!1?!1:v(n),modelPicker:S,placeholder:v})}function kt(t){return x(t,{animated:n=>{if(n===void 0||n===!1)return n;if(!P(n))return u;let a=O(["blurIn","fadeIn","slideUp"])(n.animation);return a===u||a===void 0?u:{...n,animation:a}},caret:n=>n===!1?!1:O(["block","circle"])(n)})}function It(t){if(t===void 0||t===!1)return t;if(!Array.isArray(t))return u;let n=["copy","feedback","retry"],a=t.filter(i=>typeof i=="string"&&n.includes(i));return a.length===t.length?a:u}function Uo(t){if(!P(t)||t.version!==ye)return null;let n=t.revision;if(typeof n!="string"||!n)return null;let a=E(xt(t.appearance)),i=E(x(t.capabilities,{imageSearch:S,newsSearch:S,webSearch:S})),l=E(At(t.composer)),d=E(kt(t.markdown)),f=E(x(t.permissions,{defaultMode:O(["ask","auto","full"]),showPicker:S})),h=E(It(t.responseActions)),U=E(S(t.showBetaBadge)),b=E(x(t.startScreen,{greeting:v,promptShortcuts:S,prompts:Ct})),_=E(x(t.webfont,{familyName:z=>typeof z=="string"&&z?z:u,fontFaceUrl:v,stylesheetUrl:v}));return{...a?{appearance:a}:{},...i?{capabilities:i}:{},...l?{composer:l}:{},...d?{markdown:d}:{},...f?{permissions:f}:{},...h===void 0?{}:{responseActions:h},...U===void 0?{}:{showBetaBadge:U},...b?{startScreen:b}:{},..._?{webfont:_}:{},revision:n,version:ye}}var be={accordion:"display-information","action-group":"actions","area-chart":"data-visualization","bar-chart":"data-visualization",callout:"display-information","candlestick-chart":"data-visualization","channel-message":"display-information","code-block":"display-information","comparison-list":"data-visualization","composed-chart":"data-visualization","create-event":"display-information","data-table":"data-visualization",diagram:"display-information","donut-chart":"data-visualization","enable-notification":"display-information","event-session":"display-information","flight-tracker":"display-information",followup:"actions",form:"form-elements","funnel-chart":"data-visualization","gauge-chart":"data-visualization",heatmap:"data-visualization",image:"display-information","kpi-grid":"data-visualization","line-chart":"data-visualization",list:"display-information","list-block":"display-information",map:"display-information","meter-list":"data-visualization","metric-grid":"data-visualization","pie-chart":"data-visualization","player-card":"display-information",playlist:"display-information","product-card":"display-information","product-signals":"data-visualization","purchase-complete":"display-information","purchase-items":"display-information","radar-chart":"data-visualization","radial-chart":"data-visualization","record-card":"display-information","ride-status":"display-information","sankey-chart":"data-visualization","scatter-chart":"data-visualization",steps:"display-information","sunburst-chart":"data-visualization","switch-group":"form-elements",tabs:"display-information","tag-list":"display-information",text:"display-information","toggle-group":"form-elements","view-event":"display-information","weather-current":"display-information","weather-forecast":"display-information"};import{z as e}from"zod";function xe(t){return{maximum:t.max??(t.format?.style==="percent"?1:100),minimum:t.min??0}}var Tt=["activity","alert","briefcase","calendar","chart","check","clock","code","credit-card","database","device-desktop","device-mobile","document","dollar","flag","globe","heart","home","info","lightning","location","mail","percent","person","question","receipt","rocket","route","search","shopping-bag","speedometer","star","tag","target","users"],St=["clear","partly-cloudy","cloudy","fog","drizzle","rain","snow","thunderstorm","windy","unknown"],vt=e.string().trim().min(1).max(120),r=e.string().trim().min(1).max(320),M=e.string().trim().min(1).max(1e4),c=e.string().trim().min(1).max(80),m=e.string().trim().min(1).max(100),j=e.string().regex(/^\d{4}-\d{2}-\d{2}$/),W=e.string().regex(/^(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/),wt=e.union([e.string().max(500),e.number(),e.boolean(),e.null()]),L=e.record(e.string().max(80),wt),s=e.object({description:r.optional(),id:m,title:vt}),ee=e.enum(["outline","plain","surface","surface-secondary","surface-tertiary","widget"]).describe("Card hierarchy: surface for the primary standalone group; surface-secondary for supporting information; surface-tertiary for one featured or emphasized group; outline for equal peers and comparisons; plain for a structural section already separated by surrounding layout; widget for a compact interactive group with actions or controls."),_t=e.enum(["compact","details","media"]).describe("Record information layout: details for a full labeled fact set; compact for a brief summary or repeated peer cards; media for an image-led product, place, person, or event and only when an image is available."),C=e.discriminatedUnion("style",[e.object({compact:e.boolean().optional(),style:e.literal("number")}),e.object({maximumFractionDigits:e.number().int().min(0).max(4).optional(),style:e.literal("percent")}),e.object({compact:e.boolean().optional(),currency:e.string().regex(/^[A-Z]{3}$/),style:e.literal("currency")})]),w=e.enum(["accent","chart-1","chart-2","chart-3","chart-4","chart-5","danger","default","success","warning"]),Ie=e.record(e.string().trim().min(1).max(80),w).refine(t=>Object.keys(t).length<=50,"At most 50 category colors are allowed"),ne=e.object({color:w.optional(),dataKey:c,format:C.optional(),label:r}),Et=ne.extend({axis:e.enum(["left","right"]).optional(),stacked:e.boolean().optional(),type:e.enum(["area","bar","line"])}),Nt=e.object({id:m,label:r,maxItems:e.number().int().min(1).max(200).optional()}),H=s.extend({data:e.array(L).min(1).max(200),defaultRangeId:m.optional(),ranges:e.array(Nt).min(2).max(8).optional(),series:e.array(ne).min(1).max(5),showSummary:e.boolean().optional(),xKey:c}),q=s.extend({colors:Ie.optional(),data:e.array(L).min(1).max(50),format:C.optional(),labelKey:c,valueKey:c}),Rt=s.extend({colors:Ie.optional(),data:e.array(L).min(1).max(200),format:C.optional(),groupKey:c.optional(),kind:e.literal("scatter-chart"),labelKey:c.optional(),sizeKey:c.optional(),xKey:c,yKey:c}),Ut=s.extend({color:w.optional(),data:e.array(L).min(1).max(400),format:C.optional(),kind:e.literal("heatmap"),valueKey:c,xKey:c,yKey:c}),zt=H.extend({baseline:e.number().finite().optional(),kind:e.literal("line-chart"),mode:e.enum(["live","profit-loss","standard"]).optional(),negativeColor:w.optional(),positiveColor:w.optional(),windowSize:e.number().int().min(2).max(200).optional()}).superRefine((t,n)=>{(t.mode==="live"||t.mode==="profit-loss")&&t.series.length!==1&&n.addIssue({code:"custom",message:`${t.mode} line charts require exactly one series`,path:["series"]})}),Ot=s.extend({closeKey:c,data:e.array(L).min(1).max(200),downColor:w.optional(),format:C.optional(),highKey:c,kind:e.literal("candlestick-chart"),lowKey:c,openKey:c,upColor:w.optional(),xKey:c}).superRefine((t,n)=>{for(let[a,i]of t.data.entries()){let l=i[t.openKey],d=i[t.highKey],f=i[t.lowKey],h=i[t.closeKey];if([l,d,f,h].some(ge=>typeof ge!="number"||!Number.isFinite(ge))){n.addIssue({code:"custom",message:"Every candlestick row needs finite open, high, low, and close values",path:["data",a]});continue}let b=l,_=d,z=f,ue=h;(z>Math.min(b,ue)||_<Math.max(b,ue)||z>_)&&n.addIssue({code:"custom",message:"Candlestick low/high values must contain the open and close values",path:["data",a]})}}),Lt=q.extend({data:e.array(L).min(2).max(20),kind:e.literal("funnel-chart"),orientation:e.enum(["horizontal","vertical"]).optional(),showPercentages:e.boolean().optional()}).superRefine((t,n)=>{let a=t.data.map((i,l)=>{let d=i[t.valueKey];return typeof d!="number"||!Number.isFinite(d)||d<0?(n.addIssue({code:"custom",message:"Every funnel stage needs a finite, non-negative value",path:["data",l,t.valueKey]}),0):d});a.some(i=>i>0)||n.addIssue({code:"custom",message:"A funnel needs at least one stage above zero",path:["data"]}),(a[0]??0)<=0&&n.addIssue({code:"custom",message:"A funnel's first stage must be above zero",path:["data",0,t.valueKey]});for(let i=1;i<a.length;i+=1)(a[i]??0)>(a[i-1]??0)&&n.addIssue({code:"custom",message:"Funnel stages must not increase",path:["data",i,t.valueKey]})}),Gt=s.extend({color:w.optional(),format:C.optional(),kind:e.literal("gauge-chart"),label:r,max:e.number().finite().optional(),min:e.number().finite().optional(),notches:e.number().int().min(6).max(60).optional(),orientation:e.enum(["arc","linear"]).optional(),value:e.number().finite()}).superRefine((t,n)=>{let{maximum:a,minimum:i}=xe(t);a<=i?n.addIssue({code:"custom",message:"Gauge max must be greater than min",path:["max"]}):(t.value<i||t.value>a)&&n.addIssue({code:"custom",message:"Gauge value must be within its min/max range",path:["value"]})}),Te=e.lazy(()=>e.object({children:e.array(Te).min(1).max(12).optional(),color:w.optional(),id:m,label:r,value:e.number().finite().positive().optional()}).superRefine((t,n)=>{t.children?.length&&t.value!==void 0&&n.addIssue({code:"custom",message:"Sunburst branch values are derived from their children",path:["value"]}),!t.children?.length&&t.value===void 0&&n.addIssue({code:"custom",message:"Every sunburst leaf needs a positive value",path:["value"]})})),Mt=s.extend({data:Te,format:C.optional(),kind:e.literal("sunburst-chart")}).superRefine((t,n)=>{let a=new Set,i=0,l=0,d=(f,h)=>{i+=1,l=Math.max(l,h),a.has(f.id)&&n.addIssue({code:"custom",message:`Duplicate sunburst node id "${f.id}"`}),a.add(f.id),f.children?.forEach(U=>d(U,h+1))};t.data.children?.length||n.addIssue({code:"custom",message:"A sunburst root needs at least one child",path:["data","children"]}),d(t.data,0),i>60&&n.addIssue({code:"custom",message:"Sunburst charts allow at most 60 nodes"}),l>4&&n.addIssue({code:"custom",message:"Sunburst charts allow at most four nested levels"})}),Z=e.object({label:r,value:c}),jt=e.object({end:j,start:j}).refine(t=>t.start<=t.end,"The start date must not be after the end date"),A={description:r.optional(),label:r,name:c,required:e.boolean().optional()},Bt=e.discriminatedUnion("kind",[e.object({...A,defaultValue:e.string().max(500).optional(),inputType:e.enum(["email","number","password","search","tel","text","url"]).optional(),kind:e.literal("input"),placeholder:e.string().max(160).optional()}),e.object({...A,defaultValue:e.string().max(2e3).optional(),kind:e.literal("textarea"),placeholder:e.string().max(160).optional(),rows:e.number().int().min(2).max(12).optional()}),e.object({...A,defaultValue:c.optional(),kind:e.literal("select"),options:e.array(Z).min(1).max(30),placeholder:e.string().max(160).optional()}),e.object({...A,defaultValue:c.optional(),kind:e.literal("radio-group"),options:e.array(Z).min(1).max(12),placeholder:e.string().max(160).optional()}),e.object({...A,defaultValue:e.array(c).max(20).optional(),kind:e.literal("checkbox-group"),options:e.array(Z).min(1).max(20)}),e.object({...A,defaultValue:e.array(c).max(50).optional(),kind:e.literal("combobox"),options:e.array(Z.extend({description:e.string().trim().min(1).max(120).optional()})).min(1).max(200).describe("Prefer this over select once there are more options than someone would scan \u2014 it filters as they type. Values must be unique."),placeholder:e.string().max(160).optional(),selectionMode:e.enum(["multiple","single"]).optional()}).superRefine((t,n)=>{let a=new Set(t.options.map(i=>i.value));a.size!==t.options.length&&n.addIssue({code:"custom",message:"Combobox option values must be unique",path:["options"]}),(t.selectionMode??"single")==="single"&&(t.defaultValue?.length??0)>1&&n.addIssue({code:"custom",message:"A single-selection combobox takes at most one default value",path:["defaultValue"]}),t.defaultValue?.some(i=>!a.has(i))&&n.addIssue({code:"custom",message:"Every combobox default value must be one of the options",path:["defaultValue"]})}),e.object({...A,defaultValue:e.number().optional(),kind:e.literal("slider"),max:e.number(),min:e.number(),step:e.number().positive().optional()}),e.object({...A,defaultValue:e.number().optional(),format:C.optional(),kind:e.literal("number"),max:e.number().optional(),min:e.number().optional(),placeholder:e.string().max(160).optional(),step:e.number().positive().optional()}),e.object({...A,defaultValue:e.boolean().optional(),kind:e.literal("switch")}),e.object({...A,defaultValue:j.optional(),kind:e.literal("date-picker"),max:j.optional(),min:j.optional()}),e.object({...A,defaultValue:jt.optional(),kind:e.literal("date-range-picker"),max:j.optional(),min:j.optional()}),e.object({...A,defaultValue:W.optional(),hourCycle:e.union([e.literal(12),e.literal(24)]).optional(),kind:e.literal("time-field"),max:W.optional(),min:W.optional()})]),oe=e.enum(["danger","outline","primary","secondary","tertiary"]),R=e.enum(Tt),Se=e.object({arguments:e.record(e.string().max(80),e.unknown()).refine(t=>JSON.stringify(t).length<=4096,"Tool call arguments must serialize to at most 4KB of JSON"),name:e.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/)}),y=e.object({id:m,label:r,prompt:e.string().trim().min(1).max(2e3).optional(),toolCall:Se.optional(),variant:oe.optional()}),ve=e.object({latitude:e.number().finite().min(-85.051129).max(85.051129),longitude:e.number().finite().min(-180).max(180)}),te=e.string().trim().min(1).max(2e3).refine(t=>{try{let n=new URL(t);return["http:","https:"].includes(n.protocol)&&!n.username&&!n.password}catch{return!1}},{message:"URL must use HTTP or HTTPS and cannot include credentials"}),Dt=e.string().trim().min(1).max(2e3).refine(t=>{try{let n=new URL(t);return["http:","https:","mailto:","tel:"].includes(n.protocol)&&!n.username&&!n.password}catch{return!1}},{message:"Link must use HTTP, HTTPS, mailto, or tel and cannot include credentials"}),F={id:m,label:r,variant:oe.optional()},Pt=e.string().trim().min(5).max(2e3).refine(t=>/^tel:\+?[0-9().\-\s]+$/.test(t)&&/\d/.test(t.slice(4)),"Phone links must use the tel: scheme and contain a phone number"),Vt=e.discriminatedUnion("kind",[e.object({...F,href:Pt,kind:e.literal("call")}),e.object({...F,href:te,kind:e.literal("directions")}),e.object({...F,href:Dt,kind:e.literal("other")}),e.object({...F,href:te,kind:e.literal("website")})]),Kt=ve.extend({actions:e.array(Vt).max(4).optional(),address:r.optional(),category:e.string().trim().min(1).max(100).optional(),id:m,images:e.array(e.object({alt:r,src:te})).max(4).optional().describe("Prefer one representative image per location when a trusted tool or web image search returns one. The first image becomes the result-card thumbnail; initials are the fallback."),notes:e.string().trim().min(1).max(2e3).optional(),rating:e.number().finite().min(0).max(5).optional(),relevance:e.number().finite().min(0).max(1).optional(),reviewCount:e.number().int().nonnegative().max(1e9).optional(),title:r}),V=e.string().trim().min(1).max(2e3).refine(t=>{if(t.startsWith("/"))return!t.startsWith("//");try{let n=new URL(t);return["http:","https:"].includes(n.protocol)&&!n.username&&!n.password}catch{return!1}},{message:"Image sources must be HTTP(S) URLs or root-relative paths"}),I=e.object({alt:r,src:V.refine(t=>!t.split(/[?#]/,1)[0]?.toLowerCase().endsWith(".svg"),"Response-composition images must be raster images")}),ae=e.string().regex(/^[A-Z]{3}$/),Zt=e.object({amount:e.number().finite().nonnegative().max(1e9),currency:ae}),X=e.enum(St),Ae=e.enum(["celsius","fahrenheit"]),ke=e.object({label:r,status:r.optional(),time:e.string().trim().min(1).max(80)}),B=e.enum(["accent","danger","default","muted","success","warning"]),Ft=e.object({actions:e.array(y).max(3).optional(),badge:e.object({label:r,tone:B.optional()}).optional(),description:r.optional(),id:m,image:e.object({alt:r,src:V}),meta:e.string().trim().min(1).max(160).optional(),name:r,price:e.object({amount:e.number().finite().nonnegative().max(1e9),currency:ae.optional()}),rating:e.object({count:e.number().int().nonnegative().max(1e9).optional(),value:e.number().finite().min(0).max(5)}).optional()}),Ht=e.enum(["accent","danger","default","success","warning"]),qt=e.object({description:r.optional(),format:C.optional(),id:m,label:r,max:e.number().optional(),min:e.number().optional(),tone:Ht.optional(),value:e.number()}).superRefine((t,n)=>{let a=t.min??0,i=t.max??(t.format?.style==="percent"?1:100);i<=a&&n.addIssue({code:"custom",message:"Meter max must be greater than min"}),(t.value<a||t.value>i)&&n.addIssue({code:"custom",message:"Meter value must be within its min/max range"})}),o={accordion:s.extend({kind:e.literal("accordion"),sections:e.array(e.object({content:M,defaultOpen:e.boolean().optional(),id:m,title:r})).min(1).max(12)}),actions:s.extend({actions:e.array(y).min(1).max(8),kind:e.literal("action-group"),orientation:e.enum(["horizontal","vertical"]).optional()}),area:H.extend({kind:e.literal("area-chart"),stacked:e.boolean().optional()}),bar:H.extend({kind:e.literal("bar-chart"),layout:e.enum(["horizontal","vertical"]).optional(),stacked:e.boolean().optional()}),callout:s.extend({content:M,icon:R.optional(),kind:e.literal("callout"),tone:e.enum(["accent","danger","neutral","success","warning"]).optional()}),candlestick:Ot,channelMessage:s.extend({attachments:e.array(e.object({id:m,image:I.optional(),name:r})).max(8).optional(),author:e.object({image:I.optional(),name:r}),channel:r,content:M,kind:e.literal("channel-message"),timestamp:e.string().trim().min(1).max(80)}),code:s.extend({code:e.string().min(1).max(2e4),kind:e.literal("code-block"),language:e.string().trim().max(40).optional()}),comparison:s.extend({items:e.array(e.object({change:e.number().optional(),format:C.optional(),label:r,note:e.string().trim().max(180).optional(),value:e.number()})).min(1).max(12),kind:e.literal("comparison-list")}),composed:H.extend({kind:e.literal("composed-chart"),series:e.array(Et).min(2).max(5)}),createEvent:s.extend({actions:e.array(y).max(2).optional(),date:e.object({day:e.number().int().min(1).max(31),weekday:e.string().trim().min(1).max(20)}),events:e.array(e.object({id:m,status:e.enum(["existing","proposed"]).optional(),time:e.string().trim().min(1).max(80),title:r,tone:B.optional()})).min(1).max(12),kind:e.literal("create-event")}),diagram:s.extend({chart:e.string().trim().min(1).max(4e3).describe('Mermaid source. Pick the diagram type from the relationship: "flowchart LR" for a process or decision path, "sequenceDiagram" for an exchange between parties over time, "erDiagram" for how records relate, "stateDiagram-v2" for the states something moves between. Example: "flowchart LR\\n A[Order placed] --> B{In stock?}\\n B -- yes --> C[Ship]\\n B -- no --> D[Backorder]". Never include HTML, script tags, or click directives.'),kind:e.literal("diagram")}).superRefine((t,n)=>{/<\s*script|javascript:|^\s*click\s+\S/im.test(t.chart)&&n.addIssue({code:"custom",message:"Diagram source cannot contain HTML, script URLs, or click directives",path:["chart"]})}),donut:q.extend({kind:e.literal("donut-chart")}),enableNotification:s.extend({actions:e.tuple([y,y]),kind:e.literal("enable-notification")}),eventSession:s.extend({action:y.optional(),eyebrow:e.string().trim().min(1).max(100).optional(),kind:e.literal("event-session"),location:r,speakers:e.array(e.object({image:I.optional(),name:r,role:r})).max(8),time:e.string().trim().min(1).max(80)}),flightTracker:s.extend({airline:e.object({logo:I.optional(),name:r}),date:e.string().trim().min(1).max(80),destination:ke,flightNumber:e.string().trim().min(1).max(40),kind:e.literal("flight-tracker"),origin:ke,progress:e.number().finite().min(0).max(100).optional()}),followup:s.extend({kind:e.literal("followup"),prompts:e.array(e.object({id:m,label:r,prompt:M})).min(1).max(8)}),form:s.extend({actions:e.array(y).min(1).max(4),fields:e.array(Bt).min(1).max(20),kind:e.literal("form")}),funnel:Lt,gauge:Gt,heatmap:Ut,image:s.extend({images:e.array(e.object({alt:r,aspectRatio:e.enum(["landscape","portrait","square","wide"]).optional(),caption:r.optional(),src:V})).min(1).max(6),kind:e.literal("image"),variant:e.enum(["grid","horizontal"]).optional().describe("Use horizontal for a swipeable gallery in narrow chat interfaces.")}),kpiGrid:s.extend({kind:e.literal("kpi-grid"),metrics:e.array(e.object({change:e.number().optional(),color:w.optional(),format:C.optional(),icon:R.optional(),label:r,trend:e.array(e.number().finite()).min(2).max(60).describe("The values behind this KPI, oldest to newest, drawn as a sparkline. The last point should agree with value."),value:e.number()})).min(1).max(4)}),line:zt,list:s.extend({items:e.array(e.object({checked:e.boolean().optional(),children:e.array(r).max(8).optional(),id:m,text:r})).min(1).max(30),kind:e.literal("list"),style:e.enum(["bulleted","checklist","numbered"]).optional()}),listBlock:s.extend({items:e.array(e.object({description:r.optional(),icon:R.optional(),id:m,imageAlt:r.optional(),imageUrl:V.optional(),meta:e.string().trim().max(100).optional(),rating:e.number().min(0).max(5).optional(),title:r})).min(1).max(20),kind:e.literal("list-block")}),map:s.extend({initialLocationId:m.optional(),kind:e.literal("map"),locations:e.array(Kt).min(1).max(12),viewport:e.object({center:ve,zoom:e.number().int().min(1).max(18)}).optional()}).superRefine((t,n)=>{let a=new Set;for(let[i,l]of t.locations.entries()){a.has(l.id)&&n.addIssue({code:"custom",message:`Duplicate map location id "${l.id}"`,path:["locations",i,"id"]}),a.add(l.id);let d=new Set;for(let[f,h]of(l.actions??[]).entries())d.has(h.id)&&n.addIssue({code:"custom",message:`Duplicate action id "${h.id}" for map location "${l.id}"`,path:["locations",i,"actions",f,"id"]}),d.add(h.id)}t.initialLocationId&&!a.has(t.initialLocationId)&&n.addIssue({code:"custom",message:"The initial map location must reference one of the locations",path:["initialLocationId"]})}).describe("A ranked, map-synchronized set of places or professionals. Coordinates and listing facts must come from tools or user data; never invent them."),meterList:s.extend({items:e.array(qt).min(1).max(8),kind:e.literal("meter-list")}),metricGrid:s.extend({kind:e.literal("metric-grid"),metrics:e.array(e.object({change:e.number().optional(),format:C.optional(),icon:R.optional(),label:r,value:e.number()})).min(1).max(4)}),pie:q.extend({kind:e.literal("pie-chart")}),playerCard:s.extend({backgroundImage:I.optional(),jerseyNumber:e.string().trim().min(1).max(20).optional(),kind:e.literal("player-card"),playerName:r,stats:e.array(e.object({label:e.string().trim().min(1).max(40),value:e.union([e.string().trim().min(1).max(80),e.number().finite()])})).min(1).max(8)}),playlist:s.extend({actions:e.array(y).max(2).optional(),cover:I.optional(),kind:e.literal("playlist"),tracks:e.array(e.object({action:y.optional(),artist:r,id:m,image:I.optional(),title:r})).min(1).max(20)}),productCard:s.extend({actions:e.array(y).max(3).optional(),kind:e.literal("product-card"),products:e.array(Ft).min(1).max(8),variant:ee.optional()}).superRefine((t,n)=>{let a=new Set;for(let[i,l]of t.products.entries())a.has(l.id)&&n.addIssue({code:"custom",message:`Duplicate product id "${l.id}"`,path:["products",i,"id"]}),a.add(l.id)}).describe("A commerce product presentation: one product renders an image-led spotlight, several render a store-style grid. Product facts (id, name, image, price, rating, availability) must come from tools or user data; never invent them."),purchaseComplete:s.extend({action:y.optional(),details:e.array(e.object({label:r,value:r})).max(8),kind:e.literal("purchase-complete"),paid:Zt.optional(),product:e.object({description:r.optional(),image:I.optional(),name:r})}),purchaseItems:s.extend({actions:e.array(y).max(3).optional(),currency:ae,items:e.array(e.object({description:r.optional(),id:m,image:I.optional(),name:r,price:e.number().finite().nonnegative().max(1e9).optional(),quantity:e.number().int().positive().max(1e4).optional()})).min(1).max(20),kind:e.literal("purchase-items"),totals:e.array(e.object({amount:e.number().finite().nonnegative().max(1e9),emphasis:e.boolean().optional(),label:r})).min(1).max(8)}),radar:s.extend({angleKey:c,data:e.array(L).min(3).max(50),kind:e.literal("radar-chart"),series:e.array(ne).min(1).max(5)}),radial:q.extend({endAngle:e.number().min(-360).max(360).optional(),kind:e.literal("radial-chart"),maxValue:e.number().positive().optional(),startAngle:e.number().min(-360).max(360).optional()}),recordCard:s.extend({actions:e.array(y).max(4).optional(),eyebrow:e.string().trim().max(100).optional(),fields:e.array(e.object({icon:R.optional(),label:r,tone:B.optional(),value:e.string().trim().min(1).max(500)})).max(12),image:e.object({alt:r,src:V}).optional(),kind:e.literal("record-card"),layout:_t.optional(),status:e.object({label:r,tone:B.optional()}).optional(),variant:ee.optional()}).superRefine((t,n)=>{t.layout==="media"&&!t.image&&n.addIssue({code:"custom",message:"The media record layout requires an image",path:["image"]}),t.layout==="compact"&&t.fields.length>4&&n.addIssue({code:"custom",message:"The compact record layout supports at most four fields",path:["fields"]})}),rideStatus:s.extend({driver:e.object({image:I.optional(),name:r}),eta:e.string().trim().min(1).max(80),kind:e.literal("ride-status"),pickup:r}),sankey:s.extend({format:C.optional(),kind:e.literal("sankey-chart"),links:e.array(e.object({source:m,target:m,value:e.number().positive()})).min(1).max(100),nodes:e.array(e.object({id:m,label:r})).min(2).max(40)}),scatter:Rt,steps:s.extend({kind:e.literal("steps"),steps:e.array(e.object({content:r.optional(),icon:R.optional(),id:m,image:I.optional().describe("A representative raster image for this step. Prefer this over icon for place itineraries when a trusted image URL is available."),meta:e.string().trim().max(100).optional(),progress:e.number().min(0).max(100).optional(),status:e.enum(["blocked","cancelled","completed","failed","in-progress","pending","complete","current","upcoming"]).optional(),timestamp:e.string().trim().max(100).optional(),title:r})).min(1).max(12),variant:e.enum(["steps","timeline"]).optional()}),sunburst:Mt,switches:s.extend({items:e.array(e.object({defaultSelected:e.boolean().optional(),description:r.optional(),id:m,label:r})).min(1).max(20),kind:e.literal("switch-group")}),table:s.extend({columns:e.array(e.object({format:C.optional(),key:c,label:r})).min(1).max(12),filterable:e.boolean().optional(),kind:e.literal("data-table"),rows:e.array(L).max(200),variant:e.enum(["primary","secondary"]).optional()}),tabs:s.extend({defaultValue:m.optional(),kind:e.literal("tabs"),tabs:e.array(e.union([e.object({children:e.never().optional(),content:M,id:m,label:r}),e.object({children:e.array(e.lazy(()=>le)).min(1).max(12),content:e.never().optional(),id:m,label:r})])).min(1).max(10),variant:e.enum(["primary","secondary"]).optional()}),tags:s.extend({kind:e.literal("tag-list"),tags:e.array(r).min(1).max(30)}),text:s.extend({content:M,kind:e.literal("text"),variant:e.enum(["card","clear"]).optional()}),toggles:s.extend({defaultValue:e.array(m).max(12).optional(),items:e.array(e.object({id:m,label:r})).min(1).max(12),kind:e.literal("toggle-group"),selectionMode:e.enum(["multiple","single"]).optional()}),viewEvent:s.extend({date:e.string().trim().min(1).max(80),kind:e.literal("view-event"),time:e.string().trim().min(1).max(80),tone:B.optional()}),weatherCurrent:s.extend({condition:X,details:e.array(e.object({label:r,value:r})).max(6).optional(),kind:e.literal("weather-current"),location:r,temperature:e.number().finite().min(-150).max(150),unit:Ae}),weatherForecast:s.extend({condition:X,forecast:e.array(e.object({condition:X,label:e.string().trim().min(1).max(40),temperature:e.number().finite().min(-150).max(150)})).min(2).max(10),high:e.number().finite().min(-150).max(150),kind:e.literal("weather-forecast"),location:r,low:e.number().finite().min(-150).max(150),unit:Ae})},$t=o.metricGrid,Yt=o.kpiGrid,Wt=o.line,Xt=o.area,Jt=o.bar,Qt=o.composed,en=o.pie,tn=o.donut,nn=o.radar,on=o.radial,an=o.sankey,rn=o.scatter,sn=o.heatmap,ln=o.candlestick,pn=o.funnel,mn=o.gauge,cn=o.sunburst,dn=o.table,un=o.comparison,gn=o.meterList,hn=o.form,fn=o.text,yn=o.callout,Cn=o.image,bn=o.map,xn=o.tags,An=o.list,kn=o.listBlock,In=o.accordion,Tn=o.steps,Sn=o.code,vn=o.diagram,jo=o.tabs.superRefine(st),wn=o.actions,_n=o.followup,En=o.switches,Nn=o.toggles,Rn=o.recordCard,Un=o.productCard,zn=o.flightTracker,On=o.createEvent,Ln=o.playlist,Gn=o.rideStatus,Mn=o.purchaseItems,jn=o.channelMessage,Bn=o.purchaseComplete,Dn=o.playerCard,Pn=o.viewEvent,Vn=o.eventSession,Kn=o.enableNotification,Zn=o.weatherForecast,Fn=o.weatherCurrent,Hn=e.discriminatedUnion("kind",[o.metricGrid,o.kpiGrid,o.line,o.area,o.bar,o.composed,o.pie,o.donut,o.radar,o.radial,o.sankey,o.scatter,o.heatmap,o.candlestick,o.funnel,o.gauge,o.sunburst,o.table,o.comparison,o.meterList]),we=s.extend({defaultValue:m.optional(),kind:e.literal("product-signals"),tabs:e.array(e.object({component:Hn,id:m,label:r})).min(2).max(4)}),qn=we.superRefine((t,n)=>{let a=new Set;for(let[i,l]of t.tabs.entries())a.has(l.id)&&n.addIssue({code:"custom",message:`Duplicate product signal tab id "${l.id}"`,path:["tabs",i,"id"]}),a.add(l.id);t.defaultValue&&!a.has(t.defaultValue)&&n.addIssue({code:"custom",message:"The default product signal must reference one of the tabs",path:["defaultValue"]})}),$n=e.discriminatedUnion("kind",[o.metricGrid,o.kpiGrid,o.line,o.area,o.bar,o.composed,o.pie,o.donut,o.radar,o.radial,o.sankey,o.scatter,o.heatmap,o.candlestick,o.funnel,o.gauge,o.sunburst,o.table,o.comparison,o.meterList,o.form,o.text,o.callout,o.image,o.map,o.tags,o.list,o.listBlock,o.accordion,o.steps,o.code,o.diagram,o.tabs,o.actions,o.followup,o.switches,o.toggles,o.recordCard,o.productCard,o.flightTracker,o.createEvent,o.playlist,o.rideStatus,o.purchaseItems,o.channelMessage,o.purchaseComplete,o.playerCard,o.viewEvent,o.eventSession,o.enableNotification,o.weatherForecast,o.weatherCurrent]);function Yn(t){if(!t)return;let n=new Set;for(let a of t){if(n.has(a.id))return a.id;n.add(a.id)}}var re=e.union([$n,qn]).superRefine((t,n)=>{let a=[];switch(t.kind){case"channel-message":a.push({items:t.attachments,path:"attachments"});break;case"create-event":a.push({items:t.events,path:"events"}),a.push({items:t.actions,path:"actions"});break;case"enable-notification":a.push({items:t.actions,path:"actions"});break;case"playlist":a.push({items:t.tracks,path:"tracks"}),a.push({items:t.actions,path:"actions"});break;case"purchase-items":a.push({items:t.items,path:"items"}),a.push({items:t.actions,path:"actions"});break;case"tabs":{st(t,n);break}default:break}for(let i of a){let l=Yn(i.items);l&&n.addIssue({code:"custom",message:`Duplicate ${i.path} id "${l}"`,path:[i.path]})}}),_e=s.extend({children:e.array(re).min(1).max(4),kind:e.literal("dashboard"),layout:e.enum(["chart-table","grid","metrics-chart","stack"])}),Wn=_e,Ee=e.union([re,Wn]),Bo=e.object({component:Ee}),J=6,D=48,Ne=new Set(["card","col","grid","item-card","item-card-group","row"]),Re=new Set(["divider","spacer"]),Ue=new Set(["badge","button","heading","icon","progress","rating"]),ze=Ne,Oe=Re,Le=Ue;function Ge(t){return Ne.has(t.kind)}function Me(t){return t.kind==="item-card"?[...t.left??[],...t.middle,...t.right??[]]:t.children}function Do(t){return Re.has(t.kind)}function Po(t){return Ue.has(t.kind)}var T=e.object({id:m}),ie=e.enum(["lg","md","none","sm"]),je=e.enum(["center","end","start","stretch"]),Be=e.enum(["between","center","end","start"]),$=e.array(e.lazy(()=>le)).min(1).max(D),De=T.extend({kind:e.literal("spacer"),size:e.enum(["auto","lg","md","sm"]).optional()}),Pe=T.extend({kind:e.literal("divider")}),Ve=T.extend({icon:R.optional(),kind:e.literal("heading"),level:e.union([e.literal(1),e.literal(2),e.literal(3),e.literal(4)]).optional(),text:r}),Ke=T.extend({icon:R.optional(),kind:e.literal("button"),label:r,prompt:e.string().trim().min(1).max(2e3).optional(),toolCall:Se.optional(),variant:oe.optional()}).refine(t=>!!(t.prompt??t.toolCall),{message:"Buttons need a prompt or a toolCall to do something when pressed"}),Ze=T.extend({kind:e.literal("badge"),label:r,tone:B.optional(),variant:e.enum(["soft","solid"]).optional()}),Fe=T.extend({kind:e.literal("icon"),name:R,size:e.enum(["lg","md","sm"]).optional(),tone:B.optional()}),He=T.extend({count:e.number().int().nonnegative().max(1e9).optional(),kind:e.literal("rating"),value:e.number().finite().min(0).max(5)}),qe=T.extend({kind:e.literal("progress"),label:r.optional(),value:e.number().finite().min(0).max(100)}),$e=e.enum(["default","outline","secondary","tertiary","transparent"]),Q=e.lazy(()=>le),Ye=s.extend({action:y.optional().describe("Makes the whole row pressable. Omit when a slot contains its own button or other interactive control."),isDisabled:e.boolean().optional(),isSelected:e.boolean().optional(),kind:e.literal("item-card"),left:e.array(Q).min(1).max(4).optional().describe("Leading slot. Prefer one icon node or a compact visual."),middle:e.array(Q).min(1).max(8).describe("Primary flexible slot. Prefer a level-4 heading followed by a clear text node for a title and description."),right:e.array(Q).min(1).max(4).optional().describe("Trailing slot. Prefer a badge, short value, icon, or button."),variant:$e.optional()}),Xn=new Set(["accordion","action-group","button","followup","form","map","switch-group","tabs","toggle-group"]);function We(t){for(let n of t)if(Xn.has(n.kind)||Ge(n)&&We(Me(n)))return!0;return!1}var se=Ye.superRefine((t,n)=>{t.action&&We([...t.left??[],...t.middle,...t.right??[]])&&n.addIssue({code:"custom",message:"A pressable item-card cannot contain buttons or other interactive descendants. Remove action from the card or move the nested control outside it."})}),Xe=s.extend({children:e.array(se).min(1).max(12),columns:e.union([e.literal(2),e.literal(3)]).optional(),kind:e.literal("item-card-group"),layout:e.enum(["grid","list"]).optional(),showHeader:e.boolean().optional(),variant:$e.optional()}),Je=Xe.superRefine((t,n)=>{t.columns&&t.layout!=="grid"&&n.addIssue({code:"custom",message:"Item-card group columns only apply when layout is grid.",path:["columns"]})}),Qe=T.extend({align:je.optional(),children:$,gap:ie.optional(),justify:Be.optional(),kind:e.literal("row")}),et=T.extend({align:je.optional(),children:$,gap:ie.optional(),justify:Be.optional(),kind:e.literal("col")}),tt=T.extend({children:$,columns:e.union([e.literal(1),e.literal(2),e.literal(3),e.literal(4)]),gap:ie.optional(),kind:e.literal("grid")}),nt=s.extend({children:$,kind:e.literal("card"),variant:ee.optional()}),ot=Qe,at=et,rt=tt,it=nt,le=e.union([re,De,Pe,Ve,Ke,Ze,Fe,He,qe,ot,at,rt,it,se,Je]);function Jn(t,n){to(t,n)}function Qn(t,n){let a=t.tabs.flatMap(i=>i.children??[]);a.length!==0&<(a,n,t.id,2,1)}function st(t,n){let a=new Set;for(let[i,l]of t.tabs.entries())a.has(l.id)&&n.addIssue({code:"custom",message:`Duplicate tab id "${l.id}"`,path:["tabs",i,"id"]}),a.add(l.id);t.defaultValue&&!a.has(t.defaultValue)&&n.addIssue({code:"custom",message:"The default tab must reference one of the tabs",path:["defaultValue"]}),Qn(t,n)}function eo(t){return Ge(t)?Me(t):t.kind==="tabs"?t.tabs.flatMap(n=>n.children??[]):[]}function lt(t,n,a,i=1,l=0){let d=new Set,f=l,h=l>0?i-1:0;a&&d.add(a);let U=(b,_)=>{if(f+=1,h=Math.max(h,_),d.has(b.id)&&n.addIssue({code:"custom",message:`Duplicate component id "${b.id}" in the composed UI tree. Every node needs a unique id.`}),d.add(b.id),!(_>J))for(let z of eo(b))U(z,_+1)};for(let b of t)U(b,i);h>J&&n.addIssue({code:"custom",message:`Composed UI trees can nest at most ${J} levels deep.`}),f>D&&n.addIssue({code:"custom",message:`Composed UI trees can contain at most ${D} components.`})}function to(t,n){lt([t],n)}var pt=e.union([ot,at,rt,it,se,Je]).superRefine(Jn),Vo=e.union([Ee,pt]),Ko=e.object({component:pt}),N=t=>e.array(e.unknown()).min(1).max(t).describe("Child nodes. Each is any catalog component; look its kind up separately."),Zo={accordion:In,"action-group":wn,"area-chart":Xt,badge:Ze,"bar-chart":Jt,button:Ke,callout:yn,"candlestick-chart":ln,card:nt.extend({children:N(D)}),"channel-message":jn,"code-block":Sn,col:et.extend({children:N(D)}),"comparison-list":un,"composed-chart":Qt,"create-event":On,dashboard:_e.extend({children:N(4)}),"data-table":dn,diagram:vn,divider:Pe,"donut-chart":tn,"enable-notification":Kn,"event-session":Vn,"flight-tracker":zn,followup:_n,form:hn,"funnel-chart":pn,"gauge-chart":mn,grid:tt.extend({children:N(D)}),heading:Ve,heatmap:sn,icon:Fe,image:Cn,"item-card":Ye.extend({left:N(4).optional().describe("Leading slot nodes."),middle:N(8).describe("Primary flexible slot nodes."),right:N(4).optional().describe("Trailing slot nodes.")}),"item-card-group":Xe.extend({children:e.array(e.unknown()).min(1).max(12).describe("One to twelve item-card children. Look up item-card for each child's schema.")}),"kpi-grid":Yt,"line-chart":Wt,list:An,"list-block":kn,map:bn,"meter-list":gn,"metric-grid":$t,"pie-chart":en,"player-card":Dn,playlist:Ln,"product-card":Un,"product-signals":we.extend({tabs:e.array(e.object({component:e.unknown().describe("One analytical component: metric-grid, kpi-grid, any chart, data-table, comparison-list, or meter-list. Look its kind up separately."),id:m,label:r})).min(2).max(4)}),progress:qe,"purchase-complete":Bn,"purchase-items":Mn,"radar-chart":nn,"radial-chart":on,rating:He,"record-card":Rn,"ride-status":Gn,row:Qe.extend({children:N(D)}),"sankey-chart":an,"scatter-chart":rn,spacer:De,steps:Tn,"sunburst-chart":cn,"switch-group":En,tabs:s.extend({defaultValue:m.optional(),kind:e.literal("tabs"),tabs:e.array(e.union([e.object({content:M,id:m,label:r}),e.object({children:N(12).describe("Rich panel nodes rendered as one vertical stack. Look up every child kind separately."),id:m,label:r})])).min(1).max(10),variant:e.enum(["primary","secondary"]).optional()}),"tag-list":xn,text:fn,"toggle-group":Nn,"view-event":Pn,"weather-current":Fn,"weather-forecast":Zn};var ct={accordion:"collapsible sections of longer prose","action-group":"buttons that send prompts or call client tools","area-chart":"one continuous time series with a filled trend",badge:"a small toned status label","bar-chart":"ranked or categorical comparison, horizontal layout for rankings",button:"one action with a prompt or client-tool call",callout:"one short toned notice: info, success, warning, or danger","candlestick-chart":"open-high-low-close price movement over ordered periods",card:"titled surface grouping related children","channel-message":"a quoted workspace message with author and attachments","code-block":"a syntax-highlighted snippet",col:"stacks children vertically","comparison-list":"labeled values with change deltas, no axes","composed-chart":"two to five mixed area/bar/line series, optional dual axis","create-event":"a proposed calendar slot beside surrounding events",dashboard:"up to four analytical children in a fixed layout","data-table":"exact values in filterable rows and columns",diagram:"a flowchart, sequence, ER, or state diagram from Mermaid source, for processes and relationships prose cannot show",divider:"a rule between sections","donut-chart":"proportions of a whole with a hollow center","enable-notification":"a binary notification opt-in with two actions","event-session":"a conference session with time, location, and speakers","flight-tracker":"a flight's route, times, and live progress",followup:"suggested next prompts the user can send",form:"input fields with submit actions","funnel-chart":"drop-off through ordered conversion or pipeline stages","gauge-chart":"one bounded value against its minimum and maximum",grid:"one to four equal columns of peers",heading:"a section title, levels one to four",heatmap:"two-dimensional intensity across x and y",icon:"one semantic glyph from the icon vocabulary",image:"one to six real image URLs with captions in a grid or horizontal chat gallery","item-card":"one compact three-slot row with composable left, middle, and right content","item-card-group":"one to twelve related item-card rows in a list or grid","kpi-grid":"up to four headline KPIs, each with a sparkline of its own history","line-chart":"overlapping series, a live signal, or one series split around a baseline",list:"bulleted, numbered, or checklist items with optional children","list-block":"richer rows with title, description, meta, rating, icon, or image",map:"ranked places pinned by exact latitude and longitude","meter-list":"bounded quantities such as quota, utilization, or budget","metric-grid":"up to four headline KPIs with no history to plot","pie-chart":"proportions of a whole","player-card":"an athlete with jersey, portrait, and stat lines",playlist:"a track collection with cover and per-track actions","product-card":"purchasable items with image, price, rating, availability","product-signals":"two to four related analytical views in tabs",progress:"a zero to one hundred percentage bar","purchase-complete":"confirmation after a successful transaction","purchase-items":"a cart or order summary with line items and totals","radar-chart":"multivariate comparison across three or more axes","radial-chart":"compact circular measure",rating:"a zero to five star score with optional count","record-card":"one entity's labeled facts, layouts details/compact/media","ride-status":"pickup ETA and driver for a ride in progress",row:"places complementary children side by side","sankey-chart":"flow volumes between source and target nodes","scatter-chart":"correlation between two numeric fields, optional grouping",spacer:"a gap between siblings",steps:"task progress or a chronological timeline, up to twelve entries","sunburst-chart":"hierarchical part-to-whole values across nested levels","switch-group":"toggleable boolean preferences",tabs:"parallel text or rich multi-component sections behind labeled tabs","tag-list":"short keyword chips",text:"explanatory markdown prose","toggle-group":"single or multiple choice from short options","view-event":"one calendar event's date, time, and tone","weather-current":"current conditions in one location","weather-forecast":"multi-day or future conditions with highs and lows"},no={actions:"actions","data-visualization":"data","display-information":"display","form-elements":"forms"};function oo(t){return t==="dashboard"||ze.has(t)?"containers":Oe.has(t)?"layout":Le.has(t)?"primitives":no[be[t]]??"display"}var mt=Object.fromEntries(Object.entries(ct).map(([t,n])=>[t,{group:oo(t),summary:n}])),pe=Object.keys(ct).sort(),ao=[["containers","Containers"],["layout","Layout"],["primitives","Primitives"],["data","Data"],["display","Content"],["actions","Actions"],["forms","Forms"]];function $o(){return ao.map(([n,a])=>{let i=pe.filter(l=>mt[l].group===n).map(l=>`${l} \u2014 ${mt[l].summary}`);return`${a}: ${i.join("; ")}.`}).join(`
|
|
2
|
+
`)}import{z as G}from"zod";var ro=["callMcpTool","composeUI","executeSandbox","getComponentSchema","renderComponent","searchKnowledge","searchMcpTools","searchWeb"],io="mcp_",so=20,lo=16*1024,po=G.object({description:G.string().trim().min(1).max(1e3),inputSchema:G.record(G.string(),G.unknown()),name:G.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/).refine(t=>!ro.includes(t)&&!t.toLowerCase().startsWith(io),"Client tool name is reserved by the HeroUI Agent runtime"),needsApproval:G.boolean().optional()}),Xo=G.array(po).max(so).superRefine((t,n)=>{let a=new Set;for(let i of t)a.has(i.name)&&n.addIssue({code:"custom",message:`Duplicate client tool name: ${i.name}`}),a.add(i.name);new TextEncoder().encode(JSON.stringify(t)).byteLength>lo&&n.addIssue({code:"custom",message:"Client tool manifest exceeds 16KB"})});import{z as p}from"zod";var K=6,dt="0.2.0-beta.15",Qo="https://api.heroui.pro";var mo=p.enum(["light","dark","system"]),co=p.enum(["outline","plain","surface","surface-secondary"]),uo=new Set(["[object object]","0","anonymous","distinct_id","distinctid","email","false","guest","id","nan","none","not_authenticated","null","true","undefined"]),me=p.string().trim().min(1).max(200).refine(t=>!uo.has(t.toLowerCase()),{message:"Identity id is reserved"}),go=p.discriminatedUnion("type",[p.object({id:me,type:p.literal("anonymous")}),p.object({id:me,type:p.literal("user")})]),ho=p.object({avatarUrl:p.string().trim().pipe(p.url()).optional(),email:p.string().trim().max(320).pipe(p.email()).optional(),name:p.string().trim().max(120).optional()}),oa=p.object({anonymousId:me.optional(),identity:go,profile:ho.optional()}),aa=p.object({expiresAt:p.number().int().positive(),token:p.string().trim().min(1)}),ra=p.object({agentId:p.string().trim().min(1).max(100),apiKeyId:p.string().trim().min(1).max(100),aud:p.literal("heroui-agent"),exp:p.number().int().positive(),iat:p.number().int().positive(),iss:p.literal("https://api.heroui.com"),jti:p.uuid(),protocolVersion:p.literal(6),sub:p.string().trim().min(1).max(200)}),ia={embed:"embed",preview:"preview"},sa=p.object({agentId:p.string(),minimumProtocolVersion:p.literal(6),name:p.string().trim().min(1).max(120),protocolVersion:p.literal(6),sdkVersion:p.string().default(dt),suggestedPrompts:p.array(p.string().trim().min(1).max(160)).max(5),surfaceVariant:co.default("plain"),theme:mo});import{z as k}from"zod";var ut=k.object({excerpt:k.string().trim().min(1).max(2e3).optional(),locator:k.string().trim().min(1).max(160).optional(),sourceId:k.string().trim().min(1).max(120)}),fo=k.string().trim().max(2048).refine(t=>{try{return["http:","https:"].includes(new URL(t).protocol)}catch{return!1}}),yo=k.union([ut.extend({sourceType:k.literal("document"),title:k.string().trim().min(1).max(200)}),ut.extend({sourceType:k.literal("url").optional(),title:k.string().trim().min(1).max(200).optional(),url:fo})]),ma=k.object({items:k.array(yo).min(1).max(16)});var ce=["moonshotai/Kimi-K3","openai/gpt-5.6-luna","openai/gpt-5.6-terra","openai/gpt-5.6-sol","google/gemini-3.7-flash","anthropic/claude-sonnet-5","anthropic/claude-opus-4.8"],Co={"google/gemini-3.5-flash":"google/gemini-3.7-flash","google/gemini-3.6-flash":"google/gemini-3.7-flash"};function de(t){return Co[t]??t}var da="google/gemini-3.7-flash",bo=[{description:"Flagship model for coding, reasoning, and knowledge work",id:"moonshotai/Kimi-K3",label:"Kimi K3",provider:"Moonshot AI",tier:"light"},{description:"Fast answers and lightweight agent workflows",id:"openai/gpt-5.6-luna",label:"GPT-5.6 Luna",provider:"OpenAI",tier:"light"},{description:"Balanced reasoning for everyday agent tasks",id:"openai/gpt-5.6-terra",label:"GPT-5.6 Terra",provider:"OpenAI",tier:"codegen"},{description:"Deep reasoning for complex, multi-step analysis",id:"openai/gpt-5.6-sol",label:"GPT-5.6 Sol",provider:"OpenAI",tier:"complex"},{description:"Fast multimodal analysis with a large context window",id:"google/gemini-3.7-flash",label:"Gemini 3.7 Flash",provider:"Google",tier:"light"},{description:"Strong agentic reasoning and polished UI decisions",id:"anthropic/claude-sonnet-5",label:"Claude Sonnet 5",provider:"Anthropic",tier:"codegen"},{description:"Highest-capability Claude for difficult research and analysis",id:"anthropic/claude-opus-4.8",label:"Claude Opus 4.8",provider:"Anthropic",tier:"complex"}],xo=new Set(ce);function ua(t){return typeof t=="string"&&xo.has(t)}function ga(t){let n=t?de(t):void 0;return bo.find(a=>a.id===n)?.tier??"light"}import{z as gt}from"zod";var Ca=gt.preprocess(t=>typeof t=="string"?de(t):t,gt.enum(ce));var xa="heroui-agent:runtime-timing",Aa="heroui_agent_turn_admitted",ka="getTurnAdmissionStatuses",Ia=50;import{z as g}from"zod";var Ao=["action_approved","action_declined","component_copy","component_export","component_followup","component_rendered","component_submit","component_tool","embed_loaded","failure","feedback_down","feedback_up","first_chunk","first_feedback_paint","first_server_content_paint","first_text_paint","message_copied","message_sent","opened","reconnected","retry","stopped","turn_completed","turn_stalled"],ko=["client-inactivity-watchdog","cloudflare-chat","message-send-failed","stream-error"],Io=["did_not_follow_instructions","incomplete","incorrect","not_relevant","other","unclear"],To=["client_stopped","conversation_deleted","provider_error","provider_rate_limited","provider_timeout","turn_deadline_exceeded","turn_stalled","unknown"],So=g.object({actionId:g.string().trim().min(1).max(256).optional(),componentId:g.string().trim().min(1).max(256).optional(),componentType:g.enum(pe).optional(),feedbackComment:g.string().trim().max(1e3).optional(),feedbackCommentLength:g.number().int().min(0).max(1e3).optional(),feedbackReasons:g.array(g.enum(Io)).max(6).optional(),format:g.enum(["csv","json","png","svg","text"]).optional(),hasFeedbackComment:g.boolean().optional(),hasToolName:g.boolean().optional(),latencyMs:g.number().finite().min(0).max(1800*1e3).optional(),latencyOrigin:g.literal("user_submit").optional(),messageId:g.string().trim().min(1).max(256).optional(),protocolVersion:g.literal(6).optional(),sdkVersion:g.string().trim().min(1).max(80).optional(),source:g.enum(ko).optional(),toolName:g.string().trim().min(1).max(160).optional()}).strict(),wa=g.object({conversationId:g.string().uuid(),event:g.enum(Ao),properties:So.default({})}).strict(),_a=g.enum(To);export{ia as AGENT_CONVERSATION_SOURCE,ce as AGENT_MODEL_IDS,bo as AGENT_MODEL_OPTIONS,mt as AGENT_UI_CATALOG,ze as AGENT_UI_CONTAINER_KINDS,pe as AGENT_UI_KIND_NAMES,Zo as AGENT_UI_KIND_SCHEMAS,Oe as AGENT_UI_LAYOUT_LEAF_KINDS,Le as AGENT_UI_PRIMITIVE_KINDS,J as COMPOSED_UI_MAX_DEPTH,D as COMPOSED_UI_MAX_NODES,da as DEFAULT_AGENT_PICKER_MODEL_ID,Qo as HEROUI_AGENT_API_BASE_URL,_o as HEROUI_AGENT_ATTACHMENT_ACCEPT,he as HEROUI_AGENT_ATTACHMENT_CONTENT_TYPES,ht as HEROUI_AGENT_ATTACHMENT_EXTENSION_BY_CONTENT_TYPE,wo as HEROUI_AGENT_ATTACHMENT_MAX_BYTES,Ao as HEROUI_AGENT_EMBED_EVENT_NAMES,ko as HEROUI_AGENT_EMBED_EVENT_SOURCES,Io as HEROUI_AGENT_FEEDBACK_REASONS,vo as HEROUI_AGENT_MAX_ATTACHMENTS,K as HEROUI_AGENT_PROTOCOL_VERSION,ye as HEROUI_AGENT_REMOTE_CONFIG_VERSION,xa as HEROUI_AGENT_RUNTIME_TIMING_EVENT,dt as HEROUI_AGENT_SDK_VERSION,Eo as HEROUI_AGENT_TEXT_ATTACHMENT_CONTENT_TYPES,Ia as HEROUI_AGENT_TURN_ADMISSION_STATUS_MAX_IDS,ka as HEROUI_AGENT_TURN_ADMISSION_STATUS_METHOD,Aa as HEROUI_AGENT_TURN_ADMITTED_FRAME_TYPE,To as HEROUI_AGENT_TURN_ERROR_CODES,Co as LEGACY_AGENT_MODEL_IDS,so as MAX_CLIENT_TOOLS,lo as MAX_CLIENT_TOOLS_BYTES,ro as RESERVED_AGENT_TOOL_NAMES,io as RESERVED_AGENT_TOOL_PREFIX,In as accordionComponentSchema,wn as actionGroupComponentSchema,go as agentAuthIdentitySchema,ho as agentAuthProfileSchema,aa as agentAuthTokenSchema,Tt as agentIconNames,R as agentIconSchema,me as agentIdentityIdSchema,Ca as agentModelIdSchema,sa as agentProjectConfigSchema,yo as agentSourceSchema,ma as agentSourcesSchema,co as agentSurfaceVariantSchema,mo as agentThemeSchema,ra as agentTokenClaimsSchema,Ee as agentUIComponentSchema,re as agentUILeafComponentSchema,le as agentUINodeSchema,Vo as agentUIRenderableSchema,Hn as analyticalLeafComponentSchema,Xt as areaChartComponentSchema,Ze as badgeComponentSchema,Jt as barChartComponentSchema,Ke as buttonComponentSchema,yn as calloutComponentSchema,ln as candlestickChartComponentSchema,it as cardComponentSchema,ee as cardComponentVariantSchema,jn as channelMessageComponentSchema,w as chartColorSchema,po as clientToolManifestEntrySchema,Xo as clientToolsSchema,Sn as codeBlockComponentSchema,at as colComponentSchema,un as comparisonListComponentSchema,Ko as composeUIInputSchema,Qt as composedChartComponentSchema,pt as composedUIComponentSchema,oa as createAgentAuthTokenRequestSchema,On as createEventComponentSchema,Wn as dashboardComponentSchema,dn as dataTableComponentSchema,vn as diagramComponentSchema,Pe as dividerComponentSchema,tn as donutChartComponentSchema,Kn as enableNotificationComponentSchema,Vn as eventSessionComponentSchema,zn as flightTrackerComponentSchema,_n as followupComponentSchema,hn as formComponentSchema,pn as funnelChartComponentSchema,mn as gaugeChartComponentSchema,ga as getAgentModelTier,Me as getAgentUIContainerChildren,rt as gridComponentSchema,Ve as headingComponentSchema,sn as heatmapComponentSchema,So as heroUIAgentEmbedEventPropertiesSchema,wa as heroUIAgentEmbedEventSchema,_a as heroUIAgentTurnErrorCodeSchema,Fe as iconComponentSchema,Cn as imageComponentSchema,ua as isAgentModelId,Ge as isAgentUIContainerComponent,Do as isAgentUILayoutLeafComponent,Po as isAgentUIPrimitiveComponent,fe as isHeroUIAgentAttachmentContentType,se as itemCardComponentSchema,Je as itemCardGroupComponentSchema,Yt as kpiGridComponentSchema,Wt as lineChartComponentSchema,kn as listBlockComponentSchema,An as listComponentSchema,bn as mapComponentSchema,gn as meterListComponentSchema,$t as metricGridComponentSchema,C as numberFormatSchema,Uo as parseAgentRemoteConfig,en as pieChartComponentSchema,Dn as playerCardComponentSchema,Ln as playlistComponentSchema,Un as productCardComponentSchema,qn as productSignalsComponentSchema,qe as progressComponentSchema,Bn as purchaseCompleteComponentSchema,Mn as purchaseItemsComponentSchema,nn as radarChartComponentSchema,on as radialChartComponentSchema,He as ratingComponentSchema,Rn as recordCardComponentSchema,_t as recordCardLayoutSchema,$o as renderAgentUICatalogPrompt,Bo as renderComponentInputSchema,de as resolveAgentModelId,Gn as rideStatusComponentSchema,ot as rowComponentSchema,an as sankeyChartComponentSchema,rn as scatterChartComponentSchema,De as spacerComponentSchema,Tn as stepsComponentSchema,cn as sunburstChartComponentSchema,En as switchGroupComponentSchema,jo as tabsComponentSchema,xn as tagListComponentSchema,fn as textComponentSchema,Nn as toggleGroupComponentSchema,Pn as viewEventComponentSchema,X as weatherConditionSchema,St as weatherConditions,Fn as weatherCurrentComponentSchema,Zn as weatherForecastComponentSchema};
|