diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fe2adc0c..5ab2b7282 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Changed + +- **Agents and evaluations lead the sidebar** (`actionagent`). The first + group is Ask ActiveAgents, Agents, New Agent, Run Agents, Evaluations and + Scenarios; Observability keeps Traces, Interactions, Sessions and Metrics; + a new Build group holds Projects, Tools and MCP Services; Workspace is + unchanged. Every path and view is the same, only the order and grouping. + ## [1.9.5] - 2026-10-28 The `activeagent` command line: the gem's third surface beside the dashboard diff --git a/actionagent/app/assets/builds/action_agent.js b/actionagent/app/assets/builds/action_agent.js index 334869c14..38b441d0d 100644 --- a/actionagent/app/assets/builds/action_agent.js +++ b/actionagent/app/assets/builds/action_agent.js @@ -70,7 +70,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `)));continue}let l=s.match(/^(#{1,4})\s+(.*)$/);if(l){n.push(Qn.default.createElement("div",{key:i++,className:"font-semibold mt-1",style:{fontSize:`${1.25-l[1].length*.05}em`}},Qx(l[2],`h${i}`))),a+=1;continue}if(GG(s)&&a+1Qn.default.createElement("th",{key:f,className:"text-left font-semibold px-2 py-1",style:{borderBottom:"1px solid rgba(127,127,127,0.35)"}},Qx(p,`th${d}-${f}`))))),Qn.default.createElement("tbody",null,c.map((p,f)=>Qn.default.createElement("tr",{key:f},u.map((m,y)=>Qn.default.createElement("td",{key:y,className:"px-2 py-1 align-top",style:{borderBottom:"1px solid rgba(127,127,127,0.15)"}},Qx(p[y]??"",`td${d}-${f}-${y}`)))))))));continue}if(/^\s*([-*]|\d+\.)\s+/.test(s)){let u=[];for(;aQn.default.createElement("li",{key:d},Qx(c,`li${i}-${d}`)))));continue}if(s.trim()===""){n.push(Qn.default.createElement("div",{key:i++,className:"h-2"})),a+=1;continue}n.push(Qn.default.createElement("div",{key:i++},Qx(s,`p${i}`))),a+=1}return Qn.default.createElement("div",{className:"break-words"},n)}var Za=Z(J()),Bwe=e=>{let t=e.mcp_server||e.server;return t?`MCP server \xB7 ${t}`:typeof e.name=="string"&&e.name.startsWith("mcp__")?`MCP server \xB7 ${e.name.split("__")[1]}`:e.gem?`gem \xB7 ${e.gem}`:e.source?String(e.source):"agent-defined \xB7 method on the agent class"},Fwe=e=>Array.isArray(e.parameters)?e.parameters:e.parameters&&typeof e.parameters=="object"?Object.keys(e.parameters.properties||e.parameters):[];function sI({tool:e,darkMode:t}){let r=Fwe(e);return Za.default.createElement("div",{style:{display:"grid",gap:"4px"}},e.description&&Za.default.createElement("div",{className:"text-sm",style:{color:t?"rgba(255,255,255,0.75)":"#4b5563"}},e.description),Za.default.createElement("div",{className:"text-xs font-mono",style:{color:t?"rgba(255,255,255,0.45)":"#9ca3af",display:"flex",flexWrap:"wrap",columnGap:"16px",rowGap:"4px"}},Za.default.createElement("span",null,"params: ",r.length>0?r.join(", "):"none"),Za.default.createElement("span",null,"source: ",Bwe(e))))}function lI({tools:e,darkMode:t}){let[r,n]=(0,Za.useState)(null),o=(e||[]).filter(s=>s&&s.name);if(o.length===0)return null;let a=o.find(s=>s.name===r),i=s=>({background:t?"rgba(34,197,94,0.12)":"#f0fdf4",color:t?"#86efac":"#15803d",border:`1px solid ${s?t?"#4ade80":"#22c55e":"transparent"}`,borderRadius:"6px",padding:"2px 8px",fontSize:"11px",cursor:"pointer"});return Za.default.createElement("div",{style:{marginTop:"8px"}},Za.default.createElement("div",{className:"flex items-center gap-1.5 flex-wrap font-mono"},Za.default.createElement("span",{className:"text-xs uppercase",style:{letterSpacing:"0.05em",color:t?"rgba(255,255,255,0.45)":"#9ca3af"}},"tools"),o.map(s=>Za.default.createElement("button",{key:s.name,onClick:l=>{l.stopPropagation(),n(r===s.name?null:s.name)},title:r===s.name?"Hide definition":"Show definition",style:i(r===s.name)},"\u2699 ",s.name))),a&&Za.default.createElement("div",{onClick:s=>s.stopPropagation(),style:{marginTop:"6px",padding:"8px 10px",borderRadius:"8px",background:t?"rgba(34,197,94,0.06)":"#f7fef9",border:`1px solid ${t?"rgba(34,197,94,0.25)":"#bbf7d0"}`}},Za.default.createElement(sI,{tool:a,darkMode:t})))}var Uwe=["application/json","application/xml","application/x-yaml","application/csv"],Wwe=/\.(csv|md|txt|json|ya?ml)$/i;function XG(e){let t=String(e?.type||e?.content_type||"").toLowerCase(),r=String(e?.name||e?.filename||"");return t.startsWith("image/")?"image":t==="application/pdf"?"document":t.startsWith("text/")||Uwe.includes(t)||Wwe.test(r)?"text":"file"}function ZG(e){let t=Number(e);return!Number.isFinite(t)||t<0?"":t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function JG(e){if(typeof e!="string")return!1;let t=e.trim();if(/^(data:image\/|blob:)/i.test(t))return!0;if(/^\/[\\/]/.test(t))return!1;if(t.startsWith("/"))return!0;if(!/^https?:\/\//i.test(t)||typeof window>"u"||!window.location)return!1;try{return new URL(t,window.location.href).origin===window.location.origin}catch{return!1}}var QG=e=>e==null?null:e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(2)}s`,Rx=e=>{if(e==null)return null;if(typeof e=="object")return JSON.stringify(e,null,2);try{return JSON.stringify(JSON.parse(e),null,2)}catch{return null}},Hwe=["text","output","body","content"],RG=e=>{if(e==null)return null;if(typeof e=="object")return e;try{return JSON.parse(e)}catch{return null}},qwe=e=>{let t=RG(e.tool_result)??RG(e.content);if(!t||typeof t!="object"||Array.isArray(t))return null;let r=Hwe.find(a=>typeof t[a]=="string"&&t[a].trim().length>0);if(!r)return null;let n=[t.error&&"error",t.status!=null&&`status ${t.status}`,typeof t.url=="string"&&t.url.replace(/^https?:\/\//,""),typeof t.agent=="string"&&`\u2192 ${t.agent}`,t.truncated&&"truncated"].filter(Boolean).join(" \xB7 "),o=Object.fromEntries(Object.entries(t).filter(([a])=>a!==r));return{field:r,meta:n,body:t[r],rest:o}},Kwe=e=>!!(e.tool_name||e.tool_call_id||e.tool_arguments||e.tool_result||(e.tool_calls||[]).length>0||e.duration_ms!=null||Rx(e.content)),rY=280,Vwe=["tool","system","developer"],e0=(e,t=rY)=>e.replace(/\s+/g," ").trim().slice(0,t),uI=e=>{if(e==null)return null;if(typeof e=="object")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return String(e)}},nY=e=>{let t=e.tool_calls;return t?Array.isArray(t)?t.map(r=>({name:r.function?.name||r.name||e.tool_name,args:uI(r.function?.arguments??r.arguments??r.input)})):[{name:e.tool_name,args:uI(t)}]:[]},oY=e=>!!(e&&String(e).trim()&&String(e).trim()!=="\u2014"),Gwe=e=>{let t=(e||[]).filter(Boolean),r=new Map,n=new Set;return t.forEach((o,a)=>{if(o.role!=="assistant"||oY(o.content))return;let i=nY(o);if(i.length===0)return;let s=new Set;Array.isArray(o.tool_calls)?o.tool_calls.forEach(u=>u.id&&s.add(u.id)):o.tool_call_id&&s.add(o.tool_call_id);let l=[];for(let u=a+1;u0&&c.tool_call_id&&!s.has(c.tool_call_id))break;l.push(u)}l.length!==0&&(l.forEach((u,c)=>{let d=t[u],p=i.find(f=>f.name&&f.name===d.tool_name)||i[Math.min(c,i.length-1)];p&&p.args&&!d.tool_arguments&&r.set(u,{tool_arguments:p.args,created_at:o.created_at||d.created_at})}),n.add(a))}),t.map((o,a)=>r.has(a)?{...o,...r.get(a)}:o).filter((o,a)=>!n.has(a))},eY=e=>Vwe.includes(e.role)&&typeof e.content=="string"&&e0(e.content).length>=rY,Ywe=({message:e,darkMode:t})=>{let r=e.trace_duration_ms||0;if(!r||e.span_duration_ms==null)return null;let n=Math.min((e.span_start_ms||0)/r*100,98),o=Math.max(e.span_duration_ms/r*100,2),a=e.role==="tool"?"#22c55e":e.role==="assistant"?"#ef4444":"#60a5fa";return ze.default.createElement("span",{title:`${Math.round(e.span_duration_ms)}ms \xB7 starts at ${Math.round(e.span_start_ms||0)}ms of ${Math.round(r)}ms`,style:{position:"relative",width:"96px",height:"5px",borderRadius:"999px",background:t?"rgba(255,255,255,0.08)":"#f3f4f6",flexShrink:0,marginTop:"8px",display:"inline-block"}},ze.default.createElement("span",{style:{position:"absolute",top:0,bottom:0,left:`${n}%`,width:`${Math.min(o,100-n)}%`,borderRadius:"999px",background:a}}))},VC=e=>({background:e?"rgba(0,0,0,0.35)":"#f3f4f6",color:e?"#ffffff":"#111827",borderRadius:"6px",padding:"8px 10px",fontSize:"12px",overflowX:"auto",margin:0}),Fn=(e,t)=>{let{tone:r,label:n}=Oz(e),o=Ln[r]||Ln.muted;return{background:o.soft,color:o.text,label:n,tone:r}},tY={image:"IMG",document:"PDF",text:"TXT",file:"FILE"};function GC({attachments:e,darkMode:t,testId:r,onRemove:n,removeTestId:o}){let a=(e||[]).filter(Boolean);if(a.length===0)return null;let i=Gi(t);return ze.default.createElement("div",{className:"flex flex-wrap gap-2 mt-1.5"},a.map((s,l)=>{let u=String(s.content_type||""),c=(s.kind==="image"||u.startsWith("image/"))&&JG(s.url),d=ZG(s.byte_size);return ze.default.createElement("span",{key:s.id??`${s.filename}-${l}`,"data-testid":r,title:[s.filename,u,d].filter(Boolean).join(" \xB7 "),className:"inline-flex items-center gap-2 rounded-lg px-2 py-1 text-xs",style:{background:i.mutedBg,border:`1px solid ${i.cardBorder}`,color:i.textCell,maxWidth:"260px"}},c?ze.default.createElement("img",{src:s.url,alt:s.filename||"",style:{width:"36px",height:"36px",objectFit:"cover",borderRadius:"4px",flexShrink:0}}):ze.default.createElement("span",{className:"font-mono",style:{color:i.textMuted,flexShrink:0}},tY[s.kind]||tY.file),ze.default.createElement("span",{className:"min-w-0"},ze.default.createElement("span",{className:"block truncate"},s.filename||"attachment"),d&&ze.default.createElement("span",{className:"block font-mono",style:{color:i.textMuted}},d)),n&&ze.default.createElement("button",{type:"button","data-testid":o,onClick:p=>{p.stopPropagation(),n(s,l)},title:"Remove","aria-label":`Remove ${s.filename||"attachment"}`,className:"font-mono",style:{color:i.textMuted,background:"none",border:"none",cursor:"pointer",padding:"0 2px"}},"\u2715"))}))}var aY=e=>{let t=new Set;return Array.isArray(e.tool_calls)?e.tool_calls.forEach(r=>r&&r.id!=null&&t.add(r.id)):e.tool_call_id&&t.add(e.tool_call_id),t},Xwe=(e,t)=>{let r=ch(e);if(r)return r;let n=t.find(o=>o&&o.role==="assistant"&&(e.tool_call_id?aY(o).has(e.tool_call_id):ch(o)));return n?ch(n,{callId:e.tool_call_id}):null},Zwe=(e,t)=>{let r=aY(e);return t.some(n=>n&&n.role==="tool"&&n.tool_name===Gp&&(!n.tool_call_id||r.size===0||r.has(n.tool_call_id)))};function ms({messages:e,darkMode:t,tools:r,onUiAction:n,onEditMessage:o,onDeleteMessage:a,testIdPrefix:i}){let[s,l]=(0,ze.useState)({}),[u,c]=(0,ze.useState)(null),[d,p]=(0,ze.useState)(""),[f,m]=(0,ze.useState)(!1),[y,b]=(0,ze.useState)(null),h=A=>l(C=>({...C,[A]:!C[A]})),g={textPrimary:t?"#ffffff":"#111827",textSecondary:t?"rgba(255,255,255,0.6)":"#6b7280",textMuted:t?"rgba(255,255,255,0.4)":"#9ca3af"},v=A=>i?`${i}-${A}`:void 0,x=A=>A.stopPropagation(),S=A=>{c(A.id),p(A.content||""),b(null)},k=()=>{c(null),b(null)},w=async A=>{if(!f){m(!0),b(null);try{await o(A,d),c(null)}catch(C){b(C.message||"Could not save the message")}finally{m(!1)}}},_=Gwe(e);return ze.default.createElement("div",{className:"space-y-3"},_.map(A=>{let C=Fn(A.role,t),N=!!s[A.id],$=u===A.id,Q=!!((o||a)&&["user","assistant"].includes(A.role)),B=A.role==="tool"&&A.tool_name===Gp?Xwe(A,_):null,G=A.role==="assistant"&&!$?tI(A.content):null,T=A.role==="assistant"&&!Zwe(A,_)?ch(A):null,P=eY(A)&&!N,I=Kwe(A)||eY(A),O=Rx(A.tool_arguments),j=Rx(A.tool_result)||Rx(A.content),M=A.tool_calls&&(!Array.isArray(A.tool_calls)||A.tool_calls.length>0)?Rx(A.tool_calls):null,W=A.role==="tool"?qwe(A):null,K=A.tool_name?(r||[]).find(R=>R&&R.name===A.tool_name):null,z=A.role==="tool"?uI(A.tool_arguments):null,Y=A.role==="tool"&&!!z,q=Fn("assistant",t),ae=Fn("tool",t),Pe=A.role==="tool"&&!A.tool_arguments&&_.some(R=>R&&R.role==="assistant"&&(A.tool_call_id&&R.tool_call_id===A.tool_call_id||Array.isArray(R.tool_calls)&&R.tool_calls.some(ee=>ee.id&&ee.id===A.tool_call_id))),me=A.role==="assistant"&&!oY(A.content)?nY(A):[],le=VC(t);return ze.default.createElement("div",{key:A.id,className:"group","data-testid":i,"data-message-id":i?A.id:void 0,"data-role":i?A.role:void 0},ze.default.createElement("div",{className:`flex gap-3 items-start rounded-lg -mx-2 px-2 py-1 ${I?"cursor-pointer":""}`,onClick:I?()=>h(A.id):void 0,style:N?{background:t?"rgba(255,255,255,0.04)":"rgba(0,0,0,0.03)"}:{}},ze.default.createElement("span",{className:"flex flex-col gap-1 flex-shrink-0 mt-0.5",style:{minWidth:"72px"}},(Y?[q,ae]:[C]).map(R=>ze.default.createElement(ke,{key:R.label,tone:R.tone,style:{justifyContent:"center"}},R.label))),ze.default.createElement("div",{className:"min-w-0 flex-1"},ze.default.createElement("div",{className:"text-sm break-words",style:{color:g.textPrimary}},$?ze.default.createElement("div",{className:"space-y-2",onClick:x},ze.default.createElement("textarea",{"data-testid":v("editor"),value:d,onChange:R=>p(R.target.value),onKeyDown:R=>{R.key==="Escape"&&k(),R.key==="Enter"&&(R.metaKey||R.ctrlKey)&&w(A)},rows:Math.min(12,Math.max(3,d.split(` `).length)),autoFocus:!0,className:"aa-field w-full",style:{padding:"8px 10px",borderRadius:"8px",border:`1px solid ${t?"rgba(255,255,255,0.2)":"#d1d5db"}`,background:t?"rgba(255,255,255,0.06)":"#ffffff",color:g.textPrimary,fontFamily:"inherit",fontSize:"13px",resize:"vertical"}}),ze.default.createElement("div",{className:"flex items-center gap-2 text-xs"},ze.default.createElement("button",{type:"button","data-testid":v("save"),onClick:()=>w(A),disabled:f,style:{padding:"4px 10px",borderRadius:"6px",background:"#ef4444",color:"#ffffff",border:"none",cursor:f?"wait":"pointer",fontWeight:500}},f?"Saving\u2026":"Save"),ze.default.createElement("button",{type:"button","data-testid":v("cancel"),onClick:k,disabled:f,style:{padding:"4px 10px",borderRadius:"6px",background:"transparent",color:g.textSecondary,border:`1px solid ${t?"rgba(255,255,255,0.2)":"#d1d5db"}`,cursor:"pointer"}},"Cancel"),y&&ze.default.createElement("span",{style:{color:"#dc2626"}},y))):B?ze.default.createElement("div",null,ze.default.createElement("div",{className:"font-mono text-xs mb-1",style:{color:ae.color}},"\u2699 ",A.tool_name," \xB7 ",B.length," block",B.length===1?"":"s"),ze.default.createElement(_l,{blocks:B,onAction:n,darkMode:t})):A.role==="tool"?ze.default.createElement("span",{style:{display:"grid",gap:"2px"}},z&&!Pe&&ze.default.createElement("span",{className:"font-mono text-xs break-words"},A.tool_name&&ze.default.createElement("span",{style:{color:ae.color}},"\u2699 ",A.tool_name," "),ze.default.createElement("span",{style:{color:Y?q.color:g.textMuted}},"in:")," ",e0(z,180),z.length>180?"\u2026":""),W?ze.default.createElement("span",null,A.tool_name&&!(z&&!Pe)&&ze.default.createElement("span",{className:"font-mono text-xs mr-1",style:{color:ae.color}},"\u2699 ",A.tool_name),(z||Pe)&&ze.default.createElement("span",{className:"font-mono text-xs mr-1",style:{color:Y?ae.color:g.textMuted}},"out:"),W.meta&&ze.default.createElement("span",{className:"font-mono text-xs mr-2",style:{color:g.textMuted}},W.meta),"\u201C",W.body.replace(/\s+/g," ").trim().slice(0,180),W.body.length>180?"\u2026":"","\u201D"):A.content?ze.default.createElement("span",null,A.tool_name&&!(z&&!Pe)&&ze.default.createElement("span",{className:"font-mono text-xs mr-1",style:{color:ae.color}},"\u2699 ",A.tool_name),(z||Pe)&&ze.default.createElement("span",{className:"font-mono text-xs mr-1",style:{color:Y?ae.color:g.textMuted}},"out:"),"\u201C",e0(A.content,180),A.content.replace(/\s+/g," ").trim().length>180?"\u2026":"","\u201D"):ze.default.createElement("span",{className:"whitespace-pre-wrap"},A.tool_name?`\u2192 ${A.tool_name}(...)`:"\u2014")):P?ze.default.createElement("span",{style:{color:g.textSecondary}},e0(A.content),"\u2026"):me.length>0?ze.default.createElement("span",{style:{display:"grid",gap:"2px"}},me.map((R,ee)=>ze.default.createElement("span",{key:ee,className:"font-mono text-xs break-words"},R.name&&ze.default.createElement("span",{style:{color:g.textMuted}},R.name," "),ze.default.createElement("span",{style:{color:g.textMuted}},"in:")," ",R.args?ze.default.createElement(ze.default.Fragment,null,e0(R.args,180),R.args.length>180?"\u2026":""):"\u2014"))):G&&G.blocks?ze.default.createElement(_l,{blocks:G.blocks,onAction:n,darkMode:t}):G&&G.object?ze.default.createElement(_l,{blocks:[{type:"object",value:G.object}],darkMode:t}):ze.default.createElement(Ws,{text:A.content||"\u2014",darkMode:t,onUiAction:n}),T&&!$&&ze.default.createElement("div",{className:"mt-2"},ze.default.createElement(_l,{blocks:T,onAction:n,darkMode:t})),A.role==="user"&&ze.default.createElement(GC,{attachments:A.attachments,darkMode:t,testId:v("attachment")})),ze.default.createElement("div",{className:"text-xs mt-0.5 font-mono flex items-center gap-2 flex-wrap",style:{color:g.textMuted}},Q&&!$&&ze.default.createElement("span",{className:"flex items-center gap-2 opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity",onClick:x},o&&ze.default.createElement("button",{type:"button","data-testid":v("edit"),onClick:()=>S(A),className:"hover:underline",style:{color:g.textSecondary,background:"none",border:"none",padding:0,cursor:"pointer",font:"inherit"}},"Edit"),a&&ze.default.createElement("button",{type:"button","data-testid":v("delete"),onClick:()=>a(A),className:"hover:underline",style:{color:"#dc2626",background:"none",border:"none",padding:0,cursor:"pointer",font:"inherit"}},"Delete")),A.created_at&&ze.default.createElement("span",null,new Date(A.created_at).toLocaleTimeString()),A.tool_name&&A.role!=="tool"&&ze.default.createElement("span",{className:"px-1.5 py-0.5 rounded",style:{background:C.background,color:C.color}},"\u2699 ",A.tool_name),A.duration_ms!=null&&ze.default.createElement("span",null,QG(A.duration_ms)),(A.tool_calls||[]).length>0&&ze.default.createElement("span",null,A.tool_calls.length," tool call",A.tool_calls.length>1?"s":""),A.content_checksum&&ze.default.createElement("span",{title:"Content fingerprint"},"\u{1F512} ",A.content_checksum.slice(0,8)))),ze.default.createElement(Ywe,{message:A,darkMode:t}),I&&ze.default.createElement("svg",{className:`w-3.5 h-3.5 mt-1 flex-shrink-0 transition-transform ${N?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",style:{color:g.textMuted}},ze.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"}))),N&&ze.default.createElement("div",{className:"ml-3 mt-1 mb-2 pl-4 space-y-2 border-l-2",style:{borderColor:C.color+"55"}},ze.default.createElement("div",{className:"flex flex-wrap gap-x-5 gap-y-1 text-xs font-mono",style:{color:g.textSecondary}},A.created_at&&ze.default.createElement("span",null,new Date(A.created_at).toLocaleString()),A.tool_call_id&&ze.default.createElement("span",null,"call: ",A.tool_call_id),A.duration_ms!=null&&ze.default.createElement("span",null,"took ",QG(A.duration_ms)),A.content_checksum&&ze.default.createElement("span",null,"\u{1F512} ",A.content_checksum)),O&&ze.default.createElement("div",null,ze.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:Y?q.color:g.textMuted}},"Arguments",Y?" \xB7 from the agent":""),ze.default.createElement("pre",{style:le},O)),W?ze.default.createElement("div",null,ze.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:Y?ae.color:g.textMuted}},"Result",Y?" \xB7 from the tool":""),Object.keys(W.rest).length>0&&ze.default.createElement("pre",{style:le},JSON.stringify(W.rest,null,2)),ze.default.createElement("div",{className:"text-xs uppercase tracking-wide mt-2 mb-1",style:{color:g.textMuted}},W.field," \xB7 ",W.body.length.toLocaleString()," chars"),ze.default.createElement("pre",{style:{...le,whiteSpace:"pre-wrap",maxHeight:"320px",overflowY:"auto"}},W.body.slice(0,8e3),W.body.length>8e3?` \u2026`:"")):j?ze.default.createElement("div",null,ze.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:g.textMuted}},A.role==="tool"?"Result":"Content (parsed)"),ze.default.createElement("pre",{style:le},j)):A.role==="tool"&&A.content?ze.default.createElement("div",null,ze.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:Y?ae.color:g.textMuted}},"Result",Y?" \xB7 from the tool":""," \xB7 ",A.content.length.toLocaleString()," chars"),ze.default.createElement("pre",{style:{...le,whiteSpace:"pre-wrap",maxHeight:"320px",overflowY:"auto"}},A.content.slice(0,8e3),A.content.length>8e3?` -\u2026`:"")):null,M&&ze.default.createElement("div",null,ze.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:g.textMuted}},"Requested tool calls"),ze.default.createElement("pre",{style:le},M)),K&&ze.default.createElement("div",null,ze.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:g.textMuted}},"Tool definition"),ze.default.createElement(sI,{tool:K,darkMode:t}))))}))}var nr=Z(J());var ln=Z(J());var Rn=e=>({cardBg:e?"#1f1f1f":"#ffffff",cardBorder:e?"#2a2a2a":"#e5e7eb",innerBg:e?"rgba(255,255,255,0.04)":"#f9fafb",panelBg:e?"rgba(0,0,0,0.35)":"#f9fafb",preBg:e?"rgba(255,255,255,0.06)":"#eef0f3",trackBg:e?"rgba(255,255,255,0.08)":"#f3f4f6",hoverBg:e?"rgba(255,255,255,0.04)":"#f9fafb",controlBg:e?"rgba(255,255,255,0.06)":"#f3f4f6",controlActiveBg:e?"#2a2a2a":"#ffffff",textPrimary:e?"#ffffff":"#111827",textSecondary:e?"rgba(255,255,255,0.6)":"#6b7280",textMuted:e?"rgba(255,255,255,0.4)":"#9ca3af",textBody:e?"rgba(255,255,255,0.75)":"#4b5563",link:"#3b82f6",good:e?"#4ade80":"#16a34a",bad:"#ef4444"}),iY=(e,t=200)=>{let r=String(e??"").replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t)}\u2026`:r};function Xp({open:e,darkMode:t,size:r=14,style:n}){return ln.default.createElement("svg",{className:`flex-shrink-0 transition-transform ${e?"rotate-180":""}`,width:r,height:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",style:{color:Rn(t).textMuted,...n},"aria-hidden":"true"},ln.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"}))}function YC({darkMode:e,id:t,children:r,style:n,className:o=""}){let a=Rn(e);return ln.default.createElement("div",{id:t,className:`rounded-xl border overflow-hidden transition-colors ${o}`,style:{backgroundColor:a.cardBg,borderColor:a.cardBorder,...n}},r)}var Ta={context:132,duration:76,tokens:104,cost:88,status:68,count:96,age:76};function id({cells:e,darkMode:t,gap:r=16,className:n="",style:o}){let a=Rn(t),i=(e||[]).filter(Boolean);return i.length===0?null:ln.default.createElement("div",{className:`flex-shrink-0 text-sm ${n}`,style:{display:"grid",gridTemplateColumns:i.map(s=>s.width?`${s.width}px`:"minmax(0, auto)").join(" "),alignItems:"center",columnGap:`${r}px`,color:a.textSecondary,...o}},i.map(s=>{let l=s.content!=null&&s.content!==!1&&s.content!=="";return ln.default.createElement("div",{key:s.key,title:(l?s.title:s.empty)||void 0,className:"min-w-0 truncate",style:{textAlign:s.align||"right"}},l?s.content:ln.default.createElement("span",{style:{color:a.textMuted}},"\u2014"))}))}var sY=(e,{wrap:t=!0,maxHeight:r=320}={})=>({background:Rn(e).preBg,borderRadius:"6px",padding:"6px 8px",margin:"2px 0 4px 0",overflowX:"auto",overflowY:"auto",maxHeight:`${r}px`,whiteSpace:t?"pre-wrap":"pre"}),Jwe=e=>{if(e==null)return{text:"",json:!1};if(typeof e=="object")return{text:JSON.stringify(e,null,2),json:!0};let t=String(e);if(!/^[[{]/.test(t.trim()))return{text:t,json:!1};try{return{text:JSON.stringify(JSON.parse(t),null,2),json:!0}}catch{return{text:t,json:!1}}};function fh({lines:e,darkMode:t,onClick:r,indent:n=0,size:o="12px",style:a,max:i=200,hold:s=!1}){let[l,u]=mh(),c=Rn(t),d=(e||[]).filter(p=>p&&(p.text||s));return d.some(p=>p.text)?ln.default.createElement("div",{onClick:r,className:"min-w-0",style:{display:"grid",gap:"2px",paddingLeft:n?`${n}px`:0,fontFamily:Mt.mono,fontSize:o,color:c.textSecondary,cursor:r?"pointer":"default",...a}},d.map((p,f)=>{let m=`${p.label}-${f}`,y=l(m),b=p.max||i,h=!p.text,g=String(p.text??"").replace(/\s+/g," ").trim(),v=Jwe(p.text),x=!h&&(v.json||g.length>60||g!==String(p.text).trim());return ln.default.createElement("div",{key:m},ln.default.createElement("div",{onClick:x?S=>{S.stopPropagation(),u(m)}:void 0,title:x?y?"Collapse":"Expand":void 0,style:{cursor:x?"pointer":"default",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0}},ln.default.createElement("span",{style:{color:p.color||c.textMuted}},x?y?"\u25BE":"\u25B8":"\xA0"," ",p.label,":")," ",!y&&(h?ln.default.createElement("span",{style:{color:c.textMuted}},"\u2014"):iY(g,b))),y&&ln.default.createElement("pre",{onClick:S=>S.stopPropagation(),style:sY(t,{wrap:!v.json})},v.text))})):null}function t0({options:e,value:t,onChange:r,darkMode:n,label:o,style:a}){let i=Rn(n);return ln.default.createElement("div",{className:"flex items-center gap-1 flex-shrink-0",style:a},o&&ln.default.createElement("span",{className:"text-xs mr-1",style:{color:i.textMuted}},o),e.map(s=>ln.default.createElement("button",{key:s.id,type:"button",onClick:l=>{l.stopPropagation(),r(s.id)},title:s.hint,className:"px-2 py-0.5 text-xs rounded transition-colors",style:t===s.id?{background:i.controlActiveBg,color:i.textPrimary,boxShadow:n?"none":"0 1px 2px rgba(0,0,0,0.08)"}:{color:i.textSecondary}},s.label)))}function lY({label:e,body:t,open:r,onToggle:n,darkMode:o,prose:a=!1,max:i=140}){let s=Rn(o);return ln.default.createElement("div",null,ln.default.createElement("div",{onClick:l=>{l.stopPropagation(),n()},title:r?"Collapse":"Expand",style:{cursor:"pointer",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},ln.default.createElement("span",{style:{color:s.textMuted}},r?"\u25BE":"\u25B8"," ",e,":")," ",!r&&ln.default.createElement("span",{style:{color:s.textMuted}},iY(t,i))),r&&ln.default.createElement("pre",{onClick:l=>l.stopPropagation(),style:sY(o,{wrap:a})},t))}function mh(e={}){let[t,r]=(0,ln.useState)(e),n=(0,ln.useCallback)(a=>{r(i=>({...i,[a]:!i[a]}))},[]);return[(0,ln.useCallback)(a=>!!t[a],[t]),n,r]}var cI={root:"#9ca3af",prompt:"#60a5fa",generate:"#a855f7",llm:"#ef4444",thinking:"#fbbf24",tool:"#22c55e",response:"#2dd4bf",embedding:"#818cf8"},cY=[{id:"time",label:"Time",hint:"Chronological \u2014 reads as a waterfall"},{id:"duration",label:"Slowest",hint:"Longest-running first"},{id:"name",label:"Name",hint:"Group repeated tool calls together"}],eo=e=>e==null?"\u2014":e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(2)}s`,dI=e=>{switch(e){case"root":return Bo.spans.root;case"prompt":return Bo.spans.prompt;case"generate":return Bo.spans.generate;case"llm":return Bo.spans.llm;case"thinking":return Bo.spans.thinking;case"tool":return Bo.spans.tool;case"response":return Bo.spans.response;default:return"-"}},Qwe=(e,t)=>{let r=Math.max(e||0,1),n=Math.max(t||1,1);if(n<=1)return 100;let o=Math.log(r)/Math.log(n);return Math.min(100,Math.max(4,o*100))},Rwe=(e,t)=>{let r=[...e||[]];switch(t){case"duration":return r.sort((n,o)=>(o.duration||0)-(n.duration||0));case"name":return r.sort((n,o)=>(n.name||"").localeCompare(o.name||""));default:return r.sort((n,o)=>(n.start||0)-(o.start||0))}},eSe=e=>{let t=e.tokens||{};return(t.input||0)+(t.output||0)+(t.thinking||0)},tSe=(e,t)=>{if(!t.duration_ms)return eo(e.duration);let r=(e.duration||0)/t.duration_ms*100;return`${eo(e.duration)} \xB7 ${r<1?r.toFixed(2):r.toFixed(1)}%`},rSe=e=>{if(typeof e!="string")return null;try{return JSON.stringify(JSON.parse(e),null,2)}catch{return null}},uY=e=>e.endsWith(".instructions")?0:e.endsWith(".tools")?1:e.endsWith(".messages")?3:2,pI=e=>{let t=e.spans||[],r=a=>{for(let i of t){let s=(i.attributes||{})[a];if(s)return s}return null},n=r("llm.prompt");if(!n){let a=r("prompt.input.messages");if(a)try{n=[...JSON.parse(a)].reverse().find(l=>l&&l.role==="user"&&l.content)?.content}catch{}}let o=r("llm.completion")||r("llm.output.message");return{input:n,output:o}},nSe=e=>{let t=e.attributes||{},r=null,n="input",o="user";if(t["prompt.input.messages"])try{let u=[...JSON.parse(t["prompt.input.messages"])].reverse().find(c=>c&&c.role==="user"&&c.content);typeof u?.content=="string"&&(r=u.content)}catch{}if(!r&&t["llm.prompt"]&&(r=String(t["llm.prompt"])),!r&&(t["tool.input.args"]||t["tool.arguments"])){let l=t["tool.input.args"]||t["tool.arguments"];r=typeof l=="string"?l:JSON.stringify(l),n="in",o="assistant"}let a=null,i="output",s="assistant";return t["llm.output.message"]||t["llm.completion"]?a=t["llm.output.message"]||t["llm.completion"]:(t["tool.output.result"]||t["tool.result"])&&(a=t["tool.output.result"]||t["tool.result"],i="out",s="tool"),a!=null&&typeof a!="string"&&(a=JSON.stringify(a)),{input:r,output:a,inputLabel:n,inputTone:o,outputLabel:i,outputTone:s}},oSe=(e,t)=>{let r=nSe(e),n=pI(t);return r.input&&r.input===n.input&&(r.input=null),r.output&&r.output===n.output&&(r.output=null),r},aSe=e=>{let t={...e.attributes||{}},r=p=>{let f=t[p];return delete t[p],f},n=[],o=p=>n.push({id:`${e.span_id}-m${n.length}`,...p}),a=r("prompt.input.instructions")||r("llm.instructions");a&&o({role:"system",content:String(a)});let i=r("prompt.input.messages");if(i)try{JSON.parse(i).forEach(p=>{p&&o({role:p.role||"user",content:typeof p.content=="string"?p.content:JSON.stringify(p.content),tool_call_id:p.tool_call_id,tool_calls:p.tool_calls})})}catch{t["prompt.input.messages"]=i}let s=r("llm.prompt");s&&o({role:"user",content:String(s)});let l=r("tool.input.args")||r("tool.arguments"),u=r("tool.output.result")||r("tool.result");if(l||u){let p=r("tool.name");o({role:"tool",tool_name:p||(e.name||"").replace(/^tool\./,""),tool_arguments:l,content:u?String(u):null})}let c=r("llm.completion"),d=r("llm.output.message");return(c||d)&&o({role:"assistant",content:String(c||d)}),{messages:n,rest:t}},fI=e=>{for(let t of e?.spans||[]){let r=(t.attributes||{})["prompt.input.tools"];if(r)try{let n=typeof r=="string"?JSON.parse(r):r;if(Array.isArray(n)&&n.length>0)return n}catch{}}return[]};function iSe({span:e,darkMode:t,tools:r=[]}){let[n,o]=mh(),a=Rn(t),{messages:i,rest:s}=aSe(e),l=null,u=s["prompt.input.tools"];if(u)try{let f=typeof u=="string"?JSON.parse(u):u;Array.isArray(f)&&f.length>0&&(l=f,delete s["prompt.input.tools"])}catch{}let c=Object.entries(s).sort((f,m)=>uY(f[0])-uY(m[0])),d=i.length===1&&i[0].role==="tool"?i[0]:null,p=d?.tool_arguments==null?null:typeof d.tool_arguments=="string"?d.tool_arguments:JSON.stringify(d.tool_arguments);return nr.default.createElement("div",{onClick:f=>f.stopPropagation(),style:{margin:"4px 0 8px 0",padding:"10px 12px",borderRadius:"8px",background:a.panelBg,border:`1px solid ${a.cardBorder}`,fontFamily:Mt.mono,fontSize:"12px",color:a.textBody,cursor:"default"}},nr.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"4px 20px"}},nr.default.createElement("span",null,"duration: ",eo(e.duration)),nr.default.createElement("span",null,"status: ",e.status||"OK"),eSe(e)>0&&nr.default.createElement("span",null,"tokens in:",e.tokens.input||0," out:",e.tokens.output||0,e.tokens.thinking>0?` thinking:${e.tokens.thinking}`:""),nr.default.createElement("span",{style:{color:a.textMuted}},"span: ",e.span_id)),d&&nr.default.createElement("div",{style:{marginTop:"8px",display:"grid",gap:"4px"}},nr.default.createElement("div",{style:{fontSize:"12px",wordBreak:"break-all"}},nr.default.createElement("span",{style:{color:Fn("tool",t).color}},"\u2699 ",d.tool_name),p&&nr.default.createElement(nr.default.Fragment,null," ",nr.default.createElement("span",{style:{color:Fn("assistant",t).color}},"in:")," ",nr.default.createElement("span",{style:{color:a.textBody}},p))),d.content&&nr.default.createElement("div",{style:{fontSize:"12px"}},nr.default.createElement("span",{style:{color:Fn("tool",t).color}},"out:")," ",nr.default.createElement("span",{style:{color:a.textBody,whiteSpace:"pre-wrap",display:"inline-block",maxHeight:"240px",overflowY:"auto",verticalAlign:"top",maxWidth:"100%"}},d.content))),i.length>0&&!d&&nr.default.createElement("div",{style:{marginTop:"10px",fontFamily:"ui-sans-serif, system-ui, sans-serif"}},nr.default.createElement(ms,{messages:i,darkMode:t,tools:l||r})),l&&nr.default.createElement(lI,{tools:l,darkMode:t}),c.length>0&&nr.default.createElement("div",{style:{marginTop:"6px",display:"grid",gap:"2px"}},c.map(([f,m])=>{let y=f.match(/args|result|input|output/)?rSe(m):null,b=!y&&(f.endsWith(".instructions")||f.match(/input|output|result/))&&typeof m=="string"?m:null,h=y||b;if(!h)return nr.default.createElement("div",{key:f,style:{wordBreak:"break-all"}},nr.default.createElement("span",{style:{color:a.textMuted}},f,":")," ",typeof m=="string"?m:JSON.stringify(m));let g=`${e.span_id}:${f}`;return nr.default.createElement(lY,{key:f,label:f,body:h,prose:!y,darkMode:t,open:n(g),onToggle:()=>o(g)})})))}function sSe({span:e,trace:t,darkMode:r,sort:n,longest:o,expanded:a,onToggle:i,tools:s}){let l=Rn(r),u=Object.keys(e.attributes||{}).length>0,c=a?null:oSe(e,t);return nr.default.createElement(nr.default.Fragment,null,nr.default.createElement("div",{className:`py-0.5 px-1 -mx-1 rounded transition-colors ${u?`cursor-pointer ${r?"hover:bg-white/5":"hover:bg-gray-100"}`:""}`,style:{paddingLeft:n==="time"?`${(e.nested||0)*16}px`:0,background:a?l.hoverBg:void 0},onClick:u?()=>i():void 0,title:u?`${e.name} \u2014 click for span details`:e.name},nr.default.createElement("div",{className:"flex items-baseline gap-2 min-w-0"},nr.default.createElement("span",{className:"flex-shrink-0",style:{color:e.type==="thinking"?void 0:l.textMuted}},dI(e.type)),nr.default.createElement("span",{className:"text-sm font-medium truncate",style:{color:e.error?l.bad:l.textPrimary}},e.name),nr.default.createElement("span",{className:"text-xs ml-auto flex-shrink-0",style:{fontFamily:Mt.mono,color:l.textMuted}},tSe(e,t)),u&&nr.default.createElement(Xp,{open:a,darkMode:r,size:13,style:{marginLeft:"2px"}})),nr.default.createElement("div",{className:"h-3 relative rounded mt-0.5",style:{background:l.trackBg}},nr.default.createElement("div",{className:"absolute h-3 rounded",style:{background:e.error?"#f87171":cI[e.type]||"#9ca3af",left:n==="time"?`${t.duration_ms?e.start/t.duration_ms*100:0}%`:0,width:n==="time"?`${t.duration_ms?Math.max(e.duration/t.duration_ms*100,1):1}%`:`${Qwe(e.duration,o)}%`}})),c&&nr.default.createElement(fh,{darkMode:r,size:"11px",style:{marginTop:"2px"},lines:[{label:c.inputLabel,text:c.input,color:Fn(c.inputTone,r).color,max:160},{label:c.outputLabel,text:c.output,color:Fn(c.outputTone,r).color,max:160}]})),a&&nr.default.createElement(iSe,{span:e,darkMode:r,tools:s}))}function mI({trace:e,darkMode:t,sort:r="time",tools:n,keyPrefix:o=""}){let[a,i]=mh(),s=Rn(t),l=Rwe(e?.spans,r),u=n||fI(e);if(l.length===0)return nr.default.createElement("div",{className:"text-sm py-2",style:{color:s.textMuted}},"No spans recorded for this trace.");let c=Math.max(...l.map(d=>d.duration||0),1);return nr.default.createElement("div",{className:"space-y-2"},l.map((d,p)=>{let f=`${o}${d.span_id||p}`;return nr.default.createElement(sSe,{key:f,span:d,trace:e,darkMode:t,sort:r,longest:c,tools:u,expanded:a(f),onToggle:()=>i(f)})}))}var lSe=[{id:"spans",label:"Spans",hint:"Timing waterfall with span details"},{id:"conversation",label:"Conversation",hint:"The run as a message stream \u2014 prompt, tool calls, response"}],uSe=e=>{let t=0,r=[];(e?.spans||[]).forEach(a=>{(a.nested||0)!==0&&(a.type==="tool"?r.push(a):(a.type==="llm"||a.type==="generate")&&(t=Math.max(t,a.duration||0)))});let n=r.reduce((a,i)=>a+(i.duration||0),0);t=Math.max(t-n,0);let o=e?.duration_ms||t+n||1;return{generation:t,tools:r,toolTotal:n,total:o,overhead:Math.max(o-t-n,0)}};function cSe({trace:e,darkMode:t}){let r=Rn(t),{generation:n,tools:o,toolTotal:a,total:i,overhead:s}=uSe(e);if(n===0&&a===0||n/i>=.99&&a/i<.01)return null;let l=c=>`${(c/i*100).toFixed(c/i<.01?2:1)}%`,u=(c,d)=>bt.default.createElement("div",{style:{width:`${Math.max(c/i*100,.4)}%`,background:d,height:"100%"}});return bt.default.createElement("div",{style:{marginTop:"14px",paddingTop:"12px",borderTop:`1px solid ${r.cardBorder}`}},bt.default.createElement("div",{style:{fontSize:"11px",textTransform:"uppercase",letterSpacing:"0.05em",color:r.textSecondary,marginBottom:"6px"}},"Time breakdown \u2014 generation vs tools"),bt.default.createElement("div",{style:{display:"flex",height:"10px",borderRadius:"5px",overflow:"hidden",background:r.trackBg}},u(n,"#ef4444"),u(a,"#10b981"),s>0&&u(s,t?"rgba(255,255,255,0.2)":"#d1d5db")),bt.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"4px 18px",marginTop:"8px",fontSize:"12px",fontFamily:Mt.mono,color:r.textBody}},bt.default.createElement("span",null,bt.default.createElement("span",{style:{color:"#ef4444"}},"\u25A0")," generation ",eo(n)," (",l(n),")"),bt.default.createElement("span",null,bt.default.createElement("span",{style:{color:"#10b981"}},"\u25A0")," tools ",eo(a)," (",l(a),")"),s>0&&bt.default.createElement("span",null,bt.default.createElement("span",{style:{color:r.textSecondary}},"\u25A0")," overhead ",eo(s)," (",l(s),")")),o.length>0&&bt.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"4px 18px",marginTop:"4px",fontSize:"12px",fontFamily:Mt.mono,color:r.textSecondary}},o.map((c,d)=>bt.default.createElement("span",{key:d},c.name," ",eo(c.duration)," (",l(c.duration||0),")"))))}function dSe({trace:e,darkMode:t}){let[r,n]=(0,bt.useState)(null),[o,a]=(0,bt.useState)(!1),i=Rn(t);if((0,bt.useEffect)(()=>{if(e?.id==null)return;let l=!0;return n(null),a(!1),fetch(`/api/interactions/trace-${e.id}`).then(u=>u.ok?u.json():Promise.reject(new Error("request failed"))).then(u=>l&&n(u.interaction)).catch(()=>l&&a(!0)),()=>{l=!1}},[e?.id]),o)return bt.default.createElement("div",{className:"text-sm py-4",style:{color:i.bad}},"Couldn't load the conversation for this trace.");if(!r)return bt.default.createElement("div",{className:"text-sm py-4",style:{color:i.textMuted}},"Loading conversation\u2026");let s=r.instructions?[{id:`trace-${e.id}-system`,role:"system",content:r.instructions,created_at:r.created_at},...r.messages||[]]:r.messages||[];return s.length===0?bt.default.createElement("div",{className:"text-sm py-4",style:{color:i.textMuted}},"This trace predates content capture \u2014 no conversation to show."):bt.default.createElement(ms,{messages:s,darkMode:t,tools:fI(e)})}function r0({trace:e,darkMode:t,compact:r=!1,showConversation:n=!0}){let[o,a]=(0,bt.useState)("spans"),[i,s]=(0,bt.useState)("time"),l=Rn(t),u=(e?.spans||[]).length,c=WC(e),d=e?.tokens||{},p=(0,bt.useCallback)(f=>a(n?f:"spans"),[n]);return e?bt.default.createElement("div",null,bt.default.createElement("div",{className:"flex items-center justify-between flex-wrap gap-y-2 mb-2"},bt.default.createElement("div",{className:"flex items-center gap-1"},n&&bt.default.createElement(t0,{options:lSe,value:o,onChange:p,darkMode:t}),bt.default.createElement("span",{className:"text-xs ml-2",style:{color:l.textSecondary}},u," ",u===1?"span":"spans")),o==="spans"&&u>0&&bt.default.createElement(t0,{options:cY,value:i,onChange:s,darkMode:t,label:"Sort"})),o==="conversation"?bt.default.createElement("div",{className:"rounded-lg border p-4",style:{background:l.cardBg,borderColor:l.cardBorder}},bt.default.createElement(dSe,{trace:e,darkMode:t})):bt.default.createElement(bt.default.Fragment,null,i==="time"?bt.default.createElement("div",{className:"flex justify-between text-xs mb-2",style:{color:l.textMuted}},bt.default.createElement("span",null,"0ms"),bt.default.createElement("span",null,Math.round((e.duration_ms||0)*.33),"ms"),bt.default.createElement("span",null,Math.round((e.duration_ms||0)*.66),"ms"),bt.default.createElement("span",null,eo(e.duration_ms))):bt.default.createElement("div",{className:"text-xs mb-2",style:{color:l.textMuted}},"Bar length compares duration on a log scale"),bt.default.createElement(mI,{trace:e,darkMode:t,sort:i,keyPrefix:`${e.id||e.trace_id}:`})),c&&bt.default.createElement("div",{className:"mt-3"},bt.default.createElement(ad,{...c,label:"Context pressure",darkMode:t})),bt.default.createElement(cSe,{trace:e,darkMode:t}),!r&&bt.default.createElement("div",{className:"mt-4 pt-4 border-t flex items-center flex-wrap gap-x-6 gap-y-1 text-sm",style:{borderColor:l.cardBorder,color:l.textSecondary}},bt.default.createElement("span",null,"Tokens:"),d.thinking>0&&bt.default.createElement("span",{className:"text-amber-500",style:{fontFamily:Mt.mono}},"T:",d.thinking.toLocaleString()),bt.default.createElement("span",{className:"text-blue-500",style:{fontFamily:Mt.mono}},"in:",(d.input||0).toLocaleString()),bt.default.createElement("span",{className:"text-green-500",style:{fontFamily:Mt.mono}},"out:",(d.output||0).toLocaleString()),e.provider&&bt.default.createElement("span",{style:{fontFamily:Mt.mono}},e.provider,e.model?` \xB7 ${e.model}`:"")),e.error&&bt.default.createElement("div",{className:"mt-4 p-3 rounded-lg border",style:{background:t?"rgba(239,68,68,0.1)":"#fef2f2",borderColor:t?"rgba(239,68,68,0.3)":"#fecaca"}},bt.default.createElement("span",{className:"text-sm",style:{color:t?"#fca5a5":"#b91c1c"}},e.error))):null}var pSe=e=>{let t=(e?.input||0)+(e?.output||0)+(e?.thinking||0);return t?t>=1e3?`${(t/1e3).toFixed(1)}K`:`${t}`:null},fSe=e=>e==null?null:`$${e.toFixed(4)}`;function XC({trace:e,darkMode:t,expanded:r,onToggle:n}){let o=Rn(t),a=pI(e),i=WC(e),s=e.status!=="ERROR",l=pSe(e.tokens);return Un.default.createElement(YC,{darkMode:t,id:`trace-row-${e.id}`},Un.default.createElement("div",{className:`p-4 flex items-center justify-between flex-wrap gap-y-2 cursor-pointer transition-colors ${t?"hover:bg-white/5":"hover:bg-gray-50"}`,onClick:n,style:r?{background:o.hoverBg}:void 0},Un.default.createElement("div",{className:"flex items-center gap-3 min-w-0"},Un.default.createElement("span",{className:"px-2 py-1 text-xs rounded flex-shrink-0",style:{fontFamily:Mt.mono,background:o.controlBg,color:o.textSecondary}},"TRACE"),Un.default.createElement("span",{className:"text-sm flex-shrink-0",style:{fontFamily:Mt.mono,color:o.textMuted}},e.short_id),Un.default.createElement("span",{className:"text-sm font-medium truncate",style:{color:o.textPrimary}},e.display_name)),Un.default.createElement("div",{className:"flex items-center gap-4 flex-shrink-0"},Un.default.createElement(id,{darkMode:t,cells:[{key:"model",title:"Model that generated this trace",empty:"No model recorded for this trace",content:e.model&&Un.default.createElement("span",{className:"text-xs px-2 py-0.5 rounded",style:{fontFamily:Mt.mono,background:t?"rgba(99,102,241,0.2)":"#eef2ff",color:t?"#a5b4fc":"#4338ca"}},e.model)},{key:"context",width:Ta.context,empty:"Context: no generation in this trace reported its token counts",content:i&&Un.default.createElement(ad,{compact:!0,...i,label:"Context",darkMode:t})},{key:"duration",width:Ta.duration,title:"Wall-clock duration",empty:"No duration recorded for this trace",content:e.duration_ms!=null&&Un.default.createElement(Un.default.Fragment,null,Un.default.createElement("i",{className:"fa-solid fa-clock mr-1"}),eo(e.duration_ms))},{key:"tokens",width:Ta.tokens,title:"Tokens in, out and thinking",empty:"No token counts recorded for this trace",content:l&&`${l} tokens`},{key:"cost",width:Ta.cost,title:"Estimated cost of this trace",empty:"Nothing to price \u2014 this trace recorded no tokens",content:e.estimated_cost!=null&&Un.default.createElement(Un.default.Fragment,null,Un.default.createElement("i",{className:"fa-solid fa-coins mr-1"}),fSe(e.estimated_cost))},{key:"status",width:Ta.status,title:s?"Trace completed":e.error||"Trace ended in an error",content:Un.default.createElement("span",{style:{color:s?o.good:o.bad}},Un.default.createElement("i",{className:`fa-solid ${s?"fa-check":"fa-xmark"} mr-1`}),s?"OK":"ERROR")}]}),Un.default.createElement(Xp,{open:r,darkMode:t}))),!r&&Un.default.createElement(fh,{darkMode:t,onClick:n,hold:!0,style:{padding:"0 16px 12px"},lines:[{label:"input",text:a.input,color:Fn("user",t).color},{label:"output",text:a.output,color:Fn("assistant",t).color}]}),r&&Un.default.createElement("div",{className:"border-t p-4",style:{borderColor:o.cardBorder,background:o.innerBg}},Un.default.createElement(r0,{trace:e,darkMode:t})))}function dY(e,t=""){return`${(e||"").replace(/\/$/,"")}${t}`||"/"}function pY(e,t){let r=(e||"").replace(/\/$/,"");return r&&(t===r||t.startsWith(`${r}/`))?t.slice(r.length)||"/":t}function et(e=""){return dY(window.ACTIVE_AGENT_DASHBOARD?.mountPath,e)}function sd(e="",t={}){window.history.pushState(t,"",et(e))}function to(e=window.location.pathname){return pY(window.ACTIVE_AGENT_DASHBOARD?.mountPath,e)}function lt(e,t={}){if(!e)return;let r=to(e);sd(r,t),window.dispatchEvent(new CustomEvent("dashboard:navigate",{detail:{path:et(r)}}))}var fY=({minutes:e,agentId:t=null,bucketSeconds:r=null})=>{let n=new URLSearchParams({minutes:String(e)});return r!=null&&n.set("bucket_seconds",String(r)),t!=null&&t!==""&&n.set("agent_id",String(t)),`/api/traces?${n.toString()}`};var mSe=(e,t,r,n=60)=>{let o=Date.now(),a=[],i=n*1e3,s=Math.max(1,Math.round(r*60/n));for(let l=s-1;l>=0;l--){let u=o-(l+1)*i,c=o-l*i,d=e.filter(m=>m.timestamp_ms>=u&&m.timestamp_msm.duration_ms).filter(m=>typeof m=="number"&&Number.isFinite(m)),f={};t.forEach(m=>{f[m]=d.filter(y=>y.agent===m).length}),a.push({time:r>1440?new Date(c).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit"}):new Date(c).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),timestamp:c,requests:d.length,errors:d.filter(m=>m.status==="ERROR").length,avgLatency:p.length>0?Math.round(p.reduce((m,y)=>m+y,0)/p.length):0,traces:d,...f})}return a},mY=(e,t,r,n)=>{let o=Array.isArray(e?.buckets)?e.buckets.map(s=>({time:n.minutes>1440?new Date(s.end_ms).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit"}):new Date(s.end_ms).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),timestamp:s.end_ms,requests:s.requests,errors:s.errors,avgLatency:s.avg_latency_ms,traces:t.filter(l=>l.timestamp_ms>=s.start_ms&&l.timestamp_ms[l,s.agents?.[l]||0]))})):mSe(t,r,n.minutes,n.bucketSeconds),a=t.map(s=>s.duration_ms).filter(s=>typeof s=="number"&&Number.isFinite(s)),i=e?.summary?{requests:e.summary.requests,errors:e.summary.errors,avgLatency:e.summary.avg_latency_ms,throughput:Number(e.summary.throughput_per_minute).toFixed(1)}:{requests:t.length,errors:t.filter(s=>s.status==="ERROR").length,avgLatency:a.length?Math.round(a.reduce((s,l)=>s+l,0)/a.length):0,throughput:(t.length/n.minutes).toFixed(1)};return{buckets:o,summary:i,truncated:e?.truncated===!0,total:e?.total_count??t.length}};var gY=["#6366f1","#10b981","#f59e0b","#ec4899","#3b82f6","#8b5cf6","#14b8a6","#f97316"],gSe=3e4,hSe=e=>{let t={};return e.forEach((r,n)=>{t[r]=gY[n%gY.length]}),t},ySe=e=>{let t={};return e.forEach(r=>{(r.spans||[]).forEach(n=>{if((n.nested||0)===0)return;let o=n.name||n.type||"unknown";t[o]||(t[o]={name:o,type:n.type,count:0,total:0,max:0,errors:0});let a=t[o];a.count+=1,a.total+=n.duration||0,a.max=Math.max(a.max,n.duration||0),n.error&&(a.errors+=1)})}),Object.values(t).map(r=>({...r,avg:r.total/r.count})).sort((r,n)=>n.total-r.total)};function Zp({agentId:e=null,embedded:t=!1}){let{darkMode:r}=ut(),[n,o]=(0,H.useState)([]),[a,i]=(0,H.useState)(null),[s,l]=(0,H.useState)([]),[u,c]=(0,H.useState)({}),[d,p]=(0,H.useState)(!0),[f,m]=(0,H.useState)(null),[y,b]=(0,H.useState)(null),h=(0,H.useRef)(new URLSearchParams(window.location.search).get("trace")),[g,v]=(0,H.useState)(null),[x,S]=(0,H.useState)({status:"all",agent:"all",action:"all"}),[k,w]=(0,H.useState)("time"),[_,A]=(0,H.useState)(null),[C,N]=(0,H.useState)("timeline"),[$,Q]=(0,H.useState)("popular"),{timeWindow:B}=Sl(),G=(0,H.useCallback)(async()=>{try{let E=await fetch(fY({minutes:B.minutes,bucketSeconds:B.bucketSeconds,agentId:e}));if(!E.ok)throw new Error(`Request failed (${E.status})`);let L=await E.json();o(L.traces||[]),i(L),l(L.agents||[]),c(L.agent_ids||{}),m(null)}catch(E){m(E.message)}finally{p(!1)}},[B.minutes,B.bucketSeconds,e]);(0,H.useEffect)(()=>{G();let E=setInterval(G,gSe);return()=>clearInterval(E)},[G]);let T=(0,H.useMemo)(()=>hSe(s),[s]);(0,H.useEffect)(()=>{A(null)},[B.id]);let P=(0,H.useMemo)(()=>mY(a,n,s,B),[a,n,s,B]),I=P.buckets,O=Math.max(0,Math.ceil(I.length/6)-1),j=(0,H.useMemo)(()=>{let E=n;if(_!==null){let L=I[_];L&&(E=L.traces||[])}if(x.status!=="all"&&(E=E.filter(L=>x.status==="success"?L.status!=="ERROR":L.status==="ERROR")),x.agent!=="all"&&(E=E.filter(L=>L.agent===x.agent)),x.action!=="all")if(x.action.includes("#")){let[L,re]=x.action.split("#");E=E.filter(F=>F.agent===L&&F.action===re)}else E=E.filter(L=>L.action===x.action);return k==="latency"&&(E=[...E].sort((L,re)=>(re.duration_ms||0)-(L.duration_ms||0))),g&&!E.some(L=>L.id===g.id)&&(E=[g,...E]),E},[n,_,I,x,k,g]);(0,H.useEffect)(()=>{let E=h.current;if(!E)return;let L=F=>{h.current=null,b(F.id),setTimeout(()=>{document.getElementById(`trace-row-${F.id}`)?.scrollIntoView({behavior:"smooth",block:"start"})},150)},re=n.find(F=>F.id===E||F.trace_id===E||F.short_id&&String(E).startsWith(F.short_id));if(re){L(re);return}n.length!==0&&fetch(`/api/traces/${encodeURIComponent(E)}`).then(F=>F.ok?F.json():Promise.reject(new Error("not found"))).then(({trace:F})=>{v(F),L(F)}).catch(()=>{h.current=null})},[n]);let M=(0,H.useMemo)(()=>{let E=_!==null?I[_]?.traces||[]:n,L={};E.forEach(F=>{F.agent&&(L[F.agent]||(L[F.agent]={agent:F.agent,count:0,totalDuration:0,cost:0,errors:0,actions:{},tokens:{thinking:0,input:0,output:0}}),L[F.agent].count++,L[F.agent].totalDuration+=F.duration_ms||0,L[F.agent].cost+=F.estimated_cost||0,F.status==="ERROR"&&L[F.agent].errors++,F.tokens&&(L[F.agent].tokens.thinking+=F.tokens.thinking||0,L[F.agent].tokens.input+=F.tokens.input||0,L[F.agent].tokens.output+=F.tokens.output||0),F.action&&(L[F.agent].actions[F.action]=(L[F.agent].actions[F.action]||0)+1))});let re={popular:F=>F.count,longest:F=>F.totalDuration/(F.count||1),cost:F=>F.cost,tokens:F=>(F.tokens.input||0)+(F.tokens.output||0)+(F.tokens.thinking||0),errors:F=>F.errors}[$]||(F=>F.count);return Object.values(L).sort((F,fe)=>re(fe)-re(F)||fe.count-F.count)},[n,I,_,$]),W=(0,H.useMemo)(()=>{let E=_!==null?I[_]?.traces||[]:n,L={};return E.forEach(re=>{if(!re.agent)return;let F=`${re.agent}#${re.action||"unknown"}`;L[F]||(L[F]={key:F,agent:re.agent,action:re.action||"unknown",count:0,totalDuration:0,errors:0,minDuration:1/0,maxDuration:0,tokens:{thinking:0,input:0,output:0}}),L[F].count++,L[F].totalDuration+=re.duration_ms||0,L[F].minDuration=Math.min(L[F].minDuration,re.duration_ms||0),L[F].maxDuration=Math.max(L[F].maxDuration,re.duration_ms||0),re.status==="ERROR"&&L[F].errors++,re.tokens&&(L[F].tokens.thinking+=re.tokens.thinking||0,L[F].tokens.input+=re.tokens.input||0,L[F].tokens.output+=re.tokens.output||0)}),Object.values(L).forEach(re=>{re.minDuration===1/0&&(re.minDuration=0)}),Object.values(L).sort((re,F)=>F.count-re.count)},[n,I,_]),K=(0,H.useMemo)(()=>{let E=_!==null?I[_]?.traces||[]:n,L={};return E.forEach(re=>{(re.spans||[]).forEach(F=>{if(F.type!=="tool")return;let fe=F.attributes?.["tool.name"]||F.name?.replace(/^tool\./,"")||"unknown";L[fe]||(L[fe]={name:fe,count:0,totalDuration:0,maxDuration:0,errors:0,agents:new Set}),L[fe].count++,L[fe].totalDuration+=F.duration||0,L[fe].maxDuration=Math.max(L[fe].maxDuration,F.duration||0),F.error&&L[fe].errors++,re.agent&&L[fe].agents.add(`${re.agent}#${re.action||"unknown"}`)})}),Object.values(L).map(re=>({...re,agents:[...re.agents],avgDuration:re.count?re.totalDuration/re.count:0})).sort((re,F)=>F.totalDuration-re.totalDuration)},[n,I,_]),z=(0,H.useMemo)(()=>x.agent==="all"?W.map(E=>E.key):W.filter(E=>E.agent===x.agent).map(E=>E.key),[x.agent,W]),Y=(0,H.useMemo)(()=>ySe(j),[j]),q=E=>{if(E&&E.activeTooltipIndex!==void 0){let L=E.activeTooltipIndex;A(_===L?null:L),b(null)}},ae=E=>(E?.input||0)+(E?.output||0)+(E?.thinking||0),Pe=E=>{let L=E.count?E.errors/E.count:0;return[{label:`Calls ${B.label||""}`.trim(),value:E.count.toLocaleString()},{label:"Errors",value:`${(L*100).toFixed(1)}%`,tone:E.errors>0?"bad":"good"},{label:"Avg time",value:`${Math.round(E.totalDuration/(E.count||1))}ms`},{label:"Tokens",value:ae(E.tokens).toLocaleString()},{label:"Cost",value:me(E.cost),title:"Estimated from token counts at this model's published rates",tone:E.cost?void 0:"muted"},{label:"Actions",value:(E.agents?.length||0).toLocaleString()}]},me=E=>E?E<.01?"<$0.01":`$${E.toFixed(2)}`:"\u2014",le=H.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"flex-end",gap:"8px",marginBottom:"12px"}},H.default.createElement("span",{style:{fontSize:"12px",color:r?"rgba(255,255,255,0.5)":"#6b7280"}},"Rank by"),H.default.createElement("select",{value:$,onChange:E=>Q(E.target.value),style:{fontSize:"12px",padding:"4px 8px",borderRadius:"6px",border:`1px solid ${r?"rgba(255,255,255,0.15)":"#e5e7eb"}`,background:r?"rgba(255,255,255,0.05)":"#ffffff",color:r?"#f9fafb":"#111827"}},H.default.createElement("option",{value:"popular"},"Most calls"),H.default.createElement("option",{value:"longest"},"Longest average"),H.default.createElement("option",{value:"cost"},"Highest cost"),H.default.createElement("option",{value:"tokens"},"Most tokens"),H.default.createElement("option",{value:"errors"},"Most errors"))),R=E=>S(L=>({...L,agent:L.agent===E?"all":E})),ee=E=>{let L=u[E];if(!L)return R(E);let re=et(`/agents/${L}`);window.history.pushState(window.history.state,"",re),window.dispatchEvent(new CustomEvent("dashboard:navigate",{detail:{path:re}}))},je=E=>{let L=Y[0]?.total||1,re=E?"rgba(0,0,0,0.3)":"white",F=E?"1px solid rgba(255,255,255,0.1)":"1px solid #e5e7eb",fe=E?"white":"#111827",tt=E?"rgba(255,255,255,0.5)":"#6b7280",rt={llm:"#ef4444",tool:"#10b981",generate:"#8b5cf6",prompt:"#3b82f6"};return H.default.createElement("div",{style:{padding:E?"0 24px 24px 24px":0}},H.default.createElement("div",{style:{background:re,border:F,borderRadius:"12px",padding:"16px"}},H.default.createElement("div",{style:{fontSize:"14px",fontWeight:600,color:fe,marginBottom:"4px"}},"Slowest operations"),H.default.createElement("div",{style:{fontSize:"12px",color:tt,marginBottom:"14px"}},"Span durations aggregated across ",j.length," trace",j.length===1?"":"s"," \u2014 ranked by total time"),Y.length===0?H.default.createElement("div",{style:{fontSize:"13px",color:tt,padding:"12px 0"}},"No spans in the current selection"):H.default.createElement("div",{style:{display:"grid",gap:"10px"}},Y.map(ge=>H.default.createElement("div",{key:ge.name,style:{display:"flex",alignItems:"center",gap:"12px"}},H.default.createElement("div",{style:{width:"220px",flexShrink:0,display:"flex",alignItems:"center",gap:"8px"}},H.default.createElement("span",{style:{color:tt}},dI(ge.type)),H.default.createElement("span",{style:{fontSize:"13px",color:ge.errors>0?"#ef4444":fe,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},ge.name)),H.default.createElement("div",{style:{flex:1,height:"18px",background:E?"rgba(255,255,255,0.06)":"#f3f4f6",borderRadius:"4px",position:"relative"}},H.default.createElement("div",{style:{position:"absolute",top:"3px",left:0,height:"12px",borderRadius:"3px",width:`${Math.max(ge.total/L*100,.5)}%`,background:rt[ge.type]||"#6366f1"}})),H.default.createElement("div",{style:{width:"260px",flexShrink:0,fontSize:"12px",color:tt,fontFamily:Mt.mono,textAlign:"right"}},ge.count,"\xD7 \xB7 avg ",eo(ge.avg)," \xB7 max ",eo(ge.max)," \xB7 \u03A3 ",eo(ge.total)))))))};if(d)return H.default.createElement("div",{className:"flex items-center justify-center h-64"},H.default.createElement("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-red-500"}));let _e=P.summary,D=P.truncated&&H.default.createElement("div",{role:"status","data-testid":"trace-window-notice",style:{padding:"12px 24px",fontSize:13,color:r?"#fbbf24":"#92400e"}},"Showing newest ",n.length," of ",P.total," traces. Chart and totals cover the full window; lists and breakdowns use these loaded traces."),V=_e.requests===0;return r?H.default.createElement("div",{className:"preview-content",style:{borderRadius:"12px",overflow:"hidden",minHeight:"calc(100vh - 200px)"}},D,H.default.createElement("div",{style:{padding:"24px 24px 0 24px",borderBottom:"1px solid rgba(255,255,255,0.1)",marginBottom:"16px",paddingBottom:"16px"}},H.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},H.default.createElement("div",null,!t&&H.default.createElement("h1",{style:{fontSize:"24px",fontWeight:"bold",color:"white",margin:0}},"Traces"),H.default.createElement("p",{style:{fontSize:"14px",color:"rgba(255,255,255,0.6)",marginTop:"4px"}},_!==null?`Viewing ${I[_]?.time} \u2022 ${j.length} requests`:`Last ${B.label} \u2022 Click timeline to drill down`)),H.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"12px"}},H.default.createElement("div",{style:{display:"flex",background:"rgba(255,255,255,0.1)",borderRadius:"8px",padding:"2px"}},["timeline","agents","actions","tools","spans"].map(E=>H.default.createElement("button",{key:E,onClick:()=>N(E),style:{padding:"6px 12px",background:C===E?"#ef4444":"transparent",color:"white",borderRadius:"6px",border:"none",fontSize:"13px",cursor:"pointer",textTransform:"capitalize"}},E))),!e&&H.default.createElement("select",{value:x.agent,onChange:E=>S({...x,agent:E.target.value,action:"all"}),style:{padding:"8px 12px",background:"rgba(255,255,255,0.1)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"8px",color:"white",fontSize:"14px",maxWidth:"180px",textOverflow:"ellipsis"}},H.default.createElement("option",{value:"all"},"All Agents"),s.map(E=>H.default.createElement("option",{key:E,value:E},E))),H.default.createElement("select",{value:x.action,onChange:E=>S({...x,action:E.target.value}),style:{padding:"8px 12px",background:x.action!=="all"?"rgba(239, 68, 68, 0.3)":"rgba(255,255,255,0.1)",border:x.action!=="all"?"1px solid #ef4444":"1px solid rgba(255,255,255,0.2)",borderRadius:"8px",color:"white",fontSize:"14px",maxWidth:"220px",textOverflow:"ellipsis"}},H.default.createElement("option",{value:"all"},"All Actions"),z.map(E=>H.default.createElement("option",{key:E,value:E},E))),H.default.createElement("select",{value:x.status,onChange:E=>S({...x,status:E.target.value}),style:{padding:"8px 12px",background:"rgba(255,255,255,0.1)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"8px",color:"white",fontSize:"14px"}},H.default.createElement("option",{value:"all"},"All Status"),H.default.createElement("option",{value:"success"},"Success"),H.default.createElement("option",{value:"error"},"Error")),H.default.createElement("select",{value:k,onChange:E=>w(E.target.value),style:{padding:"8px 12px",background:"rgba(255,255,255,0.1)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"8px",color:"white",fontSize:"14px"}},H.default.createElement("option",{value:"time"},"Newest first"),H.default.createElement("option",{value:"latency"},"Slowest first")),_!==null&&H.default.createElement("button",{onClick:()=>A(null),style:{padding:"8px 16px",background:"rgba(255,255,255,0.2)",color:"white",borderRadius:"8px",border:"none",fontSize:"14px",fontWeight:"500",cursor:"pointer"}},"Clear Selection")))),f&&H.default.createElement("div",{style:{margin:"0 24px 16px 24px",padding:"12px 16px",background:"rgba(239, 68, 68, 0.1)",borderRadius:"8px",color:"#ef4444",fontSize:"13px"}},"Failed to load traces: ",f),H.default.createElement("div",{style:{padding:"0 24px",marginBottom:"24px"}},H.default.createElement("div",{style:{background:"rgba(0,0,0,0.3)",borderRadius:"12px",padding:"16px",border:"1px solid rgba(255,255,255,0.1)"}},H.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"12px"}},H.default.createElement("div",{style:{fontSize:"14px",fontWeight:"600",color:"white"}},"Agent Requests / Minute"),H.default.createElement("div",{style:{display:"flex",gap:"16px",flexWrap:"wrap"}},Object.entries(T).map(([E,L])=>H.default.createElement("div",{key:E,style:{display:"flex",alignItems:"center",gap:"6px"}},H.default.createElement("div",{style:{width:"10px",height:"10px",borderRadius:"2px",background:L}}),H.default.createElement("span",{style:{fontSize:"11px",color:"rgba(255,255,255,0.7)"}},E.replace("Agent","")))))),H.default.createElement("div",{style:{height:"150px"}},H.default.createElement(Ac,{width:"100%",height:"100%"},H.default.createElement(nd,{data:I,onClick:q,style:{cursor:"pointer"}},H.default.createElement("defs",null,Object.entries(T).map(([E,L])=>H.default.createElement("linearGradient",{key:E,id:`gradient-${E}`,x1:"0",y1:"0",x2:"0",y2:"1"},H.default.createElement("stop",{offset:"5%",stopColor:L,stopOpacity:.8}),H.default.createElement("stop",{offset:"95%",stopColor:L,stopOpacity:.1})))),H.default.createElement(Cu,{strokeDasharray:"3 3",stroke:"rgba(255,255,255,0.1)"}),H.default.createElement(Tu,{dataKey:"time",stroke:"rgba(255,255,255,0.5)",tick:{fontSize:10,fill:"rgba(255,255,255,0.5)"},tickLine:!1,interval:O}),H.default.createElement(Pu,{stroke:"rgba(255,255,255,0.5)",tick:{fontSize:10,fill:"rgba(255,255,255,0.5)"},tickLine:!1,axisLine:!1,allowDecimals:!1}),H.default.createElement(Hc,{contentStyle:{background:"rgba(0,0,0,0.9)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"8px",padding:"12px"},labelStyle:{color:"white",fontWeight:"600",marginBottom:"8px"},itemStyle:{color:"rgba(255,255,255,0.8)",fontSize:"12px"},formatter:(E,L)=>[E,L.replace("Agent","")]}),Object.keys(T).map(E=>H.default.createElement(Eu,{key:E,type:"monotone",dataKey:E,stackId:"1",stroke:T[E],fill:`url(#gradient-${E})`}))))),H.default.createElement("div",{style:{display:"flex",gap:"24px",marginTop:"12px",paddingTop:"12px",borderTop:"1px solid rgba(255,255,255,0.1)"}},H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"20px",fontWeight:"700",color:"white"}},_e.requests),H.default.createElement("div",{style:{fontSize:"11px",color:"rgba(255,255,255,0.5)"}},"Total Requests")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"20px",fontWeight:"700",color:"#ef4444"}},_e.errors),H.default.createElement("div",{style:{fontSize:"11px",color:"rgba(255,255,255,0.5)"}},"Errors")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"20px",fontWeight:"700",color:"#10b981"}},_e.avgLatency,"ms"),H.default.createElement("div",{style:{fontSize:"11px",color:"rgba(255,255,255,0.5)"}},"Avg Latency")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"20px",fontWeight:"700",color:"#f59e0b"}},_e.throughput,"/min"),H.default.createElement("div",{style:{fontSize:"11px",color:"rgba(255,255,255,0.5)"}},"Throughput"))))),C==="agents"&&H.default.createElement("div",{style:{padding:"0 24px",marginBottom:"24px"}},le,H.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(280px, 1fr))",gap:"16px"}},M.map(E=>H.default.createElement(Tm,{key:E.agent,name:E.agent,accentColor:T[E.agent],subtitle:E.agents?.length?E.agents.join(", "):void 0,badge:H.default.createElement("span",{style:{fontSize:"12px",padding:"2px 8px",background:T[E.agent]+"30",color:T[E.agent],borderRadius:"4px",whiteSpace:"nowrap"}},E.count," calls"),onClick:()=>ee(E.agent),stats:Pe(E),footer:H.default.createElement(H.default.Fragment,null,H.default.createElement("span",null,u[E.agent]?"Open agent \u2192":"Not linked to an agent record"),H.default.createElement("button",{onClick:L=>{L.stopPropagation(),R(E.agent)},style:{background:"none",border:"none",padding:0,cursor:"pointer",color:x.agent===E.agent?"#ef4444":"inherit",font:"inherit"}},x.agent===E.agent?"Clear filter":"Filter traces"))})))),C==="actions"&&H.default.createElement("div",{style:{padding:"0 24px",marginBottom:"24px"}},H.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(320px, 1fr))",gap:"12px"}},W.map(E=>{let L=x.action===E.key;return H.default.createElement("div",{key:E.key,onClick:()=>{S({...x,action:L?"all":E.key}),N("timeline")},style:{background:L?"rgba(239, 68, 68, 0.15)":"rgba(0,0,0,0.3)",borderRadius:"10px",padding:"14px",border:L?"1px solid #ef4444":`1px solid ${T[E.agent]}30`,cursor:"pointer",transition:"all 0.15s"}},H.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"10px"}},H.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},H.default.createElement("div",{style:{width:"6px",height:"6px",borderRadius:"50%",background:T[E.agent]}}),H.default.createElement("span",{style:{fontSize:"14px",fontWeight:"600",color:"white"}},E.agent),H.default.createElement("span",{style:{fontSize:"13px",color:"rgba(255,255,255,0.7)"}},"#",E.action)),H.default.createElement("span",{style:{fontSize:"12px",padding:"2px 8px",background:T[E.agent]+"30",color:T[E.agent],borderRadius:"4px"}},E.count," calls")),H.default.createElement("div",{style:{display:"flex",gap:"16px",flexWrap:"wrap"}},H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"10px",color:"rgba(255,255,255,0.5)"}},"Avg"),H.default.createElement("div",{style:{fontSize:"13px",color:"white",fontWeight:"500"}},Math.round(E.totalDuration/E.count),"ms")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"10px",color:"rgba(255,255,255,0.5)"}},"Min/Max"),H.default.createElement("div",{style:{fontSize:"13px",color:"rgba(255,255,255,0.8)"}},Math.round(E.minDuration),"ms / ",Math.round(E.maxDuration),"ms")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"10px",color:"rgba(255,255,255,0.5)"}},"Errors"),H.default.createElement("div",{style:{fontSize:"13px",color:E.errors>0?"#ef4444":"#10b981"}},E.errors," (",(E.errors/E.count*100).toFixed(0),"%)")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"10px",color:"rgba(255,255,255,0.5)"}},"Tokens"),H.default.createElement("div",{style:{fontSize:"13px",color:"rgba(255,255,255,0.8)"}},ae(E.tokens).toLocaleString()))))}))),C==="spans"&&je(!0),C==="timeline"&&!V&&H.default.createElement("div",{className:"space-y-4"},j.length===0?H.default.createElement("div",{style:{textAlign:"center",padding:"32px",color:"rgba(255,255,255,0.5)",fontSize:"14px"}},"No traces match filters"):j.map(E=>H.default.createElement(XC,{key:E.id,trace:E,darkMode:!0,expanded:y===E.id,onToggle:()=>b(y===E.id?null:E.id)}))),V&&C==="timeline"&&H.default.createElement("div",{style:{textAlign:"center",padding:"48px 0"}},H.default.createElement("div",{style:{color:"rgba(255,255,255,0.5)",fontSize:"18px"}},"No traces yet"),H.default.createElement("p",{style:{color:"rgba(255,255,255,0.4)",fontSize:"14px",marginTop:"8px"}},"Run an agent, or point your app's ActiveAgent telemetry at this workspace to see traces appear here"))):H.default.createElement("div",{className:"space-y-6"},D,H.default.createElement("div",{className:"flex items-center justify-between flex-wrap gap-y-2"},H.default.createElement("div",null,H.default.createElement("h1",{className:"text-2xl font-bold text-gray-900"},"Traces"),H.default.createElement("p",{className:"text-sm text-gray-500"},_!==null?`Viewing ${I[_]?.time} \u2022 ${j.length} requests`:`Last ${B.label} \u2022 Click timeline to drill down`)),H.default.createElement("div",{className:"flex items-center space-x-3 flex-wrap gap-y-2 min-w-0"},H.default.createElement(kl,null),H.default.createElement("div",{className:"flex bg-gray-100 rounded-lg p-1"},["timeline","agents","actions","tools","spans"].map(E=>H.default.createElement("button",{key:E,onClick:()=>N(E),className:`px-3 py-1 text-sm rounded-md transition-colors capitalize ${C===E?"bg-white shadow text-gray-900":"text-gray-600"}`},E))),H.default.createElement("select",{value:x.agent,onChange:E=>S({...x,agent:E.target.value,action:"all"}),className:"px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-red-500",style:{maxWidth:"180px",textOverflow:"ellipsis"}},H.default.createElement("option",{value:"all"},"All Agents"),s.map(E=>H.default.createElement("option",{key:E,value:E},E))),H.default.createElement("select",{value:x.action,onChange:E=>S({...x,action:E.target.value}),className:`px-3 py-2 border rounded-lg text-sm focus:ring-2 focus:ring-red-500 ${x.action!=="all"?"border-red-500 bg-red-50":"border-gray-300"}`,style:{maxWidth:"220px",textOverflow:"ellipsis"}},H.default.createElement("option",{value:"all"},"All Actions"),z.map(E=>H.default.createElement("option",{key:E,value:E},E))),H.default.createElement("select",{value:x.status,onChange:E=>S({...x,status:E.target.value}),className:"px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-red-500"},H.default.createElement("option",{value:"all"},"All Status"),H.default.createElement("option",{value:"success"},"Success"),H.default.createElement("option",{value:"error"},"Error")),H.default.createElement("select",{value:k,onChange:E=>w(E.target.value),className:"px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-red-500"},H.default.createElement("option",{value:"time"},"Newest first"),H.default.createElement("option",{value:"latency"},"Slowest first")),_!==null&&H.default.createElement("button",{onClick:()=>A(null),className:"px-4 py-2 bg-gray-200 text-gray-700 rounded-lg hover:bg-gray-300 transition-colors text-sm font-medium"},"Clear Selection"))),f&&H.default.createElement("div",{className:"p-3 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700"},"Failed to load traces: ",f),H.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-4"},H.default.createElement("div",{className:"flex justify-between items-center mb-3"},H.default.createElement("h3",{className:"text-sm font-semibold text-gray-700"},"Agent Requests / Minute"),H.default.createElement("div",{className:"flex gap-4 flex-wrap"},Object.entries(T).map(([E,L])=>H.default.createElement("div",{key:E,className:"flex items-center gap-1.5"},H.default.createElement("div",{className:"w-2.5 h-2.5 rounded-sm",style:{background:L}}),H.default.createElement("span",{className:"text-xs text-gray-500"},E.replace("Agent","")))))),H.default.createElement("div",{className:"h-36"},H.default.createElement(Ac,{width:"100%",height:"100%"},H.default.createElement(nd,{data:I,onClick:q,style:{cursor:"pointer"}},H.default.createElement("defs",null,Object.entries(T).map(([E,L])=>H.default.createElement("linearGradient",{key:E,id:`gradient-light-${E}`,x1:"0",y1:"0",x2:"0",y2:"1"},H.default.createElement("stop",{offset:"5%",stopColor:L,stopOpacity:.6}),H.default.createElement("stop",{offset:"95%",stopColor:L,stopOpacity:.05})))),H.default.createElement(Cu,{strokeDasharray:"3 3",stroke:"#e5e7eb"}),H.default.createElement(Tu,{dataKey:"time",stroke:"#9ca3af",tick:{fontSize:10,fill:"#6b7280"},tickLine:!1,interval:O}),H.default.createElement(Pu,{stroke:"#9ca3af",tick:{fontSize:10,fill:"#6b7280"},tickLine:!1,axisLine:!1,allowDecimals:!1}),H.default.createElement(Hc,{contentStyle:{background:"white",border:"1px solid #e5e7eb",borderRadius:"8px",boxShadow:"0 4px 6px -1px rgba(0,0,0,0.1)"},labelStyle:{color:"#111827",fontWeight:"600",marginBottom:"8px"},formatter:(E,L)=>[E,L.replace("Agent","")]}),Object.keys(T).map(E=>H.default.createElement(Eu,{key:E,type:"monotone",dataKey:E,stackId:"1",stroke:T[E],fill:`url(#gradient-light-${E})`}))))),H.default.createElement("div",{className:"flex gap-6 mt-3 pt-3 border-t border-gray-100"},H.default.createElement("div",null,H.default.createElement("div",{className:"text-lg font-bold text-gray-900"},_e.requests),H.default.createElement("div",{className:"text-xs text-gray-500"},"Total Requests")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-lg font-bold text-red-500"},_e.errors),H.default.createElement("div",{className:"text-xs text-gray-500"},"Errors")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-lg font-bold text-green-600"},_e.avgLatency,"ms"),H.default.createElement("div",{className:"text-xs text-gray-500"},"Avg Latency")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-lg font-bold text-amber-500"},_e.throughput,"/min"),H.default.createElement("div",{className:"text-xs text-gray-500"},"Throughput")))),C==="agents"&&H.default.createElement("div",null,le,H.default.createElement("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},M.map(E=>H.default.createElement(Tm,{key:E.agent,name:E.agent,accentColor:T[E.agent],subtitle:E.agents?.length?E.agents.join(", "):void 0,badge:H.default.createElement("span",{className:"text-sm px-2 py-0.5 rounded",style:{background:T[E.agent]+"20",color:T[E.agent]}},E.count," calls"),onClick:()=>ee(E.agent),stats:Pe(E),footer:H.default.createElement(H.default.Fragment,null,H.default.createElement("span",null,u[E.agent]?"Open agent \u2192":"Not linked to an agent record"),H.default.createElement("button",{onClick:L=>{L.stopPropagation(),R(E.agent)},className:x.agent===E.agent?"text-red-600":"hover:text-gray-700"},x.agent===E.agent?"Clear filter":"Filter traces"))})))),C==="actions"&&H.default.createElement("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3"},W.map(E=>{let L=x.action===E.key;return H.default.createElement("div",{key:E.key,onClick:()=>{S({...x,action:L?"all":E.key}),N("timeline")},className:`rounded-xl p-4 cursor-pointer transition-all ${L?"bg-red-50 border-2 border-red-500":"bg-white border border-gray-200 hover:border-gray-300"}`,style:{borderLeftColor:T[E.agent],borderLeftWidth:L?"2px":"4px"}},H.default.createElement("div",{className:"flex items-center justify-between mb-3"},H.default.createElement("div",{className:"flex items-center gap-2"},H.default.createElement("div",{className:"w-2 h-2 rounded-full",style:{background:T[E.agent]}}),H.default.createElement("span",{className:"font-semibold text-gray-900"},E.agent),H.default.createElement("span",{className:"text-gray-500"},"#",E.action)),H.default.createElement("span",{className:"text-xs px-2 py-0.5 rounded",style:{background:T[E.agent]+"20",color:T[E.agent]}},E.count," calls")),H.default.createElement("div",{className:"flex flex-wrap gap-4 text-sm"},H.default.createElement("div",null,H.default.createElement("div",{className:"text-xs text-gray-500"},"Avg"),H.default.createElement("div",{className:"font-medium"},Math.round(E.totalDuration/E.count),"ms")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-xs text-gray-500"},"Min/Max"),H.default.createElement("div",{className:"text-gray-600"},Math.round(E.minDuration),"ms / ",Math.round(E.maxDuration),"ms")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-xs text-gray-500"},"Errors"),H.default.createElement("div",{className:E.errors>0?"text-red-600":"text-green-600"},E.errors," (",(E.errors/E.count*100).toFixed(0),"%)")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-xs text-gray-500"},"Tokens"),H.default.createElement("div",{className:"text-gray-600"},ae(E.tokens).toLocaleString()))))})),C==="tools"&&(K.length===0?H.default.createElement("div",{className:"text-center py-8 text-gray-500 text-sm"},"No tool calls in this window"):H.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 overflow-hidden"},H.default.createElement("div",{className:"flex items-center gap-4 px-4 py-2 text-xs font-medium text-gray-500 border-b border-gray-100"},H.default.createElement("div",{className:"flex-1"},"Tool"),H.default.createElement("div",{className:"w-20 text-right"},"Calls"),H.default.createElement("div",{className:"w-24 text-right"},"Total time"),H.default.createElement("div",{className:"w-20 text-right"},"Avg"),H.default.createElement("div",{className:"w-20 text-right"},"Slowest")),K.map(E=>{let L=K[0].totalDuration?E.totalDuration/K[0].totalDuration*100:0;return H.default.createElement("div",{key:E.name,className:"px-4 py-2 border-b border-gray-50 last:border-0"},H.default.createElement("div",{className:"flex items-center gap-4 text-sm"},H.default.createElement("div",{className:"flex-1 min-w-0"},H.default.createElement("div",{className:"font-medium text-gray-900 truncate",title:E.name},E.name),E.agents.length>0&&H.default.createElement("div",{className:"text-xs text-gray-400 truncate",title:E.agents.join(", ")},E.agents.join(", "))),H.default.createElement("div",{className:"w-20 text-right text-gray-700",style:{fontFamily:Mt.mono}},E.count.toLocaleString(),E.errors>0&&H.default.createElement("span",{className:"text-red-600 ml-1",title:`${E.errors} failed`},"(",E.errors,")")),H.default.createElement("div",{className:"w-24 text-right text-gray-900 font-medium",style:{fontFamily:Mt.mono}},eo(E.totalDuration)),H.default.createElement("div",{className:"w-20 text-right text-gray-500",style:{fontFamily:Mt.mono}},eo(E.avgDuration)),H.default.createElement("div",{className:"w-20 text-right text-gray-500",style:{fontFamily:Mt.mono}},eo(E.maxDuration))),H.default.createElement("div",{className:"h-1 bg-gray-100 rounded mt-1.5"},H.default.createElement("div",{className:"h-1 bg-green-500 rounded",style:{width:`${Math.max(L,1)}%`}})))}))),C==="spans"&&je(!1),C==="timeline"&&!V&&H.default.createElement("div",{className:"space-y-4"},j.length===0?H.default.createElement("div",{className:"text-center py-8 text-gray-500"},"No traces match filters"):j.map(E=>H.default.createElement(XC,{key:E.id,trace:E,darkMode:!1,expanded:y===E.id,onToggle:()=>b(y===E.id?null:E.id)}))),V&&C==="timeline"&&H.default.createElement("div",{className:"text-center py-12"},H.default.createElement("div",{className:"text-gray-400 text-lg"},"No traces yet"),H.default.createElement("p",{className:"text-gray-500 text-sm mt-2"},"Run an agent, or point your app's ActiveAgent telemetry at this workspace to see traces appear here")))}var xe=Z(J());var ZC=Z(J());function gI({trace:e,darkMode:t,height:r=8}){let n=Rn(t);if(!e)return ZC.default.createElement("div",{className:"rounded",style:{height:`${r}px`,background:n.trackBg}});let o=e.spans||[],a=e.duration_ms||1,i=[...o].sort((s,l)=>(s.nested||0)-(l.nested||0));return ZC.default.createElement("div",{style:{position:"relative",height:`${r}px`,borderRadius:"999px",background:n.trackBg,overflow:"hidden",flex:1}},i.map((s,l)=>ZC.default.createElement("div",{key:s.span_id||l,title:`${s.name} \xB7 ${eo(s.duration)}`,style:{position:"absolute",top:0,bottom:0,left:`${Math.min(s.start/a*100,99)}%`,width:`${Math.max(s.duration/a*100,.8)}%`,background:s.error?"#ef4444":cI[s.type]||"#9ca3af"}})))}var Hs=Z(J());var vr=Z(J());var Du=Z(J());var vSe=/\/agents\/(\d+)/;function Ja(...e){return t=>e.some(r=>t.startsWith(r))?{}:null}function xSe(e){return t=>t===e?{}:null}function n0(e){return t=>e.test(t)?{agentId:t.match(vSe)?.[1]}:null}function JC(e){return({agent:t})=>t?`/agents/${t.id}${e}`:""}var bSe=e=>e.assistantEnabled!==!1,wSe=n0(/\/agents\/\d+\/(interactions|history)/),SSe=["recording","context","run","scenario_result"],kSe=/^\/replay\/(?:(context|run|scenario_result)\/)?(\d+)\/?$/;function _Se(e){let t=e.match(kSe);return t?{sessionKind:t[1]||"recording",sessionId:t[2]}:null}var hI=[{view:"assistant",match:xSe("/assistant"),path:"/assistant",enabled:bSe},{view:"traces",match:Ja("/traces"),path:"/traces"},{view:"metrics",match:Ja("/metrics"),path:"/metrics"},{view:"scenarios",match:Ja("/scenarios"),path:"/scenarios"},{view:"scenarios",match:e=>e.startsWith("/catalogs")?{replacePath:e.replace("/catalogs","/scenarios")}:null},{view:"interactions",match:Ja("/interactions"),path:"/interactions"},{view:"tools",match:Ja("/tools"),path:"/tools"},{view:"mcp",match:e=>{if(!e.startsWith("/mcp"))return null;let t=e.match(/^\/mcp\/([^/?#]+)/)?.[1];return t?{focusServer:decodeURIComponent(t)}:{}},path:"/mcp"},{view:"evaluations",match:Ja("/evaluations"),path:"/evaluations"},{view:"analytics",match:Ja("/analytics"),path:"/analytics"},{view:"projects",match:Ja("/projects"),path:"/projects"},{view:"exploration",match:Ja("/explorations"),path:"/explorations"},{view:"builder",match:Ja("/agents/new"),path:"/agents/new"},{view:"history",match:e=>{let t=wSe(e);return t&&e.includes("/history")&&(t.replacePath=e.replace("/history","/interactions")),t},path:JC("/interactions")},{view:"agent-analytics",match:n0(/\/agents\/\d+\/analytics/),path:JC("/analytics")},{view:"editor",match:n0(/\/agents\/\d+\/edit/),path:JC("/edit")},{view:"runner",match:n0(/\/agents\/\d+\/run/),path:JC("/run")},{view:"history",match:n0(/\/agents\/\d+\/?$/)},{view:"replay",match:_Se},{view:"sessions",match:Ja("/sessions","/replay"),path:"/sessions"},{view:"sandbox",match:Ja("/sandbox","/demo"),path:"/sandbox"},{view:"organization",match:Ja("/organization"),path:"/organization"},{view:"settings",match:Ja("/settings"),path:"/settings"}],CSe="list",hY=[{id:"agents",label:null,items:[{view:"assistant",label:"Ask ActiveAgents",glyph:">"},{view:"list",label:"Agents",icon:"agents",badge:"agentCount"},{view:"builder",label:"New Agent",icon:"newAgent"},{view:"sandbox",label:"Run Agents",icon:"demo"},{view:"projects",label:"Projects",glyph:""}]},{id:"observability",label:"Observability",items:[{view:"traces",label:"Traces",icon:"traces"},{view:"interactions",label:"Interactions",icon:"interactions",badge:"pendingInputCount",badgeTone:"attention",badgeTitle:"requests waiting for an answer"},{view:"tools",label:"Tools",icon:"tools"},{view:"mcp",label:"MCP Services",icon:"mcp"},{view:"metrics",label:"Metrics",icon:"metrics"},{view:"evaluations",label:"Evaluations",icon:"evaluations"},{view:"scenarios",label:"Scenarios",icon:"evaluations"},{view:"sessions",label:"Sessions",icon:"replay",also:["replay"]}]},{id:"workspace",label:"Workspace",items:[{view:"organization",label:"Organization",glyph:"\u{1F3E2}"},{view:"settings",label:"Settings",glyph:"\u2699\uFE0F"}]}];function yY(e={}){return{assistantEnabled:e.assistantEnabled!==!1}}function o0(e,t={}){return hI.every(r=>r.view!==e||!r.enabled||r.enabled(t))}function vY(e,t={}){for(let r of hI){if(r.enabled&&!r.enabled(t))continue;let n=r.match(e);if(n)return{view:r.view,...n}}return{view:CSe}}function QC(e,{agent:t=null,features:r={}}={}){if(!o0(e,r))return null;let n=hI.find(o=>o.view===e&&o.path!==void 0);return n&&(typeof n.path=="function"?n.path({agent:t}):n.path)||""}function xY(e){for(let t of hY){let r=t.items.find(n=>n.also?.includes(e));if(r)return r.view}return e}function gh(e,t){return!SSe.includes(e)||!/^[1-9]\d*$/.test(String(t))?null:e==="recording"?`/replay/${t}`:`/replay/${e}/${t}`}function bY(e={}){return hY.map(t=>({...t,items:t.items.filter(r=>o0(r.view,e))}))}var yI="/api/input_requests",RC="action-agent:input-requests-changed",SY=3e4,wY=100,ASe=["text","choice","confirm","secret"];function kY({agentId:e=null,runId:t=null}={}){let r=new URLSearchParams;e!=null&&r.set("agent_id",String(e)),t!=null&&r.set("run_id",String(t));let n=r.toString();return n?`${yI}?${n}`:yI}function hh(e){return(Array.isArray(e)?e:[]).filter(t=>t&&t.status==="pending")}function _Y(e){let t=hh(e).length;if(t!==0)return t>=wY?`${wY-1}+`:t}function vI(e){let t=e?.status;return t==="pending"||t==="running"?"poll":t==="awaiting_input"?hh(e.input_requests).length>0?"awaiting":"poll":"finished"}function xI(e){return ASe.includes(e?.kind)?e.kind:null}function CY(e){return(Array.isArray(e?.options)?e.options:[]).map(t=>{if(t&&typeof t=="object"){let r=String(t.value??t.label??"");return{value:r,label:String(t.label??r)}}return t==null?null:{value:String(t),label:String(t)}}).filter(t=>t&&t.value!=="")}function AY(e){return e?.id==null?"answer":`answer-${e.id}`}function EY(e){switch(xI(e)){case"text":return[{type:"form",submit:"Answer",fields:[{name:AY(e),label:"Your answer",type:"textarea",required:!0}]}];case"choice":return[{type:"choices",options:CY(e).map(t=>t.label)}];default:return[]}}function NY(e,t){if(t?.kind==="form"){let r=t.values?.[AY(e)];return r==null?void 0:String(r)}if(t?.kind==="choice")return CY(e).find(r=>r.label===t.text)?.value}var ESe={answered:"Already answered",declined:"Already declined",expired:"Expired before it was answered",cancelled:"Cancelled: the run ended"};function NSe(e,t={}){if(e>=200&&e<300)return{state:t?.input_request?.status==="declined"?"declined":"answered"};if(e===409){let r=t?.status||null;return{state:"closed",status:r,message:ESe[r]||"No longer waiting for an answer"}}return e===422?{state:"invalid",message:t?.error||"That answer does not fit this request"}:e===404?{state:"error",message:"This request is no longer available"}:{state:"error",message:t?.error||`Request failed (${e})`}}function bI(e){return["answered","declined","closed"].includes(e?.state)}async function TY(e,{answer:t,decline:r=!1}={},n=globalThis.fetch){let o=`${yI}/${encodeURIComponent(e.id)}/${r?"decline":"answer"}`,a;try{a=await n(o,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(r?{}:{answer:t})})}catch{return{state:"error",message:"Could not reach the server. Try again."}}let i=await a.json().catch(()=>({}));return NSe(a.status,i)}function OY(e,t){return t?.state==="closed"?t.message:t?.state==="declined"?e?.kind==="confirm"?"Declined: the tool does not run":"Declined":t?.state==="answered"?e?.kind==="confirm"?"Approved: the tool runs":"Answered: the run continues":null}function PY(e){return e?e.name?String(e.name):e.id!=null?`${e.type||"user"} #${e.id}`:null:null}function MY(e,t=Date.now()){if(!e)return null;let r=new Date(e).getTime();if(Number.isNaN(r))return null;let n=Math.floor((r-t)/6e4);if(n<0)return"expired";if(n<60)return`expires in ${Math.max(n,1)}m`;let o=Math.floor(n/60);return o<48?`expires in ${o}h`:`expires in ${Math.floor(o/24)}d`}function IY(e,t=Date.now()){return e?`asked ${iv(e,t)}`:null}function DY(e){let t=e?.arguments;return t==null||typeof t=="object"&&Object.keys(t).length===0?null:typeof t=="string"?t:JSON.stringify(t,null,2)}function jY(e){let t=e?.agent?.id,r=e?.run_id;if(t==null||r==null)return null;let n=QC("runner",{agent:{id:t}});return n?`${n}?run=${encodeURIComponent(r)}`:null}function $Y(e=""){let t=new URLSearchParams(e).get("run");return t&&/^\d+$/.test(t)?Number(t):null}function e2(){window.dispatchEvent(new CustomEvent(RC))}function t2({agentId:e=null,refreshKey:t,enabled:r=!0,intervalMs:n=SY}={}){let[o,a]=(0,Du.useState)(null),[i,s]=(0,Du.useState)(null),l=(0,Du.useRef)(0),u=(0,Du.useCallback)(async()=>{let c=++l.current;try{let d=await fetch(kY({agentId:e}));if(!d.ok)throw new Error(`Request failed (${d.status})`);let p=await d.json();if(c!==l.current)return;a(Array.isArray(p.input_requests)?p.input_requests:[]),s(null)}catch(d){if(c!==l.current)return;s(d.message)}},[e]);return(0,Du.useEffect)(()=>{if(!r)return;u();let c=setInterval(u,n);return window.addEventListener(RC,u),()=>{clearInterval(c),window.removeEventListener(RC,u),l.current+=1}},[r,u,n,t]),{requests:o,error:i,refresh:u}}var TSe={text:"question",choice:"choice",confirm:"approval",secret:"secret"},OSe={answered:"success",declined:"muted",closed:"warning"},wI={fontFamily:U,fontSize:11,color:"var(--color-text-muted)"},PSe={flex:1,minWidth:0,padding:"7px 10px",borderRadius:8,border:"1px solid var(--color-border-strong)",background:"var(--color-surface)",color:"var(--color-text-primary)",fontFamily:U,fontSize:13};function MSe({request:e,busy:t,onSubmit:r}){let[n,o]=(0,vr.useState)("");return vr.default.createElement("form",{onSubmit:i=>{if(i.preventDefault(),!n||t)return;let s=n;o(""),r(s)},style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"}},vr.default.createElement("input",{type:"password",autoComplete:"off",spellCheck:!1,"data-aa-secret":"","data-testid":"input-request-secret","aria-label":e.prompt,value:n,onChange:i=>o(i.target.value),disabled:t,style:PSe}),vr.default.createElement(de,{type:"submit",variant:"primary",size:"sm",disabled:t||!n,testId:"input-request-secret-submit"},t?"Sending\u2026":"Send"))}function ISe({request:e,busy:t,onApprove:r,onDecline:n}){let o=DY(e);return vr.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:8}},o&&vr.default.createElement("pre",{"data-testid":"input-request-arguments",style:{margin:0,padding:"8px 10px",borderRadius:8,maxHeight:200,overflow:"auto",whiteSpace:"pre-wrap",background:"var(--color-muted)",color:"var(--color-text-cell)",fontFamily:U,fontSize:12}},o),vr.default.createElement("div",{style:{display:"flex",gap:8,flexWrap:"wrap"}},vr.default.createElement(de,{variant:"primary",size:"sm",onClick:r,disabled:t,testId:"input-request-approve"},"Approve"),vr.default.createElement(de,{variant:"secondary",size:"sm",onClick:n,disabled:t,testId:"input-request-decline"},"Decline")))}function Jp({request:e,onSettled:t,initialOutcome:r=null,showRunLink:n=!0}){let{darkMode:o}=ut(),[a,i]=(0,vr.useState)(!1),[s,l]=(0,vr.useState)(r),u=xI(e),c=bI(s),d=async g=>{if(a||c)return;i(!0);let v=await TY(e,g);i(!1),l(v),bI(v)&&(e2(),t&&t(e,v))},p=g=>{g!==void 0&&d({answer:g})},f=()=>d({decline:!0}),m=n?jY(e):null,y=PY(e.actor),b=MY(e.expires_at),h=IY(e.created_at);return vr.default.createElement("div",{"data-testid":"input-request-card","data-kind":e.kind,"data-state":s?.state||"pending",style:{border:"1px solid var(--color-border)",borderRadius:10,background:"var(--color-card)",padding:"12px 14px",display:"flex",flexDirection:"column",gap:8}},vr.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"}},vr.default.createElement(ke,{tone:e.kind==="confirm"?"warning":"info",size:10},TSe[e.kind]||e.kind),vr.default.createElement("span",{style:{fontSize:13,fontWeight:600,color:"var(--color-text-primary)"}},e.agent?.name||"An agent"," is asking"),m&&vr.default.createElement(Vr,{href:et(m),onClick:()=>lt(m),title:"Open the run this request paused"},vr.default.createElement("span",{"data-testid":"input-request-run-link"},"run #",e.run_id)),b&&vr.default.createElement("span",{style:{...wI,marginLeft:"auto",color:b==="expired"?"var(--color-error-text)":wI.color}},b)),vr.default.createElement("div",{style:{fontSize:14,color:"var(--color-text-primary)",whiteSpace:"pre-wrap",overflowWrap:"anywhere"}},e.prompt),vr.default.createElement("div",{style:{...wI,display:"flex",gap:10,flexWrap:"wrap"}},y&&vr.default.createElement("span",{"data-testid":"input-request-actor"},"for ",y),e.tool_name&&vr.default.createElement("span",{"data-testid":"input-request-tool"},"via ",e.tool_name),h&&vr.default.createElement("span",null,h)),c?vr.default.createElement("div",{"data-testid":"input-request-outcome"},vr.default.createElement(ke,{tone:OSe[s.state]||"muted"},OY(e,s))):vr.default.createElement(vr.default.Fragment,null,(u==="text"||u==="choice")&&vr.default.createElement(_l,{blocks:EY(e),darkMode:o,onAction:g=>p(NY(e,g))}),u==="confirm"&&vr.default.createElement(ISe,{request:e,busy:a,onApprove:()=>p(!0),onDecline:f}),u==="secret"&&vr.default.createElement(MSe,{request:e,busy:a,onSubmit:p}),u!=="confirm"&&vr.default.createElement("div",null,vr.default.createElement(de,{variant:"ghost",size:"sm",onClick:f,disabled:a,testId:"input-request-decline",style:{padding:"2px 0"}},"Decline")),s?.message&&vr.default.createElement("div",{"data-testid":"input-request-error",role:"alert",style:{fontSize:12,color:"var(--color-error-text)"}},s.message)))}function DSe({pending:e,settled:t=[],onSettled:r}){return e.length===0&&t.length===0?null:Hs.default.createElement("section",{"data-testid":"needs-input-lane","aria-label":"Needs input",style:{border:"1px solid var(--color-warning)",borderRadius:12,background:"var(--color-warning-soft)",padding:14,display:"flex",flexDirection:"column",gap:10}},Hs.default.createElement("div",{style:{display:"flex",alignItems:"baseline",gap:10,flexWrap:"wrap"}},Hs.default.createElement(We,{color:"var(--color-warning-text)"},"Needs input"),Hs.default.createElement("span",{"data-testid":"needs-input-count",style:{fontFamily:U,fontSize:11,color:"var(--color-warning-text)"}},e.length," waiting"),Hs.default.createElement("span",{style:{fontSize:12,color:"var(--color-text-secondary)"}},"Each run is paused until its request is answered. Answering continues the same run.")),e.map(n=>Hs.default.createElement(Jp,{key:n.id,request:n,onSettled:r})),t.map(({request:n,outcome:o})=>Hs.default.createElement(Jp,{key:n.id,request:n,initialOutcome:o})))}function SI({agentId:e=null}){let{requests:t}=t2({agentId:e}),[r,n]=(0,Hs.useState)([]),o=new Set(r.map(({request:s})=>s.id)),a=hh(t).filter(s=>!o.has(s.id));return Hs.default.createElement(DSe,{pending:a,settled:r,onSettled:(s,l)=>{n(u=>[...u.filter(c=>c.request.id!==s.id),{request:s,outcome:l}])}})}var gr=Z(J());function LY(e=[],t=""){let r=t.trim().toLowerCase();return e.filter(n=>n.status!=="archived"&&n.status!=="observed").filter(n=>!r||`${n.name||""} ${n.description||""}`.toLowerCase().includes(r)).sort((n,o)=>{let a=i=>i.status==="active"?0:1;return a(n)-a(o)||String(n.name||"").localeCompare(String(o.name||""))})}var zY=e=>`/agents/${e.id}/run?new=1`;function a0({inline:e=!1,label:t="New interaction"}){let[r,n]=(0,gr.useState)(e),[o,a]=(0,gr.useState)(null),[i,s]=(0,gr.useState)(null),[l,u]=(0,gr.useState)(""),c=(0,gr.useRef)(null);(0,gr.useEffect)(()=>{!r||o||fetch("/api/agents").then(f=>{if(!f.ok)throw new Error(`HTTP ${f.status}`);return f.json()}).then(f=>a(f.agents||[])).catch(f=>s(f.message))},[r,o]),(0,gr.useEffect)(()=>{if(e||!r)return;let f=m=>{c.current&&!c.current.contains(m.target)&&n(!1)};return document.addEventListener("mousedown",f),()=>document.removeEventListener("mousedown",f)},[e,r]);let d=(0,gr.useMemo)(()=>LY(o||[],l),[o,l]),p=gr.default.createElement("div",{"data-testid":"new-interaction-agents"},(o?.length||0)>6&&gr.default.createElement("input",{type:"search",value:l,onChange:f=>u(f.target.value),placeholder:"Find an agent","aria-label":"Find an agent",autoFocus:!e,className:"w-full mb-2 px-3 py-1.5 text-sm rounded-lg",style:{background:"var(--color-muted)",border:"1px solid var(--color-border)",color:"var(--color-text-primary)"}}),i&&gr.default.createElement("p",{className:"text-sm",style:{color:"var(--color-error)"}},"Could not load agents: ",i),!o&&!i&&gr.default.createElement("p",{className:"text-sm",style:{color:"var(--color-text-muted)"}},"Loading agents\u2026"),o&&d.length===0&&gr.default.createElement(Jr,null,o.length===0?"No agents in this workspace yet.":"No agent matches."," ",gr.default.createElement("a",{href:"#",onClick:f=>{f.preventDefault(),lt("/agents/new")},style:{color:"var(--color-info)"}},"Create an agent")),gr.default.createElement("ul",{className:"space-y-1 max-h-80 overflow-y-auto"},d.map(f=>gr.default.createElement("li",{key:f.id},gr.default.createElement("button",{type:"button","data-testid":`new-interaction-agent-${f.id}`,onClick:()=>lt(zY(f)),className:"w-full text-left px-3 py-2 rounded-lg block",style:{border:"1px solid var(--color-border)",background:"var(--color-card)",cursor:"pointer"}},gr.default.createElement("span",{className:"flex items-center justify-between gap-2"},gr.default.createElement("span",{className:"text-sm font-medium truncate min-w-0",style:{color:"var(--color-text-primary)"}},f.name),f.status&&f.status!=="active"&&gr.default.createElement(ke,{tone:"muted"},f.status)),gr.default.createElement("span",{className:"block truncate",style:{fontFamily:U,fontSize:11,color:"var(--color-text-muted)"}},f.provider,"/",f.model),f.description&&gr.default.createElement("span",{className:"block text-xs truncate",style:{color:"var(--color-text-secondary)"}},f.description))))));return e?gr.default.createElement($e,{testId:"new-interaction-card"},gr.default.createElement("div",{className:"flex items-baseline justify-between mb-3 gap-3"},gr.default.createElement("div",null,gr.default.createElement(We,null,"Your agents"),gr.default.createElement("p",{className:"text-sm mt-1",style:{color:"var(--color-text-secondary)"}},"Start a new interaction. It runs with the instructions, tools and MCP servers saved on the agent."))),p):gr.default.createElement("div",{ref:c,className:"relative"},gr.default.createElement(de,{variant:"primary",size:"sm",testId:"new-interaction",onClick:()=>n(f=>!f)},t),r&&gr.default.createElement("div",{className:"absolute right-0 mt-2 z-20 p-3 rounded-xl",style:{width:360,background:"var(--color-card)",border:"1px solid var(--color-border)",boxShadow:"0 8px 24px rgba(0,0,0,0.12)"}},gr.default.createElement(We,{style:{display:"block",marginBottom:8}},"Start a conversation with"),p))}var Xe=Z(J());var n2=(e,t)=>e!=null&&e>=400&&e<500||t>=5;var qs=(e,t)=>`${e} ${t}${e===1?"":"s"}`,i0=(e,t)=>{let r=String(e??"");return r.length>t?`${r.slice(0,t-1)}\u2026`:r},o2=e=>String(e||"").replace(/_/g," ").replace(/^\w/,t=>t.toUpperCase()),BY=e=>String(e??"").replace(/\s+/g," ").trim(),Qp=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),yh=e=>{try{return JSON.stringify(e)??String(e)}catch{return String(e)}},a2=e=>{if(e==null||e===""||Number.isNaN(Number(e)))return null;let t=Number(e);return t===0?"$0.00":Math.abs(t)<.01?`$${t.toFixed(4)}`:`$${t.toFixed(2)}`},kI=e=>{if(e==null||e===""||Number.isNaN(Number(e)))return null;let t=Math.max(0,Number(e));if(t<1e3)return`${Math.round(t)}ms`;if(t<6e4)return`${(t/1e3).toFixed(1).replace(/\.0$/,"")}s`;let r=Math.round(t/1e3);return r<3600?`${Math.floor(r/60)}m ${r%60}s`:`${Math.floor(r/3600)}h ${Math.floor(r%3600/60)}m`},WY=(e,{num_turns:t,total_cost_usd:r,duration_ms:n}={})=>[e,t==null||t===""?null:qs(Number(t),"turn"),a2(r),kI(n)].filter(Boolean).join(" \xB7 "),HY=(e,t=Date.now())=>{if(!e)return null;let r=new Date(e).getTime();if(Number.isNaN(r))return null;let n=Math.ceil((r-t)/6e4);return n<=0?"past its expiry":n<60?`expires in ${n}m`:`expires in ${Math.floor(n/60)}h${n%60?` ${n%60}m`:""}`},at=(e,t)=>{let r=i=>Array.isArray(i)?i.filter(Boolean).join(", "):typeof i=="string"?i:"",n=Qp(e)?e:{},o=r(n.error)||r(n.errors),a=typeof n.message=="string"?n.message:"";return o&&a?`${o}: ${a}`:o||a||t},jSe={pending:{label:"Queued",tone:"progress"},provisioning:{label:"Booting",tone:"progress"},ready:{label:"Ready",tone:"success"},running:{label:"Running",tone:"success"},completed:{label:"Completed",tone:"neutral"},expired:{label:"Stopped",tone:"neutral"},failed:{label:"Failed",tone:"error"}},qY=e=>jSe[e]||{label:o2(e)||"Unknown",tone:"neutral"},i2=e=>["pending","provisioning"].includes(e?.status),KY=e=>e?.status==="ready",$Se={queued:{label:"Queued",tone:"progress"},running:{label:"Running",tone:"progress"},succeeded:{label:"Succeeded",tone:"success"},failed:{label:"Failed",tone:"error"},cancelled:{label:"Cancelled",tone:"neutral"}},gs=e=>$Se[e]||{label:o2(e)||"Unknown",tone:"neutral"},Ks=e=>["queued","running"].includes(e?.status),c0=e=>["succeeded","failed","cancelled"].includes(e?.status),_I=e=>c0(e)&&e?.diff_pending===!0,CI=e=>c0(e)&&!_I(e),VY=e=>e?.status==="cancelled"&&CI(e)&&e?.diff==null&&!(Number(e?.event_count)>0),AI=e=>{if(!c0(e)){let t=Number(e?.event_count)||0;return t>0?qs(t,"event"):""}return WY(null,e)},GY=e=>[gs(e?.status).label,AI(e)].filter(Boolean).join(" \xB7 "),YY=(e,t=80)=>{let r=String(e||"").split(` +\u2026`:"")):null,M&&ze.default.createElement("div",null,ze.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:g.textMuted}},"Requested tool calls"),ze.default.createElement("pre",{style:le},M)),K&&ze.default.createElement("div",null,ze.default.createElement("div",{className:"text-xs uppercase tracking-wide mb-1",style:{color:g.textMuted}},"Tool definition"),ze.default.createElement(sI,{tool:K,darkMode:t}))))}))}var nr=Z(J());var ln=Z(J());var Rn=e=>({cardBg:e?"#1f1f1f":"#ffffff",cardBorder:e?"#2a2a2a":"#e5e7eb",innerBg:e?"rgba(255,255,255,0.04)":"#f9fafb",panelBg:e?"rgba(0,0,0,0.35)":"#f9fafb",preBg:e?"rgba(255,255,255,0.06)":"#eef0f3",trackBg:e?"rgba(255,255,255,0.08)":"#f3f4f6",hoverBg:e?"rgba(255,255,255,0.04)":"#f9fafb",controlBg:e?"rgba(255,255,255,0.06)":"#f3f4f6",controlActiveBg:e?"#2a2a2a":"#ffffff",textPrimary:e?"#ffffff":"#111827",textSecondary:e?"rgba(255,255,255,0.6)":"#6b7280",textMuted:e?"rgba(255,255,255,0.4)":"#9ca3af",textBody:e?"rgba(255,255,255,0.75)":"#4b5563",link:"#3b82f6",good:e?"#4ade80":"#16a34a",bad:"#ef4444"}),iY=(e,t=200)=>{let r=String(e??"").replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t)}\u2026`:r};function Xp({open:e,darkMode:t,size:r=14,style:n}){return ln.default.createElement("svg",{className:`flex-shrink-0 transition-transform ${e?"rotate-180":""}`,width:r,height:r,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",style:{color:Rn(t).textMuted,...n},"aria-hidden":"true"},ln.default.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"}))}function YC({darkMode:e,id:t,children:r,style:n,className:o=""}){let a=Rn(e);return ln.default.createElement("div",{id:t,className:`rounded-xl border overflow-hidden transition-colors ${o}`,style:{backgroundColor:a.cardBg,borderColor:a.cardBorder,...n}},r)}var Ta={context:132,duration:76,tokens:104,cost:88,status:68,count:96,age:76};function id({cells:e,darkMode:t,gap:r=16,className:n="",style:o}){let a=Rn(t),i=(e||[]).filter(Boolean);return i.length===0?null:ln.default.createElement("div",{className:`flex-shrink-0 text-sm ${n}`,style:{display:"grid",gridTemplateColumns:i.map(s=>s.width?`${s.width}px`:"minmax(0, auto)").join(" "),alignItems:"center",columnGap:`${r}px`,color:a.textSecondary,...o}},i.map(s=>{let l=s.content!=null&&s.content!==!1&&s.content!=="";return ln.default.createElement("div",{key:s.key,title:(l?s.title:s.empty)||void 0,className:"min-w-0 truncate",style:{textAlign:s.align||"right"}},l?s.content:ln.default.createElement("span",{style:{color:a.textMuted}},"\u2014"))}))}var sY=(e,{wrap:t=!0,maxHeight:r=320}={})=>({background:Rn(e).preBg,borderRadius:"6px",padding:"6px 8px",margin:"2px 0 4px 0",overflowX:"auto",overflowY:"auto",maxHeight:`${r}px`,whiteSpace:t?"pre-wrap":"pre"}),Jwe=e=>{if(e==null)return{text:"",json:!1};if(typeof e=="object")return{text:JSON.stringify(e,null,2),json:!0};let t=String(e);if(!/^[[{]/.test(t.trim()))return{text:t,json:!1};try{return{text:JSON.stringify(JSON.parse(t),null,2),json:!0}}catch{return{text:t,json:!1}}};function fh({lines:e,darkMode:t,onClick:r,indent:n=0,size:o="12px",style:a,max:i=200,hold:s=!1}){let[l,u]=mh(),c=Rn(t),d=(e||[]).filter(p=>p&&(p.text||s));return d.some(p=>p.text)?ln.default.createElement("div",{onClick:r,className:"min-w-0",style:{display:"grid",gap:"2px",paddingLeft:n?`${n}px`:0,fontFamily:Mt.mono,fontSize:o,color:c.textSecondary,cursor:r?"pointer":"default",...a}},d.map((p,f)=>{let m=`${p.label}-${f}`,y=l(m),b=p.max||i,h=!p.text,g=String(p.text??"").replace(/\s+/g," ").trim(),v=Jwe(p.text),x=!h&&(v.json||g.length>60||g!==String(p.text).trim());return ln.default.createElement("div",{key:m},ln.default.createElement("div",{onClick:x?S=>{S.stopPropagation(),u(m)}:void 0,title:x?y?"Collapse":"Expand":void 0,style:{cursor:x?"pointer":"default",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0}},ln.default.createElement("span",{style:{color:p.color||c.textMuted}},x?y?"\u25BE":"\u25B8":"\xA0"," ",p.label,":")," ",!y&&(h?ln.default.createElement("span",{style:{color:c.textMuted}},"\u2014"):iY(g,b))),y&&ln.default.createElement("pre",{onClick:S=>S.stopPropagation(),style:sY(t,{wrap:!v.json})},v.text))})):null}function t0({options:e,value:t,onChange:r,darkMode:n,label:o,style:a}){let i=Rn(n);return ln.default.createElement("div",{className:"flex items-center gap-1 flex-shrink-0",style:a},o&&ln.default.createElement("span",{className:"text-xs mr-1",style:{color:i.textMuted}},o),e.map(s=>ln.default.createElement("button",{key:s.id,type:"button",onClick:l=>{l.stopPropagation(),r(s.id)},title:s.hint,className:"px-2 py-0.5 text-xs rounded transition-colors",style:t===s.id?{background:i.controlActiveBg,color:i.textPrimary,boxShadow:n?"none":"0 1px 2px rgba(0,0,0,0.08)"}:{color:i.textSecondary}},s.label)))}function lY({label:e,body:t,open:r,onToggle:n,darkMode:o,prose:a=!1,max:i=140}){let s=Rn(o);return ln.default.createElement("div",null,ln.default.createElement("div",{onClick:l=>{l.stopPropagation(),n()},title:r?"Collapse":"Expand",style:{cursor:"pointer",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},ln.default.createElement("span",{style:{color:s.textMuted}},r?"\u25BE":"\u25B8"," ",e,":")," ",!r&&ln.default.createElement("span",{style:{color:s.textMuted}},iY(t,i))),r&&ln.default.createElement("pre",{onClick:l=>l.stopPropagation(),style:sY(o,{wrap:a})},t))}function mh(e={}){let[t,r]=(0,ln.useState)(e),n=(0,ln.useCallback)(a=>{r(i=>({...i,[a]:!i[a]}))},[]);return[(0,ln.useCallback)(a=>!!t[a],[t]),n,r]}var cI={root:"#9ca3af",prompt:"#60a5fa",generate:"#a855f7",llm:"#ef4444",thinking:"#fbbf24",tool:"#22c55e",response:"#2dd4bf",embedding:"#818cf8"},cY=[{id:"time",label:"Time",hint:"Chronological \u2014 reads as a waterfall"},{id:"duration",label:"Slowest",hint:"Longest-running first"},{id:"name",label:"Name",hint:"Group repeated tool calls together"}],eo=e=>e==null?"\u2014":e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(2)}s`,dI=e=>{switch(e){case"root":return Bo.spans.root;case"prompt":return Bo.spans.prompt;case"generate":return Bo.spans.generate;case"llm":return Bo.spans.llm;case"thinking":return Bo.spans.thinking;case"tool":return Bo.spans.tool;case"response":return Bo.spans.response;default:return"-"}},Qwe=(e,t)=>{let r=Math.max(e||0,1),n=Math.max(t||1,1);if(n<=1)return 100;let o=Math.log(r)/Math.log(n);return Math.min(100,Math.max(4,o*100))},Rwe=(e,t)=>{let r=[...e||[]];switch(t){case"duration":return r.sort((n,o)=>(o.duration||0)-(n.duration||0));case"name":return r.sort((n,o)=>(n.name||"").localeCompare(o.name||""));default:return r.sort((n,o)=>(n.start||0)-(o.start||0))}},eSe=e=>{let t=e.tokens||{};return(t.input||0)+(t.output||0)+(t.thinking||0)},tSe=(e,t)=>{if(!t.duration_ms)return eo(e.duration);let r=(e.duration||0)/t.duration_ms*100;return`${eo(e.duration)} \xB7 ${r<1?r.toFixed(2):r.toFixed(1)}%`},rSe=e=>{if(typeof e!="string")return null;try{return JSON.stringify(JSON.parse(e),null,2)}catch{return null}},uY=e=>e.endsWith(".instructions")?0:e.endsWith(".tools")?1:e.endsWith(".messages")?3:2,pI=e=>{let t=e.spans||[],r=a=>{for(let i of t){let s=(i.attributes||{})[a];if(s)return s}return null},n=r("llm.prompt");if(!n){let a=r("prompt.input.messages");if(a)try{n=[...JSON.parse(a)].reverse().find(l=>l&&l.role==="user"&&l.content)?.content}catch{}}let o=r("llm.completion")||r("llm.output.message");return{input:n,output:o}},nSe=e=>{let t=e.attributes||{},r=null,n="input",o="user";if(t["prompt.input.messages"])try{let u=[...JSON.parse(t["prompt.input.messages"])].reverse().find(c=>c&&c.role==="user"&&c.content);typeof u?.content=="string"&&(r=u.content)}catch{}if(!r&&t["llm.prompt"]&&(r=String(t["llm.prompt"])),!r&&(t["tool.input.args"]||t["tool.arguments"])){let l=t["tool.input.args"]||t["tool.arguments"];r=typeof l=="string"?l:JSON.stringify(l),n="in",o="assistant"}let a=null,i="output",s="assistant";return t["llm.output.message"]||t["llm.completion"]?a=t["llm.output.message"]||t["llm.completion"]:(t["tool.output.result"]||t["tool.result"])&&(a=t["tool.output.result"]||t["tool.result"],i="out",s="tool"),a!=null&&typeof a!="string"&&(a=JSON.stringify(a)),{input:r,output:a,inputLabel:n,inputTone:o,outputLabel:i,outputTone:s}},oSe=(e,t)=>{let r=nSe(e),n=pI(t);return r.input&&r.input===n.input&&(r.input=null),r.output&&r.output===n.output&&(r.output=null),r},aSe=e=>{let t={...e.attributes||{}},r=p=>{let f=t[p];return delete t[p],f},n=[],o=p=>n.push({id:`${e.span_id}-m${n.length}`,...p}),a=r("prompt.input.instructions")||r("llm.instructions");a&&o({role:"system",content:String(a)});let i=r("prompt.input.messages");if(i)try{JSON.parse(i).forEach(p=>{p&&o({role:p.role||"user",content:typeof p.content=="string"?p.content:JSON.stringify(p.content),tool_call_id:p.tool_call_id,tool_calls:p.tool_calls})})}catch{t["prompt.input.messages"]=i}let s=r("llm.prompt");s&&o({role:"user",content:String(s)});let l=r("tool.input.args")||r("tool.arguments"),u=r("tool.output.result")||r("tool.result");if(l||u){let p=r("tool.name");o({role:"tool",tool_name:p||(e.name||"").replace(/^tool\./,""),tool_arguments:l,content:u?String(u):null})}let c=r("llm.completion"),d=r("llm.output.message");return(c||d)&&o({role:"assistant",content:String(c||d)}),{messages:n,rest:t}},fI=e=>{for(let t of e?.spans||[]){let r=(t.attributes||{})["prompt.input.tools"];if(r)try{let n=typeof r=="string"?JSON.parse(r):r;if(Array.isArray(n)&&n.length>0)return n}catch{}}return[]};function iSe({span:e,darkMode:t,tools:r=[]}){let[n,o]=mh(),a=Rn(t),{messages:i,rest:s}=aSe(e),l=null,u=s["prompt.input.tools"];if(u)try{let f=typeof u=="string"?JSON.parse(u):u;Array.isArray(f)&&f.length>0&&(l=f,delete s["prompt.input.tools"])}catch{}let c=Object.entries(s).sort((f,m)=>uY(f[0])-uY(m[0])),d=i.length===1&&i[0].role==="tool"?i[0]:null,p=d?.tool_arguments==null?null:typeof d.tool_arguments=="string"?d.tool_arguments:JSON.stringify(d.tool_arguments);return nr.default.createElement("div",{onClick:f=>f.stopPropagation(),style:{margin:"4px 0 8px 0",padding:"10px 12px",borderRadius:"8px",background:a.panelBg,border:`1px solid ${a.cardBorder}`,fontFamily:Mt.mono,fontSize:"12px",color:a.textBody,cursor:"default"}},nr.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"4px 20px"}},nr.default.createElement("span",null,"duration: ",eo(e.duration)),nr.default.createElement("span",null,"status: ",e.status||"OK"),eSe(e)>0&&nr.default.createElement("span",null,"tokens in:",e.tokens.input||0," out:",e.tokens.output||0,e.tokens.thinking>0?` thinking:${e.tokens.thinking}`:""),nr.default.createElement("span",{style:{color:a.textMuted}},"span: ",e.span_id)),d&&nr.default.createElement("div",{style:{marginTop:"8px",display:"grid",gap:"4px"}},nr.default.createElement("div",{style:{fontSize:"12px",wordBreak:"break-all"}},nr.default.createElement("span",{style:{color:Fn("tool",t).color}},"\u2699 ",d.tool_name),p&&nr.default.createElement(nr.default.Fragment,null," ",nr.default.createElement("span",{style:{color:Fn("assistant",t).color}},"in:")," ",nr.default.createElement("span",{style:{color:a.textBody}},p))),d.content&&nr.default.createElement("div",{style:{fontSize:"12px"}},nr.default.createElement("span",{style:{color:Fn("tool",t).color}},"out:")," ",nr.default.createElement("span",{style:{color:a.textBody,whiteSpace:"pre-wrap",display:"inline-block",maxHeight:"240px",overflowY:"auto",verticalAlign:"top",maxWidth:"100%"}},d.content))),i.length>0&&!d&&nr.default.createElement("div",{style:{marginTop:"10px",fontFamily:"ui-sans-serif, system-ui, sans-serif"}},nr.default.createElement(ms,{messages:i,darkMode:t,tools:l||r})),l&&nr.default.createElement(lI,{tools:l,darkMode:t}),c.length>0&&nr.default.createElement("div",{style:{marginTop:"6px",display:"grid",gap:"2px"}},c.map(([f,m])=>{let y=f.match(/args|result|input|output/)?rSe(m):null,b=!y&&(f.endsWith(".instructions")||f.match(/input|output|result/))&&typeof m=="string"?m:null,h=y||b;if(!h)return nr.default.createElement("div",{key:f,style:{wordBreak:"break-all"}},nr.default.createElement("span",{style:{color:a.textMuted}},f,":")," ",typeof m=="string"?m:JSON.stringify(m));let g=`${e.span_id}:${f}`;return nr.default.createElement(lY,{key:f,label:f,body:h,prose:!y,darkMode:t,open:n(g),onToggle:()=>o(g)})})))}function sSe({span:e,trace:t,darkMode:r,sort:n,longest:o,expanded:a,onToggle:i,tools:s}){let l=Rn(r),u=Object.keys(e.attributes||{}).length>0,c=a?null:oSe(e,t);return nr.default.createElement(nr.default.Fragment,null,nr.default.createElement("div",{className:`py-0.5 px-1 -mx-1 rounded transition-colors ${u?`cursor-pointer ${r?"hover:bg-white/5":"hover:bg-gray-100"}`:""}`,style:{paddingLeft:n==="time"?`${(e.nested||0)*16}px`:0,background:a?l.hoverBg:void 0},onClick:u?()=>i():void 0,title:u?`${e.name} \u2014 click for span details`:e.name},nr.default.createElement("div",{className:"flex items-baseline gap-2 min-w-0"},nr.default.createElement("span",{className:"flex-shrink-0",style:{color:e.type==="thinking"?void 0:l.textMuted}},dI(e.type)),nr.default.createElement("span",{className:"text-sm font-medium truncate",style:{color:e.error?l.bad:l.textPrimary}},e.name),nr.default.createElement("span",{className:"text-xs ml-auto flex-shrink-0",style:{fontFamily:Mt.mono,color:l.textMuted}},tSe(e,t)),u&&nr.default.createElement(Xp,{open:a,darkMode:r,size:13,style:{marginLeft:"2px"}})),nr.default.createElement("div",{className:"h-3 relative rounded mt-0.5",style:{background:l.trackBg}},nr.default.createElement("div",{className:"absolute h-3 rounded",style:{background:e.error?"#f87171":cI[e.type]||"#9ca3af",left:n==="time"?`${t.duration_ms?e.start/t.duration_ms*100:0}%`:0,width:n==="time"?`${t.duration_ms?Math.max(e.duration/t.duration_ms*100,1):1}%`:`${Qwe(e.duration,o)}%`}})),c&&nr.default.createElement(fh,{darkMode:r,size:"11px",style:{marginTop:"2px"},lines:[{label:c.inputLabel,text:c.input,color:Fn(c.inputTone,r).color,max:160},{label:c.outputLabel,text:c.output,color:Fn(c.outputTone,r).color,max:160}]})),a&&nr.default.createElement(iSe,{span:e,darkMode:r,tools:s}))}function mI({trace:e,darkMode:t,sort:r="time",tools:n,keyPrefix:o=""}){let[a,i]=mh(),s=Rn(t),l=Rwe(e?.spans,r),u=n||fI(e);if(l.length===0)return nr.default.createElement("div",{className:"text-sm py-2",style:{color:s.textMuted}},"No spans recorded for this trace.");let c=Math.max(...l.map(d=>d.duration||0),1);return nr.default.createElement("div",{className:"space-y-2"},l.map((d,p)=>{let f=`${o}${d.span_id||p}`;return nr.default.createElement(sSe,{key:f,span:d,trace:e,darkMode:t,sort:r,longest:c,tools:u,expanded:a(f),onToggle:()=>i(f)})}))}var lSe=[{id:"spans",label:"Spans",hint:"Timing waterfall with span details"},{id:"conversation",label:"Conversation",hint:"The run as a message stream \u2014 prompt, tool calls, response"}],uSe=e=>{let t=0,r=[];(e?.spans||[]).forEach(a=>{(a.nested||0)!==0&&(a.type==="tool"?r.push(a):(a.type==="llm"||a.type==="generate")&&(t=Math.max(t,a.duration||0)))});let n=r.reduce((a,i)=>a+(i.duration||0),0);t=Math.max(t-n,0);let o=e?.duration_ms||t+n||1;return{generation:t,tools:r,toolTotal:n,total:o,overhead:Math.max(o-t-n,0)}};function cSe({trace:e,darkMode:t}){let r=Rn(t),{generation:n,tools:o,toolTotal:a,total:i,overhead:s}=uSe(e);if(n===0&&a===0||n/i>=.99&&a/i<.01)return null;let l=c=>`${(c/i*100).toFixed(c/i<.01?2:1)}%`,u=(c,d)=>bt.default.createElement("div",{style:{width:`${Math.max(c/i*100,.4)}%`,background:d,height:"100%"}});return bt.default.createElement("div",{style:{marginTop:"14px",paddingTop:"12px",borderTop:`1px solid ${r.cardBorder}`}},bt.default.createElement("div",{style:{fontSize:"11px",textTransform:"uppercase",letterSpacing:"0.05em",color:r.textSecondary,marginBottom:"6px"}},"Time breakdown \u2014 generation vs tools"),bt.default.createElement("div",{style:{display:"flex",height:"10px",borderRadius:"5px",overflow:"hidden",background:r.trackBg}},u(n,"#ef4444"),u(a,"#10b981"),s>0&&u(s,t?"rgba(255,255,255,0.2)":"#d1d5db")),bt.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"4px 18px",marginTop:"8px",fontSize:"12px",fontFamily:Mt.mono,color:r.textBody}},bt.default.createElement("span",null,bt.default.createElement("span",{style:{color:"#ef4444"}},"\u25A0")," generation ",eo(n)," (",l(n),")"),bt.default.createElement("span",null,bt.default.createElement("span",{style:{color:"#10b981"}},"\u25A0")," tools ",eo(a)," (",l(a),")"),s>0&&bt.default.createElement("span",null,bt.default.createElement("span",{style:{color:r.textSecondary}},"\u25A0")," overhead ",eo(s)," (",l(s),")")),o.length>0&&bt.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"4px 18px",marginTop:"4px",fontSize:"12px",fontFamily:Mt.mono,color:r.textSecondary}},o.map((c,d)=>bt.default.createElement("span",{key:d},c.name," ",eo(c.duration)," (",l(c.duration||0),")"))))}function dSe({trace:e,darkMode:t}){let[r,n]=(0,bt.useState)(null),[o,a]=(0,bt.useState)(!1),i=Rn(t);if((0,bt.useEffect)(()=>{if(e?.id==null)return;let l=!0;return n(null),a(!1),fetch(`/api/interactions/trace-${e.id}`).then(u=>u.ok?u.json():Promise.reject(new Error("request failed"))).then(u=>l&&n(u.interaction)).catch(()=>l&&a(!0)),()=>{l=!1}},[e?.id]),o)return bt.default.createElement("div",{className:"text-sm py-4",style:{color:i.bad}},"Couldn't load the conversation for this trace.");if(!r)return bt.default.createElement("div",{className:"text-sm py-4",style:{color:i.textMuted}},"Loading conversation\u2026");let s=r.instructions?[{id:`trace-${e.id}-system`,role:"system",content:r.instructions,created_at:r.created_at},...r.messages||[]]:r.messages||[];return s.length===0?bt.default.createElement("div",{className:"text-sm py-4",style:{color:i.textMuted}},"This trace predates content capture \u2014 no conversation to show."):bt.default.createElement(ms,{messages:s,darkMode:t,tools:fI(e)})}function r0({trace:e,darkMode:t,compact:r=!1,showConversation:n=!0}){let[o,a]=(0,bt.useState)("spans"),[i,s]=(0,bt.useState)("time"),l=Rn(t),u=(e?.spans||[]).length,c=WC(e),d=e?.tokens||{},p=(0,bt.useCallback)(f=>a(n?f:"spans"),[n]);return e?bt.default.createElement("div",null,bt.default.createElement("div",{className:"flex items-center justify-between flex-wrap gap-y-2 mb-2"},bt.default.createElement("div",{className:"flex items-center gap-1"},n&&bt.default.createElement(t0,{options:lSe,value:o,onChange:p,darkMode:t}),bt.default.createElement("span",{className:"text-xs ml-2",style:{color:l.textSecondary}},u," ",u===1?"span":"spans")),o==="spans"&&u>0&&bt.default.createElement(t0,{options:cY,value:i,onChange:s,darkMode:t,label:"Sort"})),o==="conversation"?bt.default.createElement("div",{className:"rounded-lg border p-4",style:{background:l.cardBg,borderColor:l.cardBorder}},bt.default.createElement(dSe,{trace:e,darkMode:t})):bt.default.createElement(bt.default.Fragment,null,i==="time"?bt.default.createElement("div",{className:"flex justify-between text-xs mb-2",style:{color:l.textMuted}},bt.default.createElement("span",null,"0ms"),bt.default.createElement("span",null,Math.round((e.duration_ms||0)*.33),"ms"),bt.default.createElement("span",null,Math.round((e.duration_ms||0)*.66),"ms"),bt.default.createElement("span",null,eo(e.duration_ms))):bt.default.createElement("div",{className:"text-xs mb-2",style:{color:l.textMuted}},"Bar length compares duration on a log scale"),bt.default.createElement(mI,{trace:e,darkMode:t,sort:i,keyPrefix:`${e.id||e.trace_id}:`})),c&&bt.default.createElement("div",{className:"mt-3"},bt.default.createElement(ad,{...c,label:"Context pressure",darkMode:t})),bt.default.createElement(cSe,{trace:e,darkMode:t}),!r&&bt.default.createElement("div",{className:"mt-4 pt-4 border-t flex items-center flex-wrap gap-x-6 gap-y-1 text-sm",style:{borderColor:l.cardBorder,color:l.textSecondary}},bt.default.createElement("span",null,"Tokens:"),d.thinking>0&&bt.default.createElement("span",{className:"text-amber-500",style:{fontFamily:Mt.mono}},"T:",d.thinking.toLocaleString()),bt.default.createElement("span",{className:"text-blue-500",style:{fontFamily:Mt.mono}},"in:",(d.input||0).toLocaleString()),bt.default.createElement("span",{className:"text-green-500",style:{fontFamily:Mt.mono}},"out:",(d.output||0).toLocaleString()),e.provider&&bt.default.createElement("span",{style:{fontFamily:Mt.mono}},e.provider,e.model?` \xB7 ${e.model}`:"")),e.error&&bt.default.createElement("div",{className:"mt-4 p-3 rounded-lg border",style:{background:t?"rgba(239,68,68,0.1)":"#fef2f2",borderColor:t?"rgba(239,68,68,0.3)":"#fecaca"}},bt.default.createElement("span",{className:"text-sm",style:{color:t?"#fca5a5":"#b91c1c"}},e.error))):null}var pSe=e=>{let t=(e?.input||0)+(e?.output||0)+(e?.thinking||0);return t?t>=1e3?`${(t/1e3).toFixed(1)}K`:`${t}`:null},fSe=e=>e==null?null:`$${e.toFixed(4)}`;function XC({trace:e,darkMode:t,expanded:r,onToggle:n}){let o=Rn(t),a=pI(e),i=WC(e),s=e.status!=="ERROR",l=pSe(e.tokens);return Un.default.createElement(YC,{darkMode:t,id:`trace-row-${e.id}`},Un.default.createElement("div",{className:`p-4 flex items-center justify-between flex-wrap gap-y-2 cursor-pointer transition-colors ${t?"hover:bg-white/5":"hover:bg-gray-50"}`,onClick:n,style:r?{background:o.hoverBg}:void 0},Un.default.createElement("div",{className:"flex items-center gap-3 min-w-0"},Un.default.createElement("span",{className:"px-2 py-1 text-xs rounded flex-shrink-0",style:{fontFamily:Mt.mono,background:o.controlBg,color:o.textSecondary}},"TRACE"),Un.default.createElement("span",{className:"text-sm flex-shrink-0",style:{fontFamily:Mt.mono,color:o.textMuted}},e.short_id),Un.default.createElement("span",{className:"text-sm font-medium truncate",style:{color:o.textPrimary}},e.display_name)),Un.default.createElement("div",{className:"flex items-center gap-4 flex-shrink-0"},Un.default.createElement(id,{darkMode:t,cells:[{key:"model",title:"Model that generated this trace",empty:"No model recorded for this trace",content:e.model&&Un.default.createElement("span",{className:"text-xs px-2 py-0.5 rounded",style:{fontFamily:Mt.mono,background:t?"rgba(99,102,241,0.2)":"#eef2ff",color:t?"#a5b4fc":"#4338ca"}},e.model)},{key:"context",width:Ta.context,empty:"Context: no generation in this trace reported its token counts",content:i&&Un.default.createElement(ad,{compact:!0,...i,label:"Context",darkMode:t})},{key:"duration",width:Ta.duration,title:"Wall-clock duration",empty:"No duration recorded for this trace",content:e.duration_ms!=null&&Un.default.createElement(Un.default.Fragment,null,Un.default.createElement("i",{className:"fa-solid fa-clock mr-1"}),eo(e.duration_ms))},{key:"tokens",width:Ta.tokens,title:"Tokens in, out and thinking",empty:"No token counts recorded for this trace",content:l&&`${l} tokens`},{key:"cost",width:Ta.cost,title:"Estimated cost of this trace",empty:"Nothing to price \u2014 this trace recorded no tokens",content:e.estimated_cost!=null&&Un.default.createElement(Un.default.Fragment,null,Un.default.createElement("i",{className:"fa-solid fa-coins mr-1"}),fSe(e.estimated_cost))},{key:"status",width:Ta.status,title:s?"Trace completed":e.error||"Trace ended in an error",content:Un.default.createElement("span",{style:{color:s?o.good:o.bad}},Un.default.createElement("i",{className:`fa-solid ${s?"fa-check":"fa-xmark"} mr-1`}),s?"OK":"ERROR")}]}),Un.default.createElement(Xp,{open:r,darkMode:t}))),!r&&Un.default.createElement(fh,{darkMode:t,onClick:n,hold:!0,style:{padding:"0 16px 12px"},lines:[{label:"input",text:a.input,color:Fn("user",t).color},{label:"output",text:a.output,color:Fn("assistant",t).color}]}),r&&Un.default.createElement("div",{className:"border-t p-4",style:{borderColor:o.cardBorder,background:o.innerBg}},Un.default.createElement(r0,{trace:e,darkMode:t})))}function dY(e,t=""){return`${(e||"").replace(/\/$/,"")}${t}`||"/"}function pY(e,t){let r=(e||"").replace(/\/$/,"");return r&&(t===r||t.startsWith(`${r}/`))?t.slice(r.length)||"/":t}function et(e=""){return dY(window.ACTIVE_AGENT_DASHBOARD?.mountPath,e)}function sd(e="",t={}){window.history.pushState(t,"",et(e))}function to(e=window.location.pathname){return pY(window.ACTIVE_AGENT_DASHBOARD?.mountPath,e)}function lt(e,t={}){if(!e)return;let r=to(e);sd(r,t),window.dispatchEvent(new CustomEvent("dashboard:navigate",{detail:{path:et(r)}}))}var fY=({minutes:e,agentId:t=null,bucketSeconds:r=null})=>{let n=new URLSearchParams({minutes:String(e)});return r!=null&&n.set("bucket_seconds",String(r)),t!=null&&t!==""&&n.set("agent_id",String(t)),`/api/traces?${n.toString()}`};var mSe=(e,t,r,n=60)=>{let o=Date.now(),a=[],i=n*1e3,s=Math.max(1,Math.round(r*60/n));for(let l=s-1;l>=0;l--){let u=o-(l+1)*i,c=o-l*i,d=e.filter(m=>m.timestamp_ms>=u&&m.timestamp_msm.duration_ms).filter(m=>typeof m=="number"&&Number.isFinite(m)),f={};t.forEach(m=>{f[m]=d.filter(y=>y.agent===m).length}),a.push({time:r>1440?new Date(c).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit"}):new Date(c).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),timestamp:c,requests:d.length,errors:d.filter(m=>m.status==="ERROR").length,avgLatency:p.length>0?Math.round(p.reduce((m,y)=>m+y,0)/p.length):0,traces:d,...f})}return a},mY=(e,t,r,n)=>{let o=Array.isArray(e?.buckets)?e.buckets.map(s=>({time:n.minutes>1440?new Date(s.end_ms).toLocaleString([],{month:"short",day:"numeric",hour:"2-digit"}):new Date(s.end_ms).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),timestamp:s.end_ms,requests:s.requests,errors:s.errors,avgLatency:s.avg_latency_ms,traces:t.filter(l=>l.timestamp_ms>=s.start_ms&&l.timestamp_ms[l,s.agents?.[l]||0]))})):mSe(t,r,n.minutes,n.bucketSeconds),a=t.map(s=>s.duration_ms).filter(s=>typeof s=="number"&&Number.isFinite(s)),i=e?.summary?{requests:e.summary.requests,errors:e.summary.errors,avgLatency:e.summary.avg_latency_ms,throughput:Number(e.summary.throughput_per_minute).toFixed(1)}:{requests:t.length,errors:t.filter(s=>s.status==="ERROR").length,avgLatency:a.length?Math.round(a.reduce((s,l)=>s+l,0)/a.length):0,throughput:(t.length/n.minutes).toFixed(1)};return{buckets:o,summary:i,truncated:e?.truncated===!0,total:e?.total_count??t.length}};var gY=["#6366f1","#10b981","#f59e0b","#ec4899","#3b82f6","#8b5cf6","#14b8a6","#f97316"],gSe=3e4,hSe=e=>{let t={};return e.forEach((r,n)=>{t[r]=gY[n%gY.length]}),t},ySe=e=>{let t={};return e.forEach(r=>{(r.spans||[]).forEach(n=>{if((n.nested||0)===0)return;let o=n.name||n.type||"unknown";t[o]||(t[o]={name:o,type:n.type,count:0,total:0,max:0,errors:0});let a=t[o];a.count+=1,a.total+=n.duration||0,a.max=Math.max(a.max,n.duration||0),n.error&&(a.errors+=1)})}),Object.values(t).map(r=>({...r,avg:r.total/r.count})).sort((r,n)=>n.total-r.total)};function Zp({agentId:e=null,embedded:t=!1}){let{darkMode:r}=ut(),[n,o]=(0,H.useState)([]),[a,i]=(0,H.useState)(null),[s,l]=(0,H.useState)([]),[u,c]=(0,H.useState)({}),[d,p]=(0,H.useState)(!0),[f,m]=(0,H.useState)(null),[y,b]=(0,H.useState)(null),h=(0,H.useRef)(new URLSearchParams(window.location.search).get("trace")),[g,v]=(0,H.useState)(null),[x,S]=(0,H.useState)({status:"all",agent:"all",action:"all"}),[k,w]=(0,H.useState)("time"),[_,A]=(0,H.useState)(null),[C,N]=(0,H.useState)("timeline"),[$,Q]=(0,H.useState)("popular"),{timeWindow:B}=Sl(),G=(0,H.useCallback)(async()=>{try{let E=await fetch(fY({minutes:B.minutes,bucketSeconds:B.bucketSeconds,agentId:e}));if(!E.ok)throw new Error(`Request failed (${E.status})`);let L=await E.json();o(L.traces||[]),i(L),l(L.agents||[]),c(L.agent_ids||{}),m(null)}catch(E){m(E.message)}finally{p(!1)}},[B.minutes,B.bucketSeconds,e]);(0,H.useEffect)(()=>{G();let E=setInterval(G,gSe);return()=>clearInterval(E)},[G]);let T=(0,H.useMemo)(()=>hSe(s),[s]);(0,H.useEffect)(()=>{A(null)},[B.id]);let P=(0,H.useMemo)(()=>mY(a,n,s,B),[a,n,s,B]),I=P.buckets,O=Math.max(0,Math.ceil(I.length/6)-1),j=(0,H.useMemo)(()=>{let E=n;if(_!==null){let L=I[_];L&&(E=L.traces||[])}if(x.status!=="all"&&(E=E.filter(L=>x.status==="success"?L.status!=="ERROR":L.status==="ERROR")),x.agent!=="all"&&(E=E.filter(L=>L.agent===x.agent)),x.action!=="all")if(x.action.includes("#")){let[L,re]=x.action.split("#");E=E.filter(F=>F.agent===L&&F.action===re)}else E=E.filter(L=>L.action===x.action);return k==="latency"&&(E=[...E].sort((L,re)=>(re.duration_ms||0)-(L.duration_ms||0))),g&&!E.some(L=>L.id===g.id)&&(E=[g,...E]),E},[n,_,I,x,k,g]);(0,H.useEffect)(()=>{let E=h.current;if(!E)return;let L=F=>{h.current=null,b(F.id),setTimeout(()=>{document.getElementById(`trace-row-${F.id}`)?.scrollIntoView({behavior:"smooth",block:"start"})},150)},re=n.find(F=>F.id===E||F.trace_id===E||F.short_id&&String(E).startsWith(F.short_id));if(re){L(re);return}n.length!==0&&fetch(`/api/traces/${encodeURIComponent(E)}`).then(F=>F.ok?F.json():Promise.reject(new Error("not found"))).then(({trace:F})=>{v(F),L(F)}).catch(()=>{h.current=null})},[n]);let M=(0,H.useMemo)(()=>{let E=_!==null?I[_]?.traces||[]:n,L={};E.forEach(F=>{F.agent&&(L[F.agent]||(L[F.agent]={agent:F.agent,count:0,totalDuration:0,cost:0,errors:0,actions:{},tokens:{thinking:0,input:0,output:0}}),L[F.agent].count++,L[F.agent].totalDuration+=F.duration_ms||0,L[F.agent].cost+=F.estimated_cost||0,F.status==="ERROR"&&L[F.agent].errors++,F.tokens&&(L[F.agent].tokens.thinking+=F.tokens.thinking||0,L[F.agent].tokens.input+=F.tokens.input||0,L[F.agent].tokens.output+=F.tokens.output||0),F.action&&(L[F.agent].actions[F.action]=(L[F.agent].actions[F.action]||0)+1))});let re={popular:F=>F.count,longest:F=>F.totalDuration/(F.count||1),cost:F=>F.cost,tokens:F=>(F.tokens.input||0)+(F.tokens.output||0)+(F.tokens.thinking||0),errors:F=>F.errors}[$]||(F=>F.count);return Object.values(L).sort((F,fe)=>re(fe)-re(F)||fe.count-F.count)},[n,I,_,$]),W=(0,H.useMemo)(()=>{let E=_!==null?I[_]?.traces||[]:n,L={};return E.forEach(re=>{if(!re.agent)return;let F=`${re.agent}#${re.action||"unknown"}`;L[F]||(L[F]={key:F,agent:re.agent,action:re.action||"unknown",count:0,totalDuration:0,errors:0,minDuration:1/0,maxDuration:0,tokens:{thinking:0,input:0,output:0}}),L[F].count++,L[F].totalDuration+=re.duration_ms||0,L[F].minDuration=Math.min(L[F].minDuration,re.duration_ms||0),L[F].maxDuration=Math.max(L[F].maxDuration,re.duration_ms||0),re.status==="ERROR"&&L[F].errors++,re.tokens&&(L[F].tokens.thinking+=re.tokens.thinking||0,L[F].tokens.input+=re.tokens.input||0,L[F].tokens.output+=re.tokens.output||0)}),Object.values(L).forEach(re=>{re.minDuration===1/0&&(re.minDuration=0)}),Object.values(L).sort((re,F)=>F.count-re.count)},[n,I,_]),K=(0,H.useMemo)(()=>{let E=_!==null?I[_]?.traces||[]:n,L={};return E.forEach(re=>{(re.spans||[]).forEach(F=>{if(F.type!=="tool")return;let fe=F.attributes?.["tool.name"]||F.name?.replace(/^tool\./,"")||"unknown";L[fe]||(L[fe]={name:fe,count:0,totalDuration:0,maxDuration:0,errors:0,agents:new Set}),L[fe].count++,L[fe].totalDuration+=F.duration||0,L[fe].maxDuration=Math.max(L[fe].maxDuration,F.duration||0),F.error&&L[fe].errors++,re.agent&&L[fe].agents.add(`${re.agent}#${re.action||"unknown"}`)})}),Object.values(L).map(re=>({...re,agents:[...re.agents],avgDuration:re.count?re.totalDuration/re.count:0})).sort((re,F)=>F.totalDuration-re.totalDuration)},[n,I,_]),z=(0,H.useMemo)(()=>x.agent==="all"?W.map(E=>E.key):W.filter(E=>E.agent===x.agent).map(E=>E.key),[x.agent,W]),Y=(0,H.useMemo)(()=>ySe(j),[j]),q=E=>{if(E&&E.activeTooltipIndex!==void 0){let L=E.activeTooltipIndex;A(_===L?null:L),b(null)}},ae=E=>(E?.input||0)+(E?.output||0)+(E?.thinking||0),Pe=E=>{let L=E.count?E.errors/E.count:0;return[{label:`Calls ${B.label||""}`.trim(),value:E.count.toLocaleString()},{label:"Errors",value:`${(L*100).toFixed(1)}%`,tone:E.errors>0?"bad":"good"},{label:"Avg time",value:`${Math.round(E.totalDuration/(E.count||1))}ms`},{label:"Tokens",value:ae(E.tokens).toLocaleString()},{label:"Cost",value:me(E.cost),title:"Estimated from token counts at this model's published rates",tone:E.cost?void 0:"muted"},{label:"Actions",value:(E.agents?.length||0).toLocaleString()}]},me=E=>E?E<.01?"<$0.01":`$${E.toFixed(2)}`:"\u2014",le=H.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"flex-end",gap:"8px",marginBottom:"12px"}},H.default.createElement("span",{style:{fontSize:"12px",color:r?"rgba(255,255,255,0.5)":"#6b7280"}},"Rank by"),H.default.createElement("select",{value:$,onChange:E=>Q(E.target.value),style:{fontSize:"12px",padding:"4px 8px",borderRadius:"6px",border:`1px solid ${r?"rgba(255,255,255,0.15)":"#e5e7eb"}`,background:r?"rgba(255,255,255,0.05)":"#ffffff",color:r?"#f9fafb":"#111827"}},H.default.createElement("option",{value:"popular"},"Most calls"),H.default.createElement("option",{value:"longest"},"Longest average"),H.default.createElement("option",{value:"cost"},"Highest cost"),H.default.createElement("option",{value:"tokens"},"Most tokens"),H.default.createElement("option",{value:"errors"},"Most errors"))),R=E=>S(L=>({...L,agent:L.agent===E?"all":E})),ee=E=>{let L=u[E];if(!L)return R(E);let re=et(`/agents/${L}`);window.history.pushState(window.history.state,"",re),window.dispatchEvent(new CustomEvent("dashboard:navigate",{detail:{path:re}}))},je=E=>{let L=Y[0]?.total||1,re=E?"rgba(0,0,0,0.3)":"white",F=E?"1px solid rgba(255,255,255,0.1)":"1px solid #e5e7eb",fe=E?"white":"#111827",tt=E?"rgba(255,255,255,0.5)":"#6b7280",rt={llm:"#ef4444",tool:"#10b981",generate:"#8b5cf6",prompt:"#3b82f6"};return H.default.createElement("div",{style:{padding:E?"0 24px 24px 24px":0}},H.default.createElement("div",{style:{background:re,border:F,borderRadius:"12px",padding:"16px"}},H.default.createElement("div",{style:{fontSize:"14px",fontWeight:600,color:fe,marginBottom:"4px"}},"Slowest operations"),H.default.createElement("div",{style:{fontSize:"12px",color:tt,marginBottom:"14px"}},"Span durations aggregated across ",j.length," trace",j.length===1?"":"s"," \u2014 ranked by total time"),Y.length===0?H.default.createElement("div",{style:{fontSize:"13px",color:tt,padding:"12px 0"}},"No spans in the current selection"):H.default.createElement("div",{style:{display:"grid",gap:"10px"}},Y.map(ge=>H.default.createElement("div",{key:ge.name,style:{display:"flex",alignItems:"center",gap:"12px"}},H.default.createElement("div",{style:{width:"220px",flexShrink:0,display:"flex",alignItems:"center",gap:"8px"}},H.default.createElement("span",{style:{color:tt}},dI(ge.type)),H.default.createElement("span",{style:{fontSize:"13px",color:ge.errors>0?"#ef4444":fe,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},ge.name)),H.default.createElement("div",{style:{flex:1,height:"18px",background:E?"rgba(255,255,255,0.06)":"#f3f4f6",borderRadius:"4px",position:"relative"}},H.default.createElement("div",{style:{position:"absolute",top:"3px",left:0,height:"12px",borderRadius:"3px",width:`${Math.max(ge.total/L*100,.5)}%`,background:rt[ge.type]||"#6366f1"}})),H.default.createElement("div",{style:{width:"260px",flexShrink:0,fontSize:"12px",color:tt,fontFamily:Mt.mono,textAlign:"right"}},ge.count,"\xD7 \xB7 avg ",eo(ge.avg)," \xB7 max ",eo(ge.max)," \xB7 \u03A3 ",eo(ge.total)))))))};if(d)return H.default.createElement("div",{className:"flex items-center justify-center h-64"},H.default.createElement("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-red-500"}));let _e=P.summary,D=P.truncated&&H.default.createElement("div",{role:"status","data-testid":"trace-window-notice",style:{padding:"12px 24px",fontSize:13,color:r?"#fbbf24":"#92400e"}},"Showing newest ",n.length," of ",P.total," traces. Chart and totals cover the full window; lists and breakdowns use these loaded traces."),V=_e.requests===0;return r?H.default.createElement("div",{className:"preview-content",style:{borderRadius:"12px",overflow:"hidden",minHeight:"calc(100vh - 200px)"}},D,H.default.createElement("div",{style:{padding:"24px 24px 0 24px",borderBottom:"1px solid rgba(255,255,255,0.1)",marginBottom:"16px",paddingBottom:"16px"}},H.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"}},H.default.createElement("div",null,!t&&H.default.createElement("h1",{style:{fontSize:"24px",fontWeight:"bold",color:"white",margin:0}},"Traces"),H.default.createElement("p",{style:{fontSize:"14px",color:"rgba(255,255,255,0.6)",marginTop:"4px"}},_!==null?`Viewing ${I[_]?.time} \u2022 ${j.length} requests`:`Last ${B.label} \u2022 Click timeline to drill down`)),H.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"12px"}},H.default.createElement("div",{style:{display:"flex",background:"rgba(255,255,255,0.1)",borderRadius:"8px",padding:"2px"}},["timeline","agents","actions","tools","spans"].map(E=>H.default.createElement("button",{key:E,onClick:()=>N(E),style:{padding:"6px 12px",background:C===E?"#ef4444":"transparent",color:"white",borderRadius:"6px",border:"none",fontSize:"13px",cursor:"pointer",textTransform:"capitalize"}},E))),!e&&H.default.createElement("select",{value:x.agent,onChange:E=>S({...x,agent:E.target.value,action:"all"}),style:{padding:"8px 12px",background:"rgba(255,255,255,0.1)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"8px",color:"white",fontSize:"14px",maxWidth:"180px",textOverflow:"ellipsis"}},H.default.createElement("option",{value:"all"},"All Agents"),s.map(E=>H.default.createElement("option",{key:E,value:E},E))),H.default.createElement("select",{value:x.action,onChange:E=>S({...x,action:E.target.value}),style:{padding:"8px 12px",background:x.action!=="all"?"rgba(239, 68, 68, 0.3)":"rgba(255,255,255,0.1)",border:x.action!=="all"?"1px solid #ef4444":"1px solid rgba(255,255,255,0.2)",borderRadius:"8px",color:"white",fontSize:"14px",maxWidth:"220px",textOverflow:"ellipsis"}},H.default.createElement("option",{value:"all"},"All Actions"),z.map(E=>H.default.createElement("option",{key:E,value:E},E))),H.default.createElement("select",{value:x.status,onChange:E=>S({...x,status:E.target.value}),style:{padding:"8px 12px",background:"rgba(255,255,255,0.1)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"8px",color:"white",fontSize:"14px"}},H.default.createElement("option",{value:"all"},"All Status"),H.default.createElement("option",{value:"success"},"Success"),H.default.createElement("option",{value:"error"},"Error")),H.default.createElement("select",{value:k,onChange:E=>w(E.target.value),style:{padding:"8px 12px",background:"rgba(255,255,255,0.1)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"8px",color:"white",fontSize:"14px"}},H.default.createElement("option",{value:"time"},"Newest first"),H.default.createElement("option",{value:"latency"},"Slowest first")),_!==null&&H.default.createElement("button",{onClick:()=>A(null),style:{padding:"8px 16px",background:"rgba(255,255,255,0.2)",color:"white",borderRadius:"8px",border:"none",fontSize:"14px",fontWeight:"500",cursor:"pointer"}},"Clear Selection")))),f&&H.default.createElement("div",{style:{margin:"0 24px 16px 24px",padding:"12px 16px",background:"rgba(239, 68, 68, 0.1)",borderRadius:"8px",color:"#ef4444",fontSize:"13px"}},"Failed to load traces: ",f),H.default.createElement("div",{style:{padding:"0 24px",marginBottom:"24px"}},H.default.createElement("div",{style:{background:"rgba(0,0,0,0.3)",borderRadius:"12px",padding:"16px",border:"1px solid rgba(255,255,255,0.1)"}},H.default.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"12px"}},H.default.createElement("div",{style:{fontSize:"14px",fontWeight:"600",color:"white"}},"Agent Requests / Minute"),H.default.createElement("div",{style:{display:"flex",gap:"16px",flexWrap:"wrap"}},Object.entries(T).map(([E,L])=>H.default.createElement("div",{key:E,style:{display:"flex",alignItems:"center",gap:"6px"}},H.default.createElement("div",{style:{width:"10px",height:"10px",borderRadius:"2px",background:L}}),H.default.createElement("span",{style:{fontSize:"11px",color:"rgba(255,255,255,0.7)"}},E.replace("Agent","")))))),H.default.createElement("div",{style:{height:"150px"}},H.default.createElement(Ac,{width:"100%",height:"100%"},H.default.createElement(nd,{data:I,onClick:q,style:{cursor:"pointer"}},H.default.createElement("defs",null,Object.entries(T).map(([E,L])=>H.default.createElement("linearGradient",{key:E,id:`gradient-${E}`,x1:"0",y1:"0",x2:"0",y2:"1"},H.default.createElement("stop",{offset:"5%",stopColor:L,stopOpacity:.8}),H.default.createElement("stop",{offset:"95%",stopColor:L,stopOpacity:.1})))),H.default.createElement(Cu,{strokeDasharray:"3 3",stroke:"rgba(255,255,255,0.1)"}),H.default.createElement(Tu,{dataKey:"time",stroke:"rgba(255,255,255,0.5)",tick:{fontSize:10,fill:"rgba(255,255,255,0.5)"},tickLine:!1,interval:O}),H.default.createElement(Pu,{stroke:"rgba(255,255,255,0.5)",tick:{fontSize:10,fill:"rgba(255,255,255,0.5)"},tickLine:!1,axisLine:!1,allowDecimals:!1}),H.default.createElement(Hc,{contentStyle:{background:"rgba(0,0,0,0.9)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"8px",padding:"12px"},labelStyle:{color:"white",fontWeight:"600",marginBottom:"8px"},itemStyle:{color:"rgba(255,255,255,0.8)",fontSize:"12px"},formatter:(E,L)=>[E,L.replace("Agent","")]}),Object.keys(T).map(E=>H.default.createElement(Eu,{key:E,type:"monotone",dataKey:E,stackId:"1",stroke:T[E],fill:`url(#gradient-${E})`}))))),H.default.createElement("div",{style:{display:"flex",gap:"24px",marginTop:"12px",paddingTop:"12px",borderTop:"1px solid rgba(255,255,255,0.1)"}},H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"20px",fontWeight:"700",color:"white"}},_e.requests),H.default.createElement("div",{style:{fontSize:"11px",color:"rgba(255,255,255,0.5)"}},"Total Requests")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"20px",fontWeight:"700",color:"#ef4444"}},_e.errors),H.default.createElement("div",{style:{fontSize:"11px",color:"rgba(255,255,255,0.5)"}},"Errors")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"20px",fontWeight:"700",color:"#10b981"}},_e.avgLatency,"ms"),H.default.createElement("div",{style:{fontSize:"11px",color:"rgba(255,255,255,0.5)"}},"Avg Latency")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"20px",fontWeight:"700",color:"#f59e0b"}},_e.throughput,"/min"),H.default.createElement("div",{style:{fontSize:"11px",color:"rgba(255,255,255,0.5)"}},"Throughput"))))),C==="agents"&&H.default.createElement("div",{style:{padding:"0 24px",marginBottom:"24px"}},le,H.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(280px, 1fr))",gap:"16px"}},M.map(E=>H.default.createElement(Tm,{key:E.agent,name:E.agent,accentColor:T[E.agent],subtitle:E.agents?.length?E.agents.join(", "):void 0,badge:H.default.createElement("span",{style:{fontSize:"12px",padding:"2px 8px",background:T[E.agent]+"30",color:T[E.agent],borderRadius:"4px",whiteSpace:"nowrap"}},E.count," calls"),onClick:()=>ee(E.agent),stats:Pe(E),footer:H.default.createElement(H.default.Fragment,null,H.default.createElement("span",null,u[E.agent]?"Open agent \u2192":"Not linked to an agent record"),H.default.createElement("button",{onClick:L=>{L.stopPropagation(),R(E.agent)},style:{background:"none",border:"none",padding:0,cursor:"pointer",color:x.agent===E.agent?"#ef4444":"inherit",font:"inherit"}},x.agent===E.agent?"Clear filter":"Filter traces"))})))),C==="actions"&&H.default.createElement("div",{style:{padding:"0 24px",marginBottom:"24px"}},H.default.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(320px, 1fr))",gap:"12px"}},W.map(E=>{let L=x.action===E.key;return H.default.createElement("div",{key:E.key,onClick:()=>{S({...x,action:L?"all":E.key}),N("timeline")},style:{background:L?"rgba(239, 68, 68, 0.15)":"rgba(0,0,0,0.3)",borderRadius:"10px",padding:"14px",border:L?"1px solid #ef4444":`1px solid ${T[E.agent]}30`,cursor:"pointer",transition:"all 0.15s"}},H.default.createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"10px"}},H.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},H.default.createElement("div",{style:{width:"6px",height:"6px",borderRadius:"50%",background:T[E.agent]}}),H.default.createElement("span",{style:{fontSize:"14px",fontWeight:"600",color:"white"}},E.agent),H.default.createElement("span",{style:{fontSize:"13px",color:"rgba(255,255,255,0.7)"}},"#",E.action)),H.default.createElement("span",{style:{fontSize:"12px",padding:"2px 8px",background:T[E.agent]+"30",color:T[E.agent],borderRadius:"4px"}},E.count," calls")),H.default.createElement("div",{style:{display:"flex",gap:"16px",flexWrap:"wrap"}},H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"10px",color:"rgba(255,255,255,0.5)"}},"Avg"),H.default.createElement("div",{style:{fontSize:"13px",color:"white",fontWeight:"500"}},Math.round(E.totalDuration/E.count),"ms")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"10px",color:"rgba(255,255,255,0.5)"}},"Min/Max"),H.default.createElement("div",{style:{fontSize:"13px",color:"rgba(255,255,255,0.8)"}},Math.round(E.minDuration),"ms / ",Math.round(E.maxDuration),"ms")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"10px",color:"rgba(255,255,255,0.5)"}},"Errors"),H.default.createElement("div",{style:{fontSize:"13px",color:E.errors>0?"#ef4444":"#10b981"}},E.errors," (",(E.errors/E.count*100).toFixed(0),"%)")),H.default.createElement("div",null,H.default.createElement("div",{style:{fontSize:"10px",color:"rgba(255,255,255,0.5)"}},"Tokens"),H.default.createElement("div",{style:{fontSize:"13px",color:"rgba(255,255,255,0.8)"}},ae(E.tokens).toLocaleString()))))}))),C==="spans"&&je(!0),C==="timeline"&&!V&&H.default.createElement("div",{className:"space-y-4"},j.length===0?H.default.createElement("div",{style:{textAlign:"center",padding:"32px",color:"rgba(255,255,255,0.5)",fontSize:"14px"}},"No traces match filters"):j.map(E=>H.default.createElement(XC,{key:E.id,trace:E,darkMode:!0,expanded:y===E.id,onToggle:()=>b(y===E.id?null:E.id)}))),V&&C==="timeline"&&H.default.createElement("div",{style:{textAlign:"center",padding:"48px 0"}},H.default.createElement("div",{style:{color:"rgba(255,255,255,0.5)",fontSize:"18px"}},"No traces yet"),H.default.createElement("p",{style:{color:"rgba(255,255,255,0.4)",fontSize:"14px",marginTop:"8px"}},"Run an agent, or point your app's ActiveAgent telemetry at this workspace to see traces appear here"))):H.default.createElement("div",{className:"space-y-6"},D,H.default.createElement("div",{className:"flex items-center justify-between flex-wrap gap-y-2"},H.default.createElement("div",null,H.default.createElement("h1",{className:"text-2xl font-bold text-gray-900"},"Traces"),H.default.createElement("p",{className:"text-sm text-gray-500"},_!==null?`Viewing ${I[_]?.time} \u2022 ${j.length} requests`:`Last ${B.label} \u2022 Click timeline to drill down`)),H.default.createElement("div",{className:"flex items-center space-x-3 flex-wrap gap-y-2 min-w-0"},H.default.createElement(kl,null),H.default.createElement("div",{className:"flex bg-gray-100 rounded-lg p-1"},["timeline","agents","actions","tools","spans"].map(E=>H.default.createElement("button",{key:E,onClick:()=>N(E),className:`px-3 py-1 text-sm rounded-md transition-colors capitalize ${C===E?"bg-white shadow text-gray-900":"text-gray-600"}`},E))),H.default.createElement("select",{value:x.agent,onChange:E=>S({...x,agent:E.target.value,action:"all"}),className:"px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-red-500",style:{maxWidth:"180px",textOverflow:"ellipsis"}},H.default.createElement("option",{value:"all"},"All Agents"),s.map(E=>H.default.createElement("option",{key:E,value:E},E))),H.default.createElement("select",{value:x.action,onChange:E=>S({...x,action:E.target.value}),className:`px-3 py-2 border rounded-lg text-sm focus:ring-2 focus:ring-red-500 ${x.action!=="all"?"border-red-500 bg-red-50":"border-gray-300"}`,style:{maxWidth:"220px",textOverflow:"ellipsis"}},H.default.createElement("option",{value:"all"},"All Actions"),z.map(E=>H.default.createElement("option",{key:E,value:E},E))),H.default.createElement("select",{value:x.status,onChange:E=>S({...x,status:E.target.value}),className:"px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-red-500"},H.default.createElement("option",{value:"all"},"All Status"),H.default.createElement("option",{value:"success"},"Success"),H.default.createElement("option",{value:"error"},"Error")),H.default.createElement("select",{value:k,onChange:E=>w(E.target.value),className:"px-3 py-2 border border-gray-300 rounded-lg text-sm focus:ring-2 focus:ring-red-500"},H.default.createElement("option",{value:"time"},"Newest first"),H.default.createElement("option",{value:"latency"},"Slowest first")),_!==null&&H.default.createElement("button",{onClick:()=>A(null),className:"px-4 py-2 bg-gray-200 text-gray-700 rounded-lg hover:bg-gray-300 transition-colors text-sm font-medium"},"Clear Selection"))),f&&H.default.createElement("div",{className:"p-3 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700"},"Failed to load traces: ",f),H.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 p-4"},H.default.createElement("div",{className:"flex justify-between items-center mb-3"},H.default.createElement("h3",{className:"text-sm font-semibold text-gray-700"},"Agent Requests / Minute"),H.default.createElement("div",{className:"flex gap-4 flex-wrap"},Object.entries(T).map(([E,L])=>H.default.createElement("div",{key:E,className:"flex items-center gap-1.5"},H.default.createElement("div",{className:"w-2.5 h-2.5 rounded-sm",style:{background:L}}),H.default.createElement("span",{className:"text-xs text-gray-500"},E.replace("Agent","")))))),H.default.createElement("div",{className:"h-36"},H.default.createElement(Ac,{width:"100%",height:"100%"},H.default.createElement(nd,{data:I,onClick:q,style:{cursor:"pointer"}},H.default.createElement("defs",null,Object.entries(T).map(([E,L])=>H.default.createElement("linearGradient",{key:E,id:`gradient-light-${E}`,x1:"0",y1:"0",x2:"0",y2:"1"},H.default.createElement("stop",{offset:"5%",stopColor:L,stopOpacity:.6}),H.default.createElement("stop",{offset:"95%",stopColor:L,stopOpacity:.05})))),H.default.createElement(Cu,{strokeDasharray:"3 3",stroke:"#e5e7eb"}),H.default.createElement(Tu,{dataKey:"time",stroke:"#9ca3af",tick:{fontSize:10,fill:"#6b7280"},tickLine:!1,interval:O}),H.default.createElement(Pu,{stroke:"#9ca3af",tick:{fontSize:10,fill:"#6b7280"},tickLine:!1,axisLine:!1,allowDecimals:!1}),H.default.createElement(Hc,{contentStyle:{background:"white",border:"1px solid #e5e7eb",borderRadius:"8px",boxShadow:"0 4px 6px -1px rgba(0,0,0,0.1)"},labelStyle:{color:"#111827",fontWeight:"600",marginBottom:"8px"},formatter:(E,L)=>[E,L.replace("Agent","")]}),Object.keys(T).map(E=>H.default.createElement(Eu,{key:E,type:"monotone",dataKey:E,stackId:"1",stroke:T[E],fill:`url(#gradient-light-${E})`}))))),H.default.createElement("div",{className:"flex gap-6 mt-3 pt-3 border-t border-gray-100"},H.default.createElement("div",null,H.default.createElement("div",{className:"text-lg font-bold text-gray-900"},_e.requests),H.default.createElement("div",{className:"text-xs text-gray-500"},"Total Requests")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-lg font-bold text-red-500"},_e.errors),H.default.createElement("div",{className:"text-xs text-gray-500"},"Errors")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-lg font-bold text-green-600"},_e.avgLatency,"ms"),H.default.createElement("div",{className:"text-xs text-gray-500"},"Avg Latency")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-lg font-bold text-amber-500"},_e.throughput,"/min"),H.default.createElement("div",{className:"text-xs text-gray-500"},"Throughput")))),C==="agents"&&H.default.createElement("div",null,le,H.default.createElement("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},M.map(E=>H.default.createElement(Tm,{key:E.agent,name:E.agent,accentColor:T[E.agent],subtitle:E.agents?.length?E.agents.join(", "):void 0,badge:H.default.createElement("span",{className:"text-sm px-2 py-0.5 rounded",style:{background:T[E.agent]+"20",color:T[E.agent]}},E.count," calls"),onClick:()=>ee(E.agent),stats:Pe(E),footer:H.default.createElement(H.default.Fragment,null,H.default.createElement("span",null,u[E.agent]?"Open agent \u2192":"Not linked to an agent record"),H.default.createElement("button",{onClick:L=>{L.stopPropagation(),R(E.agent)},className:x.agent===E.agent?"text-red-600":"hover:text-gray-700"},x.agent===E.agent?"Clear filter":"Filter traces"))})))),C==="actions"&&H.default.createElement("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3"},W.map(E=>{let L=x.action===E.key;return H.default.createElement("div",{key:E.key,onClick:()=>{S({...x,action:L?"all":E.key}),N("timeline")},className:`rounded-xl p-4 cursor-pointer transition-all ${L?"bg-red-50 border-2 border-red-500":"bg-white border border-gray-200 hover:border-gray-300"}`,style:{borderLeftColor:T[E.agent],borderLeftWidth:L?"2px":"4px"}},H.default.createElement("div",{className:"flex items-center justify-between mb-3"},H.default.createElement("div",{className:"flex items-center gap-2"},H.default.createElement("div",{className:"w-2 h-2 rounded-full",style:{background:T[E.agent]}}),H.default.createElement("span",{className:"font-semibold text-gray-900"},E.agent),H.default.createElement("span",{className:"text-gray-500"},"#",E.action)),H.default.createElement("span",{className:"text-xs px-2 py-0.5 rounded",style:{background:T[E.agent]+"20",color:T[E.agent]}},E.count," calls")),H.default.createElement("div",{className:"flex flex-wrap gap-4 text-sm"},H.default.createElement("div",null,H.default.createElement("div",{className:"text-xs text-gray-500"},"Avg"),H.default.createElement("div",{className:"font-medium"},Math.round(E.totalDuration/E.count),"ms")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-xs text-gray-500"},"Min/Max"),H.default.createElement("div",{className:"text-gray-600"},Math.round(E.minDuration),"ms / ",Math.round(E.maxDuration),"ms")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-xs text-gray-500"},"Errors"),H.default.createElement("div",{className:E.errors>0?"text-red-600":"text-green-600"},E.errors," (",(E.errors/E.count*100).toFixed(0),"%)")),H.default.createElement("div",null,H.default.createElement("div",{className:"text-xs text-gray-500"},"Tokens"),H.default.createElement("div",{className:"text-gray-600"},ae(E.tokens).toLocaleString()))))})),C==="tools"&&(K.length===0?H.default.createElement("div",{className:"text-center py-8 text-gray-500 text-sm"},"No tool calls in this window"):H.default.createElement("div",{className:"bg-white rounded-xl border border-gray-200 overflow-hidden"},H.default.createElement("div",{className:"flex items-center gap-4 px-4 py-2 text-xs font-medium text-gray-500 border-b border-gray-100"},H.default.createElement("div",{className:"flex-1"},"Tool"),H.default.createElement("div",{className:"w-20 text-right"},"Calls"),H.default.createElement("div",{className:"w-24 text-right"},"Total time"),H.default.createElement("div",{className:"w-20 text-right"},"Avg"),H.default.createElement("div",{className:"w-20 text-right"},"Slowest")),K.map(E=>{let L=K[0].totalDuration?E.totalDuration/K[0].totalDuration*100:0;return H.default.createElement("div",{key:E.name,className:"px-4 py-2 border-b border-gray-50 last:border-0"},H.default.createElement("div",{className:"flex items-center gap-4 text-sm"},H.default.createElement("div",{className:"flex-1 min-w-0"},H.default.createElement("div",{className:"font-medium text-gray-900 truncate",title:E.name},E.name),E.agents.length>0&&H.default.createElement("div",{className:"text-xs text-gray-400 truncate",title:E.agents.join(", ")},E.agents.join(", "))),H.default.createElement("div",{className:"w-20 text-right text-gray-700",style:{fontFamily:Mt.mono}},E.count.toLocaleString(),E.errors>0&&H.default.createElement("span",{className:"text-red-600 ml-1",title:`${E.errors} failed`},"(",E.errors,")")),H.default.createElement("div",{className:"w-24 text-right text-gray-900 font-medium",style:{fontFamily:Mt.mono}},eo(E.totalDuration)),H.default.createElement("div",{className:"w-20 text-right text-gray-500",style:{fontFamily:Mt.mono}},eo(E.avgDuration)),H.default.createElement("div",{className:"w-20 text-right text-gray-500",style:{fontFamily:Mt.mono}},eo(E.maxDuration))),H.default.createElement("div",{className:"h-1 bg-gray-100 rounded mt-1.5"},H.default.createElement("div",{className:"h-1 bg-green-500 rounded",style:{width:`${Math.max(L,1)}%`}})))}))),C==="spans"&&je(!1),C==="timeline"&&!V&&H.default.createElement("div",{className:"space-y-4"},j.length===0?H.default.createElement("div",{className:"text-center py-8 text-gray-500"},"No traces match filters"):j.map(E=>H.default.createElement(XC,{key:E.id,trace:E,darkMode:!1,expanded:y===E.id,onToggle:()=>b(y===E.id?null:E.id)}))),V&&C==="timeline"&&H.default.createElement("div",{className:"text-center py-12"},H.default.createElement("div",{className:"text-gray-400 text-lg"},"No traces yet"),H.default.createElement("p",{className:"text-gray-500 text-sm mt-2"},"Run an agent, or point your app's ActiveAgent telemetry at this workspace to see traces appear here")))}var xe=Z(J());var ZC=Z(J());function gI({trace:e,darkMode:t,height:r=8}){let n=Rn(t);if(!e)return ZC.default.createElement("div",{className:"rounded",style:{height:`${r}px`,background:n.trackBg}});let o=e.spans||[],a=e.duration_ms||1,i=[...o].sort((s,l)=>(s.nested||0)-(l.nested||0));return ZC.default.createElement("div",{style:{position:"relative",height:`${r}px`,borderRadius:"999px",background:n.trackBg,overflow:"hidden",flex:1}},i.map((s,l)=>ZC.default.createElement("div",{key:s.span_id||l,title:`${s.name} \xB7 ${eo(s.duration)}`,style:{position:"absolute",top:0,bottom:0,left:`${Math.min(s.start/a*100,99)}%`,width:`${Math.max(s.duration/a*100,.8)}%`,background:s.error?"#ef4444":cI[s.type]||"#9ca3af"}})))}var Hs=Z(J());var vr=Z(J());var Du=Z(J());var vSe=/\/agents\/(\d+)/;function Ja(...e){return t=>e.some(r=>t.startsWith(r))?{}:null}function xSe(e){return t=>t===e?{}:null}function n0(e){return t=>e.test(t)?{agentId:t.match(vSe)?.[1]}:null}function JC(e){return({agent:t})=>t?`/agents/${t.id}${e}`:""}var bSe=e=>e.assistantEnabled!==!1,wSe=n0(/\/agents\/\d+\/(interactions|history)/),SSe=["recording","context","run","scenario_result"],kSe=/^\/replay\/(?:(context|run|scenario_result)\/)?(\d+)\/?$/;function _Se(e){let t=e.match(kSe);return t?{sessionKind:t[1]||"recording",sessionId:t[2]}:null}var hI=[{view:"assistant",match:xSe("/assistant"),path:"/assistant",enabled:bSe},{view:"traces",match:Ja("/traces"),path:"/traces"},{view:"metrics",match:Ja("/metrics"),path:"/metrics"},{view:"scenarios",match:Ja("/scenarios"),path:"/scenarios"},{view:"scenarios",match:e=>e.startsWith("/catalogs")?{replacePath:e.replace("/catalogs","/scenarios")}:null},{view:"interactions",match:Ja("/interactions"),path:"/interactions"},{view:"tools",match:Ja("/tools"),path:"/tools"},{view:"mcp",match:e=>{if(!e.startsWith("/mcp"))return null;let t=e.match(/^\/mcp\/([^/?#]+)/)?.[1];return t?{focusServer:decodeURIComponent(t)}:{}},path:"/mcp"},{view:"evaluations",match:Ja("/evaluations"),path:"/evaluations"},{view:"analytics",match:Ja("/analytics"),path:"/analytics"},{view:"projects",match:Ja("/projects"),path:"/projects"},{view:"exploration",match:Ja("/explorations"),path:"/explorations"},{view:"builder",match:Ja("/agents/new"),path:"/agents/new"},{view:"history",match:e=>{let t=wSe(e);return t&&e.includes("/history")&&(t.replacePath=e.replace("/history","/interactions")),t},path:JC("/interactions")},{view:"agent-analytics",match:n0(/\/agents\/\d+\/analytics/),path:JC("/analytics")},{view:"editor",match:n0(/\/agents\/\d+\/edit/),path:JC("/edit")},{view:"runner",match:n0(/\/agents\/\d+\/run/),path:JC("/run")},{view:"history",match:n0(/\/agents\/\d+\/?$/)},{view:"replay",match:_Se},{view:"sessions",match:Ja("/sessions","/replay"),path:"/sessions"},{view:"sandbox",match:Ja("/sandbox","/demo"),path:"/sandbox"},{view:"organization",match:Ja("/organization"),path:"/organization"},{view:"settings",match:Ja("/settings"),path:"/settings"}],CSe="list",hY=[{id:"agents",label:null,items:[{view:"assistant",label:"Ask ActiveAgents",glyph:">"},{view:"list",label:"Agents",icon:"agents",badge:"agentCount"},{view:"builder",label:"New Agent",icon:"newAgent"},{view:"sandbox",label:"Run Agents",icon:"demo"},{view:"evaluations",label:"Evaluations",icon:"evaluations"},{view:"scenarios",label:"Scenarios",icon:"evaluations"}]},{id:"observability",label:"Observability",items:[{view:"traces",label:"Traces",icon:"traces"},{view:"interactions",label:"Interactions",icon:"interactions",badge:"pendingInputCount",badgeTone:"attention",badgeTitle:"requests waiting for an answer"},{view:"sessions",label:"Sessions",icon:"replay",also:["replay"]},{view:"metrics",label:"Metrics",icon:"metrics"}]},{id:"build",label:"Build",items:[{view:"projects",label:"Projects",glyph:""},{view:"tools",label:"Tools",icon:"tools"},{view:"mcp",label:"MCP Services",icon:"mcp"}]},{id:"workspace",label:"Workspace",items:[{view:"organization",label:"Organization",glyph:"\u{1F3E2}"},{view:"settings",label:"Settings",glyph:"\u2699\uFE0F"}]}];function yY(e={}){return{assistantEnabled:e.assistantEnabled!==!1}}function o0(e,t={}){return hI.every(r=>r.view!==e||!r.enabled||r.enabled(t))}function vY(e,t={}){for(let r of hI){if(r.enabled&&!r.enabled(t))continue;let n=r.match(e);if(n)return{view:r.view,...n}}return{view:CSe}}function QC(e,{agent:t=null,features:r={}}={}){if(!o0(e,r))return null;let n=hI.find(o=>o.view===e&&o.path!==void 0);return n&&(typeof n.path=="function"?n.path({agent:t}):n.path)||""}function xY(e){for(let t of hY){let r=t.items.find(n=>n.also?.includes(e));if(r)return r.view}return e}function gh(e,t){return!SSe.includes(e)||!/^[1-9]\d*$/.test(String(t))?null:e==="recording"?`/replay/${t}`:`/replay/${e}/${t}`}function bY(e={}){return hY.map(t=>({...t,items:t.items.filter(r=>o0(r.view,e))}))}var yI="/api/input_requests",RC="action-agent:input-requests-changed",SY=3e4,wY=100,ASe=["text","choice","confirm","secret"];function kY({agentId:e=null,runId:t=null}={}){let r=new URLSearchParams;e!=null&&r.set("agent_id",String(e)),t!=null&&r.set("run_id",String(t));let n=r.toString();return n?`${yI}?${n}`:yI}function hh(e){return(Array.isArray(e)?e:[]).filter(t=>t&&t.status==="pending")}function _Y(e){let t=hh(e).length;if(t!==0)return t>=wY?`${wY-1}+`:t}function vI(e){let t=e?.status;return t==="pending"||t==="running"?"poll":t==="awaiting_input"?hh(e.input_requests).length>0?"awaiting":"poll":"finished"}function xI(e){return ASe.includes(e?.kind)?e.kind:null}function CY(e){return(Array.isArray(e?.options)?e.options:[]).map(t=>{if(t&&typeof t=="object"){let r=String(t.value??t.label??"");return{value:r,label:String(t.label??r)}}return t==null?null:{value:String(t),label:String(t)}}).filter(t=>t&&t.value!=="")}function AY(e){return e?.id==null?"answer":`answer-${e.id}`}function EY(e){switch(xI(e)){case"text":return[{type:"form",submit:"Answer",fields:[{name:AY(e),label:"Your answer",type:"textarea",required:!0}]}];case"choice":return[{type:"choices",options:CY(e).map(t=>t.label)}];default:return[]}}function NY(e,t){if(t?.kind==="form"){let r=t.values?.[AY(e)];return r==null?void 0:String(r)}if(t?.kind==="choice")return CY(e).find(r=>r.label===t.text)?.value}var ESe={answered:"Already answered",declined:"Already declined",expired:"Expired before it was answered",cancelled:"Cancelled: the run ended"};function NSe(e,t={}){if(e>=200&&e<300)return{state:t?.input_request?.status==="declined"?"declined":"answered"};if(e===409){let r=t?.status||null;return{state:"closed",status:r,message:ESe[r]||"No longer waiting for an answer"}}return e===422?{state:"invalid",message:t?.error||"That answer does not fit this request"}:e===404?{state:"error",message:"This request is no longer available"}:{state:"error",message:t?.error||`Request failed (${e})`}}function bI(e){return["answered","declined","closed"].includes(e?.state)}async function TY(e,{answer:t,decline:r=!1}={},n=globalThis.fetch){let o=`${yI}/${encodeURIComponent(e.id)}/${r?"decline":"answer"}`,a;try{a=await n(o,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(r?{}:{answer:t})})}catch{return{state:"error",message:"Could not reach the server. Try again."}}let i=await a.json().catch(()=>({}));return NSe(a.status,i)}function OY(e,t){return t?.state==="closed"?t.message:t?.state==="declined"?e?.kind==="confirm"?"Declined: the tool does not run":"Declined":t?.state==="answered"?e?.kind==="confirm"?"Approved: the tool runs":"Answered: the run continues":null}function PY(e){return e?e.name?String(e.name):e.id!=null?`${e.type||"user"} #${e.id}`:null:null}function MY(e,t=Date.now()){if(!e)return null;let r=new Date(e).getTime();if(Number.isNaN(r))return null;let n=Math.floor((r-t)/6e4);if(n<0)return"expired";if(n<60)return`expires in ${Math.max(n,1)}m`;let o=Math.floor(n/60);return o<48?`expires in ${o}h`:`expires in ${Math.floor(o/24)}d`}function IY(e,t=Date.now()){return e?`asked ${iv(e,t)}`:null}function DY(e){let t=e?.arguments;return t==null||typeof t=="object"&&Object.keys(t).length===0?null:typeof t=="string"?t:JSON.stringify(t,null,2)}function jY(e){let t=e?.agent?.id,r=e?.run_id;if(t==null||r==null)return null;let n=QC("runner",{agent:{id:t}});return n?`${n}?run=${encodeURIComponent(r)}`:null}function $Y(e=""){let t=new URLSearchParams(e).get("run");return t&&/^\d+$/.test(t)?Number(t):null}function e2(){window.dispatchEvent(new CustomEvent(RC))}function t2({agentId:e=null,refreshKey:t,enabled:r=!0,intervalMs:n=SY}={}){let[o,a]=(0,Du.useState)(null),[i,s]=(0,Du.useState)(null),l=(0,Du.useRef)(0),u=(0,Du.useCallback)(async()=>{let c=++l.current;try{let d=await fetch(kY({agentId:e}));if(!d.ok)throw new Error(`Request failed (${d.status})`);let p=await d.json();if(c!==l.current)return;a(Array.isArray(p.input_requests)?p.input_requests:[]),s(null)}catch(d){if(c!==l.current)return;s(d.message)}},[e]);return(0,Du.useEffect)(()=>{if(!r)return;u();let c=setInterval(u,n);return window.addEventListener(RC,u),()=>{clearInterval(c),window.removeEventListener(RC,u),l.current+=1}},[r,u,n,t]),{requests:o,error:i,refresh:u}}var TSe={text:"question",choice:"choice",confirm:"approval",secret:"secret"},OSe={answered:"success",declined:"muted",closed:"warning"},wI={fontFamily:U,fontSize:11,color:"var(--color-text-muted)"},PSe={flex:1,minWidth:0,padding:"7px 10px",borderRadius:8,border:"1px solid var(--color-border-strong)",background:"var(--color-surface)",color:"var(--color-text-primary)",fontFamily:U,fontSize:13};function MSe({request:e,busy:t,onSubmit:r}){let[n,o]=(0,vr.useState)("");return vr.default.createElement("form",{onSubmit:i=>{if(i.preventDefault(),!n||t)return;let s=n;o(""),r(s)},style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"}},vr.default.createElement("input",{type:"password",autoComplete:"off",spellCheck:!1,"data-aa-secret":"","data-testid":"input-request-secret","aria-label":e.prompt,value:n,onChange:i=>o(i.target.value),disabled:t,style:PSe}),vr.default.createElement(de,{type:"submit",variant:"primary",size:"sm",disabled:t||!n,testId:"input-request-secret-submit"},t?"Sending\u2026":"Send"))}function ISe({request:e,busy:t,onApprove:r,onDecline:n}){let o=DY(e);return vr.default.createElement("div",{style:{display:"flex",flexDirection:"column",gap:8}},o&&vr.default.createElement("pre",{"data-testid":"input-request-arguments",style:{margin:0,padding:"8px 10px",borderRadius:8,maxHeight:200,overflow:"auto",whiteSpace:"pre-wrap",background:"var(--color-muted)",color:"var(--color-text-cell)",fontFamily:U,fontSize:12}},o),vr.default.createElement("div",{style:{display:"flex",gap:8,flexWrap:"wrap"}},vr.default.createElement(de,{variant:"primary",size:"sm",onClick:r,disabled:t,testId:"input-request-approve"},"Approve"),vr.default.createElement(de,{variant:"secondary",size:"sm",onClick:n,disabled:t,testId:"input-request-decline"},"Decline")))}function Jp({request:e,onSettled:t,initialOutcome:r=null,showRunLink:n=!0}){let{darkMode:o}=ut(),[a,i]=(0,vr.useState)(!1),[s,l]=(0,vr.useState)(r),u=xI(e),c=bI(s),d=async g=>{if(a||c)return;i(!0);let v=await TY(e,g);i(!1),l(v),bI(v)&&(e2(),t&&t(e,v))},p=g=>{g!==void 0&&d({answer:g})},f=()=>d({decline:!0}),m=n?jY(e):null,y=PY(e.actor),b=MY(e.expires_at),h=IY(e.created_at);return vr.default.createElement("div",{"data-testid":"input-request-card","data-kind":e.kind,"data-state":s?.state||"pending",style:{border:"1px solid var(--color-border)",borderRadius:10,background:"var(--color-card)",padding:"12px 14px",display:"flex",flexDirection:"column",gap:8}},vr.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"}},vr.default.createElement(ke,{tone:e.kind==="confirm"?"warning":"info",size:10},TSe[e.kind]||e.kind),vr.default.createElement("span",{style:{fontSize:13,fontWeight:600,color:"var(--color-text-primary)"}},e.agent?.name||"An agent"," is asking"),m&&vr.default.createElement(Vr,{href:et(m),onClick:()=>lt(m),title:"Open the run this request paused"},vr.default.createElement("span",{"data-testid":"input-request-run-link"},"run #",e.run_id)),b&&vr.default.createElement("span",{style:{...wI,marginLeft:"auto",color:b==="expired"?"var(--color-error-text)":wI.color}},b)),vr.default.createElement("div",{style:{fontSize:14,color:"var(--color-text-primary)",whiteSpace:"pre-wrap",overflowWrap:"anywhere"}},e.prompt),vr.default.createElement("div",{style:{...wI,display:"flex",gap:10,flexWrap:"wrap"}},y&&vr.default.createElement("span",{"data-testid":"input-request-actor"},"for ",y),e.tool_name&&vr.default.createElement("span",{"data-testid":"input-request-tool"},"via ",e.tool_name),h&&vr.default.createElement("span",null,h)),c?vr.default.createElement("div",{"data-testid":"input-request-outcome"},vr.default.createElement(ke,{tone:OSe[s.state]||"muted"},OY(e,s))):vr.default.createElement(vr.default.Fragment,null,(u==="text"||u==="choice")&&vr.default.createElement(_l,{blocks:EY(e),darkMode:o,onAction:g=>p(NY(e,g))}),u==="confirm"&&vr.default.createElement(ISe,{request:e,busy:a,onApprove:()=>p(!0),onDecline:f}),u==="secret"&&vr.default.createElement(MSe,{request:e,busy:a,onSubmit:p}),u!=="confirm"&&vr.default.createElement("div",null,vr.default.createElement(de,{variant:"ghost",size:"sm",onClick:f,disabled:a,testId:"input-request-decline",style:{padding:"2px 0"}},"Decline")),s?.message&&vr.default.createElement("div",{"data-testid":"input-request-error",role:"alert",style:{fontSize:12,color:"var(--color-error-text)"}},s.message)))}function DSe({pending:e,settled:t=[],onSettled:r}){return e.length===0&&t.length===0?null:Hs.default.createElement("section",{"data-testid":"needs-input-lane","aria-label":"Needs input",style:{border:"1px solid var(--color-warning)",borderRadius:12,background:"var(--color-warning-soft)",padding:14,display:"flex",flexDirection:"column",gap:10}},Hs.default.createElement("div",{style:{display:"flex",alignItems:"baseline",gap:10,flexWrap:"wrap"}},Hs.default.createElement(We,{color:"var(--color-warning-text)"},"Needs input"),Hs.default.createElement("span",{"data-testid":"needs-input-count",style:{fontFamily:U,fontSize:11,color:"var(--color-warning-text)"}},e.length," waiting"),Hs.default.createElement("span",{style:{fontSize:12,color:"var(--color-text-secondary)"}},"Each run is paused until its request is answered. Answering continues the same run.")),e.map(n=>Hs.default.createElement(Jp,{key:n.id,request:n,onSettled:r})),t.map(({request:n,outcome:o})=>Hs.default.createElement(Jp,{key:n.id,request:n,initialOutcome:o})))}function SI({agentId:e=null}){let{requests:t}=t2({agentId:e}),[r,n]=(0,Hs.useState)([]),o=new Set(r.map(({request:s})=>s.id)),a=hh(t).filter(s=>!o.has(s.id));return Hs.default.createElement(DSe,{pending:a,settled:r,onSettled:(s,l)=>{n(u=>[...u.filter(c=>c.request.id!==s.id),{request:s,outcome:l}])}})}var gr=Z(J());function LY(e=[],t=""){let r=t.trim().toLowerCase();return e.filter(n=>n.status!=="archived"&&n.status!=="observed").filter(n=>!r||`${n.name||""} ${n.description||""}`.toLowerCase().includes(r)).sort((n,o)=>{let a=i=>i.status==="active"?0:1;return a(n)-a(o)||String(n.name||"").localeCompare(String(o.name||""))})}var zY=e=>`/agents/${e.id}/run?new=1`;function a0({inline:e=!1,label:t="New interaction"}){let[r,n]=(0,gr.useState)(e),[o,a]=(0,gr.useState)(null),[i,s]=(0,gr.useState)(null),[l,u]=(0,gr.useState)(""),c=(0,gr.useRef)(null);(0,gr.useEffect)(()=>{!r||o||fetch("/api/agents").then(f=>{if(!f.ok)throw new Error(`HTTP ${f.status}`);return f.json()}).then(f=>a(f.agents||[])).catch(f=>s(f.message))},[r,o]),(0,gr.useEffect)(()=>{if(e||!r)return;let f=m=>{c.current&&!c.current.contains(m.target)&&n(!1)};return document.addEventListener("mousedown",f),()=>document.removeEventListener("mousedown",f)},[e,r]);let d=(0,gr.useMemo)(()=>LY(o||[],l),[o,l]),p=gr.default.createElement("div",{"data-testid":"new-interaction-agents"},(o?.length||0)>6&&gr.default.createElement("input",{type:"search",value:l,onChange:f=>u(f.target.value),placeholder:"Find an agent","aria-label":"Find an agent",autoFocus:!e,className:"w-full mb-2 px-3 py-1.5 text-sm rounded-lg",style:{background:"var(--color-muted)",border:"1px solid var(--color-border)",color:"var(--color-text-primary)"}}),i&&gr.default.createElement("p",{className:"text-sm",style:{color:"var(--color-error)"}},"Could not load agents: ",i),!o&&!i&&gr.default.createElement("p",{className:"text-sm",style:{color:"var(--color-text-muted)"}},"Loading agents\u2026"),o&&d.length===0&&gr.default.createElement(Jr,null,o.length===0?"No agents in this workspace yet.":"No agent matches."," ",gr.default.createElement("a",{href:"#",onClick:f=>{f.preventDefault(),lt("/agents/new")},style:{color:"var(--color-info)"}},"Create an agent")),gr.default.createElement("ul",{className:"space-y-1 max-h-80 overflow-y-auto"},d.map(f=>gr.default.createElement("li",{key:f.id},gr.default.createElement("button",{type:"button","data-testid":`new-interaction-agent-${f.id}`,onClick:()=>lt(zY(f)),className:"w-full text-left px-3 py-2 rounded-lg block",style:{border:"1px solid var(--color-border)",background:"var(--color-card)",cursor:"pointer"}},gr.default.createElement("span",{className:"flex items-center justify-between gap-2"},gr.default.createElement("span",{className:"text-sm font-medium truncate min-w-0",style:{color:"var(--color-text-primary)"}},f.name),f.status&&f.status!=="active"&&gr.default.createElement(ke,{tone:"muted"},f.status)),gr.default.createElement("span",{className:"block truncate",style:{fontFamily:U,fontSize:11,color:"var(--color-text-muted)"}},f.provider,"/",f.model),f.description&&gr.default.createElement("span",{className:"block text-xs truncate",style:{color:"var(--color-text-secondary)"}},f.description))))));return e?gr.default.createElement($e,{testId:"new-interaction-card"},gr.default.createElement("div",{className:"flex items-baseline justify-between mb-3 gap-3"},gr.default.createElement("div",null,gr.default.createElement(We,null,"Your agents"),gr.default.createElement("p",{className:"text-sm mt-1",style:{color:"var(--color-text-secondary)"}},"Start a new interaction. It runs with the instructions, tools and MCP servers saved on the agent."))),p):gr.default.createElement("div",{ref:c,className:"relative"},gr.default.createElement(de,{variant:"primary",size:"sm",testId:"new-interaction",onClick:()=>n(f=>!f)},t),r&&gr.default.createElement("div",{className:"absolute right-0 mt-2 z-20 p-3 rounded-xl",style:{width:360,background:"var(--color-card)",border:"1px solid var(--color-border)",boxShadow:"0 8px 24px rgba(0,0,0,0.12)"}},gr.default.createElement(We,{style:{display:"block",marginBottom:8}},"Start a conversation with"),p))}var Xe=Z(J());var n2=(e,t)=>e!=null&&e>=400&&e<500||t>=5;var qs=(e,t)=>`${e} ${t}${e===1?"":"s"}`,i0=(e,t)=>{let r=String(e??"");return r.length>t?`${r.slice(0,t-1)}\u2026`:r},o2=e=>String(e||"").replace(/_/g," ").replace(/^\w/,t=>t.toUpperCase()),BY=e=>String(e??"").replace(/\s+/g," ").trim(),Qp=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),yh=e=>{try{return JSON.stringify(e)??String(e)}catch{return String(e)}},a2=e=>{if(e==null||e===""||Number.isNaN(Number(e)))return null;let t=Number(e);return t===0?"$0.00":Math.abs(t)<.01?`$${t.toFixed(4)}`:`$${t.toFixed(2)}`},kI=e=>{if(e==null||e===""||Number.isNaN(Number(e)))return null;let t=Math.max(0,Number(e));if(t<1e3)return`${Math.round(t)}ms`;if(t<6e4)return`${(t/1e3).toFixed(1).replace(/\.0$/,"")}s`;let r=Math.round(t/1e3);return r<3600?`${Math.floor(r/60)}m ${r%60}s`:`${Math.floor(r/3600)}h ${Math.floor(r%3600/60)}m`},WY=(e,{num_turns:t,total_cost_usd:r,duration_ms:n}={})=>[e,t==null||t===""?null:qs(Number(t),"turn"),a2(r),kI(n)].filter(Boolean).join(" \xB7 "),HY=(e,t=Date.now())=>{if(!e)return null;let r=new Date(e).getTime();if(Number.isNaN(r))return null;let n=Math.ceil((r-t)/6e4);return n<=0?"past its expiry":n<60?`expires in ${n}m`:`expires in ${Math.floor(n/60)}h${n%60?` ${n%60}m`:""}`},at=(e,t)=>{let r=i=>Array.isArray(i)?i.filter(Boolean).join(", "):typeof i=="string"?i:"",n=Qp(e)?e:{},o=r(n.error)||r(n.errors),a=typeof n.message=="string"?n.message:"";return o&&a?`${o}: ${a}`:o||a||t},jSe={pending:{label:"Queued",tone:"progress"},provisioning:{label:"Booting",tone:"progress"},ready:{label:"Ready",tone:"success"},running:{label:"Running",tone:"success"},completed:{label:"Completed",tone:"neutral"},expired:{label:"Stopped",tone:"neutral"},failed:{label:"Failed",tone:"error"}},qY=e=>jSe[e]||{label:o2(e)||"Unknown",tone:"neutral"},i2=e=>["pending","provisioning"].includes(e?.status),KY=e=>e?.status==="ready",$Se={queued:{label:"Queued",tone:"progress"},running:{label:"Running",tone:"progress"},succeeded:{label:"Succeeded",tone:"success"},failed:{label:"Failed",tone:"error"},cancelled:{label:"Cancelled",tone:"neutral"}},gs=e=>$Se[e]||{label:o2(e)||"Unknown",tone:"neutral"},Ks=e=>["queued","running"].includes(e?.status),c0=e=>["succeeded","failed","cancelled"].includes(e?.status),_I=e=>c0(e)&&e?.diff_pending===!0,CI=e=>c0(e)&&!_I(e),VY=e=>e?.status==="cancelled"&&CI(e)&&e?.diff==null&&!(Number(e?.event_count)>0),AI=e=>{if(!c0(e)){let t=Number(e?.event_count)||0;return t>0?qs(t,"event"):""}return WY(null,e)},GY=e=>[gs(e?.status).label,AI(e)].filter(Boolean).join(" \xB7 "),YY=(e,t=80)=>{let r=String(e||"").split(` `).map(n=>n.trim()).find(Boolean)||"";return i0(r,t)||"(empty prompt)"},ld=(e,t,r)=>{if(!t||t[r]==null)return e;let n=e.findIndex(a=>a[r]===t[r]);if(n===-1)return[t,...e];let o=e.slice();return o[n]={...e[n],...t},o},XY=(e,t,r)=>t&&e.some(n=>n[r]===t[r])?ld(e,t,r):e,ZY=e=>{if(!e)return e;let{events:t,events_offset:r,dropped_events_count:n,diff:o,...a}=e;return a},JY=(e,t)=>{let r=new Set(t||[]),n={},o=[];return(e||[]).forEach(a=>{!a||a.status==="expired"||a.sandbox_type&&a.sandbox_type!=="app_runtime"||(r.has(a.repository)?(n[a.repository]||=[]).push(a):o.push(a))}),{byRepository:n,others:o}},QY=(e,t)=>{let r=Array.isArray(e)?e:[],n=Array.isArray(t?.events)?t.events:[],o=Math.max(0,Math.min(Number(t?.events_offset)||0,r.length));return[...r.slice(0,o),...n]},Cl=(e,t)=>{let r=String(e??"");if(!t)return r;let n=String(t).replace(/\/+$/,"");return r===n?".":r.startsWith(`${n}/`)?r.slice(n.length+1):r},LSe={Bash:e=>e.command,Read:(e,t)=>Cl(e.file_path,t),Write:(e,t)=>Cl(e.file_path,t),Edit:(e,t)=>Cl(e.file_path,t),MultiEdit:(e,t)=>{let r=Array.isArray(e.edits)?` (${qs(e.edits.length,"edit")})`:"";return`${Cl(e.file_path,t)}${r}`},NotebookEdit:(e,t)=>Cl(e.notebook_path,t),NotebookRead:(e,t)=>Cl(e.notebook_path,t),Glob:(e,t)=>e.path?`${e.pattern} in ${Cl(e.path,t)}`:e.pattern,Grep:(e,t)=>[`"${e.pattern}"`,e.path&&`in ${Cl(e.path,t)}`,e.glob&&`(${e.glob})`].filter(Boolean).join(" "),LS:(e,t)=>Cl(e.path,t),WebFetch:e=>e.url,WebSearch:e=>e.query,Task:e=>e.description||e.prompt,Agent:e=>e.description||e.prompt,TodoWrite:e=>Array.isArray(e.todos)?qs(e.todos.length,"todo"):"",BashOutput:e=>e.bash_id,KillShell:e=>e.shell_id,KillBash:e=>e.shell_id,Skill:e=>e.skill||e.command,SlashCommand:e=>e.command},zSe=["command","file_path","path","url","query","pattern","description","name","prompt"],BSe=(e,t,{cwd:r}={})=>{if(t==null)return"";if(!Qp(t))return i0(BY(typeof t=="string"?t:yh(t)),120);let n=LSe[e],o=n?n(t,r):null;if(o==null||o===""){let a=zSe.find(i=>typeof t[i]=="string"&&t[i].trim());a?o=["file_path","path"].includes(a)?Cl(t[a],r):t[a]:o=Object.keys(t).length?yh(t):""}return i0(BY(o),120)},FSe=e=>e==null?"":typeof e=="string"?e:Array.isArray(e)?e.map(t=>typeof t=="string"?t:t?.type==="text"?t.text??"":t?.type==="image"?"[image]":yh(t)).join(` `):yh(e),USe=(e,{chars:t=600,lines:r=12}={})=>{let n=String(e??"").replace(/\s+$/,""),o=n.split(` `).slice(0,r).join(` diff --git a/actionagent/frontend/test/dashboardRoutes.test.mjs b/actionagent/frontend/test/dashboardRoutes.test.mjs index de5678707..bf1f05bd8 100644 --- a/actionagent/frontend/test/dashboardRoutes.test.mjs +++ b/actionagent/frontend/test/dashboardRoutes.test.mjs @@ -239,19 +239,21 @@ const EXPECTED_NAV = [ ['list', 'Agents', { icon: 'agents', badge: 'agentCount' }], ['builder', 'New Agent', { icon: 'newAgent' }], ['sandbox', 'Run Agents', { icon: 'demo' }], - ['projects', 'Projects', { glyph: '' }], + ['evaluations', 'Evaluations', { icon: 'evaluations' }], + ['scenarios', 'Scenarios', { icon: 'evaluations' }], ]], ['observability', 'Observability', [ ['traces', 'Traces', { icon: 'traces' }], ['interactions', 'Interactions', { icon: 'interactions', badge: 'pendingInputCount', badgeTone: 'attention', badgeTitle: 'requests waiting for an answer', }], + ['sessions', 'Sessions', { icon: 'replay', also: ['replay'] }], + ['metrics', 'Metrics', { icon: 'metrics' }], + ]], + ['build', 'Build', [ + ['projects', 'Projects', { glyph: '' }], ['tools', 'Tools', { icon: 'tools' }], ['mcp', 'MCP Services', { icon: 'mcp' }], - ['metrics', 'Metrics', { icon: 'metrics' }], - ['evaluations', 'Evaluations', { icon: 'evaluations' }], - ['scenarios', 'Scenarios', { icon: 'evaluations' }], - ['sessions', 'Sessions', { icon: 'replay', also: ['replay'] }], ]], ['workspace', 'Workspace', [ ['organization', 'Organization', { glyph: '🏢' }], @@ -267,7 +269,7 @@ const expectedNav = (assistantEnabled) => EXPECTED_NAV.map(([id, label, items]) .map(([view, itemLabel, extra]) => ({ view, label: itemLabel, ...extra })), })); -test('the sidebar lists its views in three sections', () => { +test('the sidebar lists its views in four sections, agents and evaluations first', () => { assert.deepEqual(dashboardNavSections(ON), expectedNav(true)); }); diff --git a/actionagent/frontend/utils/dashboardRoutes.mjs b/actionagent/frontend/utils/dashboardRoutes.mjs index d2f332aa8..1ca435857 100644 --- a/actionagent/frontend/utils/dashboardRoutes.mjs +++ b/actionagent/frontend/utils/dashboardRoutes.mjs @@ -133,7 +133,8 @@ export const DASHBOARD_NAV = [ { view: 'list', label: 'Agents', icon: 'agents', badge: 'agentCount' }, { view: 'builder', label: 'New Agent', icon: 'newAgent' }, { view: 'sandbox', label: 'Run Agents', icon: 'demo' }, - { view: 'projects', label: 'Projects', glyph: '' }, + { view: 'evaluations', label: 'Evaluations', icon: 'evaluations' }, + { view: 'scenarios', label: 'Scenarios', icon: 'evaluations' }, ], }, { @@ -149,12 +150,18 @@ export const DASHBOARD_NAV = [ badgeTone: 'attention', badgeTitle: 'requests waiting for an answer', }, + { view: 'sessions', label: 'Sessions', icon: 'replay', also: ['replay'] }, + { view: 'metrics', label: 'Metrics', icon: 'metrics' }, + ], + }, + { + // What agents run with: checkouts, tools and MCP servers. + id: 'build', + label: 'Build', + items: [ + { view: 'projects', label: 'Projects', glyph: '' }, { view: 'tools', label: 'Tools', icon: 'tools' }, { view: 'mcp', label: 'MCP Services', icon: 'mcp' }, - { view: 'metrics', label: 'Metrics', icon: 'metrics' }, - { view: 'evaluations', label: 'Evaluations', icon: 'evaluations' }, - { view: 'scenarios', label: 'Scenarios', icon: 'evaluations' }, - { view: 'sessions', label: 'Sessions', icon: 'replay', also: ['replay'] }, ], }, {