actionagent 1.5.0 → 1.5.2

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.
@@ -74,7 +74,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
74
74
  `)}function e$(e){if(!e)return;let t=gs(e);C1(t),window.dispatchEvent(new CustomEvent("dashboard:navigate",{detail:{path:Je(t)}}))}var Pse=e=>{let{results:t,fix_items:r,...n}=e;return n},Dse=e=>{if(!e)return null;let t=[li(e.cost),`${vr((e.input_tokens||0)+(e.output_tokens||0))} tokens`];return e.model_time_ms!=null&&t.push(`model time ${Gr(e.model_time_ms)}`),e.runtime_ms!=null&&t.push(`finished in ${Gr(e.runtime_ms)}`),t.join(" \xB7 ")},t$={padding:"6px 10px",borderRadius:8,fontSize:12,fontFamily:Ce,background:"var(--color-card)",border:"1px solid var(--color-border-strong)",color:"var(--color-text-primary)"};function KE({evaluation:e,onChanged:t,onDelete:r,deleting:n=!1}){let a=e.id,i=e.agent?.name||"Agent",[o,l]=(0,Me.useState)(!1),[s,u]=(0,Me.useState)(null),[c,d]=(0,Me.useState)([]),[f,p]=(0,Me.useState)(e.scenario_groups||[]),[m,y]=(0,Me.useState)(e.latest_run?[e.latest_run]:[]),[h,v]=(0,Me.useState)(null),[g,b]=(0,Me.useState)(e.latest_run?.id??null),[x,S]=(0,Me.useState)({}),[w,_]=(0,Me.useState)((e.compare_models||[]).join(", ")),[k,A]=(0,Me.useState)(null),[P,K]=(0,Me.useState)(!1),[z,Q]=(0,Me.useState)(!1),[M,F]=(0,Me.useState)(""),[N,O]=(0,Me.useState)(null),[I,D]=(0,Me.useState)(null),[T,j]=(0,Me.useState)(!1),[R,U]=(0,Me.useState)(null),[q,ee]=(0,Me.useState)(0),fe=(0,Me.useCallback)(async()=>{let ye=await fetch(`/api/evaluations/${a}/scenarios`);if(!ye.ok)return;let lt=await ye.json();d(lt.scenarios||[]),p(lt.groups||[])},[a]),pe=(0,Me.useCallback)(async()=>{try{let ye=await fetch(`/api/evaluations/${a}`);if(!ye.ok)return u(`Could not load this suite (HTTP ${ye.status})`),null;let Xt=(await ye.json()).evaluation||{};return d(Xt.scenarios||[]),p(Xt.scenario_groups||[]),y(Xt.runs||[]),v(Number.isFinite(Xt.run_count)?Xt.run_count:null),u(null),Xt}catch(ye){return u(`Could not load this suite: ${ye.message}`),null}finally{l(!0)}},[a]),Pe=(0,Me.useCallback)(async ye=>{if(!ye)return null;let lt=await fetch(`/api/evaluations/${a}/runs/${ye}`);if(!lt.ok)return null;let dr=(await lt.json()).run;return dr?(S(vn=>({...vn,[dr.id]:dr})),y(vn=>vn.map(As=>As.id===dr.id?{...As,...Pse(dr)}:As)),dr):null},[a]);(0,Me.useEffect)(()=>{let ye=!1;return(async()=>{let lt=await pe();if(ye)return;let Xt=lt?.runs?.[0]?.id??null;b(dr=>dr&&lt?.runs?.some(vn=>vn.id===dr)?dr:Xt),Xt&&Pe(Xt)})(),()=>{ye=!0}},[pe,Pe]);let oe=e.latest_run?.id??null;(0,Me.useEffect)(()=>{!oe||m.some(ye=>ye.id===oe)||pe()},[oe,m,pe]);let Te=x[g]||m.find(ye=>ye.id===g)||null,V=m[0]||null,J=xs(Te)?Te.id:xs(V)?V.id:null;(0,Me.useEffect)(()=>{if(!J)return;let ye=!1,lt=setTimeout(async()=>{let Xt=null;try{Xt=await Pe(J)}catch{Xt=null}if(!ye){if(Xt&&!xs(Xt)){await pe(),t?.();return}ee(dr=>dr+1)}},3e3);return()=>{ye=!0,clearTimeout(lt)}},[J,q,Pe,pe,t]);let E=w.split(",").map(ye=>ye.trim()).filter(Boolean),L=async ye=>{K(!0),A(null);try{let lt=await fetch(`/api/evaluations/${a}/run`,{method:"POST",headers:{"Content-Type":"application/json","X-CSRF-Token":VE()},body:JSON.stringify({...ye,models:E})}),Xt=await lt.json().catch(()=>({}));if(!lt.ok)throw new Error((Xt.errors||[Xt.error]).filter(Boolean).join(", ")||"Run failed to start");let dr=Xt.run;y(vn=>[dr,...vn.filter(As=>As.id!==dr.id)]),v(vn=>vn==null?null:vn+1),S(vn=>({...vn,[dr.id]:{...dr,results:[]}})),b(dr.id),U(null),t?.()}catch(lt){A(lt.message)}finally{K(!1)}},X=ye=>{b(ye),U(null),x[ye]||Pe(ye)},B=async ye=>{ye.id&&(await fetch(`/api/evaluations/${a}/scenarios/${ye.id}`,{method:"PATCH",headers:{"Content-Type":"application/json","X-CSRF-Token":VE()},body:JSON.stringify({scenario:{enabled:ye.enabled===!1}})}),await fe())},Ae=async()=>{O(null);let ye=await fetch(`/api/evaluations/${a}/scenarios`,{method:"PUT",headers:{"Content-Type":"application/json","X-CSRF-Token":VE()},body:JSON.stringify({scenarios_text:M})}),lt=await ye.json().catch(()=>({}));if(!ye.ok){O((lt.errors||[lt.error]).filter(Boolean).join(", ")||"Could not save scenarios");return}d(lt.scenarios||[]),p(lt.groups||[]),Q(!1),t?.()},C=Te,Y=(0,Me.useMemo)(()=>(C?.results||[]).filter(ye=>ye&&ye.scenario_key),[C]),ve=(0,Me.useMemo)(()=>P1(C,Y,e),[C,Y,e]),ze=(0,Me.useMemo)(()=>Y.reduce((ye,lt)=>((ye[lt.scenario_key]||={})[Yv(C,lt)]=lt,ye),{}),[Y,C]),tt=(0,Me.useMemo)(()=>new Set(WE(C,c)),[C,c]),Lt=xs(C),ct=qv(C,ve,c),Nn=HE(C,Y,ve,c),Ln=(0,Me.useCallback)(ye=>tt.has(ye.key)||!!ze[ye.key],[tt,ze]),na=(0,Me.useMemo)(()=>U7(c,ze),[c,ze]),_i=ye=>ve.some(lt=>{let Xt=ze[ye.key]?.[lt];return Zu(Xt)&&!hs(Xt)}),Ru=na.filter(ye=>!I||(ye.group||"")===I).filter(ye=>!T||_i(ye)),cr=m.findIndex(ye=>ye.id===C?.id),Bn=I1(m,h),Ri=cr>=0?Bn-cr:null,ec=new Set(na.filter(Ln).map(ye=>ye.group).filter(Boolean)).size,X1=Y.filter(Zu).length,Vf=ct*Math.max(ve.length,1),Z1=new Set(Y.filter(ye=>Zu(ye)&&!hs(ye)).map(ye=>ye.scenario_key)).size,tc=C?.scores?._verdict||null,eo=Object.prototype.hasOwnProperty.call(C?.scores||{},"_judge_label")?C.scores._judge_label||"rules":tc?.judge&&tc.judge!=="pass rate"?tc.judge:e.judge_model||"rules",rc=(0,Me.useMemo)(()=>C?Y7(C,Y):[],[C,Y]),Q1=(0,Me.useCallback)(ye=>{let lt=Array.isArray(ye)?ye[0]:ye;lt&&(D(null),j(!1),U(lt),requestAnimationFrame(()=>{document.querySelector(`[data-scenario-key="${CSS.escape(lt)}"]`)?.scrollIntoView({behavior:"smooth",block:"center"})}))},[]),og=Object.keys(C?.scores||{}).filter(ye=>!ye.startsWith("_")),J1=(og.length?og:(e.criteria||[]).map(ye=>ye.key)).map(ye=>String(ye).replace(/_/g," ")).join(" \xB7 ")||"\u2014",nc=o?c.length:e.scenario_count??0,Kf=o?c.filter(ye=>ye.enabled!==!1&&(!I||(ye.group||"")===I)).length:nc,lg=`Run ${Gt(Kf,"scenario")}${E.length?` \xD7 ${Gt(E.length,"model")}`:""}`,R1=C?[cr>0?`Viewing run #${Ri} (latest is #${Bn})`:`Run #${Ri??"?"} \xB7 ${Bf(C.completed_at||C.created_at)}`,i,`${Gt(ct,"scenario")}${ec?` in ${Gt(ec,"group")}`:""} \xD7 ${Gt(ve.length,"model")}`,C.status==="failed"?"failed":`${Nn.passed}/${Nn.total} passed`].join(" \xB7 "):`${i} \xB7 ${Gt(nc,"scenario")}${f.length?` in ${Gt(f.length,"group")}`:""} \xB7 ${s?"not loaded":o?"no runs yet":"loading\u2026"}`,qf=C&&C.status==="complete"?`/evaluations/${a}/runs/${C.id}/report`:null,ew=[...new Set([...f,...na.map(ye=>ye.group).filter(Boolean)])],tw=[{label:`All ${na.length||nc}`,value:null}].concat(ew.map(ye=>({label:o?`${ye} ${na.filter(lt=>lt.group===ye).length}`:ye,value:ye}))),ac=na.length===0,rw=T?"[+] nothing failed in this group":"[ ] no scenarios";return Me.default.createElement("div",{style:{padding:16,display:"flex",flexDirection:"column",gap:16},"data-testid":"scenario-suite-panel"},Me.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"}},Me.default.createElement("span",{style:{fontSize:13,color:"var(--color-text-secondary)"}},R1),Lt&&Me.default.createElement("span",{style:{fontFamily:Ce,fontSize:11,color:"var(--color-text-muted)"},"data-testid":"suite-run-progress"},`running \xB7 ${X1} of ${Vf} results in`),Me.default.createElement("span",{style:{marginLeft:"auto",display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"}},Me.default.createElement(on,{size:"sm",onClick:()=>{F(Mse(c)),O(null),Q(!z)}},z?"Cancel":"Edit scenarios"),Me.default.createElement("input",{type:"text",value:w,onChange:ye=>_(ye.target.value),placeholder:"models, e.g. gpt-5-mini, ollama/qwen3:8b",style:{...t$,width:250},title:"Comma-separated. Prefix with a provider (ollama/qwen3:8b) when the name alone is ambiguous; blank runs the agent's own model."}),Me.default.createElement(on,{variant:"primary",size:"sm",disabled:P||!o||Kf===0,onClick:()=>L(I?{group:I}:{}),testId:"suite-run-button"},P?"Starting\u2026":lg))),(s||k||C?.status==="failed")&&Me.default.createElement("div",{style:{fontSize:13,color:"var(--color-error-text)",background:"var(--color-error-soft)",borderRadius:8,padding:"8px 12px"}},s||k||`Run failed: ${C.error_message||"unknown error"}`),z&&Me.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:8}},Me.default.createElement("textarea",{value:M,onChange:ye=>F(ye.target.value),rows:Math.min(Math.max(c.length+4,6),24),style:{...t$,width:"100%",boxSizing:"border-box",lineHeight:"18px"}}),Me.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:12,fontSize:12,color:"var(--color-text-muted)",flexWrap:"wrap"}},Me.default.createElement("span",{style:{flex:1,minWidth:240}},"One message per line. ",Me.default.createElement("code",{style:{fontFamily:Ce}},"# Heading")," starts a group; ",Me.default.createElement("code",{style:{fontFamily:Ce}},"| tools: a, b"),", ",Me.default.createElement("code",{style:{fontFamily:Ce}},"| contains: x"),", ",Me.default.createElement("code",{style:{fontFamily:Ce}},"| not_contains: y")," set expectations. Keep a scenario's ",Me.default.createElement("code",{style:{fontFamily:Ce}},"key")," to keep its history."),Me.default.createElement(on,{variant:"primary",size:"sm",onClick:Ae},"Save scenarios")),N&&Me.default.createElement("div",{style:{fontSize:13,color:"var(--color-error-text)"}},N)),Me.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"minmax(280px, 2fr) minmax(0, 3fr)",gap:16,alignItems:"start"}},Me.default.createElement(X7,{runs:m,runCount:h,selectedId:C?.id??null,onSelect:X,agentName:i,selectedResults:Y,scenarios:c}),Me.default.createElement(Z7,{run:C,columns:C?ve:[],results:Y,scenarioCount:ct,judgedBy:eo,verdict:tc})),C&&C.status!=="failed"&&Me.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:10}},Me.default.createElement("div",{style:{display:"flex",alignItems:"baseline",gap:10}},Me.default.createElement(yt,null,"What to fix"),Me.default.createElement("span",{style:{fontFamily:Ce,fontSize:11,color:"var(--color-text-muted)"}},`${Gt(rc.length,"item")} \xB7 ${Gt(Math.max(Nn.total-Nn.passed,0),"fault")} across ${Gt(Z1,"scenario")}`)),rc.length>0?Me.default.createElement(Q7,{items:rc,columns:ve,agentName:i,onNavigate:e$,onOpenScenario:Q1}):Me.default.createElement(rl,{style:{border:"1px solid var(--color-border-light)",borderRadius:10,padding:"14px 12px"}},Lt?"[ ] scoring\u2026":"[+] nothing to fix")),Me.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:10}},Me.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"}},Me.default.createElement(yt,{style:{marginRight:4}},"Scenarios"),tw.map(ye=>Me.default.createElement(LE,{key:ye.label,selected:I===ye.value,onClick:()=>D(ye.value)},ye.label)),Me.default.createElement(LE,{square:!0,mono:!0,selected:T,onClick:()=>j(!T),style:{marginLeft:"auto",background:"transparent"},title:"Hide scenarios that passed on every model"},T?"[x] failed only":"[ ] failed only")),ac&&s?Me.default.createElement(rl,{style:{border:"1px solid var(--color-border-light)",borderRadius:10}},"[!] suite not loaded"):ac&&!o?Me.default.createElement(rl,{style:{border:"1px solid var(--color-border-light)",borderRadius:10}},"loading\u2026"):ac?Me.default.createElement(rl,{style:{border:"1px solid var(--color-border-light)",borderRadius:10}},"No scenarios yet \u2014 paste some with \u201CEdit scenarios\u201D."):Me.default.createElement(J7,{rows:Ru,columns:C?ve:[],run:C,resultsByKey:ze,runKeys:tt,running:Lt,openKey:R,onToggleRow:ye=>U(R===ye?null:ye),emptyLabel:rw,renderDetail:ye=>Me.default.createElement(R7,{scenario:ye,run:C,columns:C?ve:[],resultsByKey:ze,running:Lt,inRun:Ln(ye),canMutate:!ye.orphan,onRerun:lt=>L({keys:[lt.key]}),onToggleEnabled:B})})),Me.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:16,flexWrap:"wrap",paddingTop:12,borderTop:"1px solid var(--color-border-light)",fontFamily:Ce,fontSize:11,color:"var(--color-text-muted)"}},Me.default.createElement("span",{style:{whiteSpace:"nowrap"}},`judge ${eo}`),Me.default.createElement("span",{style:{minWidth:0,textWrap:"pretty"}},`criteria ${J1}`),C?.usage&&Me.default.createElement("span",{style:{whiteSpace:"nowrap"},title:"Estimated cost, tokens and model time of this run"},Dse(C.usage)),qf&&Me.default.createElement(T1,{href:Je(qf),onClick:()=>e$(qf),title:"The run rendered as a report page"},"run report"),r&&Me.default.createElement("button",{type:"button",onClick:r,disabled:n,title:"Delete this suite and its runs",style:{marginLeft:"auto",background:"transparent",border:"none",padding:0,cursor:n?"not-allowed":"pointer",fontFamily:Ce,fontSize:11,color:"var(--color-error)",opacity:n?.5:1}},n?"Deleting\u2026":"Delete suite")))}var qE=[{type:"response_present",key:"response_present",label:"Response present",config:{}},{type:"min_length",key:"response_length",label:"Response length \u2265 40 chars",config:{chars:40}},{type:"max_latency_ms",key:"latency",label:"Latency \u2264 5s",config:{ms:5e3}},{type:"token_budget",key:"token_budget",label:"Output \u2264 1000 tokens",config:{output_tokens:1e3}}],YE=[{type:"trace_error_rate",key:"trace_error_rate",label:"Trace error rate \u2264 5% (telemetry, 7d)",config:{max_error_rate:5,window_hours:168}},{type:"trace_latency",key:"trace_latency",label:"Avg trace latency \u2264 5s (telemetry, 7d)",config:{max_avg_ms:5e3,window_hours:168}}],GE=()=>document.querySelector('meta[name="csrf-token"]')?.content,Ise=e=>{if(!e)return null;let t=(e.input_tokens||0)+(e.output_tokens||0),r=e.runtime_ms==null?null:Gr(e.runtime_ms);return`${li(e.cost)} \xB7 ${vr(t)} tok${r?` \xB7 ${r}`:""}`},a$=e=>e>=.85?"success":e>=.7?"warning":"error",r$=()=>{let e=gs().match(/^\/evaluations\/(\d+)\/runs\/(\d+)\/report/);if(e)return{evaluationId:e[1],runId:e[2]};let t=_1(window.location.search);return t?.runId?t:null},nl={padding:"8px 12px",borderRadius:8,fontSize:13,fontFamily:"inherit",boxSizing:"border-box",background:"var(--color-card)",border:"1px solid var(--color-border-strong)",color:"var(--color-text-primary)"},Qi=(e=11,t="var(--color-text-muted)")=>({fontFamily:Ce,fontSize:e,color:t});function n$({label:e,score:t,indent:r=!1,mono:n=!1}){let a=t.skipped?null:a$(t.score);return te.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:16,paddingLeft:r?16:0}},te.default.createElement("div",{style:{width:160,flexShrink:0,fontSize:n?11:13,fontFamily:n?Ce:"inherit",color:"var(--color-text-secondary)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},title:e},n?e:e.replace(/_/g," "),t.source==="telemetry"&&te.default.createElement("span",{"data-testid":"score-source-telemetry",style:{...Qi(10),marginLeft:6,textTransform:"uppercase",letterSpacing:"0.05em"},title:`Aggregate over ${t.traces} traces in the last ${t.window_hours}h`},"telemetry")),t.skipped?te.default.createElement("div",{style:{flex:1,fontSize:12,fontStyle:"italic",color:"var(--color-text-muted)"},title:t.reason},"skipped \u2014 ",t.reason):te.default.createElement(te.default.Fragment,null,te.default.createElement("div",{style:{flex:1,height:6,borderRadius:999,background:"var(--color-muted)",overflow:"hidden"}},te.default.createElement("div",{style:{height:"100%",width:`${Math.round(t.score*100)}%`,borderRadius:999,background:tl[a].strong}})),te.default.createElement("div",{style:{width:48,textAlign:"right",fontFamily:Ce,fontSize:12,fontWeight:600,color:tl[a].strong},title:`min ${t.min} \xB7 max ${t.max} \xB7 ${t.passed}/${t.total} passed`},Xu(t.score))))}function Gv({embedded:e=!1,agentId:t=null}){let{darkMode:r}=At(),[n,a]=(0,te.useState)(()=>e?null:r$()),i=(0,te.useRef)(null),[o,l]=(0,te.useState)(0),[s,u]=(0,te.useState)(null);(0,te.useEffect)(()=>{let C=i.current?.contentDocument?.body;if(!C)return;let Y=()=>u(C.scrollHeight);if(Y(),typeof ResizeObserver>"u")return window.addEventListener("resize",Y),()=>window.removeEventListener("resize",Y);let ve=new ResizeObserver(Y);return ve.observe(C),()=>ve.disconnect()},[o,n]),(0,te.useEffect)(()=>u(null),[n]),(0,te.useEffect)(()=>{if(e)return;let C=()=>a(r$());return window.addEventListener("popstate",C),window.addEventListener("dashboard:navigate",C),()=>{window.removeEventListener("popstate",C),window.removeEventListener("dashboard:navigate",C)}},[e]);let[c,d]=(0,te.useState)([]),[f,p]=(0,te.useState)([]),[m,y]=(0,te.useState)(!0),[h,v]=(0,te.useState)(null),[g,b]=(0,te.useState)(null),[x,S]=(0,te.useState)(()=>e?null:_1(window.location.search)?.evaluationId);(0,te.useEffect)(()=>{if(e)return;let C=()=>{let Y=_1(window.location.search)?.evaluationId;S(Y),Y&&b(new Set([Number(Y)]))};return window.addEventListener("popstate",C),window.addEventListener("dashboard:navigate",C),()=>{window.removeEventListener("popstate",C),window.removeEventListener("dashboard:navigate",C)}},[e]);let[w,_]=(0,te.useState)(!1),[k,A]=(0,te.useState)(null),[P,K]=(0,te.useState)(null),[z,Q]=(0,te.useState)({agent_id:t?String(t):"",name:"",sample_size:20,criteria:qE.map(C=>C.key),containsPattern:"",llmJudgePrompt:"",judgeKind:"manual",judgeModel:"",compareModels:"",scenariosText:""}),[M,F]=(0,te.useState)(null),[N,O]=(0,te.useState)(!1),I=(0,te.useCallback)(async()=>{try{let C=await fetch(`/api/evaluations${t?`?agent_id=${encodeURIComponent(t)}`:""}`);if(!C.ok)throw new Error(`Request failed (${C.status})`);let ve=(await C.json()).evaluations||[],ze=null;try{ve=await F7(ve,x,fetch)}catch(tt){ze=tt.message}d(ve),b(tt=>{if(tt)return tt;let Lt=x?ve.find(ct=>String(ct.id)===x):ve.find(ct=>ct.scenario_suite)||ve[0];return new Set(Lt?[Lt.id]:[])}),v(ze)}catch(C){v(C.message)}finally{y(!1)}},[t,x]);(0,te.useEffect)(()=>{I(),fetch("/api/agents").then(C=>C.ok?C.json():{agents:[]}).then(C=>p(C.agents||[])).catch(()=>p([]))},[I]);let D=C=>!!g?.has(C),T=C=>b(Y=>{let ve=new Set(Y||[]);return ve.has(C)?ve.delete(C):ve.add(C),ve}),j=()=>{let C=[...qE,...YE].filter(Y=>z.criteria.includes(Y.key)).map(({key:Y,type:ve,config:ze})=>({key:Y,type:ve,config:ze}));return z.containsPattern.trim()&&C.push({key:"contains",type:"contains",config:{pattern:z.containsPattern.trim()}}),z.llmJudgePrompt.trim()&&C.push({key:"quality",type:"llm_judge",config:{prompt:z.llmJudgePrompt.trim()}}),C},R=async C=>{C.preventDefault(),O(!0),F(null);try{let Y=await fetch("/api/evaluations",{method:"POST",headers:{"Content-Type":"application/json","X-CSRF-Token":GE()},body:JSON.stringify({evaluation:{agent_id:z.agent_id,name:z.name,sample_size:z.sample_size,judge_kind:z.judgeKind==="judge_defined"?"judge_defined":z.llmJudgePrompt.trim()?"llm":"rules",judge_model:z.judgeModel.trim()||void 0,compare_models:z.compareModels.split(",").map(ze=>ze.trim()).filter(Boolean),criteria:z.judgeKind==="judge_defined"?[]:j(),scenarios_text:z.scenariosText.trim()||void 0}})}),ve=await Y.json().catch(()=>({}));if(!Y.ok)throw new Error((ve.errors||[ve.error]).filter(Boolean).join(", ")||`Failed to create evaluation (HTTP ${Y.status})`);_(!1),Q({...z,name:"",scenariosText:""}),await I(),ve.evaluation?.id!=null&&b(ze=>new Set([...ze||[],ve.evaluation.id]))}catch(Y){F(Y.message)}finally{O(!1)}},U=async C=>{A(C),v(null);try{let Y=await fetch(`/api/evaluations/${C}/run`,{method:"POST",headers:{"X-CSRF-Token":GE()}});Y.ok||v(`Run failed (HTTP ${Y.status})`),await I()}finally{A(null)}},q=async C=>{if(window.confirm(`Delete "${C.name}"? Its runs are deleted with it.`)){K(C.id),v(null);try{let Y=await fetch(`/api/evaluations/${C.id}`,{method:"DELETE",headers:{"X-CSRF-Token":GE()}});Y.ok||Y.status===404?(d(ve=>ve.filter(ze=>ze.id!==C.id)),b(ve=>{let ze=new Set(ve||[]);return ze.delete(C.id),ze})):v(`Delete failed (HTTP ${Y.status})`)}finally{K(null)}}};if(m)return te.default.createElement("div",{className:"flex items-center justify-center h-64"},te.default.createElement("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2",style:{borderBottomColor:"var(--color-accent-ui)"}}));let ee=t?c.filter(C=>String(C.agent?.id)===String(t)):c,fe=ee.filter(C=>C.scenario_suite),pe=ee.filter(C=>!C.scenario_suite),Pe=fe.map(C=>C.latest_run).filter(C=>C&&C.status==="complete"),oe=Pe.reduce((C,Y)=>C+(Y.samples_evaluated||0),0),Te=Pe.reduce((C,Y)=>C+(Y.samples_passed||0),0),V=Pe.reduce((C,Y)=>C+(Y.scores?._recommendations?.length||0),0),J=oe?Te/oe:null,E=[...new Set(fe.map(C=>C.agent?.name).filter(Boolean))],L=fe.reduce((C,Y)=>Math.max(C,Y.latest_run?.models?.length||(Y.compare_models||[]).length||0),0),X=[];E.length===1?X.push(`@${E[0]} \xB7 ${L>1?`${L} models compared`:"1 model"}`):E.length>1&&X.push(Gt(E.length,"agent")),pe.length&&X.push(Gt(pe.length,"sampling evaluation"));let B=X.join(" \xB7 ")||"no suites yet",Ae=C=>C&&typeof C=="object"&&!("score"in C)&&!("skipped"in C);if(n){let C=Je(`/api/evaluations/${n.evaluationId}/runs/${n.runId}/report`),Y=`${C}?theme=${r?"dark":"light"}`;return te.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:16}},te.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,flexWrap:"wrap"}},te.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:12}},te.default.createElement(on,{size:"sm",onClick:()=>{C1("/evaluations"),a(null)}},te.default.createElement("span",{style:{fontFamily:Ce}},"<-")," Evaluations"),te.default.createElement("h1",{style:{margin:0,fontSize:24,fontWeight:700,letterSpacing:"-0.01em",color:"var(--color-text-primary)"}},"Run report"),te.default.createElement("span",{style:Qi(11)},`evaluation ${n.evaluationId} \xB7 run ${n.runId}`)),te.default.createElement("a",{href:C,target:"_blank",rel:"noopener noreferrer",title:"The report is one self-contained page \u2014 save it to export",style:{padding:"6px 12px",borderRadius:8,fontSize:13,fontWeight:500,color:"var(--color-text-cell)",border:"1px solid var(--color-border-strong)",textDecoration:"none"}},"Open standalone ",te.default.createElement("span",{style:{fontFamily:Ce}},"->"))),te.default.createElement("iframe",{ref:i,src:Y,title:"Evaluation run report",onLoad:()=>l(ve=>ve+1),scrolling:"no",style:{width:"100%",borderRadius:12,border:"1px solid var(--color-border)",background:"var(--color-background)",display:"block",height:s?`${s}px`:"calc(100vh - 180px)"}}))}return te.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:20}},te.default.createElement("div",{style:{display:"flex",alignItems:"flex-start",gap:16,flexWrap:"wrap"}},!e&&te.default.createElement("div",{style:{flex:1,minWidth:260}},te.default.createElement("h1",{style:{margin:0,fontSize:24,fontWeight:700,letterSpacing:"-0.01em",color:"var(--color-text-primary)"}},"Evaluations"),te.default.createElement("p",{style:{margin:"4px 0 0",fontSize:14,color:"var(--color-text-secondary)",textWrap:"pretty"}},"Score recorded outputs, or paste a list of user messages to replay through the agent under one or more models")),te.default.createElement("div",{style:{marginLeft:"auto",display:"flex",alignItems:"center",gap:12}},te.default.createElement(on,{variant:"primary",onClick:()=>_(!w),testId:"new-evaluation-button"},w?"Cancel":"New Evaluation"))),h&&te.default.createElement("div",{style:{padding:"10px 12px",borderRadius:8,fontSize:13,background:"var(--color-error-soft)",color:"var(--color-error-text)"}},"Failed to load evaluations: ",h),w&&te.default.createElement(kn,{testId:"new-evaluation-form"},te.default.createElement("form",{onSubmit:R,style:{display:"flex",flexDirection:"column",gap:16}},te.default.createElement("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4"},te.default.createElement("div",null,te.default.createElement(yt,{as:"label",style:{display:"block",marginBottom:6}},"Agent"),te.default.createElement("select",{required:!0,disabled:!!t,value:z.agent_id,onChange:C=>Q({...z,agent_id:C.target.value}),style:{...nl,width:"100%",opacity:t?.7:1}},!t&&te.default.createElement("option",{value:""},"Select agent\u2026"),f.map(C=>te.default.createElement("option",{key:C.id,value:C.id},C.name)))),te.default.createElement("div",null,te.default.createElement(yt,{as:"label",style:{display:"block",marginBottom:6}},"Name"),te.default.createElement("input",{required:!0,type:"text",value:z.name,onChange:C=>Q({...z,name:C.target.value}),placeholder:"Response Quality",style:{...nl,width:"100%"}})),te.default.createElement("div",null,te.default.createElement(yt,{as:"label",style:{display:"block",marginBottom:6}},"Sample size"),te.default.createElement("input",{type:"number",min:"1",max:"100",value:z.sample_size,onChange:C=>Q({...z,sample_size:C.target.value}),style:{...nl,width:"100%",fontFamily:Ce}}))),te.default.createElement("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4"},te.default.createElement("div",null,te.default.createElement(yt,{as:"label",style:{display:"block",marginBottom:6}},"KPI definition"),te.default.createElement("select",{value:z.judgeKind,onChange:C=>Q({...z,judgeKind:C.target.value}),style:{...nl,width:"100%"}},te.default.createElement("option",{value:"manual"},"Manual criteria"),te.default.createElement("option",{value:"judge_defined"},"Judge defines KPIs from agent goals"))),te.default.createElement("div",null,te.default.createElement(yt,{as:"label",style:{display:"block",marginBottom:6}},"Judge model (optional)"),te.default.createElement("input",{type:"text",value:z.judgeModel,onChange:C=>Q({...z,judgeModel:C.target.value}),placeholder:"e.g. claude-opus-5",style:{...nl,width:"100%",fontFamily:Ce,fontSize:12}})),te.default.createElement("div",null,te.default.createElement(yt,{as:"label",style:{display:"block",marginBottom:6}},"Compare models (optional, comma-separated)"),te.default.createElement("input",{type:"text",value:z.compareModels,onChange:C=>Q({...z,compareModels:C.target.value}),placeholder:"e.g. claude-haiku-4-5, qwen3:8b",style:{...nl,width:"100%",fontFamily:Ce,fontSize:12}}))),te.default.createElement("div",null,te.default.createElement(yt,{as:"label",style:{display:"block",marginBottom:6}},"Scenarios (optional) \u2014 paste user messages to replay, one per line"),te.default.createElement("textarea",{value:z.scenariosText,onChange:C=>Q({...z,scenariosText:C.target.value}),rows:z.scenariosText?8:3,placeholder:`# Find records
75
75
  Which catalog items are available? | tools: find_records
76
76
  # Change history
77
- Who updated the description for the sample notebook?`,style:{...nl,width:"100%",fontFamily:Ce,fontSize:12,lineHeight:"18px"}}),te.default.createElement("p",{style:{margin:"6px 0 0",fontSize:12,color:"var(--color-text-muted)",textWrap:"pretty"}},"With scenarios, each run replays every message through the agent \u2014 once per model in \u201CCompare models\u201D \u2014 and reports which tasks it completes, what faults it hits, and how to fix them. ",te.default.createElement("code",{style:{fontFamily:Ce}},"# Heading")," lines group related tasks so they can be run together; ",te.default.createElement("code",{style:{fontFamily:Ce}},"| tools: a, b")," names the tool a task should call.")),z.judgeKind==="judge_defined"&&te.default.createElement("p",{style:{margin:0,fontSize:12,color:"var(--color-text-secondary)"}},"On the first run the judge reads the agent's instructions and recent interactions, defines 3\u20136 KPIs, then scores samples against them. KPIs persist so later runs (and model cohorts) stay comparable."),z.judgeKind!=="judge_defined"&&te.default.createElement(te.default.Fragment,null,te.default.createElement("div",null,te.default.createElement(yt,{style:{display:"block",marginBottom:8}},"Rule-based criteria (sampled generations)"),te.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:12}},qE.map(C=>te.default.createElement("label",{key:C.key,style:{display:"flex",alignItems:"center",gap:8,fontSize:13,color:"var(--color-text-primary)"}},te.default.createElement("input",{type:"checkbox",checked:z.criteria.includes(C.key),onChange:Y=>Q({...z,criteria:Y.target.checked?[...z.criteria,C.key]:z.criteria.filter(ve=>ve!==C.key)})}),C.label)))),te.default.createElement("div",null,te.default.createElement(yt,{style:{display:"block",marginBottom:8}},"Telemetry criteria (trace aggregates)"),te.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:12}},YE.map(C=>te.default.createElement("label",{key:C.key,style:{display:"flex",alignItems:"center",gap:8,fontSize:13,color:"var(--color-text-primary)"}},te.default.createElement("input",{type:"checkbox",checked:z.criteria.includes(C.key),onChange:Y=>Q({...z,criteria:Y.target.checked?[...z.criteria,C.key]:z.criteria.filter(ve=>ve!==C.key)})}),C.label)))),te.default.createElement("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4"},te.default.createElement("div",null,te.default.createElement(yt,{as:"label",style:{display:"block",marginBottom:6}},"Must contain (optional pattern)"),te.default.createElement("input",{type:"text",value:z.containsPattern,onChange:C=>Q({...z,containsPattern:C.target.value}),placeholder:"e.g. password reset",style:{...nl,width:"100%"}})),te.default.createElement("div",null,te.default.createElement(yt,{as:"label",style:{display:"block",marginBottom:6}},"LLM judge criterion (optional, needs provider credentials)"),te.default.createElement("input",{type:"text",value:z.llmJudgePrompt,onChange:C=>Q({...z,llmJudgePrompt:C.target.value}),placeholder:"e.g. Is the answer helpful and accurate?",style:{...nl,width:"100%"}})))),M&&te.default.createElement("div",{style:{fontSize:13,color:"var(--color-error-text)"}},M),te.default.createElement("div",null,te.default.createElement(on,{variant:"primary",type:"submit",disabled:N},N?z.scenariosText.trim()?"Creating & starting run\u2026":"Creating & running\u2026":"Create & Run")))),te.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(190px, 1fr))",gap:16}},te.default.createElement(Hv,{label:"Suites",value:fe.length,sub:B,testId:"stat-suites"}),te.default.createElement(Hv,{label:"Scenario runs",value:oe,sub:"latest run of each suite",testId:"stat-scenario-runs"}),te.default.createElement(Hv,{label:"Pass rate",value:J==null?"\u2014":V7(J),valueColor:J==null?"var(--color-text-muted)":tl[Gu(J)].strong,sub:J==null?"no completed runs yet":`${Te} / ${oe} passed`,testId:"stat-pass-rate"}),te.default.createElement(Hv,{label:"Open faults",value:oe-Te,sub:`${Gt(V,"fix item")} across ${Gt(Pe.length,"suite")}`,testId:"stat-open-faults"})),te.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:16}},ee.map(C=>{let Y=C.latest_run,ve=D(C.id),ze=!!C.scenario_suite,tt=Y?.status==="complete",Lt=Y?.status==="pending"||Y?.status==="running",ct=Y?.models?.length||(C.compare_models||[]).length||1,Nn=Y?.samples_passed||0,Ln=Y?.samples_evaluated||0,na=Ln?Nn/Ln:0,_i=(C.criteria||[]).some(cr=>YE.some(Bn=>Bn.key===cr.key)),Ru=ze?`@${C.agent?.name||"agent"} \xB7 ${Gt(C.scenario_count||0,"scenario")} \xD7 ${Gt(ct,"model")}`:`@${C.agent?.name||"agent"} \xB7 ${Gt(C.sample_size||0,"sample")}${ct>1?` \xD7 ${Gt(ct,"model")}`:""}`;return te.default.createElement(kn,{key:C.id,padding:0,testId:"evaluation-card","data-telemetry":_i?"true":"false","data-kind":ze?"suite":"sampling","data-open":ve?"true":"false",style:{overflow:"hidden"}},te.default.createElement("div",{onClick:()=>T(C.id),className:"hover:bg-[var(--color-hover)]",style:{display:"flex",alignItems:"center",gap:12,rowGap:8,padding:"12px 16px",cursor:"pointer",flexWrap:"wrap"}},te.default.createElement(O1,{kind:"chevron",open:ve}),te.default.createElement("span",{style:{width:22,height:22,borderRadius:6,background:"var(--color-muted)",display:"inline-flex",alignItems:"center",justifyContent:"center",fontFamily:Ce,fontSize:10,fontWeight:700,color:"var(--color-text-secondary)",flexShrink:0},title:ze?"scenario suite":"sampling evaluation"},ze?"=":"~"),te.default.createElement("span",{style:{fontSize:14,fontWeight:600,color:"var(--color-text-primary)"}},C.name),te.default.createElement("span",{style:Qi(11)},Ru),te.default.createElement("span",{style:{marginLeft:"auto",display:"flex",alignItems:"center",gap:14,flexShrink:0}},te.default.createElement("span",{style:Qi(11)},Bf(Y?.completed_at||Y?.created_at||C.created_at)),Y?.status==="failed"&&te.default.createElement("span",{style:Qi(11,"var(--color-error)")},"failed"),Lt&&te.default.createElement("span",{style:Qi(11)},Y.status==="pending"?"queued":"running"),!Y&&te.default.createElement("span",{style:Qi(11)},"no runs"),tt&&ze&&te.default.createElement("span",{style:Qi(11)},Gt(Ln-Nn,"fault")),tt&&ze&&te.default.createElement(jn,{tone:Gu(na),testId:"suite-pass-badge"},`${Nn}/${Ln} passed`),tt&&!ze&&Y.average_score!=null&&te.default.createElement(jn,{tone:a$(Y.average_score),title:"mean score across criteria"},`score ${Xu(Y.average_score)}`),tt&&!ze&&Ln>0&&te.default.createElement(jn,{tone:Gu(na)},`${Nn}/${Ln} passed`))),ve&&te.default.createElement("div",{style:{borderTop:"1px solid var(--color-border-light)"}},ze?te.default.createElement(KE,{evaluation:C,onChanged:I,onDelete:()=>q(C),deleting:P===C.id}):te.default.createElement(te.default.Fragment,null,Y?.status==="failed"?te.default.createElement("div",{style:{padding:16,fontSize:13,color:"var(--color-error-text)"}},Y.error_message):Y?.scores?te.default.createElement("div",{style:{padding:16,display:"flex",flexDirection:"column",gap:12}},Y.scores._verdict&&te.default.createElement("div",{style:{padding:"10px 12px",borderRadius:10,border:"1px solid var(--color-border-light)",display:"flex",flexDirection:"column",gap:6}},te.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"}},te.default.createElement("span",{style:{fontFamily:Ce,fontSize:12,fontWeight:600,color:"var(--color-text-primary)"}},Y.scores._verdict.winner),te.default.createElement(jn,{tone:"info",size:10,style:{padding:"1px 6px"}},"judge's pick"),te.default.createElement("span",{style:{marginLeft:"auto",...Qi(11)}},`judged by ${Y.scores._verdict.judge}`)),te.default.createElement("div",{style:{fontSize:12,lineHeight:"18px",color:"var(--color-text-cell)",textWrap:"pretty"}},te.default.createElement(yt,{size:10,color:"var(--color-text-muted)",style:{marginRight:8}},"Verdict"),Y.scores._verdict.rationale)),Y.scores._missing_models&&te.default.createElement("div",{style:{fontSize:12,fontStyle:"italic",color:"var(--color-text-muted)"}},"No recorded generations for: ",Y.scores._missing_models.join(", ")," \u2014 run the agent under those models first"),Object.entries(Y.scores).filter(([cr])=>!cr.startsWith("_")).map(([cr,Bn])=>Ae(Bn)?te.default.createElement("div",{key:cr,style:{display:"flex",flexDirection:"column",gap:4}},te.default.createElement("div",{style:{fontSize:13,color:"var(--color-text-secondary)"}},cr.replace(/_/g," ")),Object.entries(Bn).map(([Ri,ec])=>te.default.createElement(n$,{key:Ri,label:Ri,score:ec,indent:!0,mono:!0}))):te.default.createElement(n$,{key:cr,label:cr,score:Bn}))):te.default.createElement("div",{style:{padding:16,...Qi(11)}},"[ ] no runs yet"),te.default.createElement("div",{style:{padding:16,background:"var(--color-background)",display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(160px, 1fr))",gap:16,fontSize:13}},te.default.createElement("div",null,te.default.createElement(yt,{size:10,color:"var(--color-text-muted)"},"Judge"),te.default.createElement("div",{style:{marginTop:4,fontFamily:Ce,fontSize:12,color:"var(--color-text-primary)"}},C.judge_kind==="judge_defined"?`judge-defined KPIs${C.judge_model?` (${C.judge_model})`:""}`:C.judge_kind==="llm"?C.judge_model||"llm judge":"rules")),te.default.createElement("div",{style:{gridColumn:"span 2",minWidth:0}},te.default.createElement(yt,{size:10,color:"var(--color-text-muted)"},"Criteria"),te.default.createElement("div",{style:{marginTop:4,fontFamily:Ce,fontSize:12,color:"var(--color-text-primary)",textWrap:"pretty"}},(C.criteria||[]).map(cr=>String(cr.key).replace(/_/g," ")).join(" \xB7 ")||"\u2014")),te.default.createElement("div",null,te.default.createElement(yt,{size:10,color:"var(--color-text-muted)"},"Samples"),te.default.createElement("div",{style:{marginTop:4,fontFamily:Ce,fontSize:12,color:"var(--color-text-primary)"}},tt&&Ln>0?`${Nn} / ${Ln} passed`:"\u2014")),te.default.createElement("div",null,te.default.createElement(yt,{size:10,color:"var(--color-text-muted)"},"Last run"),te.default.createElement("div",{style:{marginTop:4,fontFamily:Ce,fontSize:12,color:"var(--color-text-primary)"},title:"Estimated cost, tokens and wall-clock runtime of the latest run"},Ise(Y?.usage)||"\u2014")),te.default.createElement("div",{style:{display:"flex",alignItems:"flex-end",justifyContent:"flex-end",gap:8}},te.default.createElement(on,{size:"sm",onClick:cr=>{cr.stopPropagation(),U(C.id)},disabled:k===C.id},k===C.id?"Running\u2026":"Run again"),te.default.createElement(on,{variant:"danger",size:"sm",onClick:cr=>{cr.stopPropagation(),q(C)},disabled:P===C.id,title:"Delete this evaluation and its runs"},P===C.id?"Deleting\u2026":"Delete"))))))})),ee.length===0&&!w&&te.default.createElement(kn,{style:{textAlign:"center",padding:"48px 20px"}},te.default.createElement("div",{style:{fontSize:16,fontWeight:600,color:"var(--color-text-primary)"}},"No evaluations yet"),te.default.createElement("p",{style:{margin:"8px 0 0",fontSize:13,color:"var(--color-text-secondary)",textWrap:"pretty"}},"Create an evaluation to score recorded outputs, or paste scenarios to test new tasks across models")))}var ke=re(ne());var jse=e=>new Date(`${e}T00:00:00`),zse=[{id:"overview",label:"Overview"},{id:"traces",label:"Traces"},{id:"interactions",label:"Interactions"}];function XE({agent:e,onBack:t,embedded:r=!1}){let{darkMode:n}=At(),a=$a(n),[i,o]=(0,ke.useState)(null),[l,s]=(0,ke.useState)(!0),{timeWindow:u,days:c}=Gi(),[d,f]=(0,ke.useState)("overview"),p=e.telemetry_agent_class||(()=>{let x=e.agent_class_name||`${(e.name||"").replace(/[^a-zA-Z0-9]+(.)/g,(S,w)=>w.toUpperCase()).replace(/^./,S=>S.toUpperCase()).replace(/[^a-zA-Z0-9]/g,"")}`;return x.endsWith("Agent")?x:`${x}Agent`})();(0,ke.useEffect)(()=>{m()},[e?.id,c]);let m=async()=>{if(e?.id){s(!0);try{let S=await(await fetch(`/api/agents/${e.id}/analytics?days=${c}`)).json();o(S)}catch(x){console.error("Failed to load analytics:",x)}finally{s(!1)}}},y=x=>x?x<1e3?`${x}ms`:`${(x/1e3).toFixed(2)}s`:"-",h=x=>x?x>=1e6?`${(x/1e6).toFixed(1)}M`:x>=1e3?`${(x/1e3).toFixed(1)}K`:x.toString():"0",v=x=>{switch(x){case"complete":return"bg-green-500";case"failed":return"bg-red-500";case"running":return"bg-blue-500";case"pending":return"bg-yellow-500";case"cancelled":return"bg-gray-500";default:return"bg-gray-400"}};if(l&&!i)return ke.default.createElement("div",{className:"flex items-center justify-center h-64"},ke.default.createElement("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-red-500"}));let g=i?.runs_by_day?.length>0?Math.max(...i.runs_by_day.map(x=>x.count)):1,b=r?"overview":d;return ke.default.createElement("div",{className:"space-y-6"},r?ke.default.createElement("div",{className:"flex items-center justify-end gap-2"},u.minutes<1440&&ke.default.createElement("span",{className:"text-xs",style:{color:a.textMuted},title:"This view aggregates by day"},"showing 1 day"),ke.default.createElement(Xi,null)):ke.default.createElement("div",{className:"flex items-center justify-between"},ke.default.createElement("div",{className:"flex items-center space-x-4"},ke.default.createElement("button",{onClick:t,className:"p-2 transition-colors",style:{color:a.textMuted}},ke.default.createElement("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"}))),ke.default.createElement("div",null,ke.default.createElement("h1",{className:"text-2xl font-bold",style:{color:a.textPrimary}},e.name," Analytics"),ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},"Performance metrics and usage data"))),ke.default.createElement("div",{className:"flex items-center gap-2"},u.minutes<1440&&ke.default.createElement("span",{className:"text-xs",style:{color:a.textMuted},title:"This view aggregates by day"},"showing 1 day"),ke.default.createElement(Xi,null))),!r&&ke.default.createElement("div",{className:"flex rounded-lg p-1 w-fit",style:{background:a.mutedBg}},zse.map(x=>ke.default.createElement("button",{key:x.id,onClick:()=>f(x.id),className:`px-4 py-1.5 text-sm rounded-md transition-colors ${d===x.id?"shadow":""}`,style:d===x.id?{background:a.cardBg,color:a.textPrimary}:{color:a.textSecondary}},x.label))),b==="traces"&&ke.default.createElement(Yu,{agentClass:p,embedded:!0}),b==="interactions"&&ke.default.createElement(el,{agentId:e.id,embedded:!0}),b==="overview"&&ke.default.createElement(ke.default.Fragment,null,ke.default.createElement("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-4"},ke.default.createElement(j1,{title:"Total Runs",value:i?.summary?.total_runs||0,icon:ke.default.createElement("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})),color:"rose",colors:a,darkMode:n}),ke.default.createElement(j1,{title:"Success Rate",value:`${i?.summary?.success_rate||0}%`,icon:ke.default.createElement("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"})),color:"green",colors:a,darkMode:n}),ke.default.createElement(j1,{title:"Avg Duration",value:y(i?.summary?.avg_duration_ms),icon:ke.default.createElement("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"})),color:"blue",colors:a,darkMode:n}),ke.default.createElement(j1,{title:"Total Tokens",value:h(i?.summary?.total_tokens),icon:ke.default.createElement("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01"})),color:"purple",colors:a,darkMode:n})),ke.default.createElement("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6"},ke.default.createElement("div",{className:"lg:col-span-2 rounded-xl border p-6",style:{background:a.cardBg,borderColor:a.cardBorder}},ke.default.createElement("h3",{className:"font-semibold mb-4",style:{color:a.textPrimary}},"Runs Over Time"),i?.runs_by_day?.length>0?ke.default.createElement("div",{className:"h-48"},ke.default.createElement("div",{className:"flex items-end justify-between h-full space-x-1"},i.runs_by_day.map((x,S)=>ke.default.createElement("div",{key:x.date,className:"flex-1 flex flex-col items-center group"},ke.default.createElement("div",{className:"relative w-full"},ke.default.createElement("div",{className:"w-full bg-red-500 rounded-t transition-all hover:bg-red-600",style:{height:`${x.count/g*150}px`,minHeight:x.count>0?"4px":"0"}}),ke.default.createElement("div",{className:"absolute -top-8 left-1/2 transform -translate-x-1/2 bg-gray-800 text-white text-xs px-2 py-1 rounded opacity-0 group-hover:opacity-100 transition-opacity whitespace-nowrap"},x.count," runs")),(S===0||S===i.runs_by_day.length-1||i.runs_by_day.length<=7)&&ke.default.createElement("span",{className:"text-xs mt-2 transform -rotate-45 origin-left",style:{color:a.textMuted}},jse(x.date).toLocaleDateString("en-US",{month:"short",day:"numeric"})))))):ke.default.createElement("div",{className:"h-48 flex items-center justify-center",style:{color:a.textMuted}},"No data for this period")),ke.default.createElement("div",{className:"rounded-xl border p-6",style:{background:a.cardBg,borderColor:a.cardBorder}},ke.default.createElement("h3",{className:"font-semibold mb-4",style:{color:a.textPrimary}},"Status Breakdown"),Object.keys(i?.status_breakdown||{}).length>0?ke.default.createElement("div",{className:"space-y-3"},Object.entries(i.status_breakdown).map(([x,S])=>{let w=i?.summary?.total_runs||1,_=(S/w*100).toFixed(1);return ke.default.createElement("div",{key:x},ke.default.createElement("div",{className:"flex justify-between text-sm mb-1"},ke.default.createElement("span",{className:"capitalize",style:{color:a.textSecondary}},x),ke.default.createElement("span",{className:"font-medium",style:{color:a.textPrimary}},S," (",_,"%)")),ke.default.createElement("div",{className:"h-2 rounded-full overflow-hidden",style:{background:a.trackBg}},ke.default.createElement("div",{className:`h-full ${v(x)} rounded-full transition-all`,style:{width:`${_}%`}})))})):ke.default.createElement("div",{className:"h-32 flex items-center justify-center",style:{color:a.textMuted}},"No runs yet"))),i?.recent_errors?.length>0&&ke.default.createElement("div",{className:"rounded-xl border p-6",style:{background:a.cardBg,borderColor:a.cardBorder}},ke.default.createElement("h3",{className:"font-semibold mb-4",style:{color:a.textPrimary}},"Recent Errors"),ke.default.createElement("div",{className:"space-y-3"},i.recent_errors.map(x=>ke.default.createElement("div",{key:x.id,className:"flex items-start space-x-3 p-3 rounded-lg",style:{background:n?"rgba(220,38,38,0.12)":"#fef2f2"}},ke.default.createElement("svg",{className:"w-5 h-5 text-red-500 flex-shrink-0 mt-0.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})),ke.default.createElement("div",{className:"flex-1 min-w-0"},ke.default.createElement("p",{className:"text-sm",style:{color:n?"#fca5a5":"#991b1b"}},x.error||"Unknown error"),ke.default.createElement("p",{className:"text-xs mt-1",style:{color:n?"#f87171":"#dc2626"}},new Date(x.created_at).toLocaleString())))))),ke.default.createElement("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-4"},ke.default.createElement("div",{className:"rounded-lg p-4",style:{background:a.innerBg}},ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},"Completed Runs"),ke.default.createElement("p",{className:"text-2xl font-bold",style:{color:a.textPrimary}},i?.summary?.completed_runs||0)),ke.default.createElement("div",{className:"rounded-lg p-4",style:{background:a.innerBg}},ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},"Failed Runs"),ke.default.createElement("p",{className:"text-2xl font-bold",style:{color:a.textPrimary}},i?.summary?.failed_runs||0)),ke.default.createElement("div",{className:"rounded-lg p-4",style:{background:a.innerBg}},ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},"Avg Tokens/Run"),ke.default.createElement("p",{className:"text-2xl font-bold",style:{color:a.textPrimary}},h(i?.summary?.avg_tokens_per_run))),ke.default.createElement("div",{className:"rounded-lg p-4",style:{background:a.innerBg}},ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},"Period"),ke.default.createElement("p",{className:"text-2xl font-bold",style:{color:a.textPrimary}},i?.period_days||30," days")))))}var i$={rose:["#dc2626","rgba(220,38,38,0.18)","#fee2e2"],green:["#16a34a","rgba(22,163,74,0.18)","#dcfce7"],blue:["#2563eb","rgba(37,99,235,0.18)","#dbeafe"],purple:["#7c3aed","rgba(124,58,237,0.18)","#ede9fe"]};function j1({title:e,value:t,icon:r,color:n,colors:a,darkMode:i}){let[o,l,s]=i$[n]||i$.rose;return ke.default.createElement("div",{className:"rounded-xl border p-4",style:{background:a.cardBg,borderColor:a.cardBorder}},ke.default.createElement("div",{className:"flex items-center justify-between"},ke.default.createElement("div",null,ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},e),ke.default.createElement("p",{className:"text-2xl font-bold mt-1",style:{color:a.textPrimary}},t)),ke.default.createElement("div",{className:"p-3 rounded-lg",style:{background:i?l:s,color:o}},r)))}var Lse=[{id:"config",label:"Configuration"},{id:"instructions",label:"Instructions"},{id:"tools",label:"Tools"},{id:"versions",label:"Versions"},{id:"code",label:"Code"}],s$=[{id:"traces",label:"Traces"},{id:"metrics",label:"Metrics"},{id:"interactions",label:"Interactions"},{id:"evals",label:"Evals"},{id:"feedback",label:"Feedback"}],Bse=s$.map(e=>e.id),o$={success:{light:["#dcfce7","#166534"],dark:["rgba(22,163,74,0.18)","#4ade80"]},warning:{light:["#fef9c3","#854d0e"],dark:["rgba(234,179,8,0.18)","#facc15"]},neutral:{light:["#f3f4f6","#4b5563"],dark:["rgba(255,255,255,0.1)","rgba(255,255,255,0.7)"]},error:{light:["#fee2e2","#991b1b"],dark:["rgba(220,38,38,0.18)","#f87171"]},info:{light:["#dbeafe","#1e40af"],dark:["rgba(59,130,246,0.18)","#60a5fa"]}},$se={active:"success",draft:"warning",archived:"neutral",failed:"error",trial:"info"};function bs({tone:e="neutral",mono:t=!1,darkMode:r,children:n}){let[a,i]=(o$[e]||o$.neutral)[r?"dark":"light"];return ae.default.createElement("span",{style:{background:a,color:i,borderRadius:"999px",padding:"2px 8px",fontSize:"11px",fontWeight:600,fontFamily:t?$e.mono:void 0,whiteSpace:"nowrap"}},n)}function zn({variant:e="secondary",size:t="md",onClick:r,disabled:n,colors:a,title:i,testId:o,children:l}){let u={padding:t==="sm"?"5px 10px":"7px 14px",borderRadius:"8px",fontSize:"13px",fontWeight:500,cursor:n?"not-allowed":"pointer",transition:"background 0.15s ease, border-color 0.15s ease",whiteSpace:"nowrap"},c={primary:{background:n?a.mutedBg:Wr,color:n?a.textMuted:"#ffffff",border:"1px solid transparent"},secondary:{background:"transparent",color:a.textCell,border:`1px solid ${a.inputBorder}`},danger:{background:"transparent",color:"#dc2626",border:"1px solid rgba(220,38,38,0.4)"}};return ae.default.createElement("button",{type:"button",onClick:r,disabled:n,title:i,"data-testid":o,style:{...u,...c[e]||c.secondary}},l)}function l$({tabs:e,active:t,onChange:r,colors:n}){return ae.default.createElement("div",{style:{display:"flex",alignItems:"center"}},e.map(a=>{let i=t===a.id;return ae.default.createElement("button",{key:a.id,type:"button",onClick:()=>r(a.id),style:{padding:"10px 12px",marginBottom:"-1px",background:"none",border:"none",borderBottom:`2px solid ${i?Wr:"transparent"}`,color:i?Wr:n.textSecondary,fontSize:"13px",fontWeight:i?600:500,cursor:"pointer",whiteSpace:"nowrap"}},a.label)}))}function z1({agent:e,meta:t,onSave:r,onDelete:n,onRun:a,onDuplicate:i,onRunReport:o,onBack:l,isLoading:s,initialTab:u}){let{darkMode:c}=At(),d=$a(c),[f,p]=(0,ae.useState)(u||"config"),[m,y]=(0,ae.useState)({name:e.name||"",description:e.description||"",provider:e.provider||"openai",model:e.model||"gpt-4o-mini",instructions:e.instructions||"",action_prompts:e.actionPrompts||e.action_prompts||[],preset_type:e.presetType||e.preset_type||"terminal",appearance:e.appearance||{},instruction_sets:e.instructionSets||e.instruction_sets||[],tools:e.tools||[],mcp_servers:e.mcpServers||e.mcp_servers||[],model_config:e.modelConfig||e.model_config||{temperature:.7},status:e.status||"draft"}),[h,v]=(0,ae.useState)([]),[g,b]=(0,ae.useState)(!1),[x,S]=(0,ae.useState)(""),[w,_]=(0,ae.useState)(td),k=e.telemetry_agent_class||e.telemetryAgentClass||(()=>{let F=e.agent_class_name||e.agentClassName||`${(e.name||"").replace(/[^a-zA-Z0-9]+(.)/g,(N,O)=>O.toUpperCase()).replace(/^./,N=>N.toUpperCase()).replace(/[^a-zA-Z0-9]/g,"")}`;return F.endsWith("Agent")?F:`${F}Agent`})();(0,ae.useEffect)(()=>{let F=!1;return $y(m.provider).then(N=>{F||N.length===0||_(O=>({...O,[m.provider]:N}))}),()=>{F=!0}},[m.provider]),(0,ae.useEffect)(()=>{let F=JSON.stringify(m)!==JSON.stringify({name:e.name||"",description:e.description||"",provider:e.provider||"openai",model:e.model||"gpt-4o-mini",instructions:e.instructions||"",action_prompts:e.actionPrompts||e.action_prompts||[],preset_type:e.presetType||e.preset_type||"terminal",appearance:e.appearance||{},instruction_sets:e.instructionSets||e.instruction_sets||[],tools:e.tools||[],mcp_servers:e.mcpServers||e.mcp_servers||[],model_config:e.modelConfig||e.model_config||{temperature:.7},status:e.status||"draft"});b(F)},[m,e]),(0,ae.useEffect)(()=>{f==="versions"?A():f==="code"&&P()},[f]);let A=async()=>{try{let N=await(await fetch(`/api/agents/${e.id}/versions`)).json();v(N.versions)}catch(F){console.error("Failed to load versions:",F)}},P=async()=>{try{let N=await(await fetch(`/api/agents/${e.id}/export`)).json();S(N.code)}catch(F){console.error("Failed to load code preview:",F)}},K=(F,N)=>{y(O=>({...O,[F]:N}))},z=(F,N)=>{y(O=>{let I=O[F]||[],D=I.includes(N)?I.filter(T=>T!==N):[...I,N];return{...O,[F]:D}})},Q=()=>{r(m)},M=Bse.includes(f);return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"20px"}},ae.default.createElement("div",{style:{display:"flex",alignItems:"flex-start",gap:"12px"}},ae.default.createElement("button",{type:"button",onClick:l,title:"Back to agents",style:{fontFamily:$e.mono,fontSize:"13px",color:d.textSecondary,background:"none",border:"none",cursor:"pointer",padding:"4px 2px",marginTop:"10px"}},"<-"),ae.default.createElement(fr,{size:44}),ae.default.createElement("div",{style:{flex:1,minWidth:0}},ae.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexWrap:"wrap"}},ae.default.createElement("h1",{style:{fontSize:"20px",fontWeight:700,color:d.textPrimary,margin:0}},m.name||"Untitled agent"),ae.default.createElement(bs,{tone:$se[m.status]||"neutral",darkMode:c},m.status),g&&ae.default.createElement(bs,{tone:"info",darkMode:c},"unsaved")),ae.default.createElement("p",{style:{fontSize:"13px",color:d.textSecondary,margin:"4px 0 0"}},m.description||"No description")),ae.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexShrink:0}},i&&ae.default.createElement(zn,{variant:"secondary",colors:d,onClick:i},"Duplicate"),ae.default.createElement(zn,{variant:"primary",colors:d,onClick:a},"Run Agent"))),ae.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"20px",borderBottom:`1px solid ${d.cardBorder}`,overflowX:"auto"}},ae.default.createElement(l$,{tabs:Lse,active:f,onChange:p,colors:d}),ae.default.createElement("div",{style:{width:"1px",height:"18px",background:d.borderStrong,flexShrink:0}}),ae.default.createElement(l$,{tabs:s$,active:f,onChange:p,colors:d})),M?ae.default.createElement("div",null,f==="traces"&&ae.default.createElement(Yu,{agentClass:k,embedded:!0}),f==="metrics"&&ae.default.createElement(XE,{agent:e,embedded:!0}),f==="interactions"&&ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"12px"}},o&&ae.default.createElement("div",{style:{display:"flex",justifyContent:"flex-end"}},ae.default.createElement("button",{type:"button",onClick:o,style:{background:"none",border:"none",cursor:"pointer",fontFamily:$e.mono,fontSize:"11px",color:"#3b82f6"}},"run report ->")),ae.default.createElement(el,{agentId:e.id,embedded:!0})),f==="evals"&&ae.default.createElement(Gv,{embedded:!0,agentId:e.id}),f==="feedback"&&ae.default.createElement(Kse,{colors:d})):ae.default.createElement("div",{style:{background:d.cardBg,border:`1px solid ${d.cardBorder}`,borderRadius:"12px",padding:"20px"}},f==="config"&&ae.default.createElement(Use,{formData:m,updateField:K,providerModels:w,colors:d,darkMode:c,onDelete:n}),f==="instructions"&&ae.default.createElement(Fse,{formData:m,updateField:K,meta:t,toggleArrayItem:z,colors:d}),f==="tools"&&ae.default.createElement(Wse,{formData:m,meta:t,toggleArrayItem:z,colors:d}),f==="versions"&&ae.default.createElement(Hse,{versions:h,agentId:e.id,onRestore:A,colors:d,darkMode:c}),f==="code"&&ae.default.createElement(Vse,{code:x,colors:d})),g&&ae.default.createElement("div",{style:{position:"sticky",bottom:"0",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"12px",background:d.cardBg,border:`1px solid ${d.borderStrong}`,borderRadius:"12px",padding:"10px 14px",boxShadow:"0 4px 16px rgba(0,0,0,0.12)"}},ae.default.createElement("span",{style:{fontSize:"13px",color:d.textSecondary}},"Unsaved changes"),ae.default.createElement("div",{style:{display:"flex",gap:"8px"}},ae.default.createElement(zn,{variant:"primary",size:"sm",colors:d,onClick:Q,disabled:s},s?"Saving\u2026":"Save Changes"))))}var Ji=e=>({display:"block",fontSize:"13px",fontWeight:500,color:e.textCell,marginBottom:"6px"}),al=e=>({width:"100%",padding:"8px 12px",borderRadius:"8px",border:`1px solid ${e.inputBorder}`,background:e.inputBg,color:e.textPrimary,fontFamily:"inherit",fontSize:"13px"}),u$=e=>({fontFamily:$e.mono,fontSize:"11px",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:e.textSecondary});function Use({formData:e,updateField:t,providerModels:r,colors:n,darkMode:a,onDelete:i}){return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"20px"}},ae.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"16px"}},ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Agent Name"),ae.default.createElement("input",{type:"text",value:e.name,onChange:o=>t("name",o.target.value),className:"aa-field",style:al(n)})),ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Preset Type"),ae.default.createElement("select",{value:e.preset_type,onChange:o=>t("preset_type",o.target.value),className:"aa-field",style:al(n)},Object.keys(Rc).map(o=>ae.default.createElement("option",{key:o,value:o},o))))),ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Description"),ae.default.createElement("textarea",{value:e.description,onChange:o=>t("description",o.target.value),rows:3,className:"aa-field",style:{...al(n),resize:"vertical"}})),ae.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"16px"}},ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Provider"),ae.default.createElement("select",{value:e.provider,onChange:o=>{t("provider",o.target.value),t("model",r[o.target.value][0])},className:"aa-field",style:al(n)},Object.keys(r).map(o=>ae.default.createElement("option",{key:o,value:o},o.charAt(0).toUpperCase()+o.slice(1))))),ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Model"),ae.default.createElement("select",{value:e.model,onChange:o=>t("model",o.target.value),className:"aa-field",style:{...al(n),fontFamily:$e.mono}},(r[e.provider]?.includes(e.model)?r[e.provider]:[e.model,...r[e.provider]||[]]).filter(Boolean).map(o=>ae.default.createElement("option",{key:o,value:o},o))))),ae.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"16px"}},ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Temperature"," ",ae.default.createElement("span",{style:{fontFamily:$e.mono,color:n.textSecondary}},e.model_config.temperature)),ae.default.createElement("input",{type:"range",min:"0",max:"1",step:"0.1",value:e.model_config.temperature,onChange:o=>t("model_config",{...e.model_config,temperature:parseFloat(o.target.value)}),style:{width:"100%",accentColor:Wr}})),ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Status"),ae.default.createElement("select",{value:e.status,onChange:o=>t("status",o.target.value),className:"aa-field",style:al(n)},ae.default.createElement("option",{value:"draft"},"Draft"),ae.default.createElement("option",{value:"active"},"Active"),ae.default.createElement("option",{value:"archived"},"Archived")))),i&&ae.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"12px",borderTop:`1px solid ${n.cardBorder}`,paddingTop:"16px"}},ae.default.createElement("div",null,ae.default.createElement("div",{style:u$(n)},"Danger zone"),ae.default.createElement("p",{style:{fontSize:"13px",color:n.textMuted,margin:"4px 0 0"}},"Deleting an agent removes its configuration and version history.")),ae.default.createElement(zn,{variant:"danger",size:"sm",colors:n,onClick:i},"Delete Agent")))}function Fse({formData:e,updateField:t,meta:r,toggleArrayItem:n,colors:a}){let i=e.action_prompts||[],o=(u,c)=>{t("action_prompts",i.map((d,f)=>f===u?{...d,...c}:d))},l=()=>{t("action_prompts",[...i,{name:"",prompt:"",expose_as_tool:!1}])},s=u=>{t("action_prompts",i.filter((c,d)=>d!==u))};return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"20px"}},ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(a)},"System Instructions"),ae.default.createElement("textarea",{value:e.instructions,onChange:u=>t("instructions",u.target.value),placeholder:"You are a helpful AI assistant...",rows:12,className:"aa-field",style:{...al(a),fontFamily:$e.mono,resize:"vertical"}})),ae.default.createElement("div",null,ae.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"6px"}},ae.default.createElement("label",{style:{...Ji(a),marginBottom:0}},"Action Prompts"),ae.default.createElement(zn,{variant:"secondary",size:"sm",colors:a,onClick:l},"+ Add action")),ae.default.createElement("p",{style:{fontSize:"12px",color:a.textMuted,margin:"0 0 12px"}},"Named actions run with their prompt stacked below the system instructions. The default ",ae.default.createElement("span",{style:{fontFamily:$e.mono}},"#ask")," action uses the system instructions alone."),i.length>0&&ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"12px"}},i.map((u,c)=>ae.default.createElement("div",{key:c,style:{border:`1px solid ${a.cardBorder}`,borderRadius:"10px",padding:"12px",display:"flex",flexDirection:"column",gap:"8px"}},ae.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},ae.default.createElement("span",{style:{fontFamily:$e.mono,fontSize:"13px",color:a.textMuted}},"#"),ae.default.createElement("input",{type:"text",value:u.name,onChange:d=>o(c,{name:d.target.value.toLowerCase().replace(/[^a-z0-9_]/g,"_")}),placeholder:"action_name",className:"aa-field",style:{...al(a),flex:1,padding:"6px 10px",fontFamily:$e.mono}}),ae.default.createElement("label",{style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"12px",color:a.textSecondary,whiteSpace:"nowrap"}},ae.default.createElement("input",{type:"checkbox",checked:!!u.expose_as_tool,onChange:d=>o(c,{expose_as_tool:d.target.checked}),style:{accentColor:Wr}}),"Expose as tool"),ae.default.createElement("button",{type:"button",onClick:()=>s(c),title:"Remove action",style:{fontFamily:$e.mono,fontSize:"12px",color:a.textMuted,background:"none",border:"none",cursor:"pointer",padding:"4px"}},"[x]")),ae.default.createElement("textarea",{value:u.prompt,onChange:d=>o(c,{prompt:d.target.value}),placeholder:"This action's system prompt, applied on top of the base instructions...",rows:4,className:"aa-field",style:{...al(a),fontFamily:$e.mono,resize:"vertical"}}))))),ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(a)},"Instruction Sets"),ae.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px"}},r.instructionSets?.map(u=>{let c=e.instruction_sets.includes(u);return ae.default.createElement("button",{key:u,type:"button",onClick:()=>n("instruction_sets",u),style:{padding:"5px 12px",borderRadius:"999px",fontSize:"13px",cursor:"pointer",border:`1px solid ${c?Wr:a.inputBorder}`,background:c?Wr:"transparent",color:c?"#ffffff":a.textCell}},u)}))))}function Wse({formData:e,meta:t,toggleArrayItem:r,colors:n}){let a=i=>({terminal:"$",playwright:">",filesystem:"/",code:"<>",database:"#",slack:"@",fetch:"~",search:"?",edit:"*",translate:"[]",memory:"M",ui:"[=]"})[i]||"[]";return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"20px"}},ae.default.createElement("p",{style:{fontSize:"13px",color:n.textSecondary,margin:0}},"Select the tools your agent can use."),ae.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(140px, 1fr))",gap:"12px"}},t.availableTools?.map(i=>{let o=e.tools.includes(i);return ae.default.createElement("button",{key:i,type:"button",onClick:()=>r("tools",i),style:{padding:"14px",borderRadius:"12px",textAlign:"center",cursor:"pointer",border:`1px solid ${o?Wr:n.cardBorder}`,background:o?"rgba(239,68,68,0.08)":"transparent",color:o?Wr:n.textCell}},ae.default.createElement("span",{style:{display:"block",fontFamily:$e.mono,fontSize:"20px",marginBottom:"6px"}},a(i)),ae.default.createElement("span",{style:{fontSize:"13px",fontWeight:500,textTransform:"capitalize"}},i))})),e.tools.length>0&&ae.default.createElement("div",{style:{background:n.innerBg,borderRadius:"10px",padding:"14px"}},ae.default.createElement("div",{style:{...u$(n),marginBottom:"10px"}},"Selected tools \xB7 ",e.tools.length),ae.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px"}},e.tools.map(i=>ae.default.createElement("span",{key:i,style:{fontFamily:$e.mono,fontSize:"11px",padding:"3px 8px",borderRadius:"6px",border:`1px solid ${n.inputBorder}`,color:n.textCell}},a(i)," ",i)))))}function Hse({versions:e,agentId:t,onRestore:r,colors:n,darkMode:a}){let i=async o=>{if(confirm("Restore this version? This will create a new version with the restored configuration."))try{await fetch(`/api/agents/${t}/restore`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({version_id:o})}),r()}catch(l){console.error("Failed to restore version:",l)}};return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"16px"}},ae.default.createElement("p",{style:{fontSize:"13px",color:n.textSecondary,margin:0}},"View and restore previous versions of this agent."),e.length>0?ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"10px"}},e.map(o=>{let l=o.is_latest||o.isLatest;return ae.default.createElement("div",{key:o.id,style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"12px",padding:"14px",borderRadius:"10px",border:`1px solid ${l?Wr:n.cardBorder}`,background:l?"rgba(239,68,68,0.06)":"transparent"}},ae.default.createElement("div",{style:{minWidth:0}},ae.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},ae.default.createElement("span",{style:{fontFamily:$e.mono,fontSize:"13px",fontWeight:600,color:n.textPrimary}},"v",o.version_number||o.versionNumber),l&&ae.default.createElement(bs,{tone:"error",darkMode:a},"current")),ae.default.createElement("p",{style:{fontSize:"13px",color:n.textCell,margin:"4px 0 0"}},o.change_summary||o.changeSummary),ae.default.createElement("p",{style:{fontFamily:$e.mono,fontSize:"11px",color:n.textMuted,margin:"4px 0 0"}},new Date(o.created_at||o.createdAt).toLocaleString())),!l&&ae.default.createElement(zn,{variant:"secondary",size:"sm",colors:n,onClick:()=>i(o.id)},"Restore"))})):ae.default.createElement(c$,{colors:n,glyph:"[#]",title:"No version history",hint:"Saving a change records a new version."}))}function Vse({code:e,colors:t}){let r=()=>{navigator.clipboard.writeText(e)};return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"12px"}},ae.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},ae.default.createElement("p",{style:{fontSize:"13px",color:t.textSecondary,margin:0}},"Generated Ruby code for this agent."),ae.default.createElement(zn,{variant:"secondary",size:"sm",colors:t,onClick:r},"Copy")),ae.default.createElement("pre",{style:{padding:"16px",background:"#111827",color:"#e5e7eb",borderRadius:"10px",overflowX:"auto",fontFamily:$e.mono,fontSize:"12px",lineHeight:1.6,margin:0}},ae.default.createElement("code",null,e||"Loading...")))}function Kse({colors:e}){return ae.default.createElement("div",{style:{background:e.cardBg,border:`1px solid ${e.cardBorder}`,borderRadius:"12px",padding:"20px"}},ae.default.createElement(c$,{colors:e,glyph:"[?]",title:"No feedback recorded",hint:"Thumbs and comments are not captured yet. Once an interaction feedback source is recorded, CSAT and per-trace comments appear here."}))}function c$({colors:e,glyph:t,title:r,hint:n}){return ae.default.createElement("div",{style:{textAlign:"center",padding:"40px 20px"}},ae.default.createElement("div",{style:{fontFamily:$e.mono,fontSize:"20px",color:e.textMuted}},t),ae.default.createElement("div",{style:{fontSize:"14px",fontWeight:600,color:e.textPrimary,marginTop:"10px"}},r),ae.default.createElement("p",{style:{fontSize:"13px",color:e.textMuted,margin:"6px auto 0",maxWidth:"420px"}},n))}var W=re(ne());async function $f(){let e=window.ACTIVE_AGENT_DASHBOARD?.meta?.upgradeUrl;if(!e)throw new Error("This dashboard has no billing configured.");window.location.href=e}var qse={llm:{role:"assistant",label:"LLM"},tool:{role:"tool",label:"Tool"},agent:{role:"developer",label:"Agent"},mcp:{role:"system",label:"MCP"}},Yse=(e,t)=>{let r=qse[e]||{role:e,label:e};return{...mr(r.role,t),label:r.label}},ZE={complete:"success",failed:"error",running:"info",pending:"warning",cancelled:"neutral"},Gse=["Hello, what can you help me with?","Show me a dashboard of last quarter's sales","List the files in the current directory","Explain how this code works"],Xse=["user","assistant","tool"],Zse=1200,Qse=600*1e3,L1=e=>e?e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`:"-",d$=e=>{if(!e)return null;try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}},QE=e=>{let t=new Map;return(e?.logs||[]).filter(r=>r.eid).forEach(r=>{let n=t.get(r.eid)||{eid:r.eid};r.status==="started"?Object.assign(n,r,{input:r.detail,output:n.output}):Object.assign(n,r,{input:n.input,output:r.detail}),t.set(r.eid,n)}),[...t.values()]},ws=e=>e?.context_id??e?.output_metadata?.context_id??null,Xv=e=>e.json().catch(()=>({})),f$=({open:e,color:t})=>W.default.createElement("svg",{className:`w-3.5 h-3.5 mt-1 flex-shrink-0 transition-transform ${e?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",style:{color:t}},W.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"}));function Jse({run:e,darkMode:t,colors:r,expanded:n,onToggle:a}){let i=QE(e),o=S1(t);return W.default.createElement("div",{"data-testid":"runner-activity",className:"space-y-2"},i.map(l=>{let s=!!n[l.eid],u=!!(l.input||l.output),c=Yse(l.kind,t);return W.default.createElement("div",{key:l.eid,"data-testid":"runner-activity-event"},W.default.createElement("div",{className:`flex gap-3 items-start rounded-lg -mx-2 px-2 py-1 ${u?"cursor-pointer":""}`,onClick:u?()=>a(l.eid):void 0,title:u?"Click to inspect input/output":void 0,style:s?{background:t?"rgba(255,255,255,0.04)":"rgba(0,0,0,0.03)"}:{}},W.default.createElement("span",{className:"px-2 py-0.5 rounded text-xs font-medium flex-shrink-0 mt-0.5",style:{background:c.background,color:c.color,minWidth:"72px",textAlign:"center"}},c.label),W.default.createElement("div",{className:"min-w-0 flex-1"},W.default.createElement("div",{className:"text-sm break-words",style:{color:r.textPrimary}},l.label,l.output&&!s&&W.default.createElement("span",{style:{color:r.textMuted}}," \u201C",l.output.slice(0,160),l.output.length>160?"\u2026":"","\u201D")),W.default.createElement("div",{className:"text-xs mt-0.5 font-mono flex items-center gap-2 flex-wrap",style:{color:r.textMuted}},l.status==="started"?W.default.createElement("span",{className:"animate-pulse",style:{color:"#3b82f6"}},"running\u2026"):W.default.createElement("span",{style:l.status==="error"?{color:"#ef4444"}:void 0},l.status==="error"?"failed":"\u2713",l.duration_ms!=null&&` ${L1(l.duration_ms)}`),l.at&&W.default.createElement("span",null,new Date(l.at).toLocaleTimeString()))),u&&W.default.createElement(f$,{open:s,color:r.textMuted})),s&&W.default.createElement("div",{className:"ml-3 mt-1 mb-2 pl-4 space-y-2 border-l-2",style:{borderColor:c.color+"55"}},l.input&&W.default.createElement("div",null,W.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:r.textMuted}},"Input"),W.default.createElement("pre",{style:{...o,whiteSpace:"pre-wrap",maxHeight:"160px",overflowY:"auto"}},d$(l.input))),l.output&&W.default.createElement("div",null,W.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:r.textMuted}},l.status==="error"?"Error":"Result"),W.default.createElement("pre",{style:{...o,whiteSpace:"pre-wrap",maxHeight:"224px",overflowY:"auto",...l.status==="error"?{background:t?"rgba(239,68,68,0.12)":"#fef2f2",color:t?"#fca5a5":"#b91c1c"}:{}}},d$(l.output)))))}))}function Rse({run:e,darkMode:t,colors:r}){return e?W.default.createElement("div",{className:"flex items-center gap-3 flex-wrap text-xs",style:{color:r.textMuted}},W.default.createElement("span",{"data-testid":"runner-status",style:{display:"inline-flex"}},W.default.createElement(bs,{tone:ZE[e.status]||"neutral",darkMode:t},e.status)),e.output_metadata?.model&&W.default.createElement("span",{className:"font-mono",title:"Model that generated this run"},e.output_metadata.provider,"/",e.output_metadata.model),e.duration_ms?W.default.createElement("span",null,L1(e.duration_ms)):null,e.total_tokens?W.default.createElement("span",null,e.total_tokens," tokens"):null,e.trace_id&&W.default.createElement("a",{href:Je(`/traces?trace=${e.trace_id}`),className:"font-mono hover:underline",style:{color:r.textSecondary},title:`${e.trace_id} \u2014 open in Traces`},"trace:",e.trace_id.slice(0,8)," \u2192")):null}function JE({agent:e,onBack:t}){let{darkMode:r}=At(),n=$a(r),a=e.action_prompts||e.actionPrompts||[],i=["ask",...a.map(ie=>ie.name).filter(Boolean)],[o,l]=(0,W.useState)("ask"),[s,u]=(0,W.useState)(""),[c,d]=(0,W.useState)([]),[f,p]=(0,W.useState)(!1),[m,y]=(0,W.useState)([]),[h,v]=(0,W.useState)(null),[g,b]=(0,W.useState)(null),[x,S]=(0,W.useState)(null),[w,_]=(0,W.useState)([]),[k,A]=(0,W.useState)(!1),[P,K]=(0,W.useState)(null),[z,Q]=(0,W.useState)(null),[M,F]=(0,W.useState)(null),[N,O]=(0,W.useState)(null),[I,D]=(0,W.useState)({}),[T,j]=(0,W.useState)(null),[R,U]=(0,W.useState)(!1),[q,ee]=(0,W.useState)(null),[fe,pe]=(0,W.useState)(!1),[Pe,oe]=(0,W.useState)(!1),[Te,V]=(0,W.useState)(null),[J,E]=(0,W.useState)(""),[L,X]=(0,W.useState)(!1),[B,Ae]=(0,W.useState)(null),C=(0,W.useRef)(null),Y=(0,W.useRef)(null),ve=(0,W.useRef)(0),ze=(0,W.useRef)(!0),tt=(0,W.useRef)(null),Lt=(0,W.useRef)([]),ct=(0,W.useRef)(null),Nn=(0,W.useRef)(null),Ln=(0,W.useRef)(null),na=(0,W.useRef)(null),_i=(g?.messages||[]).filter(ie=>Xse.includes(ie.role));(0,W.useEffect)(()=>{tt.current=z},[z]),(0,W.useEffect)(()=>{Lt.current=c},[c]),(0,W.useEffect)(()=>(ze.current=!0,Ru(),()=>{ze.current=!1,ve.current+=1,eo(tt.current),eo({attachments:Lt.current}),Q(null),d([])}),[e.id]),(0,W.useEffect)(()=>{cr(o)},[e.id,o]),(0,W.useEffect)(()=>{Y.current=h,h?Bn(h):(b(null),S(null))},[h]),(0,W.useEffect)(()=>{let ie=Nn.current;ie&&(ie.scrollTop=ie.scrollHeight)},[_i.length,z,P?.logs?.length,Te,M]),(0,W.useEffect)(()=>{if(!Pe)return;let ie=De=>{na.current&&!na.current.contains(De.target)&&oe(!1)};return document.addEventListener("mousedown",ie),()=>document.removeEventListener("mousedown",ie)},[Pe]);let Ru=async()=>{try{let De=await(await fetch(`/api/agents/${e.id}/runs?per_page=10`)).json();_(De.runs||[])}catch(ie){console.error("Failed to load runs:",ie)}},cr=async ie=>{try{let De=await fetch(`/api/agents/${e.id}/conversations?action_name=${encodeURIComponent(ie)}`);if(!De.ok)throw new Error(`HTTP ${De.status}`);let rt=(await De.json()).conversations||[];y(rt),v($r=>$r&&(C.current===$r||rt.some(ui=>ui.id===$r))?$r:rt[0]?.id??null)}catch(De){console.error("Failed to load conversations:",De),y([])}},Bn=async ie=>{try{let De=await fetch(`/api/interactions/${ie}`);if(!De.ok)throw new Error(De.status===404?"Conversation not found":`HTTP ${De.status}`);let qe=await De.json();if(Y.current!==ie)return;b(qe.interaction),S(null)}catch(De){if(Y.current!==ie)return;b(null),S(De.message)}},Ri=async()=>{let ie=await fetch(`/api/agents/${e.id}/conversations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action_name:o})}),De=await Xv(ie);if(!ie.ok||!De.conversation)throw new Error(De.error||`Could not start a conversation (HTTP ${ie.status})`);let qe=De.conversation;return y(rt=>[qe,...rt.filter($r=>$r.id!==qe.id)]),C.current=qe.id,v(qe.id),qe.id},ec=()=>Y.current?Promise.resolve(Y.current):Ri(),X1=ie=>{C.current=null,l(ie)},Vf=()=>{K(null),O(null),D({})},Z1=ie=>{let De=ie?Number(ie):null;De!==Y.current&&Vf(),C.current=De,v(De),F(null)},tc=async()=>{if(!k)try{await Ri(),S(null),F(null),Vf(),eo(tt.current),Q(null),V(null)}catch(ie){S(ie.message)}},eo=ie=>{(ie?.attachments||[]).forEach(De=>{De.url&&De.url.startsWith("blob:")&&URL.revokeObjectURL(De.url)})},rc=ie=>{let De=Array.from(ie||[]).filter(Boolean);De.length!==0&&d(qe=>[...qe,...De.map(rt=>({file:rt,filename:rt.name,content_type:rt.type||"application/octet-stream",byte_size:rt.size,kind:w7(rt),url:rt.type&&rt.type.startsWith("image/")?URL.createObjectURL(rt):null}))])},Q1=ie=>{d(De=>{let qe=De[ie];return qe?.url&&URL.revokeObjectURL(qe.url),De.filter((rt,$r)=>$r!==ie)})},og=(ie,De)=>{A(!1),eo(tt.current),Q(null),Ru();let qe=ws(ie)??De;qe&&(qe!==Y.current?(C.current=qe,v(qe)):Bn(qe),cr(o))},J1=(ie,De)=>{if(!ze.current)return;let qe=++ve.current,rt=Date.now(),$r=async()=>{if(ve.current===qe){try{let ui=await fetch(`/api/runs/${ie}`);if(ui.ok){let $n=await ui.json();if(ve.current!==qe)return;if(K($n.run),!["pending","running"].includes($n.run.status)){og($n.run,De);return}}}catch{}Date.now()-rt<Qse?setTimeout($r,Zse):(A(!1),eo(tt.current),Q(null),K(ui=>ui&&{...ui,status:"failed",error_message:"Timed out waiting for the run to finish."}),O("Timed out waiting for the run to finish."))}};$r()},nc=async({text:ie,files:De,fromComposer:qe=!1})=>{let rt=(ie||"").trim();if(!rt&&De.length===0||k)return;O(null),F(null),V(null),A(!0),D({}),K({status:"pending",input_prompt:rt,output:"",logs:[],started_at:new Date().toISOString()}),eo(tt.current),Q({content:rt||"(see attached files)",attachments:De.map(({file:$n,...ks})=>ks)}),qe&&(u(""),d([]));let $r=Y.current;if(!$r)try{$r=await Ri()}catch($n){O(`${$n.message} \u2014 running without a pinned conversation.`)}let ui=()=>{qe&&(u(rt),d(De)),Q(null)};try{let $n=new FormData;$n.append("prompt",rt),$n.append("action_name",o),$r&&$n.append("params[context_id]",String($r)),De.forEach(({file:sg})=>$n.append("attachments[]",sg,sg.name));let ks=await fetch(`/api/agents/${e.id}/execute`,{method:"POST",body:$n}),oc=await Xv(ks);if(ks.status===402&&oc.upgrade_required){j(oc.usage),K(sg=>({...sg,status:"failed",error_message:oc.message||"Plan limit reached"})),A(!1),ui();return}if(!ks.ok)throw new Error(oc.error||"Run failed");J1(oc.run.id,ws(oc.run)??$r)}catch($n){K(ks=>({...ks,status:"failed",error_message:$n.message})),A(!1),ui()}},Kf=()=>nc({text:s,files:c,fromComposer:!0}),lg=ie=>{!ie||!ie.text||nc({text:ie.text,files:[]})},R1=ie=>{ie.key==="Enter"&&(ie.metaKey||ie.ctrlKey)&&(ie.preventDefault(),Kf())},qf=async(ie,De)=>{let qe=Y.current,rt=await fetch(`/api/interactions/${qe}/messages/${ie.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:De})}),$r=await Xv(rt);if(!rt.ok)throw new Error($r.error||`Could not save the message (HTTP ${rt.status})`);await Bn(qe)},ew=async ie=>{let De=Y.current;try{let qe=await fetch(`/api/interactions/${De}/messages/${ie.id}`,{method:"DELETE"});if(!qe.ok){let rt=await Xv(qe);throw new Error(rt.error||`Could not delete the message (HTTP ${qe.status})`)}S(null),await Bn(De),cr(o)}catch(qe){S(qe.message)}},tw=ie=>{oe(!1),V(ie),E(""),Ae(null)},ac=async()=>{let ie=J.trim();if(!(!ie||L)){X(!0),Ae(null);try{let De=await ec(),qe=await fetch(`/api/interactions/${De}/messages`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({role:Te,content:ie})}),rt=await Xv(qe);if(!qe.ok)throw new Error(rt.error||`Could not add the message (HTTP ${qe.status})`);E(""),V(null),await Bn(De),cr(o)}catch(De){Ae(De.message)}finally{X(!1)}}},rw=async ie=>{let De=ie;if(ws(ie)==null)try{let rt=await fetch(`/api/runs/${ie.id}`);rt.ok&&(De=(await rt.json()).run)}catch(rt){console.error("Failed to load run details:",rt)}let qe=ws(De);if(qe){F(null),qe!==Y.current&&Vf(),C.current=qe;let rt=De.action_name||ie.action_name;rt&&i.includes(rt)&&rt!==o&&l(rt),v(qe)}else F({...De,output:De.output??De.output_preview,error_message:De.error_message??De.error});ct.current?.scrollIntoView({behavior:"smooth",block:"start"})},ye=async()=>{U(!0),ee(null);try{await $f({planSlug:"pro"})}catch(ie){ee(ie.message),U(!1)}},lt=window.ACTIVE_AGENT_DASHBOARD?.meta?.upgradeUrl,Xt=a.find(ie=>ie.name===o)?.prompt,dr=[e.instructions,o==="ask"?null:Xt].map(ie=>(ie||"").trim()).filter(Boolean).join(`
77
+ Who updated the description for the sample notebook?`,style:{...nl,width:"100%",fontFamily:Ce,fontSize:12,lineHeight:"18px"}}),te.default.createElement("p",{style:{margin:"6px 0 0",fontSize:12,color:"var(--color-text-muted)",textWrap:"pretty"}},"With scenarios, each run replays every message through the agent \u2014 once per model in \u201CCompare models\u201D \u2014 and reports which tasks it completes, what faults it hits, and how to fix them. ",te.default.createElement("code",{style:{fontFamily:Ce}},"# Heading")," lines group related tasks so they can be run together; ",te.default.createElement("code",{style:{fontFamily:Ce}},"| tools: a, b")," names the tool a task should call.")),z.judgeKind==="judge_defined"&&te.default.createElement("p",{style:{margin:0,fontSize:12,color:"var(--color-text-secondary)"}},"On the first run the judge reads the agent's instructions and recent interactions, defines 3\u20136 KPIs, then scores samples against them. KPIs persist so later runs (and model cohorts) stay comparable."),z.judgeKind!=="judge_defined"&&te.default.createElement(te.default.Fragment,null,te.default.createElement("div",null,te.default.createElement(yt,{style:{display:"block",marginBottom:8}},"Rule-based criteria (sampled generations)"),te.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:12}},qE.map(C=>te.default.createElement("label",{key:C.key,style:{display:"flex",alignItems:"center",gap:8,fontSize:13,color:"var(--color-text-primary)"}},te.default.createElement("input",{type:"checkbox",checked:z.criteria.includes(C.key),onChange:Y=>Q({...z,criteria:Y.target.checked?[...z.criteria,C.key]:z.criteria.filter(ve=>ve!==C.key)})}),C.label)))),te.default.createElement("div",null,te.default.createElement(yt,{style:{display:"block",marginBottom:8}},"Telemetry criteria (trace aggregates)"),te.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:12}},YE.map(C=>te.default.createElement("label",{key:C.key,style:{display:"flex",alignItems:"center",gap:8,fontSize:13,color:"var(--color-text-primary)"}},te.default.createElement("input",{type:"checkbox",checked:z.criteria.includes(C.key),onChange:Y=>Q({...z,criteria:Y.target.checked?[...z.criteria,C.key]:z.criteria.filter(ve=>ve!==C.key)})}),C.label)))),te.default.createElement("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4"},te.default.createElement("div",null,te.default.createElement(yt,{as:"label",style:{display:"block",marginBottom:6}},"Must contain (optional pattern)"),te.default.createElement("input",{type:"text",value:z.containsPattern,onChange:C=>Q({...z,containsPattern:C.target.value}),placeholder:"e.g. password reset",style:{...nl,width:"100%"}})),te.default.createElement("div",null,te.default.createElement(yt,{as:"label",style:{display:"block",marginBottom:6}},"LLM judge criterion (optional, needs provider credentials)"),te.default.createElement("input",{type:"text",value:z.llmJudgePrompt,onChange:C=>Q({...z,llmJudgePrompt:C.target.value}),placeholder:"e.g. Is the answer helpful and accurate?",style:{...nl,width:"100%"}})))),M&&te.default.createElement("div",{style:{fontSize:13,color:"var(--color-error-text)"}},M),te.default.createElement("div",null,te.default.createElement(on,{variant:"primary",type:"submit",disabled:N},N?z.scenariosText.trim()?"Creating & starting run\u2026":"Creating & running\u2026":"Create & Run")))),te.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(190px, 1fr))",gap:16}},te.default.createElement(Hv,{label:"Suites",value:fe.length,sub:B,testId:"stat-suites"}),te.default.createElement(Hv,{label:"Scenario runs",value:oe,sub:"latest run of each suite",testId:"stat-scenario-runs"}),te.default.createElement(Hv,{label:"Pass rate",value:J==null?"\u2014":V7(J),valueColor:J==null?"var(--color-text-muted)":tl[Gu(J)].strong,sub:J==null?"no completed runs yet":`${Te} / ${oe} passed`,testId:"stat-pass-rate"}),te.default.createElement(Hv,{label:"Open faults",value:oe-Te,sub:`${Gt(V,"fix item")} across ${Gt(Pe.length,"suite")}`,testId:"stat-open-faults"})),te.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:16}},ee.map(C=>{let Y=C.latest_run,ve=D(C.id),ze=!!C.scenario_suite,tt=Y?.status==="complete",Lt=Y?.status==="pending"||Y?.status==="running",ct=Y?.models?.length||(C.compare_models||[]).length||1,Nn=Y?.samples_passed||0,Ln=Y?.samples_evaluated||0,na=Ln?Nn/Ln:0,_i=(C.criteria||[]).some(cr=>YE.some(Bn=>Bn.key===cr.key)),Ru=ze?`@${C.agent?.name||"agent"} \xB7 ${Gt(C.scenario_count||0,"scenario")} \xD7 ${Gt(ct,"model")}`:`@${C.agent?.name||"agent"} \xB7 ${Gt(C.sample_size||0,"sample")}${ct>1?` \xD7 ${Gt(ct,"model")}`:""}`;return te.default.createElement(kn,{key:C.id,padding:0,testId:"evaluation-card","data-telemetry":_i?"true":"false","data-kind":ze?"suite":"sampling","data-open":ve?"true":"false",style:{overflow:"hidden"}},te.default.createElement("div",{onClick:()=>T(C.id),className:"hover:bg-[var(--color-hover)]",style:{display:"flex",alignItems:"center",gap:12,rowGap:8,padding:"12px 16px",cursor:"pointer",flexWrap:"wrap"}},te.default.createElement(O1,{kind:"chevron",open:ve}),te.default.createElement("span",{style:{width:22,height:22,borderRadius:6,background:"var(--color-muted)",display:"inline-flex",alignItems:"center",justifyContent:"center",fontFamily:Ce,fontSize:10,fontWeight:700,color:"var(--color-text-secondary)",flexShrink:0},title:ze?"scenario suite":"sampling evaluation"},ze?"=":"~"),te.default.createElement("span",{style:{fontSize:14,fontWeight:600,color:"var(--color-text-primary)"}},C.name),te.default.createElement("span",{style:Qi(11)},Ru),te.default.createElement("span",{style:{marginLeft:"auto",display:"flex",alignItems:"center",gap:14,flexShrink:0}},te.default.createElement("span",{style:Qi(11)},Bf(Y?.completed_at||Y?.created_at||C.created_at)),Y?.status==="failed"&&te.default.createElement("span",{style:Qi(11,"var(--color-error)")},"failed"),Lt&&te.default.createElement("span",{style:Qi(11)},Y.status==="pending"?"queued":"running"),!Y&&te.default.createElement("span",{style:Qi(11)},"no runs"),tt&&ze&&te.default.createElement("span",{style:Qi(11)},Gt(Ln-Nn,"fault")),tt&&ze&&te.default.createElement(jn,{tone:Gu(na),testId:"suite-pass-badge"},`${Nn}/${Ln} passed`),tt&&!ze&&Y.average_score!=null&&te.default.createElement(jn,{tone:a$(Y.average_score),title:"mean score across criteria"},`score ${Xu(Y.average_score)}`),tt&&!ze&&Ln>0&&te.default.createElement(jn,{tone:Gu(na)},`${Nn}/${Ln} passed`))),ve&&te.default.createElement("div",{style:{borderTop:"1px solid var(--color-border-light)"}},ze?te.default.createElement(KE,{evaluation:C,onChanged:I,onDelete:()=>q(C),deleting:P===C.id}):te.default.createElement(te.default.Fragment,null,Y?.status==="failed"?te.default.createElement("div",{style:{padding:16,fontSize:13,color:"var(--color-error-text)"}},Y.error_message):Y?.scores?te.default.createElement("div",{style:{padding:16,display:"flex",flexDirection:"column",gap:12}},Y.scores._verdict&&te.default.createElement("div",{style:{padding:"10px 12px",borderRadius:10,border:"1px solid var(--color-border-light)",display:"flex",flexDirection:"column",gap:6}},te.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"}},te.default.createElement("span",{style:{fontFamily:Ce,fontSize:12,fontWeight:600,color:"var(--color-text-primary)"}},Y.scores._verdict.winner),te.default.createElement(jn,{tone:"info",size:10,style:{padding:"1px 6px"}},"judge's pick"),te.default.createElement("span",{style:{marginLeft:"auto",...Qi(11)}},`judged by ${Y.scores._verdict.judge}`)),te.default.createElement("div",{style:{fontSize:12,lineHeight:"18px",color:"var(--color-text-cell)",textWrap:"pretty"}},te.default.createElement(yt,{size:10,color:"var(--color-text-muted)",style:{marginRight:8}},"Verdict"),Y.scores._verdict.rationale)),Y.scores._missing_models&&te.default.createElement("div",{style:{fontSize:12,fontStyle:"italic",color:"var(--color-text-muted)"}},"No recorded generations for: ",Y.scores._missing_models.join(", ")," \u2014 run the agent under those models first"),Object.entries(Y.scores).filter(([cr])=>!cr.startsWith("_")).map(([cr,Bn])=>Ae(Bn)?te.default.createElement("div",{key:cr,style:{display:"flex",flexDirection:"column",gap:4}},te.default.createElement("div",{style:{fontSize:13,color:"var(--color-text-secondary)"}},cr.replace(/_/g," ")),Object.entries(Bn).map(([Ri,ec])=>te.default.createElement(n$,{key:Ri,label:Ri,score:ec,indent:!0,mono:!0}))):te.default.createElement(n$,{key:cr,label:cr,score:Bn}))):te.default.createElement("div",{style:{padding:16,...Qi(11)}},"[ ] no runs yet"),te.default.createElement("div",{style:{padding:16,background:"var(--color-background)",display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(160px, 1fr))",gap:16,fontSize:13}},te.default.createElement("div",null,te.default.createElement(yt,{size:10,color:"var(--color-text-muted)"},"Judge"),te.default.createElement("div",{style:{marginTop:4,fontFamily:Ce,fontSize:12,color:"var(--color-text-primary)"}},C.judge_kind==="judge_defined"?`judge-defined KPIs${C.judge_model?` (${C.judge_model})`:""}`:C.judge_kind==="llm"?C.judge_model||"llm judge":"rules")),te.default.createElement("div",{style:{gridColumn:"span 2",minWidth:0}},te.default.createElement(yt,{size:10,color:"var(--color-text-muted)"},"Criteria"),te.default.createElement("div",{style:{marginTop:4,fontFamily:Ce,fontSize:12,color:"var(--color-text-primary)",textWrap:"pretty"}},(C.criteria||[]).map(cr=>String(cr.key).replace(/_/g," ")).join(" \xB7 ")||"\u2014")),te.default.createElement("div",null,te.default.createElement(yt,{size:10,color:"var(--color-text-muted)"},"Samples"),te.default.createElement("div",{style:{marginTop:4,fontFamily:Ce,fontSize:12,color:"var(--color-text-primary)"}},tt&&Ln>0?`${Nn} / ${Ln} passed`:"\u2014")),te.default.createElement("div",null,te.default.createElement(yt,{size:10,color:"var(--color-text-muted)"},"Last run"),te.default.createElement("div",{style:{marginTop:4,fontFamily:Ce,fontSize:12,color:"var(--color-text-primary)"},title:"Estimated cost, tokens and wall-clock runtime of the latest run"},Ise(Y?.usage)||"\u2014")),te.default.createElement("div",{style:{display:"flex",alignItems:"flex-end",justifyContent:"flex-end",gap:8}},te.default.createElement(on,{size:"sm",onClick:cr=>{cr.stopPropagation(),U(C.id)},disabled:k===C.id},k===C.id?"Running\u2026":"Run again"),te.default.createElement(on,{variant:"danger",size:"sm",onClick:cr=>{cr.stopPropagation(),q(C)},disabled:P===C.id,title:"Delete this evaluation and its runs"},P===C.id?"Deleting\u2026":"Delete"))))))})),ee.length===0&&!w&&te.default.createElement(kn,{style:{textAlign:"center",padding:"48px 20px"}},te.default.createElement("div",{style:{fontSize:16,fontWeight:600,color:"var(--color-text-primary)"}},"No evaluations yet"),te.default.createElement("p",{style:{margin:"8px 0 0",fontSize:13,color:"var(--color-text-secondary)",textWrap:"pretty"}},"Create an evaluation to score recorded outputs, or paste scenarios to test new tasks across models")))}var ke=re(ne());var jse=e=>new Date(`${e}T00:00:00`),zse=[{id:"overview",label:"Overview"},{id:"traces",label:"Traces"},{id:"interactions",label:"Interactions"}];function XE({agent:e,onBack:t,embedded:r=!1}){let{darkMode:n}=At(),a=$a(n),[i,o]=(0,ke.useState)(null),[l,s]=(0,ke.useState)(!0),{timeWindow:u,days:c}=Gi(),[d,f]=(0,ke.useState)("overview"),p=e.telemetry_agent_class||(()=>{let x=e.agent_class_name||`${(e.name||"").replace(/[^a-zA-Z0-9]+(.)/g,(S,w)=>w.toUpperCase()).replace(/^./,S=>S.toUpperCase()).replace(/[^a-zA-Z0-9]/g,"")}`;return x.endsWith("Agent")?x:`${x}Agent`})();(0,ke.useEffect)(()=>{m()},[e?.id,c]);let m=async()=>{if(e?.id){s(!0);try{let S=await(await fetch(`/api/agents/${e.id}/analytics?days=${c}`)).json();o(S)}catch(x){console.error("Failed to load analytics:",x)}finally{s(!1)}}},y=x=>x?x<1e3?`${x}ms`:`${(x/1e3).toFixed(2)}s`:"-",h=x=>x?x>=1e6?`${(x/1e6).toFixed(1)}M`:x>=1e3?`${(x/1e3).toFixed(1)}K`:x.toString():"0",v=x=>{switch(x){case"complete":return"bg-green-500";case"failed":return"bg-red-500";case"running":return"bg-blue-500";case"pending":return"bg-yellow-500";case"cancelled":return"bg-gray-500";default:return"bg-gray-400"}};if(l&&!i)return ke.default.createElement("div",{className:"flex items-center justify-center h-64"},ke.default.createElement("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-red-500"}));let g=i?.runs_by_day?.length>0?Math.max(...i.runs_by_day.map(x=>x.count)):1,b=r?"overview":d;return ke.default.createElement("div",{className:"space-y-6"},r?ke.default.createElement("div",{className:"flex items-center justify-end gap-2"},u.minutes<1440&&ke.default.createElement("span",{className:"text-xs",style:{color:a.textMuted},title:"This view aggregates by day"},"showing 1 day"),ke.default.createElement(Xi,null)):ke.default.createElement("div",{className:"flex items-center justify-between"},ke.default.createElement("div",{className:"flex items-center space-x-4"},ke.default.createElement("button",{onClick:t,className:"p-2 transition-colors",style:{color:a.textMuted}},ke.default.createElement("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"}))),ke.default.createElement("div",null,ke.default.createElement("h1",{className:"text-2xl font-bold",style:{color:a.textPrimary}},e.name," Analytics"),ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},"Performance metrics and usage data"))),ke.default.createElement("div",{className:"flex items-center gap-2"},u.minutes<1440&&ke.default.createElement("span",{className:"text-xs",style:{color:a.textMuted},title:"This view aggregates by day"},"showing 1 day"),ke.default.createElement(Xi,null))),!r&&ke.default.createElement("div",{className:"flex rounded-lg p-1 w-fit",style:{background:a.mutedBg}},zse.map(x=>ke.default.createElement("button",{key:x.id,onClick:()=>f(x.id),className:`px-4 py-1.5 text-sm rounded-md transition-colors ${d===x.id?"shadow":""}`,style:d===x.id?{background:a.cardBg,color:a.textPrimary}:{color:a.textSecondary}},x.label))),b==="traces"&&ke.default.createElement(Yu,{agentClass:p,embedded:!0}),b==="interactions"&&ke.default.createElement(el,{agentId:e.id,embedded:!0}),b==="overview"&&ke.default.createElement(ke.default.Fragment,null,ke.default.createElement("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-4"},ke.default.createElement(j1,{title:"Total Runs",value:i?.summary?.total_runs||0,icon:ke.default.createElement("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 10V3L4 14h7v7l9-11h-7z"})),color:"rose",colors:a,darkMode:n}),ke.default.createElement(j1,{title:"Success Rate",value:`${i?.summary?.success_rate||0}%`,icon:ke.default.createElement("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"})),color:"green",colors:a,darkMode:n}),ke.default.createElement(j1,{title:"Avg Duration",value:y(i?.summary?.avg_duration_ms),icon:ke.default.createElement("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"})),color:"blue",colors:a,darkMode:n}),ke.default.createElement(j1,{title:"Total Tokens",value:h(i?.summary?.total_tokens),icon:ke.default.createElement("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01"})),color:"purple",colors:a,darkMode:n})),ke.default.createElement("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6"},ke.default.createElement("div",{className:"lg:col-span-2 rounded-xl border p-6",style:{background:a.cardBg,borderColor:a.cardBorder}},ke.default.createElement("h3",{className:"font-semibold mb-4",style:{color:a.textPrimary}},"Runs Over Time"),i?.runs_by_day?.length>0?ke.default.createElement("div",{className:"h-48"},ke.default.createElement("div",{className:"flex items-end justify-between h-full space-x-1"},i.runs_by_day.map((x,S)=>ke.default.createElement("div",{key:x.date,className:"flex-1 flex flex-col items-center group"},ke.default.createElement("div",{className:"relative w-full"},ke.default.createElement("div",{className:"w-full bg-red-500 rounded-t transition-all hover:bg-red-600",style:{height:`${x.count/g*150}px`,minHeight:x.count>0?"4px":"0"}}),ke.default.createElement("div",{className:"absolute -top-8 left-1/2 transform -translate-x-1/2 bg-gray-800 text-white text-xs px-2 py-1 rounded opacity-0 group-hover:opacity-100 transition-opacity whitespace-nowrap"},x.count," runs")),(S===0||S===i.runs_by_day.length-1||i.runs_by_day.length<=7)&&ke.default.createElement("span",{className:"text-xs mt-2 transform -rotate-45 origin-left",style:{color:a.textMuted}},jse(x.date).toLocaleDateString("en-US",{month:"short",day:"numeric"})))))):ke.default.createElement("div",{className:"h-48 flex items-center justify-center",style:{color:a.textMuted}},"No data for this period")),ke.default.createElement("div",{className:"rounded-xl border p-6",style:{background:a.cardBg,borderColor:a.cardBorder}},ke.default.createElement("h3",{className:"font-semibold mb-4",style:{color:a.textPrimary}},"Status Breakdown"),Object.keys(i?.status_breakdown||{}).length>0?ke.default.createElement("div",{className:"space-y-3"},Object.entries(i.status_breakdown).map(([x,S])=>{let w=i?.summary?.total_runs||1,_=(S/w*100).toFixed(1);return ke.default.createElement("div",{key:x},ke.default.createElement("div",{className:"flex justify-between text-sm mb-1"},ke.default.createElement("span",{className:"capitalize",style:{color:a.textSecondary}},x),ke.default.createElement("span",{className:"font-medium",style:{color:a.textPrimary}},S," (",_,"%)")),ke.default.createElement("div",{className:"h-2 rounded-full overflow-hidden",style:{background:a.trackBg}},ke.default.createElement("div",{className:`h-full ${v(x)} rounded-full transition-all`,style:{width:`${_}%`}})))})):ke.default.createElement("div",{className:"h-32 flex items-center justify-center",style:{color:a.textMuted}},"No runs yet"))),i?.recent_errors?.length>0&&ke.default.createElement("div",{className:"rounded-xl border p-6",style:{background:a.cardBg,borderColor:a.cardBorder}},ke.default.createElement("h3",{className:"font-semibold mb-4",style:{color:a.textPrimary}},"Recent Errors"),ke.default.createElement("div",{className:"space-y-3"},i.recent_errors.map(x=>ke.default.createElement("div",{key:x.id,className:"flex items-start space-x-3 p-3 rounded-lg",style:{background:n?"rgba(220,38,38,0.12)":"#fef2f2"}},ke.default.createElement("svg",{className:"w-5 h-5 text-red-500 flex-shrink-0 mt-0.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ke.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})),ke.default.createElement("div",{className:"flex-1 min-w-0"},ke.default.createElement("p",{className:"text-sm",style:{color:n?"#fca5a5":"#991b1b"}},x.error||"Unknown error"),ke.default.createElement("p",{className:"text-xs mt-1",style:{color:n?"#f87171":"#dc2626"}},new Date(x.created_at).toLocaleString())))))),ke.default.createElement("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-4"},ke.default.createElement("div",{className:"rounded-lg p-4",style:{background:a.innerBg}},ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},"Completed Runs"),ke.default.createElement("p",{className:"text-2xl font-bold",style:{color:a.textPrimary}},i?.summary?.completed_runs||0)),ke.default.createElement("div",{className:"rounded-lg p-4",style:{background:a.innerBg}},ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},"Failed Runs"),ke.default.createElement("p",{className:"text-2xl font-bold",style:{color:a.textPrimary}},i?.summary?.failed_runs||0)),ke.default.createElement("div",{className:"rounded-lg p-4",style:{background:a.innerBg}},ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},"Avg Tokens/Run"),ke.default.createElement("p",{className:"text-2xl font-bold",style:{color:a.textPrimary}},h(i?.summary?.avg_tokens_per_run))),ke.default.createElement("div",{className:"rounded-lg p-4",style:{background:a.innerBg}},ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},"Period"),ke.default.createElement("p",{className:"text-2xl font-bold",style:{color:a.textPrimary}},i?.period_days||30," days")))))}var i$={rose:["#dc2626","rgba(220,38,38,0.18)","#fee2e2"],green:["#16a34a","rgba(22,163,74,0.18)","#dcfce7"],blue:["#2563eb","rgba(37,99,235,0.18)","#dbeafe"],purple:["#7c3aed","rgba(124,58,237,0.18)","#ede9fe"]};function j1({title:e,value:t,icon:r,color:n,colors:a,darkMode:i}){let[o,l,s]=i$[n]||i$.rose;return ke.default.createElement("div",{className:"rounded-xl border p-4",style:{background:a.cardBg,borderColor:a.cardBorder}},ke.default.createElement("div",{className:"flex items-center justify-between"},ke.default.createElement("div",null,ke.default.createElement("p",{className:"text-sm",style:{color:a.textSecondary}},e),ke.default.createElement("p",{className:"text-2xl font-bold mt-1",style:{color:a.textPrimary}},t)),ke.default.createElement("div",{className:"p-3 rounded-lg",style:{background:i?l:s,color:o}},r)))}var Lse=[{id:"config",label:"Configuration"},{id:"instructions",label:"Instructions"},{id:"tools",label:"Tools"},{id:"versions",label:"Versions"},{id:"code",label:"Code"}],s$=[{id:"traces",label:"Traces"},{id:"metrics",label:"Metrics"},{id:"interactions",label:"Interactions"},{id:"evals",label:"Evals"},{id:"feedback",label:"Feedback"}],Bse=s$.map(e=>e.id),o$={success:{light:["#dcfce7","#166534"],dark:["rgba(22,163,74,0.18)","#4ade80"]},warning:{light:["#fef9c3","#854d0e"],dark:["rgba(234,179,8,0.18)","#facc15"]},neutral:{light:["#f3f4f6","#4b5563"],dark:["rgba(255,255,255,0.1)","rgba(255,255,255,0.7)"]},error:{light:["#fee2e2","#991b1b"],dark:["rgba(220,38,38,0.18)","#f87171"]},info:{light:["#dbeafe","#1e40af"],dark:["rgba(59,130,246,0.18)","#60a5fa"]}},$se={active:"success",draft:"warning",archived:"neutral",failed:"error",trial:"info"};function bs({tone:e="neutral",mono:t=!1,darkMode:r,children:n}){let[a,i]=(o$[e]||o$.neutral)[r?"dark":"light"];return ae.default.createElement("span",{style:{background:a,color:i,borderRadius:"999px",padding:"2px 8px",fontSize:"11px",fontWeight:600,fontFamily:t?$e.mono:void 0,whiteSpace:"nowrap"}},n)}function zn({variant:e="secondary",size:t="md",onClick:r,disabled:n,colors:a,title:i,testId:o,children:l}){let u={padding:t==="sm"?"5px 10px":"7px 14px",borderRadius:"8px",fontSize:"13px",fontWeight:500,cursor:n?"not-allowed":"pointer",transition:"background 0.15s ease, border-color 0.15s ease",whiteSpace:"nowrap"},c={primary:{background:n?a.mutedBg:Wr,color:n?a.textMuted:"#ffffff",border:"1px solid transparent"},secondary:{background:"transparent",color:a.textCell,border:`1px solid ${a.inputBorder}`},danger:{background:"transparent",color:"#dc2626",border:"1px solid rgba(220,38,38,0.4)"}};return ae.default.createElement("button",{type:"button",onClick:r,disabled:n,title:i,"data-testid":o,style:{...u,...c[e]||c.secondary}},l)}function l$({tabs:e,active:t,onChange:r,colors:n}){return ae.default.createElement("div",{style:{display:"flex",alignItems:"center"}},e.map(a=>{let i=t===a.id;return ae.default.createElement("button",{key:a.id,type:"button",onClick:()=>r(a.id),style:{padding:"10px 12px",marginBottom:"-1px",background:"none",border:"none",borderBottom:`2px solid ${i?Wr:"transparent"}`,color:i?Wr:n.textSecondary,fontSize:"13px",fontWeight:i?600:500,cursor:"pointer",whiteSpace:"nowrap"}},a.label)}))}function z1({agent:e,meta:t,onSave:r,onDelete:n,onRun:a,onDuplicate:i,onRunReport:o,onBack:l,isLoading:s,initialTab:u}){let{darkMode:c}=At(),d=$a(c),[f,p]=(0,ae.useState)(u||"config"),[m,y]=(0,ae.useState)({name:e.name||"",description:e.description||"",provider:e.provider||"openai",model:e.model||"gpt-4o-mini",instructions:e.instructions||"",action_prompts:e.actionPrompts||e.action_prompts||[],preset_type:e.presetType||e.preset_type||"terminal",appearance:e.appearance||{},instruction_sets:e.instructionSets||e.instruction_sets||[],tools:e.tools||[],mcp_servers:e.mcpServers||e.mcp_servers||[],model_config:e.modelConfig||e.model_config||{temperature:.7},status:e.status||"draft"}),[h,v]=(0,ae.useState)([]),[g,b]=(0,ae.useState)(!1),[x,S]=(0,ae.useState)(""),[w,_]=(0,ae.useState)(td),k=e.telemetry_agent_class||e.telemetryAgentClass||(()=>{let F=e.agent_class_name||e.agentClassName||`${(e.name||"").replace(/[^a-zA-Z0-9]+(.)/g,(N,O)=>O.toUpperCase()).replace(/^./,N=>N.toUpperCase()).replace(/[^a-zA-Z0-9]/g,"")}`;return F.endsWith("Agent")?F:`${F}Agent`})();(0,ae.useEffect)(()=>{let F=!1;return $y(m.provider).then(N=>{F||N.length===0||_(O=>({...O,[m.provider]:N}))}),()=>{F=!0}},[m.provider]),(0,ae.useEffect)(()=>{let F=JSON.stringify(m)!==JSON.stringify({name:e.name||"",description:e.description||"",provider:e.provider||"openai",model:e.model||"gpt-4o-mini",instructions:e.instructions||"",action_prompts:e.actionPrompts||e.action_prompts||[],preset_type:e.presetType||e.preset_type||"terminal",appearance:e.appearance||{},instruction_sets:e.instructionSets||e.instruction_sets||[],tools:e.tools||[],mcp_servers:e.mcpServers||e.mcp_servers||[],model_config:e.modelConfig||e.model_config||{temperature:.7},status:e.status||"draft"});b(F)},[m,e]),(0,ae.useEffect)(()=>{f==="versions"?A():f==="code"&&P()},[f]);let A=async()=>{try{let N=await(await fetch(`/api/agents/${e.id}/versions`)).json();v(N.versions)}catch(F){console.error("Failed to load versions:",F)}},P=async()=>{try{let N=await(await fetch(`/api/agents/${e.id}/export`)).json();S(N.code)}catch(F){console.error("Failed to load code preview:",F)}},K=(F,N)=>{y(O=>({...O,[F]:N}))},z=(F,N)=>{y(O=>{let I=O[F]||[],D=I.includes(N)?I.filter(T=>T!==N):[...I,N];return{...O,[F]:D}})},Q=()=>{r(m)},M=Bse.includes(f);return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"20px"}},ae.default.createElement("div",{style:{display:"flex",alignItems:"flex-start",gap:"12px"}},ae.default.createElement("button",{type:"button",onClick:l,title:"Back to agents",style:{fontFamily:$e.mono,fontSize:"13px",color:d.textSecondary,background:"none",border:"none",cursor:"pointer",padding:"4px 2px",marginTop:"10px"}},"<-"),ae.default.createElement(fr,{size:44}),ae.default.createElement("div",{style:{flex:1,minWidth:0}},ae.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexWrap:"wrap"}},ae.default.createElement("h1",{style:{fontSize:"20px",fontWeight:700,color:d.textPrimary,margin:0}},m.name||"Untitled agent"),ae.default.createElement(bs,{tone:$se[m.status]||"neutral",darkMode:c},m.status),g&&ae.default.createElement(bs,{tone:"info",darkMode:c},"unsaved")),ae.default.createElement("p",{style:{fontSize:"13px",color:d.textSecondary,margin:"4px 0 0"}},m.description||"No description")),ae.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexShrink:0}},i&&ae.default.createElement(zn,{variant:"secondary",colors:d,onClick:i},"Duplicate"),ae.default.createElement(zn,{variant:"primary",colors:d,onClick:a},"Run Agent"))),ae.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"20px",borderBottom:`1px solid ${d.cardBorder}`,overflowX:"auto"}},ae.default.createElement(l$,{tabs:Lse,active:f,onChange:p,colors:d}),ae.default.createElement("div",{style:{width:"1px",height:"18px",background:d.borderStrong,flexShrink:0}}),ae.default.createElement(l$,{tabs:s$,active:f,onChange:p,colors:d})),M?ae.default.createElement("div",null,f==="traces"&&ae.default.createElement(Yu,{agentClass:k,embedded:!0}),f==="metrics"&&ae.default.createElement(XE,{agent:e,embedded:!0}),f==="interactions"&&ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"12px"}},o&&ae.default.createElement("div",{style:{display:"flex",justifyContent:"flex-end"}},ae.default.createElement("button",{type:"button",onClick:o,style:{background:"none",border:"none",cursor:"pointer",fontFamily:$e.mono,fontSize:"11px",color:"#3b82f6"}},"run report ->")),ae.default.createElement(el,{agentId:e.id,embedded:!0})),f==="evals"&&ae.default.createElement(Gv,{embedded:!0,agentId:e.id}),f==="feedback"&&ae.default.createElement(Kse,{colors:d})):ae.default.createElement("div",{style:{background:d.cardBg,border:`1px solid ${d.cardBorder}`,borderRadius:"12px",padding:"20px"}},f==="config"&&ae.default.createElement(Use,{formData:m,updateField:K,providerModels:w,colors:d,darkMode:c,onDelete:n}),f==="instructions"&&ae.default.createElement(Fse,{formData:m,updateField:K,meta:t,toggleArrayItem:z,colors:d}),f==="tools"&&ae.default.createElement(Wse,{formData:m,meta:t,toggleArrayItem:z,colors:d}),f==="versions"&&ae.default.createElement(Hse,{versions:h,agentId:e.id,onRestore:A,colors:d,darkMode:c}),f==="code"&&ae.default.createElement(Vse,{code:x,colors:d})),g&&ae.default.createElement("div",{style:{position:"sticky",bottom:"0",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"12px",background:d.cardBg,border:`1px solid ${d.borderStrong}`,borderRadius:"12px",padding:"10px 14px",boxShadow:"0 4px 16px rgba(0,0,0,0.12)"}},ae.default.createElement("span",{style:{fontSize:"13px",color:d.textSecondary}},"Unsaved changes"),ae.default.createElement("div",{style:{display:"flex",gap:"8px"}},ae.default.createElement(zn,{variant:"primary",size:"sm",colors:d,onClick:Q,disabled:s},s?"Saving\u2026":"Save Changes"))))}var Ji=e=>({display:"block",fontSize:"13px",fontWeight:500,color:e.textCell,marginBottom:"6px"}),al=e=>({width:"100%",padding:"8px 12px",borderRadius:"8px",border:`1px solid ${e.inputBorder}`,background:e.inputBg,color:e.textPrimary,fontFamily:"inherit",fontSize:"13px"}),u$=e=>({fontFamily:$e.mono,fontSize:"11px",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:e.textSecondary});function Use({formData:e,updateField:t,providerModels:r,colors:n,darkMode:a,onDelete:i}){return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"20px"}},ae.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"16px"}},ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Agent Name"),ae.default.createElement("input",{type:"text",value:e.name,onChange:o=>t("name",o.target.value),className:"aa-field",style:al(n)})),ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Preset Type"),ae.default.createElement("select",{value:e.preset_type,onChange:o=>t("preset_type",o.target.value),className:"aa-field",style:al(n)},Object.keys(Rc).map(o=>ae.default.createElement("option",{key:o,value:o},o))))),ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Description"),ae.default.createElement("textarea",{value:e.description,onChange:o=>t("description",o.target.value),rows:3,className:"aa-field",style:{...al(n),resize:"vertical"}})),ae.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"16px"}},ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Provider"),ae.default.createElement("select",{value:e.provider,onChange:o=>{t("provider",o.target.value),t("model",r[o.target.value][0])},className:"aa-field",style:al(n)},Object.keys(r).map(o=>ae.default.createElement("option",{key:o,value:o},o.charAt(0).toUpperCase()+o.slice(1))))),ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Model"),ae.default.createElement("select",{value:e.model,onChange:o=>t("model",o.target.value),className:"aa-field",style:{...al(n),fontFamily:$e.mono}},(r[e.provider]?.includes(e.model)?r[e.provider]:[e.model,...r[e.provider]||[]]).filter(Boolean).map(o=>ae.default.createElement("option",{key:o,value:o},o))))),ae.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"16px"}},ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Temperature"," ",ae.default.createElement("span",{style:{fontFamily:$e.mono,color:n.textSecondary}},e.model_config.temperature)),ae.default.createElement("input",{type:"range",min:"0",max:"1",step:"0.1",value:e.model_config.temperature,onChange:o=>t("model_config",{...e.model_config,temperature:parseFloat(o.target.value)}),style:{width:"100%",accentColor:Wr}})),ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(n)},"Status"),ae.default.createElement("select",{value:e.status,onChange:o=>t("status",o.target.value),className:"aa-field",style:al(n)},ae.default.createElement("option",{value:"draft"},"Draft"),ae.default.createElement("option",{value:"active"},"Active"),ae.default.createElement("option",{value:"archived"},"Archived")))),i&&ae.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"12px",borderTop:`1px solid ${n.cardBorder}`,paddingTop:"16px"}},ae.default.createElement("div",null,ae.default.createElement("div",{style:u$(n)},"Danger zone"),ae.default.createElement("p",{style:{fontSize:"13px",color:n.textMuted,margin:"4px 0 0"}},"Deleting an agent removes its configuration and version history.")),ae.default.createElement(zn,{variant:"danger",size:"sm",colors:n,onClick:i},"Delete Agent")))}function Fse({formData:e,updateField:t,meta:r,toggleArrayItem:n,colors:a}){let i=e.action_prompts||[],o=(u,c)=>{t("action_prompts",i.map((d,f)=>f===u?{...d,...c}:d))},l=()=>{t("action_prompts",[...i,{name:"",prompt:"",expose_as_tool:!1}])},s=u=>{t("action_prompts",i.filter((c,d)=>d!==u))};return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"20px"}},ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(a)},"System Instructions"),ae.default.createElement("textarea",{value:e.instructions,onChange:u=>t("instructions",u.target.value),placeholder:"You are a helpful AI assistant...",rows:12,className:"aa-field",style:{...al(a),fontFamily:$e.mono,resize:"vertical"}})),ae.default.createElement("div",null,ae.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"6px"}},ae.default.createElement("label",{style:{...Ji(a),marginBottom:0}},"Action Prompts"),ae.default.createElement(zn,{variant:"secondary",size:"sm",colors:a,onClick:l},"+ Add action")),ae.default.createElement("p",{style:{fontSize:"12px",color:a.textMuted,margin:"0 0 12px"}},"Named actions run with their prompt stacked below the system instructions. The default ",ae.default.createElement("span",{style:{fontFamily:$e.mono}},"#ask")," action uses the system instructions alone."),i.length>0&&ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"12px"}},i.map((u,c)=>ae.default.createElement("div",{key:c,style:{border:`1px solid ${a.cardBorder}`,borderRadius:"10px",padding:"12px",display:"flex",flexDirection:"column",gap:"8px"}},ae.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},ae.default.createElement("span",{style:{fontFamily:$e.mono,fontSize:"13px",color:a.textMuted}},"#"),ae.default.createElement("input",{type:"text",value:u.name,onChange:d=>o(c,{name:d.target.value.toLowerCase().replace(/[^a-z0-9_]/g,"_")}),placeholder:"action_name",className:"aa-field",style:{...al(a),flex:1,padding:"6px 10px",fontFamily:$e.mono}}),ae.default.createElement("label",{style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"12px",color:a.textSecondary,whiteSpace:"nowrap"}},ae.default.createElement("input",{type:"checkbox",checked:!!u.expose_as_tool,onChange:d=>o(c,{expose_as_tool:d.target.checked}),style:{accentColor:Wr}}),"Expose as tool"),ae.default.createElement("button",{type:"button",onClick:()=>s(c),title:"Remove action",style:{fontFamily:$e.mono,fontSize:"12px",color:a.textMuted,background:"none",border:"none",cursor:"pointer",padding:"4px"}},"[x]")),ae.default.createElement("textarea",{value:u.prompt,onChange:d=>o(c,{prompt:d.target.value}),placeholder:"This action's system prompt, applied on top of the base instructions...",rows:4,className:"aa-field",style:{...al(a),fontFamily:$e.mono,resize:"vertical"}}))))),ae.default.createElement("div",null,ae.default.createElement("label",{style:Ji(a)},"Instruction Sets"),ae.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px"}},r.instructionSets?.map(u=>{let c=e.instruction_sets.includes(u);return ae.default.createElement("button",{key:u,type:"button",onClick:()=>n("instruction_sets",u),style:{padding:"5px 12px",borderRadius:"999px",fontSize:"13px",cursor:"pointer",border:`1px solid ${c?Wr:a.inputBorder}`,background:c?Wr:"transparent",color:c?"#ffffff":a.textCell}},u)}))))}function Wse({formData:e,meta:t,toggleArrayItem:r,colors:n}){let a=l=>({terminal:"$",playwright:">",filesystem:"/",code:"<>",database:"#",slack:"@",fetch:"~",search:"?",edit:"*",translate:"[]",memory:"M",ui:"[=]"})[l]||"[]",i=l=>l.includes("_"),o=l=>i(l)?l.replace(/_/g," "):l;return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"20px"}},ae.default.createElement("p",{style:{fontSize:"13px",color:n.textSecondary,margin:0}},"Select the tools your agent can use."),ae.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(140px, 1fr))",gap:"12px"}},t.availableTools?.map(l=>{let s=e.tools.includes(l);return ae.default.createElement("button",{key:l,type:"button",onClick:()=>r("tools",l),style:{padding:"14px",borderRadius:"12px",textAlign:"center",cursor:"pointer",border:`1px solid ${s?Wr:n.cardBorder}`,background:s?"rgba(239,68,68,0.08)":"transparent",color:s?Wr:n.textCell}},ae.default.createElement("span",{style:{display:"block",fontFamily:$e.mono,fontSize:"20px",marginBottom:"6px"}},a(l)),ae.default.createElement("span",{style:{fontSize:i(l)?"12px":"13px",fontWeight:500,textTransform:"capitalize",fontFamily:i(l)?$e.mono:"inherit"}},o(l)))})),e.tools.length>0&&ae.default.createElement("div",{style:{background:n.innerBg,borderRadius:"10px",padding:"14px"}},ae.default.createElement("div",{style:{...u$(n),marginBottom:"10px"}},"Selected tools \xB7 ",e.tools.length),ae.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px"}},e.tools.map(l=>ae.default.createElement("span",{key:l,style:{fontFamily:$e.mono,fontSize:"11px",padding:"3px 8px",borderRadius:"6px",border:`1px solid ${n.inputBorder}`,color:n.textCell}},a(l)," ",l)))))}function Hse({versions:e,agentId:t,onRestore:r,colors:n,darkMode:a}){let i=async o=>{if(confirm("Restore this version? This will create a new version with the restored configuration."))try{await fetch(`/api/agents/${t}/restore`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({version_id:o})}),r()}catch(l){console.error("Failed to restore version:",l)}};return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"16px"}},ae.default.createElement("p",{style:{fontSize:"13px",color:n.textSecondary,margin:0}},"View and restore previous versions of this agent."),e.length>0?ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"10px"}},e.map(o=>{let l=o.is_latest||o.isLatest;return ae.default.createElement("div",{key:o.id,style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"12px",padding:"14px",borderRadius:"10px",border:`1px solid ${l?Wr:n.cardBorder}`,background:l?"rgba(239,68,68,0.06)":"transparent"}},ae.default.createElement("div",{style:{minWidth:0}},ae.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},ae.default.createElement("span",{style:{fontFamily:$e.mono,fontSize:"13px",fontWeight:600,color:n.textPrimary}},"v",o.version_number||o.versionNumber),l&&ae.default.createElement(bs,{tone:"error",darkMode:a},"current")),ae.default.createElement("p",{style:{fontSize:"13px",color:n.textCell,margin:"4px 0 0"}},o.change_summary||o.changeSummary),ae.default.createElement("p",{style:{fontFamily:$e.mono,fontSize:"11px",color:n.textMuted,margin:"4px 0 0"}},new Date(o.created_at||o.createdAt).toLocaleString())),!l&&ae.default.createElement(zn,{variant:"secondary",size:"sm",colors:n,onClick:()=>i(o.id)},"Restore"))})):ae.default.createElement(c$,{colors:n,glyph:"[#]",title:"No version history",hint:"Saving a change records a new version."}))}function Vse({code:e,colors:t}){let r=()=>{navigator.clipboard.writeText(e)};return ae.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"12px"}},ae.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},ae.default.createElement("p",{style:{fontSize:"13px",color:t.textSecondary,margin:0}},"Generated Ruby code for this agent."),ae.default.createElement(zn,{variant:"secondary",size:"sm",colors:t,onClick:r},"Copy")),ae.default.createElement("pre",{style:{padding:"16px",background:"#111827",color:"#e5e7eb",borderRadius:"10px",overflowX:"auto",fontFamily:$e.mono,fontSize:"12px",lineHeight:1.6,margin:0}},ae.default.createElement("code",null,e||"Loading...")))}function Kse({colors:e}){return ae.default.createElement("div",{style:{background:e.cardBg,border:`1px solid ${e.cardBorder}`,borderRadius:"12px",padding:"20px"}},ae.default.createElement(c$,{colors:e,glyph:"[?]",title:"No feedback recorded",hint:"Thumbs and comments are not captured yet. Once an interaction feedback source is recorded, CSAT and per-trace comments appear here."}))}function c$({colors:e,glyph:t,title:r,hint:n}){return ae.default.createElement("div",{style:{textAlign:"center",padding:"40px 20px"}},ae.default.createElement("div",{style:{fontFamily:$e.mono,fontSize:"20px",color:e.textMuted}},t),ae.default.createElement("div",{style:{fontSize:"14px",fontWeight:600,color:e.textPrimary,marginTop:"10px"}},r),ae.default.createElement("p",{style:{fontSize:"13px",color:e.textMuted,margin:"6px auto 0",maxWidth:"420px"}},n))}var W=re(ne());async function $f(){let e=window.ACTIVE_AGENT_DASHBOARD?.meta?.upgradeUrl;if(!e)throw new Error("This dashboard has no billing configured.");window.location.href=e}var qse={llm:{role:"assistant",label:"LLM"},tool:{role:"tool",label:"Tool"},agent:{role:"developer",label:"Agent"},mcp:{role:"system",label:"MCP"}},Yse=(e,t)=>{let r=qse[e]||{role:e,label:e};return{...mr(r.role,t),label:r.label}},ZE={complete:"success",failed:"error",running:"info",pending:"warning",cancelled:"neutral"},Gse=["Hello, what can you help me with?","Show me a dashboard of last quarter's sales","List the files in the current directory","Explain how this code works"],Xse=["user","assistant","tool"],Zse=1200,Qse=600*1e3,L1=e=>e?e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`:"-",d$=e=>{if(!e)return null;try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}},QE=e=>{let t=new Map;return(e?.logs||[]).filter(r=>r.eid).forEach(r=>{let n=t.get(r.eid)||{eid:r.eid};r.status==="started"?Object.assign(n,r,{input:r.detail,output:n.output}):Object.assign(n,r,{input:n.input,output:r.detail}),t.set(r.eid,n)}),[...t.values()]},ws=e=>e?.context_id??e?.output_metadata?.context_id??null,Xv=e=>e.json().catch(()=>({})),f$=({open:e,color:t})=>W.default.createElement("svg",{className:`w-3.5 h-3.5 mt-1 flex-shrink-0 transition-transform ${e?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",style:{color:t}},W.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"}));function Jse({run:e,darkMode:t,colors:r,expanded:n,onToggle:a}){let i=QE(e),o=S1(t);return W.default.createElement("div",{"data-testid":"runner-activity",className:"space-y-2"},i.map(l=>{let s=!!n[l.eid],u=!!(l.input||l.output),c=Yse(l.kind,t);return W.default.createElement("div",{key:l.eid,"data-testid":"runner-activity-event"},W.default.createElement("div",{className:`flex gap-3 items-start rounded-lg -mx-2 px-2 py-1 ${u?"cursor-pointer":""}`,onClick:u?()=>a(l.eid):void 0,title:u?"Click to inspect input/output":void 0,style:s?{background:t?"rgba(255,255,255,0.04)":"rgba(0,0,0,0.03)"}:{}},W.default.createElement("span",{className:"px-2 py-0.5 rounded text-xs font-medium flex-shrink-0 mt-0.5",style:{background:c.background,color:c.color,minWidth:"72px",textAlign:"center"}},c.label),W.default.createElement("div",{className:"min-w-0 flex-1"},W.default.createElement("div",{className:"text-sm break-words",style:{color:r.textPrimary}},l.label,l.output&&!s&&W.default.createElement("span",{style:{color:r.textMuted}}," \u201C",l.output.slice(0,160),l.output.length>160?"\u2026":"","\u201D")),W.default.createElement("div",{className:"text-xs mt-0.5 font-mono flex items-center gap-2 flex-wrap",style:{color:r.textMuted}},l.status==="started"?W.default.createElement("span",{className:"animate-pulse",style:{color:"#3b82f6"}},"running\u2026"):W.default.createElement("span",{style:l.status==="error"?{color:"#ef4444"}:void 0},l.status==="error"?"failed":"\u2713",l.duration_ms!=null&&` ${L1(l.duration_ms)}`),l.at&&W.default.createElement("span",null,new Date(l.at).toLocaleTimeString()))),u&&W.default.createElement(f$,{open:s,color:r.textMuted})),s&&W.default.createElement("div",{className:"ml-3 mt-1 mb-2 pl-4 space-y-2 border-l-2",style:{borderColor:c.color+"55"}},l.input&&W.default.createElement("div",null,W.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:r.textMuted}},"Input"),W.default.createElement("pre",{style:{...o,whiteSpace:"pre-wrap",maxHeight:"160px",overflowY:"auto"}},d$(l.input))),l.output&&W.default.createElement("div",null,W.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:r.textMuted}},l.status==="error"?"Error":"Result"),W.default.createElement("pre",{style:{...o,whiteSpace:"pre-wrap",maxHeight:"224px",overflowY:"auto",...l.status==="error"?{background:t?"rgba(239,68,68,0.12)":"#fef2f2",color:t?"#fca5a5":"#b91c1c"}:{}}},d$(l.output)))))}))}function Rse({run:e,darkMode:t,colors:r}){return e?W.default.createElement("div",{className:"flex items-center gap-3 flex-wrap text-xs",style:{color:r.textMuted}},W.default.createElement("span",{"data-testid":"runner-status",style:{display:"inline-flex"}},W.default.createElement(bs,{tone:ZE[e.status]||"neutral",darkMode:t},e.status)),e.output_metadata?.model&&W.default.createElement("span",{className:"font-mono",title:"Model that generated this run"},e.output_metadata.provider,"/",e.output_metadata.model),e.duration_ms?W.default.createElement("span",null,L1(e.duration_ms)):null,e.total_tokens?W.default.createElement("span",null,e.total_tokens," tokens"):null,e.trace_id&&W.default.createElement("a",{href:Je(`/traces?trace=${e.trace_id}`),className:"font-mono hover:underline",style:{color:r.textSecondary},title:`${e.trace_id} \u2014 open in Traces`},"trace:",e.trace_id.slice(0,8)," \u2192")):null}function JE({agent:e,onBack:t}){let{darkMode:r}=At(),n=$a(r),a=e.action_prompts||e.actionPrompts||[],i=["ask",...a.map(ie=>ie.name).filter(Boolean)],[o,l]=(0,W.useState)("ask"),[s,u]=(0,W.useState)(""),[c,d]=(0,W.useState)([]),[f,p]=(0,W.useState)(!1),[m,y]=(0,W.useState)([]),[h,v]=(0,W.useState)(null),[g,b]=(0,W.useState)(null),[x,S]=(0,W.useState)(null),[w,_]=(0,W.useState)([]),[k,A]=(0,W.useState)(!1),[P,K]=(0,W.useState)(null),[z,Q]=(0,W.useState)(null),[M,F]=(0,W.useState)(null),[N,O]=(0,W.useState)(null),[I,D]=(0,W.useState)({}),[T,j]=(0,W.useState)(null),[R,U]=(0,W.useState)(!1),[q,ee]=(0,W.useState)(null),[fe,pe]=(0,W.useState)(!1),[Pe,oe]=(0,W.useState)(!1),[Te,V]=(0,W.useState)(null),[J,E]=(0,W.useState)(""),[L,X]=(0,W.useState)(!1),[B,Ae]=(0,W.useState)(null),C=(0,W.useRef)(null),Y=(0,W.useRef)(null),ve=(0,W.useRef)(0),ze=(0,W.useRef)(!0),tt=(0,W.useRef)(null),Lt=(0,W.useRef)([]),ct=(0,W.useRef)(null),Nn=(0,W.useRef)(null),Ln=(0,W.useRef)(null),na=(0,W.useRef)(null),_i=(g?.messages||[]).filter(ie=>Xse.includes(ie.role));(0,W.useEffect)(()=>{tt.current=z},[z]),(0,W.useEffect)(()=>{Lt.current=c},[c]),(0,W.useEffect)(()=>(ze.current=!0,Ru(),()=>{ze.current=!1,ve.current+=1,eo(tt.current),eo({attachments:Lt.current}),Q(null),d([])}),[e.id]),(0,W.useEffect)(()=>{cr(o)},[e.id,o]),(0,W.useEffect)(()=>{Y.current=h,h?Bn(h):(b(null),S(null))},[h]),(0,W.useEffect)(()=>{let ie=Nn.current;ie&&(ie.scrollTop=ie.scrollHeight)},[_i.length,z,P?.logs?.length,Te,M]),(0,W.useEffect)(()=>{if(!Pe)return;let ie=De=>{na.current&&!na.current.contains(De.target)&&oe(!1)};return document.addEventListener("mousedown",ie),()=>document.removeEventListener("mousedown",ie)},[Pe]);let Ru=async()=>{try{let De=await(await fetch(`/api/agents/${e.id}/runs?per_page=10`)).json();_(De.runs||[])}catch(ie){console.error("Failed to load runs:",ie)}},cr=async ie=>{try{let De=await fetch(`/api/agents/${e.id}/conversations?action_name=${encodeURIComponent(ie)}`);if(!De.ok)throw new Error(`HTTP ${De.status}`);let rt=(await De.json()).conversations||[];y(rt),v($r=>$r&&(C.current===$r||rt.some(ui=>ui.id===$r))?$r:rt[0]?.id??null)}catch(De){console.error("Failed to load conversations:",De),y([])}},Bn=async ie=>{try{let De=await fetch(`/api/interactions/${ie}`);if(!De.ok)throw new Error(De.status===404?"Conversation not found":`HTTP ${De.status}`);let qe=await De.json();if(Y.current!==ie)return;b(qe.interaction),S(null)}catch(De){if(Y.current!==ie)return;b(null),S(De.message)}},Ri=async()=>{let ie=await fetch(`/api/agents/${e.id}/conversations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action_name:o})}),De=await Xv(ie);if(!ie.ok||!De.conversation)throw new Error(De.error||`Could not start a conversation (HTTP ${ie.status})`);let qe=De.conversation;return y(rt=>[qe,...rt.filter($r=>$r.id!==qe.id)]),C.current=qe.id,v(qe.id),qe.id},ec=()=>Y.current?Promise.resolve(Y.current):Ri(),X1=ie=>{C.current=null,l(ie)},Vf=()=>{K(null),O(null),D({})},Z1=ie=>{let De=ie?Number(ie):null;De!==Y.current&&Vf(),C.current=De,v(De),F(null)},tc=async()=>{if(!k)try{await Ri(),S(null),F(null),Vf(),eo(tt.current),Q(null),V(null)}catch(ie){S(ie.message)}},eo=ie=>{(ie?.attachments||[]).forEach(De=>{De.url&&De.url.startsWith("blob:")&&URL.revokeObjectURL(De.url)})},rc=ie=>{let De=Array.from(ie||[]).filter(Boolean);De.length!==0&&d(qe=>[...qe,...De.map(rt=>({file:rt,filename:rt.name,content_type:rt.type||"application/octet-stream",byte_size:rt.size,kind:w7(rt),url:rt.type&&rt.type.startsWith("image/")?URL.createObjectURL(rt):null}))])},Q1=ie=>{d(De=>{let qe=De[ie];return qe?.url&&URL.revokeObjectURL(qe.url),De.filter((rt,$r)=>$r!==ie)})},og=(ie,De)=>{A(!1),eo(tt.current),Q(null),Ru();let qe=ws(ie)??De;qe&&(qe!==Y.current?(C.current=qe,v(qe)):Bn(qe),cr(o))},J1=(ie,De)=>{if(!ze.current)return;let qe=++ve.current,rt=Date.now(),$r=async()=>{if(ve.current===qe){try{let ui=await fetch(`/api/runs/${ie}`);if(ui.ok){let $n=await ui.json();if(ve.current!==qe)return;if(K($n.run),!["pending","running"].includes($n.run.status)){og($n.run,De);return}}}catch{}Date.now()-rt<Qse?setTimeout($r,Zse):(A(!1),eo(tt.current),Q(null),K(ui=>ui&&{...ui,status:"failed",error_message:"Timed out waiting for the run to finish."}),O("Timed out waiting for the run to finish."))}};$r()},nc=async({text:ie,files:De,fromComposer:qe=!1})=>{let rt=(ie||"").trim();if(!rt&&De.length===0||k)return;O(null),F(null),V(null),A(!0),D({}),K({status:"pending",input_prompt:rt,output:"",logs:[],started_at:new Date().toISOString()}),eo(tt.current),Q({content:rt||"(see attached files)",attachments:De.map(({file:$n,...ks})=>ks)}),qe&&(u(""),d([]));let $r=Y.current;if(!$r)try{$r=await Ri()}catch($n){O(`${$n.message} \u2014 running without a pinned conversation.`)}let ui=()=>{qe&&(u(rt),d(De)),Q(null)};try{let $n=new FormData;$n.append("prompt",rt),$n.append("action_name",o),$r&&$n.append("params[context_id]",String($r)),De.forEach(({file:sg})=>$n.append("attachments[]",sg,sg.name));let ks=await fetch(`/api/agents/${e.id}/execute`,{method:"POST",body:$n}),oc=await Xv(ks);if(ks.status===402&&oc.upgrade_required){j(oc.usage),K(sg=>({...sg,status:"failed",error_message:oc.message||"Plan limit reached"})),A(!1),ui();return}if(!ks.ok)throw new Error(oc.error||"Run failed");J1(oc.run.id,ws(oc.run)??$r)}catch($n){K(ks=>({...ks,status:"failed",error_message:$n.message})),A(!1),ui()}},Kf=()=>nc({text:s,files:c,fromComposer:!0}),lg=ie=>{!ie||!ie.text||nc({text:ie.text,files:[]})},R1=ie=>{ie.key==="Enter"&&(ie.metaKey||ie.ctrlKey)&&(ie.preventDefault(),Kf())},qf=async(ie,De)=>{let qe=Y.current,rt=await fetch(`/api/interactions/${qe}/messages/${ie.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:De})}),$r=await Xv(rt);if(!rt.ok)throw new Error($r.error||`Could not save the message (HTTP ${rt.status})`);await Bn(qe)},ew=async ie=>{let De=Y.current;try{let qe=await fetch(`/api/interactions/${De}/messages/${ie.id}`,{method:"DELETE"});if(!qe.ok){let rt=await Xv(qe);throw new Error(rt.error||`Could not delete the message (HTTP ${qe.status})`)}S(null),await Bn(De),cr(o)}catch(qe){S(qe.message)}},tw=ie=>{oe(!1),V(ie),E(""),Ae(null)},ac=async()=>{let ie=J.trim();if(!(!ie||L)){X(!0),Ae(null);try{let De=await ec(),qe=await fetch(`/api/interactions/${De}/messages`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({role:Te,content:ie})}),rt=await Xv(qe);if(!qe.ok)throw new Error(rt.error||`Could not add the message (HTTP ${qe.status})`);E(""),V(null),await Bn(De),cr(o)}catch(De){Ae(De.message)}finally{X(!1)}}},rw=async ie=>{let De=ie;if(ws(ie)==null)try{let rt=await fetch(`/api/runs/${ie.id}`);rt.ok&&(De=(await rt.json()).run)}catch(rt){console.error("Failed to load run details:",rt)}let qe=ws(De);if(qe){F(null),qe!==Y.current&&Vf(),C.current=qe;let rt=De.action_name||ie.action_name;rt&&i.includes(rt)&&rt!==o&&l(rt),v(qe)}else F({...De,output:De.output??De.output_preview,error_message:De.error_message??De.error});ct.current?.scrollIntoView({behavior:"smooth",block:"start"})},ye=async()=>{U(!0),ee(null);try{await $f({planSlug:"pro"})}catch(ie){ee(ie.message),U(!1)}},lt=window.ACTIVE_AGENT_DASHBOARD?.meta?.upgradeUrl,Xt=a.find(ie=>ie.name===o)?.prompt,dr=[e.instructions,o==="ask"?null:Xt].map(ie=>(ie||"").trim()).filter(Boolean).join(`
78
78
 
79
79
  `)||g?.instructions||"",vn=m.slice();h&&!vn.some(ie=>ie.id===h)&&vn.unshift({id:h,message_count:_i.length});let As=(s.trim().length>0||c.length>0)&&!k,O_=P&&!k&&P.status==="failed",z$=P&&!k&&P.status==="complete"&&!ws(P)&&!h,ic={background:n.cardBg,border:`1px solid ${n.cardBorder}`,borderRadius:"12px"},T_={borderBottom:`1px solid ${n.cardBorder}`},M_={padding:"6px 10px",borderRadius:"8px",border:`1px solid ${n.inputBorder}`,background:n.inputBg,color:n.textPrimary,fontSize:"13px",fontFamily:$e.mono,maxWidth:"260px"},P_={width:"100%",padding:"10px 12px",borderRadius:"8px",border:`1px solid ${f?Wr:n.inputBorder}`,background:n.inputBg,color:n.textPrimary,fontFamily:"inherit",fontSize:"13px",resize:"vertical"},nw=mr("system",r),L$=S1(r);return W.default.createElement("div",{className:"grid grid-cols-3 gap-6 h-full"},W.default.createElement("div",{className:"col-span-2 flex flex-col gap-4 min-w-0"},T&&W.default.createElement("div",{className:"bg-amber-50 border border-amber-200 rounded-xl p-4 flex items-center justify-between gap-4"},W.default.createElement("div",null,W.default.createElement("p",{className:"font-medium text-amber-900"},"Monthly run limit reached"),W.default.createElement("p",{className:"text-sm text-amber-700 mt-0.5"},"You've used ",T.runs_used," of ",T.runs_limit," runs on the"," ",T.plan||"free"," plan. Upgrade to keep running agents."),q&&W.default.createElement("p",{className:"text-sm text-red-600 mt-1"},q)),W.default.createElement("div",{className:"flex items-center gap-2 flex-shrink-0"},lt&&W.default.createElement("a",{href:lt,className:"px-4 py-2 text-sm text-amber-800 hover:text-amber-900"},"See plans"),W.default.createElement("button",{onClick:ye,disabled:R,className:"px-4 py-2 text-sm bg-amber-500 text-white rounded-lg hover:bg-amber-600 transition-colors disabled:opacity-50"},R?"Redirecting\u2026":"Upgrade to Pro"))),W.default.createElement("div",{"data-testid":"runner-toolbar",style:ic,className:"p-4 flex items-center gap-3 flex-wrap"},W.default.createElement(fr,{size:40}),W.default.createElement("div",{className:"min-w-0"},W.default.createElement("div",{className:"font-semibold truncate",style:{color:n.textPrimary}},e.name),W.default.createElement("div",{className:"text-xs font-mono",style:{color:n.textSecondary}},e.provider," / ",e.model)),W.default.createElement("div",{className:"flex items-center gap-2 flex-wrap ml-auto"},W.default.createElement("select",{"data-testid":"runner-action-select",value:o,onChange:ie=>X1(ie.target.value),disabled:k,className:"aa-field",style:M_,title:"Agent action to invoke"},i.map(ie=>W.default.createElement("option",{key:ie,value:ie},"#",ie))),W.default.createElement("select",{"data-testid":"runner-conversation-select",value:h??"",onChange:ie=>Z1(ie.target.value),disabled:k,className:"aa-field",style:M_,title:"Conversation to continue"},W.default.createElement("option",{value:""},"New conversation on first run"),vn.map(ie=>W.default.createElement("option",{key:ie.id,value:ie.id},"Conversation #",ie.id," \xB7 ",ie.message_count??0," message",ie.message_count===1?"":"s"))),W.default.createElement(zn,{testId:"runner-new-conversation",variant:"secondary",size:"sm",colors:n,onClick:tc,disabled:k,title:"Start an empty conversation for this action"},"+ New conversation"),W.default.createElement(zn,{testId:"runner-back",variant:"secondary",size:"sm",colors:n,onClick:t},"\u2190 Back to editor"))),W.default.createElement("div",{"data-testid":"runner-context",ref:ct,style:ic,className:"flex flex-col overflow-hidden"},W.default.createElement("div",{className:"px-4 py-3 flex items-center justify-between gap-3 flex-wrap",style:T_},W.default.createElement("div",{className:"flex items-center gap-2 min-w-0"},W.default.createElement("h3",{className:"font-medium",style:{color:n.textPrimary}},"Context"),g&&W.default.createElement("span",{className:"text-xs font-mono",style:{color:n.textMuted}},"#",g.id," \xB7 ",_i.length," message",_i.length===1?"":"s")),W.default.createElement("div",{className:"flex items-center gap-3 flex-wrap"},W.default.createElement(Rse,{run:P,darkMode:r,colors:n}),W.default.createElement("div",{className:"relative",ref:na},W.default.createElement(zn,{testId:"runner-add-message",variant:"secondary",size:"sm",colors:n,onClick:()=>oe(ie=>!ie),disabled:k,title:"Insert a message into the context without running"},"+ Add message"),Pe&&W.default.createElement("div",{className:"absolute right-0 mt-1 z-10 py-1 rounded-lg shadow-lg",style:{background:n.cardBg,border:`1px solid ${n.borderStrong}`,minWidth:"180px"}},[["user","runner-add-user-message","User message"],["assistant","runner-add-assistant-message","Assistant message"]].map(([ie,De,qe])=>W.default.createElement("button",{key:ie,type:"button","data-testid":De,onClick:()=>tw(ie),className:"w-full text-left px-3 py-1.5 text-sm hover:bg-black/5",style:{color:n.textCell,background:"none",border:"none",cursor:"pointer"}},qe)))))),W.default.createElement("div",{ref:Nn,className:"p-4 overflow-auto",style:{maxHeight:"60vh"}},W.default.createElement("div",{"data-testid":"runner-system-row",className:"flex gap-3 items-start rounded-lg -mx-2 px-2 py-1 cursor-pointer",onClick:()=>pe(ie=>!ie),title:fe?"Collapse system instructions":"Show system instructions"},W.default.createElement("span",{className:"flex flex-col gap-1 flex-shrink-0 mt-0.5",style:{minWidth:"72px"}},W.default.createElement("span",{className:"px-2 py-0.5 rounded text-xs font-medium",style:{background:nw.background,color:nw.color,textAlign:"center"}},nw.label)),W.default.createElement("div",{className:"min-w-0 flex-1"},dr?fe?W.default.createElement("pre",{style:{...L$,whiteSpace:"pre-wrap",maxHeight:"260px",overflowY:"auto"}},dr):W.default.createElement("div",{className:"text-sm truncate",style:{color:n.textSecondary}},dr.split(`
80
80
  `).find(ie=>ie.trim())||""):W.default.createElement("div",{className:"text-sm",style:{color:n.textMuted}},"No system instructions"),W.default.createElement("div",{className:"text-xs mt-0.5 font-mono",style:{color:n.textMuted}},"read-only \xB7 Edit in the Instructions tab")),W.default.createElement(f$,{open:fe,color:n.textMuted})),x&&W.default.createElement("div",{className:"text-sm mt-3",style:{color:"#dc2626"}},x),_i.length>0?W.default.createElement("div",{className:"mt-3"},W.default.createElement(oi,{messages:_i,darkMode:r,testIdPrefix:"runner-message",onUiAction:lg,onEditMessage:qf,onDeleteMessage:ew})):!z&&!M&&!O_&&W.default.createElement("div",{"data-testid":"runner-context-empty",className:"text-sm text-center py-8",style:{color:n.textMuted}},"No messages yet \u2014 say something below to test the agent as a user."),z&&W.default.createElement("div",{"data-testid":"runner-pending-turn",className:"flex gap-3 items-start rounded-lg -mx-2 px-2 py-1 mt-3"},W.default.createElement("span",{className:"flex flex-col gap-1 flex-shrink-0 mt-0.5",style:{minWidth:"72px"}},W.default.createElement("span",{className:"px-2 py-0.5 rounded text-xs font-medium",style:{background:mr("user",r).background,color:mr("user",r).color,textAlign:"center"}},"User")),W.default.createElement("div",{className:"min-w-0 flex-1"},W.default.createElement("div",{className:"text-sm break-words whitespace-pre-wrap",style:{color:n.textPrimary}},z.content),W.default.createElement(A1,{attachments:z.attachments,darkMode:r}))),P&&(k||QE(P).length>0)&&W.default.createElement("div",{className:"mt-3 space-y-2"},W.default.createElement(Jse,{run:P,darkMode:r,colors:n,expanded:I,onToggle:ie=>D(De=>({...De,[ie]:!De[ie]}))}),k&&W.default.createElement("div",{className:"flex items-center gap-2 text-sm",style:{color:n.textSecondary}},W.default.createElement("span",{className:"animate-pulse"},"\u25CF"),W.default.createElement("span",null,QE(P).length>0?"Working\u2026":"Starting run\u2026"))),N&&W.default.createElement("div",{className:"text-xs mt-3",style:{color:"#d97706"}},N),O_&&P.error_message&&W.default.createElement("div",{className:"mt-3 rounded-lg p-3 text-sm",style:{background:r?"rgba(239,68,68,0.12)":"#fef2f2",color:r?"#fca5a5":"#b91c1c"}},W.default.createElement("div",{className:"font-semibold mb-1"},"Run failed"),W.default.createElement("pre",{className:"whitespace-pre-wrap font-mono text-xs",style:{margin:0}},P.error_message)),z$&&W.default.createElement("div",{className:"mt-3 rounded-lg p-3 text-sm",style:{background:n.innerBg,color:n.textPrimary}},W.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:n.textMuted}},"Output"),W.default.createElement(Ni,{text:P.output||"No output",darkMode:r,onUiAction:lg})),M&&W.default.createElement("div",{"data-testid":"runner-inspected-run",className:"mt-3 rounded-lg p-3",style:{background:n.innerBg,border:`1px solid ${n.cardBorder}`}},W.default.createElement("div",{className:"flex items-center justify-between gap-3 flex-wrap mb-2"},W.default.createElement("div",{className:"flex items-center gap-2 text-xs font-mono",style:{color:n.textMuted}},W.default.createElement("span",{style:{color:n.textPrimary}},"Run #",M.id),W.default.createElement(bs,{tone:ZE[M.status]||"neutral",darkMode:r},M.status),M.output_metadata?.model&&W.default.createElement("span",null,M.output_metadata.provider,"/",M.output_metadata.model),M.duration_ms?W.default.createElement("span",null,L1(M.duration_ms)):null,M.trace_id&&W.default.createElement("a",{href:Je(`/traces?trace=${M.trace_id}`),className:"hover:underline",style:{color:n.textSecondary}},"trace:",M.trace_id.slice(0,8)," \u2192"),W.default.createElement("span",null,"\xB7 no conversation attached")),W.default.createElement("button",{type:"button",onClick:()=>F(null),className:"text-xs font-mono",style:{color:n.textMuted,background:"none",border:"none",cursor:"pointer"},title:"Close"},"[x]")),(M.input_prompt||M.input_preview)&&W.default.createElement("div",{className:"text-sm mb-2 whitespace-pre-wrap",style:{color:n.textSecondary}},M.input_prompt||M.input_preview),M.error_message?W.default.createElement("pre",{className:"whitespace-pre-wrap font-mono text-xs",style:{margin:0,color:r?"#fca5a5":"#b91c1c"}},M.error_message):W.default.createElement("div",{className:"text-sm",style:{color:n.textPrimary}},W.default.createElement(Ni,{text:M.output||"No output",darkMode:r}))),Te&&W.default.createElement("div",{className:"mt-3 rounded-lg p-3",style:{border:`1px dashed ${n.borderStrong}`}},W.default.createElement("div",{className:"flex items-center gap-2 mb-2"},W.default.createElement("span",{className:"px-2 py-0.5 rounded text-xs font-medium",style:{background:mr(Te,r).background,color:mr(Te,r).color}},mr(Te,r).label),W.default.createElement("span",{className:"text-xs",style:{color:n.textMuted}},"Added to the context without running the agent")),W.default.createElement("textarea",{"data-testid":"runner-inline-composer",value:J,onChange:ie=>E(ie.target.value),onKeyDown:ie=>{ie.key==="Escape"&&V(null),ie.key==="Enter"&&(ie.metaKey||ie.ctrlKey)&&ac()},placeholder:Te==="user"?"What the user said\u2026":"What the assistant replied\u2026",rows:3,autoFocus:!0,className:"aa-field",style:{...P_,border:`1px solid ${n.inputBorder}`}}),W.default.createElement("div",{className:"flex items-center gap-2 mt-2 flex-wrap"},W.default.createElement(zn,{testId:"runner-inline-submit",variant:"primary",size:"sm",colors:n,onClick:ac,disabled:L||!J.trim()},L?"Adding\u2026":`Add ${Te} message`),W.default.createElement(zn,{variant:"secondary",size:"sm",colors:n,onClick:()=>V(null),disabled:L},"Cancel"),B&&W.default.createElement("span",{className:"text-xs",style:{color:"#dc2626"}},B))))),W.default.createElement("div",{style:ic,className:"p-4"},W.default.createElement("div",{onDragOver:ie=>{ie.preventDefault(),f||p(!0)},onDragLeave:()=>p(!1),onDrop:ie=>{ie.preventDefault(),p(!1),k||rc(ie.dataTransfer?.files)}},W.default.createElement("textarea",{"data-testid":"runner-prompt",value:s,onChange:ie=>u(ie.target.value),onKeyDown:R1,placeholder:"Message the agent as a user\u2026 (\u2318/Ctrl+Enter to run \xB7 drop files here to attach)",rows:3,disabled:k,className:"aa-field",style:P_})),W.default.createElement(A1,{attachments:c,darkMode:r,testId:"runner-attachment-chip",onRemove:(ie,De)=>Q1(De),removeTestId:"runner-attachment-remove"}),W.default.createElement("div",{className:"flex items-center justify-between gap-3 flex-wrap mt-3"},W.default.createElement("div",{className:"flex items-center gap-3 flex-wrap"},W.default.createElement("input",{ref:Ln,"data-testid":"runner-attach-input",type:"file",multiple:!0,style:{display:"none"},onChange:ie=>{rc(ie.target.files),ie.target.value=""}}),W.default.createElement(zn,{testId:"runner-attach",variant:"secondary",size:"sm",colors:n,onClick:()=>Ln.current?.click(),disabled:k,title:"Attach images, PDFs, or text files to this message"},"\u{1F4CE} Attach files"),W.default.createElement("span",{className:"text-xs",style:{color:n.textMuted}},"Press ",W.default.createElement("kbd",{className:"px-1.5 py-0.5 rounded",style:{background:n.mutedBg,color:n.textSecondary}},"\u2318")," + ",W.default.createElement("kbd",{className:"px-1.5 py-0.5 rounded",style:{background:n.mutedBg,color:n.textSecondary}},"Enter")," to run")),W.default.createElement(zn,{testId:"runner-run",variant:"primary",colors:n,onClick:Kf,disabled:!As},k?W.default.createElement(W.default.Fragment,null,W.default.createElement("span",{className:"animate-spin inline-block",style:{fontFamily:$e.mono}},"[~]")," Running\u2026"):W.default.createElement(W.default.Fragment,null,W.default.createElement("span",{style:{fontFamily:$e.mono}},"[>]")," Run"))))),W.default.createElement("div",{className:"space-y-4 min-w-0"},W.default.createElement("div",{style:ic,className:"p-4"},W.default.createElement("h4",{className:"font-medium mb-3",style:{color:n.textPrimary}},"Configuration"),W.default.createElement("dl",{className:"space-y-2 text-sm"},W.default.createElement("div",{className:"flex justify-between"},W.default.createElement("dt",{style:{color:n.textSecondary}},"Temperature"),W.default.createElement("dd",{style:{color:n.textPrimary}},e.modelConfig?.temperature||e.model_config?.temperature||.7)),W.default.createElement("div",{className:"flex justify-between"},W.default.createElement("dt",{style:{color:n.textSecondary}},"Tools"),W.default.createElement("dd",{style:{color:n.textPrimary}},e.tools?.length||0)),W.default.createElement("div",{className:"flex justify-between items-center"},W.default.createElement("dt",{style:{color:n.textSecondary}},"Status"),W.default.createElement("dd",null,W.default.createElement(bs,{tone:e.status==="active"?"success":"neutral",darkMode:r},e.status)))),e.instructions&&W.default.createElement("div",{className:"mt-3 pt-3",style:{borderTop:`1px solid ${n.cardBorder}`}},W.default.createElement("div",{className:"text-xs mb-1.5",style:{color:n.textSecondary}},"System Instructions"),W.default.createElement("p",{className:"text-xs whitespace-pre-wrap max-h-44 overflow-y-auto font-mono leading-relaxed",style:{color:n.textCell}},e.instructions))),W.default.createElement("div",{style:ic,className:"overflow-hidden"},W.default.createElement("div",{className:"px-4 py-3",style:T_},W.default.createElement("h4",{className:"font-medium",style:{color:n.textPrimary}},"Recent Runs")),W.default.createElement("div",{className:"max-h-64 overflow-auto"},w.length>0?W.default.createElement("div",null,w.map(ie=>W.default.createElement("div",{key:ie.id,"data-testid":"runner-recent-run",className:"px-4 py-3 cursor-pointer hover:bg-black/5",style:{borderBottom:`1px solid ${n.cardBorder}`},onClick:()=>rw(ie),title:ws(ie)?"Open this run\u2019s conversation":"Show this run\u2019s output"},W.default.createElement("div",{className:"flex items-center justify-between mb-1"},W.default.createElement(bs,{tone:ZE[ie.status]||"neutral",darkMode:r},ie.status),W.default.createElement("span",{className:"text-xs",style:{color:n.textMuted}},L1(ie.duration_ms))),W.default.createElement("p",{className:"text-sm truncate",style:{color:n.textCell}},ie.input_preview||ie.input_prompt?.substring(0,50)),W.default.createElement("p",{className:"text-xs mt-1 flex items-center gap-2 flex-wrap",style:{color:n.textMuted}},ie.model&&W.default.createElement("span",{className:"px-1.5 py-0.5 rounded font-mono",style:{background:n.mutedBg,color:n.textSecondary}},ie.model),ws(ie)&&W.default.createElement("span",{className:"font-mono"},"#",ws(ie)),W.default.createElement("span",null,new Date(ie.created_at).toLocaleString()))))):W.default.createElement("div",{className:"px-4 py-8 text-center text-sm",style:{color:n.textMuted}},"No runs yet"))),W.default.createElement("div",{style:ic,className:"p-4"},W.default.createElement("h4",{className:"font-medium mb-3",style:{color:n.textPrimary}},"Example Prompts"),W.default.createElement("div",{className:"space-y-2"},Gse.map(ie=>W.default.createElement("button",{key:ie,type:"button","data-testid":"runner-example-prompt",onClick:()=>u(ie),className:"w-full text-left px-3 py-2 text-sm rounded-lg transition-colors hover:bg-black/5",style:{color:n.textCell,border:`1px solid ${n.cardBorder}`,background:"transparent",cursor:"pointer"}},ie))))))}var Ee=re(ne()),B1=e=>new Date(`${e}T00:00:00`),eue=[{value:7,label:"7 days"},{value:14,label:"14 days"},{value:30,label:"30 days"},{value:90,label:"90 days"}];function RE({onSelectAgent:e}){let[t,r]=(0,Ee.useState)(null),[n,a]=(0,Ee.useState)(!0),[i,o]=(0,Ee.useState)(30);(0,Ee.useEffect)(()=>{l()},[i]);let l=async()=>{a(!0);try{let p=await(await fetch(`/api/analytics?days=${i}`)).json();r(p)}catch(f){console.error("Failed to load analytics:",f)}finally{a(!1)}},s=f=>f?f>=1e6?`${(f/1e6).toFixed(1)}M`:f>=1e3?`${(f/1e3).toFixed(1)}K`:f.toString():"0",u=f=>f?f<1e3?`${f}ms`:`${(f/1e3).toFixed(2)}s`:"-";if(n&&!t)return Ee.default.createElement("div",{className:"flex items-center justify-center h-64"},Ee.default.createElement("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-red-500"}));let c=t?.charts?.runs_by_day?.length>0?Math.max(...t.charts.runs_by_day.map(f=>f.count)):1,d=t?.charts?.tokens_by_day?.length>0?Math.max(...t.charts.tokens_by_day.map(f=>f.tokens)):1;return Ee.default.createElement("div",{className:"space-y-6"},Ee.default.createElement("div",{className:"flex items-center justify-between"},Ee.default.createElement("div",null,Ee.default.createElement("h1",{className:"text-2xl font-bold text-gray-900"},"Analytics Dashboard"),Ee.default.createElement("p",{className:"text-sm text-gray-500"},"Overview of all your agents' performance")),Ee.default.createElement("select",{value:i,onChange:f=>o(Number(f.target.value)),className:"px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-red-500"},eue.map(f=>Ee.default.createElement("option",{key:f.value,value:f.value},"Last ",f.label)))),Ee.default.createElement("div",{className:"grid grid-cols-2 lg:grid-cols-5 gap-4"},Ee.default.createElement(Zv,{title:"Total Agents",value:t?.summary?.total_agents||0,subtitle:`${t?.summary?.active_agents||0} active`,color:"rose"}),Ee.default.createElement(Zv,{title:"Total Runs",value:t?.summary?.total_runs||0,subtitle:`${t?.period_days} day period`,color:"blue"}),Ee.default.createElement(Zv,{title:"Success Rate",value:`${t?.summary?.success_rate||0}%`,subtitle:`${t?.summary?.completed_runs||0} completed`,color:"green"}),Ee.default.createElement(Zv,{title:"Avg Duration",value:u(t?.summary?.avg_duration_ms),subtitle:"per run",color:"purple"}),Ee.default.createElement(Zv,{title:"Total Tokens",value:s(t?.summary?.total_tokens),subtitle:`${s(t?.summary?.avg_tokens_per_run)}/run avg`,color:"amber"})),Ee.default.createElement("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6"},Ee.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-6"},Ee.default.createElement("h3",{className:"font-semibold text-gray-900 mb-4"},"Runs Over Time"),t?.charts?.runs_by_day?.length>0?Ee.default.createElement("div",{className:"h-48"},Ee.default.createElement("div",{className:"flex items-end justify-between h-full space-x-1"},t.charts.runs_by_day.map((f,p)=>Ee.default.createElement("div",{key:f.date,className:"flex-1 flex flex-col items-center group"},Ee.default.createElement("div",{className:"relative w-full"},Ee.default.createElement("div",{className:"w-full bg-red-500 rounded-t transition-all hover:bg-red-600",style:{height:`${f.count/c*150}px`,minHeight:f.count>0?"4px":"0"}}),Ee.default.createElement("div",{className:"absolute -top-8 left-1/2 transform -translate-x-1/2 bg-gray-800 text-white text-xs px-2 py-1 rounded opacity-0 group-hover:opacity-100 transition-opacity whitespace-nowrap z-10"},f.count," runs"))))),Ee.default.createElement("div",{className:"flex justify-between mt-2 text-xs text-gray-400"},Ee.default.createElement("span",null,t.charts.runs_by_day[0]?.date&&B1(t.charts.runs_by_day[0].date).toLocaleDateString("en-US",{month:"short",day:"numeric"})),Ee.default.createElement("span",null,t.charts.runs_by_day[t.charts.runs_by_day.length-1]?.date&&B1(t.charts.runs_by_day[t.charts.runs_by_day.length-1].date).toLocaleDateString("en-US",{month:"short",day:"numeric"})))):Ee.default.createElement("div",{className:"h-48 flex items-center justify-center text-gray-400"},"No runs in this period")),Ee.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-6"},Ee.default.createElement("h3",{className:"font-semibold text-gray-900 mb-4"},"Token Usage Over Time"),t?.charts?.tokens_by_day?.length>0?Ee.default.createElement("div",{className:"h-48"},Ee.default.createElement("div",{className:"flex items-end justify-between h-full space-x-1"},t.charts.tokens_by_day.map((f,p)=>Ee.default.createElement("div",{key:f.date,className:"flex-1 flex flex-col items-center group"},Ee.default.createElement("div",{className:"relative w-full"},Ee.default.createElement("div",{className:"w-full bg-purple-500 rounded-t transition-all hover:bg-purple-600",style:{height:`${f.tokens/d*150}px`,minHeight:f.tokens>0?"4px":"0"}}),Ee.default.createElement("div",{className:"absolute -top-8 left-1/2 transform -translate-x-1/2 bg-gray-800 text-white text-xs px-2 py-1 rounded opacity-0 group-hover:opacity-100 transition-opacity whitespace-nowrap z-10"},s(f.tokens)," tokens"))))),Ee.default.createElement("div",{className:"flex justify-between mt-2 text-xs text-gray-400"},Ee.default.createElement("span",null,t.charts.tokens_by_day[0]?.date&&B1(t.charts.tokens_by_day[0].date).toLocaleDateString("en-US",{month:"short",day:"numeric"})),Ee.default.createElement("span",null,t.charts.tokens_by_day[t.charts.tokens_by_day.length-1]?.date&&B1(t.charts.tokens_by_day[t.charts.tokens_by_day.length-1].date).toLocaleDateString("en-US",{month:"short",day:"numeric"})))):Ee.default.createElement("div",{className:"h-48 flex items-center justify-center text-gray-400"},"No token usage in this period"))),Ee.default.createElement("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6"},Ee.default.createElement("div",{className:"lg:col-span-2 bg-white rounded-xl border border-gray-200 p-6"},Ee.default.createElement("h3",{className:"font-semibold text-gray-900 mb-4"},"Top Agents"),t?.top_agents?.length>0?Ee.default.createElement("div",{className:"space-y-3"},t.top_agents.map((f,p)=>Ee.default.createElement("div",{key:f.id,onClick:()=>e?.(f),className:"flex items-center space-x-4 p-3 rounded-lg hover:bg-gray-50 cursor-pointer transition-colors"},Ee.default.createElement("div",{className:"w-8 h-8 rounded-full bg-red-100 flex items-center justify-center text-red-600 font-semibold"},p+1),Ee.default.createElement("div",{className:"flex-1 min-w-0"},Ee.default.createElement("p",{className:"font-medium text-gray-900 truncate"},f.name),Ee.default.createElement("p",{className:"text-sm text-gray-500"},f.run_count," runs")),Ee.default.createElement("div",{className:"text-right"},Ee.default.createElement("p",{className:"font-medium text-gray-900"},s(f.total_tokens)),Ee.default.createElement("p",{className:"text-xs text-gray-500"},"tokens"))))):Ee.default.createElement("div",{className:"py-8 text-center text-gray-400"},"No agent activity yet")),Ee.default.createElement("div",{className:"space-y-6"},Ee.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-6"},Ee.default.createElement("h3",{className:"font-semibold text-gray-900 mb-4"},"By Provider"),Object.keys(t?.provider_breakdown||{}).length>0?Ee.default.createElement("div",{className:"space-y-3"},Object.entries(t.provider_breakdown).map(([f,p])=>{let m=t?.summary?.total_runs||1,y=(p/m*100).toFixed(1);return Ee.default.createElement("div",{key:f},Ee.default.createElement("div",{className:"flex justify-between text-sm mb-1"},Ee.default.createElement("span",{className:"capitalize text-gray-600"},f),Ee.default.createElement("span",{className:"text-gray-900 font-medium"},p)),Ee.default.createElement("div",{className:"h-2 bg-gray-100 rounded-full overflow-hidden"},Ee.default.createElement("div",{className:"h-full bg-blue-500 rounded-full",style:{width:`${y}%`}})))})):Ee.default.createElement("div",{className:"py-4 text-center text-gray-400 text-sm"},"No data")),Ee.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-6"},Ee.default.createElement("h3",{className:"font-semibold text-gray-900 mb-4"},"Token Usage"),Ee.default.createElement("div",{className:"space-y-4"},Ee.default.createElement("div",{className:"flex justify-between items-center"},Ee.default.createElement("span",{className:"text-sm text-gray-500"},"Input Tokens"),Ee.default.createElement("span",{className:"font-medium text-gray-900"},s(t?.summary?.total_input_tokens))),Ee.default.createElement("div",{className:"flex justify-between items-center"},Ee.default.createElement("span",{className:"text-sm text-gray-500"},"Output Tokens"),Ee.default.createElement("span",{className:"font-medium text-gray-900"},s(t?.summary?.total_output_tokens))),Ee.default.createElement("div",{className:"pt-2 border-t border-gray-100"},Ee.default.createElement("div",{className:"flex justify-between items-center"},Ee.default.createElement("span",{className:"text-sm font-medium text-gray-700"},"Total"),Ee.default.createElement("span",{className:"font-bold text-gray-900"},s(t?.summary?.total_tokens)))))))))}function Zv({title:e,value:t,subtitle:r,color:n}){return Ee.default.createElement("div",{className:`bg-white rounded-xl border border-gray-200 border-l-4 ${{rose:"border-l-red-500",blue:"border-l-blue-500",green:"border-l-green-500",purple:"border-l-purple-500",amber:"border-l-amber-500"}[n]} p-4`},Ee.default.createElement("p",{className:"text-sm text-gray-500"},e),Ee.default.createElement("p",{className:"text-2xl font-bold text-gray-900 mt-1"},t),r&&Ee.default.createElement("p",{className:"text-xs text-gray-400 mt-1"},r))}var G=re(ne());function e_({agent:e,onBack:t}){let{timeWindow:r}=Gi(),[n,a]=(0,G.useState)([]),[i,o]=(0,G.useState)([]),[l,s]=(0,G.useState)(null),[u,c]=(0,G.useState)(null),[d,f]=(0,G.useState)([]),[p,m]=(0,G.useState)("run"),[y,h]=(0,G.useState)(!1),[v,g]=(0,G.useState)(!1),b=(0,G.useRef)(!1),x=(0,G.useRef)(!1),[S,w]=(0,G.useState)("recent"),[_,k]=(0,G.useState)({}),[A,P]=(0,G.useState)(!0),[K,z]=(0,G.useState)(1),[Q,M]=(0,G.useState)(!0),[F,N]=(0,G.useState)(""),[O,I]=(0,G.useState)(""),[D,T]=(0,G.useState)("recent"),j=(0,G.useRef)(null),R=Je(`/agents/${e.id}/interactions`);(0,G.useEffect)(()=>{U()},[e.id,K,F,O,D,r.minutes]),(0,G.useEffect)(()=>{z(1)},[r.minutes]),(0,G.useEffect)(()=>{fetch(`/api/interactions?agent_id=${e.id}`).then(B=>B.json()).then(B=>o(B.interactions||[])).catch(()=>{}).finally(()=>g(!0))},[e.id]),(0,G.useEffect)(()=>{let B=()=>{let Ae=gs(),C=Ae.match(/\/interactions\/runs\/(\d+)/),Y=Ae.match(/\/interactions\/sessions\/(\d+)/);if(C)m("run"),c(null),ee(parseInt(C[1],10),{updateUrl:!1});else if(Y)m("all"),c({id:parseInt(Y[1],10)});else if(Ae.endsWith("/interactions/sessions")||Ae.endsWith("/interactions/all"))Ae.endsWith("/all")&&window.history.replaceState({},"",Ae.replace(/\/all$/,"/sessions")),m("all"),c(null);else{b.current=!1,s(null),c(null),f([]);return}b.current=!0};return B(),window.addEventListener("popstate",B),()=>window.removeEventListener("popstate",B)},[e.id]),(0,G.useEffect)(()=>{b.current||x.current||!y||!v||m(n.length===0&&i.length>0?"all":"run")},[y,v,n.length,i.length]);let U=async()=>{P(!0);try{let B=new URLSearchParams({page:K.toString(),per_page:"20",minutes:String(r.minutes)});F&&B.append("status",F),O&&B.append("source",O),D!=="recent"&&B.append("sort",D);let C=await(await fetch(`/api/agents/${e.id}/runs?${B}`)).json();a(K===1?C.runs:Y=>[...Y,...C.runs]),M(C.runs.length===20)}catch(B){console.error("Failed to load runs:",B)}finally{P(!1),h(!0)}},q=B=>{window.location.pathname!==B&&window.history.pushState({},"",B)},ee=async(B,{updateUrl:Ae=!0}={})=>{try{let Y=await(await fetch(`/api/runs/${B}`)).json();s(Y.run),f(Y.messages||[]),m("run"),c(null),Ae&&q(`${R}/runs/${B}`)}catch(C){console.error("Failed to load run details:",C)}},fe=B=>{if(B.source==="reported"){let Ae=B.trace_id||String(B.id).replace(/^trace-/,"");window.history.pushState(window.history.state,"",Je(`/traces/${Ae}`)),window.dispatchEvent(new CustomEvent("dashboard:navigate",{detail:{path:Je(`/traces/${Ae}`)}}));return}ee(B.record_id||B.id)},pe=()=>{s(null),c(null),f([]),m("run"),q(R)},Pe=B=>{m("all"),B?(c({id:B.id,name:B.display_name}),q(`${R}/sessions/${B.id}`)):(c(null),q(`${R}/sessions`))},oe=B=>{x.current=!0,m(B),q(B==="all"?u?`${R}/sessions/${u.id}`:`${R}/sessions`:l?`${R}/runs/${l.id}`:R)},Te=u?u.name||i.find(B=>B.id===u.id)?.display_name||`Session #${u.id}`:null,V=()=>{let B=new Map;n.forEach(Y=>{let ve=`${Y.model||"unknown"}|${Y.instructions_digest||"none"}`;B.has(ve)||B.set(ve,{key:ve,model:Y.model,instructionsDigest:Y.instructions_digest,instructionsVersion:Y.instructions_version,instructionsCodename:Y.instructions_codename,instructionsPreview:Y.instructions_preview,runs:[]}),B.get(ve).runs.push(Y)});let Ae=[...B.values()].map(Y=>({...Y,count:Y.runs.length,completed:Y.runs.filter(ve=>ve.status==="complete").length,failed:Y.runs.filter(ve=>ve.status==="failed").length,totalTokens:Y.runs.reduce((ve,ze)=>ve+(ze.tokens||0),0),avgTokens:Y.runs.reduce((ve,ze)=>ve+(ze.tokens||0),0)/Y.runs.length,avgDuration:Y.runs.reduce((ve,ze)=>ve+(ze.duration_ms||0),0)/Y.runs.length,latest:Y.runs[0],sortedRuns:[...Y.runs].sort((ve,ze)=>(ze.duration_ms||0)-(ve.duration_ms||0))}));Ae.sort((Y,ve)=>S==="longest"?ve.avgDuration-Y.avgDuration:new Date(ve.latest.created_at)-new Date(Y.latest.created_at));let C={runs:n.length,completed:n.filter(Y=>Y.status==="complete").length,tokens:n.reduce((Y,ve)=>Y+(ve.tokens||0),0),avgDuration:n.length?n.reduce((Y,ve)=>Y+(ve.duration_ms||0),0)/n.length:0,models:[...new Set(n.map(Y=>Y.model).filter(Boolean))]};return{cohorts:Ae,totals:C}},J=B=>{switch(B){case"complete":return"bg-green-100 text-green-700";case"failed":return"bg-red-100 text-red-700";case"running":return"bg-blue-100 text-blue-700";case"pending":return"bg-yellow-100 text-yellow-700";case"cancelled":return"bg-gray-100 text-gray-500";default:return"bg-gray-100 text-gray-500"}},E=B=>B?B<1e3?`${B}ms`:B<6e4?`${(B/1e3).toFixed(1)}s`:`${Math.floor(B/6e4)}m ${Math.floor(B%6e4/1e3)}s`:"-",L=B=>B==null?"\u2014":B===0?"$0":B<.01?`$${B.toFixed(4)}`:`$${B.toFixed(2)}`,X=B=>{let Ae=new Date(B),Y=new Date-Ae,ve=Math.floor(Y/6e4),ze=Math.floor(Y/36e5),tt=Math.floor(Y/864e5);return ve<1?"Just now":ve<60?`${ve}m ago`:ze<24?`${ze}h ago`:tt<7?`${tt}d ago`:Ae.toLocaleDateString()};return G.default.createElement("div",{className:"flex h-full"},G.default.createElement("div",{className:"w-80 border-r border-gray-200 flex flex-col bg-white"},G.default.createElement("div",{className:"p-4 border-b border-gray-200"},G.default.createElement("div",{className:"flex items-center space-x-3 mb-4"},G.default.createElement("button",{onClick:t,className:"p-1 text-gray-400 hover:text-gray-600 transition-colors"},G.default.createElement("svg",{className:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},G.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 19l-7-7 7-7"}))),G.default.createElement("div",null,G.default.createElement("h2",{className:"font-semibold text-gray-900"},"Agent Interactions"),G.default.createElement("p",{className:"text-sm text-gray-500"},e.name))),G.default.createElement("div",{className:"mb-2"},G.default.createElement(Xi,{compact:!0})),G.default.createElement("div",{className:"flex bg-gray-100 rounded-lg p-1 mb-2 text-sm"},[{value:"",label:"All"},{value:"dashboard",label:"Dashboard"},{value:"reported",label:"Reported"}].map(B=>G.default.createElement("button",{key:B.value||"all",onClick:()=>{I(B.value),z(1)},className:`flex-1 px-2 py-1 rounded-md transition-colors ${O===B.value?"bg-white shadow text-gray-900":"text-gray-600"}`,title:B.value==="dashboard"?"Executions started from this dashboard":B.value==="reported"?"Executions reported by your app via telemetry":"Every execution, however it started"},B.label))),G.default.createElement("select",{value:F,onChange:B=>{N(B.target.value),z(1)},className:"w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-red-500"},G.default.createElement("option",{value:""},"All statuses"),G.default.createElement("option",{value:"complete"},"Completed"),G.default.createElement("option",{value:"failed"},"Failed"),G.default.createElement("option",{value:"running"},"Running"),G.default.createElement("option",{value:"cancelled"},"Cancelled")),G.default.createElement("select",{value:D,onChange:B=>{T(B.target.value),z(1)},className:"w-full mt-2 px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-red-500",title:"Rank these executions"},G.default.createElement("option",{value:"recent"},"Most recent"),G.default.createElement("option",{value:"longest"},"Longest running"),G.default.createElement("option",{value:"cost"},"Highest cost"),G.default.createElement("option",{value:"tokens"},"Most tokens"))),G.default.createElement("div",{className:"flex-1 overflow-auto"},A&&n.length===0?G.default.createElement("div",{className:"flex items-center justify-center h-32"},G.default.createElement("div",{className:"animate-spin rounded-full h-6 w-6 border-b-2 border-red-500"})):n.length>0?G.default.createElement(G.default.Fragment,null,n.map(B=>{let Ae=B.source==="reported";return G.default.createElement("div",{key:B.id,onClick:()=>fe(B),title:Ae?"Reported by your app \u2014 opens its trace":"Started from this dashboard",className:`p-4 border-b border-gray-100 cursor-pointer transition-colors ${!Ae&&l?.id===B.id?"bg-red-50 border-l-4 border-l-red-500":"hover:bg-gray-50"}`},G.default.createElement("div",{className:"flex items-center justify-between mb-2 gap-2"},G.default.createElement("span",{className:`px-2 py-0.5 rounded-full text-xs font-medium ${J(B.status)}`},B.status),G.default.createElement("div",{className:"flex items-center gap-2"},G.default.createElement("span",{className:`px-1.5 py-0.5 rounded text-[10px] uppercase tracking-wide ${Ae?"bg-blue-100 text-blue-700":"bg-gray-100 text-gray-600"}`},Ae?"reported":"dashboard"),G.default.createElement("span",{className:"text-xs text-gray-400"},X(B.created_at||B.occurred_at)))),G.default.createElement("p",{className:"text-sm text-gray-700 truncate"},B.input_preview||B.input_prompt?.substring(0,60)||(Ae?`${B.action_name||"execution"} \xB7 trace ${String(B.trace_id||"").slice(0,8)}`:"No input")),G.default.createElement("div",{className:"flex items-center space-x-3 mt-2 text-xs text-gray-400 flex-wrap gap-y-1"},B.model&&G.default.createElement("span",{className:"px-1.5 py-0.5 rounded bg-indigo-50 text-indigo-700 font-mono"},B.model),G.default.createElement("span",{className:D==="longest"?"text-gray-700 font-medium":void 0},E(B.duration_ms)),!!B.tokens&&G.default.createElement("span",{className:D==="tokens"?"text-gray-700 font-medium":void 0},B.tokens," tokens"),B.cost!=null&&G.default.createElement("span",{className:D==="cost"?"text-gray-700 font-medium":void 0,title:"Estimated from token counts at this model's published rates"},L(B.cost))))}),Q&&G.default.createElement("button",{onClick:()=>z(B=>B+1),disabled:A,className:"w-full py-3 text-sm text-red-600 hover:bg-gray-50 transition-colors"},A?"Loading...":"Load More")):G.default.createElement("div",{className:"p-8 text-center text-gray-400"},G.default.createElement("svg",{className:"w-12 h-12 mx-auto mb-3 text-gray-300",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},G.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"})),G.default.createElement("p",null,"No conversations yet")))),G.default.createElement("div",{className:"flex-1 flex flex-col bg-gray-50"},G.default.createElement("div",{className:"px-4 py-2 bg-white border-b border-gray-100 flex items-center gap-1.5 text-xs text-gray-500"},G.default.createElement("button",{onClick:t,className:"hover:text-gray-900 hover:underline transition-colors"},e.name),G.default.createElement("span",{className:"text-gray-300"},"/"),p==="all"||l?G.default.createElement(G.default.Fragment,null,G.default.createElement("button",{onClick:pe,className:"hover:text-gray-900 hover:underline transition-colors"},"Interactions"),G.default.createElement("span",{className:"text-gray-300"},"/"),p==="all"?u?G.default.createElement(G.default.Fragment,null,G.default.createElement("button",{onClick:()=>Pe(null),className:"hover:text-gray-900 hover:underline transition-colors"},"Sessions"),G.default.createElement("span",{className:"text-gray-300"},"/"),G.default.createElement("span",{className:"text-gray-900 font-medium"},Te)):G.default.createElement("span",{className:"text-gray-900 font-medium"},"Sessions"):G.default.createElement("span",{className:"text-gray-900 font-medium"},"Run #",l.id)):G.default.createElement("span",{className:"text-gray-900 font-medium"},"Interactions")),G.default.createElement("div",{className:"p-3 bg-white border-b border-gray-200 flex items-center justify-between"},G.default.createElement("div",{className:"flex bg-gray-100 rounded-lg p-1"},G.default.createElement("button",{onClick:()=>oe("run"),className:`px-3 py-1 text-sm rounded-md transition-colors ${p==="run"?"bg-white shadow text-gray-900":"text-gray-600"}`},"Selected run"),G.default.createElement("button",{onClick:()=>oe("all"),className:`px-3 py-1 text-sm rounded-md transition-colors ${p==="all"?"bg-white shadow text-gray-900":"text-gray-600"}`},"Sessions")),p==="run"&&l&&G.default.createElement("span",{className:`px-3 py-1 rounded-full text-sm font-medium ${J(l.status)}`},l.status)),p==="all"?G.default.createElement("div",{className:"flex-1 overflow-auto p-4 space-y-4"},(()=>{let{totals:B}=V();return G.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-4 space-y-3"},G.default.createElement("div",{className:"flex items-center gap-3"},G.default.createElement(fr,{size:40}),G.default.createElement("div",null,G.default.createElement("h3",{className:"font-semibold text-gray-900"},e.name),G.default.createElement("p",{className:"text-xs text-gray-500"},u?`${Te} \u2014 one persisted interaction stream`:"Sessions group this agent\u2019s runs into persisted interaction streams"))),G.default.createElement("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3"},G.default.createElement("div",{className:"bg-gray-50 rounded-lg p-3"},G.default.createElement("p",{className:"text-xs text-gray-500"},"Runs"),G.default.createElement("p",{className:"text-lg font-bold text-gray-900"},B.runs)),G.default.createElement("div",{className:"bg-gray-50 rounded-lg p-3"},G.default.createElement("p",{className:"text-xs text-gray-500"},"Success"),G.default.createElement("p",{className:"text-lg font-bold text-gray-900"},B.runs?Math.round(B.completed/B.runs*100):0,"%")),G.default.createElement("div",{className:"bg-gray-50 rounded-lg p-3"},G.default.createElement("p",{className:"text-xs text-gray-500"},"Avg Duration"),G.default.createElement("p",{className:"text-lg font-bold text-gray-900"},E(Math.round(B.avgDuration)))),G.default.createElement("div",{className:"bg-gray-50 rounded-lg p-3"},G.default.createElement("p",{className:"text-xs text-gray-500"},"Tokens"),G.default.createElement("p",{className:"text-lg font-bold text-gray-900"},B.tokens.toLocaleString()))))})(),G.default.createElement(el,{agentId:e.id,embedded:!0,selectedSessionId:u?.id??null,onSelectSession:Pe})):l?G.default.createElement(G.default.Fragment,null,G.default.createElement("div",{className:"p-4 bg-white border-b border-gray-200"},G.default.createElement("div",{className:"flex items-center space-x-3"},G.default.createElement(fr,{size:40}),G.default.createElement("div",null,G.default.createElement("h3",{className:"font-medium text-gray-900"},e.name," \u2014 Run #",l.id),G.default.createElement("p",{className:"text-xs text-gray-500"},new Date(l.created_at).toLocaleString())))),G.default.createElement("div",{ref:j,className:"flex-1 overflow-auto p-6"},G.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm p-4"},d.length>0?G.default.createElement(oi,{messages:d,darkMode:!1}):G.default.createElement(oi,{darkMode:!1,messages:[{id:`run-${l.id}-input`,role:"user",content:l.input_prompt||l.input_preview,created_at:l.created_at},{id:`run-${l.id}-output`,role:"assistant",content:l.error_message||l.output||l.output_preview||"No response",created_at:l.completed_at||l.created_at}]}))),G.default.createElement("div",{className:"p-4 bg-white border-t border-gray-200"},G.default.createElement("div",{className:"flex items-center justify-center space-x-8 text-sm text-gray-500"},G.default.createElement("span",null,"Duration: ",E(l.duration_ms)),l.total_tokens&&G.default.createElement("span",null,"Tokens: ",l.total_tokens),l.input_tokens&&l.output_tokens&&G.default.createElement("span",null,"Input: ",l.input_tokens," / Output: ",l.output_tokens),l.trace_id&&G.default.createElement("a",{href:Je(`/traces?trace=${l.trace_id}`),className:"font-mono text-xs text-blue-500 hover:underline",title:`${l.trace_id} \u2014 open in Traces`},"trace:",l.trace_id.slice(0,8)," \u2192")))):(()=>{let{cohorts:B,totals:Ae}=V();return B.length===0?G.default.createElement("div",{className:"flex-1 flex items-center justify-center"},G.default.createElement("div",{className:"text-center text-gray-400"},G.default.createElement(fr,{size:100}),G.default.createElement("p",{className:"mt-4"},"No runs yet \u2014 run the agent to build its report"))):G.default.createElement("div",{className:"flex-1 overflow-auto p-6 space-y-5"},G.default.createElement("div",{className:"flex items-center gap-3"},G.default.createElement(fr,{size:40}),G.default.createElement("div",null,G.default.createElement("h3",{className:"font-semibold text-gray-900"},"Agent Report"),G.default.createElement("p",{className:"text-xs text-gray-500"},"Recent activity for ",e.name," \u2014 select a run for its full interaction"))),G.default.createElement("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3"},G.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-3"},G.default.createElement("p",{className:"text-xs text-gray-500"},"Runs"),G.default.createElement("p",{className:"text-xl font-bold text-gray-900"},Ae.runs)),G.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-3"},G.default.createElement("p",{className:"text-xs text-gray-500"},"Success"),G.default.createElement("p",{className:"text-xl font-bold text-gray-900"},Ae.runs?Math.round(Ae.completed/Ae.runs*100):0,"%")),G.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-3"},G.default.createElement("p",{className:"text-xs text-gray-500"},"Avg Duration"),G.default.createElement("p",{className:"text-xl font-bold text-gray-900"},E(Math.round(Ae.avgDuration)))),G.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-3"},G.default.createElement("p",{className:"text-xs text-gray-500"},"Tokens"),G.default.createElement("p",{className:"text-xl font-bold text-gray-900"},Ae.tokens.toLocaleString()))),Ae.models.length>0&&G.default.createElement("div",{className:"flex items-center gap-2 flex-wrap text-xs"},G.default.createElement("span",{className:"text-gray-500"},"Models used:"),Ae.models.map(C=>G.default.createElement("span",{key:C,className:"px-1.5 py-0.5 rounded bg-indigo-50 text-indigo-700 font-mono"},C))),i.length>0&&G.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 overflow-hidden"},G.default.createElement("div",{className:"px-4 py-3 border-b border-gray-100"},G.default.createElement("span",{className:"text-xs uppercase tracking-wide text-gray-400"},"Sessions \u2014 grouped interaction streams")),G.default.createElement("div",{className:"divide-y divide-gray-100"},i.map(C=>G.default.createElement("div",{key:C.id,className:"px-4 py-3 hover:bg-gray-50 cursor-pointer flex items-center justify-between gap-3",onClick:()=>Pe(C),title:"Open this session's interaction stream"},G.default.createElement("div",{className:"flex items-center gap-2 min-w-0",title:C.display_name},G.default.createElement("span",{className:"px-2 py-0.5 text-xs font-medium bg-blue-100 text-blue-700 rounded flex-shrink-0"},"SESSION"),G.default.createElement("span",{className:"text-sm text-gray-900 truncate"},C.agent?.name||C.agent_name),C.action_name&&G.default.createElement("span",{className:"px-1.5 py-0.5 rounded bg-purple-50 text-purple-700 font-mono text-xs flex-shrink-0"},"#",C.action_name)),G.default.createElement("div",{className:"flex items-center gap-3 text-xs text-gray-400 flex-shrink-0"},G.default.createElement("span",null,C.message_count," messages"),G.default.createElement("span",null,(C.tokens?.total||0).toLocaleString()," tokens"),G.default.createElement("span",null,X(C.last_activity_at))))))),G.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 overflow-hidden"},G.default.createElement("div",{className:"px-4 py-3 border-b border-gray-100 flex items-center justify-between"},G.default.createElement("span",{className:"text-xs uppercase tracking-wide text-gray-400"},"Interactions by instructions \xD7 model"),G.default.createElement("select",{value:S,onChange:C=>w(C.target.value),className:"text-xs border border-gray-200 rounded px-2 py-1 text-gray-600"},G.default.createElement("option",{value:"recent"},"Most recent"),G.default.createElement("option",{value:"longest"},"Longest interactions"))),G.default.createElement("div",{className:"divide-y divide-gray-100"},B.map(C=>G.default.createElement("div",{key:C.key},G.default.createElement("div",{className:"px-4 py-3 hover:bg-gray-50 cursor-pointer",onClick:()=>k(Y=>({...Y,[C.key]:!Y[C.key]})),title:"Show this configuration's runs"},G.default.createElement("div",{className:"flex items-center gap-2 flex-wrap"},G.default.createElement("span",{className:"px-1.5 py-0.5 rounded bg-indigo-50 text-indigo-700 font-mono text-xs"},C.model||"unknown model"),G.default.createElement("span",{className:"text-xs text-gray-400 font-mono",title:C.instructionsDigest?`sha:${C.instructionsDigest}`:void 0},"instructions"," ",C.instructionsDigest?[C.instructionsVersion,C.instructionsCodename||C.instructionsDigest].filter(Boolean).join(" \xB7 "):"n/a")),C.instructionsPreview&&G.default.createElement("p",{className:"text-xs text-gray-500 mt-1 truncate"},C.instructionsPreview),G.default.createElement("div",{className:"flex items-center gap-3 mt-1.5 text-xs text-gray-400 flex-wrap gap-y-1"},G.default.createElement("span",null,C.count," run",C.count>1?"s":""),G.default.createElement("span",{className:C.failed>0?"text-red-500":"text-green-600"},C.count?Math.round(C.completed/C.count*100):0,"% success"),G.default.createElement("span",null,"avg ",E(Math.round(C.avgDuration))),G.default.createElement("span",null,"avg ",Math.round(C.avgTokens).toLocaleString()," tokens"),G.default.createElement("span",null,"last ",X(C.latest.created_at)))),_[C.key]&&G.default.createElement("div",{className:"bg-gray-50 divide-y divide-gray-100 border-t border-gray-100"},C.sortedRuns.map(Y=>G.default.createElement("div",{key:Y.id,className:"px-6 py-2 hover:bg-gray-100 cursor-pointer",onClick:()=>ee(Y.id),title:"Open this run's interaction"},G.default.createElement("p",{className:"text-xs text-gray-700 truncate"},Y.input_preview||"No input"),G.default.createElement("div",{className:"flex items-center gap-3 mt-0.5 text-[11px] text-gray-400"},G.default.createElement("span",{className:Y.status==="failed"?"text-red-500":""},Y.status),G.default.createElement("span",null,E(Y.duration_ms)),Y.tokens&&G.default.createElement("span",null,Y.tokens.toLocaleString()," tokens"),G.default.createElement("span",null,X(Y.created_at)))))))))))})()))}var je=re(ne());var tue={productivity:"[+]",development:"<>",research:"[?]",creative:"[*]",data:"[#]",automation:"[>]"};function t_({onUseTemplate:e,onClose:t}){let[r,n]=(0,je.useState)([]),[a,i]=(0,je.useState)([]),[o,l]=(0,je.useState)(""),[s,u]=(0,je.useState)(null),[c,d]=(0,je.useState)(!0),[f,p]=(0,je.useState)(!1),[m,y]=(0,je.useState)(null);(0,je.useEffect)(()=>{h()},[o]);let h=async()=>{d(!0);try{let g=new URLSearchParams;o&&g.append("category",o);let x=await(await fetch(`/api/templates?${g}`)).json();n(x.templates),i(x.categories)}catch(g){console.error("Failed to load templates:",g)}finally{d(!1)}},v=async g=>{p(!0),y(null);try{let b=await fetch(`/api/templates/${g.id}/use`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:g.name})});if(b.ok){let x=await b.json();e(x.agent)}else{let x=`Could not create the agent (HTTP ${b.status})`;try{let S=await b.json(),w=S.errors||S.error;w&&(x=Array.isArray(w)?w.join(", "):String(w))}catch{}y(x)}}catch(b){console.error("Failed to create agent from template:",b),y("Could not create the agent \u2014 check your connection and try again.")}finally{p(!1)}};return je.default.createElement("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4"},je.default.createElement("div",{className:"bg-white rounded-2xl w-full max-w-5xl max-h-[90vh] flex flex-col overflow-hidden"},je.default.createElement("div",{className:"px-6 py-4 border-b border-gray-200 flex items-center justify-between"},je.default.createElement("div",null,je.default.createElement("h2",{className:"text-xl font-semibold text-gray-900"},"Template Library"),je.default.createElement("p",{className:"text-sm text-gray-500"},"Start with a pre-configured agent template")),je.default.createElement("button",{onClick:t,className:"p-2 text-gray-400 hover:text-gray-600 transition-colors"},je.default.createElement("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},je.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})))),je.default.createElement("div",{className:"flex-1 flex overflow-hidden"},je.default.createElement("div",{className:"w-48 border-r border-gray-200 p-4 flex-shrink-0"},je.default.createElement("h3",{className:"text-xs font-semibold text-gray-400 uppercase mb-3"},"Categories"),je.default.createElement("div",{className:"space-y-1"},je.default.createElement("button",{onClick:()=>l(""),className:`w-full text-left px-3 py-2 rounded-lg text-sm transition-colors ${o?"text-gray-600 hover:bg-gray-50":"bg-red-50 text-red-600"}`},"All Templates"),a.map(g=>je.default.createElement("button",{key:g,onClick:()=>l(g),className:`w-full text-left px-3 py-2 rounded-lg text-sm flex items-center space-x-2 transition-colors ${o===g?"bg-red-50 text-red-600":"text-gray-600 hover:bg-gray-50"}`},je.default.createElement("span",null,tue[g]||"\u{1F4E6}"),je.default.createElement("span",{className:"capitalize"},g))))),je.default.createElement("div",{className:"flex-1 p-6 overflow-auto"},c?je.default.createElement("div",{className:"flex items-center justify-center h-full"},je.default.createElement("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-red-500"})):r.length>0?je.default.createElement("div",{className:"grid grid-cols-2 lg:grid-cols-3 gap-4"},r.map(g=>je.default.createElement("div",{key:g.id,onClick:()=>u(g),className:`bg-white rounded-xl border-2 p-4 cursor-pointer transition-all hover:shadow-lg ${s?.id===g.id?"border-red-500 ring-2 ring-red-100":"border-gray-200 hover:border-gray-300"}`},je.default.createElement("div",{className:"flex items-start space-x-3"},je.default.createElement("div",{className:"flex-shrink-0"},je.default.createElement(fr,{size:60})),je.default.createElement("div",{className:"flex-1 min-w-0"},je.default.createElement("div",{className:"flex items-center space-x-2"},je.default.createElement("span",{className:"text-lg"},g.icon),je.default.createElement("h3",{className:"font-medium text-gray-900 truncate"},g.name)),je.default.createElement("p",{className:"text-xs text-gray-500 mt-1 line-clamp-2"},g.description),je.default.createElement("div",{className:"flex items-center space-x-2 mt-2"},je.default.createElement("span",{className:"text-xs px-2 py-0.5 bg-gray-100 rounded capitalize"},g.category),g.featured&&je.default.createElement("span",{className:"text-xs px-2 py-0.5 bg-yellow-100 text-yellow-700 rounded"},"Featured"))))))):je.default.createElement("div",{className:"text-center py-12 text-gray-500"},"No templates found in this category")),s&&je.default.createElement("div",{className:"w-80 border-l border-gray-200 p-6 flex-shrink-0 bg-gray-50 overflow-auto"},je.default.createElement("div",{className:"flex justify-center mb-4"},je.default.createElement(fr,{size:120})),je.default.createElement("h3",{className:"text-lg font-semibold text-gray-900 text-center"},s.name),je.default.createElement("p",{className:"text-sm text-gray-500 text-center mt-1"},s.description),je.default.createElement("div",{className:"mt-6 space-y-4"},je.default.createElement("div",null,je.default.createElement("span",{className:"text-xs font-medium text-gray-500 uppercase"},"Provider / Model"),je.default.createElement("p",{className:"text-sm text-gray-900"},s.provider," / ",s.model)),s.tools?.length>0&&je.default.createElement("div",null,je.default.createElement("span",{className:"text-xs font-medium text-gray-500 uppercase"},"Tools"),je.default.createElement("div",{className:"flex flex-wrap gap-1 mt-1"},s.tools.map(g=>je.default.createElement("span",{key:g,className:"text-xs px-2 py-0.5 bg-red-100 text-red-700 rounded"},g)))),je.default.createElement("div",null,je.default.createElement("span",{className:"text-xs font-medium text-gray-500 uppercase"},"Usage"),je.default.createElement("p",{className:"text-sm text-gray-900"},s.usage_count," agents created"))),je.default.createElement("button",{onClick:()=>v(s),disabled:f,className:"w-full mt-6 px-4 py-2 bg-red-500 text-white rounded-lg hover:bg-red-600 transition-colors disabled:opacity-50"},f?"Creating...":"Use This Template"),m&&je.default.createElement("p",{className:"mt-2 text-sm text-red-600",role:"alert"},m)))))}var Ie=re(ne());function r_({currentView:e,onNavigate:t,agentCount:r,account:n,user:a,gemVersion:i,assistantEnabled:o=!0}){let{darkMode:l}=At(),[s,u]=(0,Ie.useState)(!1),c=(0,Ie.useRef)(null);(0,Ie.useEffect)(()=>{function v(g){c.current&&!c.current.contains(g.target)&&u(!1)}return document.addEventListener("mousedown",v),()=>document.removeEventListener("mousedown",v)},[]);let d=n?.name||"My Workspace",f=a?.name||a?.email?.split("@")[0]||"User",p=[...o?[{id:"assistant",label:"Ask ActiveAgents",icon:">"}]:[],{id:"list",label:"Agents",icon:$t.nav.agents,badge:r},{id:"builder",label:"New Agent",icon:$t.nav.newAgent},{id:"sandbox",label:"Run Agents",icon:$t.nav.demo,highlight:!0}],m=[{id:"traces",label:"Traces",icon:$t.nav.traces},{id:"interactions",label:"Interactions",icon:$t.nav.interactions},{id:"tools",label:"Tools",icon:$t.nav.tools},{id:"mcp",label:"MCP Services",icon:$t.nav.mcp},{id:"metrics",label:"Metrics",icon:$t.nav.metrics},{id:"evaluations",label:"Evaluations",icon:$t.nav.evaluations},{id:"replay",label:"Session Replay",icon:$t.nav.replay}],y=[{id:"organization",label:"Organization",icon:"\u{1F3E2}"},{id:"settings",label:"Settings",icon:"\u2699\uFE0F"}],h=({item:v})=>Ie.default.createElement("button",{onClick:()=>t(v.id),className:`w-full flex items-center justify-between py-3 rounded-lg text-left transition-colors ${v.indent?"pl-10 pr-4":"px-4"}`,style:{backgroundColor:e===v.id?l?"rgba(239, 68, 68, 0.15)":"#fef2f2":"transparent",color:e===v.id?"#ef4444":l?"#d1d5db":"#374151"},onMouseEnter:g=>{e!==v.id&&(g.currentTarget.style.backgroundColor=l?"#252525":"#f3f4f6")},onMouseLeave:g=>{e!==v.id&&(g.currentTarget.style.backgroundColor="transparent")}},Ie.default.createElement("div",{className:"flex items-center space-x-3"},Ie.default.createElement("span",{style:{fontFamily:$e.mono,fontSize:"12px",width:"20px",textAlign:"center"}},v.icon),Ie.default.createElement("span",{className:"font-medium"},v.label)),v.badge!==void 0&&Ie.default.createElement("span",{className:"px-2 py-0.5 text-xs rounded-full",style:{backgroundColor:e===v.id?"#fee2e2":l?"#2a2a2a":"#f3f4f6",color:e===v.id?"#ef4444":l?"#d1d5db":"#4b5563"}},v.badge));return Ie.default.createElement("aside",{className:"w-64 border-r flex flex-col",style:{backgroundColor:l?"#1a1a1a":"#ffffff",borderColor:l?"#2a2a2a":"#e5e7eb"}},Ie.default.createElement("div",{className:"h-16 flex items-center px-4 border-b relative",style:{borderColor:l?"#2a2a2a":"#e5e7eb"},ref:c},Ie.default.createElement("button",{onClick:()=>u(!s),className:"w-full flex items-center justify-between px-2 py-2 rounded-lg transition-colors",style:{backgroundColor:s?l?"#252525":"#f3f4f6":"transparent"}},Ie.default.createElement("div",{className:"flex items-center space-x-3 min-w-0"},Ie.default.createElement(fr,{size:28}),Ie.default.createElement("span",{className:`font-semibold truncate ${l?"text-white":"text-gray-900"}`},d)),Ie.default.createElement("svg",{className:`w-4 h-4 flex-shrink-0 transition-transform ${s?"rotate-180":""}`,style:{color:l?"#9ca3af":"#6b7280"},fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ie.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"}))),s&&Ie.default.createElement("div",{className:"absolute left-4 right-4 top-14 rounded-lg shadow-lg border overflow-hidden z-50",style:{backgroundColor:l?"#1a1a1a":"#ffffff",borderColor:l?"#2a2a2a":"#e5e7eb"}},Ie.default.createElement("div",{className:"px-4 py-3 border-b",style:{borderColor:l?"#2a2a2a":"#e5e7eb"}},Ie.default.createElement("div",{className:"flex items-center space-x-3"},Ie.default.createElement(fr,{size:32}),Ie.default.createElement("div",{className:"min-w-0"},Ie.default.createElement("div",{className:`font-medium truncate ${l?"text-white":"text-gray-900"}`},d)))),Ie.default.createElement("div",{className:"py-1"},Ie.default.createElement("button",{onClick:()=>{t("settings"),u(!1)},className:`w-full flex items-center space-x-3 px-4 py-2 text-left text-sm transition-colors ${l?"text-gray-300 hover:bg-gray-800":"text-gray-700 hover:bg-gray-100"}`},Ie.default.createElement("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ie.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),Ie.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})),Ie.default.createElement("span",null,"Settings")),Ie.default.createElement("button",{onClick:()=>{t("organization"),u(!1)},className:`w-full flex items-center space-x-3 px-4 py-2 text-left text-sm transition-colors ${l?"text-gray-300 hover:bg-gray-800":"text-gray-700 hover:bg-gray-100"}`},Ie.default.createElement("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ie.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"})),Ie.default.createElement("span",null,"Organization"))),Ie.default.createElement("div",{className:"border-t py-1",style:{borderColor:l?"#2a2a2a":"#e5e7eb"}},Ie.default.createElement("div",{className:`px-4 py-2 flex items-center space-x-3 ${l?"text-gray-300":"text-gray-700"}`},Ie.default.createElement("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ie.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"})),Ie.default.createElement("span",{className:"text-sm"},f))))),Ie.default.createElement("nav",{className:"flex-1 px-4 py-4 space-y-1 overflow-y-auto"},Ie.default.createElement("div",{className:"space-y-1"},p.map(v=>Ie.default.createElement(h,{key:v.id,item:v}))),Ie.default.createElement("div",{className:"pt-4"},Ie.default.createElement("div",{className:"px-4 pb-2"},Ie.default.createElement("span",{className:`text-xs font-semibold uppercase tracking-wide ${l?"text-gray-500":"text-gray-400"}`},"Observability")),Ie.default.createElement("div",{className:"space-y-1"},m.map(v=>Ie.default.createElement(h,{key:v.id,item:v})))),Ie.default.createElement("div",{className:"pt-4"},Ie.default.createElement("div",{className:"px-4 pb-2"},Ie.default.createElement("span",{className:`text-xs font-semibold uppercase tracking-wide ${l?"text-gray-500":"text-gray-400"}`},"Workspace")),Ie.default.createElement("div",{className:"space-y-1"},y.map(v=>Ie.default.createElement(h,{key:v.id,item:v}))))),Ie.default.createElement("div",{className:"px-4 py-4 border-t",style:{borderColor:l?"#2a2a2a":"#e5e7eb"}},Ie.default.createElement("div",{className:`text-xs font-semibold uppercase mb-3 ${l?"text-gray-500":"text-gray-400"}`},"Resources"),Ie.default.createElement("div",{className:"space-y-2"},Ie.default.createElement("a",{href:"https://docs.activeagents.ai",target:"_blank",rel:"noopener noreferrer",className:`flex items-center space-x-2 text-sm transition-colors ${l?"text-gray-400 hover:text-red-400":"text-gray-600 hover:text-red-600"}`},Ie.default.createElement("span",{style:{fontFamily:$e.mono,fontSize:"12px",width:"20px",textAlign:"center"}},$t.nav.docs),Ie.default.createElement("span",null,"Documentation")),Ie.default.createElement("a",{href:"https://github.com/activeagents/activeagent",target:"_blank",rel:"noopener noreferrer",className:`flex items-center space-x-2 text-sm transition-colors ${l?"text-gray-400 hover:text-red-400":"text-gray-600 hover:text-red-600"}`},Ie.default.createElement("span",{style:{fontFamily:$e.mono,fontSize:"12px",width:"20px",textAlign:"center"}},$t.nav.github),Ie.default.createElement("span",null,"GitHub")))),Ie.default.createElement("div",{className:"px-6 py-4 border-t",style:{borderColor:l?"#2a2a2a":"#e5e7eb"}},Ie.default.createElement("div",{className:`text-xs ${l?"text-gray-500":"text-gray-400"}`},"Active Agent ",i?`v${i}`:"")))}var ht=re(ne());function n_({user:e,account:t}){let{darkMode:r,toggleDarkMode:n}=At(),[a,i]=(0,ht.useState)(!1),o=(0,ht.useRef)(null);(0,ht.useEffect)(()=>{function d(f){o.current&&!o.current.contains(f.target)&&i(!1)}return document.addEventListener("mousedown",d),()=>document.removeEventListener("mousedown",d)},[]);let l=window.ACTIVE_AGENT_DASHBOARD?.meta?.signOutPath,s=()=>{if(!l)return;let d=document.querySelector('meta[name="csrf-token"]')?.content,f=document.createElement("form");f.method="POST",f.action=l;let p=document.createElement("input");p.type="hidden",p.name="_method",p.value="delete",f.appendChild(p);let m=document.createElement("input");m.type="hidden",m.name="authenticity_token",m.value=d,f.appendChild(m),document.body.appendChild(f),f.submit()},u=e?.name||e?.email?.split("@")[0]||"User",c=u.charAt(0).toUpperCase();return ht.default.createElement("header",{className:"h-16 border-b flex items-center justify-between px-6",style:{backgroundColor:r?"#1a1a1a":"#ffffff",borderColor:r?"#2a2a2a":"#e5e7eb"}},ht.default.createElement("div",{className:"flex items-center space-x-4"}),ht.default.createElement("div",{className:"flex items-center space-x-4"},ht.default.createElement("button",{onClick:n,className:"p-2 rounded-lg transition-colors",style:{backgroundColor:r?"#252525":"#f3f4f6",color:r?"#fbbf24":"#4b5563"},title:r?"Switch to light mode":"Switch to dark mode"},r?ht.default.createElement("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 20 20"},ht.default.createElement("path",{fillRule:"evenodd",d:"M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z",clipRule:"evenodd"})):ht.default.createElement("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 20 20"},ht.default.createElement("path",{d:"M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z"}))),ht.default.createElement("div",{className:`flex items-center space-x-2 text-sm ${r?"text-gray-400":"text-gray-500"}`},ht.default.createElement("span",{className:"w-2 h-2 bg-green-400 rounded-full"}),ht.default.createElement("span",null,"Connected")),ht.default.createElement("div",{className:"relative",ref:o},ht.default.createElement("button",{onClick:()=>i(!a),className:"flex items-center space-x-2 p-1 rounded-lg transition-colors",style:{backgroundColor:a?r?"#252525":"#f3f4f6":"transparent"}},ht.default.createElement("div",{className:"w-8 h-8 bg-red-100 rounded-full flex items-center justify-center"},ht.default.createElement("span",{className:"text-red-600 font-medium text-sm"},c))),a&&ht.default.createElement("div",{className:"absolute right-0 mt-2 w-64 rounded-lg shadow-lg border overflow-hidden z-50",style:{backgroundColor:r?"#1a1a1a":"#ffffff",borderColor:r?"#2a2a2a":"#e5e7eb"}},ht.default.createElement("div",{className:"px-4 py-3 border-b",style:{borderColor:r?"#2a2a2a":"#e5e7eb"}},ht.default.createElement("div",{className:"flex items-center space-x-3"},ht.default.createElement("div",{className:"w-10 h-10 bg-red-100 rounded-full flex items-center justify-center"},ht.default.createElement("span",{className:"text-red-600 font-medium"},c)),ht.default.createElement("div",null,ht.default.createElement("div",{className:`font-medium ${r?"text-white":"text-gray-900"}`},u),ht.default.createElement("div",{className:`text-sm ${r?"text-gray-400":"text-gray-500"}`},e?.email)))),l&&ht.default.createElement("div",{className:"py-1"},ht.default.createElement("button",{onClick:s,className:`w-full flex items-center space-x-3 px-4 py-2 text-left text-sm transition-colors ${r?"text-gray-300 hover:bg-gray-800":"text-gray-700 hover:bg-gray-100"}`},ht.default.createElement("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ht.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})),ht.default.createElement("span",null,"Sign out")))))))}var we=re(ne());var Be=re(ne());var a_=150,rue=e=>e.reduce((t,r)=>t+(Number(r)||0),0),nue=e=>e.length?rue(e)/e.length:0,Ci=e=>e.reduce((t,r)=>r!=null&&Number(r)>t?Number(r):t,0),i_=e=>{if(!(e>0))return 1;let t=Math.pow(10,Math.floor(Math.log10(e))),r=e/t;return(r<=1?1:r<=2?2:r<=2.5?2.5:r<=5?5:10)*t},Qu=(e,t)=>[0,25,50,75,100].map(r=>({top:r,label:t(e*(1-r/100))})),aue=4,Uf=e=>Math.max(aue,i_(e)),p$=(e,t=2,r=6)=>{let n=e/4;for(let a=t;a<r;a++)if([1,2,3,4].every(o=>Math.abs(n*o-Number((n*o).toFixed(a)))<=n*.1))return a;return r},iue=5.5,oue=12,lue=(e,t)=>{let r=!!e.flip;if(!(t>0))return r;let n=String(e.label||"").length*iue+oue,a=Number(e.left)/100*t,i=t-a;return r?!(a<n&&i>a):i<n&&a>i},sue=typeof window>"u"?Be.useEffect:Be.useLayoutEffect,uue=e=>{let[t,r]=(0,Be.useState)(0);return sue(()=>{let n=e.current;if(!n)return;let a=()=>r(n.clientWidth);if(a(),typeof ResizeObserver>"u")return window.addEventListener("resize",a),()=>window.removeEventListener("resize",a);let i=new ResizeObserver(a);return i.observe(n),()=>i.disconnect()},[e]),t},Ju=(e,t)=>{let r=e.length,n=[];return e.forEach((a,i)=>{if(a==null||Number.isNaN(Number(a)))return;let o=r>1?i/(r-1)*100:50,l=100-Math.min(100,Math.max(0,Number(a)/t*100));n.push(`${o.toFixed(2)},${l.toFixed(2)}`)}),n.join(" ")},$1=(e,t)=>{let r=Ju(e,t);return r?`0,100 ${r} 100,100`:""},m$=(e,t=24)=>{let r=e.length;if(!r)return"";let n=r/t,a=Array.from({length:t},(l,s)=>{let u=Math.floor(s*n),c=Math.max(u+1,Math.floor((s+1)*n));return nue(e.slice(u,c).filter(d=>d!=null))}),i=Math.max(...a),o=Math.min(...a);return a.map((l,s)=>`${(s/(t-1)*100).toFixed(1)},${(26-(i===o?.5:(l-o)/(i-o))*24).toFixed(1)}`).join(" ")},Qv=(e,t,r)=>{let n=e.length?e[0].data.length:0;return Array.from({length:n},(a,i)=>({title:r(i),segs:e.map(o=>({h:(Number(o.data[i])||0)/t*100,color:o.color}))}))};function v$({label:e,value:t,unit:r,sub:n,delta:a,deltaColor:i,deltaSub:o,spark:l,sparkColor:s}){return Be.default.createElement(kn,{padding:"14px 16px 12px",style:{display:"flex",flexDirection:"column",gap:6,minWidth:0}},Be.default.createElement("div",{style:{display:"flex",alignItems:"baseline",gap:8}},Be.default.createElement(yt,{size:11,spacing:"0.05em"},e),Be.default.createElement("span",{style:{marginLeft:"auto",fontFamily:Ce,fontSize:11,fontWeight:600,color:i,whiteSpace:"nowrap"}},a)),Be.default.createElement("div",{style:{display:"flex",alignItems:"baseline",gap:6}},Be.default.createElement("span",{style:{fontFamily:Ce,fontSize:26,fontWeight:700,lineHeight:1.1,letterSpacing:"-0.01em",color:"var(--color-text-primary)"}},t),r?Be.default.createElement("span",{style:{fontFamily:Ce,fontSize:12,color:"var(--color-text-muted)"}},r):null),Be.default.createElement("div",{title:n,style:{fontFamily:Ce,fontSize:11,color:"var(--color-text-secondary)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},n),Be.default.createElement("div",{style:{display:"flex",alignItems:"flex-end",gap:8,marginTop:2}},Be.default.createElement("svg",{viewBox:"0 0 100 28",preserveAspectRatio:"none","aria-hidden":"true",style:{flex:1,height:28,minWidth:0,display:"block",overflow:"visible"}},Be.default.createElement("polyline",{points:l,fill:"none",stroke:s,strokeWidth:"1.5",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"})),Be.default.createElement("span",{style:{fontSize:10,color:"var(--color-text-muted)",whiteSpace:"nowrap"}},o)))}function g$({title:e,sub:t,value:r,valueColor:n="var(--color-text-primary)",legend:a=[],ticks:i=[],buckets:o=[],lines:l=[],areas:s=[],markers:u=[],xLabels:c=[],height:d=a_}){let f=(0,Be.useRef)(null),p=uue(f),m="1px dashed var(--color-text-secondary)";return Be.default.createElement(kn,{padding:"14px 16px 12px",style:{minWidth:0,display:"flex",flexDirection:"column",gap:8}},Be.default.createElement("div",{style:{display:"flex",alignItems:"baseline",gap:8,flexWrap:"wrap"}},Be.default.createElement("span",{style:{fontSize:13,fontWeight:600,color:"var(--color-text-primary)"}},e),Be.default.createElement("span",{style:{fontFamily:Ce,fontSize:10,color:"var(--color-text-muted)"}},t),Be.default.createElement("span",{style:{marginLeft:"auto",fontFamily:Ce,fontSize:12,fontWeight:600,color:n,whiteSpace:"nowrap"}},r)),Be.default.createElement("div",{style:{display:"flex",gap:12,flexWrap:"wrap"}},a.map(y=>Be.default.createElement("span",{key:y.label,style:{display:"inline-flex",alignItems:"center",gap:5,fontFamily:Ce,fontSize:10,color:"var(--color-text-secondary)"}},Be.default.createElement("span",{style:{width:8,height:8,borderRadius:2,background:y.color,flexShrink:0}}),y.label))),Be.default.createElement("div",{ref:f,style:{position:"relative",height:d,margin:"6px 0 0 40px"}},i.map(y=>Be.default.createElement("div",{key:y.top,style:{position:"absolute",left:0,right:0,top:`${y.top}%`,borderTop:"1px solid var(--color-border-light)"}},Be.default.createElement("span",{style:{position:"absolute",right:"calc(100% + 6px)",top:-6,whiteSpace:"nowrap",fontFamily:Ce,fontSize:10,lineHeight:"12px",color:"var(--color-text-muted)"}},y.label))),o.length>0&&Be.default.createElement("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"stretch",gap:1}},o.map((y,h)=>Be.default.createElement("div",{key:h,title:y.title,style:{flex:1,minWidth:0,display:"flex",flexDirection:"column-reverse"}},y.segs.map((v,g)=>Be.default.createElement("div",{key:g,style:{height:`${v.h.toFixed(2)}%`,background:v.color,flexShrink:0}}))))),(l.length>0||s.length>0)&&Be.default.createElement("svg",{viewBox:"0 0 100 100",preserveAspectRatio:"none","aria-hidden":"true",style:{position:"absolute",inset:0,width:"100%",height:"100%",overflow:"visible",pointerEvents:"none"}},s.map((y,h)=>Be.default.createElement("polygon",{key:h,points:y.points,fill:y.color,opacity:"0.16"})),l.map((y,h)=>Be.default.createElement("polyline",{key:h,points:y.points,fill:"none",stroke:y.color,strokeWidth:y.width||1.5,strokeLinejoin:"round",strokeLinecap:"round",vectorEffect:"non-scaling-stroke"}))),u.map((y,h)=>{let v=lue(y,p),g=`${Number(y.left).toFixed(2)}%`;return Be.default.createElement("div",{key:h,style:{position:"absolute",top:0,bottom:0,pointerEvents:"none",...v?{left:0,width:g,borderRight:m}:{left:g,right:0,borderLeft:m}}},Be.default.createElement("span",{style:{position:"absolute",top:-4,[v?"right":"left"]:4,maxWidth:"calc(100% - 8px)",boxSizing:"border-box",overflow:"hidden",textOverflow:"ellipsis",fontFamily:Ce,fontSize:9,lineHeight:"12px",color:"var(--color-text-secondary)",whiteSpace:"nowrap",background:"var(--color-card)",padding:"0 4px",borderRadius:3}},y.label))})),Be.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",marginLeft:40,fontFamily:Ce,fontSize:10,color:"var(--color-text-muted)"}},c.map((y,h)=>Be.default.createElement("span",{key:h},y))))}function Ff({label:e,qualifier:t,meta:r,children:n}){return Be.default.createElement(kn,{padding:0,style:{overflow:"hidden"}},Be.default.createElement("div",{style:{display:"flex",alignItems:"baseline",gap:8,padding:"10px 14px",borderBottom:"1px solid var(--color-border-light)"}},Be.default.createElement(yt,null,e),t?Be.default.createElement("span",{style:{fontFamily:Ce,fontSize:11,color:"var(--color-text-muted)"}},t):null,r?Be.default.createElement("span",{style:{marginLeft:"auto",fontFamily:Ce,fontSize:11,color:"var(--color-text-muted)"}},r):null),n)}function o_({template:e,columns:t}){return Be.default.createElement("div",{style:{display:"grid",gridTemplateColumns:e,gap:8,padding:"6px 14px 4px",fontFamily:Ce,fontSize:10,textTransform:"uppercase",letterSpacing:"0.05em",color:"var(--color-text-muted)"}},Be.default.createElement("span",null),t.map(r=>Be.default.createElement("span",{key:r,style:{textAlign:"right"}},r)))}function U1({template:e,active:t=!1,onClick:r,title:n,padding:a="8px 14px",children:i}){let o=typeof r=="function";return Be.default.createElement("div",{role:o?"button":void 0,tabIndex:o?0:void 0,"aria-pressed":o?t:void 0,onClick:r,onKeyDown:o?s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),r(s))}:void 0,title:n,className:o?"hover:bg-[var(--color-hover)]":void 0,style:{display:"grid",gridTemplateColumns:e,gap:8,alignItems:"center",padding:a,borderTop:"1px solid var(--color-border-light)",cursor:o?"pointer":"default",background:t?"var(--color-muted)":void 0}},i)}function l_({children:e,padding:t="8px 14px"}){return Be.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:10,padding:t,borderTop:"1px solid var(--color-border-light)"}},e)}function Jv({children:e}){return Be.default.createElement("div",{style:{padding:"12px 14px",fontFamily:Ce,fontSize:11,color:"var(--color-text-muted)"}},e)}function s_({color:e}){return Be.default.createElement("span",{style:{width:8,height:8,borderRadius:2,background:e,flexShrink:0}})}function u_({pct:e,color:t}){return Be.default.createElement("div",{style:{marginTop:5,height:3,borderRadius:999,background:"var(--color-muted)",overflow:"hidden"}},Be.default.createElement("div",{style:{width:`${Math.max(0,Math.min(100,Number(e)||0))}%`,height:"100%",background:t}}))}function c_({pct:e,color:t,width:r=70}){return Be.default.createElement("span",{style:{width:r,height:4,borderRadius:999,background:"var(--color-muted)",overflow:"hidden",flexShrink:0,display:"inline-block"}},Be.default.createElement("span",{style:{display:"block",width:`${Math.max(0,Math.min(100,Number(e)||0))}%`,height:"100%",background:t}}))}function si({children:e,color:t="var(--color-text-primary)",weight:r=400,width:n,style:a}){return Be.default.createElement("span",{style:{fontFamily:Ce,fontSize:11,fontWeight:r,textAlign:"right",color:t,width:n,...a}},e)}var b$=6e4,cue=1180,Hf={"1h":{n:60,seconds:60,bucket:"1 min",prev:"vs previous hour",title:"last hour"},"24h":{n:96,seconds:900,bucket:"15 min",prev:"vs previous 24h",title:"last 24 hours"},"7d":{n:84,seconds:7200,bucket:"2 h",prev:"vs previous 7 days",title:"last 7 days"}},due=Object.keys(Hf).map(e=>({value:e,label:e})),f_="24h",Wf=["var(--chart-1)","var(--chart-2)","var(--chart-3)","var(--chart-5)","var(--chart-4)"],Rv=[{type:"429 rate limit",short:"429",color:"var(--color-error)"},{type:"timeout",short:"timeout",color:"var(--color-warning)"},{type:"tool error",short:"tool error",color:"var(--span-tool)"},{type:"provider 5xx",short:"5xx",color:"var(--color-token-out)"},{type:"other",short:"error",color:"var(--color-text-muted)"}],y$=e=>Rv.find(t=>t.type===e)?.color||"var(--color-text-muted)",fue=3,W1="var(--color-text-primary)",pue={success:"var(--color-success)",error:"var(--color-error)",muted:"var(--color-text-muted)"},mue=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],d_=e=>String(e).padStart(2,"0"),Ye=e=>e==null||Number.isNaN(Number(e))?0:Number(e),vue=e=>e.reduce((t,r)=>t+Ye(r),0),h$=e=>`${Ye(e).toFixed(1)}%`,F1=(e,t)=>`${e} ${t}${e===1?"":"s"}`,gue=e=>e>=1e3?`${(e/1e3).toFixed(1)}s`:`${Math.round(e)}ms`,yue=(e,t)=>{let r=Array.isArray(e)?[...e]:[];return t.forEach(n=>{n.name&&!r.some(a=>a.name===n.name)&&r.push(n)}),r},hue=e=>{let t=String(e.label||"incident"),r=Rv.find(n=>t.startsWith(n.type));return r&&(t=`${r.short}${t.slice(r.type.length)}`),e.agent&&!t.includes(e.agent)?`${t} \xB7 ${e.agent}`:t},xue=e=>{let t=Ye(e);return t<60?`${t}s`:t<3600?`${+(t/60).toFixed(1)} min`:`${+(t/3600).toFixed(1)} h`},x$=async e=>{let t=await fetch(`/api/metrics?${e.toString()}`);if(!t.ok)throw new Error(`Request failed (${t.status})`);return t.json()},bue=(e,t,r=Date.now())=>{let n=Math.max(1,Ye(t))*1e3,a=Math.max(1,Math.round(Ye(e)*6e4/n)),i=Math.floor(r/n)*n;return Array.from({length:a},(o,l)=>({ts:new Date(i-(a-1-l)*n).toISOString()}))},wue=(e,t)=>{let r=e.summary||{},n=Hf[e.range]||Hf[t]||Hf[f_],a=Ye(e.bucket_seconds)||n.seconds,i=Ye(e.window_minutes)||(e.window_hours?Ye(e.window_hours)*60:n.n*n.seconds/60),o=Array.isArray(e.series)?e.series:bue(i,a),l=Ye(e.totals?.requests??r.total_requests),s=Ye(e.totals?.cost??r.total_cost),u={requests:l,requests_per_minute:i?l/i:0,p50_ms:null,p95_ms:null,p99_ms:null,errors:Ye(r.errors),error_rate:Ye(r.error_rate),tokens_in:Ye(r.tokens_input),tokens_out:Ye(r.tokens_output),tokens:Ye(r.tokens_used),cost:s,cost_per_request:l?s/l:0,tool_calls:0,tool_errors:0,tool_error_rate:0,...e.totals||{}},c={requests_pct:r.requests_change??null,p50_pct:r.latency_change??null,error_rate_pt:null,tokens_pct:null,cost_pct:null,...e.deltas||{}},d=Array.isArray(e.agents)?e.agents:(e.by_agent||[]).map(p=>({name:p.name,requests:Ye(p.requests),share_pct:l?Ye(p.requests)/l*100:0,p95_ms:null,error_rate:p.requests?Ye(p.errors)/Ye(p.requests)*100:0,cost:Ye(p.cost),tokens:Ye(p.tokens)})),f=Array.isArray(e.errors_by_type)&&e.errors_by_type.length?e.errors_by_type:Rv.map(p=>({type:p.type,count:0}));return{range:e.range||t,bucketSeconds:a,windowMinutes:i,agent:e.agent||null,environment:e.environment||null,totals:u,deltas:c,series:o,agents:d,models:Array.isArray(e.models)?e.models:[],actions:Array.isArray(e.actions)?e.actions:[],tools:Array.isArray(e.tools)?e.tools:[],errorsByType:f,markers:Array.isArray(e.markers)?e.markers:[]}},w$=e=>{let t=Hf[e.range];if(t)return t;let r=Math.max(1,Math.round(e.windowMinutes/60));return{bucket:xue(e.bucketSeconds),prev:`vs previous ${r}h`,title:`last ${r} hours`}},Sue=e=>{let[t,r]=(0,we.useState)(()=>typeof window<"u"&&window.innerWidth<e);return(0,we.useEffect)(()=>{let n=window.matchMedia(`(max-width: ${e-1}px)`),a=()=>r(n.matches);return a(),n.addEventListener("change",a),()=>n.removeEventListener("change",a)},[e]),t};function p_(){let[e,t]=(0,we.useState)(f_),[r,n]=(0,we.useState)(""),[a,i]=(0,we.useState)(null),[o,l]=(0,we.useState)(!0),[s,u]=(0,we.useState)(null),[c,d]=(0,we.useState)(!1),f=(0,we.useRef)(0),p=Sue(cue),m=(0,we.useRef)(null),y=(0,we.useCallback)(async()=>{let S=++f.current;try{let w=new URLSearchParams({range:e});r&&w.set("agent",r);let[_,k]=await Promise.all([x$(w),r?x$(new URLSearchParams({range:e})).catch(()=>null):null]);if(S!==f.current)return;let A=r?k?.agents:_.agents;Array.isArray(A)&&(m.current=A),i({data:_,ranking:Array.isArray(A)?A:m.current}),u(null)}catch(w){if(S!==f.current)return;u(w.message)}finally{S===f.current&&l(!1)}},[e,r]);(0,we.useEffect)(()=>{let S=!1;d(!0),y().finally(()=>{S||d(!1)});let w=setInterval(y,b$);return()=>{S=!0,clearInterval(w)}},[y]);let h=(0,we.useMemo)(()=>a?wue(a.data,e):null,[a,e]),v=(0,we.useMemo)(()=>h?h.agent?yue(a.ranking,h.agents):h.agents:[],[h,a]),g=(0,we.useMemo)(()=>v.map(S=>S.name).filter(Boolean),[v]),b=(0,we.useMemo)(()=>{let S=Object.fromEntries(g.map((_,k)=>[_,Wf[k%Wf.length]])),w=g.length;return(h?h.agents:[]).forEach(_=>{_.name&&!S[_.name]&&(S[_.name]=Wf[w++%Wf.length])}),_=>S[_]||Wf[0]},[g,h]),x=(0,we.useMemo)(()=>h?kue(h,b):null,[h,b]);return o?we.default.createElement("div",{className:"flex items-center justify-center h-64"},we.default.createElement("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2",style:{borderBottomColor:"var(--color-accent-ui)"}})):s||!h?we.default.createElement("div",null,we.default.createElement("h1",{style:{margin:0,fontSize:24,fontWeight:700,letterSpacing:"-0.01em",color:W1}},"Metrics"),we.default.createElement("div",{style:{marginTop:16,padding:"12px 16px",background:"var(--color-error-soft)",borderRadius:8,color:"var(--color-error-text)",fontSize:14}},"Failed to load metrics",s?`: ${s}`:"")):we.default.createElement(Aue,{m:h,view:x,railAgents:v,range:Hf[e]?e:f_,agent:r,agentOptions:r&&!g.includes(r)?[...g,r]:g,colorFor:b,narrow:p,pending:c,onRange:t,onAgent:n})}function Aue({m:e,view:t,railAgents:r=e.agents,range:n,agent:a,agentOptions:i,colorFor:o,narrow:l,pending:s=!1,onRange:u,onAgent:c}){let d=w$(e),f=e.totals.requests===0,p=m=>c(a===m?"":m);return we.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:16,width:"100%",maxWidth:1600,boxSizing:"border-box",color:W1,fontSize:13}},we.default.createElement("div",{style:{display:"flex",alignItems:"flex-end",gap:16,flexWrap:"wrap"}},we.default.createElement("div",{style:{flex:1,minWidth:240}},we.default.createElement("h1",{style:{margin:0,fontSize:24,fontWeight:700,letterSpacing:"-0.01em"}},"Metrics"),we.default.createElement("p",{style:{margin:"4px 0 0",fontSize:14,color:"var(--color-text-secondary)"}},"Requests, latency, errors, tokens and cost across every agent \u2014 ",d.title,a?` \xB7 ${a}`:"")),we.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"}},we.default.createElement("select",{value:a,onChange:m=>c(m.target.value),"aria-label":"Filter by agent",style:{padding:"6px 10px",borderRadius:8,fontSize:13,fontFamily:"inherit",border:"1px solid var(--color-border-strong)",background:"var(--color-card)",color:W1,cursor:"pointer"}},we.default.createElement("option",{value:""},"All agents"),i.map(m=>we.default.createElement("option",{key:m,value:m},m))),e.environment&&we.default.createElement("span",{style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 10px",borderRadius:8,border:"1px solid var(--color-border)",fontFamily:Ce,fontSize:11,color:"var(--color-text-cell)",background:"var(--color-card)"}},we.default.createElement("span",{style:{color:"var(--color-text-muted)"}},"env"),e.environment),we.default.createElement(W7,{options:due,value:n,onChange:u}),we.default.createElement("span",{title:s?"loading\u2026":`refreshes every ${b$/1e3}s`,style:{display:"inline-flex",alignItems:"center",gap:6,fontFamily:Ce,fontSize:11,color:"var(--color-text-muted)"}},we.default.createElement("span",{style:{width:7,height:7,borderRadius:"50%",background:s?"var(--color-text-muted)":"var(--color-success)"}}),"live \xB7 ",d.bucket," buckets"))),f?we.default.createElement(kn,{style:{padding:"40px 24px",textAlign:"center",fontSize:14,color:"var(--color-text-secondary)"}},"No traffic yet \u2014 run an agent, or point your app's ActiveAgent telemetry at this workspace",we.default.createElement("div",{style:{marginTop:8,fontFamily:Ce,fontSize:11,color:"var(--color-text-muted)"}},a||"all agents"," \xB7 ",d.title)):we.default.createElement(we.default.Fragment,null,we.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))",gap:12,opacity:s?.6:1}},t.signals.map(m=>we.default.createElement(v$,{key:m.label,...m,deltaSub:d.prev}))),we.default.createElement("div",{style:{display:"grid",gridTemplateColumns:l?"minmax(0, 1fr)":"minmax(0, 2.3fr) minmax(300px, 1fr)",gap:16,alignItems:"start",opacity:s?.6:1}},we.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(320px, 1fr))",gap:16,minWidth:0}},t.panels.map(m=>we.default.createElement(g$,{key:m.title,...m,xLabels:t.xLabels,height:a_}))),we.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:16,minWidth:0}},we.default.createElement(Ff,{label:"Agents",qualifier:"by requests \xB7 click to filter"},we.default.createElement(o_,{template:"minmax(0, 1fr) 44px 44px 40px 52px",columns:["req","p95","err","cost"]}),r.length===0&&we.default.createElement(Jv,null,"no agents in this window"),r.map(m=>we.default.createElement(U1,{key:m.name,template:"minmax(0, 1fr) 44px 44px 40px 52px",active:a===m.name,onClick:()=>p(m.name),title:a===m.name?"Show all agents":`Filter to ${m.name}`},we.default.createElement("div",{style:{minWidth:0}},we.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:6,minWidth:0}},we.default.createElement(s_,{color:o(m.name)}),we.default.createElement("span",{style:{fontSize:12,fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},m.name)),we.default.createElement(u_,{pct:m.share_pct,color:o(m.name)})),we.default.createElement(si,null,vr(m.requests)),we.default.createElement(si,{color:"var(--color-text-secondary)"},Gr(m.p95_ms)),we.default.createElement(si,{color:Ye(m.error_rate)>=1.5?"var(--color-error-text)":"var(--color-text-secondary)"},h$(m.error_rate)),we.default.createElement(si,null,Vv(m.cost))))),we.default.createElement(Ff,{label:"Models",qualifier:"by tokens"},e.models.length===0&&we.default.createElement(Jv,null,"no model usage in this window"),e.models.map((m,y)=>we.default.createElement(U1,{key:`${m.model}-${m.provider}-${y}`,template:"minmax(0, 1fr) 52px 56px"},we.default.createElement("div",{style:{minWidth:0}},we.default.createElement("div",{style:{display:"flex",alignItems:"baseline",gap:6,minWidth:0}},we.default.createElement("span",{style:{fontFamily:Ce,fontSize:11,fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},m.model||"unknown"),m.provider&&we.default.createElement("span",{style:{fontFamily:Ce,fontSize:10,color:"var(--color-text-muted)"}},m.provider)),we.default.createElement(u_,{pct:m.share_pct,color:"var(--color-token-in)"})),we.default.createElement(si,null,vr(m.tokens)),we.default.createElement(si,{color:"var(--color-text-secondary)"},Vv(m.cost))))),we.default.createElement(Ff,{label:"Slowest actions",qualifier:"p95"},e.actions.length===0&&we.default.createElement(Jv,null,"no actions in this window"),e.actions.map(m=>we.default.createElement(l_,{key:m.name},we.default.createElement("span",{title:m.name,style:{flex:1,minWidth:0,fontFamily:Ce,fontSize:11,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},m.name),we.default.createElement(c_,{pct:t.slowestP95?Ye(m.p95_ms)/t.slowestP95*100:0,color:o(m.agent)}),we.default.createElement(si,{weight:600,width:40},Gr(m.p95_ms))))),we.default.createElement(Ff,{label:"Tools",qualifier:"by calls"},we.default.createElement(o_,{template:"minmax(0, 1fr) 44px 48px 40px",columns:["calls","avg","err"]}),e.tools.length===0&&we.default.createElement(Jv,null,"no tool calls in this window"),e.tools.map(m=>we.default.createElement(U1,{key:m.name,template:"minmax(0, 1fr) 44px 48px 40px",padding:"7px 14px"},we.default.createElement("span",{title:m.name,style:{fontFamily:Ce,fontSize:11,fontWeight:600,color:"var(--span-tool)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},m.name),we.default.createElement(si,null,vr(m.calls)),we.default.createElement(si,{color:"var(--color-text-secondary)"},Gr(m.avg_ms)),we.default.createElement(si,{color:Ye(m.error_rate)>=2?"var(--color-error-text)":"var(--color-text-secondary)"},h$(m.error_rate))))),we.default.createElement(Ff,{label:"Errors by type",meta:`${Math.round(e.totals.errors)} total`},e.errorsByType.map(m=>we.default.createElement(l_,{key:m.type},we.default.createElement(s_,{color:y$(m.type)}),we.default.createElement("span",{style:{flex:1,minWidth:0,fontSize:12,color:"var(--color-text-cell)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},m.type),we.default.createElement(c_,{pct:t.errorTotal?Ye(m.count)/t.errorTotal*100:0,color:y$(m.type)}),we.default.createElement(si,{weight:600,width:32},Math.round(Ye(m.count))))))))))}function kue(e,t){let{series:r,totals:n,deltas:a}=e,i=r.length,o=w$(e),l=r.map(C=>new Date(C.ts)),s=e.windowMinutes>=2880,u=C=>Number.isNaN(C.getTime())?"":s?`${mue[C.getDay()]} ${d_(C.getHours())}h`:`${d_(C.getHours())}:${d_(C.getMinutes())}`,c=i?[0,1,2,3,4,5,6].map(C=>C===6?"now":u(l[Math.round(C*(i-1)/6)])):[],d=C=>r.map(Y=>Ye(Y[C])),f=d("requests"),p=d("errors"),m=d("tokens_in"),y=d("tokens_out"),h=d("cost"),v=d("tool_calls"),g=d("tool_errors"),b=C=>r.map(Y=>Y[C]==null?null:Ye(Y[C])),x=b("p50_ms"),S=b("p95_ms"),w=b("p99_ms"),_=r.map(C=>C.requests_by_agent||{}),k=e.agents.map(C=>C.name).filter(Boolean);_.forEach(C=>Object.keys(C).forEach(Y=>{k.includes(Y)||k.push(Y)}));let A=k.length?k.map(C=>({label:C,color:t(C),data:_.map(Y=>Ye(Y[C]))})):[{label:"requests",color:Wf[0],data:f}],P=Rv.map(C=>({label:C.type,color:C.color,data:r.map(Y=>Ye((Y.errors_by_type||{})[C.type]))})),K=(Ye(e.bucketSeconds)||(i>1?(l[1]-l[0])/1e3:0))*1e3,z=(C,Y)=>{if(!C||i<2||!K)return null;let ve=new Date(C.ts).getTime();if(Number.isNaN(ve))return null;let tt=Math.min(i-1,Math.max(0,Math.floor((ve-l[0].getTime())/K)))/(i-1);return{left:tt*100,label:Y,flip:tt>.55}},Q=e.markers.filter(C=>C.kind==="deploy").sort((C,Y)=>new Date(C.ts)-new Date(Y.ts)).slice(-fue).map(C=>z(C,C.label)).filter(Boolean),M=e.markers.find(C=>C.kind==="incident"),F=M?z(M,hue(M)):null,N=F?[F]:[],O=Uf(Ci(f)*1.1),I=Uf(Ci(p)*1.15),D=Uf(Math.max(Ci(w),Ci(S),Ci(x))*1.05),T=Uf(Math.max(Ci(m),Ci(y))*1.1),j=i_(Ci(h)*1.1),R=p$(j),U=Uf(Ci(v)*1.1),q=Ye(n.requests),ee=Ye(n.requests_per_minute),fe=Ye(n.errors),pe=Ye(n.error_rate),Pe=Ye(n.tokens)||Ye(n.tokens_in)+Ye(n.tokens_out),oe=Ye(n.cost),Te=n.cost_per_request!=null?Ye(n.cost_per_request):q?oe/q:0,V=Ye(n.tool_calls),J=n.tool_error_rate!=null?Ye(n.tool_error_rate):V?Ye(n.tool_errors)/V*100:0,E=Ye(e.errorsByType.find(C=>C.type===Rv[0].type)?.count),L=[{title:"Requests",sub:`per ${o.bucket} \xB7 stacked by agent`,value:`${vr(q)} \xB7 ${ee.toFixed(1)}/min`,legend:A.map(C=>({label:C.label,color:C.color})),ticks:Qu(O,vr),buckets:Qv(A,O,C=>`${u(l[C])} \xB7 ${Math.round(f[C])} req`),markers:Q},{title:"Latency",sub:"generation percentiles",value:`p50 ${Gr(n.p50_ms)}`,legend:[{label:`p50 ${Gr(n.p50_ms)}`,color:"var(--color-token-in)"},{label:`p95 ${Gr(n.p95_ms)}`,color:"var(--color-warning)"},{label:`p99 ${Gr(n.p99_ms)}`,color:"var(--color-error)"}],ticks:Qu(D,gue),lines:[{points:Ju(w,D),color:"var(--color-error)",width:1.5},{points:Ju(S,D),color:"var(--color-warning)",width:1.5},{points:Ju(x,D),color:"var(--color-token-in)",width:2}],areas:[{points:$1(x,D),color:"var(--color-token-in)"}],markers:N},{title:"Errors",sub:`per ${o.bucket} \xB7 by type`,value:`${pe.toFixed(2)}% \xB7 ${F1(Math.round(fe),"error")}`,valueColor:pe>1?"var(--color-error)":W1,legend:P.map(C=>({label:C.label,color:C.color})),ticks:Qu(I,C=>String(Math.round(C))),buckets:Qv(P,I,C=>`${u(l[C])} \xB7 ${F1(Math.round(p[C]),"error")}`),markers:N},{title:"Tokens",sub:`per ${o.bucket} \xB7 input / output`,value:`${vr(Pe)} \xB7 in ${vr(n.tokens_in)} / out ${vr(n.tokens_out)}`,legend:[{label:"input",color:"var(--color-token-in)"},{label:"output",color:"var(--color-token-out)"}],ticks:Qu(T,vr),lines:[{points:Ju(m,T),color:"var(--color-token-in)",width:1.5},{points:Ju(y,T),color:"var(--color-token-out)",width:1.5}],areas:[{points:$1(m,T),color:"var(--color-token-in)"},{points:$1(y,T),color:"var(--color-token-out)"}]},{title:"Cost",sub:`estimated \xB7 per ${o.bucket}`,value:`${Vv(oe)} \xB7 ${li(Te)}/req`,legend:[{label:"spend",color:"var(--color-text-secondary)"}],ticks:Qu(j,C=>li(C,R)),buckets:Qv([{color:"var(--color-text-secondary)",data:h}],j,C=>`${u(l[C])} \xB7 ${li(h[C],R)}`)},{title:"Tool calls",sub:`per ${o.bucket} \xB7 MCP + agent-defined`,value:`${vr(V)} \xB7 ${J.toFixed(1)}% errors`,legend:[{label:"calls",color:"var(--span-tool)"},{label:"errors",color:"var(--color-error)"}],ticks:Qu(U,vr),buckets:Qv([{color:"var(--span-tool)",data:v.map((C,Y)=>Math.max(0,C-g[Y]))},{color:"var(--color-error)",data:g}],U,C=>`${u(l[C])} \xB7 ${F1(Math.round(v[C]),"call")}`)}],X=(C,Y,ve)=>{let ze=C==null?null:Ye(C);return ze==null||ze===0?"muted":Y&&Y(ze)?"success":ve&&ve(ze)?"error":"muted"},B=(C,Y,ve,ze,tt,Lt,ct,Nn)=>({label:C,value:Y,unit:ve,sub:ze,delta:tt,deltaColor:pue[Lt],spark:m$(ct),sparkColor:Nn});return{signals:[B("Requests",vr(q),"",`${ee.toFixed(1)} req/min`,Lf(a.requests_pct),X(a.requests_pct,C=>C>0,null),f,"var(--color-token-in)"),B("Latency",Gr(n.p50_ms),"p50",`p95 ${Gr(n.p95_ms)} \xB7 p99 ${Gr(n.p99_ms)}`,Lf(a.p50_pct),X(a.p50_pct,C=>C<0,C=>C>0),x,"var(--color-token-in)"),B("Error rate",pe.toFixed(2),"%",`${F1(Math.round(fe),"error")} \xB7 ${Math.round(E)} rate-limited`,Lf(a.error_rate_pt," pt",1),X(a.error_rate_pt,C=>C<0,C=>C>0),p,"var(--color-error)"),B("Tokens",vr(Pe),"",`in ${vr(n.tokens_in)} \xB7 out ${vr(n.tokens_out)}`,Lf(a.tokens_pct),"muted",m.map((C,Y)=>C+y[Y]),"var(--color-token-in)"),B("Cost",Vv(oe),"",`${li(Te)} per request`,Lf(a.cost_pct),"muted",h,"var(--color-text-secondary)")],panels:L,xLabels:c,slowestP95:Ci(e.actions.map(C=>C.p95_ms)),errorTotal:vue(e.errorsByType.map(C=>C.count))}}var Se=re(ne());var Nue=6e4,Cue=[{value:24,label:"24h"},{value:168,label:"7d"},{value:720,label:"30d"}],S$={mcp:{light:"#7c3aed",dark:"#c4b5fd",bgLight:"#f5f3ff",bgDark:"rgba(124,58,237,0.15)"},builtin:{light:"#2563eb",dark:"#93c5fd",bgLight:"#eff6ff",bgDark:"rgba(37,99,235,0.15)"},agent:{light:"#15803d",dark:"#86efac",bgLight:"#f0fdf4",bgDark:"rgba(34,197,94,0.12)"}},eg=e=>e==null?"0":e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e),A$=e=>e==null?"\u2014":e>=1e3?`${(e/1e3).toFixed(2)}s`:`${Math.round(e)}ms`,Eue=e=>{if(!e)return"\u2014";let t=new Date(e),r=Math.round((Date.now()-t.getTime())/6e4);if(r<1)return"just now";if(r<60)return`${r}m ago`;let n=Math.round(r/60);return n<24?`${n}h ago`:`${Math.round(n/24)}d ago`};function m_({onOpenServer:e}){let{darkMode:t}=At(),[r,n]=(0,Se.useState)(null),[a,i]=(0,Se.useState)(!0),[o,l]=(0,Se.useState)(null),[s,u]=(0,Se.useState)("all"),[c,d]=(0,Se.useState)(""),[f,p]=(0,Se.useState)(168),[m,y]=(0,Se.useState)(null),h=(0,Se.useCallback)(async()=>{try{let A=new URLSearchParams({hours:String(f)});s!=="all"&&A.set("origin",s),c.trim()&&A.set("q",c.trim());let P=await fetch(`/api/tools?${A}`);if(!P.ok)throw new Error(`Request failed (${P.status})`);n(await P.json()),l(null)}catch(A){l(A.message)}finally{i(!1)}},[s,c,f]);(0,Se.useEffect)(()=>{let A=setTimeout(h,c?250:0);return()=>clearTimeout(A)},[h,c]),(0,Se.useEffect)(()=>{let A=setInterval(h,Nue);return()=>clearInterval(A)},[h]);let v={bg:t?"transparent":"#f9fafb",cardBg:t?"rgba(255,255,255,0.05)":"#ffffff",border:t?"rgba(255,255,255,0.1)":"#e5e7eb",borderLight:t?"rgba(255,255,255,0.05)":"#f3f4f6",textPrimary:t?"#ffffff":"#111827",textSecondary:t?"rgba(255,255,255,0.6)":"#6b7280",textMuted:t?"rgba(255,255,255,0.4)":"#9ca3af",textCell:t?"rgba(255,255,255,0.7)":"#4b5563",error:"#ef4444",errorBg:t?"rgba(239,68,68,0.2)":"#fef2f2",inputBg:t?"rgba(255,255,255,0.06)":"#ffffff"},g=A=>{let P=S$[A]||S$.agent;return{fg:t?P.dark:P.light,bg:t?P.bgDark:P.bgLight}};if(a&&!r)return Se.default.createElement("div",{className:"flex items-center justify-center h-64"},Se.default.createElement("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-red-500"}));if(o&&!r)return Se.default.createElement("div",{style:{padding:"24px"}},Se.default.createElement("h1",{style:{fontSize:"24px",fontWeight:"bold",color:v.textPrimary,margin:0}},"Tools"),Se.default.createElement("div",{style:{marginTop:"16px",padding:"12px 16px",background:v.errorBg,borderRadius:"8px",color:v.error,fontSize:"14px"}},"Failed to load tools: ",o));let{tools:b=[],summary:x={},origins:S={},sources:w={}}=r||{},_=!w.telemetry&&!w.generations&&!w.messages&&!w.declared,k=({label:A,value:P,hint:K,tone:z})=>Se.default.createElement("div",{style:{background:v.cardBg,borderRadius:"12px",padding:"20px",border:`1px solid ${v.border}`}},Se.default.createElement("div",{style:{fontSize:"11px",color:v.textSecondary,textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:"8px"}},A),Se.default.createElement("div",{style:{fontSize:"32px",fontWeight:"bold",fontFamily:"monospace",color:z||v.textPrimary}},P),K&&Se.default.createElement("div",{style:{fontSize:"13px",color:v.textSecondary,marginTop:"8px"}},K));return Se.default.createElement("div",{style:{borderRadius:"12px",overflow:"hidden",minHeight:"calc(100vh - 200px)",backgroundColor:v.bg}},Se.default.createElement("div",{style:{padding:"24px 24px 16px 24px",borderBottom:`1px solid ${v.border}`,marginBottom:"16px"}},Se.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",gap:"16px",flexWrap:"wrap"}},Se.default.createElement("div",null,Se.default.createElement("h1",{style:{fontSize:"24px",fontWeight:"bold",color:v.textPrimary,margin:0}},"Tools"),Se.default.createElement("p",{style:{fontSize:"14px",color:v.textSecondary,marginTop:"4px"}},"Detected from telemetry spans, generation request bodies, and agent records \u2014 nothing to register by hand")),Se.default.createElement("div",{style:{display:"flex",gap:"4px"}},Cue.map(A=>Se.default.createElement("button",{key:A.value,onClick:()=>p(A.value),style:{padding:"6px 12px",fontSize:"13px",borderRadius:"6px",cursor:"pointer",border:`1px solid ${f===A.value?"#ef4444":v.border}`,background:f===A.value?t?"rgba(239,68,68,0.15)":"#fef2f2":"transparent",color:f===A.value?"#ef4444":v.textSecondary}},A.label))))),Se.default.createElement("div",{style:{padding:"0 24px 24px 24px"}},Se.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))",gap:"16px",marginBottom:"16px"}},Se.default.createElement(k,{label:"Tools Detected",value:eg(x.total_tools),hint:`${x.active_tools||0} called in this window`}),Se.default.createElement(k,{label:"Tool Calls",value:eg(x.total_calls),hint:`${A$(x.avg_duration_ms)} average`}),Se.default.createElement(k,{label:"Error Rate",value:`${x.error_rate||0}%`,tone:x.error_rate>5?v.error:v.textPrimary,hint:`${x.total_errors||0} failed call${x.total_errors===1?"":"s"}`}),Se.default.createElement(k,{label:"From MCP",value:eg(x.mcp_tools),hint:`across ${x.mcp_servers_active||0} active server${x.mcp_servers_active===1?"":"s"}`}),Se.default.createElement(k,{label:"Never Called",value:eg(x.unused_tools),hint:"offered or configured, unused"})),Se.default.createElement("div",{style:{display:"flex",gap:"8px",marginBottom:"16px",flexWrap:"wrap",alignItems:"center"}},Object.entries(S).map(([A,P])=>Se.default.createElement("button",{key:A,onClick:()=>u(A),style:{padding:"6px 12px",fontSize:"13px",borderRadius:"6px",cursor:"pointer",border:`1px solid ${s===A?"#ef4444":v.border}`,background:s===A?t?"rgba(239,68,68,0.15)":"#fef2f2":"transparent",color:s===A?"#ef4444":v.textSecondary}},P)),Se.default.createElement("input",{value:c,onChange:A=>d(A.target.value),placeholder:"Filter by name\u2026",style:{marginLeft:"auto",padding:"6px 12px",fontSize:"13px",borderRadius:"6px",minWidth:"200px",border:`1px solid ${v.border}`,background:v.inputBg,color:v.textPrimary}})),Se.default.createElement("div",{style:{background:v.cardBg,borderRadius:"12px",border:`1px solid ${v.border}`,overflow:"hidden"}},b.length===0?Se.default.createElement("div",{style:{textAlign:"center",padding:"48px 24px",color:v.textSecondary,fontSize:"14px"}},_?"No tool activity yet \u2014 run an agent, or point your app's ActiveAgent telemetry at this workspace":"No tools match these filters"):Se.default.createElement("div",{style:{overflowX:"auto"}},Se.default.createElement("table",{style:{width:"100%",borderCollapse:"collapse",minWidth:"760px"}},Se.default.createElement("thead",null,Se.default.createElement("tr",{style:{textAlign:"left",fontSize:"13px",color:v.textSecondary,borderBottom:`1px solid ${v.border}`}},Se.default.createElement("th",{style:{padding:"12px 16px",fontWeight:"500"}},"Tool"),Se.default.createElement("th",{style:{padding:"12px 16px",fontWeight:"500"}},"Source"),Se.default.createElement("th",{style:{padding:"12px 16px",fontWeight:"500",textAlign:"right"}},"Calls"),Se.default.createElement("th",{style:{padding:"12px 16px",fontWeight:"500",textAlign:"right"}},"Errors"),Se.default.createElement("th",{style:{padding:"12px 16px",fontWeight:"500",textAlign:"right"}},"Avg"),Se.default.createElement("th",{style:{padding:"12px 16px",fontWeight:"500",textAlign:"right"}},"Last seen"))),Se.default.createElement("tbody",null,b.map((A,P)=>{let K=g(A.origin),z=m===A.name;return Se.default.createElement(Se.default.Fragment,{key:A.name},Se.default.createElement("tr",{onClick:()=>y(z?null:A.name),style:{borderBottom:P<b.length-1||z?`1px solid ${v.borderLight}`:"none",cursor:"pointer",background:z?t?"rgba(255,255,255,0.03)":"#fafafa":"transparent"}},Se.default.createElement("td",{style:{padding:"12px 16px"}},Se.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexWrap:"wrap"}},Se.default.createElement("span",{style:{fontFamily:"monospace",fontSize:"13px",color:v.textPrimary,fontWeight:"500"}},A.base_name),A.unused&&Se.default.createElement("span",{style:{fontSize:"10px",padding:"2px 6px",borderRadius:"4px",background:v.borderLight,color:v.textMuted,textTransform:"uppercase",letterSpacing:"0.04em"}},"unused")),A.description&&Se.default.createElement("div",{style:{fontSize:"12px",color:v.textMuted,marginTop:"2px",maxWidth:"420px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},A.description)),Se.default.createElement("td",{style:{padding:"12px 16px"}},Se.default.createElement("button",{onClick:Q=>{Q.stopPropagation(),A.mcp_server&&e&&e(A.mcp_server)},style:{fontSize:"11px",padding:"3px 8px",borderRadius:"6px",border:"none",background:K.bg,color:K.fg,fontFamily:"monospace",cursor:A.mcp_server&&e?"pointer":"default"},title:A.mcp_server?`Open ${A.mcp_server} in MCP Services`:A.source_label},A.source_label)),Se.default.createElement("td",{style:{padding:"12px 16px",textAlign:"right",color:v.textCell,fontFamily:"monospace"}},eg(A.calls)),Se.default.createElement("td",{style:{padding:"12px 16px",textAlign:"right",fontFamily:"monospace",color:A.errors>0?v.error:v.textCell}},A.errors),Se.default.createElement("td",{style:{padding:"12px 16px",textAlign:"right",color:v.textCell,fontFamily:"monospace"}},A$(A.avg_duration_ms)),Se.default.createElement("td",{style:{padding:"12px 16px",textAlign:"right",color:v.textMuted,fontSize:"13px"}},Eue(A.last_seen))),z&&Se.default.createElement("tr",{style:{borderBottom:P<b.length-1?`1px solid ${v.borderLight}`:"none"}},Se.default.createElement("td",{colSpan:6,style:{padding:"0 16px 16px 16px",background:t?"rgba(255,255,255,0.03)":"#fafafa"}},Se.default.createElement(_ue,{tool:A,colors:v,tone:K,darkMode:t}))))}))))),Se.default.createElement("div",{style:{marginTop:"12px",fontSize:"12px",color:v.textMuted,display:"flex",gap:"16px",flexWrap:"wrap"}},Se.default.createElement("span",null,"Detected from:"),[["telemetry","telemetry spans"],["declared","request tool rosters"],["generations","generation records"],["messages","tool messages"]].map(([A,P])=>Se.default.createElement("span",{key:A,style:{color:w[A]?v.textSecondary:v.textMuted,opacity:w[A]?1:.5}},w[A]?"\u25CF":"\u25CB"," ",P)))))}function _ue({tool:e,colors:t,tone:r,darkMode:n}){let a=({label:i,children:o})=>Se.default.createElement("div",{style:{display:"flex",gap:"12px",fontSize:"13px",alignItems:"baseline"}},Se.default.createElement("span",{style:{color:t.textMuted,minWidth:"108px",fontSize:"11px",textTransform:"uppercase",letterSpacing:"0.05em"}},i),Se.default.createElement("span",{style:{color:t.textCell,flex:1,wordBreak:"break-word"}},o));return Se.default.createElement("div",{style:{display:"grid",gap:"8px",padding:"12px 16px",borderRadius:"8px",background:n?"rgba(0,0,0,0.25)":"#ffffff",border:`1px solid ${t.border}`}},Se.default.createElement(a,{label:"Full name"},Se.default.createElement("code",{style:{fontFamily:"monospace"}},e.name)),e.description&&Se.default.createElement(a,{label:"Description"},e.description),Se.default.createElement(a,{label:"Parameters"},e.parameters?.length>0?Se.default.createElement("code",{style:{fontFamily:"monospace",color:r.fg}},e.parameters.join(", ")):Se.default.createElement("span",{style:{color:t.textMuted}},"none recorded")),Se.default.createElement(a,{label:"Agents"},e.agents?.length>0?e.agents.join(", "):Se.default.createElement("span",{style:{color:t.textMuted}},"\u2014")),e.configured_by?.length>0&&Se.default.createElement(a,{label:"Configured by"},e.configured_by.join(", ")),Se.default.createElement(a,{label:"Call breakdown"},Se.default.createElement("span",{style:{fontFamily:"monospace"}},e.traced_calls," traced \xB7 ",e.requested," requested \xB7 ",e.results," results")),e.sample_arguments&&Se.default.createElement(a,{label:"Last arguments"},Se.default.createElement("code",{style:{fontFamily:"monospace",fontSize:"12px",color:t.textMuted}},e.sample_arguments)),e.last_error&&Se.default.createElement(a,{label:"Last error"},Se.default.createElement("span",{style:{color:t.error}},e.last_error)),Se.default.createElement(a,{label:"Detected from"},e.detected_from?.join(", ")||"\u2014"))}var _e=re(ne());var Oue=6e4,Tue=[{value:24,label:"24h"},{value:168,label:"7d"},{value:720,label:"30d"}],Mue=[{value:"all",label:"All"},{value:"active",label:"Active"},{value:"configured",label:"Configured"},{value:"available",label:"Available"}],k$={active:{light:"#15803d",dark:"#86efac",bgLight:"#f0fdf4",bgDark:"rgba(34,197,94,0.15)"},configured:{light:"#b45309",dark:"#fcd34d",bgLight:"#fffbeb",bgDark:"rgba(245,158,11,0.15)"},available:{light:"#4b5563",dark:"rgba(255,255,255,0.6)",bgLight:"#f3f4f6",bgDark:"rgba(255,255,255,0.08)"},idle:{light:"#4b5563",dark:"rgba(255,255,255,0.6)",bgLight:"#f3f4f6",bgDark:"rgba(255,255,255,0.08)"}},tg=e=>e==null?"0":e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e);function v_({focusServer:e,onOpenTools:t}){let{darkMode:r}=At(),[n,a]=(0,_e.useState)(null),[i,o]=(0,_e.useState)(!0),[l,s]=(0,_e.useState)(null),[u,c]=(0,_e.useState)("all"),[d,f]=(0,_e.useState)(168),[p,m]=(0,_e.useState)(e||null),[y,h]=(0,_e.useState)(null),[v,g]=(0,_e.useState)(null),b=(0,_e.useCallback)(async()=>{try{let M=await fetch(`/api/mcp_servers?hours=${d}`);if(!M.ok)throw new Error(`Request failed (${M.status})`);a(await M.json()),s(null)}catch(M){s(M.message)}finally{o(!1)}},[d]);(0,_e.useEffect)(()=>{b();let M=setInterval(b,Oue);return()=>clearInterval(M)},[b]),(0,_e.useEffect)(()=>{e&&m(e)},[e]);let x={bg:r?"transparent":"#f9fafb",cardBg:r?"rgba(255,255,255,0.05)":"#ffffff",border:r?"rgba(255,255,255,0.1)":"#e5e7eb",borderLight:r?"rgba(255,255,255,0.05)":"#f3f4f6",textPrimary:r?"#ffffff":"#111827",textSecondary:r?"rgba(255,255,255,0.6)":"#6b7280",textMuted:r?"rgba(255,255,255,0.4)":"#9ca3af",textCell:r?"rgba(255,255,255,0.7)":"#4b5563",error:"#ef4444",errorBg:r?"rgba(239,68,68,0.2)":"#fef2f2",codeBg:r?"rgba(0,0,0,0.35)":"#f9fafb"},S=M=>{let F=k$[M]||k$.available;return{fg:r?F.dark:F.light,bg:r?F.bgDark:F.bgLight}},w=async M=>{h(M.key),g(null);try{let F=await fetch(`/api/mcp_servers/${encodeURIComponent(M.key)}/launch`,{method:"POST",headers:{"Content-Type":"application/json","X-CSRF-Token":document.querySelector('meta[name="csrf-token"]')?.content||""}}),N=await F.json();if(!F.ok)throw new Error(N.reason||N.error||`Launch failed (${F.status})`);g({kind:"ok",text:`${M.name} is starting in a sandbox (${N.sandbox.session_id.slice(0,8)}\u2026)`}),b()}catch(F){g({kind:"error",text:F.message})}finally{h(null)}};if(i&&!n)return _e.default.createElement("div",{className:"flex items-center justify-center h-64"},_e.default.createElement("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-red-500"}));if(l&&!n)return _e.default.createElement("div",{style:{padding:"24px"}},_e.default.createElement("h1",{style:{fontSize:"24px",fontWeight:"bold",color:x.textPrimary,margin:0}},"MCP Services"),_e.default.createElement("div",{style:{marginTop:"16px",padding:"12px 16px",background:x.errorBg,borderRadius:"8px",color:x.error,fontSize:"14px"}},"Failed to load MCP services: ",l));let{servers:_=[],summary:k={},sandboxes:A=[],statuses:P={}}=n||{},K=u==="all"?_:_.filter(M=>M.status===u),z=new Set(A.flatMap(M=>M.mcp_servers||[])),Q=({label:M,value:F,hint:N})=>_e.default.createElement("div",{style:{background:x.cardBg,borderRadius:"12px",padding:"20px",border:`1px solid ${x.border}`}},_e.default.createElement("div",{style:{fontSize:"11px",color:x.textSecondary,textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:"8px"}},M),_e.default.createElement("div",{style:{fontSize:"32px",fontWeight:"bold",fontFamily:"monospace",color:x.textPrimary}},F),N&&_e.default.createElement("div",{style:{fontSize:"13px",color:x.textSecondary,marginTop:"8px"}},N));return _e.default.createElement("div",{style:{borderRadius:"12px",overflow:"hidden",minHeight:"calc(100vh - 200px)",backgroundColor:x.bg}},_e.default.createElement("div",{style:{padding:"24px 24px 16px 24px",borderBottom:`1px solid ${x.border}`,marginBottom:"16px"}},_e.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",gap:"16px",flexWrap:"wrap"}},_e.default.createElement("div",null,_e.default.createElement("h1",{style:{fontSize:"24px",fontWeight:"bold",color:x.textPrimary,margin:0}},"MCP Services"),_e.default.createElement("p",{style:{fontSize:"14px",color:x.textSecondary,marginTop:"4px"}},"Servers detected from your agents' traffic, plus the defaults you can connect or run in a sandbox")),_e.default.createElement("div",{style:{display:"flex",gap:"4px"}},Tue.map(M=>_e.default.createElement("button",{key:M.value,onClick:()=>f(M.value),style:{padding:"6px 12px",fontSize:"13px",borderRadius:"6px",cursor:"pointer",border:`1px solid ${d===M.value?"#ef4444":x.border}`,background:d===M.value?r?"rgba(239,68,68,0.15)":"#fef2f2":"transparent",color:d===M.value?"#ef4444":x.textSecondary}},M.label))))),_e.default.createElement("div",{style:{padding:"0 24px 24px 24px"}},_e.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(200px, 1fr))",gap:"16px",marginBottom:"16px"}},_e.default.createElement(Q,{label:"Active",value:tg(k.active),hint:"called in this window"}),_e.default.createElement(Q,{label:"Configured",value:tg(k.configured),hint:"declared, no traffic yet"}),_e.default.createElement(Q,{label:"Available",value:tg(k.available),hint:"defaults you can connect"}),_e.default.createElement(Q,{label:"Tool Calls",value:tg(k.total_calls),hint:"through MCP servers"})),v&&_e.default.createElement("div",{style:{marginBottom:"16px",padding:"12px 16px",borderRadius:"8px",fontSize:"14px",background:v.kind==="error"?x.errorBg:r?"rgba(34,197,94,0.15)":"#f0fdf4",color:v.kind==="error"?x.error:r?"#86efac":"#15803d"}},v.text),_e.default.createElement("div",{style:{display:"flex",gap:"8px",marginBottom:"16px",flexWrap:"wrap"}},Mue.map(M=>_e.default.createElement("button",{key:M.value,onClick:()=>c(M.value),title:P[M.value]||"Every MCP service known to this workspace",style:{padding:"6px 12px",fontSize:"13px",borderRadius:"6px",cursor:"pointer",border:`1px solid ${u===M.value?"#ef4444":x.border}`,background:u===M.value?r?"rgba(239,68,68,0.15)":"#fef2f2":"transparent",color:u===M.value?"#ef4444":x.textSecondary}},M.label))),_e.default.createElement("div",{style:{display:"grid",gap:"12px"}},K.length===0?_e.default.createElement("div",{style:{background:x.cardBg,borderRadius:"12px",border:`1px solid ${x.border}`,textAlign:"center",padding:"48px 24px",color:x.textSecondary,fontSize:"14px"}},"No MCP services in this state"):K.map(M=>{let F=S(M.status),N=p===M.key,O=z.has(M.key);return _e.default.createElement("div",{key:M.key,style:{background:x.cardBg,borderRadius:"12px",border:`1px solid ${N?F.fg:x.border}`,overflow:"hidden"}},_e.default.createElement("div",{onClick:()=>m(N?null:M.key),style:{padding:"16px 20px",cursor:"pointer",display:"flex",alignItems:"center",gap:"16px",flexWrap:"wrap"}},_e.default.createElement("div",{style:{flex:1,minWidth:"220px"}},_e.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexWrap:"wrap"}},_e.default.createElement("span",{style:{fontSize:"15px",fontWeight:"600",color:x.textPrimary}},M.name),_e.default.createElement("span",{style:{fontSize:"11px",padding:"2px 8px",borderRadius:"6px",background:F.bg,color:F.fg,textTransform:"uppercase",letterSpacing:"0.04em"}},M.status),M.first_party&&_e.default.createElement("span",{style:{fontSize:"11px",padding:"2px 8px",borderRadius:"6px",background:r?"rgba(239,68,68,0.15)":"#fef2f2",color:"#ef4444"}},"first-party"),!M.known&&_e.default.createElement("span",{style:{fontSize:"11px",padding:"2px 8px",borderRadius:"6px",background:x.borderLight,color:x.textMuted},title:"Seen in your traffic but not in the platform catalog"},"undocumented"),O&&_e.default.createElement("span",{style:{fontSize:"11px",padding:"2px 8px",borderRadius:"6px",background:r?"rgba(34,197,94,0.15)":"#f0fdf4",color:r?"#86efac":"#15803d"}},"\u25CF sandbox running")),M.description&&_e.default.createElement("div",{style:{fontSize:"13px",color:x.textSecondary,marginTop:"4px"}},M.description)),_e.default.createElement("div",{style:{display:"flex",gap:"24px",alignItems:"center"}},_e.default.createElement("div",{style:{textAlign:"right"}},_e.default.createElement("div",{style:{fontSize:"18px",fontFamily:"monospace",fontWeight:"600",color:x.textPrimary}},tg(M.calls)),_e.default.createElement("div",{style:{fontSize:"11px",color:x.textMuted}},"calls")),_e.default.createElement("div",{style:{textAlign:"right"}},_e.default.createElement("div",{style:{fontSize:"18px",fontFamily:"monospace",fontWeight:"600",color:M.errors>0?x.error:x.textPrimary}},M.errors||0),_e.default.createElement("div",{style:{fontSize:"11px",color:x.textMuted}},"errors")),M.launchable&&_e.default.createElement("button",{onClick:I=>{I.stopPropagation(),w(M)},disabled:y===M.key,style:{padding:"8px 14px",fontSize:"13px",borderRadius:"6px",border:"none",background:y===M.key?x.borderLight:"#ef4444",color:y===M.key?x.textMuted:"#ffffff",cursor:y===M.key?"wait":"pointer",fontWeight:"500",whiteSpace:"nowrap"},title:`Start ${M.name} in a sandbox session`},y===M.key?"Starting\u2026":O?"Start another":"Start in sandbox"))),N&&_e.default.createElement(Pue,{server:M,colors:x,tone:F,onOpenTools:t}))})),A.length>0&&_e.default.createElement("div",{style:{marginTop:"24px",background:x.cardBg,borderRadius:"12px",border:`1px solid ${x.border}`,padding:"20px"}},_e.default.createElement("h3",{style:{fontSize:"16px",fontWeight:"600",color:x.textPrimary,margin:"0 0 12px 0"}},"Running sandboxes"),_e.default.createElement("div",{style:{display:"grid",gap:"8px"}},A.map(M=>_e.default.createElement("div",{key:M.session_id,style:{display:"flex",justifyContent:"space-between",gap:"12px",fontSize:"13px",color:x.textCell,flexWrap:"wrap"}},_e.default.createElement("span",{style:{fontFamily:"monospace"}},(M.mcp_servers||[]).join(", ")||M.sandbox_type),_e.default.createElement("span",{style:{color:x.textMuted}},M.status," \xB7 ",M.runs_count,"/",M.max_runs," runs \xB7 expires ",new Date(M.expires_at).toLocaleTimeString())))))))}function Pue({server:e,colors:t,tone:r,onOpenTools:n}){let a=({label:o,children:l})=>_e.default.createElement("div",{style:{display:"flex",gap:"12px",fontSize:"13px",alignItems:"baseline"}},_e.default.createElement("span",{style:{color:t.textMuted,minWidth:"120px",fontSize:"11px",textTransform:"uppercase",letterSpacing:"0.05em"}},o),_e.default.createElement("span",{style:{color:t.textCell,flex:1,wordBreak:"break-word"}},l)),i=e.command||e.url;return _e.default.createElement("div",{style:{padding:"0 20px 20px 20px",display:"grid",gap:"10px"}},_e.default.createElement("div",{style:{height:"1px",background:t.borderLight,marginBottom:"4px"}}),i&&_e.default.createElement(a,{label:e.transport==="http"?"Endpoint":"Command"},_e.default.createElement("code",{style:{fontFamily:"monospace",fontSize:"12px",padding:"4px 8px",borderRadius:"4px",background:t.codeBg,display:"inline-block"}},i)),e.transport&&_e.default.createElement(a,{label:"Transport"},e.transport),e.categories?.length>0&&_e.default.createElement(a,{label:"Categories"},e.categories.join(", ")),e.requires_credentials?.length>0&&_e.default.createElement(a,{label:"Requires"},e.requires_credentials.join(", ")),_e.default.createElement(a,{label:e.tool_count>0?"Tools used":"Tools offered"},e.tools?.length>0?_e.default.createElement("span",{style:{display:"flex",gap:"6px",flexWrap:"wrap"}},e.tools.map(o=>_e.default.createElement("code",{key:o,style:{fontFamily:"monospace",fontSize:"11px",padding:"2px 8px",borderRadius:"6px",background:r.bg,color:r.fg}},o))):_e.default.createElement("span",{style:{color:t.textMuted}},"none recorded")),e.agents?.length>0&&_e.default.createElement(a,{label:"Used by"},e.agents.join(", ")),e.configured_by?.length>0&&_e.default.createElement(a,{label:"Configured by"},e.configured_by.join(", ")),e.last_seen&&_e.default.createElement(a,{label:"Last call"},new Date(e.last_seen).toLocaleString()),_e.default.createElement("div",{style:{display:"flex",gap:"12px",marginTop:"4px",flexWrap:"wrap"}},e.docs_url&&_e.default.createElement("a",{href:e.docs_url,target:"_blank",rel:"noopener noreferrer",style:{fontSize:"13px",color:"#ef4444",textDecoration:"none"}},"Documentation \u2192"),e.calls>0&&n&&_e.default.createElement("button",{onClick:()=>n(e.key),style:{fontSize:"13px",color:"#ef4444",background:"none",border:"none",padding:0,cursor:"pointer"}},"View its tools \u2192")))}var H=re(ne());var Ss=re(ne());var V1={logger:typeof console<"u"?console:void 0,WebSocket:typeof WebSocket<"u"?WebSocket:void 0},gr={log(...e){this.enabled&&(e.push(Date.now()),V1.logger.log("[ActionCable]",...e))}},ng=()=>new Date().getTime(),H1=e=>(ng()-e)/1e3,ag=class{constructor(t){this.visibilityDidChange=this.visibilityDidChange.bind(this),this.connection=t,this.reconnectAttempts=0}start(){this.isRunning()||(this.startedAt=ng(),delete this.stoppedAt,this.startPolling(),addEventListener("visibilitychange",this.visibilityDidChange),gr.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`))}stop(){this.isRunning()&&(this.stoppedAt=ng(),this.stopPolling(),removeEventListener("visibilitychange",this.visibilityDidChange),gr.log("ConnectionMonitor stopped"))}isRunning(){return this.startedAt&&!this.stoppedAt}recordMessage(){this.pingedAt=ng()}recordConnect(){this.reconnectAttempts=0,delete this.disconnectedAt,gr.log("ConnectionMonitor recorded connect")}recordDisconnect(){this.disconnectedAt=ng(),gr.log("ConnectionMonitor recorded disconnect")}startPolling(){this.stopPolling(),this.poll()}stopPolling(){clearTimeout(this.pollTimeout)}poll(){this.pollTimeout=setTimeout((()=>{this.reconnectIfStale(),this.poll()}),this.getPollInterval())}getPollInterval(){let{staleThreshold:t,reconnectionBackoffRate:r}=this.constructor,n=Math.pow(1+r,Math.min(this.reconnectAttempts,10)),i=(this.reconnectAttempts===0?1:r)*Math.random();return t*1e3*n*(1+i)}reconnectIfStale(){this.connectionIsStale()&&(gr.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${H1(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`),this.reconnectAttempts++,this.disconnectedRecently()?gr.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${H1(this.disconnectedAt)} s`):(gr.log("ConnectionMonitor reopening"),this.connection.reopen()))}get refreshedAt(){return this.pingedAt?this.pingedAt:this.startedAt}connectionIsStale(){return H1(this.refreshedAt)>this.constructor.staleThreshold}disconnectedRecently(){return this.disconnectedAt&&H1(this.disconnectedAt)<this.constructor.staleThreshold}visibilityDidChange(){document.visibilityState==="visible"&&setTimeout((()=>{(this.connectionIsStale()||!this.connection.isOpen())&&(gr.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`),this.connection.reopen())}),200)}};ag.staleThreshold=6;ag.reconnectionBackoffRate=.15;var C$={message_types:{welcome:"welcome",disconnect:"disconnect",ping:"ping",confirmation:"confirm_subscription",rejection:"reject_subscription"},disconnect_reasons:{unauthorized:"unauthorized",invalid_request:"invalid_request",server_restart:"server_restart",remote:"remote"},default_mount_path:"/cable",protocols:["actioncable-v1-json","actioncable-unsupported"]},{message_types:rg,protocols:g_}=C$,Due=g_.slice(0,g_.length-1),N$=[].indexOf,ig=class{constructor(t){this.open=this.open.bind(this),this.consumer=t,this.subscriptions=this.consumer.subscriptions,this.monitor=new ag(this),this.disconnected=!0}send(t){return this.isOpen()?(this.webSocket.send(JSON.stringify(t)),!0):!1}open(){if(this.isActive())return gr.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`),!1;{let t=[...g_,...this.consumer.subprotocols||[]];return gr.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${t}`),this.webSocket&&this.uninstallEventHandlers(),this.webSocket=new V1.WebSocket(this.consumer.url,t),this.installEventHandlers(),this.monitor.start(),!0}}close({allowReconnect:t}={allowReconnect:!0}){if(t||this.monitor.stop(),this.isOpen())return this.webSocket.close()}reopen(){if(gr.log(`Reopening WebSocket, current state is ${this.getState()}`),this.isActive())try{return this.close()}catch(t){gr.log("Failed to reopen WebSocket",t)}finally{gr.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`),setTimeout(this.open,this.constructor.reopenDelay)}else return this.open()}getProtocol(){if(this.webSocket)return this.webSocket.protocol}isOpen(){return this.isState("open")}isActive(){return this.isState("open","connecting")}triedToReconnect(){return this.monitor.reconnectAttempts>0}isProtocolSupported(){return N$.call(Due,this.getProtocol())>=0}isState(...t){return N$.call(t,this.getState())>=0}getState(){if(this.webSocket){for(let t in V1.WebSocket)if(V1.WebSocket[t]===this.webSocket.readyState)return t.toLowerCase()}return null}installEventHandlers(){for(let t in this.events){let r=this.events[t].bind(this);this.webSocket[`on${t}`]=r}}uninstallEventHandlers(){for(let t in this.events)this.webSocket[`on${t}`]=function(){}}};ig.reopenDelay=500;ig.prototype.events={message(e){if(!this.isProtocolSupported())return;let{identifier:t,message:r,reason:n,reconnect:a,type:i}=JSON.parse(e.data);switch(this.monitor.recordMessage(),i){case rg.welcome:return this.triedToReconnect()&&(this.reconnectAttempted=!0),this.monitor.recordConnect(),this.subscriptions.reload();case rg.disconnect:return gr.log(`Disconnecting. Reason: ${n}`),this.close({allowReconnect:a});case rg.ping:return null;case rg.confirmation:return this.subscriptions.confirmSubscription(t),this.reconnectAttempted?(this.reconnectAttempted=!1,this.subscriptions.notify(t,"connected",{reconnected:!0})):this.subscriptions.notify(t,"connected",{reconnected:!1});case rg.rejection:return this.subscriptions.reject(t);default:return this.subscriptions.notify(t,"received",r)}},open(){if(gr.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`),this.disconnected=!1,!this.isProtocolSupported())return gr.log("Protocol is unsupported. Stopping monitor and disconnecting."),this.close({allowReconnect:!1})},close(e){if(gr.log("WebSocket onclose event"),!this.disconnected)return this.disconnected=!0,this.monitor.recordDisconnect(),this.subscriptions.notifyAll("disconnected",{willAttemptReconnect:this.monitor.isRunning()})},error(){gr.log("WebSocket onerror event")}};var Iue=function(e,t){if(t!=null)for(let r in t){let n=t[r];e[r]=n}return e},y_=class{constructor(t,r={},n){this.consumer=t,this.identifier=JSON.stringify(r),Iue(this,n)}perform(t,r={}){return r.action=t,this.send(r)}send(t){return this.consumer.send({command:"message",identifier:this.identifier,data:JSON.stringify(t)})}unsubscribe(){return this.consumer.subscriptions.remove(this)}},h_=class{constructor(t){this.subscriptions=t,this.pendingSubscriptions=[]}guarantee(t){this.pendingSubscriptions.indexOf(t)==-1?(gr.log(`SubscriptionGuarantor guaranteeing ${t.identifier}`),this.pendingSubscriptions.push(t)):gr.log(`SubscriptionGuarantor already guaranteeing ${t.identifier}`),this.startGuaranteeing()}forget(t){gr.log(`SubscriptionGuarantor forgetting ${t.identifier}`),this.pendingSubscriptions=this.pendingSubscriptions.filter((r=>r!==t))}startGuaranteeing(){this.stopGuaranteeing(),this.retrySubscribing()}stopGuaranteeing(){clearTimeout(this.retryTimeout)}retrySubscribing(){this.retryTimeout=setTimeout((()=>{this.subscriptions&&typeof this.subscriptions.subscribe=="function"&&this.pendingSubscriptions.map((t=>{gr.log(`SubscriptionGuarantor resubscribing ${t.identifier}`),this.subscriptions.subscribe(t)}))}),500)}},x_=class{constructor(t){this.consumer=t,this.guarantor=new h_(this),this.subscriptions=[]}create(t,r){let n=t,a=typeof n=="object"?n:{channel:n},i=new y_(this.consumer,a,r);return this.add(i)}add(t){return this.subscriptions.push(t),this.consumer.ensureActiveConnection(),this.notify(t,"initialized"),this.subscribe(t),t}remove(t){return this.forget(t),this.findAll(t.identifier).length||this.sendCommand(t,"unsubscribe"),t}reject(t){return this.findAll(t).map((r=>(this.forget(r),this.notify(r,"rejected"),r)))}forget(t){return this.guarantor.forget(t),this.subscriptions=this.subscriptions.filter((r=>r!==t)),t}findAll(t){return this.subscriptions.filter((r=>r.identifier===t))}reload(){return this.subscriptions.map((t=>this.subscribe(t)))}notifyAll(t,...r){return this.subscriptions.map((n=>this.notify(n,t,...r)))}notify(t,r,...n){let a;return typeof t=="string"?a=this.findAll(t):a=[t],a.map((i=>typeof i[r]=="function"?i[r](...n):void 0))}subscribe(t){this.sendCommand(t,"subscribe")&&this.guarantor.guarantee(t)}confirmSubscription(t){gr.log(`Subscription confirmed ${t}`),this.findAll(t).map((r=>this.guarantor.forget(r)))}sendCommand(t,r){let{identifier:n}=t;return this.consumer.send({command:r,identifier:n})}},b_=class{constructor(t){this._url=t,this.subscriptions=new x_(this),this.connection=new ig(this),this.subprotocols=[]}get url(){return jue(this._url)}send(t){return this.connection.send(t)}connect(){return this.connection.open()}disconnect(){return this.connection.close({allowReconnect:!1})}ensureActiveConnection(){if(!this.connection.isActive())return this.connection.open()}addSubProtocol(t){this.subprotocols=[...this.subprotocols,t]}};function jue(e){if(typeof e=="function"&&(e=e()),e&&!/^wss?:/i.test(e)){let t=document.createElement("a");return t.href=e,t.href=t.href,t.protocol=t.protocol.replace("http","ws"),t.href}else return e}function E$(e=zue("url")||C$.default_mount_path){return new b_(e)}function zue(e){let t=document.head.querySelector(`meta[name='action-cable-${e}']`);if(t)return t.getAttribute("content")}var K1=null;function Lue(){if(K1===null)try{K1=E$()}catch{K1=!1}return K1||null}function _$(e,t,r,n=!0){let a=(0,Ss.useRef)(null),i=(0,Ss.useRef)(r);return(0,Ss.useEffect)(()=>{i.current=r},[r]),(0,Ss.useEffect)(()=>{if(!n||!e)return;let l=Lue();return a.current=l.subscriptions.create({channel:e,...t},{connected(){console.log(`[ActionCable] Connected to ${e}`,t)},disconnected(){console.log(`[ActionCable] Disconnected from ${e}`)},received(s){console.log(`[ActionCable] Received on ${e}:`,s),i.current&&i.current(s)},rejected(){console.warn(`[ActionCable] Subscription rejected for ${e}`)}}),()=>{a.current&&(console.log(`[ActionCable] Unsubscribing from ${e}`),a.current.unsubscribe(),a.current=null)}},[e,JSON.stringify(t),n]),{send:(0,Ss.useCallback)((l,s)=>{a.current&&a.current.perform(l,s)},[])}}var q1=[{id:"anthropic",name:"Anthropic",model:"claude-haiku-4-5",color:"bg-orange-500"},{id:"openai",name:"OpenAI",model:"gpt-4o",color:"bg-green-500"},{id:"ollama",name:"Ollama",model:"llama3.1:8b",color:"bg-purple-500"}],Bue={playwright_mcp:[{name:"Screenshot Example.com",task:"Take a screenshot of https://example.com",description:"Navigate to example.com and capture a screenshot"},{name:"Extract Hacker News Headlines",task:"Go to https://news.ycombinator.com and list the top 5 story titles with their scores",description:"Scrape the front page of Hacker News"},{name:"Check Wikipedia",task:"Navigate to https://en.wikipedia.org/wiki/Artificial_intelligence and extract the first paragraph",description:"Extract content from Wikipedia"},{name:"GitHub Trending",task:"Visit https://github.com/trending and list the top 3 trending repositories",description:"Check GitHub's trending repositories"}],comparison:[{name:"Explain Ruby Blocks",task:"Explain how Ruby blocks work with a simple example",description:"Compare how each model explains Ruby concepts"},{name:"Write a Haiku",task:"Write a haiku about programming",description:"Compare creative output across models"},{name:"Debug This Code",task:"What's wrong with this code? def add(a, b); a - b; end; puts add(2, 3)",description:"Compare debugging abilities"},{name:"Summarize AI",task:"Summarize the current state of AI in 3 sentences",description:"Compare factual knowledge and conciseness"}]},O$={max_runs:10,timeout_seconds:300,session_duration_minutes:15};function w_({initialType:e="playwright_mcp",onClose:t}){let[r,n]=(0,H.useState)(e),[a,i]=(0,H.useState)(null),[o,l]=(0,H.useState)(""),[s,u]=(0,H.useState)([]),[c,d]=(0,H.useState)(null),[f,p]=(0,H.useState)(!1),[m,y]=(0,H.useState)(!1),[h,v]=(0,H.useState)(null),[g,b]=(0,H.useState)(null),[x,S]=(0,H.useState)(!1),[w,_]=(0,H.useState)(null),[k,A]=(0,H.useState)(!1),P=(0,H.useRef)(null),[K,z]=(0,H.useState)(["anthropic"]),[Q,M]=(0,H.useState)(!1),[F,N]=(0,H.useState)({}),[O,I]=(0,H.useState)([]),D=(0,H.useCallback)(L=>{switch(console.log("[SandboxRunner] Received ActionCable message:",L),L.type){case"run_started":Q?N(X=>({...X,[L.provider]:{status:"running",started_at:L.started_at,provider:L.provider}})):d(X=>({...X,status:"running",provider:L.provider}));break;case"run_complete":Q?(N(X=>({...X,[L.provider]:{...L.run,provider:L.provider}})),I(X=>X.filter(B=>B!==L.provider)),L.sandbox&&(i(L.sandbox),u(L.sandbox.runs||[]))):(d(L.run),p(!1),L.sandbox&&(i(L.sandbox),u(L.sandbox.runs||[]))),I(X=>{let B=X.filter(Ae=>Ae!==L.provider);return B.length===0&&p(!1),B});break;case"run_error":Q?(N(X=>({...X,[L.provider]:{status:"failed",error:L.error,provider:L.provider}})),I(X=>X.filter(B=>B!==L.provider))):(d(X=>({...X,status:"failed",error:L.error})),p(!1)),L.sandbox&&i(L.sandbox);break}},[Q]);_$("SandboxChannel",{session_id:a?.session_id},D,!!a?.session_id),(0,H.useEffect)(()=>{j(),T()},[r]);let T=async()=>{try{let L=await fetch("/api/usage");if(L.ok){let X=await L.json();_(X.usage)}}catch{console.log("Could not fetch usage (user may not be authenticated)")}};(0,H.useEffect)(()=>{if(!a?.expires_at)return;let L=setInterval(()=>{let X=new Date,B=new Date(a.expires_at),Ae=Math.max(0,Math.floor((B-X)/1e3));b(Ae),Ae===0&&(i(C=>({...C,status:"expired"})),clearInterval(L))},1e3);return()=>clearInterval(L)},[a?.expires_at]),(0,H.useEffect)(()=>{P.current&&(P.current.scrollTop=P.current.scrollHeight)},[c?.result]);let j=async()=>{y(!0),v(null);try{let L=await fetch("/api/sandboxes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sandbox_type:r})});if(!L.ok)throw new Error("Failed to create sandbox session");let X=await L.json();i(X.sandbox),u([]),d(null)}catch(L){v(L.message)}finally{y(!1)}},R=async()=>{!o.trim()||f||!a||(Q&&K.length>1?await q():await U(K[0]||"anthropic"))},U=async L=>{p(!0),d({status:"running",task:o,provider:L,result:"",started_at:new Date().toISOString()});try{let X=await fetch(`/api/sandboxes/${a.session_id}/run`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({task:o,provider:L})}),B=await X.json();if(X.status===402&&B.upgrade_required){_(B.usage),S(!0),d(Ae=>({...Ae,status:"failed",error:B.message||"Plan limit reached"})),p(!1);return}if(!X.ok)throw new Error(B.error||"Task execution failed");B.usage&&_(B.usage),Pe(B.run_id)}catch(X){d(B=>({...B,status:"failed",error:X.message})),p(!1)}},q=async()=>{p(!0),I([...K]),N({});let L={};K.forEach(X=>{L[X]={status:"running",result:"",started_at:new Date().toISOString()}}),N(L);try{let X=await fetch("/api/sandboxes/compare",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({task:o,providers:K,sandbox_id:a?.session_id,sandbox_type:r})});if(!X.ok){let Ae=await X.json();throw new Error(Ae.error||"Comparison failed")}let B=await X.json();B.sandbox&&i(B.sandbox),ee(K,B.sandbox?.session_id||a?.session_id,B.sandbox?.runs_count??a?.runs_count??0)}catch(X){K.forEach(B=>{N(Ae=>({...Ae,[B]:{status:"failed",error:X.message}}))}),p(!1),I([])}},ee=(L,X,B)=>{if(!X)return;let Ae=async()=>{try{let C=await fetch(`/api/sandboxes/${X}`);if(!C.ok)throw new Error(`HTTP ${C.status}`);let Y=await C.json();i(Y.sandbox);let ve=Y.sandbox.runs||[];u(ve);let ze=new Set;if(ve.slice(B).forEach(tt=>{tt.provider&&(N(Lt=>({...Lt,[tt.provider]:{...tt,provider:tt.provider}})),(tt.status==="completed"||tt.status==="failed")&&ze.add(tt.provider))}),L.every(tt=>ze.has(tt))){p(!1),I([]);return}setTimeout(Ae,1e3)}catch(C){console.error("Comparison polling failed:",C),p(!1),I([])}};setTimeout(Ae,1e3)},fe=async()=>{if(a?.session_id)try{let X=await(await fetch(`/api/sandboxes/${a.session_id}`)).json();i(X.sandbox),u(X.sandbox.runs||[]),(X.sandbox.runs||[]).forEach(C=>{C.provider&&N(Y=>({...Y,[C.provider]:{...C,provider:C.provider}}))}),K.every(C=>{let Y=F[C];return Y?.status==="completed"||Y?.status==="failed"})&&(p(!1),I([]))}catch(L){console.error("Polling error:",L)}},pe=L=>{z(X=>X.includes(L)?X.length===1?X:X.filter(B=>B!==L):[...X,L])},Pe=async L=>{let X=async()=>{try{let Ae=await(await fetch(`/api/sandboxes/${a.session_id}`)).json();i(Ae.sandbox);let C=Ae.sandbox.runs||[],Y=C[C.length-1];if(Y&&(d(Y),u(C),Y.status==="completed"||Y.status==="failed")){p(!1);return}setTimeout(X,1e3)}catch{p(!1)}};X()},oe=L=>{L.key==="Enter"&&(L.metaKey||L.ctrlKey)&&R()},Te=L=>{if(!L)return"--:--";let X=Math.floor(L/60),B=L%60;return`${X}:${B.toString().padStart(2,"0")}`},V=L=>{switch(L){case"completed":return"text-green-600 bg-green-100";case"failed":return"text-red-600 bg-red-100";case"running":return"text-blue-600 bg-blue-100";case"ready":return"text-emerald-600 bg-emerald-100";case"expired":return"text-orange-600 bg-orange-100";default:return"text-gray-600 bg-gray-100"}},J=a?.status==="ready"&&a?.runs_count<a?.max_runs&&!f,E=async(L="monthly")=>{A(!0);try{await $f({planSlug:"pro",billingInterval:L})}catch(X){console.error("Checkout error:",X),v(X.message||"Failed to initiate checkout. Please try again."),A(!1)}};return H.default.createElement("div",{className:"h-full flex flex-col bg-gray-50"},H.default.createElement("div",{className:"bg-white border-b border-gray-200 px-6 py-4"},H.default.createElement("div",{className:"flex items-center justify-between"},H.default.createElement("div",{className:"flex items-center space-x-4"},H.default.createElement(fr,{size:48,appearance:{hat:"fedora",hatAccessory:"theaterMasks",heldItem:"browser"}}),H.default.createElement("div",null,H.default.createElement("h1",{className:"text-xl font-semibold text-gray-900"},"PlaywrightMCP Demo"),H.default.createElement("p",{className:"text-sm text-gray-500"},"Try browser automation for free - no account required"))),H.default.createElement("div",{className:"flex items-center space-x-4"},a&&H.default.createElement("div",{className:"flex items-center space-x-3 text-sm"},H.default.createElement("span",{className:`px-2 py-1 rounded-full text-xs font-medium ${V(a.status)}`},a.status),H.default.createElement("span",{className:"text-gray-500"},a.runs_count,"/",a.max_runs," runs"),H.default.createElement("span",{className:`font-mono ${g<60?"text-red-500":"text-gray-500"}`},Te(g))),t&&H.default.createElement("button",{onClick:t,className:"text-gray-400 hover:text-gray-600"},H.default.createElement("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},H.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})))))),H.default.createElement("div",{className:"flex-1 p-6 overflow-hidden"},H.default.createElement("div",{className:"grid grid-cols-3 gap-6 h-full"},H.default.createElement("div",{className:"col-span-2 flex flex-col space-y-4"},H.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-4"},H.default.createElement("textarea",{value:o,onChange:L=>l(L.target.value),onKeyDown:oe,placeholder:"Describe what you want the browser agent to do...",rows:3,disabled:!J,className:"w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-rose-500 focus:border-transparent resize-none disabled:bg-gray-100"}),H.default.createElement("div",{className:"flex items-center justify-between mt-3"},H.default.createElement("span",{className:"text-xs text-gray-400"},"Press ",H.default.createElement("kbd",{className:"px-1.5 py-0.5 bg-gray-100 rounded text-gray-600"},"Cmd")," + ",H.default.createElement("kbd",{className:"px-1.5 py-0.5 bg-gray-100 rounded text-gray-600"},"Enter")," to run"),H.default.createElement("button",{onClick:R,disabled:!o.trim()||!J,className:`flex items-center space-x-2 px-6 py-2 rounded-lg transition-colors ${o.trim()&&J?"bg-rose-500 text-white hover:bg-rose-600":"bg-gray-200 text-gray-400 cursor-not-allowed"}`},f?H.default.createElement(H.default.Fragment,null,H.default.createElement("span",{className:"animate-spin"},"\u25E0"),H.default.createElement("span",null,"Running...")):H.default.createElement(H.default.Fragment,null,H.default.createElement("span",null,"\u25B6"),H.default.createElement("span",null,"Run"))))),H.default.createElement("div",{className:"flex-1 bg-white rounded-xl border border-gray-200 flex flex-col overflow-hidden"},H.default.createElement("div",{className:"px-4 py-3 border-b border-gray-200 flex items-center justify-between"},H.default.createElement("h3",{className:"font-medium text-gray-900"},Q&&Object.keys(F).length>0?"Comparison Results":"Output"),c&&!Q&&H.default.createElement("span",{className:`px-2 py-0.5 rounded-full text-xs font-medium ${V(c.status)}`},c.status),Q&&O.length>0&&H.default.createElement("span",{className:"text-xs text-blue-600"},"Running ",O.length," provider(s)...")),H.default.createElement("div",{ref:P,className:"flex-1 overflow-auto bg-gray-50"},m?H.default.createElement("div",{className:"flex items-center justify-center h-full text-gray-500 p-4"},H.default.createElement("span",{className:"animate-pulse"},"Starting sandbox...")):h?H.default.createElement("div",{className:"text-red-600 p-4"},h):Q&&Object.keys(F).length>0?H.default.createElement("div",{className:"grid grid-cols-1 divide-y divide-gray-200"},K.map(L=>{let X=q1.find(Ae=>Ae.id===L),B=F[L];return H.default.createElement("div",{key:L,className:"p-4"},H.default.createElement("div",{className:"flex items-center justify-between mb-2"},H.default.createElement("div",{className:"flex items-center space-x-2"},H.default.createElement("div",{className:`w-3 h-3 rounded-full ${X?.color||"bg-gray-400"}`}),H.default.createElement("span",{className:"font-medium text-gray-900"},X?.name||L),H.default.createElement("span",{className:"text-xs text-gray-500"},X?.model)),B&&H.default.createElement("div",{className:"flex items-center space-x-2"},H.default.createElement("span",{className:`px-2 py-0.5 rounded-full text-xs font-medium ${V(B.status)}`},B.status),B.tokens&&H.default.createElement("span",{className:"text-xs text-gray-500"},B.tokens," tokens"),B.duration_ms&&H.default.createElement("span",{className:"text-xs text-gray-500"},(B.duration_ms/1e3).toFixed(1),"s"))),H.default.createElement("div",{className:"bg-white rounded-lg border border-gray-200 p-3 font-mono text-sm max-h-48 overflow-auto"},B?.status==="running"?H.default.createElement("div",{className:"flex items-center space-x-2 text-gray-500"},H.default.createElement("span",{className:"animate-pulse"},"\u25CF"),H.default.createElement("span",null,"Processing...")):B?.error?H.default.createElement("div",{className:"text-red-600"},B.error):B?.result?H.default.createElement("pre",{className:"whitespace-pre-wrap text-gray-800"},B.result):H.default.createElement("span",{className:"text-gray-400"},"Waiting...")))})):c?H.default.createElement("div",{className:"p-4 font-mono text-sm"},c.provider&&H.default.createElement("div",{className:"flex items-center space-x-2 mb-3 pb-2 border-b border-gray-200"},H.default.createElement("div",{className:`w-2 h-2 rounded-full ${q1.find(L=>L.id===c.provider)?.color||"bg-gray-400"}`}),H.default.createElement("span",{className:"text-sm text-gray-600"},q1.find(L=>L.id===c.provider)?.name||c.provider)),c.status==="running"?H.default.createElement("div",{className:"flex items-center space-x-2 text-gray-500"},H.default.createElement("span",{className:"animate-pulse"},"\u25CF"),H.default.createElement("span",null,"Executing task...")):c.error?H.default.createElement("div",{className:"text-red-600"},H.default.createElement("div",{className:"font-semibold mb-2"},"Error:"),H.default.createElement("pre",{className:"whitespace-pre-wrap"},c.error)):H.default.createElement("pre",{className:"whitespace-pre-wrap text-gray-800"},c.result||"Processing...")):H.default.createElement("div",{className:"text-gray-400 text-center py-12"},H.default.createElement("p",{className:"mb-2"},"Select a sample task or enter your own"),H.default.createElement("p",{className:"text-xs"},Q?`Compare results across ${K.length} providers`:"Task will execute using the selected provider"))))),H.default.createElement("div",{className:"space-y-4 overflow-auto"},H.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-4"},H.default.createElement("div",{className:"flex items-center justify-between mb-3"},H.default.createElement("h4",{className:"font-medium text-gray-900"},"Providers"),H.default.createElement("label",{className:"flex items-center space-x-2 cursor-pointer"},H.default.createElement("input",{type:"checkbox",checked:Q,onChange:L=>M(L.target.checked),className:"rounded border-gray-300 text-rose-500 focus:ring-rose-500"}),H.default.createElement("span",{className:"text-xs text-gray-600"},"Compare"))),H.default.createElement("div",{className:"space-y-2"},q1.map(L=>H.default.createElement("label",{key:L.id,className:`flex items-center justify-between p-2 rounded-lg border cursor-pointer transition-colors ${K.includes(L.id)?"border-rose-300 bg-rose-50":"border-gray-200 hover:bg-gray-50"}`},H.default.createElement("div",{className:"flex items-center space-x-3"},H.default.createElement("input",{type:"checkbox",checked:K.includes(L.id),onChange:()=>pe(L.id),className:"rounded border-gray-300 text-rose-500 focus:ring-rose-500"}),H.default.createElement("div",{className:`w-2 h-2 rounded-full ${L.color}`}),H.default.createElement("span",{className:"text-sm font-medium text-gray-900"},L.name)),H.default.createElement("span",{className:"text-xs text-gray-500"},L.model)))),Q&&K.length>1&&H.default.createElement("div",{className:"mt-3 p-2 bg-purple-50 rounded-lg"},H.default.createElement("p",{className:"text-xs text-purple-700"},"Comparison mode: Run task on ",K.length," providers simultaneously"))),H.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-4"},H.default.createElement("div",{className:"flex items-center justify-between mb-3"},H.default.createElement("h4",{className:"font-medium text-gray-900"},"Sample Tasks"),Q&&H.default.createElement("button",{onClick:()=>n(r==="playwright_mcp"?"comparison":"playwright_mcp"),className:"text-xs text-rose-600 hover:text-rose-700"},r==="comparison"?"Browser Tasks":"Comparison Tasks")),H.default.createElement("div",{className:"space-y-2"},Bue[r]?.map((L,X)=>H.default.createElement("button",{key:X,onClick:()=>l(L.task),disabled:!J,className:"w-full text-left px-3 py-2 rounded-lg transition-colors border border-gray-200 hover:bg-gray-50 disabled:opacity-50"},H.default.createElement("div",{className:"font-medium text-sm text-gray-900"},L.name),H.default.createElement("div",{className:"text-xs text-gray-500 mt-0.5"},L.description))))),H.default.createElement("div",{className:"bg-gradient-to-br from-rose-50 to-purple-50 rounded-xl border border-rose-200 p-4"},H.default.createElement("h4",{className:"font-medium text-gray-900 mb-3"},w?.unlimited?"Unlimited":w?.plan==="free"?"Free Tier":`${w?.plan?.toUpperCase()||"FREE"} Plan`),w&&!w.unlimited&&w.runs_limit!=null&&H.default.createElement("div",{className:"mb-4"},H.default.createElement("div",{className:"flex justify-between text-sm mb-1"},H.default.createElement("span",{className:"text-gray-600"},"Agent Runs"),H.default.createElement("span",{className:`font-medium ${w.runs_remaining<=1?"text-rose-600":"text-gray-900"}`},w.runs_used," / ",w.runs_limit)),H.default.createElement("div",{className:"w-full bg-white rounded-full h-2 border border-rose-200"},H.default.createElement("div",{className:`h-2 rounded-full transition-all ${w.runs_remaining<=1?"bg-rose-500":"bg-emerald-500"}`,style:{width:`${Math.min(w.runs_used/w.runs_limit*100,100)}%`}})),w.runs_remaining<=1&&H.default.createElement("p",{className:"text-xs text-rose-600 mt-1"},w.runs_remaining===0?"Limit reached!":"Almost at limit!")),H.default.createElement("dl",{className:"space-y-2 text-sm"},H.default.createElement("div",{className:"flex justify-between"},H.default.createElement("dt",{className:"text-gray-500"},"Session Runs"),H.default.createElement("dd",{className:"text-gray-900"},a?.runs_count||0,"/",a?.max_runs||O$.max_runs)),H.default.createElement("div",{className:"flex justify-between"},H.default.createElement("dt",{className:"text-gray-500"},"Timeout"),H.default.createElement("dd",{className:"text-gray-900"},O$.timeout_seconds,"s per task"))),w?.plan==="free"&&H.default.createElement("div",{className:"mt-4 pt-4 border-t border-rose-200"},H.default.createElement("button",{onClick:()=>S(!0),className:"w-full text-center text-sm text-rose-600 hover:text-rose-700 font-medium"},"Upgrade to PRO \u2192"))),s.length>0&&H.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 overflow-hidden"},H.default.createElement("div",{className:"px-4 py-3 border-b border-gray-100"},H.default.createElement("h4",{className:"font-medium text-gray-900"},"Run History")),H.default.createElement("div",{className:"max-h-48 overflow-auto divide-y divide-gray-100"},s.slice().reverse().map((L,X)=>H.default.createElement("div",{key:L.id||X,className:"px-4 py-3 hover:bg-gray-50 cursor-pointer",onClick:()=>d(L)},H.default.createElement("div",{className:"flex items-center justify-between mb-1"},H.default.createElement("span",{className:`px-2 py-0.5 rounded-full text-xs font-medium ${V(L.status||"completed")}`},L.status||"completed"),H.default.createElement("span",{className:"text-xs text-gray-400"},L.tokens||0," tokens")),H.default.createElement("p",{className:"text-sm text-gray-600 truncate"},L.task))))),a?.status==="expired"&&H.default.createElement("button",{onClick:j,className:"w-full px-4 py-3 bg-rose-500 text-white rounded-lg hover:bg-rose-600 transition-colors"},"Start New Session")))),x&&H.default.createElement("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4"},H.default.createElement("div",{className:"bg-white rounded-2xl max-w-4xl w-full overflow-hidden shadow-2xl max-h-[90vh] overflow-y-auto"},H.default.createElement("div",{className:"bg-gradient-to-r from-rose-500 to-purple-600 px-6 py-6 text-white text-center"},H.default.createElement("h2",{className:"text-2xl font-bold mb-1"},"Upgrade Your Plan"),H.default.createElement("p",{className:"text-rose-100 text-sm"},"You've used ",w?.runs_used||0," of ",w?.runs_limit||25," trial runs. Choose a plan to continue.")),H.default.createElement("div",{className:"p-6"},H.default.createElement("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4"},H.default.createElement("div",{className:"border border-gray-200 rounded-xl p-5"},H.default.createElement("div",{className:"text-center mb-4"},H.default.createElement("h3",{className:"font-semibold text-gray-900"},"Free"),H.default.createElement("div",{className:"mt-2"},H.default.createElement("span",{className:"text-3xl font-bold text-gray-900"},"$0"),H.default.createElement("span",{className:"text-gray-500"},"/mo"))),H.default.createElement("ul",{className:"space-y-2 text-sm text-gray-600 mb-4"},H.default.createElement("li",{className:"flex items-start"},H.default.createElement("span",{className:"text-gray-400 mr-2"},"-"),"25 trial runs/month"),H.default.createElement("li",{className:"flex items-start"},H.default.createElement("span",{className:"text-gray-400 mr-2"},"-"),"Community support"),H.default.createElement("li",{className:"flex items-start"},H.default.createElement("span",{className:"text-gray-400 mr-2"},"-"),"Basic features")),H.default.createElement("button",{disabled:!0,className:"w-full py-2 px-4 border border-gray-300 text-gray-400 rounded-lg text-sm cursor-not-allowed"},"Current Plan")),H.default.createElement("div",{className:"border-2 border-rose-500 rounded-xl p-5 relative bg-rose-50"},H.default.createElement("div",{className:"absolute -top-3 left-1/2 transform -translate-x-1/2"},H.default.createElement("span",{className:"bg-rose-500 text-white text-xs font-semibold px-3 py-1 rounded-full"},"RECOMMENDED")),H.default.createElement("div",{className:"text-center mb-4 mt-2"},H.default.createElement("h3",{className:"font-semibold text-gray-900"},"Pro"),H.default.createElement("div",{className:"mt-2"},H.default.createElement("span",{className:"text-3xl font-bold text-gray-900"},"$99"),H.default.createElement("span",{className:"text-gray-500"},"/mo")),H.default.createElement("p",{className:"text-xs text-gray-500 mt-1"},"or $995/year (save 16%)")),H.default.createElement("ul",{className:"space-y-2 text-sm text-gray-700 mb-4"},H.default.createElement("li",{className:"flex items-start"},H.default.createElement("span",{className:"text-green-500 mr-2"},"\u2713"),"10,000 agent runs/month"),H.default.createElement("li",{className:"flex items-start"},H.default.createElement("span",{className:"text-green-500 mr-2"},"\u2713"),"Advanced cost tracking"),H.default.createElement("li",{className:"flex items-start"},H.default.createElement("span",{className:"text-green-500 mr-2"},"\u2713"),"25K traces/month"),H.default.createElement("li",{className:"flex items-start"},H.default.createElement("span",{className:"text-green-500 mr-2"},"\u2713"),"Priority email support")),H.default.createElement("button",{onClick:()=>E("monthly"),disabled:k,className:"w-full py-2 px-4 bg-rose-500 text-white rounded-lg text-sm font-semibold hover:bg-rose-600 transition-colors disabled:opacity-50"},k?"Loading...":"Upgrade to Pro")),H.default.createElement("div",{className:"border border-gray-200 rounded-xl p-5"},H.default.createElement("div",{className:"text-center mb-4"},H.default.createElement("h3",{className:"font-semibold text-gray-900"},"Enterprise"),H.default.createElement("div",{className:"mt-2"},H.default.createElement("span",{className:"text-3xl font-bold text-gray-900"},"$269"),H.default.createElement("span",{className:"text-gray-500"},"/mo")),H.default.createElement("p",{className:"text-xs text-gray-500 mt-1"},"or $2,690/year (save 16%)")),H.default.createElement("ul",{className:"space-y-2 text-sm text-gray-600 mb-4"},H.default.createElement("li",{className:"flex items-start"},H.default.createElement("span",{className:"text-green-500 mr-2"},"\u2713"),"Unlimited runs"),H.default.createElement("li",{className:"flex items-start"},H.default.createElement("span",{className:"text-green-500 mr-2"},"\u2713"),"500K traces/month"),H.default.createElement("li",{className:"flex items-start"},H.default.createElement("span",{className:"text-green-500 mr-2"},"\u2713"),"SSO & SOC2/HIPAA"),H.default.createElement("li",{className:"flex items-start"},H.default.createElement("span",{className:"text-green-500 mr-2"},"\u2713"),"Dedicated support")),H.default.createElement("a",{href:"mailto:sales@activeagents.ai",className:"block w-full py-2 px-4 border border-gray-300 text-gray-700 rounded-lg text-sm font-semibold text-center hover:bg-gray-50 transition-colors"},"Contact Sales")))),H.default.createElement("div",{className:"px-6 py-4 bg-gray-50 border-t border-gray-100 flex justify-center"},H.default.createElement("button",{onClick:()=>S(!1),className:"text-gray-500 hover:text-gray-700 text-sm"},"Maybe later")))))}var Ne=re(ne());var Y1={SCREENSHOT:"screenshot",IFRAME:"iframe"},T$={navigate:"[->]",click:"[*]",type:"[T]",form_fill:"[F]",key_press:"[K]",snapshot:"[S]",hover:"[~]",select:"[v]",file_upload:"[^]",dialog:"[!]",evaluate:"[js]",wait:"[..]",scroll:"[|]",drag:"[<>]"},S_={navigate:"#3b82f6",click:"#ef4444",type:"#10b981",form_fill:"#8b5cf6",key_press:"#f59e0b",snapshot:"#06b6d4",hover:"#ec4899",select:"#6366f1",file_upload:"#14b8a6",dialog:"#f97316",evaluate:"#a855f7",wait:"#94a3b8",scroll:"#64748b",drag:"#ea580c"},$ue=`