@anvia/studio 0.5.6 → 0.5.8

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 (34) hide show
  1. package/dist/ui/assets/{ArrowClockwise.es-BmQVpKSP.js → ArrowClockwise.es-cF7OPZy5.js} +2 -2
  2. package/dist/ui/assets/{ArrowClockwise.es-BmQVpKSP.js.map → ArrowClockwise.es-cF7OPZy5.js.map} +1 -1
  3. package/dist/ui/assets/{Path.es-_A9Dgf5g.js → Path.es-D-NB-Xon.js} +2 -2
  4. package/dist/ui/assets/{Path.es-_A9Dgf5g.js.map → Path.es-D-NB-Xon.js.map} +1 -1
  5. package/dist/ui/assets/{Play.es-CD4VDp0t.js → Play.es-BoMnJL28.js} +2 -2
  6. package/dist/ui/assets/{Play.es-CD4VDp0t.js.map → Play.es-BoMnJL28.js.map} +1 -1
  7. package/dist/ui/assets/{evals-page-D7c1f_3g.js → evals-page-Cx4Ycr-Y.js} +2 -2
  8. package/dist/ui/assets/{evals-page-D7c1f_3g.js.map → evals-page-Cx4Ycr-Y.js.map} +1 -1
  9. package/dist/ui/assets/index-rc2RWnWD.js +54 -0
  10. package/dist/ui/assets/index-rc2RWnWD.js.map +1 -0
  11. package/dist/ui/assets/{knowledge-page-BC58KH0x.js → knowledge-page-DASnGzYP.js} +2 -2
  12. package/dist/ui/assets/{knowledge-page-BC58KH0x.js.map → knowledge-page-DASnGzYP.js.map} +1 -1
  13. package/dist/ui/assets/{mcps-page-q6-GgvSQ.js → mcps-page-B7VAqsoU.js} +2 -2
  14. package/dist/ui/assets/{mcps-page-q6-GgvSQ.js.map → mcps-page-B7VAqsoU.js.map} +1 -1
  15. package/dist/ui/assets/{memory-page-DzYytliI.js → memory-page-BCv19Tw_.js} +2 -2
  16. package/dist/ui/assets/{memory-page-DzYytliI.js.map → memory-page-BCv19Tw_.js.map} +1 -1
  17. package/dist/ui/assets/{pipelines-page-waqYX8YQ.js → pipelines-page-Byb_JYxi.js} +2 -2
  18. package/dist/ui/assets/{pipelines-page-waqYX8YQ.js.map → pipelines-page-Byb_JYxi.js.map} +1 -1
  19. package/dist/ui/assets/{renderers-DBx9o89u.js → renderers-C8RHOlPz.js} +2 -2
  20. package/dist/ui/assets/{renderers-DBx9o89u.js.map → renderers-C8RHOlPz.js.map} +1 -1
  21. package/dist/ui/assets/{sessions-page-DrD_19ku.js → sessions-page-CV8GZKjN.js} +2 -2
  22. package/dist/ui/assets/{sessions-page-DrD_19ku.js.map → sessions-page-CV8GZKjN.js.map} +1 -1
  23. package/dist/ui/assets/{status-page-4-V7jY6F.js → status-page-a6SMAcLu.js} +2 -2
  24. package/dist/ui/assets/{status-page-4-V7jY6F.js.map → status-page-a6SMAcLu.js.map} +1 -1
  25. package/dist/ui/assets/{tools-page-DuyWVX2b.js → tools-page-Dpj7hI8q.js} +2 -2
  26. package/dist/ui/assets/{tools-page-DuyWVX2b.js.map → tools-page-Dpj7hI8q.js.map} +1 -1
  27. package/dist/ui/assets/{trace-browser-DwQWfo7X.js → trace-browser-dvGDi7ji.js} +2 -2
  28. package/dist/ui/assets/{trace-browser-DwQWfo7X.js.map → trace-browser-dvGDi7ji.js.map} +1 -1
  29. package/dist/ui/assets/{transcript-item-BJyZu-ue.js → transcript-item-GmOQdc53.js} +2 -2
  30. package/dist/ui/assets/{transcript-item-BJyZu-ue.js.map → transcript-item-GmOQdc53.js.map} +1 -1
  31. package/dist/ui/index.html +1 -1
  32. package/package.json +4 -4
  33. package/dist/ui/assets/index-ZVqWotd2.js +0 -55
  34. package/dist/ui/assets/index-ZVqWotd2.js.map +0 -1
@@ -1,3 +1,3 @@
1
- import{i as e,n as t,s as n,t as r}from"./jsx-runtime-ZfyQks-z.js";import{t as i}from"./Path.es-_A9Dgf5g.js";import{B as a,L as o,m as s,r as c}from"./index-ZVqWotd2.js";import{t as l}from"./badge-CNbpc5Sm.js";import{i as u,r as d}from"./renderers-DBx9o89u.js";var f=n(e(),1),p=r();function m(e){if(e.entry.kind===`reasoning`)return(0,p.jsxs)(`article`,{className:`max-w-205 justify-self-start text-muted-foreground`,"data-entry-id":String(e.entry.entryId),children:[(0,p.jsx)(`div`,{className:`mb-1 text-xs font-semibold uppercase text-muted-foreground`,children:`Reasoning`}),(0,p.jsx)(d,{text:e.entry.text})]});if(e.entry.kind===`tool`)return(0,p.jsx)(g,{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,r=e.entry.role===`assistant`&&h(e.entry.text),a=e.entry.role===`assistant`&&`tone`in e.entry&&e.entry.tone===`error`;return(0,p.jsxs)(`article`,{className:t(`self-start`,r?`w-full max-w-full`:`max-w-[min(82ch,100%)]`,e.entry.role===`assistant`&&t(`justify-self-start text-foreground`,a&&`text-destructive`),e.entry.role===`user`&&`w-fit max-w-[min(64ch,82%)] justify-self-end rounded-2xl bg-primary/10 px-4 py-2.5 text-foreground shadow-sm shadow-primary/10`),"data-entry-id":String(e.entry.entryId),children:[(0,p.jsx)(d,{text:e.entry.text}),n===void 0?null:(0,p.jsxs)(o,{className:`group mt-3 h-7 min-h-7 max-w-full gap-1.5 rounded-lg border border-primary/25 bg-primary/10 px-2 py-1 font-mono text-xs font-semibold text-muted-foreground shadow-none transition duration-200 hover:border-primary/45 hover:bg-primary/15 hover:text-primary`,type:`button`,variant:`ghost`,onClick:()=>e.onOpenTrace(n),children:[(0,p.jsx)(`span`,{className:`grid h-4 w-4 shrink-0 place-items-center text-primary [&_svg]:h-3 [&_svg]:w-3`,children:(0,p.jsx)(i,{"aria-hidden":`true`})}),(0,p.jsx)(`span`,{className:`font-sans text-[10px] font-semibold uppercase tracking-[0.14em] text-primary`,children:`Trace`}),(0,p.jsx)(`span`,{className:`h-4 w-px shrink-0 bg-primary/25`,"aria-hidden":`true`}),(0,p.jsx)(`span`,{className:`min-w-0 truncate text-muted-foreground transition-colors group-hover:text-primary`,children:n})]})]})}function h(e){let t=e.split(`
1
+ import{i as e,n as t,s as n,t as r}from"./jsx-runtime-ZfyQks-z.js";import{t as i}from"./Path.es-D-NB-Xon.js";import{B as a,L as o,m as s,r as c}from"./index-rc2RWnWD.js";import{t as l}from"./badge-CNbpc5Sm.js";import{i as u,r as d}from"./renderers-C8RHOlPz.js";var f=n(e(),1),p=r();function m(e){if(e.entry.kind===`reasoning`)return(0,p.jsxs)(`article`,{className:`max-w-205 justify-self-start text-muted-foreground`,"data-entry-id":String(e.entry.entryId),children:[(0,p.jsx)(`div`,{className:`mb-1 text-xs font-semibold uppercase text-muted-foreground`,children:`Reasoning`}),(0,p.jsx)(d,{text:e.entry.text})]});if(e.entry.kind===`tool`)return(0,p.jsx)(g,{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,r=e.entry.role===`assistant`&&h(e.entry.text),a=e.entry.role===`assistant`&&`tone`in e.entry&&e.entry.tone===`error`;return(0,p.jsxs)(`article`,{className:t(`self-start`,r?`w-full max-w-full`:`max-w-[min(82ch,100%)]`,e.entry.role===`assistant`&&t(`justify-self-start text-foreground`,a&&`text-destructive`),e.entry.role===`user`&&`w-fit max-w-[min(64ch,82%)] justify-self-end rounded-2xl bg-primary/10 px-4 py-2.5 text-foreground shadow-sm shadow-primary/10`),"data-entry-id":String(e.entry.entryId),children:[(0,p.jsx)(d,{text:e.entry.text}),n===void 0?null:(0,p.jsxs)(o,{className:`group mt-3 h-7 min-h-7 max-w-full gap-1.5 rounded-lg border border-primary/25 bg-primary/10 px-2 py-1 font-mono text-xs font-semibold text-muted-foreground shadow-none transition duration-200 hover:border-primary/45 hover:bg-primary/15 hover:text-primary`,type:`button`,variant:`ghost`,onClick:()=>e.onOpenTrace(n),children:[(0,p.jsx)(`span`,{className:`grid h-4 w-4 shrink-0 place-items-center text-primary [&_svg]:h-3 [&_svg]:w-3`,children:(0,p.jsx)(i,{"aria-hidden":`true`})}),(0,p.jsx)(`span`,{className:`font-sans text-[10px] font-semibold uppercase tracking-[0.14em] text-primary`,children:`Trace`}),(0,p.jsx)(`span`,{className:`h-4 w-px shrink-0 bg-primary/25`,"aria-hidden":`true`}),(0,p.jsx)(`span`,{className:`min-w-0 truncate text-muted-foreground transition-colors group-hover:text-primary`,children:n})]})]})}function h(e){let t=e.split(`
2
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 g(e){let[n,r]=(0,f.useState)(e.entry.approval?.status!==`pending`&&e.entry.question?.status!==`pending`),i=e.entry.approval,s=e.entry.question,c=e.entry.childEvents??[],d=e.entry.args!==void 0||e.entry.result!==void 0||c.length>0||i!==void 0||s!==void 0,m=i?.status===`pending`,h=s?.status===`pending`,g=i!==void 0&&e.decidingApprovals.has(i.id),y=s!==void 0&&e.answeringQuestions.has(s.id);return(0,p.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,p.jsxs)(`div`,{className:t(`flex min-w-0 items-center gap-2 px-3 py-2.5`,!n&&d&&`bg-muted/20`),children:[(0,p.jsxs)(o,{"aria-expanded":!n,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:()=>r(e=>!e),children:[(0,p.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`grid h-6 w-4 shrink-0 place-items-center text-primary`,children:(0,p.jsx)(a,{className:`h-3.5 w-3.5`,"aria-hidden":`true`})}),(0,p.jsx)(`strong`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:e.entry.toolName})]}),m?null:(0,p.jsx)(`span`,{className:`ml-auto shrink-0 text-[11px] font-medium text-muted-foreground`,children:n?`Show`:`Hide`})]}),m&&i!==void 0?(0,p.jsx)(S,{compact:!0,disabled:g,onDecision:t=>e.onApprovalDecision(i.id,t)}):null,h?(0,p.jsx)(l,{className:`border-primary/25 bg-primary/10 px-1.5 py-0.5 text-[10px] uppercase text-primary`,children:`Waiting for input`}):null,m||h?(0,p.jsx)(o,{"aria-expanded":!n,className:`h-7 min-h-7 px-2 text-[11px] font-medium`,size:`sm`,type:`button`,variant:`ghost`,onClick:()=>r(e=>!e),children:n?`Show`:`Hide`}):null]}),n||!d?null:(0,p.jsxs)(`div`,{className:`grid gap-3 p-3`,children:[i===void 0?null:(0,p.jsx)(x,{approval:i,disabled:g,onDecision:t=>e.onApprovalDecision(i.id,t)}),s===void 0?null:(0,p.jsx)(v,{disabled:y,question:s,onAnswer:t=>e.onQuestionAnswer(s.id,t)}),s!==void 0||e.entry.args===void 0?null:(0,p.jsx)(u,{title:`Input`,value:e.entry.args}),c.length===0?null:(0,p.jsx)(_,{events:c}),s!==void 0||e.entry.result===void 0?null:(0,p.jsx)(u,{title:`Output`,value:e.entry.result})]})]})}function _(e){return(0,p.jsxs)(`div`,{className:`overflow-hidden rounded-xl border border-border/80 bg-background/65`,children:[(0,p.jsx)(`div`,{className:`bg-muted/20 px-3 py-2 font-mono text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:`Subagent activity`}),(0,p.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,p.jsxs)(`div`,{className:`grid gap-1 rounded-xl border border-border/80 bg-card/90 p-3`,children:[(0,p.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,p.jsx)(l,{className:`border-border bg-muted px-1.5 py-0.5 text-[10px] uppercase text-muted-foreground`,children:e.kind===`reasoning`?`Reasoning`:`Response`}),(0,p.jsx)(`span`,{className:`min-w-0 truncate text-xs font-semibold text-muted-foreground`,children:t})]}),(0,p.jsx)(d,{text:e.text})]},`${e.kind}-${e.agentId}-${e.text}`):(0,p.jsxs)(`div`,{className:`grid gap-2 rounded-xl border border-border/80 bg-card/90 p-3`,children:[(0,p.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,p.jsx)(l,{className:`border-primary/25 bg-primary/10 px-1.5 py-0.5 text-[10px] uppercase text-primary`,children:`Tool`}),(0,p.jsxs)(`span`,{className:`min-w-0 truncate text-xs font-semibold text-muted-foreground`,children:[t,` / `,e.toolName]})]}),e.args===void 0?null:(0,p.jsx)(u,{title:`Input`,value:e.args}),e.result===void 0?null:(0,p.jsx)(u,{title:`Output`,value:e.result})]},`${e.kind}-${e.agentId}-${e.toolName}-${e.callId??e.args??e.result??``}`)})})]})}function v(e){let[t,n]=(0,f.useState)({}),[r,i]=(0,f.useState)(0),a=e.question.status===`pending`,s=e.question.questions.length,c=e.question.questions.map(e=>{let n=t[e.id],r=n?.customValue?.trim()??``,i=r.length>0?r:n?.answer;return{questionId:e.id,answer:i?.trim()??``,...n?.choice===void 0?{}:{choice:n.choice},...r.length>0?{custom:!0}:{}}}),l=s===0?0:Math.min(r,s-1),u=e.question.questions[l],d=c[l]?.answer??``,m=c.filter(e=>e.answer.length>0).length,h=d.length>0,g=a&&c.every(e=>e.answer.length>0),_=l===0,v=l>=s-1;if(u===void 0)return(0,p.jsx)(`div`,{className:`rounded-xl border border-border bg-background p-4 text-sm font-medium text-muted-foreground`,children:`No questions`});let b=()=>i(e=>Math.max(0,e-1)),x=()=>i(t=>Math.min(e.question.questions.length-1,t+1)),S=(e,t)=>n(n=>({...n,[e]:t}));return(0,p.jsxs)(`div`,{className:`grid gap-3`,children:[(0,p.jsx)(y,{disabled:e.disabled||!a,index:l,total:s,question:u,value:t[u.id],answer:e.question.answers?.find(e=>e.questionId===u.id),onChange:e=>S(u.id,e),...v?{}:{onAdvance:x}},u.id),a?(0,p.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3 rounded-xl bg-muted/20 px-3 py-2`,children:[(0,p.jsxs)(`div`,{className:`min-w-0 font-mono text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground`,children:[m,`/`,s,` answered`]}),(0,p.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[_?null:(0,p.jsx)(o,{type:`button`,variant:`secondary`,onClick:b,children:`Back`}),v?(0,p.jsx)(o,{className:`h-9 min-h-9 px-4`,disabled:e.disabled||!g,type:`button`,onClick:()=>e.onAnswer(c),children:`Submit answers`}):(0,p.jsx)(o,{className:`h-9 min-h-9 px-4`,disabled:e.disabled||!h,type:`button`,onClick:x,children:`Next question`})]})]}):s>1?(0,p.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3 rounded-xl bg-muted/20 px-3 py-2`,children:[(0,p.jsx)(`div`,{className:`min-w-0 font-mono text-[11px] font-semibold uppercase tracking-[0.2em] text-primary`,children:`Answered`}),(0,p.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,p.jsx)(o,{disabled:_,type:`button`,variant:`secondary`,onClick:b,children:`Back`}),(0,p.jsx)(o,{disabled:v,type:`button`,variant:`secondary`,onClick:x,children:`Next`})]})]}):null]})}function y(e){let n=e.answer?.answer,r=b(e.value),i=n===void 0?r.length>0?`Ready`:`Waiting`:`Answered`;return(0,p.jsxs)(`section`,{className:`grid gap-4 rounded-xl border border-border/80 bg-background/70 p-4`,children:[(0,p.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-4`,children:[(0,p.jsxs)(`div`,{className:`grid min-w-0 gap-2`,children:[(0,p.jsxs)(`div`,{className:`font-mono text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground`,children:[`Question `,e.index+1,` of `,e.total]}),(0,p.jsx)(`h3`,{className:`m-0 text-base font-semibold leading-7 text-foreground [overflow-wrap:anywhere]`,children:e.question.question})]}),(0,p.jsx)(`span`,{className:t(`shrink-0 font-mono text-[11px] font-semibold uppercase tracking-[0.18em]`,i===`Answered`&&`text-primary`,i===`Ready`&&`text-foreground`,i===`Waiting`&&`text-muted-foreground`),children:i})]}),n===void 0?null:(0,p.jsx)(`div`,{className:`rounded-lg border border-primary/20 bg-primary/10 px-3 py-2 text-sm font-medium text-foreground`,children:n}),n===void 0&&e.question.choices.length>0?(0,p.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.question.choices.map(n=>{let r=e.value?.choice===n.value;return(0,p.jsx)(o,{className:t(`h-8 min-h-8 px-3 text-xs`,r&&`border-primary`),disabled:e.disabled,size:`sm`,type:`button`,variant:r?`default`:`secondary`,onClick:()=>{e.onChange({answer:n.value,choice:n.value,customValue:e.value?.customValue??``}),e.onAdvance?.()},children:n.label},n.value)})}):null,n===void 0?(0,p.jsx)(s,{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 b(e){let t=e?.customValue?.trim()??``;return t.length>0?t:e?.answer?.trim()??``}function x(e){let t=e.approval.status===`pending`;return(0,p.jsxs)(`div`,{className:`grid gap-3 rounded-xl border border-border/80 bg-muted/35 p-3`,children:[(0,p.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,p.jsxs)(`div`,{className:`min-w-0`,children:[(0,p.jsx)(`div`,{className:`text-xs font-semibold uppercase text-muted-foreground`,children:`Approval`}),(0,p.jsx)(`div`,{className:`mt-0.5 text-sm font-medium text-foreground`,children:c(e.approval)})]}),t?(0,p.jsx)(S,{disabled:e.disabled,onDecision:e.onDecision}):null]}),e.approval.reason===void 0?null:(0,p.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground [overflow-wrap:anywhere]`,children:e.approval.reason})]})}function S(e){return(0,p.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,p.jsx)(o,{className:t(e.compact?`h-7 min-h-7 px-2 text-xs`:`h-8 min-h-8`),disabled:e.disabled,size:`sm`,type:`button`,onClick:()=>e.onDecision(!0),children:`Approve`}),(0,p.jsx)(o,{className:t(e.compact?`h-7 min-h-7 px-2 text-xs`:`h-8 min-h-8`),disabled:e.disabled,size:`sm`,type:`button`,variant:`secondary`,onClick:()=>e.onDecision(!1),children:`Reject`})]})}export{m as TranscriptItem};
3
- //# sourceMappingURL=transcript-item-BJyZu-ue.js.map
3
+ //# sourceMappingURL=transcript-item-GmOQdc53.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transcript-item-BJyZu-ue.js","names":[],"sources":["../../../src/ui/app/modules/playground/transcript-item.tsx"],"sourcesContent":["import { Path, Wrench } from \"@phosphor-icons/react\";\nimport { useState } from \"react\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { Textarea } from \"../../components/ui/textarea\";\nimport { cn } from \"../../lib/utils\";\nimport { approvalLabel } from \"../shared/format\";\nimport { MarkdownText, ToolPayload } from \"../shared/renderers\";\nimport type { ToolApproval, ToolMessage, ToolQuestion, TranscriptEntry } from \"../shared/types\";\n\nexport function TranscriptItem(props: {\n entry: TranscriptEntry;\n decidingApprovals: Set<string>;\n answeringQuestions: Set<string>;\n onApprovalDecision: (approvalId: string, approved: boolean) => void;\n onQuestionAnswer: (\n questionId: string,\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n onOpenTrace: (traceId: string) => void;\n}) {\n if (props.entry.kind === \"reasoning\") {\n return (\n <article\n className=\"max-w-205 justify-self-start text-muted-foreground\"\n data-entry-id={String(props.entry.entryId)}\n >\n <div className=\"mb-1 text-xs font-semibold uppercase text-muted-foreground\">Reasoning</div>\n <MarkdownText text={props.entry.text} />\n </article>\n );\n }\n\n if (props.entry.kind === \"tool\") {\n return (\n <ToolEntry\n entry={props.entry}\n decidingApprovals={props.decidingApprovals}\n answeringQuestions={props.answeringQuestions}\n onApprovalDecision={props.onApprovalDecision}\n onQuestionAnswer={props.onQuestionAnswer}\n />\n );\n }\n\n const traceId = props.entry.role === \"assistant\" ? props.entry.traceId : undefined;\n const hasTable = props.entry.role === \"assistant\" && hasMarkdownTable(props.entry.text);\n const isError =\n props.entry.role === \"assistant\" && \"tone\" in props.entry && props.entry.tone === \"error\";\n\n return (\n <article\n className={cn(\n \"self-start\",\n hasTable ? \"w-full max-w-full\" : \"max-w-[min(82ch,100%)]\",\n props.entry.role === \"assistant\" &&\n cn(\"justify-self-start text-foreground\", isError && \"text-destructive\"),\n props.entry.role === \"user\" &&\n \"w-fit max-w-[min(64ch,82%)] justify-self-end rounded-2xl bg-primary/10 px-4 py-2.5 text-foreground shadow-sm shadow-primary/10\",\n )}\n data-entry-id={String(props.entry.entryId)}\n >\n <MarkdownText text={props.entry.text} />\n {traceId !== undefined ? (\n <Button\n className=\"group mt-3 h-7 min-h-7 max-w-full gap-1.5 rounded-lg border border-primary/25 bg-primary/10 px-2 py-1 font-mono text-xs font-semibold text-muted-foreground shadow-none transition duration-200 hover:border-primary/45 hover:bg-primary/15 hover:text-primary\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onOpenTrace(traceId)}\n >\n <span className=\"grid h-4 w-4 shrink-0 place-items-center text-primary [&_svg]:h-3 [&_svg]:w-3\">\n <Path aria-hidden=\"true\" />\n </span>\n <span className=\"font-sans text-[10px] font-semibold uppercase tracking-[0.14em] text-primary\">\n Trace\n </span>\n <span className=\"h-4 w-px shrink-0 bg-primary/25\" aria-hidden=\"true\" />\n <span className=\"min-w-0 truncate text-muted-foreground transition-colors group-hover:text-primary\">\n {traceId}\n </span>\n </Button>\n ) : null}\n </article>\n );\n}\n\nfunction hasMarkdownTable(text: string): boolean {\n const lines = text.split(\"\\n\");\n return lines.some((line, index) => {\n const next = lines[index + 1];\n return (\n line.includes(\"|\") &&\n next !== undefined &&\n /^\\s*\\|?\\s*:?-{3,}:?\\s*(\\|\\s*:?-{3,}:?\\s*)+\\|?\\s*$/.test(next)\n );\n });\n}\n\nfunction ToolEntry(props: {\n entry: ToolMessage;\n decidingApprovals: Set<string>;\n answeringQuestions: Set<string>;\n onApprovalDecision: (approvalId: string, approved: boolean) => void;\n onQuestionAnswer: (\n questionId: string,\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n}) {\n const [collapsed, setCollapsed] = useState(\n props.entry.approval?.status !== \"pending\" && props.entry.question?.status !== \"pending\",\n );\n const approval = props.entry.approval;\n const question = props.entry.question;\n const childEvents = props.entry.childEvents ?? [];\n const hasPayload =\n props.entry.args !== undefined ||\n props.entry.result !== undefined ||\n childEvents.length > 0 ||\n approval !== undefined ||\n question !== undefined;\n const pendingApproval = approval?.status === \"pending\";\n const pendingQuestion = question?.status === \"pending\";\n const deciding = approval !== undefined && props.decidingApprovals.has(approval.id);\n const answering = question !== undefined && props.answeringQuestions.has(question.id);\n\n return (\n <article\n className=\"w-full justify-self-start overflow-hidden rounded-xl border border-border/80 bg-card/90 text-foreground shadow-sm shadow-black/20\"\n data-entry-id={String(props.entry.entryId)}\n >\n <div\n className={cn(\n \"flex min-w-0 items-center gap-2 px-3 py-2.5\",\n !collapsed && hasPayload && \"bg-muted/20\",\n )}\n >\n <Button\n aria-expanded={!collapsed}\n 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\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setCollapsed((current) => !current)}\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n <span className=\"grid h-6 w-4 shrink-0 place-items-center text-primary\">\n <Wrench className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </span>\n <strong className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {props.entry.toolName}\n </strong>\n </span>\n {pendingApproval ? null : (\n <span className=\"ml-auto shrink-0 text-[11px] font-medium text-muted-foreground\">\n {collapsed ? \"Show\" : \"Hide\"}\n </span>\n )}\n </Button>\n {pendingApproval && approval !== undefined ? (\n <ToolApprovalActions\n compact\n disabled={deciding}\n onDecision={(approved) => props.onApprovalDecision(approval.id, approved)}\n />\n ) : null}\n {pendingQuestion ? (\n <Badge className=\"border-primary/25 bg-primary/10 px-1.5 py-0.5 text-[10px] uppercase text-primary\">\n Waiting for input\n </Badge>\n ) : null}\n {pendingApproval || pendingQuestion ? (\n <Button\n aria-expanded={!collapsed}\n className=\"h-7 min-h-7 px-2 text-[11px] font-medium\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setCollapsed((current) => !current)}\n >\n {collapsed ? \"Show\" : \"Hide\"}\n </Button>\n ) : null}\n </div>\n {collapsed || !hasPayload ? null : (\n <div className=\"grid gap-3 p-3\">\n {approval === undefined ? null : (\n <ToolApprovalPanel\n approval={approval}\n disabled={deciding}\n onDecision={(approved) => props.onApprovalDecision(approval.id, approved)}\n />\n )}\n {question === undefined ? null : (\n <ToolQuestionPanel\n disabled={answering}\n question={question}\n onAnswer={(answers) => props.onQuestionAnswer(question.id, answers)}\n />\n )}\n {question !== undefined || props.entry.args === undefined ? null : (\n <ToolPayload title=\"Input\" value={props.entry.args} />\n )}\n {childEvents.length === 0 ? null : <ChildAgentActivity events={childEvents} />}\n {question !== undefined || props.entry.result === undefined ? null : (\n <ToolPayload title=\"Output\" value={props.entry.result} />\n )}\n </div>\n )}\n </article>\n );\n}\n\nfunction ChildAgentActivity(props: { events: NonNullable<ToolMessage[\"childEvents\"]> }) {\n return (\n <div className=\"overflow-hidden rounded-xl border border-border/80 bg-background/65\">\n <div className=\"bg-muted/20 px-3 py-2 font-mono text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n Subagent activity\n </div>\n <div className=\"grid gap-3 p-3\">\n {props.events.map((event) => {\n const agentLabel = event.agentName ?? event.agentId;\n if (event.kind === \"message\" || event.kind === \"reasoning\") {\n return (\n <div\n className=\"grid gap-1 rounded-xl border border-border/80 bg-card/90 p-3\"\n key={`${event.kind}-${event.agentId}-${event.text}`}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge className=\"border-border bg-muted px-1.5 py-0.5 text-[10px] uppercase text-muted-foreground\">\n {event.kind === \"reasoning\" ? \"Reasoning\" : \"Response\"}\n </Badge>\n <span className=\"min-w-0 truncate text-xs font-semibold text-muted-foreground\">\n {agentLabel}\n </span>\n </div>\n <MarkdownText text={event.text} />\n </div>\n );\n }\n return (\n <div\n className=\"grid gap-2 rounded-xl border border-border/80 bg-card/90 p-3\"\n key={`${event.kind}-${event.agentId}-${event.toolName}-${event.callId ?? event.args ?? event.result ?? \"\"}`}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge className=\"border-primary/25 bg-primary/10 px-1.5 py-0.5 text-[10px] uppercase text-primary\">\n Tool\n </Badge>\n <span className=\"min-w-0 truncate text-xs font-semibold text-muted-foreground\">\n {agentLabel} / {event.toolName}\n </span>\n </div>\n {event.args === undefined ? null : <ToolPayload title=\"Input\" value={event.args} />}\n {event.result === undefined ? null : (\n <ToolPayload title=\"Output\" value={event.result} />\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction ToolQuestionPanel(props: {\n question: ToolQuestion;\n disabled: boolean;\n onAnswer: (\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n}) {\n const [values, setValues] = useState<Record<string, QuestionDraft>>({});\n const [activeQuestionIndex, setActiveQuestionIndex] = useState(0);\n const pending = props.question.status === \"pending\";\n const total = props.question.questions.length;\n\n const answers = props.question.questions.map((question) => {\n const draft = values[question.id];\n const customAnswer = draft?.customValue?.trim() ?? \"\";\n const answer = customAnswer.length > 0 ? customAnswer : draft?.answer;\n return {\n questionId: question.id,\n answer: answer?.trim() ?? \"\",\n ...(draft?.choice === undefined ? {} : { choice: draft.choice }),\n ...(customAnswer.length > 0 ? { custom: true } : {}),\n };\n });\n const activeIndex = total === 0 ? 0 : Math.min(activeQuestionIndex, total - 1);\n const activeQuestion = props.question.questions[activeIndex];\n const activeAnswer = answers[activeIndex]?.answer ?? \"\";\n const answeredCount = answers.filter((answer) => answer.answer.length > 0).length;\n const canAdvance = activeAnswer.length > 0;\n const canSubmit = pending && answers.every((answer) => answer.answer.length > 0);\n const firstQuestion = activeIndex === 0;\n const lastQuestion = activeIndex >= total - 1;\n\n if (activeQuestion === undefined) {\n return (\n <div className=\"rounded-xl border border-border bg-background p-4 text-sm font-medium text-muted-foreground\">\n No questions\n </div>\n );\n }\n\n const goPrevious = () => setActiveQuestionIndex((current) => Math.max(0, current - 1));\n const goNext = () =>\n setActiveQuestionIndex((current) => Math.min(props.question.questions.length - 1, current + 1));\n const updateDraft = (questionId: string, value: QuestionDraft) =>\n setValues((current) => ({\n ...current,\n [questionId]: value,\n }));\n\n return (\n <div className=\"grid gap-3\">\n <QuestionPromptControl\n key={activeQuestion.id}\n disabled={props.disabled || !pending}\n index={activeIndex}\n total={total}\n question={activeQuestion}\n value={values[activeQuestion.id]}\n answer={props.question.answers?.find((answer) => answer.questionId === activeQuestion.id)}\n onChange={(value) => updateDraft(activeQuestion.id, value)}\n {...(lastQuestion ? {} : { onAdvance: goNext })}\n />\n {pending ? (\n <div className=\"flex min-w-0 items-center justify-between gap-3 rounded-xl bg-muted/20 px-3 py-2\">\n <div className=\"min-w-0 font-mono text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n {answeredCount}/{total} answered\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {firstQuestion ? null : (\n <Button type=\"button\" variant=\"secondary\" onClick={goPrevious}>\n Back\n </Button>\n )}\n {lastQuestion ? (\n <Button\n className=\"h-9 min-h-9 px-4\"\n disabled={props.disabled || !canSubmit}\n type=\"button\"\n onClick={() => props.onAnswer(answers)}\n >\n Submit answers\n </Button>\n ) : (\n <Button\n className=\"h-9 min-h-9 px-4\"\n disabled={props.disabled || !canAdvance}\n type=\"button\"\n onClick={goNext}\n >\n Next question\n </Button>\n )}\n </div>\n </div>\n ) : total > 1 ? (\n <div className=\"flex min-w-0 items-center justify-between gap-3 rounded-xl bg-muted/20 px-3 py-2\">\n <div className=\"min-w-0 font-mono text-[11px] font-semibold uppercase tracking-[0.2em] text-primary\">\n Answered\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n <Button disabled={firstQuestion} type=\"button\" variant=\"secondary\" onClick={goPrevious}>\n Back\n </Button>\n <Button disabled={lastQuestion} type=\"button\" variant=\"secondary\" onClick={goNext}>\n Next\n </Button>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\ntype QuestionDraft = {\n answer?: string;\n choice?: string;\n customValue?: string;\n};\n\nfunction QuestionPromptControl(props: {\n question: ToolQuestion[\"questions\"][number];\n value: QuestionDraft | undefined;\n answer: NonNullable<ToolQuestion[\"answers\"]>[number] | undefined;\n disabled: boolean;\n index: number;\n total: number;\n onChange: (value: QuestionDraft) => void;\n onAdvance?: () => void;\n}) {\n const submittedAnswer = props.answer?.answer;\n const draftAnswer = questionDraftAnswer(props.value);\n const state =\n submittedAnswer !== undefined ? \"Answered\" : draftAnswer.length > 0 ? \"Ready\" : \"Waiting\";\n\n return (\n <section className=\"grid gap-4 rounded-xl border border-border/80 bg-background/70 p-4\">\n <div className=\"flex min-w-0 items-start justify-between gap-4\">\n <div className=\"grid min-w-0 gap-2\">\n <div className=\"font-mono text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n Question {props.index + 1} of {props.total}\n </div>\n <h3 className=\"m-0 text-base font-semibold leading-7 text-foreground [overflow-wrap:anywhere]\">\n {props.question.question}\n </h3>\n </div>\n <span\n className={cn(\n \"shrink-0 font-mono text-[11px] font-semibold uppercase tracking-[0.18em]\",\n state === \"Answered\" && \"text-primary\",\n state === \"Ready\" && \"text-foreground\",\n state === \"Waiting\" && \"text-muted-foreground\",\n )}\n >\n {state}\n </span>\n </div>\n {submittedAnswer === undefined ? null : (\n <div className=\"rounded-lg border border-primary/20 bg-primary/10 px-3 py-2 text-sm font-medium text-foreground\">\n {submittedAnswer}\n </div>\n )}\n {submittedAnswer !== undefined ? null : props.question.choices.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {props.question.choices.map((choice) => {\n const active = props.value?.choice === choice.value;\n return (\n <Button\n key={choice.value}\n className={cn(\"h-8 min-h-8 px-3 text-xs\", active && \"border-primary\")}\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n variant={active ? \"default\" : \"secondary\"}\n onClick={() => {\n props.onChange({\n answer: choice.value,\n choice: choice.value,\n customValue: props.value?.customValue ?? \"\",\n });\n props.onAdvance?.();\n }}\n >\n {choice.label}\n </Button>\n );\n })}\n </div>\n ) : null}\n {submittedAnswer !== undefined ? null : (\n <Textarea\n className=\"min-h-24 text-sm\"\n disabled={props.disabled}\n placeholder=\"Type a custom answer\"\n rows={3}\n value={props.value?.customValue ?? \"\"}\n onChange={(event) =>\n props.onChange({\n ...props.value,\n customValue: event.currentTarget.value,\n })\n }\n />\n )}\n </section>\n );\n}\n\nfunction questionDraftAnswer(value: QuestionDraft | undefined): string {\n const customAnswer = value?.customValue?.trim() ?? \"\";\n return customAnswer.length > 0 ? customAnswer : (value?.answer?.trim() ?? \"\");\n}\n\nfunction ToolApprovalPanel(props: {\n approval: ToolApproval;\n disabled: boolean;\n onDecision: (approved: boolean) => void;\n}) {\n const pending = props.approval.status === \"pending\";\n return (\n <div className=\"grid gap-3 rounded-xl border border-border/80 bg-muted/35 p-3\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"text-xs font-semibold uppercase text-muted-foreground\">Approval</div>\n <div className=\"mt-0.5 text-sm font-medium text-foreground\">\n {approvalLabel(props.approval)}\n </div>\n </div>\n {pending ? (\n <ToolApprovalActions disabled={props.disabled} onDecision={props.onDecision} />\n ) : null}\n </div>\n {props.approval.reason === undefined ? null : (\n <div className=\"text-xs font-medium text-muted-foreground [overflow-wrap:anywhere]\">\n {props.approval.reason}\n </div>\n )}\n </div>\n );\n}\n\nfunction ToolApprovalActions(props: {\n compact?: boolean;\n disabled: boolean;\n onDecision: (approved: boolean) => void;\n}) {\n return (\n <div className=\"flex shrink-0 items-center gap-2\">\n <Button\n className={cn(props.compact ? \"h-7 min-h-7 px-2 text-xs\" : \"h-8 min-h-8\")}\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n onClick={() => props.onDecision(true)}\n >\n Approve\n </Button>\n <Button\n className={cn(props.compact ? \"h-7 min-h-7 px-2 text-xs\" : \"h-8 min-h-8\")}\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => props.onDecision(false)}\n >\n Reject\n </Button>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"transcript-item-GmOQdc53.js","names":[],"sources":["../../../src/ui/app/modules/playground/transcript-item.tsx"],"sourcesContent":["import { Path, Wrench } from \"@phosphor-icons/react\";\nimport { useState } from \"react\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { Textarea } from \"../../components/ui/textarea\";\nimport { cn } from \"../../lib/utils\";\nimport { approvalLabel } from \"../shared/format\";\nimport { MarkdownText, ToolPayload } from \"../shared/renderers\";\nimport type { ToolApproval, ToolMessage, ToolQuestion, TranscriptEntry } from \"../shared/types\";\n\nexport function TranscriptItem(props: {\n entry: TranscriptEntry;\n decidingApprovals: Set<string>;\n answeringQuestions: Set<string>;\n onApprovalDecision: (approvalId: string, approved: boolean) => void;\n onQuestionAnswer: (\n questionId: string,\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n onOpenTrace: (traceId: string) => void;\n}) {\n if (props.entry.kind === \"reasoning\") {\n return (\n <article\n className=\"max-w-205 justify-self-start text-muted-foreground\"\n data-entry-id={String(props.entry.entryId)}\n >\n <div className=\"mb-1 text-xs font-semibold uppercase text-muted-foreground\">Reasoning</div>\n <MarkdownText text={props.entry.text} />\n </article>\n );\n }\n\n if (props.entry.kind === \"tool\") {\n return (\n <ToolEntry\n entry={props.entry}\n decidingApprovals={props.decidingApprovals}\n answeringQuestions={props.answeringQuestions}\n onApprovalDecision={props.onApprovalDecision}\n onQuestionAnswer={props.onQuestionAnswer}\n />\n );\n }\n\n const traceId = props.entry.role === \"assistant\" ? props.entry.traceId : undefined;\n const hasTable = props.entry.role === \"assistant\" && hasMarkdownTable(props.entry.text);\n const isError =\n props.entry.role === \"assistant\" && \"tone\" in props.entry && props.entry.tone === \"error\";\n\n return (\n <article\n className={cn(\n \"self-start\",\n hasTable ? \"w-full max-w-full\" : \"max-w-[min(82ch,100%)]\",\n props.entry.role === \"assistant\" &&\n cn(\"justify-self-start text-foreground\", isError && \"text-destructive\"),\n props.entry.role === \"user\" &&\n \"w-fit max-w-[min(64ch,82%)] justify-self-end rounded-2xl bg-primary/10 px-4 py-2.5 text-foreground shadow-sm shadow-primary/10\",\n )}\n data-entry-id={String(props.entry.entryId)}\n >\n <MarkdownText text={props.entry.text} />\n {traceId !== undefined ? (\n <Button\n className=\"group mt-3 h-7 min-h-7 max-w-full gap-1.5 rounded-lg border border-primary/25 bg-primary/10 px-2 py-1 font-mono text-xs font-semibold text-muted-foreground shadow-none transition duration-200 hover:border-primary/45 hover:bg-primary/15 hover:text-primary\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onOpenTrace(traceId)}\n >\n <span className=\"grid h-4 w-4 shrink-0 place-items-center text-primary [&_svg]:h-3 [&_svg]:w-3\">\n <Path aria-hidden=\"true\" />\n </span>\n <span className=\"font-sans text-[10px] font-semibold uppercase tracking-[0.14em] text-primary\">\n Trace\n </span>\n <span className=\"h-4 w-px shrink-0 bg-primary/25\" aria-hidden=\"true\" />\n <span className=\"min-w-0 truncate text-muted-foreground transition-colors group-hover:text-primary\">\n {traceId}\n </span>\n </Button>\n ) : null}\n </article>\n );\n}\n\nfunction hasMarkdownTable(text: string): boolean {\n const lines = text.split(\"\\n\");\n return lines.some((line, index) => {\n const next = lines[index + 1];\n return (\n line.includes(\"|\") &&\n next !== undefined &&\n /^\\s*\\|?\\s*:?-{3,}:?\\s*(\\|\\s*:?-{3,}:?\\s*)+\\|?\\s*$/.test(next)\n );\n });\n}\n\nfunction ToolEntry(props: {\n entry: ToolMessage;\n decidingApprovals: Set<string>;\n answeringQuestions: Set<string>;\n onApprovalDecision: (approvalId: string, approved: boolean) => void;\n onQuestionAnswer: (\n questionId: string,\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n}) {\n const [collapsed, setCollapsed] = useState(\n props.entry.approval?.status !== \"pending\" && props.entry.question?.status !== \"pending\",\n );\n const approval = props.entry.approval;\n const question = props.entry.question;\n const childEvents = props.entry.childEvents ?? [];\n const hasPayload =\n props.entry.args !== undefined ||\n props.entry.result !== undefined ||\n childEvents.length > 0 ||\n approval !== undefined ||\n question !== undefined;\n const pendingApproval = approval?.status === \"pending\";\n const pendingQuestion = question?.status === \"pending\";\n const deciding = approval !== undefined && props.decidingApprovals.has(approval.id);\n const answering = question !== undefined && props.answeringQuestions.has(question.id);\n\n return (\n <article\n className=\"w-full justify-self-start overflow-hidden rounded-xl border border-border/80 bg-card/90 text-foreground shadow-sm shadow-black/20\"\n data-entry-id={String(props.entry.entryId)}\n >\n <div\n className={cn(\n \"flex min-w-0 items-center gap-2 px-3 py-2.5\",\n !collapsed && hasPayload && \"bg-muted/20\",\n )}\n >\n <Button\n aria-expanded={!collapsed}\n 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\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setCollapsed((current) => !current)}\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n <span className=\"grid h-6 w-4 shrink-0 place-items-center text-primary\">\n <Wrench className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </span>\n <strong className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {props.entry.toolName}\n </strong>\n </span>\n {pendingApproval ? null : (\n <span className=\"ml-auto shrink-0 text-[11px] font-medium text-muted-foreground\">\n {collapsed ? \"Show\" : \"Hide\"}\n </span>\n )}\n </Button>\n {pendingApproval && approval !== undefined ? (\n <ToolApprovalActions\n compact\n disabled={deciding}\n onDecision={(approved) => props.onApprovalDecision(approval.id, approved)}\n />\n ) : null}\n {pendingQuestion ? (\n <Badge className=\"border-primary/25 bg-primary/10 px-1.5 py-0.5 text-[10px] uppercase text-primary\">\n Waiting for input\n </Badge>\n ) : null}\n {pendingApproval || pendingQuestion ? (\n <Button\n aria-expanded={!collapsed}\n className=\"h-7 min-h-7 px-2 text-[11px] font-medium\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setCollapsed((current) => !current)}\n >\n {collapsed ? \"Show\" : \"Hide\"}\n </Button>\n ) : null}\n </div>\n {collapsed || !hasPayload ? null : (\n <div className=\"grid gap-3 p-3\">\n {approval === undefined ? null : (\n <ToolApprovalPanel\n approval={approval}\n disabled={deciding}\n onDecision={(approved) => props.onApprovalDecision(approval.id, approved)}\n />\n )}\n {question === undefined ? null : (\n <ToolQuestionPanel\n disabled={answering}\n question={question}\n onAnswer={(answers) => props.onQuestionAnswer(question.id, answers)}\n />\n )}\n {question !== undefined || props.entry.args === undefined ? null : (\n <ToolPayload title=\"Input\" value={props.entry.args} />\n )}\n {childEvents.length === 0 ? null : <ChildAgentActivity events={childEvents} />}\n {question !== undefined || props.entry.result === undefined ? null : (\n <ToolPayload title=\"Output\" value={props.entry.result} />\n )}\n </div>\n )}\n </article>\n );\n}\n\nfunction ChildAgentActivity(props: { events: NonNullable<ToolMessage[\"childEvents\"]> }) {\n return (\n <div className=\"overflow-hidden rounded-xl border border-border/80 bg-background/65\">\n <div className=\"bg-muted/20 px-3 py-2 font-mono text-[11px] font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n Subagent activity\n </div>\n <div className=\"grid gap-3 p-3\">\n {props.events.map((event) => {\n const agentLabel = event.agentName ?? event.agentId;\n if (event.kind === \"message\" || event.kind === \"reasoning\") {\n return (\n <div\n className=\"grid gap-1 rounded-xl border border-border/80 bg-card/90 p-3\"\n key={`${event.kind}-${event.agentId}-${event.text}`}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge className=\"border-border bg-muted px-1.5 py-0.5 text-[10px] uppercase text-muted-foreground\">\n {event.kind === \"reasoning\" ? \"Reasoning\" : \"Response\"}\n </Badge>\n <span className=\"min-w-0 truncate text-xs font-semibold text-muted-foreground\">\n {agentLabel}\n </span>\n </div>\n <MarkdownText text={event.text} />\n </div>\n );\n }\n return (\n <div\n className=\"grid gap-2 rounded-xl border border-border/80 bg-card/90 p-3\"\n key={`${event.kind}-${event.agentId}-${event.toolName}-${event.callId ?? event.args ?? event.result ?? \"\"}`}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge className=\"border-primary/25 bg-primary/10 px-1.5 py-0.5 text-[10px] uppercase text-primary\">\n Tool\n </Badge>\n <span className=\"min-w-0 truncate text-xs font-semibold text-muted-foreground\">\n {agentLabel} / {event.toolName}\n </span>\n </div>\n {event.args === undefined ? null : <ToolPayload title=\"Input\" value={event.args} />}\n {event.result === undefined ? null : (\n <ToolPayload title=\"Output\" value={event.result} />\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nfunction ToolQuestionPanel(props: {\n question: ToolQuestion;\n disabled: boolean;\n onAnswer: (\n answers: Array<{ questionId: string; answer: string; choice?: string; custom?: boolean }>,\n ) => void;\n}) {\n const [values, setValues] = useState<Record<string, QuestionDraft>>({});\n const [activeQuestionIndex, setActiveQuestionIndex] = useState(0);\n const pending = props.question.status === \"pending\";\n const total = props.question.questions.length;\n\n const answers = props.question.questions.map((question) => {\n const draft = values[question.id];\n const customAnswer = draft?.customValue?.trim() ?? \"\";\n const answer = customAnswer.length > 0 ? customAnswer : draft?.answer;\n return {\n questionId: question.id,\n answer: answer?.trim() ?? \"\",\n ...(draft?.choice === undefined ? {} : { choice: draft.choice }),\n ...(customAnswer.length > 0 ? { custom: true } : {}),\n };\n });\n const activeIndex = total === 0 ? 0 : Math.min(activeQuestionIndex, total - 1);\n const activeQuestion = props.question.questions[activeIndex];\n const activeAnswer = answers[activeIndex]?.answer ?? \"\";\n const answeredCount = answers.filter((answer) => answer.answer.length > 0).length;\n const canAdvance = activeAnswer.length > 0;\n const canSubmit = pending && answers.every((answer) => answer.answer.length > 0);\n const firstQuestion = activeIndex === 0;\n const lastQuestion = activeIndex >= total - 1;\n\n if (activeQuestion === undefined) {\n return (\n <div className=\"rounded-xl border border-border bg-background p-4 text-sm font-medium text-muted-foreground\">\n No questions\n </div>\n );\n }\n\n const goPrevious = () => setActiveQuestionIndex((current) => Math.max(0, current - 1));\n const goNext = () =>\n setActiveQuestionIndex((current) => Math.min(props.question.questions.length - 1, current + 1));\n const updateDraft = (questionId: string, value: QuestionDraft) =>\n setValues((current) => ({\n ...current,\n [questionId]: value,\n }));\n\n return (\n <div className=\"grid gap-3\">\n <QuestionPromptControl\n key={activeQuestion.id}\n disabled={props.disabled || !pending}\n index={activeIndex}\n total={total}\n question={activeQuestion}\n value={values[activeQuestion.id]}\n answer={props.question.answers?.find((answer) => answer.questionId === activeQuestion.id)}\n onChange={(value) => updateDraft(activeQuestion.id, value)}\n {...(lastQuestion ? {} : { onAdvance: goNext })}\n />\n {pending ? (\n <div className=\"flex min-w-0 items-center justify-between gap-3 rounded-xl bg-muted/20 px-3 py-2\">\n <div className=\"min-w-0 font-mono text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n {answeredCount}/{total} answered\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {firstQuestion ? null : (\n <Button type=\"button\" variant=\"secondary\" onClick={goPrevious}>\n Back\n </Button>\n )}\n {lastQuestion ? (\n <Button\n className=\"h-9 min-h-9 px-4\"\n disabled={props.disabled || !canSubmit}\n type=\"button\"\n onClick={() => props.onAnswer(answers)}\n >\n Submit answers\n </Button>\n ) : (\n <Button\n className=\"h-9 min-h-9 px-4\"\n disabled={props.disabled || !canAdvance}\n type=\"button\"\n onClick={goNext}\n >\n Next question\n </Button>\n )}\n </div>\n </div>\n ) : total > 1 ? (\n <div className=\"flex min-w-0 items-center justify-between gap-3 rounded-xl bg-muted/20 px-3 py-2\">\n <div className=\"min-w-0 font-mono text-[11px] font-semibold uppercase tracking-[0.2em] text-primary\">\n Answered\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n <Button disabled={firstQuestion} type=\"button\" variant=\"secondary\" onClick={goPrevious}>\n Back\n </Button>\n <Button disabled={lastQuestion} type=\"button\" variant=\"secondary\" onClick={goNext}>\n Next\n </Button>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\ntype QuestionDraft = {\n answer?: string;\n choice?: string;\n customValue?: string;\n};\n\nfunction QuestionPromptControl(props: {\n question: ToolQuestion[\"questions\"][number];\n value: QuestionDraft | undefined;\n answer: NonNullable<ToolQuestion[\"answers\"]>[number] | undefined;\n disabled: boolean;\n index: number;\n total: number;\n onChange: (value: QuestionDraft) => void;\n onAdvance?: () => void;\n}) {\n const submittedAnswer = props.answer?.answer;\n const draftAnswer = questionDraftAnswer(props.value);\n const state =\n submittedAnswer !== undefined ? \"Answered\" : draftAnswer.length > 0 ? \"Ready\" : \"Waiting\";\n\n return (\n <section className=\"grid gap-4 rounded-xl border border-border/80 bg-background/70 p-4\">\n <div className=\"flex min-w-0 items-start justify-between gap-4\">\n <div className=\"grid min-w-0 gap-2\">\n <div className=\"font-mono text-[11px] font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n Question {props.index + 1} of {props.total}\n </div>\n <h3 className=\"m-0 text-base font-semibold leading-7 text-foreground [overflow-wrap:anywhere]\">\n {props.question.question}\n </h3>\n </div>\n <span\n className={cn(\n \"shrink-0 font-mono text-[11px] font-semibold uppercase tracking-[0.18em]\",\n state === \"Answered\" && \"text-primary\",\n state === \"Ready\" && \"text-foreground\",\n state === \"Waiting\" && \"text-muted-foreground\",\n )}\n >\n {state}\n </span>\n </div>\n {submittedAnswer === undefined ? null : (\n <div className=\"rounded-lg border border-primary/20 bg-primary/10 px-3 py-2 text-sm font-medium text-foreground\">\n {submittedAnswer}\n </div>\n )}\n {submittedAnswer !== undefined ? null : props.question.choices.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {props.question.choices.map((choice) => {\n const active = props.value?.choice === choice.value;\n return (\n <Button\n key={choice.value}\n className={cn(\"h-8 min-h-8 px-3 text-xs\", active && \"border-primary\")}\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n variant={active ? \"default\" : \"secondary\"}\n onClick={() => {\n props.onChange({\n answer: choice.value,\n choice: choice.value,\n customValue: props.value?.customValue ?? \"\",\n });\n props.onAdvance?.();\n }}\n >\n {choice.label}\n </Button>\n );\n })}\n </div>\n ) : null}\n {submittedAnswer !== undefined ? null : (\n <Textarea\n className=\"min-h-24 text-sm\"\n disabled={props.disabled}\n placeholder=\"Type a custom answer\"\n rows={3}\n value={props.value?.customValue ?? \"\"}\n onChange={(event) =>\n props.onChange({\n ...props.value,\n customValue: event.currentTarget.value,\n })\n }\n />\n )}\n </section>\n );\n}\n\nfunction questionDraftAnswer(value: QuestionDraft | undefined): string {\n const customAnswer = value?.customValue?.trim() ?? \"\";\n return customAnswer.length > 0 ? customAnswer : (value?.answer?.trim() ?? \"\");\n}\n\nfunction ToolApprovalPanel(props: {\n approval: ToolApproval;\n disabled: boolean;\n onDecision: (approved: boolean) => void;\n}) {\n const pending = props.approval.status === \"pending\";\n return (\n <div className=\"grid gap-3 rounded-xl border border-border/80 bg-muted/35 p-3\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"text-xs font-semibold uppercase text-muted-foreground\">Approval</div>\n <div className=\"mt-0.5 text-sm font-medium text-foreground\">\n {approvalLabel(props.approval)}\n </div>\n </div>\n {pending ? (\n <ToolApprovalActions disabled={props.disabled} onDecision={props.onDecision} />\n ) : null}\n </div>\n {props.approval.reason === undefined ? null : (\n <div className=\"text-xs font-medium text-muted-foreground [overflow-wrap:anywhere]\">\n {props.approval.reason}\n </div>\n )}\n </div>\n );\n}\n\nfunction ToolApprovalActions(props: {\n compact?: boolean;\n disabled: boolean;\n onDecision: (approved: boolean) => void;\n}) {\n return (\n <div className=\"flex shrink-0 items-center gap-2\">\n <Button\n className={cn(props.compact ? \"h-7 min-h-7 px-2 text-xs\" : \"h-8 min-h-8\")}\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n onClick={() => props.onDecision(true)}\n >\n Approve\n </Button>\n <Button\n className={cn(props.compact ? \"h-7 min-h-7 px-2 text-xs\" : \"h-8 min-h-8\")}\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => props.onDecision(false)}\n >\n Reject\n </Button>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -9,7 +9,7 @@
9
9
  content="Professional Studio interface for Anvia agents, sessions, tools, knowledge, and traces."
10
10
  />
11
11
  <link rel="icon" type="image/png" href="/ui/assets/logo.png" />
12
- <script type="module" crossorigin src="/ui/assets/index-ZVqWotd2.js"></script>
12
+ <script type="module" crossorigin src="/ui/assets/index-rc2RWnWD.js"></script>
13
13
  <link rel="modulepreload" crossorigin href="/ui/assets/jsx-runtime-ZfyQks-z.js">
14
14
  <link rel="stylesheet" crossorigin href="/ui/assets/index-BBfu6qlV.css">
15
15
  </head>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvia/studio",
3
- "version": "0.5.6",
3
+ "version": "0.5.8",
4
4
  "description": "Studio UI and HTTP runtime for Anvia agents.",
5
5
  "author": "anvia",
6
6
  "maintainer": "Indra Zulfi",
@@ -42,9 +42,9 @@
42
42
  "react-dom": "^19.2.7",
43
43
  "react-markdown": "^10.1.0",
44
44
  "tailwind-merge": "^3.6.0",
45
- "@anvia/react": "0.3.0",
46
- "@anvia/server": "0.3.0",
47
- "@anvia/core": "0.4.2"
45
+ "@anvia/react": "0.3.1",
46
+ "@anvia/core": "0.5.0",
47
+ "@anvia/server": "0.3.1"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@tailwindcss/typography": "^0.5.19",