@anvia/studio 0.7.54 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/index.js +3 -5
  2. package/dist/index.js.map +1 -1
  3. package/dist/ui/assets/ArrowClockwise.es-CSN-gjxO.js +2 -0
  4. package/dist/ui/assets/ArrowClockwise.es-CSN-gjxO.js.map +1 -0
  5. package/dist/ui/assets/agents-page-CkNSbqAj.js +2 -0
  6. package/dist/ui/assets/agents-page-CkNSbqAj.js.map +1 -0
  7. package/dist/ui/assets/badge-RJJoRC4P.js +2 -0
  8. package/dist/ui/assets/badge-RJJoRC4P.js.map +1 -0
  9. package/dist/ui/assets/{chunk-ADH7NNCS-B-yOk_VP.js → chunk-ADH7NNCS-DM6fsnDI.js} +1 -1
  10. package/dist/ui/assets/{chunk-ADH7NNCS-B-yOk_VP.js.map → chunk-ADH7NNCS-DM6fsnDI.js.map} +1 -1
  11. package/dist/ui/assets/favicon.svg +7 -0
  12. package/dist/ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  13. package/dist/ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  14. package/dist/ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  15. package/dist/ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  16. package/dist/ui/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  17. package/dist/ui/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  18. package/dist/ui/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  19. package/dist/ui/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  20. package/dist/ui/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  21. package/dist/ui/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  22. package/dist/ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  23. package/dist/ui/assets/index-Bh7RLPBw.js +56 -0
  24. package/dist/ui/assets/index-Bh7RLPBw.js.map +1 -0
  25. package/dist/ui/assets/index-D-CbFx6c.css +1 -0
  26. package/dist/ui/assets/input-BOUv3rgO.js +2 -0
  27. package/dist/ui/assets/input-BOUv3rgO.js.map +1 -0
  28. package/dist/ui/assets/knowledge-page-Cot_uYcE.js +2 -0
  29. package/dist/ui/assets/knowledge-page-Cot_uYcE.js.map +1 -0
  30. package/dist/ui/assets/mcps-page-BSO6ork4.js +2 -0
  31. package/dist/ui/assets/mcps-page-BSO6ork4.js.map +1 -0
  32. package/dist/ui/assets/memory-page-CG84G--r.js +4 -0
  33. package/dist/ui/assets/memory-page-CG84G--r.js.map +1 -0
  34. package/dist/ui/assets/pipelines-page-Hbf5ffUH.js +8 -0
  35. package/dist/ui/assets/pipelines-page-Hbf5ffUH.js.map +1 -0
  36. package/dist/ui/assets/{renderers-B3IhuxP9.js → renderers-B8gvjR2u.js} +3 -3
  37. package/dist/ui/assets/{renderers-B3IhuxP9.js.map → renderers-B8gvjR2u.js.map} +1 -1
  38. package/dist/ui/assets/sandboxes-page-D910dyFO.js +2 -0
  39. package/dist/ui/assets/sandboxes-page-D910dyFO.js.map +1 -0
  40. package/dist/ui/assets/sessions-page-CSN2vSKZ.js +2 -0
  41. package/dist/ui/assets/sessions-page-CSN2vSKZ.js.map +1 -0
  42. package/dist/ui/assets/status-page-CgRNt0wi.js +2 -0
  43. package/dist/ui/assets/status-page-CgRNt0wi.js.map +1 -0
  44. package/dist/ui/assets/tool-runner-BZN-PZJU.js +2 -0
  45. package/dist/ui/assets/tool-runner-BZN-PZJU.js.map +1 -0
  46. package/dist/ui/assets/tools-page-DRv7aklU.js +2 -0
  47. package/dist/ui/assets/tools-page-DRv7aklU.js.map +1 -0
  48. package/dist/ui/assets/trace-browser-B07coNNE.js +10 -0
  49. package/dist/ui/assets/trace-browser-B07coNNE.js.map +1 -0
  50. package/dist/ui/assets/transcript-item-ZNkQEaCw.js +3 -0
  51. package/dist/ui/assets/transcript-item-ZNkQEaCw.js.map +1 -0
  52. package/dist/ui/index.html +17 -6
  53. package/package.json +6 -5
  54. package/dist/ui/assets/agents-page-Bbbg-x2R.js +0 -2
  55. package/dist/ui/assets/agents-page-Bbbg-x2R.js.map +0 -1
  56. package/dist/ui/assets/badge-D7D2A73-.js +0 -2
  57. package/dist/ui/assets/badge-D7D2A73-.js.map +0 -1
  58. package/dist/ui/assets/evals-page-qETOz5hz.js +0 -2
  59. package/dist/ui/assets/evals-page-qETOz5hz.js.map +0 -1
  60. package/dist/ui/assets/format-D43vTqrO.js +0 -2
  61. package/dist/ui/assets/format-D43vTqrO.js.map +0 -1
  62. package/dist/ui/assets/index-CQhv4Ee3.js +0 -56
  63. package/dist/ui/assets/index-CQhv4Ee3.js.map +0 -1
  64. package/dist/ui/assets/index-CzSafghW.css +0 -1
  65. package/dist/ui/assets/knowledge-page-Zl9WuYXr.js +0 -2
  66. package/dist/ui/assets/knowledge-page-Zl9WuYXr.js.map +0 -1
  67. package/dist/ui/assets/mcps-page-dx-N6xMI.js +0 -2
  68. package/dist/ui/assets/mcps-page-dx-N6xMI.js.map +0 -1
  69. package/dist/ui/assets/memory-page-De0f9jEy.js +0 -4
  70. package/dist/ui/assets/memory-page-De0f9jEy.js.map +0 -1
  71. package/dist/ui/assets/pipelines-page-DKwpA_KG.js +0 -8
  72. package/dist/ui/assets/pipelines-page-DKwpA_KG.js.map +0 -1
  73. package/dist/ui/assets/sandboxes-page-CRLiE4bv.js +0 -2
  74. package/dist/ui/assets/sandboxes-page-CRLiE4bv.js.map +0 -1
  75. package/dist/ui/assets/sessions-page-CgXxbgEX.js +0 -2
  76. package/dist/ui/assets/sessions-page-CgXxbgEX.js.map +0 -1
  77. package/dist/ui/assets/status-page-BPANk1WS.js +0 -2
  78. package/dist/ui/assets/status-page-BPANk1WS.js.map +0 -1
  79. package/dist/ui/assets/tool-runner-DdnPk1NY.js +0 -2
  80. package/dist/ui/assets/tool-runner-DdnPk1NY.js.map +0 -1
  81. package/dist/ui/assets/tools-page-DnCMxRrP.js +0 -2
  82. package/dist/ui/assets/tools-page-DnCMxRrP.js.map +0 -1
  83. package/dist/ui/assets/trace-browser-C4ZQweab.js +0 -10
  84. package/dist/ui/assets/trace-browser-C4ZQweab.js.map +0 -1
  85. package/dist/ui/assets/transcript-item-B7FFJ52t.js +0 -3
  86. package/dist/ui/assets/transcript-item-B7FFJ52t.js.map +0 -1
@@ -1,10 +0,0 @@
1
- import{i as e,r as t,s as n,t as r}from"./utils-C9GMruoG.js";import{a as i,c as a,l as o,m as s,p as c,r as l,s as u,u as d}from"./format-D43vTqrO.js";import{A as f,D as p,E as m,H as h,I as g,K as _,L as v,O as y,T as b,U as x,V as S,W as C,X as w,_ as T,at as E,b as ee,ct as D,k as O,nt as te,ot as ne,st as re,tt as ie,z as k}from"./index-CQhv4Ee3.js";import{t as ae}from"./badge-D7D2A73-.js";var A=n(e(),1),j=t();function oe(e){try{return JSON.stringify(e,null,2)??`undefined`}catch{return String(e)}}function se(e){return(0,j.jsx)(`div`,{className:`overflow-x-auto rounded-lg bg-card/85 px-4 py-4 text-sm leading-6 text-foreground`,children:(0,j.jsx)(ue,{depth:0,path:`$`,value:e.value})})}var ce=16,le=20;function ue(e){return pe(e.value)?(0,j.jsx)(de,{arrayIndex:e.arrayIndex,depth:e.depth,path:e.path,propertyKey:e.propertyKey,trailingComma:e.trailingComma,value:e.value}):(0,j.jsxs)(`div`,{className:`min-w-max whitespace-pre`,style:{paddingLeft:`${M(e.depth)}px`},children:[(0,j.jsx)(N,{arrayIndex:e.arrayIndex,propertyKey:e.propertyKey}),(0,j.jsx)(fe,{value:e.value}),e.trailingComma?(0,j.jsx)(`span`,{className:`text-foreground`,children:`,`}):null]})}function de(e){let[t,n]=(0,A.useState)(e.depth===0),r=Array.isArray(e.value)?e.value:void 0,i=r===void 0?Object.entries(e.value):r.map((e,t)=>[String(t),e]),a=r===void 0?`{`:`[`,o=r===void 0?`}`:`]`,s=r===void 0?`{…}`:`[…]`;return i.length===0?(0,j.jsxs)(`div`,{className:`min-w-max whitespace-pre`,style:{paddingLeft:`${M(e.depth)}px`},children:[(0,j.jsx)(N,{arrayIndex:e.arrayIndex,propertyKey:e.propertyKey}),(0,j.jsxs)(`span`,{className:`text-foreground`,children:[a,o,e.trailingComma?`,`:``]})]}):(0,j.jsxs)(`div`,{className:`grid min-w-max`,children:[(0,j.jsxs)(`button`,{"aria-expanded":t,className:`grid min-w-max grid-cols-[16px_auto] items-center gap-1 rounded-lg py-0.5 pr-2 text-left transition duration-200 hover:bg-accent/45 hover:text-accent-foreground`,onClick:()=>n(e=>!e),style:{paddingLeft:`${e.depth*ce}px`},type:`button`,children:[(0,j.jsx)(`span`,{className:`grid h-4 w-4 place-items-center text-muted-foreground [&_svg]:h-3 [&_svg]:w-3`,children:t?(0,j.jsx)(g,{icon:S,"aria-hidden":`true`}):(0,j.jsx)(g,{icon:x,"aria-hidden":`true`})}),(0,j.jsxs)(`span`,{className:`whitespace-pre`,children:[(0,j.jsx)(N,{arrayIndex:e.arrayIndex,propertyKey:e.propertyKey}),t?(0,j.jsx)(`span`,{className:`text-foreground`,children:a}):(0,j.jsx)(`span`,{className:`text-muted-foreground`,children:s}),!t&&e.trailingComma?(0,j.jsx)(`span`,{className:`text-foreground`,children:`,`}):null]})]}),t?(0,j.jsxs)(j.Fragment,{children:[i.map(([t,n],a)=>(0,j.jsx)(ue,{arrayIndex:r===void 0?void 0:Number(t),depth:e.depth+1,path:`${e.path}.${t}`,propertyKey:r===void 0?t:void 0,trailingComma:a<i.length-1,value:n},`${e.path}.${t}`)),(0,j.jsxs)(`div`,{className:`min-w-max whitespace-pre text-foreground`,style:{paddingLeft:`${M(e.depth)}px`},children:[o,e.trailingComma?`,`:``]})]}):null]})}function M(e){return e*ce+le}function N(e){return e.propertyKey===void 0?e.arrayIndex===void 0?null:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`span`,{className:`text-muted-foreground`,children:[`[`,e.arrayIndex,`]`]}),(0,j.jsx)(`span`,{className:`text-foreground`,children:` `})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:`text-muted-foreground`,children:JSON.stringify(e.propertyKey)}),(0,j.jsx)(`span`,{className:`text-foreground`,children:`: `})]})}function fe(e){return typeof e.value==`string`?(0,j.jsx)(`span`,{className:`text-foreground`,children:JSON.stringify(e.value)}):typeof e.value==`number`?(0,j.jsx)(`span`,{className:`text-foreground`,children:String(e.value)}):typeof e.value==`boolean`?(0,j.jsx)(`span`,{className:`text-chart-4`,children:String(e.value)}):e.value===null?(0,j.jsx)(`span`,{className:`text-muted-foreground`,children:`null`}):e.value===void 0?(0,j.jsx)(`span`,{className:`text-muted-foreground`,children:`undefined`}):(0,j.jsx)(`span`,{className:`text-foreground`,children:oe(e.value)})}function pe(e){return Array.isArray(e)||s(e)}function me(e){return e.label===`Message Id`}function he(e){let t=`h-3.5 w-3.5 shrink-0`;switch(e.label){case`System prompt`:return(0,j.jsx)(g,{icon:ne,"aria-hidden":`true`,className:t});case`Prompt`:return(0,j.jsx)(g,{icon:_,"aria-hidden":`true`,className:t});case`Output`:case`Assistant output`:return(0,j.jsx)(g,{icon:C,"aria-hidden":`true`,className:t});default:return null}}function ge(e,t){if(e===`Output`){let e=_e(t);if(e.length>0)return e}let n=P(t,e);if(n.length>0)return n;if(!s(t))return[{label:e,text:xe(t)}];let r=[];for(let[e,n]of Object.entries(t)){let t=P(n,e);if(t.length>0){r.push(...t);continue}r.push({label:I(e),text:xe(n)})}return r.length>0?r:[{label:e,text:`Empty object`}]}function _e(e){if(!s(e))return[];let t=[],n=P(e.choice,`choice`);return t.push(...n),typeof e.messageId==`string`&&e.messageId.length>0&&t.push({label:`Message Id`,text:e.messageId}),t}function P(e,t){if(typeof e==`string`&&t===void 0)return[{label:`Value`,text:e}];if(Array.isArray(e))return t===`chatHistory`?ve(e):t===`history`?ye(e):e.map((e,n)=>({label:F(e,n,t),text:D(e)||u(e)})).filter(e=>e.text.length>0);if(!s(e))return[];let n=Array.isArray(e.chatHistory)?e.chatHistory:void 0;if(n!==void 0){let t=be(e);return t.push(...P(n,`chatHistory`)),t}if(Array.isArray(e.prompt))return P(e.prompt,`prompt`);let r=[];r.push(...be(e));let i=Array.isArray(e.history)?e.history:[];i.length>0&&r.push(...P(i,`history`));let a=D(e.prompt);return a.length>0&&r.push({label:i.length>0?`Current prompt`:`Prompt`,text:a}),r}function ve(e){let t=e.map((e,t)=>({label:F(e,t,`chatHistory`),text:D(e)||u(e)})).filter(e=>e.text.length>0),n=t.at(-1),r=t.slice(0,-1),i=[];return r.length>0&&i.push({label:`Conversation history (${r.length})`,text:r.map((e,t)=>`${t+1}. ${e.label}\n${e.text}`).join(`
2
-
3
- `)}),n!==void 0&&i.push({label:r.length>0?`Current prompt`:`Prompt`,text:n.text}),i}function ye(e){let t=e.map((e,t)=>({label:F(e,t,`history`),text:D(e)||u(e)})).filter(e=>e.text.length>0);return t.length===0?[]:[{label:`Conversation history (${t.length})`,text:t.map((e,t)=>`${t+1}. ${e.label}\n${e.text}`).join(`
4
-
5
- `)}]}function F(e,t,n){if(s(e)){let t=typeof e.type==`string`?e.type:void 0;if(n===`choice`){if(t===`text`)return`Assistant output`;if(t===`reasoning`)return`Reasoning`}if(t===`reasoning`)return`Reasoning`;if(typeof e.role==`string`)return I(e.role);if(t!==void 0)return I(t)}return`${n===void 0?`Item`:`${I(n)} item`} ${t+1}`}function I(e){return e.replace(/[_-]+/g,` `).replace(/([a-z0-9])([A-Z])/g,`$1 $2`).trim().replace(/\b\w/g,e=>e.toUpperCase())}function be(e){let t=e.instructions;return typeof t!=`string`||t.trim().length===0?[]:[{label:`System prompt`,text:t}]}function xe(e){if(e===void 0)return`undefined`;if(e===null)return`null`;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Se(e){let t=new Map;for(let n of e.observations){let e=Number.isFinite(n.turn)?n.turn:t.size+1;t.set(e,[...t.get(e)??[],n])}return[...t.entries()].sort(([e],[t])=>e-t).map(([e,t])=>({turn:e,observations:t,durationMs:t.reduce((e,t)=>e+(t.durationMs??0),0)}))}function Ce(e){let t=new Map;for(let n of e)t.set(n.id,{observation:n,children:[]});let n=[];for(let r of e){let e=t.get(r.id);if(e===void 0)continue;let i=r.parentObservationId,a=i===void 0?void 0:t.get(i);a===void 0?n.push(e):a.children.push(e)}return n}function we(e,t,n){if(n===`agent`)return{title:`agent.run`,tone:`agent`,startedAt:o(e.startedAt),durationMs:e.durationMs,firstDeltaMs:R(e.observations),usage:d(e.usage),input:e.input,output:e.output,error:e.error,metadata:Te(e)};if(n.startsWith(`turn:`)){let r=Number(n.slice(5)),i=t.find(e=>e.turn===r);return{title:`turn.${Number.isFinite(r)?r:1}`,tone:`turn`,startedAt:o(i?.observations[0]?.startedAt??e.startedAt),durationMs:i?.durationMs,firstDeltaMs:R(i?.observations??[]),usage:Be(i?.observations??[]),input:i?.observations[0]?.input,output:i?.observations.at(-1)?.output,metadata:Ee(r,i?.observations??[])}}if(n.startsWith(`observation:`)){let t=n.slice(12),r=e.observations.find(e=>e.id===t);if(r!==void 0)return{title:Fe(r),tone:r.kind,startedAt:o(r.startedAt),durationMs:r.durationMs,firstDeltaMs:Ie(r.metadata),usage:z(r),input:r.input,output:r.output,error:r.error,metadata:De(r)}}return{title:e.name??`Agent`,tone:`trace`,startedAt:o(e.startedAt),durationMs:e.durationMs,firstDeltaMs:R(e.observations),usage:d(e.usage),input:e.input,output:e.output,error:e.error,metadata:Te(e)}}function Te(e){let t=s(e.metadata)?e.metadata:{},n=L({status:e.status,traceId:e.trace?.traceId??e.id,observationId:e.trace?.observationId,sessionId:e.sessionId,observationCount:e.observationCount,messageCount:Pe(t.messages),startedAt:e.startedAt,endedAt:e.endedAt,durationMs:e.durationMs});return L({...t,status:e.status,traceId:e.trace?.traceId??e.id,observationId:e.trace?.observationId,sessionId:e.sessionId,observationCount:e.observationCount,messageCount:Pe(t.messages),startedAt:e.startedAt,endedAt:e.endedAt,durationMs:e.durationMs,trace:s(t.trace)?t.trace:n})}function Ee(e,t){return L({turn:e,observationCount:t.length,generationCount:t.filter(e=>e.kind===`generation`).length,toolCount:t.filter(e=>e.kind===`tool`).length,agentCount:t.filter(e=>e.kind===`agent`).length,firstDeltaMs:R(t),status:Ne(t),startedAt:t[0]?.startedAt,endedAt:t.at(-1)?.endedAt})}function De(e){let t=L({...s(e.metadata)?e.metadata:{},status:e.status,kind:e.kind,turn:e.turn,parentObservationId:e.parentObservationId??null,startedAt:e.startedAt,endedAt:e.endedAt??null,durationMs:e.durationMs});return L({...t,trace:s(t.trace)?t.trace:L({status:e.status,kind:e.kind,turn:e.turn,parentObservationId:e.parentObservationId??null,startedAt:e.startedAt,endedAt:e.endedAt??null,durationMs:e.durationMs}),modelInfo:s(t.modelInfo)?t.modelInfo:Oe(t),modelCall:s(t.modelCall)?t.modelCall:ke(t),response:s(t.response)?t.response:Ae(t),tools:s(t.tools)?t.tools:je(t),timing:s(t.timing)?t.timing:Me(t)})}function Oe(e){let t=L({provider:e.provider,model:e.model,requestedModel:e.requestedModel,defaultModel:e.defaultModel});return Object.keys(t).length===0?void 0:t}function ke(e){let t=L({messageCount:e.historyCount,documentCount:e.documentCount,toolCount:e.toolCount,toolNames:e.toolNames,temperature:e.temperature,maxTokens:e.maxTokens,toolChoice:e.toolChoice,hasOutputSchema:e.hasOutputSchema,additionalParamKeys:e.additionalParamKeys}),n=L({request:Object.keys(t).length===0?void 0:t,providerRequest:e.providerRequest});return Object.keys(n).length===0?void 0:n}function Ae(e){let t=L({messageId:e.messageId,usage:e.usage,providerResponse:e.providerResponse});return Object.keys(t).length===0?void 0:t}function je(e){let t=L({count:e.toolCount,names:e.toolNames,toolChoice:e.toolChoice,internalCallId:e.internalCallId,toolCallId:e.toolCallId,skipped:e.skipped,description:e.toolDescription,parameterKeys:e.parameterKeys,requiredParameterKeys:e.requiredParameterKeys,approvalRequired:e.approvalRequired,mcpServerName:e.mcpServerName,argumentBytes:e.argumentBytes,resultBytes:e.resultBytes});return Object.keys(t).length===0?void 0:t}function Me(e){let t=L({firstDeltaMs:e.firstDeltaMs,durationMs:e.durationMs,startedAt:e.startedAt,endedAt:e.endedAt});return Object.keys(t).length===0?void 0:t}function Ne(e){return e.length===0?`empty`:e.some(e=>e.status===`error`)?`error`:e.some(e=>e.status===`running`)?`running`:`success`}function Pe(e){return Array.isArray(e)?e.length:void 0}function L(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function Fe(e){return e.kind===`agent`?e.name:e.kind===`tool`?`tool.${e.name}`:e.name}function R(e){for(let t of e){let e=Ie(t.metadata);if(e!==void 0)return e}}function Ie(e){if(!(!s(e)||typeof e.firstDeltaMs!=`number`))return e.firstDeltaMs}function Le(e){switch(e){case`success`:return`bg-foreground`;case`error`:return`bg-destructive`;case`running`:return`bg-muted-foreground`}}function Re(e){switch(e.tone){case`trace`:return(0,j.jsx)(g,{icon:te,"aria-hidden":`true`});case`agent`:return(0,j.jsx)(g,{icon:E,"aria-hidden":`true`});case`turn`:return(0,j.jsx)(g,{icon:ie,"aria-hidden":`true`});case`generation`:return(0,j.jsx)(g,{icon:w,"aria-hidden":`true`});case`tool`:return(0,j.jsx)(g,{icon:re,"aria-hidden":`true`})}}function ze(e){switch(e){case`trace`:return`bg-foreground text-background`;case`agent`:return`bg-muted-foreground text-background`;case`turn`:return`bg-chart-4 text-background`;case`generation`:return`bg-foreground text-background`;case`tool`:return`bg-destructive text-background`}}function z(e){return!s(e.output)||!s(e.output.usage)?``:Ve(e.output.usage)}function Be(e){return e.map(z).filter(e=>e.length>0).join(` + `)}function Ve(e){let t=typeof e.inputTokens==`number`?e.inputTokens:0,n=typeof e.outputTokens==`number`?e.outputTokens:0,r=typeof e.totalTokens==`number`?e.totalTokens:t+n;return r===0?``:`${t} -> ${n} (Σ ${r})`}function He({className:e,...t}){return(0,j.jsx)(`div`,{className:r(`rounded-xl border border-border/80 bg-card/95 text-card-foreground shadow-sm shadow-black/20`,e),...t})}var Ue=Object.defineProperty,B=(e,t)=>Ue(e,`name`,{value:t,configurable:!0});function We(e,t){return A.useReducer((e,n)=>t[e][n]??e,e)}B(We,`useStateMachine`);var Ge=`ScrollArea`,[Ke,qe]=y(Ge),[Je,V]=Ke(Ge),Ye=A.forwardRef(B(function(e,t){let{__scopeScrollArea:n,type:r=`hover`,dir:i,scrollHideDelay:a=600,...o}=e,[s,c]=A.useState(null),[l,u]=A.useState(null),[d,f]=A.useState(null),[h,g]=A.useState(null),[_,v]=A.useState(null),[y,b]=A.useState(0),[x,S]=A.useState(0),[C,w]=A.useState(!1),[T,E]=A.useState(!1),ee=k(t,c),D=p(i);return(0,j.jsx)(Je,{scope:n,type:r,dir:D,scrollHideDelay:a,scrollArea:s,viewport:l,onViewportChange:u,content:d,onContentChange:f,scrollbarX:h,onScrollbarXChange:g,scrollbarXEnabled:C,onScrollbarXEnabledChange:w,scrollbarY:_,onScrollbarYChange:v,scrollbarYEnabled:T,onScrollbarYEnabledChange:E,onCornerWidthChange:b,onCornerHeightChange:S,children:(0,j.jsx)(m.div,{dir:D,...o,ref:ee,style:{position:`relative`,"--radix-scroll-area-corner-width":y+`px`,"--radix-scroll-area-corner-height":x+`px`,...e.style}})})},`ScrollArea`)),Xe=`ScrollAreaViewport`,Ze=A.forwardRef(B(function(e,t){let{__scopeScrollArea:n,children:r,nonce:i,...a}=e,o=V(Xe,n),s=k(t,A.useRef(null),o.onViewportChange);return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(Qe,{nonce:i}),(0,j.jsx)(m.div,{"data-radix-scroll-area-viewport":``,...a,ref:s,style:{overflowX:o.scrollbarXEnabled?`scroll`:`hidden`,overflowY:o.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,j.jsx)(`div`,{ref:o.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})},`ScrollAreaViewport`)),Qe=A.memo(B(function({nonce:e}){return(0,j.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`},nonce:e})},`ScrollAreaViewportStyle`),(e,t)=>e.nonce===t.nonce),H=`ScrollAreaScrollbar`,$e=A.forwardRef(B(function(e,t){let{forceMount:n,...r}=e,i=V(H,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return A.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,j.jsx)(et,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,j.jsx)(tt,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,j.jsx)(nt,{...r,ref:t,forceMount:n}):i.type===`always`?(0,j.jsx)(U,{...r,ref:t,"data-state":`visible`}):null},`ScrollAreaScrollbar`)),et=A.forwardRef(B(function(e,t){let{forceMount:n,...r}=e,i=V(H,e.__scopeScrollArea),[a,o]=A.useState(!1);return A.useEffect(()=>{let e=i.scrollArea,t=0;if(e){let n=B(()=>{window.clearTimeout(t),o(!0)},`handlePointerEnter`),r=B(()=>{t=window.setTimeout(()=>o(!1),i.scrollHideDelay)},`handlePointerLeave`);return e.addEventListener(`pointerenter`,n),e.addEventListener(`pointerleave`,r),()=>{window.clearTimeout(t),e.removeEventListener(`pointerenter`,n),e.removeEventListener(`pointerleave`,r)}}},[i.scrollArea,i.scrollHideDelay]),(0,j.jsx)(T,{present:n||a,children:(0,j.jsx)(nt,{"data-state":a?`visible`:`hidden`,...r,ref:t})})},`ScrollAreaScrollbarHover`)),tt=A.forwardRef(B(function(e,t){let{forceMount:n,...r}=e,i=V(H,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=X(()=>c(`SCROLL_END`),100),[s,c]=We(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}});return A.useEffect(()=>{if(s===`idle`){let e=window.setTimeout(()=>c(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[s,i.scrollHideDelay,c]),A.useEffect(()=>{let e=i.viewport,t=a?`scrollLeft`:`scrollTop`;if(e){let n=e[t],r=B(()=>{let r=e[t];n!==r&&(c(`SCROLL`),o()),n=r},`handleScroll`);return e.addEventListener(`scroll`,r),()=>e.removeEventListener(`scroll`,r)}},[i.viewport,a,c,o]),(0,j.jsx)(T,{present:n||s!==`hidden`,children:(0,j.jsx)(U,{"data-state":s===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:O(e.onPointerEnter,()=>c(`POINTER_ENTER`)),onPointerLeave:O(e.onPointerLeave,()=>c(`POINTER_LEAVE`))})})},`ScrollAreaScrollbarScroll`)),nt=A.forwardRef(B(function(e,t){let n=V(H,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=A.useState(!1),s=e.orientation===`horizontal`,c=X(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;o(s?e:t)}},10);return Z(n.viewport,c),Z(n.content,c),(0,j.jsx)(T,{present:r||a,children:(0,j.jsx)(U,{"data-state":a?`visible`:`hidden`,...i,ref:t})})},`ScrollAreaScrollbarAuto`)),U=A.forwardRef(B(function(e,t){let{orientation:n=`vertical`,...r}=e,i=V(H,e.__scopeScrollArea),a=A.useRef(null),o=A.useRef(0),[s,c]=A.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=K(s.viewport,s.content),u={...r,sizes:s,onSizesChange:c,hasThumb:l>0&&l<1,onThumbChange:B(e=>a.current=e,`onThumbChange`),onThumbPointerUp:B(()=>o.current=0,`onThumbPointerUp`),onThumbPointerDown:B(e=>o.current=e,`onThumbPointerDown`)};function d(e,t){return pt(e,o.current,s,t)}return B(d,`getScrollPosition`),n===`horizontal`?(0,j.jsx)(rt,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=J(e,s,i.dir);a.current.style.transform=`translate3d(${t}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=d(e,i.dir))}}):n===`vertical`?(0,j.jsx)(it,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=J(e,s);a.current.style.transform=`translate3d(0, ${t}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=d(e))}}):null},`ScrollAreaScrollbarVisible`)),rt=A.forwardRef(B(function(e,t){let{sizes:n,onSizesChange:r,...i}=e,a=V(H,e.__scopeScrollArea),[o,s]=A.useState(),c=A.useRef(null),l=k(t,c,a.onScrollbarXChange);return A.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,j.jsx)(st,{"data-orientation":`horizontal`,...i,ref:l,sizes:n,style:{bottom:0,left:a.dir===`rtl`?`var(--radix-scroll-area-corner-width)`:0,right:a.dir===`ltr`?`var(--radix-scroll-area-corner-width)`:0,"--radix-scroll-area-thumb-width":q(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,n)=>{if(a.viewport){let r=a.viewport.scrollLeft+t.deltaX;e.onWheelScroll(r),mt(r,n)&&t.preventDefault()}},onResize:()=>{c.current&&a.viewport&&o&&r({content:a.viewport.scrollWidth,viewport:a.viewport.offsetWidth,scrollbar:{size:c.current.clientWidth,paddingStart:G(o.paddingLeft),paddingEnd:G(o.paddingRight)}})}})},`ScrollAreaScrollbarX`)),it=A.forwardRef(B(function(e,t){let{sizes:n,onSizesChange:r,...i}=e,a=V(H,e.__scopeScrollArea),[o,s]=A.useState(),c=A.useRef(null),l=k(t,c,a.onScrollbarYChange);return A.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,j.jsx)(st,{"data-orientation":`vertical`,...i,ref:l,sizes:n,style:{top:0,right:a.dir===`ltr`?0:void 0,left:a.dir===`rtl`?0:void 0,bottom:`var(--radix-scroll-area-corner-height)`,"--radix-scroll-area-thumb-height":q(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,n)=>{if(a.viewport){let r=a.viewport.scrollTop+t.deltaY;e.onWheelScroll(r),mt(r,n)&&t.preventDefault()}},onResize:()=>{c.current&&a.viewport&&o&&r({content:a.viewport.scrollHeight,viewport:a.viewport.offsetHeight,scrollbar:{size:c.current.clientHeight,paddingStart:G(o.paddingTop),paddingEnd:G(o.paddingBottom)}})}})},`ScrollAreaScrollbarY`)),[at,ot]=Ke(H),st=A.forwardRef(B(function(e,t){let{__scopeScrollArea:n,sizes:r,hasThumb:i,onThumbChange:a,onThumbPointerUp:o,onThumbPointerDown:s,onThumbPositionChange:c,onDragScroll:l,onWheelScroll:u,onResize:d,...f}=e,p=V(H,n),[h,g]=A.useState(null),_=k(t,g),v=A.useRef(null),y=A.useRef(``),x=p.viewport,S=r.content-r.viewport,C=b(u),w=b(c),T=X(d,10);function E(e){v.current&&l({x:e.clientX-v.current.left,y:e.clientY-v.current.top})}return B(E,`handleDragScroll`),A.useEffect(()=>{let e=B(e=>{let t=e.target;h?.contains(t)&&C(e,S)},`handleWheel`);return document.addEventListener(`wheel`,e,{passive:!1}),()=>document.removeEventListener(`wheel`,e,{passive:!1})},[x,h,S,C]),A.useEffect(w,[r,w]),Z(h,T),Z(p.content,T),(0,j.jsx)(at,{scope:n,scrollbar:h,hasThumb:i,onThumbChange:b(a),onThumbPointerUp:b(o),onThumbPositionChange:w,onThumbPointerDown:b(s),children:(0,j.jsx)(m.div,{...f,ref:_,style:{position:`absolute`,...f.style},onPointerDown:O(e.onPointerDown,e=>{e.button===0&&(e.target.setPointerCapture(e.pointerId),v.current=h.getBoundingClientRect(),y.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,p.viewport&&(p.viewport.style.scrollBehavior=`auto`),E(e))}),onPointerMove:O(e.onPointerMove,E),onPointerUp:O(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=y.current,p.viewport&&(p.viewport.style.scrollBehavior=``),v.current=null})})})},`ScrollAreaScrollbarImpl`)),W=`ScrollAreaThumb`,ct=A.forwardRef(B(function(e,t){let{forceMount:n,...r}=e,i=ot(W,e.__scopeScrollArea);return(0,j.jsx)(T,{present:n||i.hasThumb,children:(0,j.jsx)(lt,{ref:t,...r})})},`ScrollAreaThumb`)),lt=A.forwardRef(B(function(e,t){let{__scopeScrollArea:n,style:r,...i}=e,a=V(W,n),o=ot(W,n),{onThumbPositionChange:s}=o,c=k(t,o.onThumbChange),l=A.useRef(void 0),u=X(()=>{l.current&&=(l.current(),void 0)},100);return A.useEffect(()=>{let e=a.viewport;if(e){let t=B(()=>{u(),l.current||(l.current=ht(e,s),s())},`handleScroll`);return s(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[a.viewport,u,s]),(0,j.jsx)(m.div,{"data-state":o.hasThumb?`visible`:`hidden`,...i,ref:c,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...r},onPointerDownCapture:O(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;o.onThumbPointerDown({x:n,y:r})}),onPointerUp:O(e.onPointerUp,o.onThumbPointerUp)})},`ScrollAreaThumbImpl`)),ut=`ScrollAreaCorner`,dt=A.forwardRef(B(function(e,t){let n=V(ut,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,j.jsx)(ft,{...e,ref:t}):null},`ScrollAreaCorner`)),ft=A.forwardRef(B(function(e,t){let{__scopeScrollArea:n,...r}=e,i=V(ut,n),[a,o]=A.useState(0),[s,c]=A.useState(0),l=!!(a&&s),{onCornerWidthChange:u,onCornerHeightChange:d}=i;return Z(i.scrollbarX,()=>{let e=i.scrollbarX?.offsetHeight||0;i.onCornerHeightChange(e),c(e)}),Z(i.scrollbarY,()=>{let e=i.scrollbarY?.offsetWidth||0;i.onCornerWidthChange(e),o(e)}),A.useEffect(()=>()=>{u(0),d(0)},[u,d]),l?(0,j.jsx)(m.div,{...r,ref:t,style:{width:a,height:s,position:`absolute`,right:i.dir===`ltr`?0:void 0,left:i.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null},`ScrollAreaCornerImpl`));function G(e){return e?parseInt(e,10):0}B(G,`toInt`);function K(e,t){let n=e/t;return isNaN(n)?0:n}B(K,`getThumbRatio`);function q(e){let t=K(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}B(q,`getThumbSize`);function pt(e,t,n,r=`ltr`){let i=q(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return Y([c,l],d)(e)}B(pt,`getScrollPositionFromPointer`);function J(e,t,n=`ltr`){let r=q(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=f(e,n===`ltr`?[0,o]:[o*-1,0]);return Y([0,o],[0,s])(c)}B(J,`getThumbOffsetFromScroll`);function Y(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}B(Y,`linearScale`);function mt(e,t){return e>0&&e<t}B(mt,`isScrollingWithinScrollbarBounds`);var ht=B((e,t=()=>{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return B((function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)}),`loop`)(),()=>window.cancelAnimationFrame(r)},`addUnlinkedScrollListener`);function X(e,t){let n=b(e),r=A.useRef(0);return A.useEffect(()=>()=>window.clearTimeout(r.current),[]),A.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}B(X,`useDebounceCallback`);function Z(e,t){let n=b(t);ee(()=>{let t=0;if(e){let r=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(n)});return r.observe(e),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}},[e,n])}B(Z,`useResizeObserver`);var gt=Ye,_t=Ze,vt=dt;function yt({className:e,children:t,...n}){return(0,j.jsxs)(gt,{className:r(`relative overflow-hidden`,e),...n,children:[(0,j.jsx)(_t,{className:`h-full w-full rounded-[inherit]`,children:t}),(0,j.jsx)(bt,{}),(0,j.jsx)(vt,{})]})}function bt({className:e,orientation:t=`vertical`,...n}){return(0,j.jsx)($e,{orientation:t,className:r(`flex touch-none select-none transition-colors`,t===`vertical`&&`h-full w-2.5 border-l border-l-transparent p-px`,t===`horizontal`&&`h-2.5 flex-col border-t border-t-transparent p-px`,e),...n,children:(0,j.jsx)(ct,{className:`relative flex-1 rounded-lg bg-muted-foreground/40`})})}function xt(e){if(!e.tracesEnabled)return(0,j.jsx)(`div`,{className:`w-full rounded-lg border border-dashed border-border p-8 text-sm font-medium text-muted-foreground`,children:`Tracing is disabled`});let t=e.selectedTraceId.length===0?void 0:e.traces.find(t=>t.id===e.selectedTraceId),n=t===void 0||e.traceSessionDetailId!==t.sessionId?[]:e.traces.filter(e=>e.sessionId===t.sessionId);return(0,j.jsx)(`section`,{className:`grid h-full min-h-0 w-full content-stretch pb-6 pl-0 pr-6`,"aria-label":`Tracing`,children:e.selectedTraceId.length===0?(0,j.jsx)(St,{agents:e.agents,traces:e.traces,traceLoadState:e.traceLoadState,onSelectTrace:e.onSelectTrace}):(0,j.jsx)(Ct,{selectedTrace:t,selectedSessionTraces:n,selectedTraceId:e.selectedTraceId,traceLoadState:e.traceLoadState,onBack:()=>e.onSelectTrace(``),onShowSessionTraces:e.onShowSessionTraces})})}function St(e){return(0,j.jsx)(He,{className:`min-h-0 overflow-hidden rounded-xl border-border/80 bg-card/80`,"aria-label":`Traces`,children:(0,j.jsx)(yt,{className:`h-full min-h-0`,children:(0,j.jsxs)(`div`,{className:`grid min-w-280 gap-1 p-2`,children:[(0,j.jsxs)(`div`,{className:`sticky top-0 z-10 grid min-h-11 grid-cols-[minmax(220px,1.3fr)_150px_120px_120px_120px_120px_110px_90px] items-center gap-4 rounded-lg border border-border/60 bg-card/95 px-4 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground backdrop-blur`,children:[(0,j.jsx)(`span`,{children:`Trace`}),(0,j.jsx)(`span`,{children:`Session`}),(0,j.jsx)(`span`,{children:`Agent`}),(0,j.jsx)(`span`,{children:`Status`}),(0,j.jsx)(`span`,{children:`Started`}),(0,j.jsx)(`span`,{children:`Duration`}),(0,j.jsx)(`span`,{children:`First delta`}),(0,j.jsx)(`span`,{children:`Events`})]}),e.traceLoadState===`loading`&&e.traces.length===0?(0,j.jsx)(`div`,{className:`px-5 py-4 text-sm font-medium text-muted-foreground`,children:`Loading traces`}):null,e.traceLoadState===`idle`&&e.traces.length===0?(0,j.jsx)(`div`,{className:`px-5 py-4 text-sm font-medium text-muted-foreground`,children:`No traces found`}):null,e.traces.map(t=>(0,j.jsxs)(v,{className:`grid h-auto min-h-14 w-full grid-cols-[minmax(220px,1.3fr)_150px_120px_120px_120px_120px_110px_90px] items-center justify-start gap-4 whitespace-normal rounded-lg border border-transparent bg-transparent px-4 py-2.5 text-left text-muted-foreground shadow-none transition duration-200 hover:border-border/70 hover:bg-accent/70 hover:text-accent-foreground`,type:`button`,variant:`ghost`,onClick:()=>e.onSelectTrace(t.id),children:[(0,j.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium text-muted-foreground`,children:t.id}),(0,j.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium`,children:t.sessionId}),(0,j.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium`,children:c(e.agents,t)}),(0,j.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2 text-xs font-medium capitalize`,children:[(0,j.jsx)(`span`,{className:r(`h-2.5 w-2.5 shrink-0 rounded-lg`,Le(t.status))}),(0,j.jsx)(`span`,{className:`min-w-0 truncate`,children:t.status})]}),(0,j.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium`,children:a(t.startedAt)}),(0,j.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium`,children:l(i(t.durationMs))}),(0,j.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium`,children:l(i(R(t.observations)))}),(0,j.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium tabular-nums`,children:t.observationCount})]},t.id))]})})})}function Ct(e){return(0,j.jsxs)(`div`,{className:`grid h-full min-h-0 min-w-0 grid-rows-[auto_minmax(0,1fr)] gap-2 overflow-hidden rounded-xl border border-border/80 bg-card/70 p-2 shadow-sm`,children:[(0,j.jsxs)(`header`,{className:`grid min-h-16 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-3 overflow-hidden rounded-lg border border-border/60 bg-card/95 px-4 py-3`,children:[(0,j.jsx)(v,{"aria-label":`Back to traces`,className:`h-8 min-h-8 w-8 text-muted-foreground hover:text-foreground`,size:`icon`,type:`button`,variant:`ghost`,onClick:e.onBack,children:(0,j.jsx)(g,{icon:h,"aria-hidden":`true`})}),(0,j.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,j.jsx)(`strong`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:e.selectedTrace?.name??`Trace detail`}),(0,j.jsx)(`span`,{className:`flex min-w-0 items-center gap-2 overflow-hidden text-xs font-medium text-muted-foreground`,children:e.selectedTrace===void 0?e.traceLoadState===`loading`?`Loading trace`:`Trace not found`:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:r(`h-2 w-2 shrink-0 rounded-lg`,Le(e.selectedTrace.status))}),(0,j.jsx)(`span`,{className:`shrink-0 capitalize`,children:e.selectedTrace.status}),(0,j.jsx)(`span`,{className:`shrink-0`,"aria-hidden":`true`,children:`/`}),(0,j.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[`Session `,(0,j.jsx)(`span`,{className:` font-semibold`,children:e.selectedTrace.sessionId})]})]})})]}),(0,j.jsx)(`span`,{className:`hidden max-w-[42vw] truncate rounded-lg bg-muted px-2 py-1 text-xs font-medium text-muted-foreground md:block`,children:e.selectedTraceId})]}),(0,j.jsx)(`div`,{className:`min-h-0 min-w-0 overflow-hidden`,children:e.selectedTrace===void 0?(0,j.jsx)(He,{className:`grid h-full place-items-center rounded-lg border-border bg-card p-6 text-sm font-medium text-muted-foreground`,children:e.traceLoadState===`loading`?`Loading trace`:`Trace not found`}):(0,j.jsx)(wt,{traces:e.selectedSessionTraces.length>0?e.selectedSessionTraces:[e.selectedTrace],onShowSessionTraces:e.onShowSessionTraces})})]})}function wt(e){let t=(0,A.useMemo)(()=>[...e.traces].sort((e,t)=>Date.parse(e.startedAt)-Date.parse(t.startedAt)),[e.traces]),n=t[0]?.id??``,[r,a]=(0,A.useState)(n),[o,s]=(0,A.useState)(`trace`);(0,A.useEffect)(()=>{a(n),s(`trace`)},[n]);let c=t.find(e=>e.id===r)??t[0],l=c===void 0?[]:Se(c),u=(e,t)=>{a(e),s(t)};return c===void 0?(0,j.jsx)(`section`,{className:`grid h-full min-h-0 w-full place-items-center text-sm font-medium text-muted-foreground`,"aria-label":`Traces`,children:`No trace selected`}):(0,j.jsx)(`section`,{className:`grid h-full min-h-0 w-full content-stretch overflow-hidden`,"aria-label":`Traces`,children:(0,j.jsxs)(`div`,{className:`grid h-full min-h-0 grid-cols-[320px_minmax(0,1fr)] overflow-hidden max-md:grid-cols-1`,children:[(0,j.jsxs)(`nav`,{className:`grid min-h-0 auto-rows-min content-start overflow-auto border-r border-border/80 bg-card/35 pr-2 max-md:max-h-80 max-md:border-b max-md:border-r-0`,"aria-label":`Trace timeline`,children:[(0,j.jsxs)(`div`,{className:`sticky top-0 z-30 flex min-h-11 items-center justify-between bg-card/90 py-0 pl-0 pr-5 text-xs font-medium text-muted-foreground backdrop-blur`,children:[(0,j.jsx)(`span`,{children:`Search`}),(0,j.jsx)(`strong`,{className:`text-foreground`,children:`Timeline`})]}),t.map(e=>{let t=c.id===e.id,n=Se(e);return(0,j.jsxs)(`div`,{className:`contents`,children:[(0,j.jsx)(Q,{active:t&&o===`trace`,ancestorLevels:[],hasChildren:!0,isLastSibling:!0,level:0,tone:`trace`,title:e.name??`Agent`,subtitle:i(e.durationMs),onSelect:()=>u(e.id,`trace`)}),(0,j.jsx)(Q,{active:t&&o===`agent`,ancestorLevels:[],hasChildren:n.length>0,isLastSibling:!0,level:1,tone:`agent`,title:`agent.run`,subtitle:i(e.durationMs),onSelect:()=>u(e.id,`agent`)}),n.map(r=>(0,j.jsxs)(`div`,{className:`contents`,children:[(0,j.jsx)(Q,{active:t&&o===`turn:${r.turn}`,ancestorLevels:[],hasChildren:r.observations.length>0,isLastSibling:r.turn===n.at(-1)?.turn,level:2,tone:`turn`,title:`turn.${r.turn}`,subtitle:i(r.durationMs),onSelect:()=>u(e.id,`turn:${r.turn}`)}),(0,j.jsx)(Tt,{activeKey:o,isLastTurn:r.turn===n.at(-1)?.turn,observations:r.observations,onSelect:t=>u(e.id,`observation:${t}`),traceActive:t})]},`${e.id}:turn:${r.turn}`))]},e.id)})]}),(0,j.jsx)(Dt,{trace:c,turns:l,activeKey:o,onShowSessionTraces:e.onShowSessionTraces})]})})}function Q(e){let t=e=>22+e*22;return(0,j.jsxs)(v,{className:r(`relative grid h-auto min-h-0 w-full min-w-0 grid-cols-[20px_minmax(0,1fr)] items-start justify-start gap-2 whitespace-normal rounded-lg border-0 bg-transparent px-3 py-2.5 text-left text-muted-foreground shadow-none transition duration-200 hover:bg-accent/70 hover:text-accent-foreground`,e.active&&`bg-muted/45 text-foreground hover:bg-muted/45 hover:text-foreground`),type:`button`,variant:`ghost`,onClick:e.onSelect,style:{paddingLeft:`${12+e.level*22}px`},children:[e.ancestorLevels.map(e=>(0,j.jsx)(`span`,{className:`pointer-events-none absolute inset-y-0 w-px bg-muted-foreground/35`,style:{left:`${t(e)}px`},"aria-hidden":`true`},`ancestor-line-${e}`)),e.level>0?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:`pointer-events-none absolute top-0 w-px bg-muted-foreground/35`,style:{left:`${t(e.level-1)}px`,height:`18px`},"aria-hidden":`true`}),e.isLastSibling?null:(0,j.jsx)(`span`,{className:`pointer-events-none absolute bottom-0 w-px bg-muted-foreground/35`,style:{left:`${t(e.level-1)}px`,top:`18px`},"aria-hidden":`true`}),(0,j.jsx)(`span`,{className:`pointer-events-none absolute h-px bg-muted-foreground/35`,style:{left:`${t(e.level-1)}px`,top:`18px`,width:`22px`},"aria-hidden":`true`})]}):null,e.hasChildren?(0,j.jsx)(`span`,{className:`pointer-events-none absolute bottom-0 w-px bg-muted-foreground/35`,style:{left:`${t(e.level)}px`,top:`18px`},"aria-hidden":`true`}):null,(0,j.jsx)(`span`,{className:r(`relative z-10 grid h-5 w-5 place-items-center rounded-lg bg-transparent [&_svg]:h-3 [&_svg]:w-3 [&_svg]:opacity-100`,ze(e.tone)),children:(0,j.jsx)(Re,{tone:e.tone})}),(0,j.jsxs)(`span`,{className:`grid min-w-0 gap-0.5`,children:[(0,j.jsx)(`strong`,{className:`min-w-0 truncate text-sm font-medium leading-5 text-current`,children:e.title}),(0,j.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium text-muted-foreground`,children:e.subtitle})]})]})}function Tt(e){let t=Ce(e.observations);return(0,j.jsx)(j.Fragment,{children:t.map((n,r)=>(0,j.jsx)(Et,{activeKey:e.activeKey,ancestorLevels:e.isLastTurn?[]:[1],isLastSibling:r===t.length-1,level:3,node:n,onSelect:e.onSelect,traceActive:e.traceActive},n.observation.id))})}function Et(e){let t=z(e.node.observation),n=e.isLastSibling?e.ancestorLevels:[...e.ancestorLevels,e.level];return(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(Q,{active:e.traceActive&&e.activeKey===`observation:${e.node.observation.id}`,ancestorLevels:e.ancestorLevels,hasChildren:e.node.children.length>0,isLastSibling:e.isLastSibling,level:e.level,tone:e.node.observation.kind,title:Fe(e.node.observation),subtitle:t.length>0?`${i(e.node.observation.durationMs)} · ${t}`:i(e.node.observation.durationMs),onSelect:()=>e.onSelect(e.node.observation.id)}),e.node.children.map((t,r)=>(0,j.jsx)(Et,{activeKey:e.activeKey,ancestorLevels:n,isLastSibling:r===e.node.children.length-1,level:e.level+1,node:t,onSelect:e.onSelect,traceActive:e.traceActive},t.observation.id))]})}function Dt(e){let t=we(e.trace,e.turns,e.activeKey);return(0,j.jsxs)(`section`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-card/70`,"aria-label":`Trace detail`,children:[(0,j.jsx)(`header`,{className:`border-b border-border/60 bg-card/70 px-6 py-5`,children:(0,j.jsxs)(`div`,{className:`grid min-w-0 gap-5`,children:[(0,j.jsx)(`div`,{className:`flex min-w-0 items-start justify-between gap-4`,children:(0,j.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,j.jsx)(`span`,{className:r(`grid h-8 w-8 shrink-0 place-items-center rounded-lg bg-foreground text-background [&_svg]:h-4 [&_svg]:w-4 [&_svg]:opacity-100`,t.tone!==`trace`&&`bg-muted text-foreground`,ze(t.tone)),children:(0,j.jsx)(Re,{tone:t.tone})}),(0,j.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,j.jsx)(`h2`,{className:`m-0 min-w-0 truncate text-2xl font-semibold leading-none tracking-[-0.01em] text-foreground`,children:t.title}),(0,j.jsx)(`div`,{className:` text-xs font-medium text-muted-foreground`,children:t.startedAt})]})]})}),(0,j.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[repeat(auto-fit,minmax(150px,1fr))] gap-2`,children:[(0,j.jsx)(Ot,{label:`Duration`,value:i(t.durationMs)}),t.firstDeltaMs===void 0?null:(0,j.jsx)(Ot,{label:`First delta`,value:i(t.firstDeltaMs)}),t.usage.length===0?null:(0,j.jsx)(Ot,{label:`Usage`,value:t.usage}),(0,j.jsxs)(`button`,{className:`grid min-w-0 gap-1 rounded-lg bg-card/85 px-4 py-3 text-left transition duration-200 hover:bg-accent hover:text-accent-foreground`,type:`button`,onClick:()=>e.onShowSessionTraces(e.trace.sessionId),children:[(0,j.jsx)(`span`,{className:` text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:`Session`}),(0,j.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold text-current`,children:e.trace.sessionId})]})]})]})}),(0,j.jsx)(`div`,{className:`min-w-0 overflow-auto`,children:(0,j.jsxs)(`div`,{className:`grid min-w-0 content-start gap-6 p-6`,children:[t.input===void 0?null:(0,j.jsx)($,{title:`Input`,value:t.input}),t.output===void 0?null:(0,j.jsx)($,{title:`Output`,value:t.output,tone:`success`}),t.error===void 0?null:(0,j.jsx)($,{title:`Error`,value:t.error,tone:`error`}),(0,j.jsx)($,{title:`Metadata`,value:t.metadata,rawJson:!0})]})})]})}function Ot(e){return(0,j.jsxs)(`div`,{className:`grid min-w-0 gap-1 rounded-lg bg-card/85 px-4 py-3`,children:[(0,j.jsx)(`span`,{className:` text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:e.label}),(0,j.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:e.value})]})}function $(e){let t=ge(e.title,e.value);return(0,j.jsxs)(`section`,{className:`grid min-w-0 gap-3`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,j.jsx)(`h3`,{className:`m-0 text-lg font-semibold leading-tight text-foreground`,children:e.title}),(0,j.jsx)(`span`,{className:`h-px flex-1 bg-border/80`,"aria-hidden":`true`})]}),e.rawJson?(0,j.jsx)(se,{value:e.value}):(0,j.jsx)(`div`,{className:`grid min-w-0 gap-3`,children:t.map(t=>(0,j.jsxs)(`article`,{className:r(`grid min-w-0 gap-3 rounded-lg bg-card/85 px-4 py-4`,e.compact&&`grid-cols-[150px_minmax(0,1fr)] items-start gap-4 max-lg:grid-cols-1`),children:[(0,j.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:[(0,j.jsx)(he,{label:t.label}),t.label]}),(0,j.jsx)(kt,{compact:e.compact,item:t,tone:e.tone})]},`${t.label}-${t.text}`))})]})}function kt(e){let t=At(e.item);return t.length>0?(0,j.jsx)(`div`,{className:`grid min-w-0 gap-5`,children:t.map(e=>(0,j.jsxs)(`div`,{className:`grid min-w-0 gap-2`,children:[(0,j.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,j.jsx)(`span`,{className:` text-xs font-semibold tabular-nums text-muted-foreground`,children:e.index}),(0,j.jsx)(ae,{className:r(`px-1.5 py-0.5`,e.role===`User`&&`border-border/80 bg-muted-foreground/15 text-muted-foreground`,e.role===`Assistant`&&`border-border/80 bg-foreground/15 text-foreground`,e.role===`Tool`&&`border-destructive/40 bg-destructive/15 text-destructive`),children:e.role})]}),(0,j.jsx)(`p`,{className:`m-0 whitespace-pre-wrap text-sm leading-7 text-foreground [overflow-wrap:anywhere]`,children:e.text})]},`${e.index}-${e.role}-${e.text}`))}):(0,j.jsx)(`p`,{className:r(`m-0 whitespace-pre-wrap text-sm leading-7 text-foreground [overflow-wrap:anywhere]`,e.compact&&` text-sm leading-6`,e.tone===`success`&&!me(e.item)&&`text-foreground`,e.tone===`error`&&`text-destructive`),children:e.item.text})}function At(e){return e.label.startsWith(`Conversation history`)?e.text.split(`
6
-
7
- `).flatMap(e=>{let[t,...n]=e.split(`
8
- `),r=/^(\d+)\.\s+(.+)$/.exec(t??``);return r===null?[]:[{index:r[1]??``,role:r[2]??`Message`,text:n.join(`
9
- `)}]}):[]}export{xt as TraceBrowser};
10
- //# sourceMappingURL=trace-browser-C4ZQweab.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trace-browser-C4ZQweab.js","names":["ScrollArea","Fragment"],"sources":["../../../src/ui/app/modules/tracing/trace-browser-detail.tsx","../../../src/ui/app/components/ui/card.tsx","../../../../../node_modules/.pnpm/@radix-ui+react-scroll-area@1.2.18_@types+react-dom@19.2.3_@types+react@19.2.14__@types_65a050057147dec78e053f767925828d/node_modules/@radix-ui/react-scroll-area/dist/index.mjs","../../../src/ui/app/components/ui/scroll-area.tsx","../../../src/ui/app/modules/tracing/trace-browser.tsx"],"sourcesContent":["import {\n ArrowDown01Icon,\n ArrowRight01Icon,\n ArrowTurnBackwardIcon,\n ChatIcon,\n CpuIcon,\n GitBranchIcon,\n PathIcon,\n Robot01Icon,\n Settings02Icon,\n Wrench01Icon,\n} from \"@hugeicons/core-free-icons\";\nimport { useState } from \"react\";\nimport type { StudioTrace } from \"../../../../types\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport { formatToolValue, formatTraceTime, formatUsage } from \"../shared/format\";\nimport { isRecord } from \"../shared/object\";\nimport { messageText } from \"../shared/transcript\";\nimport type { TraceInspectorKey, TraceObservationItem } from \"../shared/types\";\n\nexport function rawTraceJson(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2) ?? \"undefined\";\n } catch {\n return String(value);\n }\n}\n\nexport function TraceJsonTree(props: { value: unknown }) {\n return (\n <div className=\"overflow-x-auto rounded-lg bg-card/85 px-4 py-4 text-sm leading-6 text-foreground\">\n <JsonNode depth={0} path=\"$\" value={props.value} />\n </div>\n );\n}\n\nconst jsonIndentSize = 16;\nconst jsonDisclosureGutter = 20;\n\nfunction JsonNode(props: {\n arrayIndex?: number | undefined;\n depth: number;\n path: string;\n propertyKey?: string | undefined;\n trailingComma?: boolean | undefined;\n value: unknown;\n}) {\n if (isJsonBranch(props.value)) {\n return (\n <JsonBranch\n arrayIndex={props.arrayIndex}\n depth={props.depth}\n path={props.path}\n propertyKey={props.propertyKey}\n trailingComma={props.trailingComma}\n value={props.value}\n />\n );\n }\n\n return (\n <div\n className=\"min-w-max whitespace-pre\"\n style={{ paddingLeft: `${jsonContentIndent(props.depth)}px` }}\n >\n <JsonNodeLabel arrayIndex={props.arrayIndex} propertyKey={props.propertyKey} />\n <JsonPrimitive value={props.value} />\n {props.trailingComma ? <span className=\"text-foreground\">,</span> : null}\n </div>\n );\n}\n\nfunction JsonBranch(props: {\n arrayIndex?: number | undefined;\n depth: number;\n path: string;\n propertyKey?: string | undefined;\n trailingComma?: boolean | undefined;\n value: Record<string, unknown> | unknown[];\n}) {\n const [open, setOpen] = useState(props.depth === 0);\n const arrayValue = Array.isArray(props.value) ? props.value : undefined;\n const entries =\n arrayValue === undefined\n ? Object.entries(props.value as Record<string, unknown>)\n : arrayValue.map((item, index): [string, unknown] => [String(index), item]);\n const opening = arrayValue === undefined ? \"{\" : \"[\";\n const closing = arrayValue === undefined ? \"}\" : \"]\";\n const collapsed = arrayValue === undefined ? \"{…}\" : \"[…]\";\n\n if (entries.length === 0) {\n return (\n <div\n className=\"min-w-max whitespace-pre\"\n style={{ paddingLeft: `${jsonContentIndent(props.depth)}px` }}\n >\n <JsonNodeLabel arrayIndex={props.arrayIndex} propertyKey={props.propertyKey} />\n <span className=\"text-foreground\">\n {opening}\n {closing}\n {props.trailingComma ? \",\" : \"\"}\n </span>\n </div>\n );\n }\n\n return (\n <div className=\"grid min-w-max\">\n <button\n aria-expanded={open}\n className=\"grid min-w-max grid-cols-[16px_auto] items-center gap-1 rounded-lg py-0.5 pr-2 text-left transition duration-200 hover:bg-accent/45 hover:text-accent-foreground\"\n onClick={() => setOpen((current) => !current)}\n style={{ paddingLeft: `${props.depth * jsonIndentSize}px` }}\n type=\"button\"\n >\n <span className=\"grid h-4 w-4 place-items-center text-muted-foreground [&_svg]:h-3 [&_svg]:w-3\">\n {open ? (\n <StudioIcon icon={ArrowDown01Icon} aria-hidden=\"true\" />\n ) : (\n <StudioIcon icon={ArrowRight01Icon} aria-hidden=\"true\" />\n )}\n </span>\n <span className=\"whitespace-pre\">\n <JsonNodeLabel arrayIndex={props.arrayIndex} propertyKey={props.propertyKey} />\n {open ? (\n <span className=\"text-foreground\">{opening}</span>\n ) : (\n <span className=\"text-muted-foreground\">{collapsed}</span>\n )}\n {!open && props.trailingComma ? <span className=\"text-foreground\">,</span> : null}\n </span>\n </button>\n {open ? (\n <>\n {entries.map(([key, value], index) => (\n <JsonNode\n arrayIndex={arrayValue === undefined ? undefined : Number(key)}\n depth={props.depth + 1}\n key={`${props.path}.${key}`}\n path={`${props.path}.${key}`}\n propertyKey={arrayValue === undefined ? key : undefined}\n trailingComma={index < entries.length - 1}\n value={value}\n />\n ))}\n <div\n className=\"min-w-max whitespace-pre text-foreground\"\n style={{ paddingLeft: `${jsonContentIndent(props.depth)}px` }}\n >\n {closing}\n {props.trailingComma ? \",\" : \"\"}\n </div>\n </>\n ) : null}\n </div>\n );\n}\n\nfunction jsonContentIndent(depth: number): number {\n return depth * jsonIndentSize + jsonDisclosureGutter;\n}\n\nfunction JsonNodeLabel(props: {\n arrayIndex?: number | undefined;\n propertyKey?: string | undefined;\n}) {\n if (props.propertyKey !== undefined) {\n return (\n <>\n <span className=\"text-muted-foreground\">{JSON.stringify(props.propertyKey)}</span>\n <span className=\"text-foreground\">: </span>\n </>\n );\n }\n if (props.arrayIndex !== undefined) {\n return (\n <>\n <span className=\"text-muted-foreground\">[{props.arrayIndex}]</span>\n <span className=\"text-foreground\"> </span>\n </>\n );\n }\n return null;\n}\n\nfunction JsonPrimitive(props: { value: unknown }) {\n if (typeof props.value === \"string\") {\n return <span className=\"text-foreground\">{JSON.stringify(props.value)}</span>;\n }\n if (typeof props.value === \"number\") {\n return <span className=\"text-foreground\">{String(props.value)}</span>;\n }\n if (typeof props.value === \"boolean\") {\n return <span className=\"text-chart-4\">{String(props.value)}</span>;\n }\n if (props.value === null) {\n return <span className=\"text-muted-foreground\">null</span>;\n }\n if (props.value === undefined) {\n return <span className=\"text-muted-foreground\">undefined</span>;\n }\n return <span className=\"text-foreground\">{rawTraceJson(props.value)}</span>;\n}\n\nfunction isJsonBranch(value: unknown): value is Record<string, unknown> | unknown[] {\n return Array.isArray(value) || isRecord(value);\n}\n\nexport function jsonSyntaxTokens(\n json: string,\n): Array<{ text: string; type: JsonTokenType; start: number }> {\n const tokenPattern =\n /(\"(?:\\\\u[\\da-fA-F]{4}|\\\\[^u]|[^\\\\\"])*\"(?=\\s*:)|\"(?:\\\\u[\\da-fA-F]{4}|\\\\[^u]|[^\\\\\"])*\"|-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?|\\btrue\\b|\\bfalse\\b|\\bnull\\b)/g;\n const tokens: Array<{ text: string; type: JsonTokenType; start: number }> = [];\n let cursor = 0;\n for (const match of json.matchAll(tokenPattern)) {\n const text = match[0];\n const index = match.index ?? 0;\n if (index > cursor) {\n tokens.push({ text: json.slice(cursor, index), type: \"plain\", start: cursor });\n }\n tokens.push({\n text,\n type: jsonTokenType(text, json.slice(index + text.length)),\n start: index,\n });\n cursor = index + text.length;\n }\n if (cursor < json.length) {\n tokens.push({ text: json.slice(cursor), type: \"plain\", start: cursor });\n }\n return tokens;\n}\n\ntype JsonTokenType = \"plain\" | \"key\" | \"string\" | \"number\" | \"boolean\" | \"null\";\n\nfunction jsonTokenType(text: string, followingText: string): JsonTokenType {\n if (text.startsWith('\"')) {\n return followingText.trimStart().startsWith(\":\") ? \"key\" : \"string\";\n }\n if (text === \"true\" || text === \"false\") {\n return \"boolean\";\n }\n if (text === \"null\") {\n return \"null\";\n }\n return \"number\";\n}\n\nexport function isNeutralTraceRow(row: { label: string }): boolean {\n return row.label === \"Message Id\";\n}\n\nexport function TraceRowIcon(props: { label: string }) {\n const className = \"h-3.5 w-3.5 shrink-0\";\n switch (props.label) {\n case \"System prompt\":\n return <StudioIcon icon={Settings02Icon} aria-hidden=\"true\" className={className} />;\n case \"Prompt\":\n return <StudioIcon icon={ChatIcon} aria-hidden=\"true\" className={className} />;\n case \"Output\":\n case \"Assistant output\":\n return <StudioIcon icon={ArrowTurnBackwardIcon} aria-hidden=\"true\" className={className} />;\n default:\n return null;\n }\n}\n\nexport function plainTraceValue(\n title: string,\n value: unknown,\n): Array<{ label: string; text: string }> {\n if (title === \"Output\") {\n const outputRows = plainTraceOutput(value);\n if (outputRows.length > 0) {\n return outputRows;\n }\n }\n const messageRows = plainTraceInput(value, title);\n if (messageRows.length > 0) {\n return messageRows;\n }\n if (!isRecord(value)) {\n return [{ label: title, text: plainTraceText(value) }];\n }\n\n const rows: Array<{ label: string; text: string }> = [];\n for (const [key, item] of Object.entries(value)) {\n const nestedMessages = plainTraceInput(item, key);\n if (nestedMessages.length > 0) {\n rows.push(...nestedMessages);\n continue;\n }\n rows.push({ label: traceLabelText(key), text: plainTraceText(item) });\n }\n return rows.length > 0 ? rows : [{ label: title, text: \"Empty object\" }];\n}\n\nfunction plainTraceOutput(value: unknown): Array<{ label: string; text: string }> {\n if (!isRecord(value)) {\n return [];\n }\n const rows: Array<{ label: string; text: string }> = [];\n const choiceRows = plainTraceInput(value.choice, \"choice\");\n rows.push(...choiceRows);\n if (typeof value.messageId === \"string\" && value.messageId.length > 0) {\n rows.push({ label: \"Message Id\", text: value.messageId });\n }\n return rows;\n}\n\nfunction plainTraceInput(\n value: unknown,\n parentKey?: string,\n): Array<{ label: string; text: string }> {\n if (typeof value === \"string\" && parentKey === undefined) {\n return [{ label: \"Value\", text: value }];\n }\n if (Array.isArray(value)) {\n if (parentKey === \"chatHistory\") {\n return chatHistoryRows(value);\n }\n if (parentKey === \"history\") {\n return conversationHistoryRows(value);\n }\n return value\n .map((item, index) => ({\n label: traceArrayItemLabel(item, index, parentKey),\n text: messageText(item) || formatToolValue(item),\n }))\n .filter((item) => item.text.length > 0);\n }\n if (!isRecord(value)) {\n return [];\n }\n\n const chatHistory = Array.isArray(value.chatHistory) ? value.chatHistory : undefined;\n if (chatHistory !== undefined) {\n const rows = systemPromptRows(value);\n rows.push(...plainTraceInput(chatHistory, \"chatHistory\"));\n return rows;\n }\n\n if (Array.isArray(value.prompt)) {\n return plainTraceInput(value.prompt, \"prompt\");\n }\n\n const rows: Array<{ label: string; text: string }> = [];\n rows.push(...systemPromptRows(value));\n\n const history = Array.isArray(value.history) ? value.history : [];\n if (history.length > 0) {\n rows.push(...plainTraceInput(history, \"history\"));\n }\n\n const promptText = messageText(value.prompt);\n if (promptText.length > 0) {\n rows.push({ label: history.length > 0 ? \"Current prompt\" : \"Prompt\", text: promptText });\n }\n\n return rows;\n}\n\nfunction chatHistoryRows(value: unknown[]): Array<{ label: string; text: string }> {\n const messages = value\n .map((item, index) => ({\n label: traceArrayItemLabel(item, index, \"chatHistory\"),\n text: messageText(item) || formatToolValue(item),\n }))\n .filter((item) => item.text.length > 0);\n const current = messages.at(-1);\n const history = messages.slice(0, -1);\n const rows: Array<{ label: string; text: string }> = [];\n if (history.length > 0) {\n rows.push({\n label: `Conversation history (${history.length})`,\n text: history.map((item, index) => `${index + 1}. ${item.label}\\n${item.text}`).join(\"\\n\\n\"),\n });\n }\n if (current !== undefined) {\n rows.push({\n label: history.length > 0 ? \"Current prompt\" : \"Prompt\",\n text: current.text,\n });\n }\n return rows;\n}\n\nfunction conversationHistoryRows(value: unknown[]): Array<{ label: string; text: string }> {\n const messages = value\n .map((item, index) => ({\n label: traceArrayItemLabel(item, index, \"history\"),\n text: messageText(item) || formatToolValue(item),\n }))\n .filter((item) => item.text.length > 0);\n if (messages.length === 0) {\n return [];\n }\n return [\n {\n label: `Conversation history (${messages.length})`,\n text: messages.map((item, index) => `${index + 1}. ${item.label}\\n${item.text}`).join(\"\\n\\n\"),\n },\n ];\n}\n\nfunction traceArrayItemLabel(item: unknown, index: number, parentKey: string | undefined): string {\n if (isRecord(item)) {\n const type = typeof item.type === \"string\" ? item.type : undefined;\n if (parentKey === \"choice\") {\n if (type === \"text\") {\n return \"Assistant output\";\n }\n if (type === \"reasoning\") {\n return \"Reasoning\";\n }\n }\n if (type === \"reasoning\") {\n return \"Reasoning\";\n }\n if (typeof item.role === \"string\") {\n return traceLabelText(item.role);\n }\n if (type !== undefined) {\n return traceLabelText(type);\n }\n }\n\n const prefix = parentKey === undefined ? \"Item\" : `${traceLabelText(parentKey)} item`;\n return `${prefix} ${index + 1}`;\n}\n\nfunction traceLabelText(value: string): string {\n return value\n .replace(/[_-]+/g, \" \")\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .trim()\n .replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n}\n\nfunction systemPromptRows(value: Record<string, unknown>): Array<{ label: string; text: string }> {\n const instructions = value.instructions;\n if (typeof instructions !== \"string\" || instructions.trim().length === 0) {\n return [];\n }\n return [{ label: \"System prompt\", text: instructions }];\n}\n\nfunction plainTraceText(value: unknown): string {\n if (value === undefined) {\n return \"undefined\";\n }\n if (value === null) {\n return \"null\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nexport function traceTurns(trace: StudioTrace): Array<{\n turn: number;\n observations: TraceObservationItem[];\n durationMs?: number;\n}> {\n const grouped = new Map<number, TraceObservationItem[]>();\n for (const observation of trace.observations) {\n const turn = Number.isFinite(observation.turn) ? observation.turn : grouped.size + 1;\n grouped.set(turn, [...(grouped.get(turn) ?? []), observation]);\n }\n return [...grouped.entries()]\n .sort(([left], [right]) => left - right)\n .map(([turn, observations]) => ({\n turn,\n observations,\n durationMs: observations.reduce(\n (total, observation) => total + (observation.durationMs ?? 0),\n 0,\n ),\n }));\n}\n\nexport type TraceObservationNode = {\n observation: TraceObservationItem;\n children: TraceObservationNode[];\n};\n\nexport function traceObservationTree(observations: TraceObservationItem[]): TraceObservationNode[] {\n const nodes = new Map<string, TraceObservationNode>();\n for (const observation of observations) {\n nodes.set(observation.id, { observation, children: [] });\n }\n\n const roots: TraceObservationNode[] = [];\n for (const observation of observations) {\n const node = nodes.get(observation.id);\n if (node === undefined) {\n continue;\n }\n const parentId = observation.parentObservationId;\n const parent = parentId === undefined ? undefined : nodes.get(parentId);\n if (parent === undefined) {\n roots.push(node);\n } else {\n parent.children.push(node);\n }\n }\n return roots;\n}\n\nexport function selectedTraceDetail(\n trace: StudioTrace,\n turns: Array<{ turn: number; observations: TraceObservationItem[]; durationMs?: number }>,\n activeKey: TraceInspectorKey,\n): {\n title: string;\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"];\n startedAt: string;\n durationMs: number | undefined;\n firstDeltaMs: number | undefined;\n usage: string;\n input?: unknown;\n output?: unknown;\n error?: unknown;\n metadata: unknown;\n} {\n if (activeKey === \"agent\") {\n return {\n title: \"agent.run\",\n tone: \"agent\",\n startedAt: formatTraceTime(trace.startedAt),\n durationMs: trace.durationMs,\n firstDeltaMs: firstDeltaMsFromObservations(trace.observations),\n usage: formatUsage(trace.usage),\n input: trace.input,\n output: trace.output,\n error: trace.error,\n metadata: traceDetailMetadata(trace),\n };\n }\n if (activeKey.startsWith(\"turn:\")) {\n const turnNumber = Number(activeKey.slice(\"turn:\".length));\n const turn = turns.find((item) => item.turn === turnNumber);\n return {\n title: `turn.${Number.isFinite(turnNumber) ? turnNumber : 1}`,\n tone: \"turn\",\n startedAt: formatTraceTime(turn?.observations[0]?.startedAt ?? trace.startedAt),\n durationMs: turn?.durationMs,\n firstDeltaMs: firstDeltaMsFromObservations(turn?.observations ?? []),\n usage: turnUsageText(turn?.observations ?? []),\n input: turn?.observations[0]?.input,\n output: turn?.observations.at(-1)?.output,\n metadata: turnDetailMetadata(turnNumber, turn?.observations ?? []),\n };\n }\n if (activeKey.startsWith(\"observation:\")) {\n const observationId = activeKey.slice(\"observation:\".length);\n const observation = trace.observations.find((item) => item.id === observationId);\n if (observation !== undefined) {\n return {\n title: traceObservationLabel(observation),\n tone: observation.kind,\n startedAt: formatTraceTime(observation.startedAt),\n durationMs: observation.durationMs,\n firstDeltaMs: firstDeltaMsFromMetadata(observation.metadata),\n usage: observationUsageText(observation),\n input: observation.input,\n output: observation.output,\n error: observation.error,\n metadata: observationDetailMetadata(observation),\n };\n }\n }\n return {\n title: trace.name ?? \"Agent\",\n tone: \"trace\",\n startedAt: formatTraceTime(trace.startedAt),\n durationMs: trace.durationMs,\n firstDeltaMs: firstDeltaMsFromObservations(trace.observations),\n usage: formatUsage(trace.usage),\n input: trace.input,\n output: trace.output,\n error: trace.error,\n metadata: traceDetailMetadata(trace),\n };\n}\n\nexport function traceDetailMetadata(trace: StudioTrace): Record<string, unknown> {\n const metadata = isRecord(trace.metadata) ? trace.metadata : {};\n const traceGroup = compactTraceMetadata({\n status: trace.status,\n traceId: trace.trace?.traceId ?? trace.id,\n observationId: trace.trace?.observationId,\n sessionId: trace.sessionId,\n observationCount: trace.observationCount,\n messageCount: traceMessageCount(metadata.messages),\n startedAt: trace.startedAt,\n endedAt: trace.endedAt,\n durationMs: trace.durationMs,\n });\n return compactTraceMetadata({\n ...metadata,\n status: trace.status,\n traceId: trace.trace?.traceId ?? trace.id,\n observationId: trace.trace?.observationId,\n sessionId: trace.sessionId,\n observationCount: trace.observationCount,\n messageCount: traceMessageCount(metadata.messages),\n startedAt: trace.startedAt,\n endedAt: trace.endedAt,\n durationMs: trace.durationMs,\n trace: isRecord(metadata.trace) ? metadata.trace : traceGroup,\n });\n}\n\nfunction turnDetailMetadata(\n turn: number,\n observations: TraceObservationItem[],\n): Record<string, unknown> {\n return compactTraceMetadata({\n turn,\n observationCount: observations.length,\n generationCount: observations.filter((observation) => observation.kind === \"generation\").length,\n toolCount: observations.filter((observation) => observation.kind === \"tool\").length,\n agentCount: observations.filter((observation) => observation.kind === \"agent\").length,\n firstDeltaMs: firstDeltaMsFromObservations(observations),\n status: observationStatusSummary(observations),\n startedAt: observations[0]?.startedAt,\n endedAt: observations.at(-1)?.endedAt,\n });\n}\n\nexport function observationDetailMetadata(\n observation: TraceObservationItem,\n): Record<string, unknown> {\n const metadata = isRecord(observation.metadata) ? observation.metadata : {};\n const base = compactTraceMetadata({\n ...metadata,\n status: observation.status,\n kind: observation.kind,\n turn: observation.turn,\n parentObservationId: observation.parentObservationId ?? null,\n startedAt: observation.startedAt,\n endedAt: observation.endedAt ?? null,\n durationMs: observation.durationMs,\n });\n return compactTraceMetadata({\n ...base,\n trace: isRecord(base.trace)\n ? base.trace\n : compactTraceMetadata({\n status: observation.status,\n kind: observation.kind,\n turn: observation.turn,\n parentObservationId: observation.parentObservationId ?? null,\n startedAt: observation.startedAt,\n endedAt: observation.endedAt ?? null,\n durationMs: observation.durationMs,\n }),\n modelInfo: isRecord(base.modelInfo) ? base.modelInfo : modelInfoMetadata(base),\n modelCall: isRecord(base.modelCall) ? base.modelCall : modelCallMetadata(base),\n response: isRecord(base.response) ? base.response : responseMetadata(base),\n tools: isRecord(base.tools) ? base.tools : toolsMetadata(base),\n timing: isRecord(base.timing) ? base.timing : timingMetadata(base),\n });\n}\n\nfunction modelInfoMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n provider: metadata.provider,\n model: metadata.model,\n requestedModel: metadata.requestedModel,\n defaultModel: metadata.defaultModel,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction modelCallMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const request = compactTraceMetadata({\n messageCount: metadata.historyCount,\n documentCount: metadata.documentCount,\n toolCount: metadata.toolCount,\n toolNames: metadata.toolNames,\n temperature: metadata.temperature,\n maxTokens: metadata.maxTokens,\n toolChoice: metadata.toolChoice,\n hasOutputSchema: metadata.hasOutputSchema,\n additionalParamKeys: metadata.additionalParamKeys,\n });\n const group = compactTraceMetadata({\n request: Object.keys(request).length === 0 ? undefined : request,\n providerRequest: metadata.providerRequest,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction responseMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n messageId: metadata.messageId,\n usage: metadata.usage,\n providerResponse: metadata.providerResponse,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction toolsMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n count: metadata.toolCount,\n names: metadata.toolNames,\n toolChoice: metadata.toolChoice,\n internalCallId: metadata.internalCallId,\n toolCallId: metadata.toolCallId,\n skipped: metadata.skipped,\n description: metadata.toolDescription,\n parameterKeys: metadata.parameterKeys,\n requiredParameterKeys: metadata.requiredParameterKeys,\n approvalRequired: metadata.approvalRequired,\n mcpServerName: metadata.mcpServerName,\n argumentBytes: metadata.argumentBytes,\n resultBytes: metadata.resultBytes,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nfunction timingMetadata(metadata: Record<string, unknown>): Record<string, unknown> | undefined {\n const group = compactTraceMetadata({\n firstDeltaMs: metadata.firstDeltaMs,\n durationMs: metadata.durationMs,\n startedAt: metadata.startedAt,\n endedAt: metadata.endedAt,\n });\n return Object.keys(group).length === 0 ? undefined : group;\n}\n\nexport function observationStatusSummary(observations: TraceObservationItem[]): string {\n if (observations.length === 0) {\n return \"empty\";\n }\n if (observations.some((observation) => observation.status === \"error\")) {\n return \"error\";\n }\n if (observations.some((observation) => observation.status === \"running\")) {\n return \"running\";\n }\n return \"success\";\n}\n\nfunction traceMessageCount(value: unknown): number | undefined {\n return Array.isArray(value) ? value.length : undefined;\n}\n\nexport function compactTraceMetadata(values: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(values).filter(([, value]) => value !== undefined));\n}\n\nexport function traceObservationLabel(observation: TraceObservationItem): string {\n if (observation.kind === \"agent\") {\n return observation.name;\n }\n return observation.kind === \"tool\" ? `tool.${observation.name}` : observation.name;\n}\n\nexport function firstDeltaMsFromObservations(\n observations: TraceObservationItem[],\n): number | undefined {\n for (const observation of observations) {\n const firstDeltaMs = firstDeltaMsFromMetadata(observation.metadata);\n if (firstDeltaMs !== undefined) {\n return firstDeltaMs;\n }\n }\n return undefined;\n}\n\nfunction firstDeltaMsFromMetadata(metadata: unknown): number | undefined {\n if (!isRecord(metadata) || typeof metadata.firstDeltaMs !== \"number\") {\n return undefined;\n }\n return metadata.firstDeltaMs;\n}\n\nexport function statusDotClass(status: StudioTrace[\"status\"]): string {\n switch (status) {\n case \"success\":\n return \"bg-foreground\";\n case \"error\":\n return \"bg-destructive\";\n case \"running\":\n return \"bg-muted-foreground\";\n }\n}\n\nexport function TraceToneIcon(props: {\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"];\n}) {\n switch (props.tone) {\n case \"trace\":\n return <StudioIcon icon={PathIcon} aria-hidden=\"true\" />;\n case \"agent\":\n return <StudioIcon icon={Robot01Icon} aria-hidden=\"true\" />;\n case \"turn\":\n return <StudioIcon icon={GitBranchIcon} aria-hidden=\"true\" />;\n case \"generation\":\n return <StudioIcon icon={CpuIcon} aria-hidden=\"true\" />;\n case \"tool\":\n return <StudioIcon icon={Wrench01Icon} aria-hidden=\"true\" />;\n }\n}\n\nexport function traceToneIconClass(\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"],\n): string {\n switch (tone) {\n case \"trace\":\n return \"bg-foreground text-background\";\n case \"agent\":\n return \"bg-muted-foreground text-background\";\n case \"turn\":\n return \"bg-chart-4 text-background\";\n case \"generation\":\n return \"bg-foreground text-background\";\n case \"tool\":\n return \"bg-destructive text-background\";\n }\n}\n\nexport function observationUsageText(observation: TraceObservationItem): string {\n if (!isRecord(observation.output) || !isRecord(observation.output.usage)) {\n return \"\";\n }\n return formatUsageValue(observation.output.usage);\n}\n\nexport function turnUsageText(observations: TraceObservationItem[]): string {\n const totals = observations\n .map(observationUsageText)\n .filter((usage) => usage.length > 0)\n .join(\" + \");\n return totals;\n}\n\nfunction formatUsageValue(value: Record<string, unknown>): string {\n const input = typeof value.inputTokens === \"number\" ? value.inputTokens : 0;\n const output = typeof value.outputTokens === \"number\" ? value.outputTokens : 0;\n const total = typeof value.totalTokens === \"number\" ? value.totalTokens : input + output;\n if (total === 0) {\n return \"\";\n }\n return `${input} -> ${output} (Σ ${total})`;\n}\n","import type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\n \"rounded-xl border border-border/80 bg-card/95 text-card-foreground shadow-sm shadow-black/20\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={cn(\"grid gap-1.5 p-4\", className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={cn(\"p-4 pt-0\", className)} {...props} />;\n}\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/scroll-area.tsx\nimport * as React2 from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\n\n// src/use-state-machine.ts\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n__name(useStateMachine, \"useStateMachine\");\n\n// src/scroll-area.tsx\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SCROLL_AREA_NAME = \"ScrollArea\";\nvar [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);\nvar [ScrollAreaProvider, useScrollAreaContext] = createScrollAreaContext(SCROLL_AREA_NAME);\nvar ScrollArea = /* @__PURE__ */ React2.forwardRef(\n /* @__PURE__ */ __name(function ScrollArea2(props, forwardedRef) {\n const {\n __scopeScrollArea,\n type = \"hover\",\n dir,\n scrollHideDelay = 600,\n ...scrollAreaProps\n } = props;\n const [scrollArea, setScrollArea] = React2.useState(null);\n const [viewport, setViewport] = React2.useState(null);\n const [content, setContent] = React2.useState(null);\n const [scrollbarX, setScrollbarX] = React2.useState(null);\n const [scrollbarY, setScrollbarY] = React2.useState(null);\n const [cornerWidth, setCornerWidth] = React2.useState(0);\n const [cornerHeight, setCornerHeight] = React2.useState(0);\n const [scrollbarXEnabled, setScrollbarXEnabled] = React2.useState(false);\n const [scrollbarYEnabled, setScrollbarYEnabled] = React2.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, setScrollArea);\n const direction = useDirection(dir);\n return /* @__PURE__ */ jsx(\n ScrollAreaProvider,\n {\n scope: __scopeScrollArea,\n type,\n dir: direction,\n scrollHideDelay,\n scrollArea,\n viewport,\n onViewportChange: setViewport,\n content,\n onContentChange: setContent,\n scrollbarX,\n onScrollbarXChange: setScrollbarX,\n scrollbarXEnabled,\n onScrollbarXEnabledChange: setScrollbarXEnabled,\n scrollbarY,\n onScrollbarYChange: setScrollbarY,\n scrollbarYEnabled,\n onScrollbarYEnabledChange: setScrollbarYEnabled,\n onCornerWidthChange: setCornerWidth,\n onCornerHeightChange: setCornerHeight,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n ...scrollAreaProps,\n ref: composedRefs,\n style: {\n position: \"relative\",\n // Pass corner sizes as CSS vars to reduce re-renders of context consumers\n \"--radix-scroll-area-corner-width\": cornerWidth + \"px\",\n \"--radix-scroll-area-corner-height\": cornerHeight + \"px\",\n ...props.style\n }\n }\n )\n }\n );\n }, \"ScrollArea\")\n);\nvar VIEWPORT_NAME = \"ScrollAreaViewport\";\nvar ScrollAreaViewport = /* @__PURE__ */ React2.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ScrollAreaViewport2(props, forwardedRef) {\n const { __scopeScrollArea, children, nonce, ...viewportProps } = props;\n const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);\n const ref = React2.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(ScrollAreaViewportStyle, { nonce }),\n /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-scroll-area-viewport\": \"\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n /**\n * We don't support `visible` because the intention is to have at least one scrollbar\n * if this component is used and `visible` will behave like `auto` in that case\n * https://developer.mozilla.org/en-US/docs/Web/CSS/overflow#description\n *\n * We don't handle `auto` because the intention is for the native implementation\n * to be hidden if using this component. We just want to ensure the node is scrollable\n * so could have used either `scroll` or `auto` here. We picked `scroll` to prevent\n * the browser from having to work out whether to render native scrollbars or not,\n * we tell it to with the intention of hiding them in CSS.\n */\n overflowX: context.scrollbarXEnabled ? \"scroll\" : \"hidden\",\n overflowY: context.scrollbarYEnabled ? \"scroll\" : \"hidden\",\n ...props.style\n },\n children: /* @__PURE__ */ jsx(\"div\", { ref: context.onContentChange, style: { minWidth: \"100%\", display: \"table\" }, children })\n }\n )\n ] });\n }, \"ScrollAreaViewport\")\n);\nvar ScrollAreaViewportStyle = /* @__PURE__ */ React2.memo(\n /* @__PURE__ */ __name(function ScrollAreaViewportStyle2({ nonce }) {\n return /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n );\n }, \"ScrollAreaViewportStyle\"),\n (prevProps, nextProps) => prevProps.nonce === nextProps.nonce\n);\nvar SCROLLBAR_NAME = \"ScrollAreaScrollbar\";\nvar ScrollAreaScrollbar = /* @__PURE__ */ React2.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ScrollAreaScrollbar2(props, forwardedRef) {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { onScrollbarXEnabledChange, onScrollbarYEnabledChange } = context;\n const isHorizontal = props.orientation === \"horizontal\";\n React2.useEffect(() => {\n isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);\n return () => {\n isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);\n };\n }, [isHorizontal, onScrollbarXEnabledChange, onScrollbarYEnabledChange]);\n return context.type === \"hover\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarHover, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"scroll\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarScroll, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"auto\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarAuto, { ...scrollbarProps, ref: forwardedRef, forceMount }) : context.type === \"always\" ? /* @__PURE__ */ jsx(ScrollAreaScrollbarVisible, { ...scrollbarProps, ref: forwardedRef, \"data-state\": \"visible\" }) : null;\n }, \"ScrollAreaScrollbar\")\n);\nvar ScrollAreaScrollbarHover = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarHover2(props, forwardedRef) {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [visible, setVisible] = React2.useState(false);\n React2.useEffect(() => {\n const scrollArea = context.scrollArea;\n let hideTimer = 0;\n if (scrollArea) {\n const handlePointerEnter = /* @__PURE__ */ __name(() => {\n window.clearTimeout(hideTimer);\n setVisible(true);\n }, \"handlePointerEnter\");\n const handlePointerLeave = /* @__PURE__ */ __name(() => {\n hideTimer = window.setTimeout(() => setVisible(false), context.scrollHideDelay);\n }, \"handlePointerLeave\");\n scrollArea.addEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.addEventListener(\"pointerleave\", handlePointerLeave);\n return () => {\n window.clearTimeout(hideTimer);\n scrollArea.removeEventListener(\"pointerenter\", handlePointerEnter);\n scrollArea.removeEventListener(\"pointerleave\", handlePointerLeave);\n };\n }\n }, [context.scrollArea, context.scrollHideDelay]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarAuto,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n}, \"ScrollAreaScrollbarHover\"));\nvar ScrollAreaScrollbarScroll = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarScroll2(props, forwardedRef) {\n const { forceMount, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const isHorizontal = props.orientation === \"horizontal\";\n const debounceScrollEnd = useDebounceCallback(() => send(\"SCROLL_END\"), 100);\n const [state, send] = useStateMachine(\"hidden\", {\n hidden: {\n SCROLL: \"scrolling\"\n },\n scrolling: {\n SCROLL_END: \"idle\",\n POINTER_ENTER: \"interacting\"\n },\n interacting: {\n SCROLL: \"interacting\",\n POINTER_LEAVE: \"idle\"\n },\n idle: {\n HIDE: \"hidden\",\n SCROLL: \"scrolling\",\n POINTER_ENTER: \"interacting\"\n }\n });\n React2.useEffect(() => {\n if (state === \"idle\") {\n const hideTimer = window.setTimeout(() => send(\"HIDE\"), context.scrollHideDelay);\n return () => window.clearTimeout(hideTimer);\n }\n }, [state, context.scrollHideDelay, send]);\n React2.useEffect(() => {\n const viewport = context.viewport;\n const scrollDirection = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n if (viewport) {\n let prevScrollPos = viewport[scrollDirection];\n const handleScroll = /* @__PURE__ */ __name(() => {\n const scrollPos = viewport[scrollDirection];\n const hasScrollInDirectionChanged = prevScrollPos !== scrollPos;\n if (hasScrollInDirectionChanged) {\n send(\"SCROLL\");\n debounceScrollEnd();\n }\n prevScrollPos = scrollPos;\n }, \"handleScroll\");\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [context.viewport, isHorizontal, send, debounceScrollEnd]);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || state !== \"hidden\", children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": state === \"hidden\" ? \"hidden\" : \"visible\",\n ...scrollbarProps,\n ref: forwardedRef,\n onPointerEnter: composeEventHandlers(props.onPointerEnter, () => send(\"POINTER_ENTER\")),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => send(\"POINTER_LEAVE\"))\n }\n ) });\n}, \"ScrollAreaScrollbarScroll\"));\nvar ScrollAreaScrollbarAuto = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarAuto2(props, forwardedRef) {\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const { forceMount, ...scrollbarProps } = props;\n const [visible, setVisible] = React2.useState(false);\n const isHorizontal = props.orientation === \"horizontal\";\n const handleResize = useDebounceCallback(() => {\n if (context.viewport) {\n const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;\n const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;\n setVisible(isHorizontal ? isOverflowX : isOverflowY);\n }\n }, 10);\n useResizeObserver(context.viewport, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || visible, children: /* @__PURE__ */ jsx(\n ScrollAreaScrollbarVisible,\n {\n \"data-state\": visible ? \"visible\" : \"hidden\",\n ...scrollbarProps,\n ref: forwardedRef\n }\n ) });\n}, \"ScrollAreaScrollbarAuto\"));\nvar ScrollAreaScrollbarVisible = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarVisible2(props, forwardedRef) {\n const { orientation = \"vertical\", ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const thumbRef = React2.useRef(null);\n const pointerOffsetRef = React2.useRef(0);\n const [sizes, setSizes] = React2.useState({\n content: 0,\n viewport: 0,\n scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 }\n });\n const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);\n const commonProps = {\n ...scrollbarProps,\n sizes,\n onSizesChange: setSizes,\n hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),\n onThumbChange: /* @__PURE__ */ __name((thumb) => thumbRef.current = thumb, \"onThumbChange\"),\n onThumbPointerUp: /* @__PURE__ */ __name(() => pointerOffsetRef.current = 0, \"onThumbPointerUp\"),\n onThumbPointerDown: /* @__PURE__ */ __name((pointerPos) => pointerOffsetRef.current = pointerPos, \"onThumbPointerDown\")\n };\n function getScrollPosition(pointerPos, dir) {\n return getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);\n }\n __name(getScrollPosition, \"getScrollPosition\");\n if (orientation === \"horizontal\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarX,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollLeft;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes, context.dir);\n thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollLeft = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) {\n context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);\n }\n }\n }\n );\n }\n if (orientation === \"vertical\") {\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarY,\n {\n ...commonProps,\n ref: forwardedRef,\n onThumbPositionChange: () => {\n if (context.viewport && thumbRef.current) {\n const scrollPos = context.viewport.scrollTop;\n const offset = getThumbOffsetFromScroll(scrollPos, sizes);\n thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;\n }\n },\n onWheelScroll: (scrollPos) => {\n if (context.viewport) context.viewport.scrollTop = scrollPos;\n },\n onDragScroll: (pointerPos) => {\n if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);\n }\n }\n );\n }\n return null;\n}, \"ScrollAreaScrollbarVisible\"));\nvar ScrollAreaScrollbarX = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarX2(props, forwardedRef) {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"horizontal\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n bottom: 0,\n left: context.dir === \"rtl\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n right: context.dir === \"ltr\" ? \"var(--radix-scroll-area-corner-width)\" : 0,\n \"--radix-scroll-area-thumb-width\": getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.x),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.x),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollLeft + event.deltaX;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollWidth,\n viewport: context.viewport.offsetWidth,\n scrollbar: {\n size: ref.current.clientWidth,\n paddingStart: toInt(computedStyle.paddingLeft),\n paddingEnd: toInt(computedStyle.paddingRight)\n }\n });\n }\n }\n }\n );\n}, \"ScrollAreaScrollbarX\"));\nvar ScrollAreaScrollbarY = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarY2(props, forwardedRef) {\n const { sizes, onSizesChange, ...scrollbarProps } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);\n const [computedStyle, setComputedStyle] = React2.useState();\n const ref = React2.useRef(null);\n const composeRefs = useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);\n React2.useEffect(() => {\n if (ref.current) setComputedStyle(getComputedStyle(ref.current));\n }, [ref]);\n return /* @__PURE__ */ jsx(\n ScrollAreaScrollbarImpl,\n {\n \"data-orientation\": \"vertical\",\n ...scrollbarProps,\n ref: composeRefs,\n sizes,\n style: {\n top: 0,\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: \"var(--radix-scroll-area-corner-height)\",\n \"--radix-scroll-area-thumb-height\": getThumbSize(sizes) + \"px\",\n ...props.style\n },\n onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.y),\n onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.y),\n onWheelScroll: (event, maxScrollPos) => {\n if (context.viewport) {\n const scrollPos = context.viewport.scrollTop + event.deltaY;\n props.onWheelScroll(scrollPos);\n if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) {\n event.preventDefault();\n }\n }\n },\n onResize: () => {\n if (ref.current && context.viewport && computedStyle) {\n onSizesChange({\n content: context.viewport.scrollHeight,\n viewport: context.viewport.offsetHeight,\n scrollbar: {\n size: ref.current.clientHeight,\n paddingStart: toInt(computedStyle.paddingTop),\n paddingEnd: toInt(computedStyle.paddingBottom)\n }\n });\n }\n }\n }\n );\n}, \"ScrollAreaScrollbarY\"));\nvar [ScrollbarProvider, useScrollbarContext] = createScrollAreaContext(SCROLLBAR_NAME);\nvar ScrollAreaScrollbarImpl = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaScrollbarImpl2(props, forwardedRef) {\n const {\n __scopeScrollArea,\n sizes,\n hasThumb,\n onThumbChange,\n onThumbPointerUp,\n onThumbPointerDown,\n onThumbPositionChange,\n onDragScroll,\n onWheelScroll,\n onResize,\n ...scrollbarProps\n } = props;\n const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);\n const [scrollbar, setScrollbar] = React2.useState(null);\n const composeRefs = useComposedRefs(forwardedRef, setScrollbar);\n const rectRef = React2.useRef(null);\n const prevWebkitUserSelectRef = React2.useRef(\"\");\n const viewport = context.viewport;\n const maxScrollPos = sizes.content - sizes.viewport;\n const handleWheelScroll = useCallbackRef(onWheelScroll);\n const handleThumbPositionChange = useCallbackRef(onThumbPositionChange);\n const handleResize = useDebounceCallback(onResize, 10);\n function handleDragScroll(event) {\n if (rectRef.current) {\n const x = event.clientX - rectRef.current.left;\n const y = event.clientY - rectRef.current.top;\n onDragScroll({ x, y });\n }\n }\n __name(handleDragScroll, \"handleDragScroll\");\n React2.useEffect(() => {\n const handleWheel = /* @__PURE__ */ __name((event) => {\n const element = event.target;\n const isScrollbarWheel = scrollbar?.contains(element);\n if (isScrollbarWheel) handleWheelScroll(event, maxScrollPos);\n }, \"handleWheel\");\n document.addEventListener(\"wheel\", handleWheel, { passive: false });\n return () => document.removeEventListener(\"wheel\", handleWheel, { passive: false });\n }, [viewport, scrollbar, maxScrollPos, handleWheelScroll]);\n React2.useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]);\n useResizeObserver(scrollbar, handleResize);\n useResizeObserver(context.content, handleResize);\n return /* @__PURE__ */ jsx(\n ScrollbarProvider,\n {\n scope: __scopeScrollArea,\n scrollbar,\n hasThumb,\n onThumbChange: useCallbackRef(onThumbChange),\n onThumbPointerUp: useCallbackRef(onThumbPointerUp),\n onThumbPositionChange: handleThumbPositionChange,\n onThumbPointerDown: useCallbackRef(onThumbPointerDown),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...scrollbarProps,\n ref: composeRefs,\n style: { position: \"absolute\", ...scrollbarProps.style },\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const mainPointer = 0;\n if (event.button === mainPointer) {\n const element = event.target;\n element.setPointerCapture(event.pointerId);\n rectRef.current = scrollbar.getBoundingClientRect();\n prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;\n document.body.style.webkitUserSelect = \"none\";\n if (context.viewport) context.viewport.style.scrollBehavior = \"auto\";\n handleDragScroll(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, handleDragScroll),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const element = event.target;\n if (element.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId);\n }\n document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;\n if (context.viewport) context.viewport.style.scrollBehavior = \"\";\n rectRef.current = null;\n })\n }\n )\n }\n );\n}, \"ScrollAreaScrollbarImpl\"));\nvar THUMB_NAME = \"ScrollAreaThumb\";\nvar ScrollAreaThumb = /* @__PURE__ */ React2.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ScrollAreaThumb2(props, forwardedRef) {\n const { forceMount, ...thumbProps } = props;\n const scrollbarContext = useScrollbarContext(THUMB_NAME, props.__scopeScrollArea);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || scrollbarContext.hasThumb, children: /* @__PURE__ */ jsx(ScrollAreaThumbImpl, { ref: forwardedRef, ...thumbProps }) });\n }, \"ScrollAreaThumb\")\n);\nvar ScrollAreaThumbImpl = /* @__PURE__ */ React2.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ScrollAreaThumbImpl2(props, forwardedRef) {\n const { __scopeScrollArea, style, ...thumbProps } = props;\n const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);\n const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);\n const { onThumbPositionChange } = scrollbarContext;\n const composedRef = useComposedRefs(forwardedRef, scrollbarContext.onThumbChange);\n const removeUnlinkedScrollListenerRef = React2.useRef(void 0);\n const debounceScrollEnd = useDebounceCallback(() => {\n if (removeUnlinkedScrollListenerRef.current) {\n removeUnlinkedScrollListenerRef.current();\n removeUnlinkedScrollListenerRef.current = void 0;\n }\n }, 100);\n React2.useEffect(() => {\n const viewport = scrollAreaContext.viewport;\n if (viewport) {\n const handleScroll = /* @__PURE__ */ __name(() => {\n debounceScrollEnd();\n if (!removeUnlinkedScrollListenerRef.current) {\n const listener = addUnlinkedScrollListener(viewport, onThumbPositionChange);\n removeUnlinkedScrollListenerRef.current = listener;\n onThumbPositionChange();\n }\n }, \"handleScroll\");\n onThumbPositionChange();\n viewport.addEventListener(\"scroll\", handleScroll);\n return () => viewport.removeEventListener(\"scroll\", handleScroll);\n }\n }, [scrollAreaContext.viewport, debounceScrollEnd, onThumbPositionChange]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": scrollbarContext.hasThumb ? \"visible\" : \"hidden\",\n ...thumbProps,\n ref: composedRef,\n style: {\n width: \"var(--radix-scroll-area-thumb-width)\",\n height: \"var(--radix-scroll-area-thumb-height)\",\n ...style\n },\n onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, (event) => {\n const thumb = event.target;\n const thumbRect = thumb.getBoundingClientRect();\n const x = event.clientX - thumbRect.left;\n const y = event.clientY - thumbRect.top;\n scrollbarContext.onThumbPointerDown({ x, y });\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)\n }\n );\n }, \"ScrollAreaThumbImpl\")\n);\nvar CORNER_NAME = \"ScrollAreaCorner\";\nvar ScrollAreaCorner = /* @__PURE__ */ React2.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function ScrollAreaCorner2(props, forwardedRef) {\n const context = useScrollAreaContext(CORNER_NAME, props.__scopeScrollArea);\n const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);\n const hasCorner = context.type !== \"scroll\" && hasBothScrollbarsVisible;\n return hasCorner ? /* @__PURE__ */ jsx(ScrollAreaCornerImpl, { ...props, ref: forwardedRef }) : null;\n }, \"ScrollAreaCorner\")\n);\nvar ScrollAreaCornerImpl = /* @__PURE__ */ React2.forwardRef(/* @__PURE__ */ __name(function ScrollAreaCornerImpl2(props, forwardedRef) {\n const { __scopeScrollArea, ...cornerProps } = props;\n const context = useScrollAreaContext(CORNER_NAME, __scopeScrollArea);\n const [width, setWidth] = React2.useState(0);\n const [height, setHeight] = React2.useState(0);\n const hasSize = Boolean(width && height);\n const { onCornerWidthChange, onCornerHeightChange } = context;\n useResizeObserver(context.scrollbarX, () => {\n const height2 = context.scrollbarX?.offsetHeight || 0;\n context.onCornerHeightChange(height2);\n setHeight(height2);\n });\n useResizeObserver(context.scrollbarY, () => {\n const width2 = context.scrollbarY?.offsetWidth || 0;\n context.onCornerWidthChange(width2);\n setWidth(width2);\n });\n React2.useEffect(() => {\n return () => {\n onCornerWidthChange(0);\n onCornerHeightChange(0);\n };\n }, [onCornerWidthChange, onCornerHeightChange]);\n return hasSize ? /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...cornerProps,\n ref: forwardedRef,\n style: {\n width,\n height,\n position: \"absolute\",\n right: context.dir === \"ltr\" ? 0 : void 0,\n left: context.dir === \"rtl\" ? 0 : void 0,\n bottom: 0,\n ...props.style\n }\n }\n ) : null;\n}, \"ScrollAreaCornerImpl\"));\nfunction toInt(value) {\n return value ? parseInt(value, 10) : 0;\n}\n__name(toInt, \"toInt\");\nfunction getThumbRatio(viewportSize, contentSize) {\n const ratio = viewportSize / contentSize;\n return isNaN(ratio) ? 0 : ratio;\n}\n__name(getThumbRatio, \"getThumbRatio\");\nfunction getThumbSize(sizes) {\n const ratio = getThumbRatio(sizes.viewport, sizes.content);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;\n return Math.max(thumbSize, 18);\n}\n__name(getThumbSize, \"getThumbSize\");\nfunction getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const thumbCenter = thumbSizePx / 2;\n const offset = pointerOffset || thumbCenter;\n const thumbOffsetFromEnd = thumbSizePx - offset;\n const minPointerPos = sizes.scrollbar.paddingStart + offset;\n const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;\n const maxScrollPos = sizes.content - sizes.viewport;\n const scrollRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const interpolate = linearScale([minPointerPos, maxPointerPos], scrollRange);\n return interpolate(pointerPos);\n}\n__name(getScrollPositionFromPointer, \"getScrollPositionFromPointer\");\nfunction getThumbOffsetFromScroll(scrollPos, sizes, dir = \"ltr\") {\n const thumbSizePx = getThumbSize(sizes);\n const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;\n const scrollbar = sizes.scrollbar.size - scrollbarPadding;\n const maxScrollPos = sizes.content - sizes.viewport;\n const maxThumbPos = scrollbar - thumbSizePx;\n const scrollClampRange = dir === \"ltr\" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];\n const scrollWithoutMomentum = clamp(scrollPos, scrollClampRange);\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos]);\n return interpolate(scrollWithoutMomentum);\n}\n__name(getThumbOffsetFromScroll, \"getThumbOffsetFromScroll\");\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\n__name(linearScale, \"linearScale\");\nfunction isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {\n return scrollPos > 0 && scrollPos < maxScrollPos;\n}\n__name(isScrollingWithinScrollbarBounds, \"isScrollingWithinScrollbarBounds\");\nvar addUnlinkedScrollListener = /* @__PURE__ */ __name((node, handler = () => {\n}) => {\n let prevPosition = { left: node.scrollLeft, top: node.scrollTop };\n let rAF = 0;\n (/* @__PURE__ */ __name((function loop() {\n const position = { left: node.scrollLeft, top: node.scrollTop };\n const isHorizontalScroll = prevPosition.left !== position.left;\n const isVerticalScroll = prevPosition.top !== position.top;\n if (isHorizontalScroll || isVerticalScroll) handler();\n prevPosition = position;\n rAF = window.requestAnimationFrame(loop);\n }), \"loop\"))();\n return () => window.cancelAnimationFrame(rAF);\n}, \"addUnlinkedScrollListener\");\nfunction useDebounceCallback(callback, delay) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = React2.useRef(0);\n React2.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n return React2.useCallback(() => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n }, [handleCallback, delay]);\n}\n__name(useDebounceCallback, \"useDebounceCallback\");\nfunction useResizeObserver(element, onResize) {\n const handleResize = useCallbackRef(onResize);\n useLayoutEffect(() => {\n let rAF = 0;\n if (element) {\n const resizeObserver = new ResizeObserver(() => {\n cancelAnimationFrame(rAF);\n rAF = window.requestAnimationFrame(handleResize);\n });\n resizeObserver.observe(element);\n return () => {\n window.cancelAnimationFrame(rAF);\n resizeObserver.unobserve(element);\n };\n }\n }, [element, handleResize]);\n}\n__name(useResizeObserver, \"useResizeObserver\");\nvar Root = ScrollArea;\nvar Viewport = ScrollAreaViewport;\nvar Scrollbar = ScrollAreaScrollbar;\nvar Thumb = ScrollAreaThumb;\nvar Corner = ScrollAreaCorner;\nexport {\n Corner,\n Root,\n ScrollArea,\n ScrollAreaCorner,\n ScrollAreaScrollbar,\n ScrollAreaThumb,\n ScrollAreaViewport,\n Scrollbar,\n Thumb,\n Viewport,\n createScrollAreaScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\";\nimport type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root className={cn(\"relative overflow-hidden\", className)} {...props}>\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-px\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-px\",\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-lg bg-muted-foreground/40\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n );\n}\n","import { ArrowLeft02Icon } from \"@hugeicons/core-free-icons\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n firstDeltaMsFromObservations,\n isNeutralTraceRow,\n observationUsageText,\n plainTraceValue,\n selectedTraceDetail,\n statusDotClass,\n TraceJsonTree,\n type TraceObservationNode,\n TraceRowIcon,\n TraceToneIcon,\n traceObservationLabel,\n traceObservationTree,\n traceToneIconClass,\n traceTurns,\n} from \"./trace-browser-detail\";\n\nexport {\n compactTraceMetadata,\n firstDeltaMsFromObservations,\n jsonSyntaxTokens,\n observationDetailMetadata,\n observationStatusSummary,\n observationUsageText,\n plainTraceValue,\n rawTraceJson,\n selectedTraceDetail,\n traceDetailMetadata,\n traceObservationLabel,\n traceObservationTree,\n traceTurns,\n turnUsageText,\n} from \"./trace-browser-detail\";\n\nimport type { StudioConfig, StudioTrace } from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { Card } from \"../../components/ui/card\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport { ScrollArea } from \"../../components/ui/scroll-area\";\nimport { cn } from \"../../lib/utils\";\nimport { emptyFallback, formatDuration, formatTraceDate, traceAgentLabel } from \"../shared/format\";\nimport type { TraceInspectorKey, TraceLoadState, TraceObservationItem } from \"../shared/types\";\n\nexport function TraceBrowser(props: {\n agents: StudioConfig[\"agents\"];\n traces: StudioTrace[];\n tracesEnabled: boolean;\n traceLoadState: TraceLoadState;\n selectedTraceId: string;\n traceSessionDetailId: string | undefined;\n onRefresh: () => void;\n onSelectTrace: (traceId: string) => void;\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n if (!props.tracesEnabled) {\n return (\n <div className=\"w-full rounded-lg border border-dashed border-border p-8 text-sm font-medium text-muted-foreground\">\n Tracing is disabled\n </div>\n );\n }\n\n const selectedTrace =\n props.selectedTraceId.length === 0\n ? undefined\n : props.traces.find((trace) => trace.id === props.selectedTraceId);\n const selectedSessionTraces =\n selectedTrace === undefined || props.traceSessionDetailId !== selectedTrace.sessionId\n ? []\n : props.traces.filter((trace) => trace.sessionId === selectedTrace.sessionId);\n\n return (\n <section\n className=\"grid h-full min-h-0 w-full content-stretch pb-6 pl-0 pr-6\"\n aria-label=\"Tracing\"\n >\n {props.selectedTraceId.length === 0 ? (\n <TraceTable\n agents={props.agents}\n traces={props.traces}\n traceLoadState={props.traceLoadState}\n onSelectTrace={props.onSelectTrace}\n />\n ) : (\n <TraceDetailRoute\n selectedTrace={selectedTrace}\n selectedSessionTraces={selectedSessionTraces}\n selectedTraceId={props.selectedTraceId}\n traceLoadState={props.traceLoadState}\n onBack={() => props.onSelectTrace(\"\")}\n onShowSessionTraces={props.onShowSessionTraces}\n />\n )}\n </section>\n );\n}\n\nfunction TraceTable(props: {\n agents: StudioConfig[\"agents\"];\n traces: StudioTrace[];\n traceLoadState: TraceLoadState;\n onSelectTrace: (traceId: string) => void;\n}) {\n return (\n <Card\n className=\"min-h-0 overflow-hidden rounded-xl border-border/80 bg-card/80\"\n aria-label=\"Traces\"\n >\n <ScrollArea className=\"h-full min-h-0\">\n <div className=\"grid min-w-280 gap-1 p-2\">\n <div className=\"sticky top-0 z-10 grid min-h-11 grid-cols-[minmax(220px,1.3fr)_150px_120px_120px_120px_120px_110px_90px] items-center gap-4 rounded-lg border border-border/60 bg-card/95 px-4 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground backdrop-blur\">\n <span>Trace</span>\n <span>Session</span>\n <span>Agent</span>\n <span>Status</span>\n <span>Started</span>\n <span>Duration</span>\n <span>First delta</span>\n <span>Events</span>\n </div>\n {props.traceLoadState === \"loading\" && props.traces.length === 0 ? (\n <div className=\"px-5 py-4 text-sm font-medium text-muted-foreground\">\n Loading traces\n </div>\n ) : null}\n {props.traceLoadState === \"idle\" && props.traces.length === 0 ? (\n <div className=\"px-5 py-4 text-sm font-medium text-muted-foreground\">\n No traces found\n </div>\n ) : null}\n {props.traces.map((trace) => (\n <Button\n className=\"grid h-auto min-h-14 w-full grid-cols-[minmax(220px,1.3fr)_150px_120px_120px_120px_120px_110px_90px] items-center justify-start gap-4 whitespace-normal rounded-lg border border-transparent bg-transparent px-4 py-2.5 text-left text-muted-foreground shadow-none transition duration-200 hover:border-border/70 hover:bg-accent/70 hover:text-accent-foreground\"\n type=\"button\"\n variant=\"ghost\"\n key={trace.id}\n onClick={() => props.onSelectTrace(trace.id)}\n >\n <span className=\"min-w-0 truncate text-xs font-medium text-muted-foreground\">\n {trace.id}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">{trace.sessionId}</span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {traceAgentLabel(props.agents, trace)}\n </span>\n <span className=\"flex min-w-0 items-center gap-2 text-xs font-medium capitalize\">\n <span\n className={cn(\"h-2.5 w-2.5 shrink-0 rounded-lg\", statusDotClass(trace.status))}\n />\n <span className=\"min-w-0 truncate\">{trace.status}</span>\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {formatTraceDate(trace.startedAt)}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {emptyFallback(formatDuration(trace.durationMs))}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium\">\n {emptyFallback(formatDuration(firstDeltaMsFromObservations(trace.observations)))}\n </span>\n <span className=\"min-w-0 truncate text-xs font-medium tabular-nums\">\n {trace.observationCount}\n </span>\n </Button>\n ))}\n </div>\n </ScrollArea>\n </Card>\n );\n}\n\nfunction TraceDetailRoute(props: {\n selectedTrace: StudioTrace | undefined;\n selectedSessionTraces: StudioTrace[];\n selectedTraceId: string;\n traceLoadState: TraceLoadState;\n onBack: () => void;\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n return (\n <div className=\"grid h-full min-h-0 min-w-0 grid-rows-[auto_minmax(0,1fr)] gap-2 overflow-hidden rounded-xl border border-border/80 bg-card/70 p-2 shadow-sm\">\n <header className=\"grid min-h-16 grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-3 overflow-hidden rounded-lg border border-border/60 bg-card/95 px-4 py-3\">\n <Button\n aria-label=\"Back to traces\"\n className=\"h-8 min-h-8 w-8 text-muted-foreground hover:text-foreground\"\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n onClick={props.onBack}\n >\n <StudioIcon icon={ArrowLeft02Icon} aria-hidden=\"true\" />\n </Button>\n <div className=\"grid min-w-0 gap-1\">\n <strong className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {props.selectedTrace?.name ?? \"Trace detail\"}\n </strong>\n <span className=\"flex min-w-0 items-center gap-2 overflow-hidden text-xs font-medium text-muted-foreground\">\n {props.selectedTrace === undefined ? (\n props.traceLoadState === \"loading\" ? (\n \"Loading trace\"\n ) : (\n \"Trace not found\"\n )\n ) : (\n <>\n <span\n className={cn(\n \"h-2 w-2 shrink-0 rounded-lg\",\n statusDotClass(props.selectedTrace.status),\n )}\n />\n <span className=\"shrink-0 capitalize\">{props.selectedTrace.status}</span>\n <span className=\"shrink-0\" aria-hidden=\"true\">\n /\n </span>\n <span className=\"min-w-0 flex-1 truncate\">\n Session <span className=\" font-semibold\">{props.selectedTrace.sessionId}</span>\n </span>\n </>\n )}\n </span>\n </div>\n <span className=\"hidden max-w-[42vw] truncate rounded-lg bg-muted px-2 py-1 text-xs font-medium text-muted-foreground md:block\">\n {props.selectedTraceId}\n </span>\n </header>\n <div className=\"min-h-0 min-w-0 overflow-hidden\">\n {props.selectedTrace === undefined ? (\n <Card className=\"grid h-full place-items-center rounded-lg border-border bg-card p-6 text-sm font-medium text-muted-foreground\">\n {props.traceLoadState === \"loading\" ? \"Loading trace\" : \"Trace not found\"}\n </Card>\n ) : (\n <TracePanel\n traces={\n props.selectedSessionTraces.length > 0\n ? props.selectedSessionTraces\n : [props.selectedTrace]\n }\n onShowSessionTraces={props.onShowSessionTraces}\n />\n )}\n </div>\n </div>\n );\n}\n\nfunction TracePanel(props: {\n traces: StudioTrace[];\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n const orderedTraces = useMemo(\n () =>\n [...props.traces].sort(\n (left, right) => Date.parse(left.startedAt) - Date.parse(right.startedAt),\n ),\n [props.traces],\n );\n const firstTraceId = orderedTraces[0]?.id ?? \"\";\n const [activeTraceId, setActiveTraceId] = useState(firstTraceId);\n const [activeKey, setActiveKey] = useState<TraceInspectorKey>(\"trace\");\n useEffect(() => {\n setActiveTraceId(firstTraceId);\n setActiveKey(\"trace\");\n }, [firstTraceId]);\n\n const activeTrace = orderedTraces.find((trace) => trace.id === activeTraceId) ?? orderedTraces[0];\n const turns = activeTrace === undefined ? [] : traceTurns(activeTrace);\n const selectTimelineItem = (traceId: string, key: TraceInspectorKey) => {\n setActiveTraceId(traceId);\n setActiveKey(key);\n };\n\n if (activeTrace === undefined) {\n return (\n <section\n className=\"grid h-full min-h-0 w-full place-items-center text-sm font-medium text-muted-foreground\"\n aria-label=\"Traces\"\n >\n No trace selected\n </section>\n );\n }\n\n return (\n <section\n className=\"grid h-full min-h-0 w-full content-stretch overflow-hidden\"\n aria-label=\"Traces\"\n >\n <div className=\"grid h-full min-h-0 grid-cols-[320px_minmax(0,1fr)] overflow-hidden max-md:grid-cols-1\">\n <nav\n className=\"grid min-h-0 auto-rows-min content-start overflow-auto border-r border-border/80 bg-card/35 pr-2 max-md:max-h-80 max-md:border-b max-md:border-r-0\"\n aria-label=\"Trace timeline\"\n >\n <div className=\"sticky top-0 z-30 flex min-h-11 items-center justify-between bg-card/90 py-0 pl-0 pr-5 text-xs font-medium text-muted-foreground backdrop-blur\">\n <span>Search</span>\n <strong className=\"text-foreground\">Timeline</strong>\n </div>\n {orderedTraces.map((trace) => {\n const traceActive = activeTrace.id === trace.id;\n const traceTurnItems = traceTurns(trace);\n return (\n <div className=\"contents\" key={trace.id}>\n <TraceTreeRow\n active={traceActive && activeKey === \"trace\"}\n ancestorLevels={[]}\n hasChildren={true}\n isLastSibling={true}\n level={0}\n tone=\"trace\"\n title={trace.name ?? \"Agent\"}\n subtitle={formatDuration(trace.durationMs)}\n onSelect={() => selectTimelineItem(trace.id, \"trace\")}\n />\n <TraceTreeRow\n active={traceActive && activeKey === \"agent\"}\n ancestorLevels={[]}\n hasChildren={traceTurnItems.length > 0}\n isLastSibling={true}\n level={1}\n tone=\"agent\"\n title=\"agent.run\"\n subtitle={formatDuration(trace.durationMs)}\n onSelect={() => selectTimelineItem(trace.id, \"agent\")}\n />\n {traceTurnItems.map((turn) => (\n <div className=\"contents\" key={`${trace.id}:turn:${turn.turn}`}>\n <TraceTreeRow\n active={traceActive && activeKey === `turn:${turn.turn}`}\n ancestorLevels={[]}\n hasChildren={turn.observations.length > 0}\n isLastSibling={turn.turn === traceTurnItems.at(-1)?.turn}\n level={2}\n tone=\"turn\"\n title={`turn.${turn.turn}`}\n subtitle={formatDuration(turn.durationMs)}\n onSelect={() => selectTimelineItem(trace.id, `turn:${turn.turn}`)}\n />\n <TraceObservationRows\n activeKey={activeKey}\n isLastTurn={turn.turn === traceTurnItems.at(-1)?.turn}\n observations={turn.observations}\n onSelect={(observationId) =>\n selectTimelineItem(trace.id, `observation:${observationId}`)\n }\n traceActive={traceActive}\n />\n </div>\n ))}\n </div>\n );\n })}\n </nav>\n <TraceDetailPane\n trace={activeTrace}\n turns={turns}\n activeKey={activeKey}\n onShowSessionTraces={props.onShowSessionTraces}\n />\n </div>\n </section>\n );\n}\n\nfunction TraceTreeRow(props: {\n active: boolean;\n ancestorLevels: number[];\n hasChildren: boolean;\n isLastSibling: boolean;\n level: number;\n tone: \"trace\" | \"agent\" | \"turn\" | StudioTrace[\"observations\"][number][\"kind\"];\n title: string;\n subtitle: string;\n onSelect: () => void;\n}) {\n const levelOffset = 22;\n const baseLeft = 12;\n const iconSize = 20;\n const iconCenter = baseLeft + iconSize / 2;\n const lineTop = 18;\n const xForLevel = (level: number) => iconCenter + level * levelOffset;\n\n return (\n <Button\n className={cn(\n \"relative grid h-auto min-h-0 w-full min-w-0 grid-cols-[20px_minmax(0,1fr)] items-start justify-start gap-2 whitespace-normal rounded-lg border-0 bg-transparent px-3 py-2.5 text-left text-muted-foreground shadow-none transition duration-200 hover:bg-accent/70 hover:text-accent-foreground\",\n props.active && \"bg-muted/45 text-foreground hover:bg-muted/45 hover:text-foreground\",\n )}\n type=\"button\"\n variant=\"ghost\"\n onClick={props.onSelect}\n style={{ paddingLeft: `${baseLeft + props.level * levelOffset}px` }}\n >\n {props.ancestorLevels.map((level) => (\n <span\n className=\"pointer-events-none absolute inset-y-0 w-px bg-muted-foreground/35\"\n style={{ left: `${xForLevel(level)}px` }}\n aria-hidden=\"true\"\n key={`ancestor-line-${level}`}\n />\n ))}\n {props.level > 0 ? (\n <>\n <span\n className=\"pointer-events-none absolute top-0 w-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level - 1)}px`,\n height: `${lineTop}px`,\n }}\n aria-hidden=\"true\"\n />\n {props.isLastSibling ? null : (\n <span\n className=\"pointer-events-none absolute bottom-0 w-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level - 1)}px`,\n top: `${lineTop}px`,\n }}\n aria-hidden=\"true\"\n />\n )}\n <span\n className=\"pointer-events-none absolute h-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level - 1)}px`,\n top: `${lineTop}px`,\n width: `${levelOffset}px`,\n }}\n aria-hidden=\"true\"\n />\n </>\n ) : null}\n {props.hasChildren ? (\n <span\n className=\"pointer-events-none absolute bottom-0 w-px bg-muted-foreground/35\"\n style={{\n left: `${xForLevel(props.level)}px`,\n top: `${lineTop}px`,\n }}\n aria-hidden=\"true\"\n />\n ) : null}\n <span\n className={cn(\n \"relative z-10 grid h-5 w-5 place-items-center rounded-lg bg-transparent [&_svg]:h-3 [&_svg]:w-3 [&_svg]:opacity-100\",\n traceToneIconClass(props.tone),\n )}\n >\n <TraceToneIcon tone={props.tone} />\n </span>\n <span className=\"grid min-w-0 gap-0.5\">\n <strong className=\"min-w-0 truncate text-sm font-medium leading-5 text-current\">\n {props.title}\n </strong>\n <span className=\"min-w-0 truncate text-xs font-medium text-muted-foreground\">\n {props.subtitle}\n </span>\n </span>\n </Button>\n );\n}\n\nfunction TraceObservationRows(props: {\n activeKey: TraceInspectorKey;\n isLastTurn: boolean;\n observations: TraceObservationItem[];\n traceActive: boolean;\n onSelect: (observationId: string) => void;\n}) {\n const roots = traceObservationTree(props.observations);\n return (\n <>\n {roots.map((node, index) => (\n <TraceObservationNodeRow\n activeKey={props.activeKey}\n ancestorLevels={props.isLastTurn ? [] : [1]}\n isLastSibling={index === roots.length - 1}\n key={node.observation.id}\n level={3}\n node={node}\n onSelect={props.onSelect}\n traceActive={props.traceActive}\n />\n ))}\n </>\n );\n}\n\nfunction TraceObservationNodeRow(props: {\n activeKey: TraceInspectorKey;\n ancestorLevels: number[];\n isLastSibling: boolean;\n level: number;\n node: TraceObservationNode;\n traceActive: boolean;\n onSelect: (observationId: string) => void;\n}) {\n const usageText = observationUsageText(props.node.observation);\n const childAncestorLevels = props.isLastSibling\n ? props.ancestorLevels\n : [...props.ancestorLevels, props.level];\n return (\n <>\n <TraceTreeRow\n active={props.traceActive && props.activeKey === `observation:${props.node.observation.id}`}\n ancestorLevels={props.ancestorLevels}\n hasChildren={props.node.children.length > 0}\n isLastSibling={props.isLastSibling}\n level={props.level}\n tone={props.node.observation.kind}\n title={traceObservationLabel(props.node.observation)}\n subtitle={\n usageText.length > 0\n ? `${formatDuration(props.node.observation.durationMs)} · ${usageText}`\n : formatDuration(props.node.observation.durationMs)\n }\n onSelect={() => props.onSelect(props.node.observation.id)}\n />\n {props.node.children.map((child, index) => (\n <TraceObservationNodeRow\n activeKey={props.activeKey}\n ancestorLevels={childAncestorLevels}\n isLastSibling={index === props.node.children.length - 1}\n key={child.observation.id}\n level={props.level + 1}\n node={child}\n onSelect={props.onSelect}\n traceActive={props.traceActive}\n />\n ))}\n </>\n );\n}\n\nfunction TraceDetailPane(props: {\n trace: StudioTrace;\n turns: Array<{ turn: number; observations: TraceObservationItem[]; durationMs?: number }>;\n activeKey: TraceInspectorKey;\n onShowSessionTraces: (sessionId: string) => void;\n}) {\n const selected = selectedTraceDetail(props.trace, props.turns, props.activeKey);\n return (\n <section\n className=\"grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-card/70\"\n aria-label=\"Trace detail\"\n >\n <header className=\"border-b border-border/60 bg-card/70 px-6 py-5\">\n <div className=\"grid min-w-0 gap-5\">\n <div className=\"flex min-w-0 items-start justify-between gap-4\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <span\n className={cn(\n \"grid h-8 w-8 shrink-0 place-items-center rounded-lg bg-foreground text-background [&_svg]:h-4 [&_svg]:w-4 [&_svg]:opacity-100\",\n selected.tone !== \"trace\" && \"bg-muted text-foreground\",\n traceToneIconClass(selected.tone),\n )}\n >\n <TraceToneIcon tone={selected.tone} />\n </span>\n <div className=\"grid min-w-0 gap-1\">\n <h2 className=\"m-0 min-w-0 truncate text-2xl font-semibold leading-none tracking-[-0.01em] text-foreground\">\n {selected.title}\n </h2>\n <div className=\" text-xs font-medium text-muted-foreground\">\n {selected.startedAt}\n </div>\n </div>\n </div>\n </div>\n <div className=\"grid min-w-0 grid-cols-[repeat(auto-fit,minmax(150px,1fr))] gap-2\">\n <TraceMetric label=\"Duration\" value={formatDuration(selected.durationMs)} />\n {selected.firstDeltaMs === undefined ? null : (\n <TraceMetric label=\"First delta\" value={formatDuration(selected.firstDeltaMs)} />\n )}\n {selected.usage.length === 0 ? null : (\n <TraceMetric label=\"Usage\" value={selected.usage} />\n )}\n <button\n className=\"grid min-w-0 gap-1 rounded-lg bg-card/85 px-4 py-3 text-left transition duration-200 hover:bg-accent hover:text-accent-foreground\"\n type=\"button\"\n onClick={() => props.onShowSessionTraces(props.trace.sessionId)}\n >\n <span className=\" text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Session\n </span>\n <span className=\"min-w-0 truncate text-sm font-semibold text-current\">\n {props.trace.sessionId}\n </span>\n </button>\n </div>\n </div>\n </header>\n <div className=\"min-w-0 overflow-auto\">\n <div className=\"grid min-w-0 content-start gap-6 p-6\">\n {selected.input === undefined ? null : (\n <TraceDataSection title=\"Input\" value={selected.input} />\n )}\n {selected.output === undefined ? null : (\n <TraceDataSection title=\"Output\" value={selected.output} tone=\"success\" />\n )}\n {selected.error === undefined ? null : (\n <TraceDataSection title=\"Error\" value={selected.error} tone=\"error\" />\n )}\n <TraceDataSection title=\"Metadata\" value={selected.metadata} rawJson />\n </div>\n </div>\n </section>\n );\n}\n\nfunction TraceMetric(props: { label: string; value: string }) {\n return (\n <div className=\"grid min-w-0 gap-1 rounded-lg bg-card/85 px-4 py-3\">\n <span className=\" text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {props.label}\n </span>\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction TraceDataSection(props: {\n title: string;\n value: unknown;\n tone?: \"success\" | \"error\";\n compact?: boolean;\n rawJson?: boolean;\n}) {\n const rows = plainTraceValue(props.title, props.value);\n return (\n <section className=\"grid min-w-0 gap-3\">\n <div className=\"flex items-center gap-3\">\n <h3 className=\"m-0 text-lg font-semibold leading-tight text-foreground\">{props.title}</h3>\n <span className=\"h-px flex-1 bg-border/80\" aria-hidden=\"true\" />\n </div>\n {props.rawJson ? (\n <TraceJsonTree value={props.value} />\n ) : (\n <div className=\"grid min-w-0 gap-3\">\n {rows.map((item) => (\n <article\n className={cn(\n \"grid min-w-0 gap-3 rounded-lg bg-card/85 px-4 py-4\",\n props.compact &&\n \"grid-cols-[150px_minmax(0,1fr)] items-start gap-4 max-lg:grid-cols-1\",\n )}\n key={`${item.label}-${item.text}`}\n >\n <span className=\"flex min-w-0 items-center gap-2 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n <TraceRowIcon label={item.label} />\n {item.label}\n </span>\n <TraceRowContent compact={props.compact} item={item} tone={props.tone} />\n </article>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction TraceRowContent(props: {\n compact?: boolean | undefined;\n item: { label: string; text: string };\n tone?: \"success\" | \"error\" | undefined;\n}) {\n const historyItems = conversationHistoryItems(props.item);\n if (historyItems.length > 0) {\n return (\n <div className=\"grid min-w-0 gap-5\">\n {historyItems.map((item) => (\n <div className=\"grid min-w-0 gap-2\" key={`${item.index}-${item.role}-${item.text}`}>\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\" text-xs font-semibold tabular-nums text-muted-foreground\">\n {item.index}\n </span>\n <Badge\n className={cn(\n \"px-1.5 py-0.5\",\n item.role === \"User\" &&\n \"border-border/80 bg-muted-foreground/15 text-muted-foreground\",\n item.role === \"Assistant\" && \"border-border/80 bg-foreground/15 text-foreground\",\n item.role === \"Tool\" &&\n \"border-destructive/40 bg-destructive/15 text-destructive\",\n )}\n >\n {item.role}\n </Badge>\n </div>\n <p className=\"m-0 whitespace-pre-wrap text-sm leading-7 text-foreground [overflow-wrap:anywhere]\">\n {item.text}\n </p>\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <p\n className={cn(\n \"m-0 whitespace-pre-wrap text-sm leading-7 text-foreground [overflow-wrap:anywhere]\",\n props.compact && \" text-sm leading-6\",\n props.tone === \"success\" && !isNeutralTraceRow(props.item) && \"text-foreground\",\n props.tone === \"error\" && \"text-destructive\",\n )}\n >\n {props.item.text}\n </p>\n );\n}\n\nfunction conversationHistoryItems(row: {\n label: string;\n text: string;\n}): Array<{ index: string; role: string; text: string }> {\n if (!row.label.startsWith(\"Conversation history\")) {\n return [];\n }\n return row.text\n .split(\"\\n\\n\")\n .flatMap((block): Array<{ index: string; role: string; text: string }> => {\n const [heading, ...content] = block.split(\"\\n\");\n const match = /^(\\d+)\\.\\s+(.+)$/.exec(heading ?? \"\");\n if (match === null) {\n return [];\n }\n return [\n {\n index: match[1] ?? \"\",\n role: match[2] ?? \"Message\",\n text: content.join(\"\\n\"),\n },\n ];\n });\n}\n"],"x_google_ignoreList":[2],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import{i as e,r as t,s as n,t as r}from"./utils-C9GMruoG.js";import{n as i}from"./format-D43vTqrO.js";import{G as a,I as o,J as s,L as c,Y as l,n as u,nt as d,st as f,t as p}from"./index-CQhv4Ee3.js";import{t as m}from"./badge-D7D2A73-.js";import{i as h,r as g}from"./renderers-B3IhuxP9.js";var _=n(e(),1),v=t(),y=(0,_.memo)(function(e){let t=e.displayText??(`text`in e.entry?e.entry.text:``);if(e.entry.kind===`reasoning`)return(0,v.jsxs)(`article`,{className:`max-w-205 justify-self-start text-muted-foreground`,"data-entry-id":String(e.entry.entryId),children:[(0,v.jsx)(`div`,{className:`mb-1 text-xs font-semibold uppercase text-muted-foreground`,children:`Reasoning`}),(0,v.jsx)(g,{live:e.live,size:`base`,text:t})]});if(e.entry.kind===`tool`)return(0,v.jsx)(j,{entry:e.entry,decidingApprovals:e.decidingApprovals,answeringQuestions:e.answeringQuestions,onApprovalDecision:e.onApprovalDecision,onQuestionAnswer:e.onQuestionAnswer});let n=e.entry.role===`assistant`?e.entry.traceId:void 0,i=e.entry.role===`assistant`&&A(t),a=e.entry.role===`assistant`&&`tone`in e.entry&&e.entry.tone===`error`,o=e.entry.role===`assistant`&&`tone`in e.entry&&e.entry.tone===`pending`,s=e.entry.role===`assistant`&&!o&&e.entry.text.trim().length>0,c=e.entry.durationMs??e.metrics?.durationMs,l=s||e.workingStartedAt!==void 0||c!==void 0;return e.entry.role===`user`?(0,v.jsxs)(`article`,{className:`grid w-fit max-w-[min(64ch,82%)] justify-items-end justify-self-end self-start text-foreground`,"data-entry-id":String(e.entry.entryId),children:[e.entry.text.trim().length===0?null:(0,v.jsx)(`div`,{className:`rounded-2xl bg-muted/55 px-4 py-2.5 shadow-sm shadow-black/[0.04] dark:bg-white/[0.08] dark:shadow-black/20`,children:(0,v.jsx)(g,{size:`base`,text:e.entry.text})}),e.entry.attachments===void 0?null:(0,v.jsx)(k,{attachments:e.entry.attachments})]}):(0,v.jsxs)(`article`,{className:r(`self-start`,i?`w-full max-w-full`:`max-w-[min(82ch,100%)]`,e.entry.role===`assistant`&&r(`justify-self-start text-foreground`,a&&`text-destructive`)),"data-entry-id":String(e.entry.entryId),children:[o?(0,v.jsx)(O,{}):null,t.trim().length===0?null:(0,v.jsx)(g,{live:e.live,size:`base`,text:t}),l?(0,v.jsx)(b,{metrics:e.metrics,showActions:s,text:e.entry.text,traceId:n,durationMs:e.workingStartedAt===void 0?c:void 0,startedAt:e.workingStartedAt,onOpenTrace:e.onOpenTrace}):null]})});function b(e){let[t,n]=(0,_.useState)(!1),r=e.traceId;async function i(){if(!(typeof navigator>`u`||navigator.clipboard===void 0))try{await navigator.clipboard.writeText(e.text),n(!0),window.setTimeout(()=>n(!1),1200)}catch{n(!1)}}return(0,v.jsxs)(`div`,{className:`mt-3 flex min-w-0 items-center gap-1.5`,children:[e.showActions?(0,v.jsx)(c,{"aria-label":t?`Response copied`:`Copy response`,className:`h-8 min-h-8 w-8 rounded-lg border border-border/70 bg-muted/30 p-0 text-muted-foreground shadow-none hover:border-border hover:bg-muted/55 hover:text-foreground`,title:t?`Copied`:`Copy response`,type:`button`,variant:`ghost`,onClick:()=>void i(),children:(0,v.jsx)(o,{icon:t?l:s,"aria-hidden":`true`})}):null,e.showActions?(0,v.jsxs)(`div`,{className:`group relative`,children:[(0,v.jsx)(c,{"aria-label":`Response metrics`,className:`h-8 min-h-8 w-8 rounded-lg border border-border/70 bg-muted/30 p-0 text-muted-foreground shadow-none hover:border-border hover:bg-muted/55 hover:text-foreground`,title:T(e.metrics),type:`button`,variant:`ghost`,children:(0,v.jsx)(o,{icon:a,"aria-hidden":`true`})}),(0,v.jsx)(`div`,{className:`pointer-events-none absolute left-0 top-full z-30 mt-2 hidden w-64 rounded-lg border border-border/90 bg-popover p-3 text-popover-foreground shadow-xl shadow-black/25 group-focus-within:grid group-hover:grid`,role:`tooltip`,children:(0,v.jsx)(x,{metrics:e.metrics})})]}):null,!e.showActions||r===void 0?null:(0,v.jsx)(c,{"aria-label":`Open trace ${r}`,className:`h-8 min-h-8 w-8 rounded-lg border border-border/70 bg-muted/30 p-0 text-muted-foreground shadow-none hover:border-border hover:bg-muted/55 hover:text-foreground`,title:`Open trace ${r}`,type:`button`,variant:`ghost`,onClick:()=>e.onOpenTrace(r),children:(0,v.jsx)(o,{icon:d,"aria-hidden":`true`})}),(0,v.jsx)(p,{className:e.showActions?`ml-1.5`:void 0,durationMs:e.durationMs,startedAt:e.startedAt})]})}function x(e){let t=C(e.metrics);return(0,v.jsxs)(`div`,{className:`grid min-w-0 gap-2 text-xs leading-5`,children:[(0,v.jsx)(`div`,{className:`font-semibold text-foreground`,children:`Response metrics`}),(0,v.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,v.jsx)(S,{label:`Cost`,value:`Unavailable`}),t.length===0?(0,v.jsx)(`div`,{className:`text-muted-foreground`,children:`No usage metrics yet`}):t.map(e=>(0,v.jsx)(S,{label:e.label,value:e.value},e.label))]})]})}function S(e){return(0,v.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,v.jsx)(`span`,{className:`text-muted-foreground`,children:e.label}),(0,v.jsx)(`span`,{className:`shrink-0 font-medium tabular-nums text-foreground`,children:e.value})]})}function C(e){let t=[],n=e?.usage;return n?.totalTokens!==void 0&&t.push({label:`Total`,value:`${E(n.totalTokens)} tokens`}),n?.inputTokens!==void 0&&t.push({label:`Input`,value:E(n.inputTokens)}),n?.outputTokens!==void 0&&t.push({label:`Output`,value:E(n.outputTokens)}),w(t,`Cached`,n,`cachedInputTokens`),w(t,`Cache create`,n,`cacheCreationInputTokens`),e?.durationMs!==void 0&&t.push({label:`Duration`,value:D(e.durationMs)}),t}function w(e,t,n,r){let i=n?.[r];i!==void 0&&i>0&&e.push({label:t,value:E(i)})}function T(e){let t=C(e);return t.length===0?`Cost unavailable. No usage metrics yet.`:[`Cost unavailable`,...t.map(e=>`${e.label}: ${e.value}`)].join(`. `)}function E(e){return e.toLocaleString()}function D(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(1)}s`}function O(){return(0,v.jsxs)(`div`,{"aria-label":`Assistant is responding`,className:`inline-flex h-9 min-h-9 items-center gap-2 rounded-xl border border-border/70 bg-muted/35 px-3 text-muted-foreground shadow-sm`,role:`status`,children:[(0,v.jsxs)(`span`,{className:`flex items-center gap-1`,"aria-hidden":`true`,children:[(0,v.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-foreground`}),(0,v.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-foreground [animation-delay:150ms]`}),(0,v.jsx)(`span`,{className:`h-1.5 w-1.5 animate-pulse rounded-full bg-foreground [animation-delay:300ms]`})]}),(0,v.jsx)(`span`,{className:` text-xs font-semibold uppercase text-muted-foreground`,children:`Thinking`})]})}function k(e){return(0,v.jsx)(`div`,{className:`mt-2 flex max-w-full flex-wrap gap-2`,children:e.attachments.map((e,t)=>{let n=`${e.kind}-${e.name??e.mediaType??t}-${t}`;if(e.kind===`image`){let t=e.url??(e.data===void 0?void 0:`data:${e.mediaType??`image/png`};base64,${e.data}`);return(0,v.jsx)(`div`,{className:`overflow-hidden rounded-lg border border-border/80 bg-card/80`,children:t===void 0?(0,v.jsx)(`div`,{className:`grid h-20 w-24 place-items-center px-2 text-center text-xs text-muted-foreground`,children:`Image`}):(0,v.jsx)(`img`,{alt:e.name??`Attached image`,className:`h-20 w-24 object-cover`,src:t})},n)}return(0,v.jsx)(`span`,{className:`inline-flex max-w-full items-center gap-1.5 rounded-lg border border-border/80 bg-card/80 px-2 py-1 text-xs font-medium text-muted-foreground`,children:(0,v.jsx)(`span`,{className:`min-w-0 truncate`,children:e.name??e.mediaType??`Document`})},n)})})}function A(e){let t=e.split(`
2
- `);return t.some((e,n)=>{let r=t[n+1];return e.includes(`|`)&&r!==void 0&&/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/.test(r)})}function j(e){let[t,n]=(0,_.useState)(e.entry.approval?.status!==`pending`&&e.entry.question?.status!==`pending`),i=e.entry.approval,a=e.entry.question,s=e.entry.childEvents??[],l=e.entry.args!==void 0||e.entry.result!==void 0||s.length>0||i!==void 0||a!==void 0,u=i?.status===`pending`,d=a?.status===`pending`,p=i?.status===`cancelled`||a?.status===`cancelled`,g=i!==void 0&&e.decidingApprovals.has(i.id),y=a!==void 0&&e.answeringQuestions.has(a.id);return(0,v.jsxs)(`article`,{className:`w-full justify-self-start overflow-hidden rounded-xl border border-border/80 bg-card/90 text-foreground shadow-sm shadow-black/20`,"data-entry-id":String(e.entry.entryId),children:[(0,v.jsxs)(`div`,{className:r(`flex min-w-0 items-center gap-2 px-3 py-2.5`,!t&&l&&`bg-muted/20`),children:[(0,v.jsxs)(c,{"aria-expanded":!t,className:`h-auto min-h-0 min-w-0 flex-1 justify-between border-0 bg-transparent p-0 text-left text-inherit shadow-none hover:bg-transparent hover:text-inherit`,type:`button`,variant:`ghost`,onClick:()=>n(e=>!e),children:[(0,v.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`grid h-6 w-4 shrink-0 place-items-center text-foreground`,children:(0,v.jsx)(o,{icon:f,className:`h-3.5 w-3.5`,"aria-hidden":`true`})}),(0,v.jsx)(`strong`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:e.entry.toolName})]}),u?null:(0,v.jsx)(`span`,{className:`ml-auto shrink-0 text-xs font-medium text-muted-foreground`,children:t?`Show`:`Hide`})]}),u&&i!==void 0?(0,v.jsx)(L,{disabled:g,onDecision:t=>e.onApprovalDecision(i.id,t)}):null,d?(0,v.jsx)(m,{className:`border-border/70 bg-muted/45 px-1.5 py-0.5 text-xs uppercase text-foreground`,children:`Waiting for input`}):null,p?(0,v.jsx)(m,{className:`border-border/70 bg-muted/45 px-1.5 py-0.5 text-xs uppercase text-muted-foreground`,children:`Cancelled`}):null,u||d?(0,v.jsx)(c,{"aria-expanded":!t,className:`h-7 min-h-7 px-2 text-xs font-medium`,size:`sm`,type:`button`,variant:`ghost`,onClick:()=>n(e=>!e),children:t?`Show`:`Hide`}):null]}),t||!l?null:(0,v.jsxs)(`div`,{className:`grid gap-3 p-3`,children:[i===void 0?null:(0,v.jsx)(I,{approval:i}),a===void 0?null:(0,v.jsx)(N,{disabled:y,question:a,onAnswer:t=>e.onQuestionAnswer(a.id,t)}),a!==void 0||e.entry.args===void 0?null:(0,v.jsx)(h,{title:`Input`,value:e.entry.args}),s.length===0?null:(0,v.jsx)(M,{events:s}),a!==void 0||e.entry.result===void 0?null:(0,v.jsx)(h,{title:`Output`,value:e.entry.result})]})]})}function M(e){return(0,v.jsxs)(`div`,{className:`overflow-hidden rounded-xl border border-border/80 bg-background/65`,children:[(0,v.jsx)(`div`,{className:`bg-muted/20 px-3 py-2 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:`Subagent activity`}),(0,v.jsx)(`div`,{className:`grid gap-3 p-3`,children:e.events.map(e=>{let t=e.agentName??e.agentId;return e.kind===`message`||e.kind===`reasoning`?(0,v.jsxs)(`div`,{className:`grid gap-1 rounded-xl border border-border/80 bg-card/90 p-3`,children:[(0,v.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,v.jsx)(m,{className:`border-border bg-muted px-1.5 py-0.5 text-xs uppercase text-muted-foreground`,children:e.kind===`reasoning`?`Reasoning`:`Response`}),(0,v.jsx)(`span`,{className:`min-w-0 truncate text-xs font-semibold text-muted-foreground`,children:t})]}),(0,v.jsx)(g,{size:`base`,text:e.text})]},`${e.kind}-${e.agentId}-${e.text}`):(0,v.jsxs)(`div`,{className:`grid gap-2 rounded-xl border border-border/80 bg-card/90 p-3`,children:[(0,v.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,v.jsx)(m,{className:`border-border/70 bg-muted/45 px-1.5 py-0.5 text-xs uppercase text-foreground`,children:`Tool`}),(0,v.jsxs)(`span`,{className:`min-w-0 truncate text-xs font-semibold text-muted-foreground`,children:[t,` / `,e.toolName]})]}),e.args===void 0?null:(0,v.jsx)(h,{title:`Input`,value:e.args}),e.result===void 0?null:(0,v.jsx)(h,{title:`Output`,value:e.result})]},`${e.kind}-${e.agentId}-${e.toolName}-${e.callId??e.args??e.result??``}`)})})]})}function N(e){let[t,n]=(0,_.useState)({}),[r,i]=(0,_.useState)(0),a=e.question.status===`pending`,o=e.question.questions.length,s=e.question.questions.map(e=>{let n=t[e.id],r=n?.customValue?.trim()??``,i=r.length>0?r:n?.answer,a={questionId:e.id,answer:i?.trim()??``};return n?.choice!==void 0&&(a.choice=n.choice),r.length>0&&(a.custom=!0),a}),l=o===0?0:Math.min(r,o-1),u=e.question.questions[l],d=s[l]?.answer??``,f=s.filter(e=>e.answer.length>0).length,p=d.length>0,m=a&&s.every(e=>e.answer.length>0),h=l===0,g=l>=o-1;if(u===void 0)return(0,v.jsx)(`div`,{className:`rounded-xl border border-border bg-background p-4 text-sm font-medium text-muted-foreground`,children:`No questions`});let y=()=>i(e=>Math.max(0,e-1)),b=()=>i(t=>Math.min(e.question.questions.length-1,t+1)),x=(e,t)=>n(n=>({...n,[e]:t}));return(0,v.jsxs)(`div`,{className:`grid gap-3`,children:[e.question.status===`cancelled`?(0,v.jsx)(`div`,{className:`rounded-xl border border-border/70 bg-muted/25 px-3 py-2.5 text-sm font-medium text-muted-foreground`,children:`Question cancelled`}):null,(0,v.jsx)(P,{disabled:e.disabled||!a,index:l,total:o,question:u,value:t[u.id],answer:e.question.answers?.find(e=>e.questionId===u.id),onChange:e=>x(u.id,e),onAdvance:g?void 0:b},u.id),a?(0,v.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3 rounded-xl bg-muted/20 px-3 py-2`,children:[(0,v.jsxs)(`div`,{className:`min-w-0 text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground`,children:[f,`/`,o,` answered`]}),(0,v.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[h?null:(0,v.jsx)(c,{type:`button`,variant:`secondary`,onClick:y,children:`Back`}),g?(0,v.jsx)(c,{className:`h-9 min-h-9 px-4`,disabled:e.disabled||!m,type:`button`,onClick:()=>e.onAnswer(s),children:`Submit answers`}):(0,v.jsx)(c,{className:`h-9 min-h-9 px-4`,disabled:e.disabled||!p,type:`button`,onClick:b,children:`Next question`})]})]}):o>1?(0,v.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3 rounded-xl bg-muted/20 px-3 py-2`,children:[(0,v.jsx)(`div`,{className:`min-w-0 text-xs font-semibold uppercase tracking-[0.2em] text-foreground`,children:`Answered`}),(0,v.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,v.jsx)(c,{disabled:h,type:`button`,variant:`secondary`,onClick:y,children:`Back`}),(0,v.jsx)(c,{disabled:g,type:`button`,variant:`secondary`,onClick:b,children:`Next`})]})]}):null]})}function P(e){let t=e.answer?.answer,n=F(e.value),i=t===void 0?n.length>0?`Ready`:`Waiting`:`Answered`;return(0,v.jsxs)(`section`,{className:`grid gap-4 rounded-xl border border-border/80 bg-background/70 p-4`,children:[(0,v.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-4`,children:[(0,v.jsxs)(`div`,{className:`grid min-w-0 gap-2`,children:[(0,v.jsxs)(`div`,{className:` text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground`,children:[`Question `,e.index+1,` of `,e.total]}),(0,v.jsx)(`h3`,{className:`m-0 text-base font-semibold leading-7 text-foreground [overflow-wrap:anywhere]`,children:e.question.question})]}),(0,v.jsx)(`span`,{className:r(`shrink-0 text-xs font-semibold uppercase tracking-[0.18em]`,i===`Answered`&&`text-foreground`,i===`Ready`&&`text-foreground`,i===`Waiting`&&`text-muted-foreground`),children:i})]}),t===void 0?null:(0,v.jsx)(`div`,{className:`rounded-lg border border-border/70 bg-muted/45 px-3 py-2 text-sm font-medium text-foreground`,children:t}),t===void 0&&e.question.choices.length>0?(0,v.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.question.choices.map(t=>{let n=e.value?.choice===t.value;return(0,v.jsx)(c,{className:r(`h-8 min-h-8 px-3 text-xs`,n&&`border-foreground/45`),disabled:e.disabled,size:`sm`,type:`button`,variant:n?`default`:`secondary`,onClick:()=>{e.onChange({answer:t.value,choice:t.value,customValue:e.value?.customValue??``}),e.onAdvance?.()},children:t.label},t.value)})}):null,t===void 0?(0,v.jsx)(u,{className:`min-h-24 text-sm`,disabled:e.disabled,placeholder:`Type a custom answer`,rows:3,value:e.value?.customValue??``,onChange:t=>e.onChange({...e.value,customValue:t.currentTarget.value})}):null]})}function F(e){let t=e?.customValue?.trim()??``;return t.length>0?t:e?.answer?.trim()??``}function I(e){return(0,v.jsxs)(`div`,{className:`grid gap-2 rounded-xl border border-border/70 bg-muted/25 px-3 py-2.5`,children:[(0,v.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,v.jsx)(m,{className:r(`border-border/70 bg-background/60 px-1.5 py-0.5 text-xs uppercase text-muted-foreground`,e.approval.status===`approved`&&`text-foreground`,e.approval.status===`rejected`&&`text-destructive`),children:`Approval`}),(0,v.jsx)(`div`,{className:`min-w-0`,children:(0,v.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:i(e.approval)})})]}),e.approval.reason===void 0?null:(0,v.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground [overflow-wrap:anywhere]`,children:e.approval.reason})]})}function L(e){return(0,v.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 rounded-lg border border-border/80 bg-background/55 p-0.5`,children:[(0,v.jsx)(c,{className:`h-7 min-h-7 rounded-md border-0 bg-transparent px-2.5 text-xs text-muted-foreground shadow-none hover:bg-destructive/10 hover:text-destructive`,disabled:e.disabled,size:`sm`,type:`button`,variant:`ghost`,onClick:()=>e.onDecision(!1),children:`Reject`}),(0,v.jsx)(c,{className:`h-7 min-h-7 rounded-md px-2.5 text-xs`,disabled:e.disabled,size:`sm`,type:`button`,onClick:()=>e.onDecision(!0),children:`Approve`})]})}export{y as TranscriptItem};
3
- //# sourceMappingURL=transcript-item-B7FFJ52t.js.map