@anvia/studio 0.8.1 → 1.0.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +69 -19
- package/dist/index.d.ts +179 -116
- package/dist/index.js +1683 -1487
- package/dist/index.js.map +1 -1
- package/dist/ui/assets/ArrowClockwise.es-CSEY3Qr6.js +2 -0
- package/dist/ui/assets/{ArrowClockwise.es-CSN-gjxO.js.map → ArrowClockwise.es-CSEY3Qr6.js.map} +1 -1
- package/dist/ui/assets/CaretDown.es-BHAPbv1R.js +2 -0
- package/dist/ui/assets/CaretDown.es-BHAPbv1R.js.map +1 -0
- package/dist/ui/assets/Check.es-BLChmggz.js +2 -0
- package/dist/ui/assets/Check.es-BLChmggz.js.map +1 -0
- package/dist/ui/assets/Wrench.es-BL6BmNv7.js +4 -0
- package/dist/ui/assets/Wrench.es-BL6BmNv7.js.map +1 -0
- package/dist/ui/assets/agents-page-DQqt45If.js +2 -0
- package/dist/ui/assets/agents-page-DQqt45If.js.map +1 -0
- package/dist/ui/assets/{badge-RJJoRC4P.js → badge-CcajoiAt.js} +1 -1
- package/dist/ui/assets/{badge-RJJoRC4P.js.map → badge-CcajoiAt.js.map} +1 -1
- package/dist/ui/assets/button-07gzSO47.js +2 -0
- package/dist/ui/assets/button-07gzSO47.js.map +1 -0
- package/dist/ui/assets/chunk-QGX73TSQ-D9QAGlAY.js +65 -0
- package/dist/ui/assets/chunk-QGX73TSQ-D9QAGlAY.js.map +1 -0
- package/dist/ui/assets/dialog-CNNQ3hoF.js +2 -0
- package/dist/ui/assets/dialog-CNNQ3hoF.js.map +1 -0
- package/dist/ui/assets/dist-CqMdRzwk.js +2 -0
- package/dist/ui/assets/dist-CqMdRzwk.js.map +1 -0
- package/dist/ui/assets/dist-DWqJwN1i.js +2 -0
- package/dist/ui/assets/dist-DWqJwN1i.js.map +1 -0
- package/dist/ui/assets/es2015-DsZq7PFO.js +42 -0
- package/dist/ui/assets/es2015-DsZq7PFO.js.map +1 -0
- package/dist/ui/assets/icon-CqkMSRbt.js +2 -0
- package/dist/ui/assets/icon-CqkMSRbt.js.map +1 -0
- package/dist/ui/assets/index-BdhE3teo.js +12 -0
- package/dist/ui/assets/index-BdhE3teo.js.map +1 -0
- package/dist/ui/assets/index-CFbK-pX6.css +2 -0
- package/dist/ui/assets/{input-BOUv3rgO.js → input-BiI6gsxA.js} +1 -1
- package/dist/ui/assets/{input-BOUv3rgO.js.map → input-BiI6gsxA.js.map} +1 -1
- package/dist/ui/assets/knowledge-model-S51n2rKh.js +2 -0
- package/dist/ui/assets/knowledge-model-S51n2rKh.js.map +1 -0
- package/dist/ui/assets/knowledge-page-DZeLh92t.js +2 -0
- package/dist/ui/assets/{knowledge-page-Cot_uYcE.js.map → knowledge-page-DZeLh92t.js.map} +1 -1
- package/dist/ui/assets/mcps-page-CDPMO2x9.js +2 -0
- package/dist/ui/assets/{mcps-page-BSO6ork4.js.map → mcps-page-CDPMO2x9.js.map} +1 -1
- package/dist/ui/assets/memory-page-D3UhjpTb.js +4 -0
- package/dist/ui/assets/memory-page-D3UhjpTb.js.map +1 -0
- package/dist/ui/assets/pipelines-page-BP8R6NI7.js +8 -0
- package/dist/ui/assets/pipelines-page-BP8R6NI7.js.map +1 -0
- package/dist/ui/assets/{renderers-B8gvjR2u.js → renderers-DHMEAblV.js} +3 -3
- package/dist/ui/assets/{renderers-B8gvjR2u.js.map → renderers-DHMEAblV.js.map} +1 -1
- package/dist/ui/assets/request-7oUPS8zY.js +4 -0
- package/dist/ui/assets/request-7oUPS8zY.js.map +1 -0
- package/dist/ui/assets/rfb-DiW3PDuT.js +6 -0
- package/dist/ui/assets/rfb-DiW3PDuT.js.map +1 -0
- package/dist/ui/assets/sandboxes-page-C6kokYwc.js +2 -0
- package/dist/ui/assets/sandboxes-page-C6kokYwc.js.map +1 -0
- package/dist/ui/assets/select-BOYfrfck.js +2 -0
- package/dist/ui/assets/select-BOYfrfck.js.map +1 -0
- package/dist/ui/assets/sessions-page-ClXzRM9K.js +2 -0
- package/dist/ui/assets/{sessions-page-CSN2vSKZ.js.map → sessions-page-ClXzRM9K.js.map} +1 -1
- package/dist/ui/assets/status-page-eA8uRLZQ.js +2 -0
- package/dist/ui/assets/{status-page-CgRNt0wi.js.map → status-page-eA8uRLZQ.js.map} +1 -1
- package/dist/ui/assets/studio-CeTsQ4gf.js +2 -0
- package/dist/ui/assets/studio-CeTsQ4gf.js.map +1 -0
- package/dist/ui/assets/textarea-DESKg_ZK.js +2 -0
- package/dist/ui/assets/textarea-DESKg_ZK.js.map +1 -0
- package/dist/ui/assets/tool-runner-D3-SlGqQ.js +2 -0
- package/dist/ui/assets/{tool-runner-BZN-PZJU.js.map → tool-runner-D3-SlGqQ.js.map} +1 -1
- package/dist/ui/assets/tools-page-D3gnQf1_.js +2 -0
- package/dist/ui/assets/{tools-page-DRv7aklU.js.map → tools-page-D3gnQf1_.js.map} +1 -1
- package/dist/ui/assets/trace-browser-D93H7Xxs.js +10 -0
- package/dist/ui/assets/trace-browser-D93H7Xxs.js.map +1 -0
- package/dist/ui/assets/transcript-item-BmjdZLbS.js +3 -0
- package/dist/ui/assets/transcript-item-BmjdZLbS.js.map +1 -0
- package/dist/ui/assets/with-selector-CRZWaZzC.js +2 -0
- package/dist/ui/assets/with-selector-CRZWaZzC.js.map +1 -0
- package/dist/ui/index.html +19 -3
- package/package.json +16 -11
- package/dist/ui/assets/ArrowClockwise.es-CSN-gjxO.js +0 -2
- package/dist/ui/assets/agents-page-CkNSbqAj.js +0 -2
- package/dist/ui/assets/agents-page-CkNSbqAj.js.map +0 -1
- package/dist/ui/assets/chunk-ADH7NNCS-DM6fsnDI.js +0 -2
- package/dist/ui/assets/chunk-ADH7NNCS-DM6fsnDI.js.map +0 -1
- package/dist/ui/assets/index-Bh7RLPBw.js +0 -56
- package/dist/ui/assets/index-Bh7RLPBw.js.map +0 -1
- package/dist/ui/assets/index-D-CbFx6c.css +0 -1
- package/dist/ui/assets/knowledge-page-Cot_uYcE.js +0 -2
- package/dist/ui/assets/mcps-page-BSO6ork4.js +0 -2
- package/dist/ui/assets/memory-page-CG84G--r.js +0 -4
- package/dist/ui/assets/memory-page-CG84G--r.js.map +0 -1
- package/dist/ui/assets/pipelines-page-Hbf5ffUH.js +0 -8
- package/dist/ui/assets/pipelines-page-Hbf5ffUH.js.map +0 -1
- package/dist/ui/assets/sandboxes-page-D910dyFO.js +0 -2
- package/dist/ui/assets/sandboxes-page-D910dyFO.js.map +0 -1
- package/dist/ui/assets/sessions-page-CSN2vSKZ.js +0 -2
- package/dist/ui/assets/status-page-CgRNt0wi.js +0 -2
- package/dist/ui/assets/tool-runner-BZN-PZJU.js +0 -2
- package/dist/ui/assets/tools-page-DRv7aklU.js +0 -2
- package/dist/ui/assets/trace-browser-B07coNNE.js +0 -10
- package/dist/ui/assets/trace-browser-B07coNNE.js.map +0 -1
- package/dist/ui/assets/transcript-item-ZNkQEaCw.js +0 -3
- package/dist/ui/assets/transcript-item-ZNkQEaCw.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-item-ZNkQEaCw.js","names":["e","e","e","e","m","n","a","m","r","m"],"sources":["../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/ChartBar.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/Copy.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/defs/Path.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/ChartBar.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/Copy.es.js","../../../../../node_modules/.pnpm/@phosphor-icons+react@2.1.10_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/@phosphor-icons/react/dist/csr/Path.es.js","../../../src/ui/app/modules/playground/working-duration.tsx","../../../src/ui/app/modules/playground/transcript-item.tsx"],"sourcesContent":["import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,196h-4V40a12,12,0,0,0-12-12H152a12,12,0,0,0-12,12V76H96A12,12,0,0,0,84,88v36H48a12,12,0,0,0-12,12v60H32a12,12,0,0,0,0,24H224a12,12,0,0,0,0-24ZM164,52h32V196H164Zm-56,48h32v96H108ZM60,148H84v48H60Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M208,40V208H152V40Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M232,208a8,8,0,0,1-8,8H32a8,8,0,0,1,0-16h8V136a8,8,0,0,1,8-8H72a8,8,0,0,1,8,8v64H96V88a8,8,0,0,1,8-8h32a8,8,0,0,1,8,8V200h16V40a8,8,0,0,1,8-8h40a8,8,0,0,1,8,8V200h8A8,8,0,0,1,232,208Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,202H214V40a6,6,0,0,0-6-6H152a6,6,0,0,0-6,6V82H96a6,6,0,0,0-6,6v42H48a6,6,0,0,0-6,6v66H32a6,6,0,0,0,0,12H224a6,6,0,0,0,0-12ZM158,46h44V202H158ZM102,94h44V202H102ZM54,142H90v60H54Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200h-8V40a8,8,0,0,0-8-8H152a8,8,0,0,0-8,8V80H96a8,8,0,0,0-8,8v40H48a8,8,0,0,0-8,8v64H32a8,8,0,0,0,0,16H224a8,8,0,0,0,0-16ZM160,48h40V200H160ZM104,96h40V200H104ZM56,144H88v56H56Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,204H212V40a4,4,0,0,0-4-4H152a4,4,0,0,0-4,4V84H96a4,4,0,0,0-4,4v44H48a4,4,0,0,0-4,4v68H32a4,4,0,0,0,0,8H224a4,4,0,0,0,0-8ZM156,44h48V204H156ZM100,92h48V204H100ZM52,140H92v64H52Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,40V168H168V88H88V40Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32Zm-8,128H176V88a8,8,0,0,0-8-8H96V48H208Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,34H88a6,6,0,0,0-6,6V82H40a6,6,0,0,0-6,6V216a6,6,0,0,0,6,6H168a6,6,0,0,0,6-6V174h42a6,6,0,0,0,6-6V40A6,6,0,0,0,216,34ZM162,210H46V94H162Zm48-48H174V88a6,6,0,0,0-6-6H94V46H210Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M216,36H88a4,4,0,0,0-4,4V84H40a4,4,0,0,0-4,4V216a4,4,0,0,0,4,4H168a4,4,0,0,0,4-4V172h44a4,4,0,0,0,4-4V40A4,4,0,0,0,216,36ZM164,212H44V92H164Zm48-48H172V88a4,4,0,0,0-4-4H92V44H212Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,164a36.07,36.07,0,0,0-33.94,24H72a28,28,0,0,1,0-56h96a44,44,0,0,0,0-88H72a12,12,0,0,0,0,24h96a20,20,0,0,1,0,40H72a52,52,0,0,0,0,104h94.06A36,36,0,1,0,200,164Zm0,48a12,12,0,1,1,12-12A12,12,0,0,1,200,212Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,200a24,24,0,1,1-24-24A24,24,0,0,1,224,200Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M228,200a28,28,0,0,1-54.83,8H72a48,48,0,0,1,0-96h96a24,24,0,0,0,0-48H72a8,8,0,0,1,0-16h96a40,40,0,0,1,0,80H72a32,32,0,0,0,0,64H173.17A28,28,0,0,1,228,200Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,170a30.05,30.05,0,0,0-29.4,24H72a34,34,0,0,1,0-68h96a38,38,0,0,0,0-76H72a6,6,0,0,0,0,12h96a26,26,0,0,1,0,52H72a46,46,0,0,0,0,92h98.6A30,30,0,1,0,200,170Zm0,48a18,18,0,1,1,18-18A18,18,0,0,1,200,218Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,168a32.06,32.06,0,0,0-31,24H72a32,32,0,0,1,0-64h96a40,40,0,0,0,0-80H72a8,8,0,0,0,0,16h96a24,24,0,0,1,0,48H72a48,48,0,0,0,0,96h97a32,32,0,1,0,31-40Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,200,216Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,172a28,28,0,0,0-27.71,24H72a36,36,0,0,1,0-72h96a36,36,0,0,0,0-72H72a4,4,0,0,0,0,8h96a28,28,0,0,1,0,56H72a44,44,0,0,0,0,88H172.29A28,28,0,1,0,200,172Zm0,48a20,20,0,1,1,20-20A20,20,0,0,1,200,220Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as r from \"react\";\nimport e from \"../lib/IconBase.es.js\";\nimport m from \"../defs/ChartBar.es.js\";\nconst a = r.forwardRef((o, t) => /* @__PURE__ */ r.createElement(e, { ref: t, ...o, weights: m }));\na.displayName = \"ChartBarIcon\";\nconst n = a;\nexport {\n n as ChartBar,\n a as ChartBarIcon\n};\n","import * as o from \"react\";\nimport a from \"../lib/IconBase.es.js\";\nimport m from \"../defs/Copy.es.js\";\nconst e = o.forwardRef((r, t) => /* @__PURE__ */ o.createElement(a, { ref: t, ...r, weights: m }));\ne.displayName = \"CopyIcon\";\nconst s = e;\nexport {\n s as Copy,\n e as CopyIcon\n};\n","import * as o from \"react\";\nimport r from \"../lib/IconBase.es.js\";\nimport m from \"../defs/Path.es.js\";\nconst t = o.forwardRef((a, e) => /* @__PURE__ */ o.createElement(r, { ref: e, ...a, weights: m }));\nt.displayName = \"PathIcon\";\nconst n = t;\nexport {\n n as Path,\n t as PathIcon\n};\n","import { cn } from \"../../lib/utils\";\n\nexport function WorkingDuration(props: {\n className?: string | undefined;\n durationMs?: number | undefined;\n}) {\n if (props.durationMs === undefined) {\n return null;\n }\n\n return (\n <span\n aria-live=\"off\"\n className={cn(\n \"inline-flex items-center gap-1.5 text-xs font-medium tabular-nums text-muted-foreground\",\n props.className,\n )}\n >\n {formatWorkingDuration(props.durationMs)}\n </span>\n );\n}\n\nexport function formatWorkingDuration(durationMs: number): string {\n const normalizedDurationMs = Number.isFinite(durationMs) ? Math.max(0, durationMs) : 0;\n const totalSeconds = Math.floor(normalizedDurationMs / 1_000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const duration = minutes === 0 ? `${seconds}s` : `${minutes}m ${seconds}s`;\n return `Finished - ${duration}`;\n}\n","import { CaretDown, ChartBar, Check, Copy, Path, Wrench } from \"@phosphor-icons/react\";\nimport { memo, useState } from \"react\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { StudioIcon } from \"../../components/ui/icon\";\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\";\nimport type { AssistantResponseMetrics, ResponseUsageMetrics } from \"./response-metrics\";\nimport { WorkingDuration } from \"./working-duration\";\n\nexport const TranscriptItem = memo(function TranscriptItem(props: {\n entry: TranscriptEntry;\n displayText?: string | undefined;\n live?: boolean | undefined;\n metrics?: AssistantResponseMetrics | undefined;\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 const displayText = props.displayText ?? (\"text\" in props.entry ? props.entry.text : \"\");\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 live={props.live} size=\"base\" text={displayText} />\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(displayText);\n const isError =\n props.entry.role === \"assistant\" && \"tone\" in props.entry && props.entry.tone === \"error\";\n const isPending =\n props.entry.role === \"assistant\" && \"tone\" in props.entry && props.entry.tone === \"pending\";\n const showAssistantActions =\n props.entry.role === \"assistant\" && !isPending && props.entry.text.trim().length > 0;\n const persistedDurationMs = props.entry.durationMs ?? props.metrics?.durationMs;\n const showAssistantFooter = showAssistantActions || persistedDurationMs !== undefined;\n\n if (props.entry.role === \"user\") {\n return (\n <article\n className=\"grid w-fit max-w-[min(64ch,82%)] justify-items-end justify-self-end self-start text-foreground\"\n data-entry-id={String(props.entry.entryId)}\n >\n {props.entry.text.trim().length === 0 ? null : (\n <div className=\"rounded-2xl bg-muted px-4 py-2.5\">\n <MarkdownText size=\"base\" text={props.entry.text} />\n </div>\n )}\n {props.entry.attachments !== undefined ? (\n <MessageAttachments attachments={props.entry.attachments} />\n ) : null}\n </article>\n );\n }\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 )}\n data-entry-id={String(props.entry.entryId)}\n >\n {isPending ? <AssistantLoadingIndicator /> : null}\n {displayText.trim().length === 0 ? null : (\n <MarkdownText live={props.live} size=\"base\" text={displayText} />\n )}\n {showAssistantFooter ? (\n <AssistantResponseFooter\n metrics={props.metrics}\n showActions={showAssistantActions}\n text={props.entry.text}\n traceId={traceId}\n durationMs={persistedDurationMs}\n onOpenTrace={props.onOpenTrace}\n />\n ) : null}\n </article>\n );\n});\n\nfunction AssistantResponseFooter(props: {\n durationMs?: number | undefined;\n metrics?: AssistantResponseMetrics | undefined;\n showActions: boolean;\n text: string;\n traceId?: string | undefined;\n onOpenTrace: (traceId: string) => void;\n}) {\n const [copied, setCopied] = useState(false);\n const traceId = props.traceId;\n\n async function copyResponse() {\n if (typeof navigator === \"undefined\" || navigator.clipboard === undefined) {\n return;\n }\n try {\n await navigator.clipboard.writeText(props.text);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1200);\n } catch {\n setCopied(false);\n }\n }\n\n return (\n <div className=\"mt-3 flex min-w-0 items-center gap-1.5\">\n {props.showActions ? (\n <Button\n aria-label={copied ? \"Response copied\" : \"Copy response\"}\n 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\"\n title={copied ? \"Copied\" : \"Copy response\"}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => void copyResponse()}\n >\n <StudioIcon icon={copied ? Check : Copy} aria-hidden=\"true\" />\n </Button>\n ) : null}\n {props.showActions ? (\n <div className=\"group relative\">\n <Button\n aria-label=\"Response metrics\"\n 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\"\n title={metricsTitle(props.metrics)}\n type=\"button\"\n variant=\"ghost\"\n >\n <StudioIcon icon={ChartBar} aria-hidden=\"true\" />\n </Button>\n <div\n 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\"\n role=\"tooltip\"\n >\n <ResponseMetricsTooltip metrics={props.metrics} />\n </div>\n </div>\n ) : null}\n {!props.showActions || traceId === undefined ? null : (\n <Button\n aria-label={`Open trace ${traceId}`}\n 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\"\n title={`Open trace ${traceId}`}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onOpenTrace(traceId)}\n >\n <StudioIcon icon={Path} aria-hidden=\"true\" />\n </Button>\n )}\n <WorkingDuration\n className={props.showActions ? \"ml-1.5\" : undefined}\n durationMs={props.durationMs}\n />\n </div>\n );\n}\n\nfunction ResponseMetricsTooltip(props: { metrics?: AssistantResponseMetrics | undefined }) {\n const rows = responseMetricRows(props.metrics);\n return (\n <div className=\"grid min-w-0 gap-2 text-xs leading-5\">\n <div className=\"font-semibold text-foreground\">Response metrics</div>\n <div className=\"grid min-w-0 gap-1\">\n <MetricRow label=\"Cost\" value=\"Unavailable\" />\n {rows.length === 0 ? (\n <div className=\"text-muted-foreground\">No usage metrics yet</div>\n ) : (\n rows.map((row) => <MetricRow label={row.label} value={row.value} key={row.label} />)\n )}\n </div>\n </div>\n );\n}\n\nfunction MetricRow(props: { label: string; value: string }) {\n return (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"text-muted-foreground\">{props.label}</span>\n <span className=\"shrink-0 font-medium tabular-nums text-foreground\">{props.value}</span>\n </div>\n );\n}\n\nfunction responseMetricRows(metrics: AssistantResponseMetrics | undefined): Array<{\n label: string;\n value: string;\n}> {\n const rows: Array<{ label: string; value: string }> = [];\n const usage = metrics?.usage;\n if (usage?.totalTokens !== undefined) {\n rows.push({ label: \"Total\", value: `${formatMetricNumber(usage.totalTokens)} tokens` });\n }\n if (usage?.inputTokens !== undefined) {\n rows.push({ label: \"Input\", value: formatMetricNumber(usage.inputTokens) });\n }\n if (usage?.outputTokens !== undefined) {\n rows.push({ label: \"Output\", value: formatMetricNumber(usage.outputTokens) });\n }\n pushOptionalUsageRow(rows, \"Cached\", usage, \"cachedInputTokens\");\n pushOptionalUsageRow(rows, \"Cache create\", usage, \"cacheCreationInputTokens\");\n if (metrics?.durationMs !== undefined) {\n rows.push({ label: \"Duration\", value: formatResponseDuration(metrics.durationMs) });\n }\n return rows;\n}\n\nfunction pushOptionalUsageRow(\n rows: Array<{ label: string; value: string }>,\n label: string,\n usage: ResponseUsageMetrics | undefined,\n key: keyof ResponseUsageMetrics,\n) {\n const value = usage?.[key];\n if (value !== undefined && value > 0) {\n rows.push({ label, value: formatMetricNumber(value) });\n }\n}\n\nfunction metricsTitle(metrics: AssistantResponseMetrics | undefined): string {\n const rows = responseMetricRows(metrics);\n if (rows.length === 0) {\n return \"Cost unavailable. No usage metrics yet.\";\n }\n return [\"Cost unavailable\", ...rows.map((row) => `${row.label}: ${row.value}`)].join(\". \");\n}\n\nfunction formatMetricNumber(value: number): string {\n return value.toLocaleString();\n}\n\nfunction formatResponseDuration(value: number): string {\n if (value < 1000) {\n return `${value}ms`;\n }\n return `${(value / 1000).toFixed(1)}s`;\n}\n\nfunction AssistantLoadingIndicator() {\n return (\n <div\n aria-label=\"Assistant is thinking\"\n aria-live=\"polite\"\n className=\"inline-flex min-h-8 items-center gap-2 py-1 text-muted-foreground\"\n role=\"status\"\n >\n <span className=\"text-base font-medium\">Thinking</span>\n <span className=\"flex items-center gap-1\" aria-hidden=\"true\">\n <span className=\"size-1 animate-pulse rounded-full bg-current motion-reduce:animate-none\" />\n <span className=\"size-1 animate-pulse rounded-full bg-current [animation-delay:150ms] motion-reduce:animate-none\" />\n <span className=\"size-1 animate-pulse rounded-full bg-current [animation-delay:300ms] motion-reduce:animate-none\" />\n </span>\n </div>\n );\n}\n\nfunction MessageAttachments(props: {\n attachments: NonNullable<Extract<TranscriptEntry, { kind: \"message\" }>[\"attachments\"]>;\n}) {\n return (\n <div className=\"mt-2 flex max-w-full flex-wrap gap-2\">\n {props.attachments.map((attachment, index) => {\n const key = `${attachment.kind}-${attachment.name ?? attachment.mediaType ?? index}-${index}`;\n if (attachment.kind === \"image\") {\n const src =\n attachment.url ??\n (attachment.data === undefined\n ? undefined\n : `data:${attachment.mediaType ?? \"image/png\"};base64,${attachment.data}`);\n return (\n <div\n className=\"overflow-hidden rounded-lg border border-border/80 bg-card/80\"\n key={key}\n >\n {src === undefined ? (\n <div className=\"grid h-20 w-24 place-items-center px-2 text-center text-xs text-muted-foreground\">\n Image\n </div>\n ) : (\n <img\n alt={attachment.name ?? \"Attached image\"}\n className=\"h-20 w-24 object-cover\"\n src={src}\n />\n )}\n </div>\n );\n }\n return (\n <span\n 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\"\n key={key}\n >\n <span className=\"min-w-0 truncate\">\n {attachment.name ?? attachment.mediaType ?? \"Document\"}\n </span>\n </span>\n );\n })}\n </div>\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 cancelledInteraction = approval?.status === \"cancelled\" || question?.status === \"cancelled\";\n const rejectedApproval = approval?.status === \"rejected\";\n const timedOutApproval = approval?.status === \"timed_out\";\n const deciding = approval !== undefined && props.decidingApprovals.has(approval.id);\n const answering = question !== undefined && props.answeringQuestions.has(question.id);\n const status = pendingApproval\n ? \"Approval required\"\n : pendingQuestion\n ? \"Input required\"\n : cancelledInteraction\n ? \"Cancelled\"\n : rejectedApproval\n ? \"Rejected\"\n : timedOutApproval\n ? \"Timed out\"\n : props.entry.result === undefined\n ? \"Running\"\n : undefined;\n\n return (\n <article\n className=\"w-full justify-self-start text-foreground\"\n data-entry-id={String(props.entry.entryId)}\n >\n <div className=\"flex min-w-0 items-center gap-2 py-1.5\">\n <Button\n aria-expanded={hasPayload ? !collapsed : undefined}\n aria-label={`${collapsed ? \"Expand\" : \"Collapse\"} ${props.entry.toolName} tool call`}\n className=\"h-auto min-h-8 min-w-0 flex-1 justify-start gap-2 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=\"grid size-6 shrink-0 place-items-center text-muted-foreground\">\n <StudioIcon icon={Wrench} className=\"size-4\" aria-hidden=\"true\" />\n </span>\n <strong className=\"min-w-0 truncate font-mono text-base font-medium text-foreground\">\n {props.entry.toolName}\n </strong>\n {status === undefined ? null : (\n <span className=\"ml-auto inline-flex shrink-0 items-center gap-1.5 text-sm font-normal text-muted-foreground\">\n <span\n className={cn(\n \"size-1.5 rounded-full bg-muted-foreground/60\",\n status === \"Running\" && \"animate-pulse bg-foreground motion-reduce:animate-none\",\n (cancelledInteraction || rejectedApproval || timedOutApproval) &&\n \"bg-destructive\",\n )}\n aria-hidden=\"true\"\n />\n {status}\n </span>\n )}\n {hasPayload ? (\n <span className=\"grid size-6 shrink-0 place-items-center text-muted-foreground\">\n <StudioIcon\n icon={CaretDown}\n className={cn(\"size-4 transition-transform\", collapsed && \"-rotate-90\")}\n aria-hidden=\"true\"\n />\n </span>\n ) : null}\n </Button>\n {pendingApproval && approval !== undefined ? (\n <ToolApprovalActions\n disabled={deciding}\n onDecision={(approved) => props.onApprovalDecision(approval.id, approved)}\n />\n ) : null}\n </div>\n {collapsed || !hasPayload ? null : (\n <div className=\"ml-8 grid gap-3 py-2\">\n {approval === undefined ? null : <ToolApprovalPanel approval={approval} />}\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 text-xs 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-xs 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 size=\"base\" 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-border/70 bg-muted/45 px-1.5 py-0.5 text-xs uppercase text-foreground\">\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 const normalized: { questionId: string; answer: string; choice?: string; custom?: boolean } = {\n questionId: question.id,\n answer: answer?.trim() ?? \"\",\n };\n if (draft?.choice !== undefined) normalized.choice = draft.choice;\n if (customAnswer.length > 0) normalized.custom = true;\n return normalized;\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 {props.question.status === \"cancelled\" ? (\n <div className=\"rounded-xl border border-border/70 bg-muted/25 px-3 py-2.5 text-sm font-medium text-muted-foreground\">\n Question cancelled\n </div>\n ) : null}\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 onAdvance={lastQuestion ? undefined : 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 text-xs 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 text-xs font-semibold uppercase tracking-[0.2em] text-foreground\">\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) | undefined;\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=\" text-xs 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 text-xs font-semibold uppercase tracking-[0.18em]\",\n state === \"Answered\" && \"text-foreground\",\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-border/70 bg-muted/45 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-foreground/45\")}\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: { approval: ToolApproval }) {\n return (\n <div className=\"grid gap-2 rounded-xl border border-border/70 bg-muted/25 px-3 py-2.5\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge\n className={cn(\n \"border-border/70 bg-background/60 px-1.5 py-0.5 text-xs uppercase text-muted-foreground\",\n props.approval.status === \"approved\" && \"text-foreground\",\n props.approval.status === \"rejected\" && \"text-destructive\",\n )}\n >\n Approval\n </Badge>\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium text-foreground\">{approvalLabel(props.approval)}</div>\n </div>\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 disabled: boolean;\n onDecision: (approved: boolean) => void;\n}) {\n return (\n <div className=\"flex shrink-0 items-center gap-1\">\n <Button\n className=\"h-8 min-h-8 border-0 bg-transparent px-3 text-sm text-muted-foreground shadow-none hover:bg-destructive/10 hover:text-destructive\"\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onDecision(false)}\n >\n Reject\n </Button>\n <Button\n className=\"h-8 min-h-8 px-3 text-sm\"\n disabled={props.disabled}\n size=\"sm\"\n type=\"button\"\n onClick={() => props.onDecision(true)}\n >\n Approve\n </Button>\n </div>\n );\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5],"mappings":"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"}
|