@heroui/agent 1.0.0-beta.3 → 1.0.0-beta.5
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 +19 -0
- package/README.md +119 -68
- package/dist/chunk-6O4WPQKO.js +1 -0
- package/dist/chunk-7OTMWVOC.js +1 -0
- package/dist/chunk-KGJ6UDTY.js +1 -0
- package/dist/chunk-PKCBDTYR.js +1 -0
- package/dist/chunk-PX3X4VP2.js +1 -0
- package/dist/chunk-SWO2ABN5.js +1 -0
- package/dist/client-tools-manifest-62CRLCZY.js +1 -0
- package/dist/css/index.css +1 -2
- package/dist/index.d.ts +9 -712
- package/dist/index.js +1 -1
- package/dist/internal/host.d.ts +108 -0
- package/dist/internal/host.js +1 -0
- package/dist/internal/shared.d.ts +63 -0
- package/dist/internal/shared.js +1 -0
- package/dist/next.d.ts +3 -4
- package/dist/next.js +1 -1
- package/dist/persistence-YI6JSYCT.js +1 -0
- package/dist/server.d.ts +21 -2
- package/dist/server.js +1 -1
- package/dist/types-BdAn3HPv.d.ts +667 -0
- package/dist/version-CIfRqjWe.d.ts +5 -0
- package/package.json +18 -34
- package/dist/chart-content-YGW25P3Z.js +0 -1
- package/dist/chunk-4JEZZR5J.js +0 -1
- package/dist/chunk-6RWQT7JH.js +0 -2
- package/dist/chunk-6ZJJN322.js +0 -1
- package/dist/chunk-7CUSOLDM.js +0 -5
- package/dist/chunk-7KCGPNEN.js +0 -1
- package/dist/chunk-CLHBM3HQ.js +0 -1
- package/dist/chunk-CR3H7AVI.js +0 -1
- package/dist/chunk-E43KPTLS.js +0 -2
- package/dist/chunk-HCLXS4HQ.js +0 -1
- package/dist/chunk-JTZX5KVY.js +0 -1
- package/dist/chunk-KQTLIOZ3.js +0 -1
- package/dist/chunk-M22IGTLZ.js +0 -1
- package/dist/chunk-MXXCR5SR.js +0 -1
- package/dist/chunk-PZJ4NC3J.js +0 -1
- package/dist/chunk-RNNGE7KM.js +0 -1
- package/dist/chunk-T4VDCNDW.js +0 -1
- package/dist/chunk-UHHKMESI.js +0 -1
- package/dist/component-renderer-KWBZJPBV.js +0 -1
- package/dist/composer-draft-NSKK65F3.js +0 -1
- package/dist/composer-image-draft-KAGTNQR7.js +0 -1
- package/dist/contracts.d.ts +0 -1683
- package/dist/contracts.js +0 -2
- package/dist/embed-runtime-YK64GOPA.js +0 -5
- package/dist/identity-CAJPsGqJ.d.ts +0 -101
- package/dist/interactive-map-surface-WC2LPCR7.js +0 -1
- package/dist/internal/client-tools.js +0 -1
- package/dist/internal/models.js +0 -1
- package/dist/internal/runtime.js +0 -1
- package/dist/internal/theme.js +0 -1
- package/dist/model-picker-QTI5TDBG.js +0 -1
- package/dist/shell-permission-picker-KIC3VEYJ.js +0 -1
package/dist/contracts.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var wo=5,_o=10485760,fe={"application/epub+zip":"epub","application/json":"json","application/msword":"doc","application/pdf":"pdf","application/rtf":"rtf","application/vnd.ms-excel":"xls","application/vnd.ms-excel.sheet.binary.macroenabled.12":"xlsb","application/vnd.ms-excel.sheet.macroenabled.12":"xlsm","application/vnd.ms-powerpoint":"ppt","application/vnd.ms-powerpoint.presentation.macroenabled.12":"pptm","application/vnd.ms-word.document.macroenabled.12":"docm","application/vnd.oasis.opendocument.presentation":"odp","application/vnd.oasis.opendocument.spreadsheet":"ods","application/vnd.oasis.opendocument.text":"odt","application/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","image/gif":"gif","image/jpeg":"jpg","image/png":"png","image/webp":"webp","text/csv":"csv","text/html":"html","text/markdown":"md","text/plain":"txt","text/rtf":"rtf","text/tab-separated-values":"tsv"},ye=Object.freeze(Object.keys(fe)),Eo=ye.join(","),yt=Object.freeze({...Object.fromEntries(Object.entries(fe).map(([t,n])=>[n,t])),htm:"text/html",xhtml:"text/html"}),Ct=new Set(ye),No=new Set(["application/json","text/csv","text/markdown","text/plain","text/tab-separated-values"]);function Y(t){return Ct.has(t.trim().toLowerCase())}function Ro(t,n){let a=t.trim().toLowerCase();if(Y(a))return a;let i=n.trim().toLowerCase().match(/\.([a-z0-9]+)$/)?.[1];return i?yt[i]??null:null}var Ce=1,u=Symbol("invalid");function P(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function I(t){if(t!==void 0)return typeof t=="string"?t:u}function w(t){if(t!==void 0)return typeof t=="boolean"?t:u}function W(t){if(t!==void 0)return typeof t=="number"&&Number.isFinite(t)?t:u}function S(t){return n=>{if(n!==void 0)return typeof n=="string"&&t.includes(n)?n:u}}function be(t){if(t===void 0)return;if(typeof t=="string")return t;if(!P(t))return u;let n=I(t.dark),a=I(t.light);return n===u||a===u?u:{...n===void 0?{}:{dark:n},...a===void 0?{}:{light:a}}}function bt(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 xt(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 N(t){return t===u?void 0:t}var At=["accent","background","foreground","overlay","surface","surfaceSecondary","tooltip"];function kt(t){return x(t,{componentSurfaceVariant:S(["outline","plain","surface","surface-secondary"]),launcher:n=>n===void 0?void 0:x(n,{background:be,icon:I,position:S(["bottom-left","bottom-right"]),style:bt}),panel:n=>n===void 0?void 0:x(n,{expandable:w,expanded:w,initialHeight:a=>a===void 0||typeof a=="string"?a:W(a),initialWidth:a=>a===void 0||typeof a=="string"?a:W(a)}),surfaceVariant:S(["outline","plain","surface","surface-secondary"]),theme:n=>n===void 0?void 0:x(n,{colorScheme:S(["dark","light","system"]),colors:a=>a===void 0?void 0:x(a,Object.fromEntries(At.map(i=>[i,be]))),designTheme:S(["base","brutalism","glass","mouve"]),radius:S(["pill","round","sharp","soft"]),typography:a=>a===void 0?void 0:x(a,{baseSize:W,fontFamily:I})}),viewMode:S(["floating","sidebar"])})}function It(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"&&Y(i));return a.length===n.length?a:u},defaultModel:I,dictation:w,disclaimer:n=>n===!1?!1:I(n),modelPicker:w,placeholder:I})}function Tt(t){return x(t,{animated:n=>{if(n===void 0||n===!1)return n;if(!P(n))return u;let a=S(["blurIn","fadeIn","slideUp"])(n.animation);return a===u||a===void 0?u:{...n,animation:a}},caret:n=>n===!1?!1:S(["block","circle"])(n)})}function vt(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 Oo(t){if(!P(t)||t.version!==Ce)return null;let n=t.revision;if(typeof n!="string"||!n)return null;let a=N(kt(t.appearance)),i=N(x(t.capabilities,{imageSearch:w,newsSearch:w,webSearch:w})),l=N(It(t.composer)),d=N(Tt(t.markdown)),f=N(x(t.permissions,{defaultMode:S(["ask","auto","full"]),showPicker:w})),h=N(vt(t.responseActions)),z=N(w(t.showBetaBadge)),b=N(x(t.startScreen,{greeting:I,promptShortcuts:w,prompts:xt,subtitle:I})),E=N(x(t.webfont,{familyName:O=>typeof O=="string"&&O?O:u,fontFaceUrl:I,stylesheetUrl:I}));return{...a?{appearance:a}:{},...i?{capabilities:i}:{},...l?{composer:l}:{},...d?{markdown:d}:{},...f?{permissions:f}:{},...h===void 0?{}:{responseActions:h},...z===void 0?{}:{showBetaBadge:z},...b?{startScreen:b}:{},...E?{webfont:E}:{},revision:n,version:Ce}}var xe={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 Ae(t){return{maximum:t.max??(t.format?.style==="percent"?1:100),minimum:t.min??0}}var St=["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"],wt=["clear","partly-cloudy","cloudy","fog","drizzle","rain","snow","thunderstorm","windy","unknown"],_t=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}$/),X=e.string().regex(/^(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/),Et=e.union([e.string().max(500),e.number(),e.boolean(),e.null()]),L=e.record(e.string().max(80),Et),s=e.object({description:r.optional(),id:m,title:_t}),te=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."),Nt=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")})]),_=e.enum(["accent","chart-1","chart-2","chart-3","chart-4","chart-5","danger","default","success","warning"]),Te=e.record(e.string().trim().min(1).max(80),_).refine(t=>Object.keys(t).length<=50,"At most 50 category colors are allowed"),oe=e.object({color:_.optional(),dataKey:c,format:C.optional(),label:r}),Rt=oe.extend({axis:e.enum(["left","right"]).optional(),stacked:e.boolean().optional(),type:e.enum(["area","bar","line"])}),Ut=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(Ut).min(2).max(8).optional(),series:e.array(oe).min(1).max(5),showSummary:e.boolean().optional(),xKey:c}),$=s.extend({colors:Te.optional(),data:e.array(L).min(1).max(50),format:C.optional(),labelKey:c,valueKey:c}),zt=s.extend({colors:Te.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}),Ot=s.extend({color:_.optional(),data:e.array(L).min(1).max(400),format:C.optional(),kind:e.literal("heatmap"),valueKey:c,xKey:c,yKey:c}),Lt=H.extend({baseline:e.number().finite().optional(),kind:e.literal("line-chart"),mode:e.enum(["live","profit-loss","standard"]).optional(),negativeColor:_.optional(),positiveColor:_.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"]})}),Gt=s.extend({closeKey:c,data:e.array(L).min(1).max(200),downColor:_.optional(),format:C.optional(),highKey:c,kind:e.literal("candlestick-chart"),lowKey:c,openKey:c,upColor:_.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(he=>typeof he!="number"||!Number.isFinite(he))){n.addIssue({code:"custom",message:"Every candlestick row needs finite open, high, low, and close values",path:["data",a]});continue}let b=l,E=d,O=f,ge=h;(O>Math.min(b,ge)||E<Math.max(b,ge)||O>E)&&n.addIssue({code:"custom",message:"Candlestick low/high values must contain the open and close values",path:["data",a]})}}),Mt=$.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]})}),jt=s.extend({color:_.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}=Ae(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"]})}),ve=e.lazy(()=>e.object({children:e.array(ve).min(1).max(12).optional(),color:_.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"]})})),Bt=s.extend({data:ve,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(z=>d(z,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}),Dt=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()},Pt=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:Dt.optional(),kind:e.literal("date-range-picker"),max:j.optional(),min:j.optional()}),e.object({...A,defaultValue:X.optional(),hourCycle:e.union([e.literal(12),e.literal(24)]).optional(),kind:e.literal("time-field"),max:X.optional(),min:X.optional()})]),ae=e.enum(["danger","outline","primary","secondary","tertiary"]),U=e.enum(St),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:ae.optional()}),we=e.object({latitude:e.number().finite().min(-85.051129).max(85.051129),longitude:e.number().finite().min(-180).max(180)}),ne=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"}),Vt=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:ae.optional()},Kt=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"),Zt=e.discriminatedUnion("kind",[e.object({...F,href:Kt,kind:e.literal("call")}),e.object({...F,href:ne,kind:e.literal("directions")}),e.object({...F,href:Vt,kind:e.literal("other")}),e.object({...F,href:ne,kind:e.literal("website")})]),Ft=we.extend({actions:e.array(Zt).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:ne})).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"}),T=e.object({alt:r,src:V.refine(t=>!t.split(/[?#]/,1)[0]?.toLowerCase().endsWith(".svg"),"Response-composition images must be raster images")}),re=e.string().regex(/^[A-Z]{3}$/),Ht=e.object({amount:e.number().finite().nonnegative().max(1e9),currency:re}),J=e.enum(wt),ke=e.enum(["celsius","fahrenheit"]),Ie=e.object({label:r,status:r.optional(),time:e.string().trim().min(1).max(80)}),B=e.enum(["accent","danger","default","muted","success","warning"]),$t=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:re.optional()}),rating:e.object({count:e.number().int().nonnegative().max(1e9).optional(),value:e.number().finite().min(0).max(5)}).optional()}),qt=e.enum(["accent","danger","default","success","warning"]),Yt=e.object({description:r.optional(),format:C.optional(),id:m,label:r,max:e.number().optional(),min:e.number().optional(),tone:qt.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:U.optional(),kind:e.literal("callout"),tone:e.enum(["accent","danger","neutral","success","warning"]).optional()}),candlestick:Gt,channelMessage:s.extend({attachments:e.array(e.object({id:m,image:T.optional(),name:r})).max(8).optional(),author:e.object({image:T.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(Rt).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:$.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:T.optional(),name:r,role:r})).max(8),time:e.string().trim().min(1).max(80)}),flightTracker:s.extend({airline:e.object({logo:T.optional(),name:r}),date:e.string().trim().min(1).max(80),destination:Ie,flightNumber:e.string().trim().min(1).max(40),kind:e.literal("flight-tracker"),origin:Ie,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(Pt).min(1).max(20),kind:e.literal("form")}),funnel:Mt,gauge:jt,heatmap:Ot,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:_.optional(),format:C.optional(),icon:U.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:Lt,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:U.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(Ft).min(1).max(12),viewport:e.object({center:we,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(Yt).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:U.optional(),label:r,value:e.number()})).min(1).max(4)}),pie:$.extend({kind:e.literal("pie-chart")}),playerCard:s.extend({backgroundImage:T.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:T.optional(),kind:e.literal("playlist"),tracks:e.array(e.object({action:y.optional(),artist:r,id:m,image:T.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($t).min(1).max(8),variant:te.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:Ht.optional(),product:e.object({description:r.optional(),image:T.optional(),name:r})}),purchaseItems:s.extend({actions:e.array(y).max(3).optional(),currency:re,items:e.array(e.object({description:r.optional(),id:m,image:T.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(oe).min(1).max(5)}),radial:$.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:U.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:Nt.optional(),status:e.object({label:r,tone:B.optional()}).optional(),variant:te.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:T.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:zt,steps:s.extend({kind:e.literal("steps"),steps:e.array(e.object({content:r.optional(),icon:U.optional(),id:m,image:T.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:Bt,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(()=>pe)).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:J,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:ke}),weatherForecast:s.extend({condition:J,forecast:e.array(e.object({condition:J,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:ke})},Wt=o.metricGrid,Xt=o.kpiGrid,Jt=o.line,Qt=o.area,en=o.bar,tn=o.composed,nn=o.pie,on=o.donut,an=o.radar,rn=o.radial,sn=o.sankey,ln=o.scatter,pn=o.heatmap,mn=o.candlestick,cn=o.funnel,dn=o.gauge,un=o.sunburst,gn=o.table,hn=o.comparison,fn=o.meterList,yn=o.form,Cn=o.text,bn=o.callout,xn=o.image,An=o.map,kn=o.tags,In=o.list,Tn=o.listBlock,vn=o.accordion,Sn=o.steps,wn=o.code,_n=o.diagram,Do=o.tabs.superRefine(lt),En=o.actions,Nn=o.followup,Rn=o.switches,Un=o.toggles,zn=o.recordCard,On=o.productCard,Ln=o.flightTracker,Gn=o.createEvent,Mn=o.playlist,jn=o.rideStatus,Bn=o.purchaseItems,Dn=o.channelMessage,Pn=o.purchaseComplete,Vn=o.playerCard,Kn=o.viewEvent,Zn=o.eventSession,Fn=o.enableNotification,Hn=o.weatherForecast,$n=o.weatherCurrent,qn=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]),_e=s.extend({defaultValue:m.optional(),kind:e.literal("product-signals"),tabs:e.array(e.object({component:qn,id:m,label:r})).min(2).max(4)}),Yn=_e.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"]})}),Wn=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 Xn(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 ie=e.union([Wn,Yn]).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":{lt(t,n);break}default:break}for(let i of a){let l=Xn(i.items);l&&n.addIssue({code:"custom",message:`Duplicate ${i.path} id "${l}"`,path:[i.path]})}}),Ee=s.extend({children:e.array(ie).min(1).max(4),kind:e.literal("dashboard"),layout:e.enum(["chart-table","grid","metrics-chart","stack"])}),Jn=Ee,Ne=e.union([ie,Jn]),Po=e.object({component:Ne}),Q=6,D=48,Re=new Set(["card","col","grid","item-card","item-card-group","row"]),Ue=new Set(["divider","spacer"]),ze=new Set(["badge","button","heading","icon","progress","rating"]),Oe=Re,Le=Ue,Ge=ze;function Me(t){return Re.has(t.kind)}function je(t){return t.kind==="item-card"?[...t.left??[],...t.middle,...t.right??[]]:t.children}function Vo(t){return Ue.has(t.kind)}function Ko(t){return ze.has(t.kind)}var v=e.object({id:m}),se=e.enum(["lg","md","none","sm"]),Be=e.enum(["center","end","start","stretch"]),De=e.enum(["between","center","end","start"]),q=e.array(e.lazy(()=>pe)).min(1).max(D),Pe=v.extend({kind:e.literal("spacer"),size:e.enum(["auto","lg","md","sm"]).optional()}),Ve=v.extend({kind:e.literal("divider")}),Ke=v.extend({icon:U.optional(),kind:e.literal("heading"),level:e.union([e.literal(1),e.literal(2),e.literal(3),e.literal(4)]).optional(),text:r}),Ze=v.extend({icon:U.optional(),kind:e.literal("button"),label:r,prompt:e.string().trim().min(1).max(2e3).optional(),toolCall:Se.optional(),variant:ae.optional()}).refine(t=>!!(t.prompt??t.toolCall),{message:"Buttons need a prompt or a toolCall to do something when pressed"}),Fe=v.extend({kind:e.literal("badge"),label:r,tone:B.optional(),variant:e.enum(["soft","solid"]).optional()}),He=v.extend({kind:e.literal("icon"),name:U,size:e.enum(["lg","md","sm"]).optional(),tone:B.optional()}),$e=v.extend({count:e.number().int().nonnegative().max(1e9).optional(),kind:e.literal("rating"),value:e.number().finite().min(0).max(5)}),qe=v.extend({kind:e.literal("progress"),label:r.optional(),value:e.number().finite().min(0).max(100)}),Ye=e.enum(["default","outline","secondary","tertiary","transparent"]),ee=e.lazy(()=>pe),We=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(ee).min(1).max(4).optional().describe("Leading slot. Prefer one icon node or a compact visual."),middle:e.array(ee).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(ee).min(1).max(4).optional().describe("Trailing slot. Prefer a badge, short value, icon, or button."),variant:Ye.optional()}),Qn=new Set(["accordion","action-group","button","followup","form","map","switch-group","tabs","toggle-group"]);function Xe(t){for(let n of t)if(Qn.has(n.kind)||Me(n)&&Xe(je(n)))return!0;return!1}var le=We.superRefine((t,n)=>{t.action&&Xe([...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."})}),Je=s.extend({children:e.array(le).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:Ye.optional()}),Qe=Je.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"]})}),et=v.extend({align:Be.optional(),children:q,gap:se.optional(),justify:De.optional(),kind:e.literal("row")}),tt=v.extend({align:Be.optional(),children:q,gap:se.optional(),justify:De.optional(),kind:e.literal("col")}),nt=v.extend({children:q,columns:e.union([e.literal(1),e.literal(2),e.literal(3),e.literal(4)]),gap:se.optional(),kind:e.literal("grid")}),ot=s.extend({children:q,kind:e.literal("card"),variant:te.optional()}),at=et,rt=tt,it=nt,st=ot,pe=e.union([ie,Pe,Ve,Ke,Ze,Fe,He,$e,qe,at,rt,it,st,le,Qe]);function eo(t,n){oo(t,n)}function to(t,n){let a=t.tabs.flatMap(i=>i.children??[]);a.length!==0&&pt(a,n,t.id,2,1)}function lt(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"]}),to(t,n)}function no(t){return Me(t)?je(t):t.kind==="tabs"?t.tabs.flatMap(n=>n.children??[]):[]}function pt(t,n,a,i=1,l=0){let d=new Set,f=l,h=l>0?i-1:0;a&&d.add(a);let z=(b,E)=>{if(f+=1,h=Math.max(h,E),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),!(E>Q))for(let O of no(b))z(O,E+1)};for(let b of t)z(b,i);h>Q&&n.addIssue({code:"custom",message:`Composed UI trees can nest at most ${Q} levels deep.`}),f>D&&n.addIssue({code:"custom",message:`Composed UI trees can contain at most ${D} components.`})}function oo(t,n){pt([t],n)}var mt=e.union([at,rt,it,st,le,Qe]).superRefine(eo),Zo=e.union([Ne,mt]),Fo=e.object({component:mt}),R=t=>e.array(e.unknown()).min(1).max(t).describe("Child nodes. Each is any catalog component; look its kind up separately."),Ho={accordion:vn,"action-group":En,"area-chart":Qt,badge:Fe,"bar-chart":en,button:Ze,callout:bn,"candlestick-chart":mn,card:ot.extend({children:R(D)}),"channel-message":Dn,"code-block":wn,col:tt.extend({children:R(D)}),"comparison-list":hn,"composed-chart":tn,"create-event":Gn,dashboard:Ee.extend({children:R(4)}),"data-table":gn,diagram:_n,divider:Ve,"donut-chart":on,"enable-notification":Fn,"event-session":Zn,"flight-tracker":Ln,followup:Nn,form:yn,"funnel-chart":cn,"gauge-chart":dn,grid:nt.extend({children:R(D)}),heading:Ke,heatmap:pn,icon:He,image:xn,"item-card":We.extend({left:R(4).optional().describe("Leading slot nodes."),middle:R(8).describe("Primary flexible slot nodes."),right:R(4).optional().describe("Trailing slot nodes.")}),"item-card-group":Je.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":Xt,"line-chart":Jt,list:In,"list-block":Tn,map:An,"meter-list":fn,"metric-grid":Wt,"pie-chart":nn,"player-card":Vn,playlist:Mn,"product-card":On,"product-signals":_e.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":Pn,"purchase-items":Bn,"radar-chart":an,"radial-chart":rn,rating:$e,"record-card":zn,"ride-status":jn,row:et.extend({children:R(D)}),"sankey-chart":sn,"scatter-chart":ln,spacer:Pe,steps:Sn,"sunburst-chart":un,"switch-group":Rn,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:R(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":kn,text:Cn,"toggle-group":Un,"view-event":Kn,"weather-current":$n,"weather-forecast":Hn};var dt={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"},ao={actions:"actions","data-visualization":"data","display-information":"display","form-elements":"forms"};function ro(t){return t==="dashboard"||Oe.has(t)?"containers":Le.has(t)?"layout":Ge.has(t)?"primitives":ao[xe[t]]??"display"}var ct=Object.fromEntries(Object.entries(dt).map(([t,n])=>[t,{group:ro(t),summary:n}])),me=Object.keys(dt).sort(),io=[["containers","Containers"],["layout","Layout"],["primitives","Primitives"],["data","Data"],["display","Content"],["actions","Actions"],["forms","Forms"]];function Wo(){return io.map(([n,a])=>{let i=me.filter(l=>ct[l].group===n).map(l=>`${l} \u2014 ${ct[l].summary}`);return`${a}: ${i.join("; ")}.`}).join(`
|
|
2
|
-
`)}import{z as G}from"zod";var so=["callMcpTool","composeUI","executeSandbox","generateFile","getComponentSchema","renderComponent","searchKnowledge","searchMcpTools","searchWeb"],lo="mcp_",po=20,mo=16*1024,co=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=>!so.includes(t)&&!t.toLowerCase().startsWith(lo),"Client tool name is reserved by the HeroUI Agent runtime"),needsApproval:G.boolean().optional()}),Qo=G.array(co).max(po).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>mo&&n.addIssue({code:"custom",message:"Client tool manifest exceeds 16KB"})});import{z as p}from"zod";var K=6,ut="1.0.0-beta.3",ta="https://api.heroui.pro";var uo=p.enum(["light","dark","system"]),gt=p.enum(["outline","plain","surface","surface-secondary"]),go=new Set(["[object object]","0","anonymous","distinct_id","distinctid","email","false","guest","id","nan","none","not_authenticated","null","true","undefined"]),ce=p.string().trim().min(1).max(200).refine(t=>!go.has(t.toLowerCase()),{message:"Identity id is reserved"}),ho=p.discriminatedUnion("type",[p.object({id:ce,type:p.literal("anonymous")}),p.object({id:ce,type:p.literal("user")})]),fo=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()}),ra=p.object({anonymousId:ce.optional(),identity:ho,profile:fo.optional()}),ia=p.object({expiresAt:p.number().int().positive(),token:p.string().trim().min(1)}),sa=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)}),la={embed:"embed",preview:"preview"},pa=p.object({agentId:p.string(),componentSurfaceVariant:gt.default("surface"),minimumProtocolVersion:p.literal(6),name:p.string().trim().min(1).max(120),protocolVersion:p.literal(6),sdkVersion:p.string().default(ut),suggestedPrompts:p.array(p.string().trim().min(1).max(160)).max(5),surfaceVariant:gt.default("surface-secondary"),theme:uo});import{z as k}from"zod";var ht=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)}),yo=k.string().trim().max(2048).refine(t=>{try{return["http:","https:"].includes(new URL(t).protocol)}catch{return!1}}),Co=k.union([ht.extend({sourceType:k.literal("document"),title:k.string().trim().min(1).max(200)}),ht.extend({sourceType:k.literal("url").optional(),title:k.string().trim().min(1).max(200).optional(),url:yo})]),da=k.object({items:k.array(Co).min(1).max(16)});var de=["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"],bo={"google/gemini-3.5-flash":"google/gemini-3.7-flash","google/gemini-3.6-flash":"google/gemini-3.7-flash"};function ue(t){return bo[t]??t}var ga="google/gemini-3.7-flash",xo=[{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"}],Ao=new Set(de);function ha(t){return typeof t=="string"&&Ao.has(t)}function fa(t){let n=t?ue(t):void 0;return xo.find(a=>a.id===n)?.tier??"light"}import{z as ft}from"zod";var xa=ft.preprocess(t=>typeof t=="string"?ue(t):t,ft.enum(de));var ka="heroui-agent:runtime-timing",Ia="heroui_agent_turn_admitted",Ta="getTurnAdmissionStatuses",va=50;import{z as g}from"zod";var ko=["action_approved","action_declined","component_copy","component_export","component_followup","component_rendered","component_submit","component_tool","embed_loaded","failure","feedback_down","feedback_up","file_download","first_chunk","first_feedback_paint","first_server_content_paint","first_text_paint","message_copied","message_sent","opened","reconnected","retry","stopped","turn_completed","turn_stalled"],Io=["client-inactivity-watchdog","cloudflare-chat","message-send-failed","stream-error"],To=["did_not_follow_instructions","incomplete","incorrect","not_relevant","other","unclear"],vo=["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(me).optional(),feedbackComment:g.string().trim().max(1e3).optional(),feedbackCommentLength:g.number().int().min(0).max(1e3).optional(),feedbackReasons:g.array(g.enum(To)).max(6).optional(),format:g.enum(["csv","json","markdown","pdf","png","svg","text","xlsx"]).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(),outputBytes:g.number().int().nonnegative().max(25*1024*1024).optional(),protocolVersion:g.literal(6).optional(),sdkVersion:g.string().trim().min(1).max(80).optional(),source:g.enum(Io).optional(),toolName:g.string().trim().min(1).max(160).optional()}).strict(),Ea=g.object({conversationId:g.string().uuid(),event:g.enum(ko),properties:So.default({})}).strict(),Na=g.enum(vo);export{la as AGENT_CONVERSATION_SOURCE,de as AGENT_MODEL_IDS,xo as AGENT_MODEL_OPTIONS,ct as AGENT_UI_CATALOG,Oe as AGENT_UI_CONTAINER_KINDS,me as AGENT_UI_KIND_NAMES,Ho as AGENT_UI_KIND_SCHEMAS,Le as AGENT_UI_LAYOUT_LEAF_KINDS,Ge as AGENT_UI_PRIMITIVE_KINDS,Q as COMPOSED_UI_MAX_DEPTH,D as COMPOSED_UI_MAX_NODES,ga as DEFAULT_AGENT_PICKER_MODEL_ID,ta as HEROUI_AGENT_API_BASE_URL,Eo as HEROUI_AGENT_ATTACHMENT_ACCEPT,ye as HEROUI_AGENT_ATTACHMENT_CONTENT_TYPES,yt as HEROUI_AGENT_ATTACHMENT_CONTENT_TYPE_BY_EXTENSION,fe as HEROUI_AGENT_ATTACHMENT_EXTENSION_BY_CONTENT_TYPE,_o as HEROUI_AGENT_ATTACHMENT_MAX_BYTES,ko as HEROUI_AGENT_EMBED_EVENT_NAMES,Io as HEROUI_AGENT_EMBED_EVENT_SOURCES,To as HEROUI_AGENT_FEEDBACK_REASONS,wo as HEROUI_AGENT_MAX_ATTACHMENTS,K as HEROUI_AGENT_PROTOCOL_VERSION,Ce as HEROUI_AGENT_REMOTE_CONFIG_VERSION,ka as HEROUI_AGENT_RUNTIME_TIMING_EVENT,ut as HEROUI_AGENT_SDK_VERSION,No as HEROUI_AGENT_TEXT_ATTACHMENT_CONTENT_TYPES,va as HEROUI_AGENT_TURN_ADMISSION_STATUS_MAX_IDS,Ta as HEROUI_AGENT_TURN_ADMISSION_STATUS_METHOD,Ia as HEROUI_AGENT_TURN_ADMITTED_FRAME_TYPE,vo as HEROUI_AGENT_TURN_ERROR_CODES,bo as LEGACY_AGENT_MODEL_IDS,po as MAX_CLIENT_TOOLS,mo as MAX_CLIENT_TOOLS_BYTES,so as RESERVED_AGENT_TOOL_NAMES,lo as RESERVED_AGENT_TOOL_PREFIX,vn as accordionComponentSchema,En as actionGroupComponentSchema,ho as agentAuthIdentitySchema,fo as agentAuthProfileSchema,ia as agentAuthTokenSchema,St as agentIconNames,U as agentIconSchema,ce as agentIdentityIdSchema,xa as agentModelIdSchema,pa as agentProjectConfigSchema,Co as agentSourceSchema,da as agentSourcesSchema,gt as agentSurfaceVariantSchema,uo as agentThemeSchema,sa as agentTokenClaimsSchema,Ne as agentUIComponentSchema,ie as agentUILeafComponentSchema,pe as agentUINodeSchema,Zo as agentUIRenderableSchema,qn as analyticalLeafComponentSchema,Qt as areaChartComponentSchema,Fe as badgeComponentSchema,en as barChartComponentSchema,Ze as buttonComponentSchema,bn as calloutComponentSchema,mn as candlestickChartComponentSchema,st as cardComponentSchema,te as cardComponentVariantSchema,Dn as channelMessageComponentSchema,_ as chartColorSchema,co as clientToolManifestEntrySchema,Qo as clientToolsSchema,wn as codeBlockComponentSchema,rt as colComponentSchema,hn as comparisonListComponentSchema,Fo as composeUIInputSchema,tn as composedChartComponentSchema,mt as composedUIComponentSchema,ra as createAgentAuthTokenRequestSchema,Gn as createEventComponentSchema,Jn as dashboardComponentSchema,gn as dataTableComponentSchema,_n as diagramComponentSchema,Ve as dividerComponentSchema,on as donutChartComponentSchema,Fn as enableNotificationComponentSchema,Zn as eventSessionComponentSchema,Ln as flightTrackerComponentSchema,Nn as followupComponentSchema,yn as formComponentSchema,cn as funnelChartComponentSchema,dn as gaugeChartComponentSchema,fa as getAgentModelTier,je as getAgentUIContainerChildren,it as gridComponentSchema,Ke as headingComponentSchema,pn as heatmapComponentSchema,So as heroUIAgentEmbedEventPropertiesSchema,Ea as heroUIAgentEmbedEventSchema,Na as heroUIAgentTurnErrorCodeSchema,He as iconComponentSchema,xn as imageComponentSchema,ha as isAgentModelId,Me as isAgentUIContainerComponent,Vo as isAgentUILayoutLeafComponent,Ko as isAgentUIPrimitiveComponent,Y as isHeroUIAgentAttachmentContentType,le as itemCardComponentSchema,Qe as itemCardGroupComponentSchema,Xt as kpiGridComponentSchema,Jt as lineChartComponentSchema,Tn as listBlockComponentSchema,In as listComponentSchema,An as mapComponentSchema,fn as meterListComponentSchema,Wt as metricGridComponentSchema,C as numberFormatSchema,Oo as parseAgentRemoteConfig,nn as pieChartComponentSchema,Vn as playerCardComponentSchema,Mn as playlistComponentSchema,On as productCardComponentSchema,Yn as productSignalsComponentSchema,qe as progressComponentSchema,Pn as purchaseCompleteComponentSchema,Bn as purchaseItemsComponentSchema,an as radarChartComponentSchema,rn as radialChartComponentSchema,$e as ratingComponentSchema,zn as recordCardComponentSchema,Nt as recordCardLayoutSchema,Wo as renderAgentUICatalogPrompt,Po as renderComponentInputSchema,ue as resolveAgentModelId,Ro as resolveHeroUIAgentAttachmentContentType,jn as rideStatusComponentSchema,at as rowComponentSchema,sn as sankeyChartComponentSchema,ln as scatterChartComponentSchema,Pe as spacerComponentSchema,Sn as stepsComponentSchema,un as sunburstChartComponentSchema,Rn as switchGroupComponentSchema,Do as tabsComponentSchema,kn as tagListComponentSchema,Cn as textComponentSchema,Un as toggleGroupComponentSchema,Kn as viewEventComponentSchema,J as weatherConditionSchema,wt as weatherConditions,$n as weatherCurrentComponentSchema,Hn as weatherForecastComponentSchema};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use client";import{a as ko,b as Va,c as $a,d as Sr}from"./chunk-RNNGE7KM.js";import{a as Fa,b as _o}from"./chunk-PZJ4NC3J.js";import{a as Po,b as Io,d as No}from"./chunk-CLHBM3HQ.js";import{a as Da,b as La}from"./chunk-KQTLIOZ3.js";import{A as Yt,B as ka,C as vr,D as Mo,E as br,F as gn,G as Eo,H as fn,I as Oa,b as We,d as ha,e as Vn,g as ya,h as va,i as vo,j as ba,k as $n,n as Ta,o as Ra,q as Ao,r as Qn,s as wa,t as Ma,u as Ea,v as Co,w as Pa,x as xa,y as Na,z as _a}from"./chunk-6RWQT7JH.js";import{a as bo}from"./chunk-6ZJJN322.js";import{b as ga,c as yr,d as fa}from"./chunk-T4VDCNDW.js";import{c as Sa,d as Aa,e as So,f as Ca}from"./chunk-UHHKMESI.js";import{a as Ha,b as Ua,c as Ba,d as xo}from"./chunk-7KCGPNEN.js";import"./chunk-4JEZZR5J.js";import{a as To}from"./chunk-JTZX5KVY.js";import{a as Ro,c as wo}from"./chunk-M22IGTLZ.js";import{a as Ia}from"./chunk-MXXCR5SR.js";import{a as fe}from"./chunk-CR3H7AVI.js";import{useAgentChat as pg}from"@cloudflare/ai-chat/react";import{ArrowUp as gg,ArrowUpRight as fg,Microphone as _l,Plus as kl,StopFill as Pl,Xmark as hg}from"@gravity-ui/icons";function At(e){return!!(e&&/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e))}function Oo(e,t){return e===null?null:typeof e=="string"?At(e)?e:null:At(t)?t:null}var Ar=30,Qa=52;function Do(e){try{let t=JSON.parse(localStorage.getItem(e)??"[]");return Cr(t)}catch{return[]}}function Cr(e){return Array.isArray(e)?e.filter(t=>!!(t&&typeof t=="object"&&"id"in t&&typeof t.id=="string"&&At(t.id)&&"title"in t&&typeof t.title=="string"&&"updatedAt"in t&&typeof t.updatedAt=="number")).sort((t,n)=>n.updatedAt-t.updatedAt).slice(0,Ar):[]}function Lo(e,t){let n=new Map(e.map(r=>[r.id,r]));for(let r of t){let o=n.get(r.id);(!o||r.updatedAt>=o.updatedAt)&&n.set(r.id,r)}return[...n.values()].sort((r,o)=>o.updatedAt-r.updatedAt).slice(0,Ar)}function Pt(e,t){localStorage.setItem(e,JSON.stringify(t.slice(0,Ar)))}function Kn(e,t,n,r,{replaceTitle:o=!1}={}){if(!n)return e;let s=e.find(m=>m.id===t);return[{id:t,title:o?n:s?.title??n,updatedAt:r},...e.filter(m=>m.id!==t)].sort((m,c)=>c.updatedAt-m.updatedAt).slice(0,Ar)}function Tr(e){let t=e?.find(r=>r.role==="user"),n=t?.parts.filter(r=>r.type==="text").map(r=>r.text??"").join(" ");return n?.trim()?Uo(n):t?"Attachment":null}function Ho(e,t){return e?Uo(e):t[0]?.name||"Attachment"}function Uo(e){let t=e.replace(/\s+/g," ").trim();return t.length>Qa?`${t.slice(0,Qa-1).trimEnd()}\u2026`:t}function Bo(e){let t=new Date;t.setHours(0,0,0,0);let n=t.getTime(),r=n-8640*60*1e3,o=[{items:[],label:"Today"},{items:[],label:"Previous 7 days"},{items:[],label:"Older"}];for(let s of e)s.updatedAt>=n?o[0].items.push(s):s.updatedAt>=r?o[1].items.push(s):o[2].items.push(s);return o.filter(s=>s.items.length>0)}import{Disclosure as hn}from"@heroui/react";import{jsx as Ve,jsxs as Xt}from"react/jsx-runtime";function pu(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").toLowerCase().replace(/^\w/,t=>t.toUpperCase())}function gu(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=Object.entries(e);return t.length===0||t.some(([,n])=>typeof n=="object")?null:t.map(([n,r])=>[pu(n),String(r)])}function Ka({approveLabel:e="Allow",className:t,denyLabel:n="Deny",hint:r="Waiting for your approval",icon:o,input:s,onApprove:i,onDeny:m,title:c,...l}){let p=Da("component")??"surface",d=gu(s),S=s!=null&&(typeof s!="object"||Object.keys(s).length>0);return Xt("section",{"aria-label":c,className:fe("aui-approval",t),"data-slot":"agent-ui-approval","data-variant":p,...l,children:[Xt("div",{className:"aui-approval__heading","data-slot":"agent-ui-approval-heading",children:[o?Ve("span",{"aria-hidden":!0,className:"aui-approval__icon","data-slot":"agent-ui-approval-icon",children:o}):null,Xt("div",{className:"aui-approval__heading-text",children:[Ve("strong",{className:"aui-approval__title",children:c}),r?Ve("span",{className:"aui-approval__hint",children:r}):null]})]}),S?Xt(hn,{defaultExpanded:!0,className:"aui-approval__disclosure",children:[Ve(hn.Heading,{children:Xt(hn.Trigger,{className:"aui-approval__disclosure-trigger",children:["Review action details",Ve(hn.Indicator,{})]})}),Ve(hn.Content,{children:Ve(hn.Body,{children:d?Ve("dl",{className:"aui-approval__details","data-slot":"agent-ui-approval-details",children:d.map(([u,w])=>Xt("div",{className:"aui-approval__detail",children:[Ve("dt",{children:u}),Ve("dd",{children:w})]},u))}):Ve("pre",{className:"aui-approval__pre",children:JSON.stringify(s,null,2)})})})]}):null,Xt("div",{className:"aui-approval__actions","data-slot":"agent-ui-approval-actions",children:[Ve(Po,{size:"md",variant:"tertiary",onClick:m,children:n}),Ve(Po,{size:"md",variant:"primary",onClick:i,children:e})]})]})}import{useEffect as Fo,useRef as yn}from"react";import{jsx as za}from"react/jsx-runtime";var fu=40,qa=2;function Rr(e,t,n){return Math.min(n,Math.max(t,e))}function hu(e){let t=Rr(Math.round(e),32,32768);return 2**Math.round(Math.log2(t))}function yu(e){return e instanceof Error?e:new Error("Unable to access the microphone.")}function vu(){let e=window;return e.AudioContext??e.webkitAudioContext}function bu(e){e?.getTracks().forEach(t=>t.stop())}function Su(e){if(!(!e||e.state==="closed"))try{e.close().catch(()=>{})}catch{}}function Au(e,t,n,r,o){let s=Math.min(r/2,o/2);if(typeof e.roundRect!="function"){e.fillRect(t,n,r,o);return}e.beginPath(),e.roundRect(t,n,r,o,s),e.fill()}function Vo({active:e=!1,"aria-label":t,barGap:n=2,barWidth:r=2,className:o,deviceId:s,fadeEdges:i=!0,fadeWidth:m=20,fftSize:c=256,height:l=fu,onError:p,onStreamEnd:d,onStreamReady:S,role:u,sensitivity:w=1.15,smoothingTimeConstant:O=.82,stream:T,style:E,...V}){let N=yn(null),I=yn({onError:p,onStreamEnd:d,onStreamReady:S}),k=yn(null),$=yn(null),Z=yn(null),y=yn([]);Fo(()=>{I.current={onError:p,onStreamEnd:d,onStreamReady:S}},[p,d,S]),Fo(()=>{if(!e||T===null){N.current=null;return}let C,M=!1,x=!1,L=!1,X=T===void 0,j,U=T,W=pe=>{try{j?.disconnect()}catch{}j=void 0,N.current?.context===C&&(N.current=null),Su(C),C=void 0,X&&bu(U),U=void 0,pe&&x&&!L&&(L=!0,I.current.onStreamEnd?.())};return(async()=>{try{let pe=vu();if(!pe)throw new Error("Live audio analysis is not supported in this browser.");if(!U){if(!navigator.mediaDevices?.getUserMedia)throw new Error("Microphone capture is not supported in this browser.");U=await navigator.mediaDevices.getUserMedia({audio:{autoGainControl:!0,...s?{deviceId:{exact:s}}:{},echoCancellation:!0,noiseSuppression:!0}})}if(M){W(!1);return}C=new pe;let H=C.createAnalyser();if(H.fftSize=hu(c),H.smoothingTimeConstant=Rr(O,0,1),j=C.createMediaStreamSource(U),j.connect(H),C.state==="suspended"&&await C.resume(),M){W(!1);return}N.current=H,Z.current=new Uint8Array(H.frequencyBinCount),x=!0,I.current.onStreamReady?.(U)}catch(pe){W(!1),M||I.current.onError?.(yu(pe))}})(),()=>{M=!0,W(!0)}},[e,s,c,T,O]),Fo(()=>{let C=k.current,M=$.current;if(!C||!M)return;let x=C.getContext("2d");if(!x)return;let L=0,X=getComputedStyle(C).color||"#000",j=0,U=0,W=0,ie=D=>{if(W<=0||U<=0)return;D-j>500&&(X=getComputedStyle(C).color||X,j=D),x.clearRect(0,0,W,U),x.fillStyle=X;let _=Math.max(1,r),G=Math.max(0,n),ne=_+G,ce=Math.max(1,Math.floor((W+G)/ne)),he=Math.ceil(ce/2),qe=N.current;y.current.length!==he&&(y.current=Array.from({length:he},()=>0));let ht=y.current;if(e&&qe){let ve=Z.current;(!ve||ve.length!==qe.frequencyBinCount)&&(ve=new Uint8Array(qe.frequencyBinCount),Z.current=ve),qe.getByteFrequencyData(ve);let Pe=Math.max(1,Math.floor(ve.length*.025)),we=Math.max(Pe+1,Math.floor(ve.length*.46)),ct=Rr(w,0,4);for(let ze=0;ze<he;ze+=1){let yt=he<=1?0:ze/(he-1),Ae=Math.min(ve.length-1,Math.round(Pe+yt*(we-Pe))),Rt=Math.pow((ve[Ae]??0)/255*ct,.72);ht[ze]=Rr((ht[ze]??0)*.56+Rt*.44,0,1)}}else ht.fill(0);let wn=Math.max(qa,U*.84),Ft=U/2,Vt=ce*_+(ce-1)*G,sn=(W-Vt)/2;for(let ve=0;ve<ce;ve+=1){let Pe=he-1-Math.min(ve,ce-1-ve),we=e?ht[Pe]??0:0,ct=Math.max(qa,we*wn),ze=sn+ve*ne,yt=Ft-ct/2;x.globalAlpha=e?.38+we*.62:.2,Au(x,ze,yt,_,ct)}x.globalAlpha=1},pe=()=>{let D=M.getBoundingClientRect(),_=Math.max(1,window.devicePixelRatio||1),G=getComputedStyle(C).color||X;W=Math.max(0,D.width),U=Math.max(0,D.height),C.width=Math.max(1,Math.round(W*_)),C.height=Math.max(1,Math.round(U*_)),C.style.width=`${W}px`,C.style.height=`${U}px`,x.setTransform(_,0,0,_,0,0),X=G,ie(performance.now())},H=D=>{ie(D),L=requestAnimationFrame(H)};pe();let Q;return typeof ResizeObserver>"u"?window.addEventListener("resize",pe):(Q=new ResizeObserver(pe),Q.observe(M)),e&&(L=requestAnimationFrame(H)),()=>{L&&cancelAnimationFrame(L),Q?.disconnect(),window.removeEventListener("resize",pe)}},[e,n,r,w]);let h=typeof l=="number"?`${Math.max(1,l)}px`:l,f={...E,height:h},A=`${Math.max(0,m)}px`,b=`linear-gradient(90deg, transparent 0, #000 min(${A}, 20%), #000 calc(100% - min(${A}, 20%)), transparent 100%)`;return za("div",{...V,ref:$,"aria-label":t??(e?"Live microphone waveform":"Microphone waveform"),className:fe("aui-voice-live-waveform",o),"data-active":e||void 0,"data-fade-edges":i||void 0,"data-slot":"agent-ui-voice-live-waveform",role:u??"img",style:f,children:za("canvas",{ref:k,"aria-hidden":"true",className:"aui-voice-live-waveform__canvas",style:i?{WebkitMaskImage:b,maskImage:b}:void 0})})}import{useCallback as $e,useEffect as Ga,useRef as Qe,useState as wr,useSyncExternalStore as Cu}from"react";var Pr={"audio-capture":"No microphone was found. Check your audio input and try again.","bad-grammar":"Speech recognition could not understand the requested grammar.",language:"Speech recognition is not available for this language.","language-not-supported":"Speech recognition is not available for this language.",network:"Speech recognition lost its network connection. Try again.","no-speech":"No speech was detected. Try again when you are ready.","not-allowed":"Voice dictation was blocked. Check microphone and speech recognition permissions and try again.","service-not-allowed":"Speech recognition is blocked by your browser settings."},Wa="Microphone access is blocked for this page. Allow microphone access and try again.",Tu="Microphone access is enabled, but speech recognition is blocked in this browser or embedded preview.",Qo="Voice dictation is not supported in this browser.",Ya="Voice recording stopped unexpectedly. Try again.",Ru=["audio/webm;codecs=opus","audio/mp4","audio/webm","audio/ogg;codecs=opus"],wu=/\s+/g;function Er(e,t){let n=t.trim().replace(wu," ");return n?!e||/\s$/.test(e)||/^[,.;:!?)]/.test(n)?`${e}${n}`:`${e} ${n}`:e}function Ir(e){let t=Number.isFinite(e)?Math.max(0,Math.floor(e)):0,n=t%60,r=Math.floor(t/60),o=r%60,s=Math.floor(r/60),i=String(n).padStart(2,"0");return s>0?`${s}:${String(o).padStart(2,"0")}:${i}`:`${o}:${i}`}function Ko(e,t,n="unknown"){if(e==="not-allowed"){if(n==="denied")return Wa;if(n==="granted")return Tu}return Pr[e]??(t?.trim()||"Voice dictation stopped unexpectedly.")}async function Mu(){if(typeof navigator>"u"||!navigator.permissions?.query)return"unknown";try{return(await navigator.permissions.query({name:"microphone"})).state}catch{return"unknown"}}function Xa(){if(typeof window>"u")return;let e=window;return e.SpeechRecognition??e.webkitSpeechRecognition}function Eu(){return!!Xa()}function ja(){return typeof navigator<"u"&&typeof navigator.mediaDevices?.getUserMedia=="function"&&typeof MediaRecorder<"u"}function Pu(){if(!(typeof MediaRecorder>"u"||typeof MediaRecorder.isTypeSupported!="function"))return Ru.find(e=>MediaRecorder.isTypeSupported(e))}function Mr(e){e?.getTracks().forEach(t=>t.stop())}function $o(e){if(typeof DOMException<"u"&&e instanceof DOMException){if(e.name==="NotAllowedError"||e.name==="SecurityError")return Wa;if(e.name==="NotFoundError"||e.name==="DevicesNotFoundError")return Pr["audio-capture"]}return e instanceof Error&&e.message.trim()?e.message:"Microphone access could not be started."}function Iu(e){return e.error??new Error(Ya)}function xu(){return()=>{}}function qo({language:e,onValueChange:t,transcribe:n,value:r}){let[o,s]=wr("idle"),[i,m]=wr(0),[c,l]=wr(null),[p,d]=wr(null),S=$e(()=>n?ja():Eu(),[n]),u=Cu(xu,S,()=>!1),w=Qe("idle"),O=Qe(r),T=Qe(null),E=Qe(e),V=Qe(t),N=Qe(null),I=Qe(null),k=Qe(0),$=Qe(0),Z=Qe(n),y=Qe(null),h=Qe(new Map),f=Qe(r);Ga(()=>{E.current=e,V.current=t,Z.current=n,f.current=r},[e,t,n,r]);let A=$e(H=>{w.current=H,s(H)},[]),b=$e(()=>{T.current!==null&&(clearInterval(T.current),T.current=null)},[]),C=$e(()=>{b(),$.current=Date.now(),m(0),T.current=setInterval(()=>{m(Math.floor((Date.now()-$.current)/1e3))},250)},[b]),M=$e(H=>{H.onend=null,H.onerror=null,H.onresult=null,H.onstart=null},[]),x=$e(H=>{H.ondataavailable=null,H.onerror=null,H.onstop=null},[]),L=$e((H,Q)=>{if(x(H.recorder),Q&&H.recorder.state!=="inactive")try{H.recorder.stop()}catch{}Mr(H.stream)},[x]),X=$e(async H=>{if(k.current!==H.session||N.current!==H){L(H,!1);return}N.current=null,x(H.recorder),Mr(H.stream),d(null),b(),A("transcribing");let Q=H.recorder.mimeType||H.chunks[0]?.type||"audio/webm",D=new Blob(H.chunks,{type:Q}),_=Z.current;if(!_||D.size===0){A("idle"),l(D.size===0?Pr["no-speech"]:Ya);return}let G=new AbortController;y.current=G;try{let ne=await _(D,{...E.current?{language:E.current}:{},signal:G.signal});if(k.current!==H.session||G.signal.aborted)return;if(!ne.trim()){l(Pr["no-speech"]);return}V.current(Er(O.current,ne)),l(null)}catch(ne){if(k.current!==H.session||G.signal.aborted)return;l(ne instanceof Error&&ne.message.trim()?ne.message:"Voice transcription could not be completed. Try again.")}finally{y.current===G&&(y.current=null),k.current===H.session&&A("idle")}},[x,L,b,A]),j=$e(()=>{k.current+=1,b(),y.current?.abort(),y.current=null,l(null),d(null),A("idle");let H=N.current,Q=I.current;if(N.current=null,I.current=null,h.current.clear(),H&&L(H,!0),!!Q){M(Q);try{Q.abort()}catch{}}},[M,L,b,A]),U=$e(()=>{if(w.current==="transcribing"){j();return}let H=N.current;if(H){b(),A("transcribing");try{H.recorder.stop()}catch(D){k.current+=1,N.current=null,L(H,!1),d(null),A("idle"),l(D instanceof Error?D.message:"Voice recording could not be stopped cleanly.")}return}if(w.current==="recording"){j();return}let Q=I.current;if(Q){b();try{Q.stop()}catch(D){A("idle"),k.current+=1,I.current=null,h.current.clear(),M(Q);try{Q.abort()}catch{}l(D instanceof Error?D.message:"Voice dictation could not be stopped cleanly.")}}},[j,M,L,b,A]),W=$e(async()=>{if(!ja()){l(Qo);return}let H=k.current+1;k.current=H,O.current=f.current,l(null),m(0),d(null),A("recording");let Q;try{Q=await navigator.mediaDevices.getUserMedia({audio:{autoGainControl:!0,echoCancellation:!0,noiseSuppression:!0}})}catch(G){if(k.current!==H)return;A("idle"),l($o(G));return}if(k.current!==H){Mr(Q);return}let D;try{let G=Pu();D=G?new MediaRecorder(Q,{mimeType:G}):new MediaRecorder(Q)}catch(G){if(Mr(Q),k.current!==H)return;A("idle"),l($o(G));return}let _={chunks:[],recorder:D,session:H,stream:Q};D.ondataavailable=G=>{G.data.size>0&&_.chunks.push(G.data)},D.onerror=G=>{k.current!==H||N.current!==_||(k.current+=1,N.current=null,b(),L(_,!0),d(null),A("idle"),l(Iu(G).message))},D.onstop=()=>{X(_)},N.current=_,d(Q);try{D.start(1e3),C()}catch(G){k.current+=1,N.current=null,L(_,!1),d(null),A("idle"),l($o(G))}},[L,X,C,b,A]),ie=$e(()=>{let H=Xa();if(!H){l(Qo);return}let Q;try{Q=new H}catch(_){l(_ instanceof Error?_.message:"Voice dictation could not be started.");return}let D=k.current+1;k.current=D,O.current=f.current,h.current=new Map,Q.continuous=!0,Q.interimResults=!0,Q.maxAlternatives=1,E.current&&(Q.lang=E.current),Q.onstart=()=>{k.current===D&&(A("recognizing"),C())},Q.onresult=_=>{if(k.current!==D)return;let G=Math.max(0,_.resultIndex);for(let ce of h.current.keys())ce>=G&&h.current.delete(ce);for(let ce=G;ce<_.results.length;ce+=1){let qe=_.results[ce]?.[0]?.transcript;typeof qe=="string"&&h.current.set(ce,qe)}let ne=Array.from(h.current.entries()).sort(([ce],[he])=>ce-he).map(([,ce])=>ce).reduce(Er,"");V.current(Er(O.current,ne))},Q.onerror=_=>{if(k.current!==D)return;b(),A("idle"),h.current.clear(),k.current+=1;let G=k.current;_.error!=="aborted"&&(_.error==="not-allowed"?Mu().then(ne=>{k.current===G&&l(Ko(_.error,_.message,ne))}):l(Ko(_.error,_.message))),I.current===Q&&(I.current=null,M(Q))},Q.onend=()=>{k.current===D&&(b(),A("idle"),I.current===Q&&(I.current=null,M(Q)))},I.current=Q,l(null),m(0),A("recognizing");try{Q.start()}catch(_){M(Q),I.current=null,b(),A("idle"),l(_ instanceof Error?_.message:"Voice dictation could not be started.")}},[M,C,b,A]),pe=$e(()=>{w.current!=="idle"||I.current||N.current||y.current||(Z.current?W():ie())},[ie,W]);return Ga(()=>()=>{k.current+=1,b(),y.current?.abort(),y.current=null;let H=N.current,Q=I.current;if(N.current=null,I.current=null,H&&L(H,!0),!!Q){M(Q);try{Q.abort()}catch{}}},[M,L,b]),{cancel:j,elapsedSeconds:i,error:c,isActive:o!=="idle",isRecording:o==="recording",isSupported:u,isTranscribing:o==="transcribing",start:pe,stop:U,stream:p}}import{Spinner as yg}from"@heroui/react/spinner";import{isTerminalCloseEvent as vg}from"agents/client";import{useAgent as bg}from"agents/react";import{Suspense as Sg,useCallback as z,useEffect as ye,useEffectEvent as Bt,useId as Ag,useLayoutEffect as Tt,useMemo as Ce,useRef as le,useState as J}from"react";import{z as te}from"zod";var Nu=te.enum(["light","dark","system"]),Ja=te.enum(["outline","plain","surface","surface-secondary"]),_u=new Set(["[object object]","0","anonymous","distinct_id","distinctid","email","false","guest","id","nan","none","not_authenticated","null","true","undefined"]),zo=te.string().trim().min(1).max(200).refine(e=>!_u.has(e.toLowerCase()),{message:"Identity id is reserved"}),ku=te.discriminatedUnion("type",[te.object({id:zo,type:te.literal("anonymous")}),te.object({id:zo,type:te.literal("user")})]),Ou=te.object({avatarUrl:te.string().trim().pipe(te.url()).optional(),email:te.string().trim().max(320).pipe(te.email()).optional(),name:te.string().trim().max(120).optional()}),ef=te.object({anonymousId:zo.optional(),identity:ku,profile:Ou.optional()}),tf=te.object({expiresAt:te.number().int().positive(),token:te.string().trim().min(1)}),nf=te.object({agentId:te.string().trim().min(1).max(100),apiKeyId:te.string().trim().min(1).max(100),aud:te.literal("heroui-agent"),exp:te.number().int().positive(),iat:te.number().int().positive(),iss:te.literal("https://api.heroui.com"),jti:te.uuid(),protocolVersion:te.literal(6),sub:te.string().trim().min(1).max(200)});var xr=te.object({agentId:te.string(),componentSurfaceVariant:Ja.default("surface"),minimumProtocolVersion:te.literal(6),name:te.string().trim().min(1).max(120),protocolVersion:te.literal(6),sdkVersion:te.string().default(We),suggestedPrompts:te.array(te.string().trim().min(1).max(160)).max(5),surfaceVariant:Ja.default("surface-secondary"),theme:Nu});var Du="understanding your request";function Lu(e){let t=e.replace(/\r\n?/g,`
|
|
2
|
-
`).trim();if(!t)return null;if(t.length<=1600)return t;let n=t.slice(0,1601),r=n.lastIndexOf(" "),o=r>=1600*.8?r:1600;return`${n.slice(0,o).trimEnd()}\u2026`}function Hu(e){let t=e.replace(/\[([^\]]+)\]\([^\s)]+\)/g,"$1").replace(/[*_`~]/g,"").replace(/\s+/g," ").replace(/[.…!?:;,|—–-]+$/u,"").trim();return!t||t.length>80?null:t.replace(/^\p{Ll}/u,n=>n.toLocaleUpperCase())}function Uu(e,t){let n=e.replace(/\r\n?/g,`
|
|
3
|
-
`).trim();if(!n)return null;let r=/^#{1,6}\s+([^\n]+)\n+([\s\S]+)$/u.exec(n),o=/^(?:\*\*([^*\n]+)\*\*|__([^_\n]+)__)([\s\S]+)$/u.exec(n),s=r?.[1]??o?.[1]??o?.[2],i=r?.[2]??o?.[3],m=s?Hu(s):null,c=i?.replace(/^\s*(?:[|:—–-]\s*)?/u,"").trim(),l=Lu(m&&c?c:n);return l?{detail:l,label:m??(t===0?"Thinking through your request":"Thinking through the next step")}:null}function Bu(e){if(!e.input||typeof e.input!="object"||Array.isArray(e.input))return null;let t=e.input.query;if(typeof t!="string")return null;let n=t.replace(/\s+/g," ").trim();return!n||n.length>300?null:n}function Go(e){return e.toLocaleLowerCase().replace(/[.…]+$/u,"").trim()}function Fu(e,t){return t!=="accepted"&&t!=="preparing"?!1:Go(e)===Du}function Za(e){return e.type==="dynamic-tool"&&e.toolName?e.toolName:e.type.startsWith("tool-")?e.type.slice(5):null}function ei(e){return e==="renderComponent"||e==="composeUI"}var Vu={ai:"AI",api:"API",crm:"CRM",csv:"CSV",id:"ID",mcp:"MCP",sql:"SQL",ui:"UI",url:"URL"};function $u(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").trim().split(/\s+/).map((n,r)=>{let o=Vu[n.toLowerCase()];return o||(r===0?n.replace(/^\w/,s=>s.toUpperCase()):n)}).join(" ")}function Nr(e){let t=e.toLowerCase();return/search|find|look up|research/.test(t)?"search":/web|source|browse|url/.test(t)?"browse":/code|sandbox|python|script|compute/.test(t)?"code":/chart|graph|visual|plot/.test(t)?"chart":/data|query|load|fetch|metric|table|account/.test(t)?"data":"thinking"}function ti(e,t){if(!t.hasContent)return!1;let n=e.reduce((r,o)=>Math.max(r,o.messagePartIndex??-1),-1);return t.latestContentPartIndex>=n}function jo(e,t,n={}){if(e.role!=="assistant")return[];let r=[],o=new Set,s=0,i;for(let[c,l]of e.parts.entries()){if(l.type==="reasoning"){let I=Uu(l.text,s);if(!I)continue;r.push({active:n.isStreaming===!0&&l.state!=="done",detail:I.detail,detailVisibility:"always",id:`${e.id}-reasoning-${c}`,kind:"thinking",label:I.label,messagePartIndex:c,stateKnown:l.state!==void 0,...r.length===0&&i?{title:i}:{}}),s+=1;continue}if(l.type==="data-activity"){let I=l.data.label.trim(),k=l.data.title?.trim();if(k&&!i){i=k;let $=r[0];$&&!$.title&&(r[0]={...$,title:k})}if(Fu(I,l.data.stage)||k&&Go(I)===Go(k))continue;if(I&&o.has(I)){let $=r.findIndex(y=>y.label===I),Z=r[$];k&&Z&&!Z.title&&(r[$]={...Z,title:k})}else I&&(o.add(I),r.push({active:!1,detail:l.data.detail,id:l.id??`${e.id}-activity-${c}`,kind:l.data.kind??Nr(I),label:I,messagePartIndex:c,sources:l.data.sources,stateKnown:!1,...k||r.length===0&&i?{title:k??i}:{}}));continue}let p=Za(l);if(!p)continue;let d=l,S=ei(p),u=e.parts.slice(c+1).some(I=>{let k=Za(I);return(k===p||S&&k!==null&&ei(k))&&I.state==="output-available"});if(d.state==="output-error"&&(n.isStreaming||u))continue;let w=p==="searchWeb"?Bu(d):null,O=S?"Building your data view":p==="executeSandbox"?"Analyzing your data":p==="getComponentSchema"?"Preparing your data view":w?`Searching the web for \u201C${w}\u201D`:t.get(p)?.displayName??$u(p),E=d.state==="output-denied"||!!(d.output&&typeof d.output=="object"&&"rejected"in d.output&&d.output.rejected)?w?`Skipped web search for \u201C${w}\u201D`:`Skipped ${O}`:d.state==="output-error"?w?`Couldn\u2019t search the web for \u201C${w}\u201D`:`Couldn\u2019t complete ${O}`:O,V=["input-available","input-streaming","approval-requested","approval-responded"].includes(d.state),N=r.findIndex(I=>I.label===E);if(N>=0){let I=r[N];I&&(r[N]={...I,active:V,messagePartIndex:c,stateKnown:!0,...!I.title&&i?{title:i}:{}});continue}o.add(E),r.push({active:V,id:d.toolCallId||`${e.id}-tool-${c}`,kind:S?"chart":p==="executeSandbox"?"code":p==="getComponentSchema"?"thinking":Nr(E),label:E,messagePartIndex:c,stateKnown:!0,...r.length===0&&i?{title:i}:{}})}if(!n.isStreaming||r.length===0||r.some(c=>c.active))return r;let m=r.length-1;return r[m]?.stateKnown?r:r.map((c,l)=>({...c,active:l===m}))}var Qu={accepted:"Thinking\u2026",generating:"Writing the answer\u2026",preparing:"Preparing the answer\u2026",recovering:"Recovering your answer\u2026","running-server-tool":"Running tools\u2026","waiting-client-tool":"Waiting for a browser action\u2026"},Ku=new Set(["accepted","preparing","generating","waiting-client-tool","running-server-tool","recovering"]);function qu(e){return e.type==="dynamic-tool"&&e.toolName?e.toolName:e.type.startsWith("tool-")?e.type.slice(5):null}function qn(e){return e?Qu[e]:null}function ni({clientToolNames:e,isLocalPending:t,isRecovering:n,isStreaming:r,messages:o,status:s}){if(n)return"recovering";let i=o.findLast(m=>m.role==="assistant");if(i){for(let c=i.parts.length-1;c>=0;c-=1){let l=i.parts[c],p=qu(l);if(p&&["input-streaming","input-available","approval-requested","approval-responded"].includes(l.state??""))return e.has(p)?"waiting-client-tool":"running-server-tool";if(l.type==="data-activity"||l.type==="data-progress"){let d=l.data?.stage;if(typeof d=="string"&&Ku.has(d))return d}}let m=i.parts.some(c=>c.type==="text"&&c.text.trim().length>0||c.type==="data-component");if(r&&m)return"generating"}return r||s==="streaming"?"preparing":t||s==="submitted"?"accepted":null}import{ChartColumn as dd,CircleCheck as md,Code as pd,Database as gd,Globe as li,Magnifier as fd,Wrench as hd}from"@gravity-ui/icons";import{Disclosure as Ye}from"@heroui/react";import{useEffect as ui,useRef as Xo,useState as Jo}from"react";import{useEffect as zu,useState as Gu}from"react";import{jsx as _r,jsxs as Wu}from"react/jsx-runtime";var ju=280;function kr({animateOnMount:e=!0,children:t,className:n,...r}){let[o,s]=Gu(()=>({current:{animate:e,id:0,text:t},previous:null}));o.current.text!==t&&s({current:{animate:!0,id:o.current.id+1,text:t},previous:o.current});let i=o.current.id,m=o.previous;return zu(()=>{if(!m)return;let c=window.setTimeout(()=>{s(l=>l.current.id===i?{...l,previous:null}:l)},ju);return()=>window.clearTimeout(c)},[i,m]),Wu("span",{...r,"aria-label":r["aria-label"]??t,className:`ha-status-text${n?` ${n}`:""}`,"data-slot":"animated-text",children:[_r("span",{"aria-hidden":"true","data-slot":"animated-text-value",className:o.current.animate?"ha-status-text__value ha-status-text__value--animated":"ha-status-text__value",children:_r(Yt,{children:o.current.text})},o.current.id),o.previous?_r("span",{"aria-hidden":"true",className:"ha-status-text__value ha-status-text__value--exiting","data-slot":"animated-text-previous-value",children:_r(Yt,{children:o.previous.text})},o.previous.id):null]})}import{Code as Yu,Heading as vn,Link as Xu,Paragraph as Ju,Separator as Zu,Table as It}from"@heroui/react";import{Children as ri,Suspense as oi,isValidElement as si,lazy as ed,memo as td,useMemo as nd}from"react";import{jsx as me,jsxs as cd}from"react/jsx-runtime";var rd=ed(()=>import("streamdown").then(e=>({default:e.Streamdown})));function od(e){return e?.match(/language-([^\s]+)/)?.[1]??"plaintext"}function sd(e,t){return e?.find(n=>Array.isArray(n.language)?n.language.includes(t):n.language===t)}function Wo(e){return ri.toArray(e?.props.children).filter(t=>si(t))}function Yo(e,t){return ri.toArray(e).find(n=>si(n)&&n.props.node?.tagName===t)}function ad({children:e}){let t=Yo(e,"thead"),n=Yo(e,"tbody"),r=Yo(t?.props.children,"tr"),o=Wo(r),s=Wo(n);return me(It,{"data-slot":"markdown-table",variant:"secondary",children:me(It.ScrollContainer,{children:cd(It.Content,{"aria-label":"Markdown table",children:[me(It.Header,{children:o.map((i,m)=>me(It.Column,{id:`column-${m}`,isRowHeader:m===0,children:i.props.children},String(i.key)))}),me(It.Body,{children:s.map((i,m)=>me(It.Row,{id:`row-${m}`,children:Wo(i).map(c=>me(It.Cell,{children:c.props.children},String(c.key)))},String(i.key)))})]})})})}function id(e,t){function n({children:o,className:s,node:i}){let m=od(s),c=String(o??"").replace(/\n$/,""),l=sd(e?.renderers,m);if(l){let p=l.component,d=i?.properties?.metastring;return me(oi,{fallback:me(No,{code:c,language:m}),children:me(p,{code:c,isIncomplete:t,language:m,meta:typeof d=="string"?d:void 0})})}return me(No,{code:c,language:m})}function r({children:o,className:s}){return me(Yu,{className:s,"data-slot":"markdown-inline-code",children:o})}return{a:({children:o,className:s,href:i})=>me(Xu,{className:s,href:i,rel:"noreferrer",target:"_blank",children:o}),code:n,h1:({children:o,className:s})=>me(vn,{className:s,level:1,children:o}),h2:({children:o,className:s})=>me(vn,{className:s,level:2,children:o}),h3:({children:o,className:s})=>me(vn,{className:s,level:3,children:o}),h4:({children:o,className:s})=>me(vn,{className:s,level:4,children:o}),h5:({children:o,className:s})=>me(vn,{className:s,level:5,children:o}),h6:({children:o,className:s})=>me(vn,{className:s,level:6,children:o}),hr:({className:o})=>me(Zu,{className:o,"data-slot":"markdown-separator",variant:"tertiary"}),inlineCode:r,p:({children:o,className:s})=>me(Ju,{className:s,"data-slot":"markdown-paragraph",size:"sm",children:o}),table:ad}}var Or=td(function({animated:t=Oa,caret:n="block",children:r,isStreaming:o=!1,plugins:s}){let i=nd(()=>id(s,o),[o,s]);return me(oi,{fallback:me("div",{className:"ha-markdown","data-streaming":o?!0:void 0,children:me("p",{children:r})}),children:me("div",{className:"ha-markdown","data-streaming":o?!0:void 0,children:me(rd,{normalizeHtmlIndentation:!0,parseIncompleteMarkdown:!0,animated:t,caret:o&&n!==!1?n:void 0,components:i,controls:!1,isAnimating:o,lineNumbers:!1,linkSafety:{enabled:!1},mode:o?"streaming":"static",plugins:s,children:r})})})});import{useEffect as ld}from"react";function ud(e,t=1){let n=e.scrollTop>t,r=e.scrollTop+e.clientHeight+t<e.scrollHeight;return n&&r?"both":n?"top":r?"bottom":"none"}function ai(e,t){delete e.dataset.topScroll,delete e.dataset.bottomScroll,delete e.dataset.topBottomScroll,t==="both"?e.dataset.topBottomScroll="true":t==="top"?e.dataset.topScroll="true":t==="bottom"&&(e.dataset.bottomScroll="true")}function Jt(e,t=1){ld(()=>{let n=e.current;if(!n)return;let r=null,o=null,s=()=>{r!==null&&cancelAnimationFrame(r),r=requestAnimationFrame(()=>{r=null;let c=ud(n,t);c!==o&&(o=c,ai(n,c))})};s(),n.addEventListener("scroll",s,{passive:!0});let i=typeof ResizeObserver>"u"?null:new ResizeObserver(s),m=typeof MutationObserver>"u"?null:new MutationObserver(s);return i?.observe(n),m?.observe(n,{characterData:!0,childList:!0,subtree:!0}),()=>{n.removeEventListener("scroll",s),i?.disconnect(),m?.disconnect(),r!==null&&cancelAnimationFrame(r),ai(n,"none")}},[t,e])}import{jsx as oe,jsxs as pt}from"react/jsx-runtime";var yd=24,vd=160,bd=220;function di(e,t,n,r){let o=Xo(!0);ui(()=>{let s=e.current;if(!s)return;let i,m=!1,c=()=>{let w=s.scrollHeight-s.scrollTop-s.clientHeight;o.current=w<=yd},l=()=>{m||c()},p=()=>{m=!1,window.clearTimeout(i),requestAnimationFrame(c)},d=()=>{if(!r||!n||!o.current)return;let w=typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,O=s.scrollHeight;if(typeof s.scrollTo!="function"){s.scrollTop=O;return}m=!w,s.scrollTo({behavior:w?"auto":"smooth",top:O}),window.clearTimeout(i),i=window.setTimeout(()=>{m=!1,c()},360)};s.addEventListener("scroll",l,{passive:!0}),s.addEventListener("pointerdown",p,{passive:!0}),s.addEventListener("touchstart",p,{passive:!0}),s.addEventListener("wheel",p,{passive:!0}),d();let S=s.firstElementChild,u=S&&typeof ResizeObserver<"u"?new ResizeObserver(d):null;return S&&u?.observe(S),()=>{s.removeEventListener("scroll",l),s.removeEventListener("pointerdown",p),s.removeEventListener("touchstart",p),s.removeEventListener("wheel",p),u?.disconnect(),window.clearTimeout(i)}},[t,r,n,e])}function Sd(e){let[t,n]=Jo(()=>({isStreaming:e,phase:e?"expanded":"collapsed"})),r=t.phase;return t.isStreaming!==e&&(r=e?"expanded":"fading",n({isStreaming:e,phase:r})),ui(()=>{if(e||r==="collapsed"||r==="expanded")return;let o=typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,s=o?"collapsed":r==="fading"?"collapsing":"collapsed",i=o?0:r==="fading"?vd:bd,m=window.setTimeout(()=>{n(c=>c.isStreaming===e&&c.phase===r?{...c,phase:s}:c)},i);return()=>window.clearTimeout(m)},[e,r]),r}var Ad={browse:li,chart:dd,code:pd,data:gd,search:fd,thinking:hd},ii="Working on your request";function Dr(e){return e.toLocaleLowerCase().replace(/\s+/g," ").replace(/[.…!?:;,]+$/u,"").trim()}function Cd(e){let t=e.find(m=>m.title?.trim()),n=t?.title?.trim(),r=e.find(m=>Dr(m.label)!=="understanding your request")??e[0],o=t??r,s=o?.kind??Nr(o?.label??n??""),i=new Set(e.map(m=>Dr(m.label)));return n&&!i.has(Dr(n))?{kind:s,title:n}:{kind:s,title:i.has(Dr(ii))?"Making progress":ii}}function ci({active:e}){return pt("span",{className:"ha-activity-icon","data-state":e?"active":"complete",children:[oe("span",{"aria-hidden":"true",className:"ha-activity-icon-state ha-activity-icon-state--active",children:oe("span",{className:"ha-activity-spinner"})}),oe("span",{"aria-hidden":"true",className:"ha-activity-icon-state ha-activity-icon-state--complete",children:oe(md,{})})]})}function mi({active:e,label:t}){return e?oe(kr,{className:"ha-activity-step-label ha-progress-shimmer",children:t}):oe("span",{className:"ha-activity-step-label",children:t})}function Td({detail:e,isDetailActive:t,isLabelActive:n,isTurnActive:r,label:o,markdownAnimation:s,markdownPlugins:i}){let[m,c]=Jo(()=>({isDetailActive:t,isExpanded:t})),l=m.isExpanded;m.isDetailActive!==t&&(l=t,c({isDetailActive:t,isExpanded:l}));let p=Xo(null);return Jt(p),di(p,e,t&&r,l),pt(Ye,{className:"ha-activity-step-disclosure",isExpanded:l,onExpandedChange:d=>c({isDetailActive:t,isExpanded:d}),children:[oe(Ye.Heading,{children:pt(Ye.Trigger,{className:"ha-activity-step-trigger",children:[oe(mi,{active:n,label:o}),oe(Ye.Indicator,{className:"ha-activity-step-chevron"})]})}),oe(Ye.Content,{className:"ha-activity-step-disclosure-content",children:oe(Ye.Body,{className:"ha-activity-detail",children:oe("div",{ref:p,className:"ha-activity-detail-inner",children:oe(Or,{animated:s,caret:!1,isStreaming:t?r:!1,plugins:i,children:e})})})})]})}function Rd(e){let t=Math.max(1,Math.round(e/1e3)),n=Math.floor(t/3600),r=Math.floor(t%3600/60),o=t%60;return n>0?`${n}h ${r}m`:r>0?`${r}m ${o}s`:`${o}s`}function Lr({ariaLabel:e,label:t}){return oe("div",{className:"ha-progress ha-activity-status",children:oe(kr,{"aria-label":e,className:"ha-progress-shimmer",role:"status",children:t})})}function pi({completedAt:e,defaultOpen:t=!1,hasResponseStarted:n=!1,isStreaming:r,items:o,markdownAnimation:s,markdownPlugins:i,startedAt:m}){let c=r&&!n,l=Sd(r),[p,d]=Jo(null),S=Xo(null),u=o.findLastIndex(b=>b.active),w=o.length-1,O=c?u>=0?u:w:-1,T=o.map((b,C)=>({...b,active:C===O})),E=Cd(T),V=p===null&&!t&&!r&&(l==="fading"||l==="collapsing"),I=p??(t||l==="expanded"||l==="fading"),k=p!==null||t?I?"expanded":"collapsed":l,$=m!==void 0&&e!==void 0&&!r?Math.max(0,e-m):null,Z=$===null?"Activity":`Worked for ${Rd($)}`,y=r||V?E.title:$===null?"Activity":Z,h=E.kind,f=Ad[h],A=T.map(b=>`${b.id}:${b.active?1:0}:${b.detail??""}:${b.sources?.map(C=>C.label).join(",")}`).join("|");return Jt(S),di(S,A,r,I),pt(Ye,{className:"ha-activity","data-complete":r?void 0:"true","data-phase":k,isExpanded:I,onExpandedChange:d,children:[oe(Ye.Heading,{children:pt(Ye.Trigger,{className:"ha-activity-trigger",children:[oe("span",{"aria-hidden":"true",className:"ha-activity-summary-icon",children:oe("span",{children:oe(f,{})},h)}),r||V?oe(kr,{className:"ha-activity-summary-label ha-progress ha-progress-shimmer",role:"status",children:y}):oe("span",{className:"ha-activity-summary-label ha-activity-summary-label--complete ha-progress",children:y}),oe(Ye.Indicator,{className:"ha-activity-chevron"})]})}),oe(Ye.Content,{className:"ha-activity-disclosure-content",children:oe(Ye.Body,{children:oe("div",{ref:S,className:"ha-activity-panel",children:pt("ol",{"aria-label":"Thinking steps",children:[T.map((b,C)=>pt("li",{"aria-current":b.active?"step":void 0,className:"ha-activity-item","data-active":b.active||void 0,"data-state":b.active?"active":"complete",children:[oe(ci,{active:b.active}),pt("div",{className:"ha-activity-content",children:[b.detail&&(b.active||b.detailVisibility==="always")?oe(Td,{detail:b.detail,isDetailActive:c?o[C]?.active===!0:!1,isLabelActive:b.active,isTurnActive:r,label:b.label,markdownAnimation:s,markdownPlugins:i}):oe(mi,{active:b.active,label:b.label}),b.sources?.length?oe("span",{"aria-label":"Sources",className:"ha-activity-sources",children:b.sources.map(M=>pt("span",{className:"ha-activity-source",children:[oe(li,{"aria-hidden":"true"}),M.label]},M.label))}):null]})]},b.id)),r?null:pt("li",{className:"ha-activity-item","data-complete":"true","data-state":"complete",children:[oe(ci,{active:!1}),oe("div",{className:"ha-activity-content",children:oe("span",{className:"ha-activity-step-label",children:"Final response ready"})})]})]})})})})]})}import{z as _d}from"zod";import{z as xt}from"zod";var wd=["callMcpTool","composeUI","executeSandbox","generateFile","getComponentSchema","renderComponent","searchKnowledge","searchMcpTools","searchWeb"],Md="mcp_",Ed=20,Pd=16*1024,Id=xt.object({description:xt.string().trim().min(1).max(1e3),inputSchema:xt.record(xt.string(),xt.unknown()),name:xt.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/).refine(e=>!wd.includes(e)&&!e.toLowerCase().startsWith(Md),"Client tool name is reserved by the HeroUI Agent runtime"),needsApproval:xt.boolean().optional()}),gi=xt.array(Id).max(Ed).superRefine((e,t)=>{let n=new Set;for(let r of e)n.has(r.name)&&t.addIssue({code:"custom",message:`Duplicate client tool name: ${r.name}`}),n.add(r.name);new TextEncoder().encode(JSON.stringify(e)).byteLength>Pd&&t.addIssue({code:"custom",message:"Client tool manifest exceeds 16KB"})});import{z as Xe}from"zod";var fi=Xe.object({excerpt:Xe.string().trim().min(1).max(2e3).optional(),locator:Xe.string().trim().min(1).max(160).optional(),sourceId:Xe.string().trim().min(1).max(120)}),xd=Xe.string().trim().max(2048).refine(e=>{try{return["http:","https:"].includes(new URL(e).protocol)}catch{return!1}}),Nd=Xe.union([fi.extend({sourceType:Xe.literal("document"),title:Xe.string().trim().min(1).max(200)}),fi.extend({sourceType:Xe.literal("url").optional(),title:Xe.string().trim().min(1).max(200).optional(),url:xd})]),hi=Xe.object({items:Xe.array(Nd).min(1).max(16)});function kd(e){return ga(e.parameters)?_d.toJSONSchema(e.parameters):e.parameters}function Nt(e){return gi.parse(e.map(t=>({description:t.description,inputSchema:kd(t),name:t.name,...t.needsApproval?{needsApproval:!0}:{}})))}var bn=class extends Error{constructor(){super("The assistant configuration changed and must be bootstrapped again"),this.name="AgentRuntimeRevisionStaleError"}},zn=class extends Error{retryable;status;constructor(t){super("Could not refresh the assistant connection"),this.name="AgentRuntimeTicketError",this.status=t,this.retryable=t===408||t===429||t>=500}},Hr=class extends Error{code;status;constructor(t,n){super("Could not bootstrap the assistant conversation"),this.name="AgentConversationBootstrapError",this.code=n,this.status=t}},Od=250,Dd=2e3,bi=new Set(["CONVERSATION_LEASE_CONFLICT","SETTLEMENT_ACKNOWLEDGEMENT_PENDING"]),Ld=15e3,yi=3e4;function Si(e){return e instanceof Hr&&e.status===409&&bi.has(e.code)}function Hd(e){return e===408||e===429||e>=500}function Ud(e,t){if(!e)return null;let n=Number(e);if(Number.isFinite(n)&&n>=0)return Math.max(250,Math.ceil(n*1e3));let r=Date.parse(e);return Number.isFinite(r)?Math.max(250,r-t):null}function Bd(e,t){return new Promise((n,r)=>{if(t.aborted){r(t.reason);return}let o=()=>{globalThis.clearTimeout(s),r(t.reason)},s=globalThis.setTimeout(()=>{t.removeEventListener("abort",o),n()},e);t.addEventListener("abort",o,{once:!0})})}function Ai(e){return{clientTools:Nt(e.tools),imageSearch:e.imageSearch,...e.composerDefaultModel?{modelId:e.composerDefaultModel}:{},newsSearch:e.newsSearch,webSearch:e.webSearch}}function Ci(e){return JSON.stringify(Ai(e))}function Ur(e,t=!1){return{Authorization:`Bearer ${e}`,...t?{"Content-Type":"application/json"}:{},"X-HeroUI-Agent-Protocol-Version":String(6),"X-HeroUI-Agent-SDK-Version":We}}async function Gn(e,t,n={}){let r=async()=>{let s=new Headers(n.headers);return s.set("Authorization",`Bearer ${await e.get()}`),s.set("X-HeroUI-Agent-Protocol-Version",String(6)),s.set("X-HeroUI-Agent-SDK-Version",We),fetch(t,{...n,headers:s})},o=await r();return o.status===401&&(e.clear(),o=await r()),o}function vi(e){if(typeof e!="string"||!e)return!1;let t=Date.parse(e);return Number.isFinite(t)&&new Date(t).toISOString()===e}var Fd=/^sha256:[0-9a-f]{64}$/u;function Ti(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(typeof t.baseUrl!="string"||typeof t.path!="string"||typeof t.ticket!="string"||!t.baseUrl||!t.path||!t.ticket||!vi(t.ticketExpiresAt)||!vi(t.connectionExpiresAt)||typeof t.runtimeRevision!="string"||!Fd.test(t.runtimeRevision))return null;try{let n=new URL(t.baseUrl);if(n.protocol!=="http:"&&n.protocol!=="https:")return null}catch{return null}return{baseUrl:t.baseUrl,connectionExpiresAt:t.connectionExpiresAt,path:t.path,runtimeRevision:t.runtimeRevision,ticket:t.ticket,ticketExpiresAt:t.ticketExpiresAt}}function Vd(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,n=t.conversation,r=Ti(t.runtime);if(t.protocolVersion!==6||!n||typeof n!="object"||Array.isArray(n)||!r)return null;let o=n;return typeof o.id!="string"||typeof o.agentId!="string"||typeof o.projectId!="string"||!o.id||!o.agentId||!o.projectId||r.path!==`/v1/conversations/${encodeURIComponent(o.id)}/connect`?null:{conversation:{agentId:o.agentId,id:o.id,projectId:o.projectId},protocolVersion:6,runtime:r}}function $d(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;return Ti(t.runtime??t)}async function Ri(e,t,n){let r=new AbortController,o=Date.now()+yi,s=globalThis.setTimeout(()=>r.abort(new Error("Assistant conversation bootstrap request timed out")),yi),i=Od;try{for(;;){let m=await Gn(t,`${e.apiBaseUrl}/v1/conversations/${encodeURIComponent(n)}/bootstrap`,{body:JSON.stringify(Ai(e)),headers:{"Content-Type":"application/json"},method:"POST",signal:r.signal});if(!m.ok){let l=await m.json().catch(()=>null),p=typeof l?.code=="string"?l.code.toUpperCase():"";if(m.status===409&&bi.has(p))throw new Hr(m.status,p);if(!Hd(m.status))return null;let d=Date.now(),S=Ud(m.headers.get("Retry-After"),d)??i;if(d+S>=o)return null;await Bd(S,r.signal),i=Math.min(i*2,Dd);continue}let c=Vd(await m.json().catch(()=>null));return c?.conversation.id!==n||c?.conversation.agentId!==e.agentId?null:c}}finally{globalThis.clearTimeout(s)}}async function wi(e,t,n,r){let o=new AbortController,s=globalThis.setTimeout(()=>o.abort(new Error("Assistant connection ticket request timed out")),Ld);try{let i=await Gn(t,`${e.apiBaseUrl}/v1/conversations/${encodeURIComponent(n)}/runtime-ticket`,{body:JSON.stringify({runtimeRevision:String(r)}),headers:{"Content-Type":"application/json"},method:"POST",signal:o.signal}),m=await i.json().catch(()=>null);if(!i.ok){let l=typeof m?.code=="string"?m.code.toUpperCase():"";throw i.status===409||l.includes("STALE")&&l.includes("REVISION")?new bn:new zn(i.status)}let c=$d(m);if(!c||c.runtimeRevision!==r||c.path!==`/v1/conversations/${encodeURIComponent(n)}/connect`)throw new Error("The assistant returned an invalid connection ticket");return c}finally{globalThis.clearTimeout(s)}}async function Ne(e,t,n,r,o={}){try{await fetch(`${e.apiBaseUrl}/v1/agents/${encodeURIComponent(e.agentId)}/events`,{body:JSON.stringify({conversationId:n,event:r,properties:{...o,protocolVersion:6,sdkVersion:We}}),headers:Ur(await t.get(),!0),keepalive:!0,method:"POST"})}catch{}}function Sn(e,t=vo){let n=new Set(t),o=e.filter(s=>{let i=$n(s.type,s.name);return i!==null&&n.has(i)&&s.size>0&&s.size<=10485760}).slice(0,5);return e.length>5?{error:`You can attach up to ${5} files at a time.`,files:o}:e.some(s=>!$n(s.type,s.name)||!n.has($n(s.type,s.name)??""))?{error:Qd(t),files:o}:e.some(s=>s.size===0)?{error:"Empty files cannot be attached.",files:o}:e.some(s=>s.size>10485760)?{error:"Each attachment must be 10 MB or smaller.",files:o}:{error:null,files:o}}async function Mi({acceptedContentTypes:e=vo,apiBaseUrl:t,conversationId:n,files:r,tokenManager:o}){if(r.length===0)return[];let s=Sn(r,e);if(s.error||s.files.length!==r.length)throw new Error(s.error??"One or more attachments are not supported.");return Promise.all(r.map(i=>Kd({apiBaseUrl:t,conversationId:n,file:i,tokenManager:o})))}function Qd(e){if(e.length===0)return"File attachments are disabled for this agent.";let t=e.map(o=>{let s=va[o];return s==="jpg"?"JPEG":s==="md"?"Markdown":s.toUpperCase()}),n=[...new Set(t)];return`Use ${n.length===1?n[0]:n.length===2?n.join(" or "):`${n.slice(0,-1).join(", ")}, or ${n.at(-1)}`} files.`}async function Kd({apiBaseUrl:e,conversationId:t,file:n,tokenManager:r}){let o=$n(n.type,n.name);if(!o||!ba(o))throw new Error("This attachment type is not supported.");let s=await Ei({apiBaseUrl:e,body:n,contentType:o,conversationId:t,filename:n.name,tokenManager:r});return{filename:n.name,mediaType:o,type:"file",url:s.url}}var qd={csv:"text/csv",json:"application/json",tsv:"text/tab-separated-values"};async function ts({apiBaseUrl:e,conversationId:t,input:n,tokenManager:r}){let o=n.format??"json",s=qd[o],i=zd(n.filename,o),m;if(n.data instanceof Blob)m=n.data;else if(n.data instanceof ArrayBuffer||ArrayBuffer.isView(n.data))m=new Blob([n.data],{type:s});else if(o==="json"){let l;try{l=JSON.stringify(n.data)}catch{throw new Error("The data source must be JSON-serializable.")}if(l===void 0)throw new Error("The data source must be JSON-serializable.");m=new Blob([l],{type:s})}else if(typeof n.data=="string")m=new Blob([n.data],{type:s});else throw new Error(`${o.toUpperCase()} data sources must be text or bytes.`);if(m.size===0)throw new Error("The data source cannot be empty.");if(m.size>10485760)throw new Error("Each data source must be 10 MB or smaller.");let c=await Ei({apiBaseUrl:e,assetKind:"data-source",body:m,contentType:s,conversationId:t,filename:i,tokenManager:r});return{filename:i,format:o,id:c.id,kind:"heroui-agent-data-source",mediaType:s,size:c.size,url:c.url}}function zd(e,t){let r=e?.replaceAll("\\","/").split("/").at(-1)?.trim()?.replace(/[\r\n\0]/gu,"-").replace(/\.[^.]*$/u,"").trim(),o="agent-data-source",s=179-t.length,i="";for(let m of r||o){if(i.length+m.length>s)break;i+=m}return`${i||o}.${t}`}async function Ei({apiBaseUrl:e,assetKind:t="attachment",body:n,contentType:r,conversationId:o,filename:s,tokenManager:i}){let m=`${e}/v1/conversations/${encodeURIComponent(o)}/attachments`;for(let c=0;c<2;c+=1){let l=await i.get(),p=await fetch(m,{body:n,headers:{Authorization:`Bearer ${l}`,"Content-Type":r,"X-HeroUI-Agent-Asset-Kind":t,"X-HeroUI-Agent-Filename":encodeURIComponent(s),"X-HeroUI-Agent-Protocol-Version":String(6),"X-HeroUI-Agent-SDK-Version":We},method:"POST"});if(p.status===401&&c===0){i.clear();continue}if(!p.ok)throw new Error(await Gd(p));let d=await p.json().catch(()=>null);if(typeof d?.id!="string"||typeof d?.size!="number"||typeof d?.url!="string")throw new Error("The attachment upload returned an invalid response.");return{id:d.id,size:d.size,url:d.url}}throw new Error("The attachment could not be uploaded. Try again.")}async function Gd(e){let t=await e.json().catch(()=>null);return typeof t?.error=="string"&&t.error.trim()?t.error:e.status===413?"Each attachment must be 10 MB or smaller.":e.status===415?"This attachment type is not supported.":"The attachment could not be uploaded. Try again."}import{z as _e}from"zod";var jd=64*1024,Wd=15e3,Yd=5*6e4,Xd=_e.discriminatedUnion("action",[_e.object({action:_e.literal("execute"),claimId:_e.string().uuid(),idempotencyKey:_e.string().trim().min(1).max(160)}).strict(),_e.object({action:_e.literal("replay"),idempotencyKey:_e.string().trim().min(1).max(160),output:_e.unknown()}).strict(),_e.object({action:_e.literal("wait"),idempotencyKey:_e.string().trim().min(1).max(160),retryAfterMs:_e.number().int().min(25).max(5e3)}).strict()]),Jd=_e.object({output:_e.unknown(),status:_e.enum(["completed","failed","interrupted"])}).strict();async function Pi({activeToolCallIds:e,run:t,toolCallId:n}){if(e.has(n))return{status:"already-active"};e.add(n);try{return{status:"completed",value:await t()}}catch(r){throw e.delete(n),r}}function ns(e){return Array.isArray(e)?`[${e.map(ns).join(",")}]`:e&&typeof e=="object"?`{${Object.entries(e).sort(([t],[n])=>t.localeCompare(n)).map(([t,n])=>`${JSON.stringify(t)}:${ns(n)}`).join(",")}}`:JSON.stringify(e)??"undefined"}async function Zd(e){return[...new Uint8Array(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e)))].map(n=>n.toString(16).padStart(2,"0")).join("")}function em(e){return{error:e instanceof Error?e.message.slice(0,1e3):"The tool could not be executed"}}function tm(e){let t=e??{done:!0},n;try{n=JSON.stringify(t)}catch{return{output:{error:"The client tool returned a non-serializable result"},status:"failed"}}return n===void 0?{output:{done:!0},status:"completed"}:new TextEncoder().encode(n).byteLength>jd?{output:{error:"The client tool result exceeded the 64 KiB limit"},status:"failed"}:{output:JSON.parse(n),status:"completed"}}function Ii({approvalApproved:e,decision:t,needsApproval:n,state:r}){return r==="approval-responded"?e===!0:r!=="input-available"?!1:!n||t==="approved"}async function nm(e){return Zd(ns(e))}function xi({context:e,execution:t,input:n,tool:r}){return r.execute(yr(r,n),e,t)}async function Ni({conversationId:e,execute:t,input:n,maxWaitMs:r=Yd,now:o=Date.now,rpc:s,submitOutput:i,toolCallId:m,toolName:c,uploadDataSource:l,wait:p=d=>new Promise(S=>setTimeout(S,d))}){let d={inputHash:await nm(n),protocolVersion:6,toolCallId:m,toolName:c},S=o(),u;for(;u=Xd.parse(await s.claim(d)),u.action==="wait";){if(o()-S+u.retryAfterMs>r)throw new Error("Timed out waiting for the existing client tool execution");await p(u.retryAfterMs)}if(u.action==="replay")return await i(u.output),"replayed";let w={conversationId:e,idempotencyKey:u.idempotencyKey,toolCallId:m};Object.defineProperty(w,"uploadDataSource",{enumerable:!1,value:l??(()=>Promise.reject(new Error("Data-source uploads are unavailable in this client.")))});let O,T;try{({output:O,status:T}=tm(await t(w)))}catch(V){T="failed",O=em(V)}let E;for(;;)try{E=Jd.parse(await s.complete({...d,claimId:u.claimId,output:O,status:T}));break}catch(V){if(o()-S+250>r)throw V;await p(250)}return await i(E.output),"executed"}var rs=Wd;var rm=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;function _i(e){return e.map(({description:t,inputSchema:n,name:r})=>({description:t,name:r,parameters:n}))}function ki(e){return Object.fromEntries(_i(e).map(({description:t,name:n,parameters:r})=>[n,{description:t,execute:()=>{throw new Error("HeroUI client tools execute through the approval-aware bridge")},parameters:r}]))}function Oi(e){try{let t=JSON.parse(e);return t.type!=="cf_agent_tool_approval"||t.approved!==!0||t.autoContinue!==!0?e:JSON.stringify({...t,autoContinue:!1})}catch{return e}}function os({clientSubmittedAt:e,clientTools:t,generateConversationTitle:n,imageSearch:r,modelId:o,newsSearch:s,pageContext:i,permissionMode:m,turnId:c,webSearch:l}){if(!rm.test(c))throw new Error("HeroUI Agent turnId must be a UUID");if(!Number.isSafeInteger(e)||e<=0)throw new Error("HeroUI Agent clientSubmittedAt must be a positive timestamp");return{clientSubmittedAt:e,clientTools:_i(t),...n===void 0?{}:{generateConversationTitle:n},imageSearch:r,...o?{modelId:o}:{},newsSearch:s,pageContext:i,permissionMode:m,protocolVersion:6,requestId:c,sdkVersion:We,turnId:c,webSearch:l}}function Di(e){return e.replace(/^\/+|\/+$/g,"")}function Li(e){let t=new URL(e.baseUrl),n=Di(t.pathname),r=Di(e.path);if(!r)throw new Error("The assistant returned an invalid connection path");return{basePath:n||r,host:t.host,...n?{path:r}:{},protocol:t.protocol==="http:"?"ws":"wss"}}function Hi(e,t){let n=e;return{next:async()=>{if(n){let r=n;return n=null,r}return t()},refresh:t}}function Ui(e){if(typeof e.data!="string")return null;try{let t=JSON.parse(e.data);return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}function Bi(e,{fillComposer:t,setSelection:n,submitPrompt:r}){return e.type==="followup"?(r(e.prompt),!0):e.type==="submit"?(n({componentId:e.componentId,componentTitle:e.componentTitle,datum:{actionId:e.actionId,values:e.values}}),e.prompt&&t(e.prompt),!0):e.type==="tool"?(t(e.prompt??e.label),!0):!1}function om(e){return e==="composeUI"||e==="renderComponent"}function ss(e){if(!e||typeof e!="object")return!1;let t=e,n=t.state;if(n!=="input-streaming"&&n!=="input-available")return!1;let r=t.type,o=r==="dynamic-tool"?t.toolName:typeof r=="string"&&r.startsWith("tool-")?r.slice(5):null;return om(o)}import{Xmark as Am}from"@gravity-ui/icons";import{File as sm,FileCode as am,FileLetterP as im,FileLetterW as cm,FileLetterX as lm,FileText as um,FileZipper as dm,MusicNote as mm,Picture as pm,Video as gm}from"@gravity-ui/icons";var fm=new Set(["csv","ods","xls","xlsm","xlsx"]),hm=new Set(["doc","docx","odt","rtf"]),ym=new Set(["css","go","html","java","js","json","jsx","mdx","php","py","rb","rs","scss","sh","sql","swift","ts","tsx","xml","yaml","yml"]),vm=new Set(["7z","bz2","gz","rar","tar","tgz","zip"]),bm=new Set(["log","md","text","txt"]);function Sm(e){let t=e.trim().toLowerCase(),n=t.lastIndexOf(".");return n>0?t.slice(n+1):""}function Br(e){let t=Sm(e.name),n=e.type.toLowerCase();return fm.has(t)||n.includes("csv")||n.includes("excel")||n.includes("spreadsheet")?{Icon:lm,kind:"spreadsheet",label:"Spreadsheet"}:t==="pdf"||n==="application/pdf"?{Icon:im,kind:"pdf",label:"PDF document"}:hm.has(t)||n.includes("wordprocessingml")?{Icon:cm,kind:"document",label:"Document"}:n.startsWith("image/")?{Icon:pm,kind:"image",label:"Image"}:n.startsWith("video/")?{Icon:gm,kind:"video",label:"Video"}:n.startsWith("audio/")?{Icon:mm,kind:"audio",label:"Audio"}:vm.has(t)||n.includes("zip")?{Icon:dm,kind:"archive",label:"Archive"}:ym.has(t)?{Icon:am,kind:"code",label:"Code file"}:bm.has(t)||n.startsWith("text/")?{Icon:um,kind:"text",label:"Text document"}:{Icon:sm,kind:"file",label:"File"}}import{jsx as An,jsxs as Fi}from"react/jsx-runtime";function as({file:e,onRemove:t}){let{Icon:n,kind:r,label:o}=Br(e);return Fi("span",{className:"ha-attachment","data-kind":r,children:[An("span",{"aria-hidden":"true",className:"ha-attachment-icon",children:An(n,{})}),Fi("span",{className:"ha-attachment-copy",children:[An("span",{className:"ha-attachment-name",title:e.name,children:e.name}),An("span",{className:"ha-attachment-type",children:o})]}),An("button",{"aria-label":`Remove ${e.name}`,type:"button",onClick:t,children:An(Am,{"aria-hidden":"true"})})]})}import{Globe as Cm,Xmark as Tm}from"@gravity-ui/icons";import{jsx as is,jsxs as Vi}from"react/jsx-runtime";function $i({onRemove:e,title:t}){return is("div",{className:"ha-context",children:Vi("button",{"aria-label":`Remove Ask about this: ${t}`,className:"ha-chip",type:"button",onClick:e,children:[is(Cm,{"aria-hidden":"true",className:"ha-chip-leading"}),Vi("span",{className:"ha-chip-title",title:t,children:["Ask about this: ",t]}),is(Tm,{"aria-hidden":"true",className:"ha-chip-remove"})]})})}import{useCallback as Fr,useState as Rm}from"react";import{jsx as wm}from"react/jsx-runtime";function cs(e){return e.dataTransfer?.types?.includes("Files")??!1}function Qi({children:e,className:t,"data-controls-revealed":n,"data-dictating":r,"data-expanded":o,disabled:s=!1,onFileIntent:i,onFilesSelected:m}){let[c,l]=Rm(!1),p=Fr(w=>{cs(w)&&(i?.(),!s&&(w.preventDefault(),l(!0)))},[s,i]),d=Fr(w=>{s||!cs(w)||(w.preventDefault(),w.dataTransfer.dropEffect="copy",l(!0))},[s]),S=Fr(w=>{let O=w.relatedTarget;O&&w.currentTarget.contains(O)||l(!1)},[]),u=Fr(w=>{cs(w)&&(i?.(),w.preventDefault(),l(!1),!(s||w.dataTransfer.files.length===0)&&m(Array.from(w.dataTransfer.files)))},[s,i,m]);return wm("div",{className:t,"data-controls-revealed":n,"data-dictating":r,"data-dragging":c||void 0,"data-expanded":o,onDragEnterCapture:p,onDragLeaveCapture:S,onDragOverCapture:d,onDropCapture:u,children:e})}var ls="Enter";var Ki="Control+Shift+D";function qi(e){return!e.defaultPrevented&&!e.isComposing&&!e.repeat&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey&&e.key==="Enter"}function zi(e){return!e.defaultPrevented&&!e.isComposing&&!e.repeat&&!e.altKey&&e.ctrlKey&&!e.metaKey&&e.shiftKey&&e.key.toLowerCase()==="d"}function Gi(e,t){if(e.defaultPrevented||e.isComposing||e.repeat||e.altKey||!e.ctrlKey||e.metaKey||e.shiftKey)return null;let n=Number(e.key);return!Number.isInteger(n)||n<1||n>Math.min(t,9)?null:n-1}function us(){return{activeTurnIds:new Set,busyIds:new Set,completedIds:new Set}}function ji(e,t){let{activeConversationId:n,busy:r,conversationId:o,failed:s,turnActive:i}=t,m=e.activeTurnIds.has(o),c=new Set(e.activeTurnIds),l=new Set(e.busyIds),p=new Set(e.completedIds);return r?l.add(o):l.delete(o),i?c.add(o):r||c.delete(o),(r||n===o)&&p.delete(o),!r&&m&&!s&&n!==o&&p.add(o),{activeTurnIds:c,busyIds:l,completedIds:p}}function ds(e,t){if(!e.completedIds.has(t))return e;let n=new Set(e.completedIds);return n.delete(t),{...e,completedIds:n}}function Wi(e,t){if(!e.activeTurnIds.has(t)&&!e.busyIds.has(t)&&!e.completedIds.has(t))return e;let n=new Set(e.activeTurnIds),r=new Set(e.busyIds),o=new Set(e.completedIds);return n.delete(t),r.delete(t),o.delete(t),{activeTurnIds:n,busyIds:r,completedIds:o}}function Yi(e,t,n=()=>crypto.randomUUID()){return e?.conversationEpoch===t?e:{conversationEpoch:t,conversationId:n()}}function Vr({conversationEpoch:e,optimisticTarget:t,requestedConversationId:n,storedConversationId:r}){return n===null&&t?.conversationEpoch===e&&At(t.conversationId)?t.conversationId:Oo(n,r)}function Xi({conversationEpoch:e,optimisticTarget:t,readyConversationId:n,readyEpoch:r,requestedConversationId:o}){if(r!==e)return null;let s=o===null?t?.conversationEpoch===e?t.conversationId:null:typeof o=="string"?o:n;return n===s?n:null}import{jsx as ms}from"react/jsx-runtime";function $r({agentId:e,composerControlsAvailable:t,composerControlsRevealed:n,composerEndSlot:r,composerFooterSlot:o,composerStartSlot:s,greeting:i,loadingLabel:m,onComposerControlsReveal:c,placeholder:l,showStartScreen:p,subtitle:d,suggestedPrompts:S}){return p?ms(ka,{composerConnecting:!0,agentId:e,composerControlsAvailable:t,composerControlsRevealed:n,composerEndSlot:r,composerFooterSlot:o,composerStartSlot:s,greeting:i,placeholder:l,subtitle:d,suggestedPrompts:S,onComposerControlsReveal:c,onIntent:()=>{}}):ms("div",{className:"ha-loading",children:ms(Yt,{className:"ha-progress ha-progress-shimmer",children:m})})}function Mm(e,t){if(!e)return 1e3;let n=Number(e);if(Number.isFinite(n)&&n>=0)return Math.max(250,Math.ceil(n*1e3));let r=Date.parse(e);return Number.isFinite(r)?Math.max(250,r-t):1e3}async function Ji({initialResponse:e,maxWaitMs:t=3e5,now:n=Date.now,request:r,sleep:o=s=>new Promise(i=>setTimeout(i,s))}){let s=n(),i=e;for(;i.status===409;){let m=Mm(i.headers.get("Retry-After"),n());if(n()-s+m>t)return i;await o(m),i=await r()}return i}var jn="Thinking\u2026";function Zi({activeStreamKey:e,activeTurnMessageId:t}){return e!==null&&t===null}function ec({continuingAssistantMessageId:e,isActiveTurn:t,streamingAssistantMessageId:n,trackedActivityMessageId:r}){return t?n??r??e:null}function tc({hasActiveActivity:e,hasError:t,hasResponseStarted:n,isActiveTurn:r,messageCount:o,preferHomeWhileEmpty:s=!1,progress:i,runtimeStatus:m}){let c=o>0,l=!s&&!c&&(m==="pending"||m==="streaming"),p=!c&&!t&&!r&&!l;return e||n?{showHome:p,standaloneStatus:null}:r?{showHome:p,standaloneStatus:i??jn}:l?{showHome:p,standaloneStatus:"Loading chat\u2026"}:{showHome:p,standaloneStatus:null}}import{jsx as Em}from"react/jsx-runtime";function nc({activeConversationId:e,children:t,routes:n}){return Object.values(n).map(r=>{let o=r.conversationId===e;return Em("div",{className:"ha-conversation-route","data-active":o||void 0,"data-conversation-route":r.conversationId,hidden:!o,children:t(r,o)},r.conversationId)})}function rc({isActive:e,lastUserMessageId:t,pendingTurn:n}){let r=t??null,o=n?r!==n.previousUserMessageId:r!==null,s=e?o?r:null:r;return{activeStreamKey:e?n?.scrollKey??null:null,activeTurnMessageId:s}}import{ChevronDown as Om}from"@gravity-ui/icons";import{Button as Dm}from"@heroui/react";import{useLayoutEffect as Lm,useRef as Hm}from"react";import{useCallback as _t,useEffect as Pm,useLayoutEffect as Im,useRef as Ke,useState as xm}from"react";var kt=4,Zt=1,oc="--ha-active-turn-spacer-height",sc='[data-role="user"][data-stream-anchor="true"]',Nm={hasOverflow:!1,isAtBottom:!0};function Wn(e){let t=e.scrollHeight-e.clientHeight>kt,n=!t||e.scrollHeight-Math.max(0,e.scrollTop)-e.clientHeight<=kt;return{hasOverflow:t,isAtBottom:n}}function _m({anchorTop:e,clientHeight:t,contentHeight:n,paddingTop:r}){let o=Math.max(0,n-e);return Math.min(Math.max(t-o-r,0),t)}function km(e,t){return e.hasOverflow===t.hasOverflow&&e.isAtBottom===t.isAtBottom}function ac(e){return e==="smooth"&&!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches?"smooth":"auto"}function ic(e){let t=Ke(0),n=Ke(!0),r=Ke(!1),o=Ke(null),s=Ke(!1),i=Ke(!1),m=Ke(null),c=Ke(0),l=Ke(null),p=Ke(null),d=Ke(!1),S=Ke(!1),u=Ke(!1),[w,O]=xm(Nm),T=_t(y=>{O(h=>km(h,y)?h:y)},[]),E=_t(y=>{t.current=0,y.style.removeProperty(oc)},[]),V=_t(y=>{let h=l.current?y.querySelector(sc):null;if(!h)return t.current;let f=y.getBoundingClientRect(),b=h.getBoundingClientRect().top-f.top+y.scrollTop,C=y.scrollHeight-t.current,M=Number.parseFloat(window.getComputedStyle(y).paddingTop)||0,x=_m({anchorTop:b,clientHeight:y.clientHeight,contentHeight:C,paddingTop:M});return Math.abs(x-t.current)>1&&(t.current=x,y.style.setProperty(oc,`${x}px`)),t.current},[]),N=_t((y="smooth")=>{let h=e.current;if(!h)return;l.current=null,p.current=null,i.current=!1,d.current=!1,S.current=!1,u.current=!1,E(h),n.current=!0,r.current=!1,c.current=h.scrollTop,T({hasOverflow:Wn(h).hasOverflow,isAtBottom:!0});let f=h.scrollHeight,A=Math.max(0,f-h.clientHeight);s.current=Math.abs(Math.max(0,h.scrollTop)-A)>Zt,typeof h.scrollTo=="function"?h.scrollTo({behavior:ac(y),top:f}):h.scrollTop=f,c.current=Math.max(0,h.scrollTop)},[E,e,T]),I=_t(y=>{if(!l.current)return null;let h=y.querySelector(sc);if(h){let f=Number.parseFloat(window.getComputedStyle(y).paddingTop)||0;p.current=Math.max(0,h.offsetTop-f)}return p.current},[]),k=_t((y,h,f="auto")=>{let A=Math.max(0,y.scrollHeight-y.clientHeight),b=Math.min(h,A),C=ac(f),M=Math.abs(Math.max(0,y.scrollTop)-b)>Zt;i.current=C==="smooth"&&M,s.current=M,!M&&t.current>kt&&(d.current=!0),c.current=y.scrollTop,T({hasOverflow:A>kt,isAtBottom:A-b<=kt}),typeof y.scrollTo=="function"?y.scrollTo({behavior:C,top:h}):(y.scrollTop=h,i.current=!1),c.current=Math.max(0,y.scrollTop)},[T]),$=_t(()=>{let y=e.current;if(!y)return;V(y);let h=Wn(y),f=Math.max(0,y.scrollTop),A=f<c.current-Zt;if(c.current=f,A&&!h.isAtBottom){n.current=!1,r.current=!0,s.current=!1,i.current=!1,l.current=null,p.current=null,S.current=!1,T(h);return}!r.current&&(!h.hasOverflow||h.isAtBottom)&&(n.current=!0);let b=l.current!==null,C=I(y);if(b){if(r.current=!0,C!==null&&i.current){let M=Math.max(0,y.scrollHeight-y.clientHeight),x=Math.min(C,M);if(Math.abs(f-x)>Zt){T({hasOverflow:h.hasOverflow,isAtBottom:!0});return}s.current=!1,i.current=!1,d.current=t.current>kt}if(C!==null&&S.current){S.current=!1,k(y,C,"smooth");return}n.current=!1,T(h);return}if(n.current&&!r.current){N("auto");return}T(h)},[I,e,N,k,T,V]),Z=_t(y=>{let h=e.current;if(!h||o.current===y)return;let f=o.current!==null;if(o.current=y,y)d.current=!1,m.current!==y?(m.current=y,l.current=y,p.current=null,S.current=!0,u.current=!1,r.current=!0,n.current=!0):(l.current=null,p.current=null,S.current=!1);else if(f){l.current=null,p.current=null,s.current=!1,i.current=!1,d.current=t.current>kt,S.current=!1,r.current=!0;let A=Wn(h);n.current=!1,T(A)}},[e,T]);return Im(()=>{let y=e.current;y&&(c.current=y.scrollTop,$(),r.current=!0,n.current=!1)},[$,e]),Pm(()=>{let y=e.current;if(!y)return;let h=()=>{let U=Math.max(0,y.scrollTop);s.current&&typeof y.scrollTo=="function"&&y.scrollTo({behavior:"auto",top:U}),u.current=!0,n.current=!1,r.current=!0,s.current=!1,i.current=!1,l.current=null,p.current=null,S.current=!1,c.current=U,T(Wn(y))},f=U=>{U.deltaY<0&&h()},A=null,b=U=>{A=U.touches[0]?.clientY??null},C=U=>{let W=U.touches[0]?.clientY??null;A!==null&&W!==null&&W>A&&h(),A=W},M=()=>{let U=Wn(y),W=Math.max(0,y.scrollTop),ie=W<c.current-Zt,pe=W>c.current+Zt;if(c.current=W,u.current){U.isAtBottom&&pe&&!d.current?(u.current=!1,n.current=!0,r.current=!1):(n.current=!1,r.current=!0),T(U);return}if(d.current){s.current=!1,i.current=!1,n.current=!1,r.current=!0,T(U);return}if(s.current&&!ie){let H=I(y),Q=Math.max(0,y.scrollHeight-y.clientHeight),D=Math.min(H??Q,Q),_=U.isAtBottom||Math.abs(W-D)<=Zt,G=i.current;_&&(s.current=!1,i.current=!1,H!==null&&(d.current=t.current>kt,r.current=!0,n.current=!1)),T(G&&!_?{hasOverflow:U.hasOverflow,isAtBottom:!0}:H===null?r.current?U:{hasOverflow:U.hasOverflow,isAtBottom:n.current}:U);return}s.current=!1,i.current=!1,l.current=null,p.current=null,S.current=!1,n.current=U.isAtBottom,r.current=!U.isAtBottom,T(U)};y.addEventListener("scroll",M,{passive:!0}),y.addEventListener("touchmove",C,{passive:!0}),y.addEventListener("touchstart",b,{passive:!0}),y.addEventListener("wheel",f,{passive:!0});let x,L=new Set,X=()=>{if(!x)return;let U=new Set(Array.from(y.children));for(let W of L)U.has(W)||(x.unobserve(W),L.delete(W));for(let W of U)L.has(W)||(x.observe(W),L.add(W))};typeof ResizeObserver<"u"&&(x=new ResizeObserver($),x.observe(y),X());let j=typeof MutationObserver>"u"?void 0:new MutationObserver(U=>{U.some(W=>W.type==="childList"&&W.target===y)&&X(),$()});return j?.observe(y,{characterData:!0,childList:!0,subtree:!0}),()=>{y.removeEventListener("scroll",M),y.removeEventListener("touchmove",C),y.removeEventListener("touchstart",b),y.removeEventListener("wheel",f),j&&j.disconnect(),x&&x.disconnect()}},[I,$,e,T]),{hasOverflow:w.hasOverflow,isAtBottom:w.isAtBottom,maintainScrollPosition:$,scrollToBottom:N,setPinnedStream:Z}}import{jsx as Qr,jsxs as Um}from"react/jsx-runtime";function cc({activityPhase:e=null,children:t,streamKey:n=null}){let r=Hm(null),{hasOverflow:o,isAtBottom:s,maintainScrollPosition:i,scrollToBottom:m,setPinnedStream:c}=ic(r),l=o&&!s;return Jt(r),Lm(()=>{c(n),i()},[t,i,c,n]),Um("div",{className:"ha-conversation","data-activity-phase":e??void 0,children:[Qr("div",{ref:r,"aria-live":"polite",className:"ha-messages",role:"log",children:t}),Qr("div",{"aria-hidden":l?void 0:!0,className:"ha-scroll-button-container","data-state":l?"visible":"hidden",children:Qr(Dm,{isIconOnly:!0,"aria-hidden":l?void 0:!0,"aria-label":"Scroll to bottom",className:"ha-scroll-button",isDisabled:!l,size:"sm",variant:"secondary",onPress:()=>m("smooth"),children:Qr(Om,{"aria-hidden":"true"})})})]})}import{Suspense as Bm,lazy as Fm}from"react";var ps;function gs(){return ps??=import("./component-renderer-KWBZJPBV.js").then(e=>({default:e.ComponentRenderer})),ps}function lc(){gs().catch(()=>{ps=void 0})}import{jsx as uc}from"react/jsx-runtime";var Vm=Fm(gs);function dc(e){return uc(Bm,{fallback:null,children:uc(Vm,{...e})})}import{ArrowsRotateLeft as $m,Check as Qm,Copy as Km,ThumbsDown as qm,ThumbsUp as zm}from"@gravity-ui/icons";import{Button as Kr,Popover as qr,TextArea as Gm}from"@heroui/react";import{useCallback as jm,useEffect as Wm,useRef as mc,useState as Yn}from"react";import{Fragment as Zm,jsx as Re,jsxs as Xn}from"react/jsx-runtime";var Ym=2e3,Xm=1e3,Jm=[{label:"Incorrect",value:"incorrect"},{label:"Off topic",value:"not_relevant"},{label:"Missing details",value:"incomplete"},{label:"Unclear",value:"unclear"},{label:"Missed instructions",value:"did_not_follow_instructions"},{label:"Other",value:"other"}];function pc({actions:e,feedback:t,onCopy:n,onFeedback:r,onRetry:o}){let[s,i]=Yn(!1),[m,c]=Yn(!1),[l,p]=Yn(""),[d,S]=Yn([]),[u,w]=Yn(),O=mc(null),T=mc(0),E=jm(h=>{w(h?.closest(".ha-panel")??void 0)},[]);Wm(()=>()=>{O.current!==null&&window.clearTimeout(O.current)},[]);let V=e.includes("copy")&&n,N=e.includes("feedback")&&r,I=e.includes("retry")&&o;if(!V&&!N&&!I)return null;let k=()=>{n?.(),i(!0),O.current!==null&&window.clearTimeout(O.current),O.current=window.setTimeout(()=>{i(!1),O.current=null},Ym)},$=h=>{!h&&Date.now()-T.current<350||c(h)},Z=h=>{S(f=>f.includes(h)?f.filter(A=>A!==h):[...f,h])},y=()=>{let h=l.trim();r?.("down",{...h?{comment:h}:{},reasons:d}),c(!1)};return Xn("div",{"aria-label":"Message actions",className:"ha-message-actions",role:"group",children:[V?Re("button",{"aria-label":s?"Copied":"Copy response",className:"ha-message-action","data-copied":s||void 0,type:"button",onClick:k,children:Re("span",{className:"ha-message-action-icon",children:s?Re(Qm,{"aria-hidden":"true"}):Re(Km,{"aria-hidden":"true"})},s?"check":"copy")}):null,N?Xn(Zm,{children:[Re("button",{"aria-label":"Good response","aria-pressed":t==="up",className:"ha-message-action","data-selected":t==="up"||void 0,type:"button",onClick:()=>r?.("up"),children:Re(zm,{"aria-hidden":"true"})}),Xn(qr,{isOpen:m,onOpenChange:$,children:[Re(Kr,{ref:E,isIconOnly:!0,"aria-label":"Bad response","aria-pressed":t==="down",className:"ha-message-action ha-feedback-trigger","data-open":m||void 0,"data-selected":t==="down"||void 0,size:"sm",variant:"ghost",onPointerDown:()=>{T.current=Date.now()},children:Re(qm,{"aria-hidden":"true"})}),Re(qr.Content,{className:"ha-feedback-popover",offset:8,placement:"top start",UNSTABLE_portalContainer:u,children:Xn(qr.Dialog,{className:"ha-feedback-dialog",children:[Re(qr.Heading,{className:"ha-feedback-heading",children:"Help us improve"}),Re("p",{className:"ha-feedback-description",children:"What could be better?"}),Re("div",{"aria-label":"Feedback reasons",className:"ha-feedback-reasons",role:"group",children:Jm.map(h=>{let f=d.includes(h.value);return Re(Kr,{"aria-pressed":f,className:"ha-feedback-reason",size:"sm",variant:f?"secondary":"outline",onPress:()=>Z(h.value),children:h.label},h.value)})}),Re(Gm,{fullWidth:!0,"aria-label":"Additional feedback",className:"ha-feedback-textarea",maxLength:Xm,placeholder:"Add details (optional)",rows:3,value:l,variant:"secondary",onChange:h=>p(h.target.value)}),Re("p",{className:"ha-feedback-privacy",children:"Avoid sharing sensitive information."}),Xn("div",{className:"ha-feedback-footer",children:[Re(Kr,{className:"ha-feedback-cancel",size:"sm",variant:"ghost",onPress:()=>c(!1),children:"Cancel"}),Re(Kr,{className:"ha-feedback-submit",size:"sm",variant:"primary",onPress:y,children:t==="down"?"Update":"Send"})]})]})})]})]}):null,I?Re("button",{"aria-label":"Retry response",className:"ha-message-action",type:"button",onClick:o,children:Re($m,{"aria-hidden":"true"})}):null]})}import{ArrowDownToLine as ep}from"@gravity-ui/icons";import{jsx as Ot,jsxs as gc}from"react/jsx-runtime";function fs({file:e,onDownload:t}){let n=e.providerMetadata?.heroui,r=typeof n?.filename=="string"?n.filename.trim():"",o=e.filename?.trim()||r||"Attachment",s=e.mediaType?.trim()||"",{Icon:i,kind:m,label:c}=Br({name:o,type:s}),l=typeof n?.byteLength=="number"&&Number.isFinite(n.byteLength)?n.byteLength:null,p=l===null?c:`${c} \xB7 ${tp(l)}`;return m==="image"?Ot("a",{"aria-label":`Open ${o}`,className:"ha-message-image",download:o==="Attachment"?void 0:o,href:e.url,rel:"noopener noreferrer",target:"_blank",title:o,onClick:()=>t?.(e),children:Ot("span",{"aria-hidden":"true",style:{backgroundImage:`url(${JSON.stringify(e.url)})`}})}):gc("div",{className:"ha-message-file","data-kind":m,children:[Ot("span",{"aria-hidden":"true",className:"ha-message-file-icon",children:Ot(i,{})}),gc("span",{className:"ha-message-file-copy",children:[Ot("span",{className:"ha-message-file-name",title:o,children:o}),Ot("span",{className:"ha-message-file-type",children:p})]}),Ot("a",{"aria-label":`Download ${o}`,className:"ha-message-file-download",download:o==="Attachment"?void 0:o,href:e.url,rel:"noopener noreferrer",target:"_blank",title:`Download ${o}`,onClick:()=>t?.(e),children:Ot(ep,{"aria-hidden":"true"})})]})}function tp(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function en(){return{blockedMessageId:null,isPaused:!1,messages:[]}}function hs(e,t,n="append"){return e.messages.some(r=>r.id===t.id)?e:{...e,messages:n==="prepend"?[t,...e.messages]:[...e.messages,t]}}function Jn(e,t){return e.messages.findIndex(r=>r.id===t)===-1?e:{...e,blockedMessageId:e.blockedMessageId===t?null:e.blockedMessageId,messages:e.messages.filter(r=>r.id!==t)}}function fc(e,t,n,r){let o=e.messages.findIndex(p=>p.id===t),s=e.messages.findIndex(p=>p.id===n);if(o===-1||s===-1||o===s)return e;let i=[...e.messages],[m]=i.splice(o,1),l=i.findIndex(p=>p.id===n)+(r==="after"?1:0);return i.splice(l,0,m),i.every((p,d)=>p.id===e.messages[d]?.id)?e:{...e,messages:i}}function Zn(e,t){return e.isPaused===t?e:{...e,isPaused:t}}function gt(e,t){return e.blockedMessageId===t?e:{...e,blockedMessageId:t}}function hc(e){let t=e.text.trim();return t||`${e.files.length} attachment${e.files.length===1?"":"s"}`}function ft(e){return e.deliveryStatus??"pending"}function Cn(e,t,n){let r=e.messages.findIndex(s=>s.id===t);if(r===-1||ft(e.messages[r])===n)return e;let o=[...e.messages];return o[r]={...o[r],deliveryStatus:n},{...e,messages:o}}var np="heroui-agent-message-outbox",rp=1,Dt="conversation-outboxes",op=":message-outbox:",tn=new Map;function ys(e,t){return`${e}${op}${t}:v1`}async function yc(e){await tn.get(e)?.catch(()=>{});let t=await bs();if(!t)return en();try{let n=t.transaction(Dt,"readonly"),r=await dp(n.objectStore(Dt).get(e));return await Ss(n),sp(r,e)}catch{return en()}finally{t.close()}}function vs(e,t,n=Date.now()){return Ac(e,async()=>{let r=t.messages.length>0?await ap(t):null,o=await bs();if(!o)throw new Error("Durable message storage is unavailable");try{let s=o.transaction(Dt,"readwrite"),i=s.objectStore(Dt);t.messages.length===0?i.delete(e):i.put({key:e,savedAt:n,state:r}),await Ss(s)}finally{o.close()}})}function vc(e){return Ac(e,async()=>{let t=await bs();if(t)try{let n=t.transaction(Dt,"readwrite");n.objectStore(Dt).delete(e),await Ss(n)}finally{t.close()}})}function bc(e,t){let n=new Set(t.messages.map(o=>o.id)),r=[...e.messages.filter(o=>!n.has(o.id)),...t.messages];return{blockedMessageId:t.blockedMessageId??e.blockedMessageId,isPaused:t.isPaused||e.isPaused,messages:r}}function Sc(e,t){let n=e.messages.filter(o=>!t.has(o.id)).map(o=>ft(o)==="sending"?{...o,deliveryStatus:"pending"}:o),r=new Set(n.map(o=>o.id));return{...e,blockedMessageId:e.blockedMessageId&&r.has(e.blockedMessageId)?e.blockedMessageId:null,messages:n}}function sp(e,t){if(!e||typeof e!="object")return en();let n=e,r=n.state;if(n.key!==t||typeof n.savedAt!="number"||!r||typeof r!="object"||typeof r.isPaused!="boolean"||!Array.isArray(r.messages))return en();let o=r.messages.map(cp).filter(i=>i!==null),s=new Set(o.map(i=>i.id));return{blockedMessageId:typeof r.blockedMessageId=="string"&&s.has(r.blockedMessageId)?r.blockedMessageId:null,isPaused:r.isPaused,messages:o}}async function ap(e){return{blockedMessageId:e.blockedMessageId,isPaused:e.isPaused,messages:await Promise.all(e.messages.map(async t=>({...t,files:await Promise.all(t.files.map(ip))})))}}async function ip(e){return{bytes:await e.arrayBuffer(),lastModified:e.lastModified,name:e.name,type:e.type}}function cp(e){if(!e||typeof e!="object")return null;let t=e;if(typeof t.id=="string"&&t.id.length>0&&typeof t.text=="string"&&Array.isArray(t.files)&&(t.generateConversationTitle===void 0||typeof t.generateConversationTitle=="boolean")&&(t.isInitialTurn===void 0||typeof t.isInitialTurn=="boolean")&&(t.deliveryStatus===void 0||t.deliveryStatus==="pending"||t.deliveryStatus==="sending"||t.deliveryStatus==="admitted")){let n=t.files.map(lp).filter(r=>r!==null);return n.length!==t.files.length?null:{...t,files:n}}return null}function lp(e){if(typeof File<"u"&&e instanceof File)return e;if(typeof File>"u"||!e||typeof e!="object")return null;let t=e;return!up(t.bytes)||typeof t.lastModified!="number"||typeof t.name!="string"||typeof t.type!="string"?null:new File([t.bytes],t.name,{lastModified:t.lastModified,type:t.type})}function up(e){return Object.prototype.toString.call(e)==="[object ArrayBuffer]"}function Ac(e,t){let r=(tn.get(e)??Promise.resolve()).catch(()=>{}).then(t);return tn.set(e,r),r.then(()=>{tn.get(e)===r&&tn.delete(e)},()=>{tn.get(e)===r&&tn.delete(e)}),r}function bs(){return typeof indexedDB>"u"?Promise.resolve(null):new Promise((e,t)=>{let n=indexedDB.open(np,rp);n.onerror=()=>t(n.error??new Error("Unable to open message outbox")),n.onupgradeneeded=()=>{let r=n.result;r.objectStoreNames.contains(Dt)||r.createObjectStore(Dt,{keyPath:"key"})},n.onsuccess=()=>e(n.result)})}function dp(e){return new Promise((t,n)=>{e.onerror=()=>n(e.error??new Error("IndexedDB request failed")),e.onsuccess=()=>t(e.result)})}function Ss(e){return new Promise((t,n)=>{e.onabort=()=>n(e.error??new Error("IndexedDB write aborted")),e.onerror=()=>n(e.error??new Error("IndexedDB transaction failed")),e.oncomplete=()=>t()})}function Cc({hasChatError:e,hasPendingClientToolCalls:t,hasReadyClientToolContinuation:n,isLocalPending:r,isResuming:o,isRunning:s,recoveryError:i}){return o||s||t||r||n&&!i&&!e}function Tc(e,t){return e.text?{files:t,text:e.text}:{files:t}}function Rc(e){let t=e.text.trim();return t||`${e.files.length} attachment${e.files.length===1?"":"s"}`}function wc({activeMessageId:e,authoritativeMessageCount:t,isNewChatStartScreen:n,queuedMessageCount:r}){return n&&t===0&&r===0&&e===null}function Mc({authoritativeMessageCount:e,localTurn:t,queue:n}){return e>0?null:t??n.messages.find(o=>o.isInitialTurn&&ft(o)!=="admitted")??null}function Ec(e,t){return e.messages.filter(n=>ft(n)==="pending"&&(n.id!==t||e.isPaused||e.blockedMessageId===t))}function Pc({isClientTool:e,state:t}){return e&&(t==="input-streaming"||t==="input-available"||t==="approval-requested"||t==="approval-responded")}function Ic({activeMessageId:e,isBusy:t,isReordering:n=!1,queue:r}){return e||t||n||r.isPaused||r.blockedMessageId||r.messages.length===0||r.messages.some(o=>ft(o)==="sending")?null:r.messages.find(o=>ft(o)==="pending")??null}function xc(e,t){return e.key!=="ArrowUp"||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.nativeEvent.isComposing||!t?.focusLastMessage()?!1:(e.preventDefault(),!0)}import{ArrowUp as mp,CircleExclamation as pp,Clock as gp,Grip as fp,Pencil as hp,TrashBin as yp}from"@gravity-ui/icons";import{useImperativeHandle as vp,useLayoutEffect as bp,useRef as As}from"react";import{useRef as zr,useState as Gr}from"react";function Nc({messages:e,onReorder:t,onReorderStateChange:n}){let r=zr(null),o=zr(null),s=zr(null),i=zr(null),[m,c]=Gr(""),[l,p]=Gr(null),[d,S]=Gr(null),[u,w]=Gr(null),O=f=>{o.current=f,S(f)},T=()=>{let f=r.current!==null;r.current=null,p(null),O(null),f&&n?.(s.current!==null)},E=(f,A,b)=>{let C=e.findIndex(x=>x.id===f)+1,M=e.findIndex(x=>x.id===A)+1;c(`Moved queued message ${C} ${b} queued message ${M}.`)},V=(f,A,b)=>{let C=e.findIndex(L=>L.id===f),M=e.findIndex(L=>L.id===A),x=b==="before"&&C===M-1||b==="after"&&C===M+1;C===-1||M===-1||C===M||x||(t(f,A,b),E(f,A,b))},N=(f,A)=>{e.length<2||f.pointerType==="mouse"&&f.button!==0||(f.currentTarget.setPointerCapture?.(f.pointerId),r.current={hasMoved:!1,messageId:A,pointerId:f.pointerId,startX:f.clientX,startY:f.clientY},s.current=null,w(null),p(A),O(null),n?.(!0))},I=f=>{let A=r.current;if(!A||A.pointerId!==f.pointerId||!A.hasMoved&&Math.hypot(f.clientX-A.startX,f.clientY-A.startY)<4)return;A.hasMoved=!0;let b=f.currentTarget.closest(".ha-message-queue"),C=0;if(b){let U=b.getBoundingClientRect(),W=28;f.clientY<U.top+W?C=-12:f.clientY>U.bottom-W&&(C=12)}let L=f.currentTarget.getRootNode().elementFromPoint?.(f.clientX,f.clientY)?.closest("[data-queue-message-id]"),X=L?.dataset.queueMessageId,j=null;if(L&&X&&X!==A.messageId){let U=L.getBoundingClientRect(),W=f.clientY<U.top+U.height/2?"before":"after";j={messageId:X,position:W}}if(b&&C!==0&&(b.scrollTop+=C),!j){O(null);return}o.current?.messageId===j.messageId&&o.current.position===j.position||O(j)},k=(f,A)=>{let b=r.current;if(!b||b.pointerId!==f.pointerId)return;f.currentTarget.hasPointerCapture?.(f.pointerId)&&f.currentTarget.releasePointerCapture?.(f.pointerId);let C=o.current;A&&b.hasMoved&&(i.current=b.messageId),A&&b.hasMoved&&C&&V(b.messageId,C.messageId,C.position),T()},$=(f,A,b)=>{let C=f.key==="ArrowUp"?-1:f.key==="ArrowDown"?1:0;if(!C)return;let M=e[b+C];M&&(f.preventDefault(),V(A,M.id,C===-1?"before":"after"))},Z=f=>{let A=i.current===f;if(i.current=null,A)return;let b=s.current===f?null:f;s.current=b,w(b),n?.(r.current!==null||b!==null)},y=f=>{s.current===f&&(s.current=null,w(null),n?.(r.current!==null))};return{announcement:m,closePositionPicker:y,draggedMessageId:l,dropTarget:d,finishPointerDrag:k,handleReorderKeyDown:$,moveMessageToPosition:(f,A,b)=>{let C=e[b];if(!C||A===b){y(f);return}V(f,C.id,A<b?"after":"before"),y(f)},positionPickerMessageId:u,startPointerDrag:N,togglePositionPicker:Z,updatePointerDrag:I}}import{jsx as xe,jsxs as er}from"react/jsx-runtime";function jr(e,t){let n=e?.querySelectorAll("[data-queue-message-id]")[t];return n?(n.focus({preventScroll:!0}),n.scrollIntoView?.({block:"nearest"}),!0):!1}function _c({blockedMessageId:e,isSendNowDisabled:t,messages:n,onEdit:r,onFocusComposer:o,onRemove:s,onReorder:i,onReorderStateChange:m,onSendNow:c,ref:l}){let p=As(null),d=As(null),S=As(n),{announcement:u,closePositionPicker:w,draggedMessageId:O,dropTarget:T,finishPointerDrag:E,handleReorderKeyDown:V,moveMessageToPosition:N,positionPickerMessageId:I,startPointerDrag:k,togglePositionPicker:$,updatePointerDrag:Z}=Nc({messages:n,onReorder:i,onReorderStateChange:m});if(vp(l,()=>({focusLastMessage:()=>jr(d.current,n.length-1)}),[n.length]),bp(()=>{let h=S.current;S.current=n;let f=p.current;if(!f||n.some(C=>C.id===f))return;let A=h.findIndex(C=>C.id===f),b=Math.min(A,n.length-1);p.current=null,(A<0||!jr(d.current,b))&&o()},[n,o]),n.length===0)return null;let y=(h,f)=>{if(h.target===h.currentTarget&&!(h.key!=="ArrowUp"&&h.key!=="ArrowDown")){if(h.preventDefault(),h.key==="ArrowUp"){jr(d.current,f-1);return}jr(d.current,f+1)||o()}};return er("section",{"aria-label":"Queued messages",className:"ha-message-queue",children:[xe("div",{className:"ha-message-queue-header",children:"Queued"}),xe("ol",{ref:d,className:"ha-message-queue-list",children:n.map((h,f)=>{let A=e===h.id,b=f+1,C=A?`ha-queued-message-status-${h.id}`:void 0;return er("li",{"aria-describedby":C,"aria-keyshortcuts":"ArrowUp ArrowDown",className:"ha-message-queue-item","data-blocked":A?"true":void 0,"data-dragging":O===h.id?"true":void 0,"data-queue-message-id":h.id,tabIndex:-1,title:A?"This message could not be sent":void 0,"data-drop-position":T?.messageId===h.id?T.position:void 0,onKeyDown:M=>y(M,f),onBlur:M=>{let x=M.relatedTarget;p.current===h.id&&(!x||!M.currentTarget.contains(x))&&(p.current=null)},onFocus:()=>{p.current=h.id},children:[xe("button",{"aria-keyshortcuts":"ArrowUp ArrowDown","aria-label":`Reorder queued message ${b}`,className:"ha-message-queue-drag-handle",disabled:n.length<2,title:n.length>1?"Drag to reorder or click for options":void 0,type:"button",onClick:()=>$(h.id),onKeyDown:M=>V(M,h.id,f),onPointerCancel:M=>E(M,!1),onPointerDown:M=>k(M,h.id),onPointerMove:Z,onPointerUp:M=>E(M,!0),children:xe(fp,{"aria-hidden":"true"})}),I===h.id?xe("select",{autoFocus:!0,"aria-label":`Move queued message ${b} to position`,className:"ha-message-queue-position-select",value:f,onBlur:()=>w(h.id),onChange:M=>N(h.id,f,Number(M.currentTarget.value)),children:n.map((M,x)=>er("option",{value:x,children:["Position ",x+1,x===f?" (current)":""]},M.id))}):xe("span",{"aria-hidden":"true",className:"ha-message-queue-icon",children:A?xe(pp,{"aria-hidden":"true"}):xe(gp,{"aria-hidden":"true"})}),er("span",{className:"ha-message-queue-content",children:[xe("span",{className:"ha-message-queue-preview",children:hc(h)}),A?xe("span",{className:"ha-message-queue-status",id:C,role:"status",children:"Could not send"}):null]}),er("span",{className:"ha-message-queue-actions",children:[xe("button",{"aria-label":`Send queued message ${b} now`,className:"ha-message-queue-action",disabled:t,title:"Send now",type:"button",onClick:()=>c(h.id),children:xe(mp,{"aria-hidden":"true"})}),xe("button",{"aria-label":`Edit queued message ${b}`,className:"ha-message-queue-action",title:"Edit",type:"button",onClick:()=>r(h.id),children:xe(hp,{"aria-hidden":"true"})}),xe("button",{"aria-label":`Remove queued message ${b}`,className:"ha-message-queue-action",title:"Remove",type:"button",onClick:()=>s(h.id),children:xe(yp,{"aria-hidden":"true"})})]})]},h.id)})}),xe("span",{"aria-live":"polite",className:"ha-message-queue-announcement",role:"status",children:u})]})}import{FileText as Mp}from"@gravity-ui/icons";import Vc,{createContext as Ep,useContext as Pp,useMemo as Ip}from"react";import{composeRenderProps as xp}from"react-aria-components";import{mergeRefs as Sp}from"@react-aria/utils";import{useControlledState as Ap}from"@react-stately/utils";import{createContext as Cp,useCallback as Je,useContext as Oc,useEffect as kc,useMemo as Dc,useRef as Wr,useState as Tp}from"react";import{OverlayArrow as Rp,Popover as wp,composeRenderProps as Lc}from"react-aria-components";import{jsx as Tn}from"react/jsx-runtime";var Cs=Cp({handleCancelClose:()=>{},handleClose:()=>{},handleOpen:()=>{},isOpen:!1,isPointerInsideRef:{current:!1},setPortalContainer:()=>{},triggerRef:{current:null}}),Ts=({children:e,closeDelay:t=300,defaultOpen:n=!1,onOpenChange:r,open:o,openDelay:s=700})=>{let[i,m]=Ap(o,n,r),[c,l]=Tp(),p=Wr(null),d=Wr(!1),S=Wr(void 0),u=Wr(void 0),w=Je(()=>{clearTimeout(S.current),clearTimeout(u.current)},[]);kc(()=>w,[w]),kc(()=>{if(!i)return;let N=I=>{I.key==="Escape"&&(m(!1),w())};return document.addEventListener("keydown",N),()=>document.removeEventListener("keydown",N)},[w,i,m]);let O=Je((N=!1)=>{w(),N||s<=0?m(!0):S.current=setTimeout(()=>m(!0),s)},[w,s,m]),T=Je((N=!1)=>{w(),N||t<=0?m(!1):u.current=setTimeout(()=>m(!1),t)},[w,t,m]),E=Je(()=>{clearTimeout(u.current)},[]),V=Dc(()=>({handleCancelClose:E,handleClose:T,handleOpen:O,isOpen:i,isPointerInsideRef:d,portalContainer:c,setPortalContainer:l,triggerRef:p}),[E,T,O,i,c]);return Tn(Cs,{value:V,children:e})},Hc=({children:e,className:t,onBlur:n,onFocus:r,onPointerEnter:o,onPointerLeave:s,ref:i,...m})=>{let{handleClose:c,handleOpen:l,isPointerInsideRef:p,setPortalContainer:d,triggerRef:S}=Oc(Cs),u=Je(N=>{S.current=N,d(Ia(N))},[d,S]),w=Dc(()=>Sp(i,u),[i,u]),O=Je(N=>{N.pointerType==="mouse"&&l(),o?.(N)},[l,o]),T=Je(N=>{N.pointerType==="mouse"&&c(),s?.(N)},[c,s]),E=Je(N=>{l(!0),r?.(N)},[l,r]),V=Je(N=>{p.current||c(),n?.(N)},[c,p,n]);return Tn("span",{ref:w,className:fe("aui-hover-card__trigger",t),"data-slot":"hover-card-trigger",onBlur:V,onFocus:E,onPointerEnter:O,onPointerLeave:T,...m,children:e})},Uc=({UNSTABLE_portalContainer:e,children:t,className:n,offset:r=8,onOpenChange:o,onPointerEnter:s,onPointerLeave:i,placement:m="top",...c})=>{let{handleCancelClose:l,handleClose:p,isOpen:d,isPointerInsideRef:S,portalContainer:u,triggerRef:w}=Oc(Cs),O=Je(V=>{S.current=!0,l(),s?.(V)},[l,S,s]),T=Je(V=>{S.current=!1,p(),i?.(V)},[p,S,i]),E=Je(V=>{V||p(!0),o?.(V)},[p,o]);return Tn(wp,{isNonModal:!0,"data-slot":"hover-card-content",isOpen:d,offset:r,placement:m,triggerRef:w,UNSTABLE_portalContainer:e??u,className:Lc(n,V=>fe("aui-hover-card__content",V)??""),onOpenChange:E,onPointerEnter:O,onPointerLeave:T,...c,children:V=>typeof t=="function"?t(V):t})},Bc=({children:e,className:t,...n})=>Tn(Rp,{"data-slot":"hover-card-arrow",className:Lc(t,r=>fe("aui-hover-card__arrow",r)??""),...n,children:e??Tn("svg",{fill:"none",height:"12",viewBox:"0 0 12 12",width:"12",xmlns:"http://www.w3.org/2000/svg",children:Tn("path",{d:"M0 0C5.48483 8 6.5 8 12 0Z"})})});var tr=Object.assign(Ts,{Arrow:Bc,Content:Uc,Root:Ts,Trigger:Hc});function Fc(e){try{return new URL(e).hostname.replace(/^www\./,"")}catch{return e.split("/").pop()||e}}import{Fragment as Rs,jsx as ae,jsxs as Lt}from"react/jsx-runtime";var $c=Ep({sourceType:"url"}),nr=()=>Pp($c);function Np(e){return e.trim().charAt(0).toUpperCase()||"?"}var ws=({children:e,className:t,description:n,enablePreview:r,faviconUrl:o,href:s,locator:i,sourceType:m=s?"url":"document",title:c,...l})=>{let p=s?Fc(s):void 0,S=r??(m==="url"&&!!s?!!(n||c):!!(n||i)),u=Ip(()=>({description:n,domain:p,enablePreview:S,faviconUrl:o,href:s,locator:i,sourceType:m,title:c}),[n,p,S,o,s,i,m,c]),w=e??Lt(Rs,{children:[ae(Ms,{}),S?ae(Es,{description:n,title:c}):null]}),O=ae("div",{className:fe("aui-chat-source",t),"data-has-locator":i?"true":void 0,"data-slot":"chat-source","data-source-type":m,...l,children:w});return ae($c,{value:u,children:S?ae(tr,{closeDelay:0,openDelay:150,children:O}):O})},Ms=({children:e,className:t,label:n,...r})=>{let{domain:o,enablePreview:s,href:i,locator:m,sourceType:c,title:l}=nr(),p=c==="url"&&i,d=e??n??(p?Lt(Rs,{children:[ae(Jr,{}),ae(Xr,{children:l??o}),m?ae(Yr,{children:m}):null]}):Lt(Rs,{children:[ae(Zr,{}),ae(Xr,{children:l}),m?ae(Yr,{children:m}):null]}));if(p){let w=ae("a",{"aria-label":`Open source: ${l??o??i}`,className:"aui-chat-source__trigger-link",href:i,rel:"noopener noreferrer",target:"_blank",...r,children:d});return ae("span",{className:fe("aui-chat-source__trigger",t),"data-slot":"chat-source-trigger",children:s?ae(tr.Trigger,{children:w}):w})}let S=[l,m].filter(Boolean).join(", ")||"Document",u=ae("span",{className:s?void 0:"aui-chat-source__trigger-link",...s?{}:r,children:d});return ae("span",{className:fe("aui-chat-source__trigger",t),"data-slot":"chat-source-trigger",children:s?ae(tr.Trigger,{children:ae("button",{"aria-label":`Source: ${S}`,className:"aui-chat-source__trigger-link",type:"button",...r,children:d})}):u})},Yr=({children:e,className:t,...n})=>{let{locator:r}=nr();return e??r?ae("span",{className:fe("aui-chat-source__locator",t),"data-slot":"chat-source-locator",...n,children:e??r}):null},Jr=({children:e,className:t,faviconUrl:n})=>{let{domain:r,faviconUrl:o,href:s,title:i}=nr(),m=i??r??s??"Source",c=n??o;if(e&&Vc.isValidElement(e)){let l=e;return Vc.cloneElement(l,{className:fe("aui-chat-source__icon",t,l.props.className),"data-slot":"chat-source-icon"})}return Lt("span",{"aria-hidden":"true",className:fe("aui-chat-source__icon",t),"data-slot":"chat-source-icon",children:[ae("span",{className:"aui-chat-source__icon-fallback",children:Np(m)}),c?ae("img",{alt:"",className:"aui-chat-source__favicon","data-slot":"chat-source-favicon",decoding:"async",height:14,loading:"lazy",referrerPolicy:"no-referrer",src:c,width:14,onError:l=>{l.currentTarget.hidden=!0}}):null]})},Zr=({className:e})=>ae(Mp,{className:fe("aui-chat-source__document-icon",e),"data-slot":"chat-source-document-icon"}),Xr=({children:e,className:t,...n})=>{let{domain:r,title:o}=nr();return ae("span",{className:fe("aui-chat-source__title",t),"data-slot":"chat-source-title",...n,children:e??o??r})},Es=({children:e,className:t,description:n,title:r,...o})=>{let{description:s,domain:i,enablePreview:m,href:c,locator:l,sourceType:p,title:d}=nr();if(!m)return null;let S=r??d,u=n??s,w=p==="url"&&c?Lt("a",{className:"aui-chat-source__preview-link",href:c,rel:"noopener noreferrer",target:"_blank",children:[Lt("div",{className:"aui-chat-source__preview-header",children:[ae(Jr,{}),ae("span",{className:"aui-chat-source__preview-domain",children:i})]}),S?ae("div",{className:"aui-chat-source__preview-title",children:S}):null,u?ae("div",{className:"aui-chat-source__preview-description",children:u}):null]}):Lt("div",{className:"aui-chat-source__preview-link","data-source-type":"document",children:[Lt("div",{className:"aui-chat-source__preview-header",children:[ae(Zr,{}),ae("span",{className:"aui-chat-source__preview-domain",children:S??"Document"})]}),l?ae("div",{className:"aui-chat-source__preview-title",children:l}):null,u?ae("div",{className:"aui-chat-source__preview-description",children:u}):null]});return ae(tr.Content,{"data-slot":"chat-source-preview",offset:8,placement:"top",className:xp(t,O=>fe("aui-chat-source__preview",O)??""),...o,children:e??w})};import{Disclosure as Rn}from"@heroui/react";import{composeRenderProps as Ps}from"react-aria-components";import{jsx as Ht,jsxs as _p}from"react/jsx-runtime";var Is=({children:e,className:t,...n})=>Ht(Rn,{"data-slot":"chat-sources",className:Ps(t,r=>fe("aui-chat-sources",r)??""),...n,children:e}),Qc=({children:e,className:t,...n})=>Ht(Rn.Heading,{children:_p(Rn.Trigger,{"data-slot":"chat-sources-trigger",className:Ps(t,r=>fe("aui-chat-sources__trigger",r)??""),...n,children:[Ht("span",{className:"aui-chat-sources__trigger-label",children:e}),Ht(Rn.Indicator,{className:"aui-chat-sources__indicator"})]})}),Kc=({children:e,className:t,...n})=>Ht(Rn.Content,{"data-slot":"chat-sources-content",className:Ps(t,r=>fe("aui-chat-sources__content",r)??""),...n,children:Ht(Rn.Body,{children:Ht("div",{className:"aui-chat-sources__content-body",children:e})})}),qc=({children:e,className:t,role:n="list",...r})=>Ht("div",{className:fe("aui-chat-sources__list",t),"data-slot":"chat-sources-list",role:n,...r,children:e});var zc=Object.assign(ws,{DocumentIcon:Zr,Icon:Jr,Locator:Yr,Preview:Es,Root:ws,Title:Xr,Trigger:Ms}),rr=Object.assign(Is,{Content:Kc,List:qc,Root:Is,Trigger:Qc});import{jsx as Ct,jsxs as Gc}from"react/jsx-runtime";function kp(e){return`https://www.google.com/s2/favicons?domain_url=${encodeURIComponent(e)}&sz=64`}function jc({inList:e=!1,source:t}){let n="url"in t?t.url:void 0;return Ct(zc,{description:t.excerpt,faviconUrl:n?kp(n):void 0,href:n,locator:t.locator,role:e?"listitem":void 0,sourceType:t.sourceType??"url",title:t.title})}function Op({sources:e}){return Ct(rr.List,{"aria-label":"Sources",children:e.map(t=>Ct(jc,{inList:!0,source:t},t.sourceId))})}function Wc({sources:e}){return e.length===0?null:e.length===1?Ct("div",{"aria-label":"Sources",className:"ha-message-sources","data-count":"1",role:"group",children:Ct(jc,{source:e[0]})}):Gc(rr,{className:"ha-message-sources","data-count":e.length,children:[Gc(rr.Trigger,{"aria-label":`${e.length} sources`,children:[Ct("span",{className:"ha-sources-label",children:"Sources"}),Ct("span",{"aria-hidden":"true",className:"ha-sources-count",children:e.length})]}),Ct(rr.Content,{children:Ct(Op,{sources:e})})]})}function Dp(e){try{let t=new URL(e);return t.protocol!=="http:"&&t.protocol!=="https:"?null:(t.hash="",t.toString())}catch{return null}}function Yc(e){let t=new Map;for(let n of e){if(n.type!=="data-sources")continue;let r=hi.safeParse(n.data);if(r.success)for(let o of r.data.items){if("url"in o){let i=Dp(o.url);i&&!t.has(i)&&t.set(i,{...o,url:i});continue}let s=`document:${o.title}:${o.locator??o.sourceId}`;t.has(s)||t.set(s,o)}}return[...t.values()]}function Xc(e,{hasContent:t,isStreaming:n}){return n||!t?[]:e}import{Plus as Lp}from"@gravity-ui/icons";import{Button as Hp}from"@heroui/react";import{jsx as Jc}from"react/jsx-runtime";function Zc({isDisabled:e=!1,onPress:t}){return Jc(Hp,{isIconOnly:!0,"aria-label":"New chat",className:"ha-icon-button ha-new-chat-button",isDisabled:e,size:"sm",variant:"ghost",onPress:t,children:Jc(Lp,{"aria-hidden":"true"})})}function el(e){return`heroui-agent:project-config:${e}`}function tl(e){try{let t=window.localStorage.getItem(el(e));if(!t)return null;let n=xr.safeParse(JSON.parse(t));return n.success?n.data:null}catch{return null}}function nl(e,t){try{window.localStorage.setItem(el(e),JSON.stringify(t))}catch{}}var Up=["runtimeAdmittedAt","providerRequestedAt","providerFirstEventAt","firstSemanticTextAt","completedAt"];function rl(e,t,n){if(!n||typeof n!="object"||Array.isArray(n)||typeof window>"u")return!1;let r=n,o={};for(let i of Up){let m=r[i];typeof m=="number"&&Number.isFinite(m)&&(o[i]=m)}if(typeof r.turnId=="string"&&r.turnId&&(o.turnId=r.turnId),Object.keys(o).length===0)return!1;let s={agentId:e,conversationId:t,...o};return window.dispatchEvent(new CustomEvent(Ha,{detail:s})),!0}import{ChevronDown as Bp,Ellipsis as Fp,Pencil as Vp,Plus as $p,TrashBin as Qp}from"@gravity-ui/icons";import{Button as nn,Dropdown as or,Input as Kp,Label as ol,Modal as at,Popover as xs,TextField as qp}from"@heroui/react";import{useCallback as zp,useRef as Ns,useState as Ut}from"react";import{Fragment as ll,jsx as ee,jsxs as Se}from"react/jsx-runtime";var sl="rename",al="delete",Gp=80,il=new Set;function _s({activeConversationId:e,busyConversationIds:t=il,completedConversationIds:n=il,groups:r,isNewConversationDisabled:o=!1,onDeleteConversation:s,onNewConversation:i,onRenameConversation:m,onSelectConversation:c,variant:l="popover"}){let[p,d]=Ut(!1),[S,u]=Ut(!1),[w,O]=Ut(null),[T,E]=Ut(null),[V,N]=Ut(""),[I,k]=Ut(null),[$,Z]=Ut(!1),[y,h]=Ut(),f=Ns(0),A=Ns(0),b=Ns(null);Jt(b);let M=r.flatMap(D=>D.items).find(D=>D.id===e)?.title??"New chat",x=zp(D=>{h(D??void 0)},[]),L=()=>{O(null),d(!1)},X=D=>{!D&&Date.now()-f.current<350||(D||O(null),d(D))},j=(D,_)=>{!_&&Date.now()-A.current<350||O(_?D:null)},U=(D,_)=>{L(),E({item:D,type:_}),N(D.title),k(null),u(!0)},W=()=>{$||(k(null),u(!1))},ie=(D,_)=>{_===sl&&U(D,"rename"),_===al&&!t.has(D.id)&&U(D,"delete")},pe=async()=>{if(!T||T.type!=="rename"||$)return;let D=V.trim();if(!D){k("Enter a name for this chat.");return}if(D===T.item.title){u(!1);return}Z(!0),k(null);try{await m(T.item.id,D),E({...T,item:{...T.item,title:D}}),u(!1)}catch(_){k(_ instanceof Error?_.message:"The chat could not be renamed")}finally{Z(!1)}},H=async()=>{if(!(!T||T.type!=="delete"||$)){Z(!0),k(null);try{await s(T.item.id),u(!1)}catch(D){k(D instanceof Error?D.message:"The chat could not be deleted")}finally{Z(!1)}}},Q=r.length?r.map(D=>Se("section",{className:"ha-session-group",children:[ee("h3",{children:D.label}),ee("div",{className:"ha-session-list",children:D.items.map(_=>{let G=_.id===e,ne=t.has(_.id),ce=!ne&&n.has(_.id);return Se("div",{className:"ha-session-row","data-actions-open":w===_.id?"true":void 0,"data-active":G||void 0,"data-completed":ce||void 0,children:[Se("button",{"aria-current":G?"page":void 0,className:"ha-session-select",type:"button","aria-label":ce?`${_.title}, new response available`:void 0,onClick:()=>{L(),G||c(_.id)},children:[ne?ee(Yt,{className:"ha-session-title ha-session-shimmer",children:_.title}):ee("span",{className:"ha-session-title",children:_.title}),ce?ee("span",{"aria-hidden":"true",className:"ha-session-completed-dot"}):null]}),Se(or,{isOpen:w===_.id,onOpenChange:he=>j(_.id,he),children:[ee(nn,{isIconOnly:!0,"aria-label":`Chat actions for ${_.title}`,className:"ha-session-actions-trigger",size:"sm",variant:"ghost",onPointerDown:()=>{A.current=Date.now()},children:ee(Fp,{"aria-hidden":"true"})}),ee(or.Popover,{className:"ha-session-actions-menu",placement:"bottom end",UNSTABLE_portalContainer:y,children:Se(or.Menu,{"aria-label":`Actions for ${_.title}`,onAction:he=>ie(_,he),children:[Se(or.Item,{id:sl,textValue:"Rename",children:[ee(Vp,{"aria-hidden":"true"}),ee(ol,{children:"Rename"})]}),Se(or.Item,{id:al,isDisabled:ne,textValue:ne?"Delete unavailable while responding":"Delete",variant:"danger",children:[ee(Qp,{"aria-hidden":"true",className:"ha-session-delete-icon"}),ee(ol,{children:ne?"Delete after response":"Delete"})]})]})})]})]},_.id)})})]},D.label)):ee("p",{className:"ha-session-empty",children:"Your recent chats will appear here."});return Se("div",{"data-variant":l,className:l==="sidebar"?"ha-session-picker ha-session-sidebar":"ha-session-picker",children:[l==="sidebar"?Se(ll,{children:[Se("div",{className:"ha-session-sidebar-header",children:[ee("h2",{children:"Chats"}),Se(nn,{fullWidth:!0,className:"ha-session-new-chat",isDisabled:o,size:"sm",variant:"tertiary",onPress:()=>{L(),i?.()},children:[ee($p,{"aria-hidden":"true"}),"New chat"]})]}),ee("nav",{ref:b,"aria-label":"Recent chats",className:"ha-session-sidebar-history",children:Q})]}):Se(xs,{isOpen:p,onOpenChange:X,children:[Se(nn,{"aria-label":"Choose a chat",className:"ha-session-trigger",size:"sm",variant:"ghost",onPointerDown:()=>{f.current=Date.now()},children:[ee("span",{className:"font-medium",children:M}),ee(Bp,{"aria-hidden":"true"})]}),ee(xs.Content,{isNonModal:!0,className:"ha-session-menu",placement:"bottom start",UNSTABLE_portalContainer:y,children:ee(xs.Dialog,{"aria-label":"Chat history",className:"ha-session-history-dialog",children:Q})})]}),ee(at.Backdrop,{className:"ha-session-modal-backdrop",isDismissable:!$,isKeyboardDismissDisabled:$,isOpen:S,UNSTABLE_portalContainer:y,onOpenChange:D=>{D||W()},children:ee(at.Container,{placement:"center",size:"sm",children:ee(at.Dialog,{className:"ha-session-modal",children:ee(jp,{dialog:T,isPending:$,mutationError:I,renameTitle:V,onClose:W,onDelete:H,onRename:pe,onRenameTitleChange:N})})})}),ee("div",{ref:x,className:"ha-session-portal","data-open":p||S||w?"true":void 0,onPointerDown:D=>{D.target?.closest(".ha-session-menu, .ha-session-actions-menu, .ha-session-modal-backdrop")||(p||w)&&L()}})]})}function jp({dialog:e,isPending:t,mutationError:n,onClose:r,onDelete:o,onRename:s,onRenameTitleChange:i,renameTitle:m}){return e?.type==="rename"?Se("form",{onSubmit:c=>{c.preventDefault(),s()},children:[ee(at.Header,{children:ee(at.Heading,{children:"Rename chat"})}),Se(at.Body,{children:[ee(qp,{autoFocus:!0,fullWidth:!0,"aria-label":"Chat name",isInvalid:!!n,name:"title",children:ee(Kp,{maxLength:Gp,value:m,variant:"secondary",onChange:c=>i(c.target.value)})}),ee(cl,{message:n})]}),Se(at.Footer,{children:[ee(nn,{fullWidth:!0,isDisabled:t,type:"button",variant:"outline",onPress:r,children:"Cancel"}),ee(nn,{fullWidth:!0,isPending:t,type:"submit",children:t?"Saving\u2026":"Submit"})]})]}):e?.type!=="delete"?null:Se(ll,{children:[ee(at.Header,{children:ee(at.Heading,{children:"Delete chat?"})}),Se(at.Body,{children:[Se("p",{children:["Are you sure you want to delete ",Se("strong",{children:["\u201C",e.item.title,"\u201D"]}),"?"]}),ee(cl,{message:n})]}),Se(at.Footer,{children:[ee(nn,{fullWidth:!0,isDisabled:t,variant:"outline",onPress:r,children:"Cancel"}),ee(nn,{fullWidth:!0,isPending:t,variant:"danger",onPress:()=>void o(),children:t?"Deleting\u2026":"Delete"})]})]})}function cl({message:e}){return e?ee("p",{className:"ha-session-modal-error",role:"alert",children:e}):null}import{useEffect as Wp,useState as Yp}from"react";import{jsx as Zp}from"react/jsx-runtime";var eo=["Thinking\u2026","Analyzing request\u2026","Preparing next steps\u2026"],Xp=1600,Jp=5e3;function ul(){let[e,t]=Yp(0);return Wp(()=>{let n=e===eo.length-1,r=window.setTimeout(()=>{t(o=>(o+1)%eo.length)},n?Jp:Xp);return()=>window.clearTimeout(r)},[e]),Zp(Lr,{ariaLabel:"Working on your request\u2026",label:eo[e]??eo[0]})}function dl({now:e=()=>performance.now(),nowWallClock:t=()=>Date.now(),report:n,schedulePaint:r=o=>requestAnimationFrame(o)}){let o=new Map,s=null,i=(c,l)=>{o.has(c)||o.set(c,{painted:new Set,scheduled:new Set,startedAt:l?.startedAt??e(),startedAtWallClock:l?.startedAtWallClock??t()})},m=(c,l,p)=>{let d=o.get(c);!d||d.painted.has(l)||(d.scheduled.delete(l),d.painted.add(l),n({latencyMs:Math.max(0,Math.round(p-d.startedAt)),messageId:c,metric:l}))};return{activate(c){i(c),s=c},begin:i,complete(c){s===c&&(s=null)},getActiveMessageId(){return s},getStartedAtWallClock(c){return o.get(c)?.startedAtWallClock},markAfterPaint(c,l){let p=o.get(c);!p||p.painted.has(l)||p.scheduled.has(l)||(p.scheduled.add(l),r(()=>{m(c,l,e())}))},markPaintedAt(c,l,p){m(c,l,p)}}}function ks(e,{hasActivity:t=!1,hasTransientData:n=!1}={}){if(!e||e.role!=="assistant")return{hasServerContent:!1,hasText:!1};let r=e.parts.some(s=>s.type==="text"&&s.text.trim().length>0),o=e.parts.some(s=>s.type==="file"||s.type==="data-component"||s.type==="data-sources");return{hasServerContent:r||o||t||n,hasText:r}}function ml({isPendingPart:e,messages:t,terminal:n}){if(n)return!1;let r=t.at(-1);return!!(r?.role==="assistant"&&r.parts.some(o=>e(o)))}function rn({attempt:e,currentAttempt:t,manualStopRequested:n,stalledStopRequested:r}){return e===t&&!n&&!r}async function pl(e,t){return await e?.catch(()=>{}),t()}function gl({hasPendingClientToolCalls:e,isAutoContinuationPending:t,isRecovering:n,isRunning:r,localPending:o,stalled:s}){return!s&&(r||e||o||t||n)}function fl({hasActiveTurn:e,hasPendingClientToolCalls:t,isResuming:n,stalled:r}){return e&&!t&&!n&&!r}function hl(e){let t=globalThis.setTimeout(e,12e4);return()=>globalThis.clearTimeout(t)}function yl(e){let t=globalThis.setTimeout(e,12e4);return()=>globalThis.clearTimeout(t)}import{useCallback as eg,useEffect as sr,useRef as vl,useState as bl}from"react";var tg=300;function Sl({attachments:e,draftKey:t,input:n,setAttachments:r,setInput:o}){let[s,i]=bl(null),[m,c]=bl(null),l=vl(n),p=vl(null);return sr(()=>{l.current=n},[n]),sr(()=>{let d=!1,S=Fa(t);return queueMicrotask(()=>{d||(S&&o(u=>u||S),c(t))}),Va(t).then(u=>{d||(u.length>0&&r(w=>w.length>0?w:u),i(t))}),()=>{d=!0}},[t,r,o]),sr(()=>{if(m!==t)return;let d=()=>_o(t,n);return p.current=window.setTimeout(d,tg),window.addEventListener("pagehide",d),()=>{p.current!==null&&window.clearTimeout(p.current),p.current=null,window.removeEventListener("pagehide",d)}},[t,n,m]),sr(()=>{if(m===t)return()=>_o(t,l.current)},[t,m]),sr(()=>{s===t&&$a(t,e)},[e,t,s]),eg(()=>{l.current="",p.current!==null&&window.clearTimeout(p.current),p.current=null,Sr(t)},[t])}import{useCallback as ng,useState as rg}from"react";function Cl(e){return`${e}:model`}function og(e){if(typeof window>"u")return;let t=Cl(e);try{let n=window.localStorage.getItem(t);if(n===null)return;let r=Sa(n);if(Ca(r))return r!==n&&window.localStorage.setItem(t,r),r;window.localStorage.removeItem(t)}catch{}}function Al(e,t){if(!(typeof window>"u"))try{window.localStorage.setItem(Cl(e),t)}catch{}}function Os(e,t,n){let[r,o]=rg(()=>n?(Al(e,n),n):og(e)),s=r??t??Aa,i=ng(m=>{o(m),Al(e,m)},[e]);return{selectedModelId:s,setSelectedModelId:i}}var Tl="The recording could not be transcribed. Try again.",Rl="No speech was detected. Try again when you are ready.",sg="Voice transcription took too long. Try again.",ag=3e4;function ig(e){let t=new AbortController,n=!1,r=()=>t.abort(e.reason);e.aborted?r():e.addEventListener("abort",r,{once:!0});let o=setTimeout(()=>{n=!0,t.abort()},ag);return{didTimeOut:()=>n,dispose:()=>{clearTimeout(o),e.removeEventListener("abort",r)},signal:t.signal}}function cg(e,t){return t.aborted?Promise.reject(t.reason):new Promise((n,r)=>{let o=()=>r(t.reason),s=()=>t.removeEventListener("abort",o);t.addEventListener("abort",o,{once:!0}),e.then(i=>{s(),n(i)},i=>{s(),r(i)})})}function lg(e,t){return{Authorization:`Bearer ${e}`,"Content-Type":t,"X-HeroUI-Agent-Protocol-Version":String(6),"X-HeroUI-Agent-SDK-Version":We}}function ug(e){return e===413?"The recording is too long. Try a shorter message.":e===415?"This browser's recording format is not supported.":e===422?Rl:e===429?"Voice dictation is busy. Wait a moment and try again.":Tl}async function wl({apiBaseUrl:e,audio:t,conversationId:n,language:r,signal:o,tokenManager:s}){let i=new URL(`${e}/v1/conversations/${encodeURIComponent(n)}/transcriptions`),m=ig(o);r?.trim()&&i.searchParams.set("language",r.trim());try{for(let c=0;c<2;c+=1){let l=await cg(s.get(),m.signal),p=await fetch(i,{body:t,headers:lg(l,t.type||"audio/webm"),method:"POST",signal:m.signal});if(p.status===401&&c===0){s.clear();continue}if(!p.ok)throw new Error(ug(p.status));let d=await p.json().catch(()=>null),S=typeof d?.text=="string"?d.text.trim():"";if(!S)throw new Error(Rl);return S}}catch(c){throw m.didTimeOut()&&!o.aborted?new Error(sg,{cause:c}):c}finally{m.dispose()}throw new Error(Tl)}import{Fragment as on,jsx as P,jsxs as Ee}from"react/jsx-runtime";var Il=en();async function Cg(e){try{let t=await e;if(!t.ok)return null;let n=xr.safeParse(await t.json());return n.success?n.data:null}catch{return null}}function Ds(e){return e.type==="dynamic-tool"&&e.toolName?e.toolName:e.type.startsWith("tool-")?e.type.slice(5):null}function Tg({composerControlsRevealed:e,conversationEpoch:t,identityEpoch:n,identityReset:r,onClose:o,onComposerControlsReveal:s,onNewConversation:i,onReady:m,onSelectConversation:c,onUnreadChange:l,open:p,options:d,requestedConversationId:S,shellComposerEndSlot:u,shellComposerFooterSlot:w,showReadyLoader:O,tokenManager:T}){let[E,V]=J(null),[N,I]=J({}),k=le(N),$=le(E),[Z,y]=J(null),[h,f]=J([]),[A,b]=J(us),C=le(A),[M,x]=J({}),[L,X]=J(0),j=E?N[E]??null:null;Tt(()=>{k.current=N,$.current=E},[E,N]);let U=z(R=>{I(B=>({...B,[R.conversationId]:R})),V(R.conversationId)},[]),W=z(R=>{I(B=>{let F=B[R];return F?.runtime?{...B,[R]:{...F,composerReady:!1,runtime:null}}:B}),$.current===R&&X(B=>B+1)},[]),ie=z(R=>{let B=C.current,F=R(B);F!==B&&(C.current=F,b(F),l(F.completedIds.size>0))},[l]),pe=z((R,B)=>{ie(F=>ji(F,{...B,activeConversationId:p?$.current:null,conversationId:R}))},[ie,p]);ye(()=>{!p||!E||ie(R=>ds(R,E))},[E,ie,p]);let H=z(R=>{ie(B=>ds(B,R)),c(R)},[ie,c]),Q=z(()=>{$.current=null,V(null),y(null),i()},[i]),D=z((R,B)=>{x(F=>{let Y=F[R]??Il,re=B(Y);return re===Y?F:{...F,[R]:re}})},[]),_=le(null),G=le(null),ne=d.apiBaseUrl,ce=d.agentId,he=Bt(m),qe=z((R,B)=>{let F=Xi({conversationEpoch:t,optimisticTarget:G.current,readyConversationId:R,readyEpoch:B,requestedConversationId:S});F&&(I(Y=>{let re=Y[F];return!re||re.composerReady?Y:{...Y,[F]:{...re,composerReady:!0}}}),V(F),m(B))},[t,m,S]),it=Ce(()=>{try{return Nt(fn(d.tools,d.permissionDefaultMode)),d.permissionShowPicker&&Nt(fn(d.tools,"ask")),null}catch(R){return R instanceof Error?R.message:"The client tools could not be loaded"}},[d.permissionDefaultMode,d.permissionShowPicker,d.tools]),ht=it?null:Ci(d),wn=Bt(R=>Ri(d,T,R)),Ft=Bt(R=>{Ne(d,T,R,"embed_loaded")}),Vt=le(n);Tt(()=>{if(Vt.current===n)return;Vt.current=n,_.current=null,G.current=null,k.current={},$.current=null,I({}),V(null),f([]);let R=us();C.current=R,b(R),x({}),r?T.reset():T.clear()},[n,r,T]),Tt(()=>{if(S!==null||it)return;let R=Yi(G.current,t);G.current=R;let B=_.current;if(!B)return;let F=R.conversationId;localStorage.setItem(B.storageKey,F),y(null),f(Y=>{let re=Kn(Y,F,Tr([]),Date.now());return Pt(B.historyKey,re),re}),I(Y=>({...Y,[F]:{composerReady:!1,config:B.config,conversationId:F,historyKey:B.historyKey,readyEpoch:t,runtime:null,showStartScreenWhileConnecting:!0,storageKey:B.storageKey}})),V(F)},[it,t,S]),ye(()=>{let R=!1;if(it){y(it),V(null),he(t);return}let B=_.current;if(B){let Y=Vr({conversationEpoch:t,optimisticTarget:G.current,requestedConversationId:S,storedConversationId:localStorage.getItem(B.storageKey)}),re=Y?k.current[Y]:void 0;if(re?.runtime){y(null),I(be=>({...be,[re.conversationId]:{...re,readyEpoch:t}})),re.composerReady&&V(re.conversationId);return}}let F=Vr({conversationEpoch:t,optimisticTarget:G.current,requestedConversationId:S,storedConversationId:null});return y(null),V(F??(typeof S=="string"&&At(S)?S:null)),(async()=>{try{let Y=await T.subjectHash(),re=`heroui-agent:conversation:${ce}:${Y}`,be=`heroui-agent:history:${ce}:${Y}`,Oe=Vr({conversationEpoch:t,optimisticTarget:G.current,requestedConversationId:S,storedConversationId:localStorage.getItem(re)})??crypto.randomUUID();localStorage.setItem(re,Oe);let De=Do(be);R||f(De);let Ze=B?.config??tl(ce),wt=Ze?null:Gn(T,`${ne}/v1/agents/${encodeURIComponent(ce)}/config`),Le=Gn(T,`${ne}/v1/agents/${encodeURIComponent(ce)}/conversations`).catch(()=>null),En=await wn(Oe),et=Ze??(wt?await Cg(wt):null);if(!et||!En)throw new Error("The data assistant could not be loaded");Ze||nl(ce,et);let Pn=De.find(Ie=>Ie.id===Oe),In=Kn(De,Oe,Pn?.title??Tr([]),Pn?.updatedAt??Date.now());if(In!==De&&Pt(be,In),!R){_.current={config:et,historyKey:be,storageKey:re},f(In);let Ie=k.current[Oe],xn={composerReady:!1,config:et,conversationId:Oe,historyKey:be,readyEpoch:t,runtime:En.runtime,showStartScreenWhileConnecting:Ie?.showStartScreenWhileConnecting??S===null,storageKey:re};U(xn)}Le.then(async Ie=>{if(!Ie?.ok)return;let xn=Cr((await Ie.json()).conversations);R||f(Nn=>{let ue=Lo(Nn,xn);return Pt(be,ue),ue})}),Ft(Oe)}catch(Y){if(!R&&S===void 0&&Si(Y)){Q();return}R||(y(Y instanceof Error?Y.message:"The data assistant could not be loaded"),he(t))}})(),()=>{R=!0}},[ne,U,ht,it,t,n,ce,S,L,Q,T]);let sn=z((R,B,F)=>{let Y=_.current?.historyKey;Y&&f(re=>{let be=Kn(re,R,B,Date.now(),F);return Pt(Y,be),be})},[]),ve=z(R=>{I(B=>{let F=B[R];return F?.showStartScreenWhileConnecting?{...B,[R]:{...F,showStartScreenWhileConnecting:!1}}:B})},[]),Pe=z(async(R,B)=>{let F=async()=>{let re=await T.get(),be=new Headers(B.headers);for(let[De,Ze]of Object.entries(Ur(re)))be.set(De,Ze);let Oe=await fetch(`${ne}/v1/conversations/${encodeURIComponent(R)}`,{...B,headers:be});if(Oe.status===401){T.clear();let De=await T.get(),Ze=new Headers(B.headers);for(let[wt,Le]of Object.entries(Ur(De)))Ze.set(wt,Le);Oe=await fetch(`${ne}/v1/conversations/${encodeURIComponent(R)}`,{...B,headers:Ze})}return Oe},Y=await F();if(B.method==="DELETE"&&Y.status===409&&(Y=await Ji({initialResponse:Y,request:F})),!Y.ok)throw new Error(B.method==="DELETE"?"The chat could not be deleted":"The chat could not be renamed")},[ne,T]),we=z(async(R,B)=>{await Pe(R,{body:JSON.stringify({title:B}),headers:{"Content-Type":"application/json"},method:"PATCH"});let F=_.current?.historyKey;F&&f(Y=>{let re=Y.map(be=>be.id===R?{...be,title:B}:be);return Pt(F,re),re})},[Pe]),ct=z(async R=>{await Pe(R,{method:"DELETE"});let B=_.current;B&&(f(F=>{let Y=F.filter(re=>re.id!==R);return Pt(B.historyKey,Y),Y}),localStorage.removeItem(vr(B.storageKey,R)),localStorage.removeItem(Mo(B.storageKey,R)),Sr(ko(B.storageKey,R)),vc(ys(B.storageKey,R)),I(F=>{if(!(R in F))return F;let Y={...F};return delete Y[R],Y}),ie(F=>Wi(F,R)),x(F=>{if(!(R in F))return F;let Y={...F};return delete Y[R],Y}),E===R&&Q())},[E,ie,Pe,Q]),ze=Ce(()=>{let R=d.suggestedPrompts;return!R?.length&&!d.componentSurfaceVariant&&!d.surfaceVariant?N:Object.fromEntries(Object.entries(N).map(([B,F])=>[B,{...F,config:{...F.config,...R?.length?{suggestedPrompts:R}:{},...d.componentSurfaceVariant?{componentSurfaceVariant:d.componentSurfaceVariant}:{},...d.surfaceVariant?{surfaceVariant:d.surfaceVariant}:{}}}]))},[d.componentSurfaceVariant,d.suggestedPrompts,d.surfaceVariant,N]),yt=E?ze[E]?.config??null:null,Ae=le(null);ye(()=>{!p||!j?.runtime||Ae.current===j.conversationId||(Ae.current=j.conversationId,Ne(d,T,j.conversationId,"opened"))},[p,d,j,T]);let Rt=it??Z,Mn=Ce(()=>Bo(h),[h]),no=h.find(R=>R.id===E)?.title??"New chat",ar=_.current?"Loading chat\u2026":"Loading assistant\u2026",an=S===null&&(!j||j.showStartScreenWhileConnecting);return P(on,{children:Ee(ya,{keepMounted:!0,agentId:d.agentId,shouldCloseOnInteractOutside:d.shouldCloseOnInteractOutside,defaultExpanded:d.panelExpanded,expandable:!O&&d.panelExpandable,expandedTitle:no,name:yt?.name??"Data assistant",open:p,showBetaBadge:d.showBetaBadge,viewMode:d.viewMode,actionsSlot:O?P(on,{}):P(Zc,{isDisabled:an,onPress:Q}),expandedSidebarSlot:O?void 0:P(_s,{activeConversationId:E,busyConversationIds:A.busyIds,completedConversationIds:A.completedIds,groups:Mn,isNewConversationDisabled:an,variant:"sidebar",onDeleteConversation:ct,onNewConversation:Q,onRenameConversation:we,onSelectConversation:H}),historySlot:O?P(on,{}):P(_s,{activeConversationId:E,busyConversationIds:A.busyIds,completedConversationIds:A.completedIds,groups:Mn,onDeleteConversation:ct,onRenameConversation:we,onSelectConversation:H}),onClose:o,onNewConversation:O?void 0:Q,children:[Rt?P("div",{className:"ha-loading",role:"alert",children:Rt}):O?P(ha,{indicator:P(yg,{"aria-hidden":!0,color:"current",size:"md"})}):!j||!j.runtime||!yt?an&&j?P(xl,{composerControlsRevealed:e,loadingLabel:ar,options:d,route:j,onComposerControlsReveal:s},`pending-${t}`):P($r,{agentId:d.agentId,composerControlsAvailable:d.composerControlsAvailable,composerControlsRevealed:e,composerEndSlot:u,composerFooterSlot:w,greeting:d.greeting,loadingLabel:ar,placeholder:d.composerPlaceholder,showStartScreen:an,subtitle:d.subtitle,suggestedPrompts:d.suggestedPrompts??[],composerStartSlot:P(Ol,{agentId:d.agentId,options:d}),onComposerControlsReveal:s},`pending-${t}`):null,P("div",{className:"ha-runtime-content",hidden:!!Rt||O,children:P(nc,{activeConversationId:Rt?null:E,routes:ze,children:(R,B)=>P(La,{componentVariant:R.config.componentSurfaceVariant,variant:R.config.surfaceVariant,children:R.runtime?P(Sg,{fallback:B&&R.showStartScreenWhileConnecting?P(xl,{composerControlsRevealed:e,loadingLabel:"Connecting chat\u2026",options:d,route:R,onComposerControlsReveal:s}):P($r,{agentId:d.agentId,composerControlsAvailable:d.composerControlsAvailable,composerControlsRevealed:e,greeting:d.greeting,loadingLabel:"Connecting chat\u2026",placeholder:d.composerPlaceholder,showStartScreen:!1,subtitle:d.subtitle,suggestedPrompts:d.suggestedPrompts??[],onComposerControlsReveal:s}),children:P(wg,{active:B,composerControlsRevealed:!!B&&e,config:R.config,conversationEpoch:R.readyEpoch,conversationId:R.conversationId,options:d,runtime:R.runtime,showStartScreenWhileHydrating:R.showStartScreenWhileConnecting,storageKey:R.storageKey,tokenManager:T,messageQueue:M[R.conversationId]??Il,onComposerControlsReveal:s,onConversationStatusChange:pe,onMessageQueueChange:D,onReady:qe,onRuntimeRevisionStale:W,onConversationStarted:F=>{ve(R.conversationId),sn(R.conversationId,F)},onConversationTitled:F=>sn(R.conversationId,F,{replaceTitle:!0})})}):null})})})]})})}function xl({composerControlsRevealed:e,loadingLabel:t,onComposerControlsReveal:n,options:r,route:o}){return P($r,{showStartScreen:!0,agentId:r.agentId,composerControlsAvailable:r.composerControlsAvailable,composerControlsRevealed:e,composerStartSlot:P(Ol,{agentId:r.agentId,options:r}),greeting:r.greeting,loadingLabel:t,placeholder:r.composerPlaceholder,subtitle:r.subtitle,suggestedPrompts:r.suggestedPrompts??[],composerEndSlot:P(Rg,{conversationId:o.conversationId,options:r,storageKey:o.storageKey}),composerFooterSlot:r.composerDisclaimer?P("p",{className:"ha-footnote",children:bo(r.composerDisclaimer)}):null,onComposerControlsReveal:n})}function Ol({agentId:e,options:t}){let n=le(null),[r,o]=J(()=>Co(e)),[s,i]=J(null),m=c=>{let l=Sn(c,t.composerAttachmentContentTypes);o(l.files),i(l.error),Ea(e,l.files)};return t.composerAttachmentContentTypes.length===0?null:Ee(on,{children:[P("input",{ref:n,multiple:!0,accept:t.composerAttachmentAccept,"aria-label":"Choose files to attach",className:"ha-file-input",type:"file",onChange:c=>{m(Array.from(c.currentTarget.files??[])),c.currentTarget.value=""}}),r.length>0?P(Io,{"aria-label":"Selected attachments",className:"ha-attachments",offset:1,size:24,children:r.map(c=>P(as,{file:c,onRemove:()=>m(r.filter(l=>l!==c))},`${c.name}-${c.size}-${c.lastModified}`))}):null,P("button",{"aria-label":"Attach files",className:"ha-attach",type:"button",onClick:()=>n.current?.click(),children:P(kl,{"aria-hidden":"true"})}),s?P("span",{className:"ha-dictation-error",role:"alert",children:s}):null]})}function Rg({conversationId:e,options:t,storageKey:n}){let r=vr(n,e),[o]=J(()=>Ao(t.agentId)),[s]=J(()=>wo(t.agentId)),[i,m]=J(()=>{let d=s??br(r)??t.permissionDefaultMode;return s&&gn(r,s),d}),{selectedModelId:c,setSelectedModelId:l}=Os(n,t.composerDefaultModel,o),p=d=>{m(d),gn(r,d)};return Ee(on,{children:[t.permissionShowPicker&&t.tools.length>0?P(Ro,{"aria-label":"Tool permissions",className:"ha-permission-picker",value:i,onChange:p}):null,t.composerModelPicker?P(To,{"aria-label":"AI model",className:"ha-model-picker",options:So,placement:t.permissionShowPicker&&t.tools.length>0?"top":"top start",value:c,onChange:l}):null,t.composerDictation?Ee("button",{disabled:!0,"aria-label":"Dictate message",className:"ha-dictation",type:"button",children:[P(_l,{"aria-hidden":"true"}),P(Vn,{children:"Dictate message"})]}):null]})}function wg({active:e,composerControlsRevealed:t,config:n,conversationEpoch:r,conversationId:o,messageQueue:s,onComposerControlsReveal:i,onConversationStarted:m,onConversationStatusChange:c,onConversationTitled:l,onMessageQueueChange:p,onReady:d,onRuntimeRevisionStale:S,options:u,runtime:w,showStartScreenWhileHydrating:O,storageKey:T,tokenManager:E}){let[V]=J(()=>Ao(u.agentId)),[N]=J(()=>wo(u.agentId)),{selectedModelId:I,setSelectedModelId:k}=Os(T,u.composerDefaultModel,V),$=Mo(T,o),Z=vr(T,o),y=u.composerAttachmentAccept,h=Ce(()=>({key:y}),[y]),[f,A]=J(()=>({files:Sn(Co(u.agentId),u.composerAttachmentContentTypes).files,policy:h})),[b,C]=J(()=>({error:null,policy:h})),M=Ce(()=>f.policy===h?f.files:[],[h,f]),x=b.policy===h?b.error:null,L=z(a=>{A(g=>{let v=g.policy===h?g.files:[],K=typeof a=="function"?a(v):a;return{files:Sn(K,u.composerAttachmentContentTypes).files,policy:h}})},[h,u.composerAttachmentContentTypes]),X=z(a=>C({error:a,policy:h}),[h]),[j,U]=J(()=>{let a=u.permissionShowPicker?br($):void 0;return a?{modelId:void 0,permissionMode:a}:void 0}),[W,ie]=J({}),[pe,H]=J({}),[Q,D]=J(!1),[_]=J(()=>Ta(u.agentId)),[G,ne]=J(()=>_?.submitted?"":_?.prompt??""),[ce,he]=J(()=>_?.submitted?{files:M,id:_.messageId,text:_.prompt}:null),[qe,it]=J(()=>{let a=u.permissionShowPicker?br(Z):void 0;return N&&gn(Z,N),{configuredDefaultMode:u.permissionDefaultMode,selectedMode:N??a??u.permissionDefaultMode}}),[ht,wn]=J(!1),[Ft,Vt]=J(!0),[sn,ve]=J(!1),[Pe,we]=J(!1),[ct,ze]=J(()=>new Set),[yt,Ae]=J(null),[Rt,Mn]=J(0),[no,ar]=J(0),[an,R]=J(!1),[B,F]=J(!1),[Y,re]=J(null),[be,Oe]=J({}),De=z(a=>{u.permissionShowPicker?gn($,a.permissionMode):Eo($),U(a)},[$,u.permissionShowPicker]),Ze=qe.configuredDefaultMode===u.permissionDefaultMode?qe.selectedMode:u.permissionDefaultMode,wt=z(a=>{gn(Z,a),it({configuredDefaultMode:u.permissionDefaultMode,selectedMode:a})},[u.permissionDefaultMode,Z]),Le=u.permissionShowPicker?Ze:u.permissionDefaultMode,En=u.permissionShowPicker?j?.permissionMode??Le:u.permissionDefaultMode,et=Ce(()=>fn(u.tools,En),[En,u.tools]),Pn=Ce(()=>Nt(et),[et]),In=Ce(()=>ki(Pn),[Pn]),Ie=Ce(()=>new Map(et.map(a=>[a.name,a])),[et]),xn=Ce(()=>new Set(et.map(a=>a.name)),[et]),Nn=le(new Set),ue=le(null),_n=le(new Set),Ls=le(!1),He=le(s),ro=le(null),tt=le(!1),Ue=le(!1),$t=le(null),ir=le(0),lt=le(0),Mt=le(null),Qt=le(null),cr=le(null),oo=le(new Set),so=le(new Map),kn=le(()=>{}),Hs=le(null),Us=le(null),ut=le(null),Me=Ce(()=>dl({report:({latencyMs:a,messageId:g,metric:v})=>{Ne(u,E,o,v,{latencyMs:a,latencyOrigin:"user_submit",messageId:g})}}),[o,u,E]),Dl=Ce(()=>ko(T,o),[o,T]),On=Ce(()=>ys(T,o),[o,T]),Bs=Sl({attachments:M,draftKey:Dl,input:G,setAttachments:L,setInput:ne}),Ll=z((a,{language:g,signal:v})=>wl({apiBaseUrl:u.apiBaseUrl,audio:a,conversationId:o,...g?{language:g}:{},signal:v,tokenManager:E}),[o,u.apiBaseUrl,E]),{cancel:Ge,elapsedSeconds:ao,error:io,isActive:ke,isRecording:Hl,isSupported:Kt,isTranscribing:Dn,start:Fs,stop:Vs,stream:Ul}=qo({onValueChange:ne,transcribe:Ll,value:G}),co=t||Q||ke||M.length>0||x!==null||io!==null,$s=z(()=>{u.composerControlsAvailable&&i()},[i,u.composerControlsAvailable]),Bl=a=>{Qn(u.agentId,!0,a.currentTarget),$s()},Fl=a=>{let g=a.currentTarget.querySelector(".ha-composer");g&&Ma(g,a.relatedTarget)||Qn(u.agentId,!1)};ye(()=>{He.current=s},[s]),ye(()=>{u.composerDictation||Ge()},[Ge,u.composerDictation]),ye(()=>{e||Ge()},[e,Ge]);let cn=u.composerModelPicker?I:u.composerDefaultModel,ln=z(a=>{He.current=a,p(o,()=>a)},[o,p]),nt=z(async(a,{applyAfterPersist:g=!1}={})=>{let v=He.current,K=a(v);if(K!==v){g?He.current=K:ln(K);try{await vs(On,K)}catch(se){throw He.current===K&&(g?He.current=v:ln(v)),se}g&&He.current===K&&ln(K)}},[ln,On]),je=z(a=>{nt(a).catch(()=>{})},[nt]),Vl=z(a=>{_n.current.add(a),nt(g=>Jn(Cn(g,a,"admitted"),a)).catch(()=>{})},[nt]);ye(()=>{let a=!1;return Vt(!0),yc(On).then(async g=>{if(a)return;let v=bc(g,He.current),K=_n.current,se={...v,messages:v.messages.filter(ge=>!K.has(ge.id))};ln(se),await vs(On,se)}).catch(()=>{}).finally(()=>{a||Vt(!1)}),()=>{a=!0}},[ln,On]);let lr=z(()=>{tt.current=!1,Ue.current=!1,Mt.current=null,F(!1)},[]),Qs=z(a=>{rn({attempt:a,currentAttempt:lt.current,manualStopRequested:tt.current,stalledStopRequested:Ue.current})&&we(!1)},[]),{agent:qt,connectionEpoch:ur,connectionError:dt,isHydrating:$l,isReconnecting:Ks,retryConnection:Ql}=Pg({conversationId:o,onRuntimeRevisionStale:S,onTurnAdmitted:Vl,options:u,runtime:w,tokenManager:E}),Kl=Bt(d);Tt(()=>{Kl(o,r)},[e,r,o]),ye(()=>{if(Ft||ur===0)return;let a=[];for(let K of He.current.messages)ft(K)==="sending"&&a.push(K.id);if(a.length===0){ve(!1);return}let g=!1,v;return ve(!0),(async()=>{let K=[];for(let de=0;de<a.length;de+=50)K.push(a.slice(de,de+50));let se=async de=>{let st=await Promise.all(K.map(async mt=>({response:await qt.call(Ba,[{protocolVersion:6,turnIds:mt}],{timeout:15e3}),turnIds:new Set(mt)}))),Fe=new Set;for(let{response:mt,turnIds:yo}of st){if(mt.protocolVersion!==6||!Array.isArray(mt.turns))throw new Error("Invalid turn admission status response");for(let pn of mt.turns)pn.status==="admitted"&&yo.has(pn.turnId)&&Fe.add(pn.turnId)}return Fe.size===a.length||de>=4?Fe:(await new Promise(mt=>window.setTimeout(mt,500)),se(de+1))},ge;try{ge=await se(0)}catch{g||(v=window.setTimeout(()=>ar(de=>de+1),1e3));return}if(!g){for(let de of ge)_n.current.add(de);await nt(de=>Sc(de,ge))}})().catch(()=>{}).finally(()=>{g||ve(!1)}),()=>{g=!0,v!==void 0&&window.clearTimeout(v)}},[qt,nt,ur,Ft,no]);let ql=Ce(()=>new Proxy(qt,{get(a,g){if(g==="send")return K=>a.send(Oi(K));let v=Reflect.get(a,g,a);return typeof v=="function"?v.bind(a):v}}),[qt]),q=pg({agent:ql,cancelOnClientAbort:!1,experimental_throttle:60,getInitialMessages:null,onData:a=>{if(a.type!=="data-conversation-title"){let g=Me.getActiveMessageId();g&&oo.current.add(g)}if(a.type==="data-progress"&&a.data&&typeof a.data=="object"&&"label"in a.data&&typeof a.data.label=="string"&&Ae(a.data.label),a.type==="data-conversation-title"&&a.data&&typeof a.data=="object"&&"title"in a.data&&typeof a.data.title=="string"&&a.data.title.trim()&&l(a.data.title.trim()),a.type==="data-component"){let g=a.data&&typeof a.data=="object"&&"kind"in a.data?a.data:null;Ne(u,E,o,"component_rendered",{componentType:g?.kind})}a.type==="data-runtime-timing"&&rl(u.agentId,o,a.data)},onError:a=>{if(tt.current||Ue.current){Mt.current=null,we(!1),Ae(null),queueMicrotask(()=>kn.current());return}Mt.current=a,we(!1),Ae(null),Ne(u,E,o,"failure",{messageId:Me.getActiveMessageId()??void 0,source:"cloudflare-chat"})},onFinish:({isError:a})=>{if(tt.current||Ue.current){Mt.current=null,we(!1),Ae(null),queueMicrotask(()=>kn.current());return}a&&!Mt.current&&(Mt.current=new Error("The request could not be completed")),we(!1),Ae(null)},resume:!0,syncMessagesToServer:!1,tools:In}),{clearError:qs,setMessages:zs}=q;Tt(()=>{kn.current=qs},[qs]);let vt=q.status==="submitted"||q.status==="streaming"||q.isStreaming,Et=an||B,Ln=!Et&&q.isToolContinuation,lo=!!(Et||q.error||q.connectionError||dt),zt=Ce(()=>!lo&&(ct.size>0||ml({isPendingPart:a=>{let g=a,v=Ds(g);return Pc({isClientTool:!!(v&&Ie.has(v)),state:g.state})},messages:q.messages,terminal:lo})),[q.messages,Ie,lo,ct]),Be=gl({hasPendingClientToolCalls:zt,isAutoContinuationPending:Ln,isRecovering:q.isRecovering,isRunning:vt,localPending:Pe,stalled:B});ye(()=>{if(Be)return;let a=Me.getActiveMessageId();a&&(Me.complete(a),oo.current.delete(a),so.current.delete(a))},[Be,Me]);let Gt=!dt&&($l||Ks||Ft||sn),uo=Gt||Be,mo=Et||!!q.error||!!q.connectionError||!!dt,bt=uo||mo,Gs=Cc({hasChatError:!!(q.error||q.connectionError||dt),hasPendingClientToolCalls:zt,hasReadyClientToolContinuation:Ln,isLocalPending:Pe,isResuming:Gt,isRunning:vt,recoveryError:Et}),js=Bt(c);ye(()=>{j&&!vt&&!zt&&!Pe&&!Gt&&!Ln&&(Eo($),U(void 0))},[j,$,zt,Ln,Gt,vt,Pe]),ye(()=>{js(o,{busy:uo,failed:mo,turnActive:Be})},[mo,o,Be,uo]),ye(()=>()=>{js(o,{busy:!1,failed:!0,turnActive:!1})},[o]);let St=q.messages.at(-1),Ws=vt&&St?.role==="assistant"?St.id:null,zl=St?.role==="assistant"&&(zt||Ln||q.isRecovering)?St.id:null,jt=ec({continuingAssistantMessageId:zl,isActiveTurn:Be,streamingAssistantMessageId:Ws,trackedActivityMessageId:Qt.current}),po=jt===St?.id?St:void 0,Ys=!!(po&&jo(po,Ie,{isStreaming:!0}).length>0),Gl=ks(po).hasServerContent;ye(()=>{if(Be&&jt){if(Qt.current===jt)return;let v=cr.current??Date.now();Qt.current=jt,ie(K=>({...K,[jt]:{startedAt:v}}));return}let a=Qt.current;if(Be||!a)return;let g=Date.now();ie(v=>{let K=v[a];return!K||K.completedAt?v:{...v,[a]:{...K,completedAt:g}}}),Qt.current=null,cr.current=null},[jt,Be]);let dr=z(async(a,g,v)=>{q.addToolOutput({output:v,toolCallId:g,toolName:a})},[q.addToolOutput]),go=z((a,g)=>{ze(v=>{if(v.has(a)===g)return v;let K=new Set(v);return g?K.add(a):K.delete(a),K})},[]),mr=z(async(a,g)=>{await Pi({activeToolCallIds:Nn.current,run:async()=>{go(g.toolCallId,!0),Ae("Fetching live data\u2026");try{await Ni({conversationId:o,execute:v=>xi({context:u.context,execution:v,input:g.input,tool:a}),input:g.input,rpc:{claim:v=>qt.call("claimClientToolEffect",[v],{timeout:rs}),complete:v=>qt.call("completeClientToolEffect",[v],{timeout:rs})},submitOutput:v=>dr(a.name,g.toolCallId,v),toolCallId:g.toolCallId,toolName:a.name,uploadDataSource:v=>ts({apiBaseUrl:u.apiBaseUrl,conversationId:o,input:v,tokenManager:E})}),Ae("Analyzing the results\u2026")}finally{go(g.toolCallId,!1)}},toolCallId:g.toolCallId})},[qt,o,u.apiBaseUrl,u.context,go,dr,E]),jl=z((a,g,v)=>{let K=g.toolCallId;if(Oe(se=>({...se,[K]:v?"approved":"rejected"})),Ae(v?"Applying your change\u2026":"Updating your request\u2026"),Ne(u,E,o,v?"action_approved":"action_declined"),g.approval?.id)q.addToolApprovalResponse({approved:v,id:g.approval.id});else if(!v)dr(a,K,{reason:"The user declined this tool call",rejected:!0});else{Oe(se=>({...se,[K]:"rejected"}));return}if(v){let se=Ie.get(a);se&&mr(se,g).catch(()=>{})}else Nn.current.add(K)},[q.addToolApprovalResponse,Ie,o,mr,u,dr,E]);ye(()=>{for(let a of q.messages)if(a.role==="assistant")for(let g of a.parts){let v=Ds(g);if(!v)continue;let K=Ie.get(v);!K||Nn.current.has(g.toolCallId)||Ii({approvalApproved:g.approval?.approved,decision:be[g.toolCallId],needsApproval:K.needsApproval===!0,state:g.state})&&mr(K,g).catch(()=>{})}},[q.messages,Ie,ur,mr,be]);let Hn=z(a=>{D(xa(a,{hasAttachments:co&&M.length>0}))},[M.length,co]);Tt(()=>{Hn(ut.current)},[G,ke,Hn]),Tt(()=>Na(ut.current,Hn),[Hn]);let Xs=z(a=>{if(a.length===0)return;let g=Sn([...M,...a],u.composerAttachmentContentTypes);X(g.error),L(g.files)},[M,u.composerAttachmentContentTypes,X,L]),Js=z(()=>{Ge(),Bs(),ne(""),L([]),X(null),re(null)},[Ge,Bs,X,L]),Wl=z(()=>ut.current?.focus(),[]),fo=z(()=>{if(Dn){Ge(),requestAnimationFrame(()=>ut.current?.focus());return}if(ke){Vs(),requestAnimationFrame(()=>ut.current?.focus());return}Fs()},[Ge,ke,Dn,Fs,Vs]);ye(()=>{if(!e||!u.composerDictation||!Kt)return;let a=g=>{zi(g)&&(g.preventDefault(),ut.current?.focus({preventScroll:!0}),fo())};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[e,Kt,u.composerDictation,fo]),Tt(()=>{e&&wa(u.agentId,ut.current)},[e,u.agentId]);let Zs=z(async a=>{let g=++lt.current,v=q.messages,K=v.findLast(Fe=>Fe.role==="user")?.id,se=v.findLast(Fe=>Fe.role==="assistant")?.id,ge=u.permissionShowPicker?a.permissionMode??Le:u.permissionDefaultMode,de=Nt(fn(u.tools,ge));De({modelId:a.modelId,permissionMode:ge}),Qt.current=null,so.current.set(a.id,se),Me.activate(a.id);let st=Me.getStartedAtWallClock(a.id)??Date.now();cr.current=st,lr(),ro.current={previousUserMessageId:K??null,scrollKey:crypto.randomUUID()},we(!0),R(!1),F(!1),Ae(qn("accepted")),m(Ho(a.text,a.files));try{let Fe=await Nl(u,a.selection);if(!rn({attempt:g,currentAttempt:lt.current,manualStopRequested:tt.current,stalledStopRequested:Ue.current}))return;a.files.length>0&&Ae("Uploading attachments\u2026");let mt=await Mi({acceptedContentTypes:u.composerAttachmentContentTypes,apiBaseUrl:u.apiBaseUrl,conversationId:o,files:a.files,tokenManager:E});if(!rn({attempt:g,currentAttempt:lt.current,manualStopRequested:tt.current,stalledStopRequested:Ue.current}))return;Ne(u,E,o,"message_sent",{messageId:a.id});let yo=os({clientSubmittedAt:st,clientTools:de,generateConversationTitle:a.generateConversationTitle,imageSearch:u.imageSearch,modelId:a.modelId,newsSearch:u.newsSearch,pageContext:Fe,permissionMode:ge,turnId:a.id,webSearch:u.webSearch});Ae(qn("accepted")),await q.sendMessage(Tc(a,mt),{body:yo});let pn=Mt.current;if(pn)throw Mt.current=null,pn}catch(Fe){if(!rn({attempt:g,currentAttempt:lt.current,manualStopRequested:tt.current,stalledStopRequested:Ue.current}))return;throw Fe instanceof Error&&X(Fe.message),zs(v),q.clearError(),R(!1),F(!1),we(!1),Ae(null),Fe}},[q,De,Le,o,m,u,lr,X,zs,E,Me]),Un=z((a,{resumeDrainAfter:g=!0}={})=>{ue.current=a.id,Zs(a).catch(()=>{ue.current===a.id&&(ue.current=null),_n.current.has(a.id)||je(v=>gt(Cn(hs(v,{...a,deliveryStatus:"pending"},"prepend"),a.id,"pending"),a.id))}).finally(()=>{ue.current===a.id&&(ue.current=null),g&&Mn(v=>v+1)})},[Zs,je]),Wt=z((a,g,v=g?.generateConversationTitle??!0)=>{let K=a.trim();if(!K&&M.length===0)return;let se=!bt&&!ue.current&&He.current.messages.length===0,ge=wc({activeMessageId:ue.current,authoritativeMessageCount:q.messages.length,isNewChatStartScreen:O,queuedMessageCount:He.current.messages.length}),de={files:M,...ge&&!v?{generateConversationTitle:!1}:{},id:g?.messageId??crypto.randomUUID(),...ge?{isInitialTurn:!0}:{},...cn?{modelId:cn}:{},permissionMode:Le,selection:Y,text:K};se&&(de.deliveryStatus="sending"),ge&&he({files:de.files,id:de.id,text:de.text}),Me.begin(de.id,g),g?.firstFeedbackPaintedAt!==void 0&&Me.markPaintedAt(de.id,"first_feedback_paint",g.firstFeedbackPaintedAt),se&&(ue.current=de.id),nt(st=>Zn(hs(st,de),!1),{applyAfterPersist:!0}).then(()=>{Js(),se?Un(de):Mn(st=>st+1)}).catch(st=>{se&&(ue.current=null),ge&&he(null),g&&ne(K),X(st instanceof Error?st.message:"This message could not be saved before sending")})},[M,cn,Le,nt,q.messages.length,bt,Js,Y,Un,X,O,Me]),un=n.suggestedPrompts,Yl=Bt(a=>Wt(a.prompt,a));ye(()=>{if(!e)return;Pa(u.agentId);let a=Ra(u.agentId);a&&(a.submitted?Yl(a):ne(g=>g||a.prompt))},[e,u.agentId]),ye(()=>{if(!e||!u.suggestedPromptShortcuts||q.messages.length>0||un.length===0)return;let a=g=>{let v=Gi(g,un.length);if(v===null)return;let K=un[v];K&&(g.preventDefault(),Wt(K,void 0,!1))};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[e,q.messages.length,u.suggestedPromptShortcuts,Wt,un]);let ea=a=>{a.preventDefault(),Wt(G)},Xl=Bt(async a=>{try{await nt(g=>Cn(g,a.id,"sending"))}catch(g){ue.current===a.id&&(ue.current=null),X(g instanceof Error?g.message:"This message could not be saved before sending"),je(v=>gt(v,a.id));return}ue.current===a.id&&Un({...a,deliveryStatus:"sending"})}),Jl=z(a=>{Ls.current=a,wn(a)},[]);ye(()=>{let a=Ic({activeMessageId:ue.current,isBusy:bt,isReordering:ht,queue:s});a&&(ue.current=a.id,queueMicrotask(()=>{if(Ls.current){ue.current===a.id&&(ue.current=null);return}ue.current===a.id&&Xl(a)}))},[bt,ht,s,Rt]);let Zl=z(a=>{he(g=>g?.id===a?null:g),je(g=>Jn(g,a))},[je]),eu=z((a,g,v)=>{je(K=>fc(gt(K,null),a,g,v))},[je]),tu=z(a=>{let g=He.current.messages.find(v=>v.id===a);g&&(Ge(),ne(g.text),L(g.files),g.modelId&&k(g.modelId),g.permissionMode&&wt(g.permissionMode),re(g.selection),D(!0),he(v=>v?.id===a?null:v),je(v=>Jn(gt(v,null),a)),requestAnimationFrame(()=>ut.current?.focus()))},[Ge,L,je,wt,k]),nu=z(a=>{if(bt||ue.current)return;let g=He.current.messages.find(v=>v.id===a);g&&(ue.current=g.id,nt(v=>Zn(Cn(gt(v,null),a,"sending"),!0)).then(()=>{ue.current===g.id&&Un({...g,deliveryStatus:"sending"},{resumeDrainAfter:!1})}).catch(v=>{ue.current===g.id&&(ue.current=null),X(v instanceof Error?v.message:"This message could not be saved before sending")}))},[nt,bt,Un,X]),ta=z(()=>{let a=ue.current;ir.current+=1,lt.current+=1,tt.current=!0,Ue.current=!1,ue.current=null,he(null),je(v=>Zn(a&&!_n.current.has(a)?Cn(gt(v,null),a,"pending"):gt(v,null),!0)),we(!1),Ae(null),R(!1),F(!1),Ne(u,E,o,"stopped");let g=Promise.resolve().then(()=>q.stop()).catch(()=>{}).finally(()=>{$t.current===g&&($t.current=null),kn.current()});$t.current=g},[q,o,u,je,E]),ru=Bt(()=>{if(tt.current||Ue.current)return;let a=ue.current;ir.current+=1,lt.current+=1,Ue.current=!0,ue.current=null,je(v=>Zn(a?Jn(gt(v,null),a):gt(v,null),!0)),we(!1),Ae(null),R(!1),F(!0),Ne(u,E,o,"turn_stalled",{messageId:a??void 0,source:"client-inactivity-watchdog"});let g=Promise.resolve().then(()=>q.stop()).catch(()=>{}).finally(()=>{$t.current===g&&($t.current=null),kn.current(),Ue.current&&F(!0)});$t.current=g});ye(()=>{if(fl({hasActiveTurn:Be,hasPendingClientToolCalls:zt,isResuming:Gt,stalled:B}))return hl(ru)},[q.isRecovering,q.messages,q.status,ur,Be,zt,Gt,Pe,yt,B]);let ou=z(a=>{if(Ne(u,E,o,`component_${a.type}`,{actionId:"actionId"in a?a.actionId:void 0,componentId:a.componentId,format:"format"in a?a.format:void 0,hasToolName:"toolName"in a}),a.type==="tool"){let g=fa(Ie,a.toolName);if(g){(async()=>{try{let v=yr(g,a.args),K=`component-action-${crypto.randomUUID()}`;await g.execute(v,u.context,{conversationId:o,idempotencyKey:`heroui-agent-component-action:${o}:${K}`,toolCallId:K,uploadDataSource:se=>ts({apiBaseUrl:u.apiBaseUrl,conversationId:o,input:se,tokenManager:E})})}catch{}})();return}}Bi(a,{fillComposer:g=>{Ge(),ne(g),D(!0),requestAnimationFrame(()=>ut.current?.focus())},setSelection:re,submitPrompt:Wt})},[Ge,Ie,o,u,Wt,E]),su=z(a=>{let g=a.parts.filter(v=>v.type==="text").map(v=>v.text).join(`
|
|
4
|
-
|
|
5
|
-
`).trim();g&&(navigator.clipboard?.writeText(g).catch(()=>{}),Ne(u,E,o,"message_copied",{messageId:a.id}))},[o,u,E]),au=z(a=>{let g=a.providerMetadata?.heroui;Ne(u,E,o,"file_download",{format:typeof g?.format=="string"?g.format:void 0,outputBytes:typeof g?.byteLength=="number"?g.byteLength:void 0})},[o,u,E]),iu=z((a,g,v)=>{let K=pe[a]===g&&!v;if(H(se=>{let ge={...se};return K?delete ge[a]:ge[a]=g,ge}),!K){let se=v?.comment,ge=v?.reasons??[];Ne(u,E,o,g==="up"?"feedback_up":"feedback_down",{feedbackCommentLength:se?.length??0,feedbackReasons:ge,hasFeedbackComment:!!se,messageId:a});try{Promise.resolve(u.onFeedback?.({...se?{comment:se}:{},conversationId:o,messageId:a,rating:g==="up"?"positive":"negative",reasons:ge})).catch(()=>{})}catch{}}},[o,pe,u,E]),na=z(()=>{let a=++ir.current;(async()=>{let g=$t.current;if(!await pl(g,()=>ir.current===a))return;let v=++lt.current,K=Nt(fn(u.tools,Le)),se=crypto.randomUUID(),ge=Date.now();Qt.current=null,cr.current=ge,De({modelId:cn,permissionMode:Le}),lr(),ro.current=null,we(!0),R(!1),F(!1),Ae(qn("accepted")),Ne(u,E,o,"retry");try{let de=await Nl(u,Y);if(!rn({attempt:v,currentAttempt:lt.current,manualStopRequested:tt.current,stalledStopRequested:Ue.current}))return;await q.regenerate({body:os({clientSubmittedAt:ge,clientTools:K,imageSearch:u.imageSearch,modelId:cn,newsSearch:u.newsSearch,pageContext:de,permissionMode:Le,turnId:se,webSearch:u.webSearch})})}catch{if(!rn({attempt:v,currentAttempt:lt.current,manualStopRequested:tt.current,stalledStopRequested:Ue.current}))return;R(!0)}finally{Qs(v)}})()},[De,q,cn,Le,Qs,o,u,lr,Y,E]),cu=q.messages.findLast(a=>a.role==="assistant")?.id,rt=Mc({authoritativeMessageCount:q.messages.length,localTurn:ce,queue:s}),dn=Ce(()=>rt?{id:rt.id,parts:[{text:Rc(rt),type:"text"}],role:"user"}:null,[rt]),Bn=Ce(()=>dn?[dn,...q.messages]:q.messages,[q.messages,dn]),lu=dn!==null,pr=!!(rt&&!s.isPaused&&s.blockedMessageId!==rt.id),ra=!!(q.error||q.connectionError||Et||dt),oa=Bn.findLast(a=>a.role==="user")?.id,{activeStreamKey:gr,activeTurnMessageId:sa}=rc({isActive:Be||pr,lastUserMessageId:oa,pendingTurn:dn&&pr?{previousUserMessageId:null,scrollKey:dn.id}:ro.current}),aa=ni({clientToolNames:xn,isLocalPending:Pe,isRecovering:q.isRecovering||Ks,isStreaming:vt,messages:q.messages,status:q.status}),{showHome:ia,standaloneStatus:uu}=tc({hasActiveActivity:Ys,hasError:ra,hasResponseStarted:Gl,isActiveTurn:Be||pr,messageCount:Bn.length,preferHomeWhileEmpty:O,progress:pr?jn:yt??qn(aa),runtimeStatus:Gt?"pending":"ready"}),ca=Zi({activeStreamKey:gr,activeTurnMessageId:sa}),la=ia||ca&&Bn.length===0,ot=Me.getActiveMessageId(),du=ot?so.current.get(ot):void 0,ua=ot&&St?.role==="assistant"&&St.id!==du?St:void 0,Fn=ks(ua,{hasActivity:!!(ua&&Ys),hasTransientData:!!(ot&&oo.current.has(ot))}),ho=lu&&ra?null:uu,fr=!ca&&ho&&(e||ho!==jn)?ho:null,da=!!fr;Tt(()=>{if(e){for(let a of s.messages)Me.markAfterPaint(a.id,"first_feedback_paint");rt&&Me.markAfterPaint(rt.id,"first_feedback_paint"),ot&&((da||Fn.hasServerContent||q.error||q.connectionError||Et||dt)&&Me.markAfterPaint(ot,"first_feedback_paint"),Fn.hasServerContent&&Me.markAfterPaint(ot,"first_server_content_paint"),Fn.hasText&&Me.markAfterPaint(ot,"first_text_paint"))}},[e,ot,q.connectionError,q.error,da,s.messages,rt,Et,dt,Fn.hasServerContent,Fn.hasText,Me]);let mu=Ce(()=>Ec(s,rt?.id??null),[s,rt?.id]),hr=!!(G.trim()||M.length>0),ma=Dn?"Cancel transcription":ke?"Stop dictation":"Dictate message",pa=Kt?ma:"Voice dictation is not supported in this browser",mn=vt&&!hr?"Stop answering":bt&&!(O&&Bn.length===0)?"Queue message":"Send message";return Ee(on,{children:[Ee(cc,{activityPhase:aa,streamKey:gr,children:[la?Ee("div",{className:"ha-empty",children:[P("h2",{children:u.greeting}),P("p",{children:u.subtitle})]}):Bn.map(a=>P(Mg,{actions:u.messageActions,activityTiming:W[a.id],canRetry:a.id===cu&&!bt,clientTools:Ie,exportFormats:u.componentExportFormats,feedback:pe[a.id]??null,isActivityActive:a.id===jt,isStreaming:a.id===Ws,markdownAnimation:u.markdownAnimation,markdownCaret:u.markdownCaret,markdownPlugins:u.markdownPlugins,message:a,toolDecisions:be,turnAnchor:a.id===sa&&gr!==null?"active":a.id===oa?"latest":null,onAction:ou,onClientToolDecision:jl,onCopy:su,onFeedback:iu,onFileDownload:au,onRetry:na,onSelect:re},a.id)),fr?P("div",{className:"ha-message","data-role":"assistant","data-stream-anchor":"true","data-turn-feedback-id":ot??void 0,children:P("div",{className:"ha-message-body",children:fr===jn?P(ul,{},gr??o):P(Lr,{label:fr})})}):null,q.error||q.connectionError||Et||dt?Ee("div",{className:"ha-error",role:"alert",children:[P("span",{children:dt?"The assistant connection could not be restored.":B?"The assistant stopped responding. Please retry.":"The request could not be completed."}),P("button",{type:"button",onClick:dt?Ql:na,children:"Retry"})]}):null]}),Ee("form",{className:"ha-composer-wrap",onBlur:Fl,onSubmit:ea,children:[ia&&un.length>0?P("div",{"aria-label":"Suggested prompts",className:"ha-suggestions",role:"group",children:un.map((a,g)=>Ee("button",{className:"ha-suggestion",type:"button","aria-keyshortcuts":u.suggestedPromptShortcuts?`Control+${g+1}`:void 0,onClick:()=>Wt(a,void 0,!1),children:[P("span",{children:a}),u.suggestedPromptShortcuts?Ee("span",{"aria-hidden":"true",className:"ha-suggestion-shortcut",children:[P("kbd",{children:"Ctrl"}),P("kbd",{children:g+1})]}):P(fg,{"aria-hidden":"true"})]},a))}):null,Y?P($i,{title:Y.componentTitle,onRemove:()=>re(null)}):null,la?null:P(_c,{ref:Us,blockedMessageId:s.blockedMessageId,isSendNowDisabled:bt,messages:mu,onEdit:tu,onFocusComposer:Wl,onRemove:Zl,onReorder:eu,onReorderStateChange:Jl,onSendNow:nu}),Ee(Qi,{className:"@container ha-composer","data-controls-revealed":co||void 0,"data-dictating":ke||void 0,"data-expanded":ke||Q?!0:void 0,disabled:u.composerAttachmentContentTypes.length===0,onFilesSelected:Xs,onFileIntent:u.composerAttachmentContentTypes.length>0?$s:void 0,children:[P("textarea",{ref:ut,"aria-label":"Message the assistant",placeholder:u.composerPlaceholder,readOnly:ke,rows:1,value:G,onFocus:Bl,onSelect:a=>Qn(u.agentId,!0,a.currentTarget),onChange:a=>{ne(a.currentTarget.value),Qn(u.agentId,!0,a.currentTarget),Hn(a.currentTarget)},onKeyDown:a=>{if(!ke&&!xc(a,Us.current)&&qi(a.nativeEvent)){if(a.preventDefault(),vt&&!hr){ta();return}ea(a)}}}),u.composerAttachmentContentTypes.length>0?P("input",{ref:Hs,multiple:!0,accept:u.composerAttachmentAccept,"aria-label":"Choose files to attach",className:"ha-file-input",type:"file",onChange:a=>{let g=Array.from(a.currentTarget.files??[]);Xs(g),a.currentTarget.value=""}}):null,M.length>0?P(Io,{"aria-label":"Selected attachments",className:"ha-attachments",offset:1,size:24,children:M.map(a=>P(as,{file:a,onRemove:()=>{X(null),L(g=>g.filter(v=>v!==a))}},`${a.name}-${a.size}-${a.lastModified}`))}):null,u.composerAttachmentContentTypes.length>0?P("button",{"aria-label":"Attach files",className:"ha-attach",type:"button",onClick:()=>Hs.current?.click(),children:P(kl,{"aria-hidden":"true"})}):null,ke?P("div",{className:"ha-dictation-session",children:Dn?P("span",{className:"ha-dictation-status",role:"status",children:"Transcribing\u2026"}):Ee(on,{children:[P(Vo,{active:Hl,"aria-hidden":"true",className:"ha-dictation-waveform",height:28,stream:Ul}),P("time",{"aria-label":`Recording duration ${Ir(ao)}`,className:"ha-dictation-duration",dateTime:`PT${ao}S`,children:Ir(ao)})]})}):null,u.permissionShowPicker&&u.tools.length>0&&!ke?P(Ro,{"aria-label":"Tool permissions",className:"ha-permission-picker",isDisabled:Gs,value:Ze,onChange:wt}):null,u.composerModelPicker&&!ke?P(To,{"aria-label":"AI model",className:"ha-model-picker",isDisabled:Gs,options:So,value:I,placement:u.permissionShowPicker&&u.tools.length>0?"top":"top start",onChange:k}):null,u.composerDictation?Ee("button",{"aria-keyshortcuts":Kt?Ki:void 0,"aria-label":ma,"aria-pressed":ke,className:"ha-dictation","data-shortcut":Kt?"\u2303\u21E7D":void 0,"data-tooltip":pa,disabled:!Kt,type:"button",onClick:fo,children:[Dn?P(hg,{"aria-hidden":"true"}):ke?P(Pl,{"aria-hidden":"true"}):P(_l,{"aria-hidden":"true"}),P(Vn,{shortcut:Kt?"\u2303\u21E7D":void 0,children:pa})]}):null,x||u.composerDictation&&io?P("span",{className:"ha-dictation-error",role:"alert",children:x??io}):null,vt&&!hr?Ee("button",{"aria-keyshortcuts":ls,"aria-label":mn,className:"ha-send","data-shortcut":"\u21B5","data-tooltip":mn,type:"button",onClick:ta,children:[P(Pl,{"aria-hidden":"true"}),P(Vn,{shortcut:"\u21B5",children:mn})]}):Ee("button",{"aria-keyshortcuts":ls,"aria-label":mn,className:"ha-send","data-shortcut":"\u21B5","data-tooltip":mn,disabled:!hr||ke,type:"submit",children:[P(gg,{"aria-hidden":"true"}),P(Vn,{shortcut:"\u21B5",children:mn})]})]}),P("div",{className:"ha-composer-footer","data-revealed":!!u.composerDisclaimer||void 0,children:P("div",{className:"ha-composer-footer-content",children:u.composerDisclaimer?P("p",{className:"ha-footnote",children:bo(u.composerDisclaimer)}):null})}),P(_a,{})]})]})}function Mg({actions:e,activityTiming:t,canRetry:n,clientTools:r,exportFormats:o,feedback:s,isActivityActive:i,isStreaming:m,markdownAnimation:c,markdownCaret:l,markdownPlugins:p,message:d,onAction:S,onClientToolDecision:u,onCopy:w,onFeedback:O,onFileDownload:T,onRetry:E,onSelect:V,toolDecisions:N,turnAnchor:I}){let k=jo(d,r,{isStreaming:i}),$=Yc(d.parts),Z=d.parts.some(ss);ye(()=>{Z&&lc()},[Z]);let y=m?d.parts.findLastIndex(x=>x.type==="text"):-1,h=d.role==="user"?d.parts.flatMap((x,L)=>x.type==="file"?[P(fs,{file:x},`${d.id}-attachment-${L}`)]:[]):[],{items:f,latestContentPartIndex:A}=d.parts.reduce((x,L,X)=>{let j=ie=>({items:[...x.items,ie],latestContentPartIndex:X});if(L.type==="text")return L.text.trim()?j(d.role==="assistant"?P(Or,{animated:c,caret:l,isStreaming:X===y,plugins:p,children:L.text},`${d.id}-text-${X}`):P("p",{className:"ha-message-text",children:L.text},`${d.id}-text-${X}`)):x;if(L.type==="file")return d.role==="user"?x:j(P(fs,{file:L,onDownload:T},`${d.id}-file-${X}`));if(L.type==="data-component")return j(P(dc,{component:L.data,exportFormats:o,onAction:S,onSelect:V},L.data.id));if(ss(L))return x;let U=Ds(L),W=U?r.get(U):void 0;if(U&&W){let ie=L;return ie.state!=="approval-requested"||N[ie.toolCallId]?x:j(P(Eg,{decision:N[ie.toolCallId],part:ie,tool:W,onDecision:pe=>u(U,ie,pe)},ie.toolCallId))}return x},{items:[],latestContentPartIndex:-1}),b=ti(k,{hasContent:f.length>0,latestContentPartIndex:A}),C=Xc($,{hasContent:f.length>0,isStreaming:i});if(f.length===0&&h.length===0&&k.length===0&&C.length===0)return null;if(d.role==="user")return Ee("div",{className:"ha-message","data-role":"user","data-stream-anchor":I==="active"?!0:void 0,"data-turn-anchor":I?!0:void 0,children:[h.length>0?P("div",{"aria-label":"Message attachments",className:"ha-message-attachments",children:h}):null,f.length>0?P("div",{className:"ha-bubble",children:P("div",{className:"ha-message-content",children:f})}):null]});let M=d.parts.some(x=>x.type==="text"&&x.text.trim().length>0);return P("div",{className:"ha-message","data-role":"assistant","data-stream-anchor":i?!0:void 0,children:Ee("div",{className:"ha-message-body",children:[k.length>0?P(pi,{completedAt:t?.completedAt,hasResponseStarted:b,isStreaming:i,items:k,markdownAnimation:c,markdownPlugins:p,startedAt:t?.startedAt}):null,f.length>0?P("div",{className:"ha-message-content",children:f}):null,P(Wc,{sources:C}),!i&&f.length>0&&e.length>0?P(pc,{actions:e,feedback:s,onCopy:M?()=>w(d):void 0,onFeedback:(x,L)=>O(d.id,x,L),onRetry:n?E:void 0}):null]})})}function Eg({decision:e,onDecision:t,part:n,tool:r}){if(n.state!=="approval-requested"||e)return null;let o=r.icon;return P(Ka,{"data-tool-status":"approval-requested",icon:o?P(o,{color:r.iconColor,size:16}):void 0,input:n.input,title:r.displayName??r.name,onApprove:()=>t(!0),onDeny:()=>t(!1)})}function Pg({conversationId:e,onRuntimeRevisionStale:t,onTurnAdmitted:n,options:r,runtime:o,tokenManager:s}){let i=Ce(()=>Li(o),[o]),m=r.apiBaseUrl,c=Ce(()=>Hi(o,()=>wi({apiBaseUrl:m},s,e,o.runtimeRevision)),[m,e,o,s]),[l,p]=J(0),[d,S]=J(0),[u,w]=J(null),[O,T]=J(!0),[E,V]=J(!1),N=le(null),I=le(!1),k=Ag(),$=z(()=>{let C=new Error("The assistant connection could not be restored");N.current=C,I.current=!1,w(C),T(!1),V(!1)},[]),Z=z(async()=>{try{return{ticket:(await c.next()).ticket}}catch(C){return C instanceof bn?(t(e),new Promise(()=>{})):($(),{ticket:""})}},[e,$,t,c]),y=z(()=>{N.current=null,w(null),p(C=>C+1),V(!1),I.current&&(I.current=!1,Ne(r,s,e,"reconnected"))},[e,r,s]),h=z(C=>{if(!N.current){if(vg(C)){$();return}I.current=!0,T(!0),V(!0)}},[$]),f=z(C=>{let M=Ui(C),x=typeof M?.type=="string"?M.type:null;x===Ua&&M?.protocolVersion===6&&typeof M.turnId=="string"&&n(M.turnId),(x==="cf_agent_chat_messages"||x==="cf_agent_stream_resume_none"||x==="cf_agent_stream_resuming"||x==="cf_agent_stream_pending"||x==="cf_agent_use_chat_response")&&(N.current=null,w(null),T(!1))},[n]),A=bg({agent:"HeroUIConversationAgent",basePath:i.basePath,cacheTtl:3600*1e3,enabled:N.current===null,host:i.host,name:e,...i.path?{path:i.path}:{},onClose:h,onConnectionError:$,onIdentityChange:()=>{},onMessage:f,onOpen:y,protocol:i.protocol,query:Z,queryDeps:[e,o.runtimeRevision,k,d]});ye(()=>{if(!(u||!O&&!E))return yl($)},[l,u,$,O,E]);let b=z(()=>{N.current=null,I.current=!0,w(null),T(!0),V(!0),S(C=>C+1)},[]);return ye(()=>{if(u)return;let C=!1,M=null,x,L=j=>{C||(x=window.setTimeout(()=>void X(),j))},X=async()=>{let j;try{j=await c.refresh()}catch(U){if(U instanceof bn){t(e);return}if(U instanceof zn&&!U.retryable){$();return}if(M??=Date.now(),Date.now()-M>=12e4){$();return}L(15e3);return}try{await A.call("renewConnection",[j.ticket],{timeout:15e3}),M=null,L(27e4)}catch{A.reconnect()}};return L(27e4),()=>{C=!0,x!==void 0&&window.clearTimeout(x)}},[A,l,u,e,$,t,c]),{agent:A,connectionEpoch:l,connectionError:u,isHydrating:O,isReconnecting:E,retryConnection:b}}async function Nl(e,t){let n=await e.context?.page?.()??{},r=t?{...n,componentSelection:t}:n,o;try{o=JSON.stringify(r)}catch{throw new Error("HeroUI Agent page context must be JSON serializable")}if(new TextEncoder().encode(o).byteLength>16*1024)throw new Error("HeroUI Agent page context exceeds 16KB");return JSON.parse(o)}export{Tg as default};
|