@anvia/studio 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/index.js +1839 -1037
  2. package/dist/index.js.map +1 -1
  3. package/dist/ui/assets/{ArrowClockwise.es-Dn4lp0ac.js → ArrowClockwise.es-DwsUsBcf.js} +2 -2
  4. package/dist/ui/assets/{ArrowClockwise.es-Dn4lp0ac.js.map → ArrowClockwise.es-DwsUsBcf.js.map} +1 -1
  5. package/dist/ui/assets/{Check.es-BaQZo8Jl.js → Check.es-DSgPB1Pv.js} +2 -2
  6. package/dist/ui/assets/{Check.es-BaQZo8Jl.js.map → Check.es-DSgPB1Pv.js.map} +1 -1
  7. package/dist/ui/assets/{Combination-Cj4UR5tg.js → Combination-BkVfYDnw.js} +2 -2
  8. package/dist/ui/assets/{Combination-Cj4UR5tg.js.map → Combination-BkVfYDnw.js.map} +1 -1
  9. package/dist/ui/assets/{Copy.es-CU5v9Pav.js → Copy.es-C6Vd2mhd.js} +2 -2
  10. package/dist/ui/assets/{Copy.es-CU5v9Pav.js.map → Copy.es-C6Vd2mhd.js.map} +1 -1
  11. package/dist/ui/assets/{MagnifyingGlass.es-C72UX0bz.js → MagnifyingGlass.es-DP3xtOg0.js} +2 -2
  12. package/dist/ui/assets/{MagnifyingGlass.es-C72UX0bz.js.map → MagnifyingGlass.es-DP3xtOg0.js.map} +1 -1
  13. package/dist/ui/assets/{Wrench.es-Q3fLRWow.js → Wrench.es-BEBc8KqB.js} +2 -2
  14. package/dist/ui/assets/{Wrench.es-Q3fLRWow.js.map → Wrench.es-BEBc8KqB.js.map} +1 -1
  15. package/dist/ui/assets/{agents-page-6DCSMWnZ.js → agents-page-BeBY9su3.js} +2 -2
  16. package/dist/ui/assets/{agents-page-6DCSMWnZ.js.map → agents-page-BeBY9su3.js.map} +1 -1
  17. package/dist/ui/assets/{badge-DUs0RCHV.js → badge-MfEDrFTO.js} +2 -2
  18. package/dist/ui/assets/{badge-DUs0RCHV.js.map → badge-MfEDrFTO.js.map} +1 -1
  19. package/dist/ui/assets/{button-BWxpVW85.js → button-jjWFI6nO.js} +2 -2
  20. package/dist/ui/assets/{button-BWxpVW85.js.map → button-jjWFI6nO.js.map} +1 -1
  21. package/dist/ui/assets/{dialog-DauYXFnG.js → dialog-7KiF6M8r.js} +2 -2
  22. package/dist/ui/assets/{dialog-DauYXFnG.js.map → dialog-7KiF6M8r.js.map} +1 -1
  23. package/dist/ui/assets/dist-Che9Yn41.js +2 -0
  24. package/dist/ui/assets/dist-Che9Yn41.js.map +1 -0
  25. package/dist/ui/assets/{dist-DD97Shn_.js → dist-Du1CgPgL.js} +2 -2
  26. package/dist/ui/assets/{dist-DD97Shn_.js.map → dist-Du1CgPgL.js.map} +1 -1
  27. package/dist/ui/assets/dist-xrWIzsxw.js +2 -0
  28. package/dist/ui/assets/dist-xrWIzsxw.js.map +1 -0
  29. package/dist/ui/assets/{graphs-page-BA0jzknS.js → graphs-page-DqwPocIY.js} +2 -2
  30. package/dist/ui/assets/{graphs-page-BA0jzknS.js.map → graphs-page-DqwPocIY.js.map} +1 -1
  31. package/dist/ui/assets/{icon-ksPSRwE8.js → icon-BivhXy0Y.js} +2 -2
  32. package/dist/ui/assets/{icon-ksPSRwE8.js.map → icon-BivhXy0Y.js.map} +1 -1
  33. package/dist/ui/assets/index-C0JlQS8v.js +67 -0
  34. package/dist/ui/assets/index-C0JlQS8v.js.map +1 -0
  35. package/dist/ui/assets/{input-DdUxz9c8.js → input-C35vs5wD.js} +2 -2
  36. package/dist/ui/assets/{input-DdUxz9c8.js.map → input-C35vs5wD.js.map} +1 -1
  37. package/dist/ui/assets/{knowledge-page-BVVc4w3w.js → knowledge-page-B28XrwD1.js} +2 -2
  38. package/dist/ui/assets/{knowledge-page-BVVc4w3w.js.map → knowledge-page-B28XrwD1.js.map} +1 -1
  39. package/dist/ui/assets/{mcps-page-BfF4B22U.js → mcps-page-Cp0cXu3k.js} +2 -2
  40. package/dist/ui/assets/{mcps-page-BfF4B22U.js.map → mcps-page-Cp0cXu3k.js.map} +1 -1
  41. package/dist/ui/assets/{memory-page-BQkt2BAW.js → memory-page-3S_mBxnY.js} +3 -3
  42. package/dist/ui/assets/{memory-page-BQkt2BAW.js.map → memory-page-3S_mBxnY.js.map} +1 -1
  43. package/dist/ui/assets/{pipelines-page-Xx2kQNCI.js → pipelines-page-CfRbR4Po.js} +2 -2
  44. package/dist/ui/assets/{pipelines-page-Xx2kQNCI.js.map → pipelines-page-CfRbR4Po.js.map} +1 -1
  45. package/dist/ui/assets/renderers-C5qoR_20.js +94 -0
  46. package/dist/ui/assets/renderers-C5qoR_20.js.map +1 -0
  47. package/dist/ui/assets/{request-DYxy87Kp.js → request-CpxtfF0E.js} +2 -2
  48. package/dist/ui/assets/{request-DYxy87Kp.js.map → request-CpxtfF0E.js.map} +1 -1
  49. package/dist/ui/assets/{sandboxes-page-BwidNA5G.js → sandboxes-page-GPkBA_26.js} +2 -2
  50. package/dist/ui/assets/{sandboxes-page-BwidNA5G.js.map → sandboxes-page-GPkBA_26.js.map} +1 -1
  51. package/dist/ui/assets/{select-C4MbvpHr.js → select-Bt5d0Z3n.js} +2 -2
  52. package/dist/ui/assets/{select-C4MbvpHr.js.map → select-Bt5d0Z3n.js.map} +1 -1
  53. package/dist/ui/assets/sessions-page-CDvKPoVi.js +2 -0
  54. package/dist/ui/assets/{sessions-page-C3dJDjJb.js.map → sessions-page-CDvKPoVi.js.map} +1 -1
  55. package/dist/ui/assets/{status-page-92JD9Hj8.js → status-page-BeUxNJNp.js} +2 -2
  56. package/dist/ui/assets/{status-page-92JD9Hj8.js.map → status-page-BeUxNJNp.js.map} +1 -1
  57. package/dist/ui/assets/{studio-CtQdOoHK.js → studio-DeO7ueA2.js} +2 -2
  58. package/dist/ui/assets/{studio-CtQdOoHK.js.map → studio-DeO7ueA2.js.map} +1 -1
  59. package/dist/ui/assets/{style-CrHHNFw2.js → style-2z5K_w5A.js} +2 -2
  60. package/dist/ui/assets/{style-CrHHNFw2.js.map → style-2z5K_w5A.js.map} +1 -1
  61. package/dist/ui/assets/{team-playground-BaOJUDb4.js → team-playground-YxRSJeOf.js} +2 -2
  62. package/dist/ui/assets/{team-playground-BaOJUDb4.js.map → team-playground-YxRSJeOf.js.map} +1 -1
  63. package/dist/ui/assets/{textarea-gPj9-ALc.js → textarea-BqjRR-2a.js} +2 -2
  64. package/dist/ui/assets/{textarea-gPj9-ALc.js.map → textarea-BqjRR-2a.js.map} +1 -1
  65. package/dist/ui/assets/{tool-runner-xLspgGPa.js → tool-runner-DvhSexHU.js} +2 -2
  66. package/dist/ui/assets/{tool-runner-xLspgGPa.js.map → tool-runner-DvhSexHU.js.map} +1 -1
  67. package/dist/ui/assets/{tools-page-BMyx2xRT.js → tools-page-B613Kgf3.js} +2 -2
  68. package/dist/ui/assets/{tools-page-BMyx2xRT.js.map → tools-page-B613Kgf3.js.map} +1 -1
  69. package/dist/ui/assets/trace-browser-B4cu-jFZ.js +4 -0
  70. package/dist/ui/assets/{trace-browser-BHVj1nwq.js.map → trace-browser-B4cu-jFZ.js.map} +1 -1
  71. package/dist/ui/assets/{transcript-item-Bl3Yl-NT.js → transcript-item-B_Lyu12N.js} +2 -2
  72. package/dist/ui/assets/{transcript-item-Bl3Yl-NT.js.map → transcript-item-B_Lyu12N.js.map} +1 -1
  73. package/dist/ui/assets/{with-selector-BIQdjRiO.js → with-selector-CfGDDu3e.js} +2 -2
  74. package/dist/ui/assets/{with-selector-BIQdjRiO.js.map → with-selector-CfGDDu3e.js.map} +1 -1
  75. package/dist/ui/index.html +16 -16
  76. package/package.json +11 -11
  77. package/dist/ui/assets/dist-BmLOFYIW.js +0 -2
  78. package/dist/ui/assets/dist-BmLOFYIW.js.map +0 -1
  79. package/dist/ui/assets/dist-CHLp-Np4.js +0 -2
  80. package/dist/ui/assets/dist-CHLp-Np4.js.map +0 -1
  81. package/dist/ui/assets/index-cT1Jyn9V.js +0 -61
  82. package/dist/ui/assets/index-cT1Jyn9V.js.map +0 -1
  83. package/dist/ui/assets/renderers-CrjMPAR2.js +0 -94
  84. package/dist/ui/assets/renderers-CrjMPAR2.js.map +0 -1
  85. package/dist/ui/assets/sessions-page-C3dJDjJb.js +0 -2
  86. package/dist/ui/assets/trace-browser-BHVj1nwq.js +0 -4
@@ -1 +1 @@
1
- {"version":3,"file":"tool-runner-xLspgGPa.js","names":[],"sources":["../../../src/ui/app/modules/tools/schema-argument-editor.tsx","../../../src/ui/app/modules/tools/tool-runner.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { Button } from \"../../components/ui/button\";\nimport { Input } from \"../../components/ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { Textarea } from \"../../components/ui/textarea\";\nimport { isRecord } from \"../shared/object\";\n\ntype ArgumentMode = \"form\" | \"json\";\ntype JsonPath = Array<string | number>;\ntype ParseResult = { ok: true; value: unknown } | { ok: false; error: string };\n\nexport function SchemaArgumentEditor(props: {\n schema: unknown;\n value: string;\n disabled?: boolean;\n onChange: (value: string) => void;\n}) {\n const [mode, setMode] = useState<ArgumentMode>(\"form\");\n const rootFields = useMemo(() => schemaFields(props.schema), [props.schema]);\n const parsed = useMemo(() => parseJson(props.value), [props.value]);\n const disabled = props.disabled === true;\n const canRenderForm = rootFields.length > 0;\n const effectiveMode = canRenderForm ? mode : \"json\";\n const rootValue = parsed.ok && isRecord(parsed.value) ? parsed.value : undefined;\n\n function updatePath(path: JsonPath, value: unknown | undefined) {\n const base = rootValue ?? {};\n props.onChange(formatEditorJson(setValueAtPath(base, path, value)));\n }\n\n function removePathItem(path: JsonPath, index: number) {\n const base = rootValue ?? {};\n const arrayValue = getValueAtPath(base, path);\n if (!Array.isArray(arrayValue)) {\n return;\n }\n props.onChange(\n formatEditorJson(\n setValueAtPath(\n base,\n path,\n arrayValue.filter((_, itemIndex) => itemIndex !== index),\n ),\n ),\n );\n }\n\n return (\n <div className=\"grid min-w-0 gap-3\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Arguments\n </span>\n {canRenderForm ? (\n <div className=\"inline-grid h-8 grid-cols-2 overflow-hidden rounded-md border border-hair bg-background p-0.5\">\n <ModeButton active={effectiveMode === \"form\"} onClick={() => setMode(\"form\")}>\n Form\n </ModeButton>\n <ModeButton active={effectiveMode === \"json\"} onClick={() => setMode(\"json\")}>\n JSON\n </ModeButton>\n </div>\n ) : (\n <span className=\"text-xs font-medium text-muted-foreground\">JSON</span>\n )}\n </div>\n\n {effectiveMode === \"json\" || rootValue === undefined ? (\n <RawJsonEditor\n disabled={disabled}\n error={parsed.ok ? \"\" : parsed.error}\n value={props.value}\n onChange={props.onChange}\n />\n ) : (\n <div className=\"grid gap-3\">\n {rootFields.map((field) => (\n <SchemaField\n disabled={disabled}\n field={field}\n key={field.name}\n path={[field.name]}\n rootValue={rootValue}\n onChange={updatePath}\n onRemoveArrayItem={removePathItem}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction ModeButton(props: { active: boolean; children: string; onClick: () => void }) {\n return (\n <button\n className={\n props.active\n ? \"rounded-[5px] bg-muted px-3 text-xs font-semibold text-foreground\"\n : \"rounded-[5px] px-3 text-xs font-medium text-muted-foreground transition hover:text-foreground\"\n }\n type=\"button\"\n onClick={props.onClick}\n >\n {props.children}\n </button>\n );\n}\n\nfunction RawJsonEditor(props: {\n value: string;\n error: string;\n disabled: boolean;\n onChange: (value: string) => void;\n}) {\n return (\n <div className=\"grid gap-2\">\n <Textarea\n className=\"min-h-36 resize-y rounded-md border-border bg-background p-3 text-xs leading-5\"\n disabled={props.disabled}\n value={props.value}\n spellCheck={false}\n onChange={(event) => props.onChange(event.target.value)}\n />\n {props.error.length === 0 ? null : (\n <div className=\"rounded-md border border-status-danger-ink bg-status-danger-fill px-3 py-2 text-xs leading-5 text-destructive\">\n {props.error}\n </div>\n )}\n </div>\n );\n}\n\ntype SchemaFieldDefinition = {\n name: string;\n schema: Record<string, unknown>;\n required: boolean;\n};\n\nfunction SchemaField(props: {\n field: SchemaFieldDefinition;\n path: JsonPath;\n rootValue: Record<string, unknown>;\n disabled: boolean;\n onChange: (path: JsonPath, value: unknown | undefined) => void;\n onRemoveArrayItem: (path: JsonPath, index: number) => void;\n}) {\n const value = getValueAtPath(props.rootValue, props.path);\n const label = schemaLabel(props.field.schema, props.field.name);\n const description = schemaDescription(props.field.schema);\n const type = schemaPrimaryType(props.field.schema);\n\n if (type === \"object\") {\n const fields = schemaFields(props.field.schema);\n return (\n <fieldset className=\"grid min-w-0 gap-3 border-b border-hair pb-3 last:border-b-0\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <legend className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {label}\n </legend>\n {props.field.required ? <RequiredBadge /> : null}\n </div>\n {description === undefined ? null : (\n <p className=\"m-0 text-xs leading-5 text-muted-foreground\">{description}</p>\n )}\n {fields.length === 0 ? (\n <JsonValueField\n disabled={props.disabled}\n path={props.path}\n value={value}\n onChange={props.onChange}\n />\n ) : (\n <div className=\"grid gap-3 border-l border-hair pl-3\">\n {fields.map((field) => (\n <SchemaField\n disabled={props.disabled}\n field={field}\n key={field.name}\n path={[...props.path, field.name]}\n rootValue={props.rootValue}\n onChange={props.onChange}\n onRemoveArrayItem={props.onRemoveArrayItem}\n />\n ))}\n </div>\n )}\n </fieldset>\n );\n }\n\n if (type === \"array\") {\n return (\n <ArrayField\n description={description}\n disabled={props.disabled}\n field={props.field}\n label={label}\n path={props.path}\n rootValue={props.rootValue}\n value={value}\n onChange={props.onChange}\n onRemoveArrayItem={props.onRemoveArrayItem}\n />\n );\n }\n\n return (\n <div className=\"grid min-w-0 gap-2 border-b border-hair pb-3 last:border-b-0\">\n <FieldHeader label={label} required={props.field.required} />\n {description === undefined ? null : (\n <p className=\"m-0 text-xs leading-5 text-muted-foreground\">{description}</p>\n )}\n <ScalarFieldControl\n disabled={props.disabled}\n path={props.path}\n required={props.field.required}\n schema={props.field.schema}\n value={value}\n onChange={props.onChange}\n />\n </div>\n );\n}\n\nfunction ArrayField(props: {\n field: SchemaFieldDefinition;\n label: string;\n description: string | undefined;\n path: JsonPath;\n rootValue: Record<string, unknown>;\n value: unknown;\n disabled: boolean;\n onChange: (path: JsonPath, value: unknown | undefined) => void;\n onRemoveArrayItem: (path: JsonPath, index: number) => void;\n}) {\n const itemSchema = schemaItems(props.field.schema);\n const items = Array.isArray(props.value) ? props.value : [];\n const itemEntries = items.map((item, index) => ({\n index,\n key: `${formatPath(props.path)}:${index}:${formatEnumValue(item)}`,\n }));\n return (\n <div className=\"grid min-w-0 gap-3 border-b border-hair pb-3 last:border-b-0\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <FieldHeader label={props.label} required={props.field.required} />\n {itemSchema === undefined ? null : (\n <Button\n className=\"h-8 min-h-8 rounded-md px-3 text-xs\"\n disabled={props.disabled}\n type=\"button\"\n variant=\"secondary\"\n onClick={() =>\n props.onChange(props.path, [...items, defaultValueForSchema(itemSchema)])\n }\n >\n Add\n </Button>\n )}\n </div>\n {props.description === undefined ? null : (\n <p className=\"m-0 text-xs leading-5 text-muted-foreground\">{props.description}</p>\n )}\n {itemSchema === undefined ? (\n <JsonValueField\n disabled={props.disabled}\n path={props.path}\n value={props.value}\n onChange={props.onChange}\n />\n ) : items.length === 0 ? (\n <div className=\"rounded-md border border-dashed border-hair px-3 py-2 text-xs text-muted-foreground\">\n Empty array\n </div>\n ) : (\n <div className=\"grid gap-3 border-l border-hair pl-3\">\n {itemEntries.map((item) => (\n <div className=\"grid gap-2\" key={item.key}>\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n Item {item.index + 1}\n </span>\n <Button\n className=\"h-7 min-h-7 rounded-md px-2 text-xs\"\n disabled={props.disabled}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onRemoveArrayItem(props.path, item.index)}\n >\n Remove\n </Button>\n </div>\n <SchemaField\n disabled={props.disabled}\n field={{\n name: String(item.index + 1),\n required: true,\n schema: itemSchema,\n }}\n path={[...props.path, item.index]}\n rootValue={props.rootValue}\n onChange={props.onChange}\n onRemoveArrayItem={props.onRemoveArrayItem}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction FieldHeader(props: { label: string; required: boolean }) {\n return (\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">{props.label}</span>\n {props.required ? <RequiredBadge /> : null}\n </div>\n );\n}\n\nfunction RequiredBadge() {\n return (\n <span className=\"rounded-md bg-muted px-2 py-0.5 text-[11px] font-medium text-muted-foreground\">\n required\n </span>\n );\n}\n\nfunction ScalarFieldControl(props: {\n schema: Record<string, unknown>;\n path: JsonPath;\n value: unknown;\n required: boolean;\n disabled: boolean;\n onChange: (path: JsonPath, value: unknown | undefined) => void;\n}) {\n const enumOptions = schemaEnum(props.schema);\n if (enumOptions.length > 0) {\n const selectedIndex = enumOptions.findIndex((option) => jsonEqual(option, props.value));\n const optionEntries = enumOptions.map((option, index) => ({\n label: formatEnumValue(option),\n value: String(index),\n key: `${index}:${formatEnumValue(option)}`,\n }));\n return (\n <div className=\"flex min-w-0 items-center gap-2\">\n <Select\n value={selectedIndex === -1 ? \"\" : String(selectedIndex)}\n disabled={props.disabled}\n onValueChange={(value) => props.onChange(props.path, enumOptions[Number(value)])}\n >\n <SelectTrigger className=\"h-9 min-h-9 rounded-md border-border bg-background text-sm\">\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n {optionEntries.map((option) => (\n <SelectItem value={option.value} key={option.key}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {selectedIndex === -1 || props.required ? null : (\n <Button\n className=\"h-9 min-h-9 rounded-md px-3 text-xs\"\n disabled={props.disabled}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onChange(props.path, undefined)}\n >\n Clear\n </Button>\n )}\n </div>\n );\n }\n\n const type = schemaPrimaryType(props.schema);\n if (type === \"boolean\") {\n return (\n <label className=\"flex min-h-9 w-fit cursor-pointer items-center gap-2 rounded-md border border-hair bg-background px-3 text-sm text-foreground\">\n <input\n checked={props.value === true}\n disabled={props.disabled}\n type=\"checkbox\"\n className=\"h-4 w-4 accent-foreground\"\n onChange={(event) => props.onChange(props.path, event.target.checked)}\n />\n Enabled\n </label>\n );\n }\n\n if (type === \"number\" || type === \"integer\") {\n return (\n <NumberFieldControl\n disabled={props.disabled}\n path={props.path}\n schema={props.schema}\n type={type}\n value={props.value}\n onChange={props.onChange}\n />\n );\n }\n\n if (type === \"string\") {\n return (\n <Input\n className=\"h-9 rounded-md border-border bg-background text-sm\"\n disabled={props.disabled}\n type=\"text\"\n value={typeof props.value === \"string\" ? props.value : \"\"}\n placeholder={schemaDefaultPlaceholder(props.schema)}\n onChange={(event) => {\n const nextValue = event.target.value;\n props.onChange(\n props.path,\n nextValue.length === 0 && !props.required ? undefined : nextValue,\n );\n }}\n />\n );\n }\n\n return (\n <JsonValueField\n disabled={props.disabled}\n path={props.path}\n value={props.value}\n onChange={props.onChange}\n />\n );\n}\n\nfunction NumberFieldControl(props: {\n schema: Record<string, unknown>;\n type: \"number\" | \"integer\";\n path: JsonPath;\n value: unknown;\n disabled: boolean;\n onChange: (path: JsonPath, value: unknown | undefined) => void;\n}) {\n const externalValue = typeof props.value === \"number\" ? String(props.value) : \"\";\n const [draft, setDraft] = useState(externalValue);\n\n useEffect(() => {\n setDraft(externalValue);\n }, [externalValue]);\n\n return (\n <Input\n className=\"h-9 rounded-md border-border bg-background text-sm\"\n disabled={props.disabled}\n inputMode={props.type === \"integer\" ? \"numeric\" : \"decimal\"}\n type=\"text\"\n value={draft}\n placeholder={schemaDefaultPlaceholder(props.schema)}\n onBlur={() => {\n if (draft.trim().length === 0) {\n setDraft(\"\");\n return;\n }\n const nextValue = parseNumberDraft(draft, props.type);\n setDraft(nextValue.ok ? String(nextValue.value) : externalValue);\n }}\n onChange={(event) => {\n const nextDraft = event.target.value;\n setDraft(nextDraft);\n if (nextDraft.trim().length === 0) {\n props.onChange(props.path, undefined);\n return;\n }\n const nextValue = parseNumberDraft(nextDraft, props.type);\n if (nextValue.ok) {\n props.onChange(props.path, nextValue.value);\n }\n }}\n />\n );\n}\n\nfunction JsonValueField(props: {\n path: JsonPath;\n value: unknown;\n disabled: boolean;\n onChange: (path: JsonPath, value: unknown | undefined) => void;\n}) {\n const externalValue = useMemo(() => fieldJsonValue(props.value), [props.value]);\n const [draft, setDraft] = useState(externalValue);\n const parsed = useMemo(() => parseJson(draft), [draft]);\n\n useEffect(() => {\n setDraft(externalValue);\n }, [externalValue]);\n\n return (\n <div className=\"grid gap-2\">\n <Textarea\n className=\"min-h-24 resize-y rounded-md border-border bg-background p-3 text-xs leading-5\"\n disabled={props.disabled}\n value={draft}\n spellCheck={false}\n onChange={(event) => {\n const nextDraft = event.target.value;\n setDraft(nextDraft);\n if (nextDraft.trim().length === 0) {\n props.onChange(props.path, undefined);\n return;\n }\n const nextValue = parseJson(nextDraft);\n if (nextValue.ok) {\n props.onChange(props.path, nextValue.value);\n }\n }}\n />\n {parsed.ok || draft.trim().length === 0 ? null : (\n <div className=\"rounded-md border border-status-danger-ink bg-status-danger-fill px-3 py-2 text-xs leading-5 text-destructive\">\n {parsed.error}\n </div>\n )}\n </div>\n );\n}\n\nfunction schemaFields(schema: unknown): SchemaFieldDefinition[] {\n if (!isRecord(schema)) {\n return [];\n }\n const properties = schema.properties;\n if (!isRecord(properties)) {\n return [];\n }\n const required = schemaRequired(schema);\n return Object.entries(properties).map(([name, propertySchema]) => ({\n name,\n required: required.has(name),\n schema: isRecord(propertySchema) ? propertySchema : {},\n }));\n}\n\nfunction schemaRequired(schema: Record<string, unknown>): Set<string> {\n const required = schema.required;\n if (!Array.isArray(required)) {\n return new Set();\n }\n return new Set(required.filter((item): item is string => typeof item === \"string\"));\n}\n\nfunction schemaPrimaryType(schema: Record<string, unknown>): string {\n const type = schema.type;\n if (typeof type === \"string\") {\n return type;\n }\n if (Array.isArray(type)) {\n const firstType = type.find(\n (item): item is string => typeof item === \"string\" && item !== \"null\",\n );\n if (firstType !== undefined) {\n return firstType;\n }\n }\n if (schemaEnum(schema).length > 0) {\n return \"enum\";\n }\n if (isRecord(schema.properties)) {\n return \"object\";\n }\n if (schema.items !== undefined) {\n return \"array\";\n }\n return \"unknown\";\n}\n\nfunction schemaItems(schema: Record<string, unknown>): Record<string, unknown> | undefined {\n return isRecord(schema.items) ? schema.items : undefined;\n}\n\nfunction schemaEnum(schema: Record<string, unknown>): unknown[] {\n return Array.isArray(schema.enum) ? schema.enum : [];\n}\n\nfunction schemaLabel(schema: Record<string, unknown>, fallback: string): string {\n return typeof schema.title === \"string\" && schema.title.length > 0\n ? schema.title\n : formatFieldName(fallback);\n}\n\nfunction schemaDescription(schema: Record<string, unknown>): string | undefined {\n return typeof schema.description === \"string\" && schema.description.length > 0\n ? schema.description\n : undefined;\n}\n\nfunction schemaDefaultPlaceholder(schema: Record<string, unknown>): string | undefined {\n return Object.hasOwn(schema, \"default\") ? formatEnumValue(schema.default) : undefined;\n}\n\nfunction defaultValueForSchema(schema: Record<string, unknown>): unknown {\n if (Object.hasOwn(schema, \"default\")) {\n return schema.default;\n }\n const enumOptions = schemaEnum(schema);\n if (enumOptions.length > 0) {\n return enumOptions[0];\n }\n const type = schemaPrimaryType(schema);\n if (type === \"boolean\") {\n return false;\n }\n if (type === \"integer\" || type === \"number\") {\n return 0;\n }\n if (type === \"array\") {\n return [];\n }\n if (type === \"object\") {\n return {};\n }\n if (type === \"string\") {\n return \"\";\n }\n return null;\n}\n\nfunction getValueAtPath(root: unknown, path: JsonPath): unknown {\n let current = root;\n for (const segment of path) {\n if (typeof segment === \"number\") {\n if (!Array.isArray(current)) {\n return undefined;\n }\n current = current[segment];\n continue;\n }\n if (!isRecord(current)) {\n return undefined;\n }\n current = current[segment];\n }\n return current;\n}\n\nfunction setValueAtPath(root: unknown, path: JsonPath, value: unknown | undefined): unknown {\n if (path.length === 0) {\n return value;\n }\n const [segment, ...rest] = path;\n const nextRoot = Array.isArray(root) ? [...root] : isRecord(root) ? { ...root } : {};\n if (rest.length === 0) {\n if (value === undefined) {\n if (Array.isArray(nextRoot) && typeof segment === \"number\") {\n nextRoot.splice(segment, 1);\n } else if (!Array.isArray(nextRoot) && typeof segment === \"string\") {\n delete nextRoot[segment];\n }\n return nextRoot;\n }\n if (Array.isArray(nextRoot) && typeof segment === \"number\") {\n nextRoot[segment] = value;\n } else if (!Array.isArray(nextRoot) && typeof segment === \"string\") {\n nextRoot[segment] = value;\n }\n return nextRoot;\n }\n const currentValue =\n Array.isArray(nextRoot) && typeof segment === \"number\"\n ? nextRoot[segment]\n : !Array.isArray(nextRoot) && typeof segment === \"string\"\n ? nextRoot[segment]\n : undefined;\n const nextValue = setValueAtPath(currentValue, rest, value);\n if (Array.isArray(nextRoot) && typeof segment === \"number\") {\n nextRoot[segment] = nextValue;\n } else if (!Array.isArray(nextRoot) && typeof segment === \"string\") {\n nextRoot[segment] = nextValue;\n }\n return nextRoot;\n}\n\nfunction parseJson(value: string): ParseResult {\n if (value.trim().length === 0) {\n return { ok: true, value: undefined };\n }\n try {\n return { ok: true, value: JSON.parse(value) };\n } catch (error) {\n return { ok: false, error: error instanceof Error ? error.message : String(error) };\n }\n}\n\ntype NumberParseResult = { ok: true; value: number } | { ok: false };\n\nfunction parseNumberDraft(value: string, type: \"number\" | \"integer\"): NumberParseResult {\n const normalized = value.trim();\n if (normalized.length === 0 || isIncompleteNumberDraft(normalized)) {\n return { ok: false };\n }\n const parsed = Number(normalized);\n if (!Number.isFinite(parsed)) {\n return { ok: false };\n }\n if (type === \"integer\" && !Number.isInteger(parsed)) {\n return { ok: false };\n }\n return { ok: true, value: parsed };\n}\n\nfunction isIncompleteNumberDraft(value: string): boolean {\n return (\n value === \"-\" ||\n value === \"+\" ||\n value === \".\" ||\n value === \"-.\" ||\n value === \"+.\" ||\n /^[+-]?\\d+\\.$/.test(value) ||\n /[eE][+-]?$/.test(value)\n );\n}\n\nfunction fieldJsonValue(value: unknown): string {\n if (value === undefined) {\n return \"\";\n }\n return formatEditorJson(value);\n}\n\nfunction formatEditorJson(value: unknown): string {\n return JSON.stringify(value, null, 2);\n}\n\nfunction jsonEqual(left: unknown, right: unknown): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction formatEnumValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (value === null) {\n return \"null\";\n }\n return JSON.stringify(value);\n}\n\nfunction formatPath(path: JsonPath): string {\n return path.join(\".\");\n}\n\nfunction formatFieldName(value: string): string {\n return value\n .replace(/[_-]+/g, \" \")\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/\\b\\w/g, (match) => match.toUpperCase());\n}\n","import type { ReactNode } from \"react\";\nimport type { StudioAgentToolMetadata, StudioToolRunResponse } from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { parseToolDisplayValue } from \"../shared/format\";\nimport { isRecord } from \"../shared/object\";\nimport { JsonSyntax } from \"../shared/renderers\";\nimport { SchemaArgumentEditor } from \"./schema-argument-editor\";\n\nexport type ToolRunState = \"idle\" | \"running\";\n\nexport function ToolRunner(props: {\n selectedTool: StudioAgentToolMetadata | undefined;\n argsText: string;\n runState: ToolRunState;\n runError: string;\n runResponse: StudioToolRunResponse | undefined;\n onArgsTextChange: (value: string) => void;\n onRun: () => void;\n}) {\n const propertyCount =\n props.selectedTool === undefined ? 0 : schemaPropertyCount(props.selectedTool.parameters);\n return (\n <section className=\"grid gap-4 border-t border-hair pt-4 xl:grid-cols-[minmax(260px,0.42fr)_minmax(0,1fr)]\">\n <div className=\"grid content-start gap-3\">\n <div className=\"grid gap-1.5\">\n <h2 className=\"m-0 text-base font-semibold text-foreground\">Runner</h2>\n {props.selectedTool === undefined ? (\n <p className=\"m-0 text-sm leading-6 text-muted-foreground\">No tool selected</p>\n ) : (\n <>\n <p className=\"m-0 break-all text-sm font-semibold leading-6 text-foreground\">\n {props.selectedTool.name}\n </p>\n <p className=\"m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground\">\n {props.selectedTool.description}\n </p>\n </>\n )}\n </div>\n {props.selectedTool === undefined ? null : (\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <Badge className={originBadgeClass(props.selectedTool)}>\n {toolOriginLabel(props.selectedTool)}\n </Badge>\n <Badge className={approvalBadgeClass(props.selectedTool.approval.required)}>\n approval {props.selectedTool.approval.required ? \"required\" : \"none\"}\n </Badge>\n <ToolMetaPill>\n {propertyCount} {propertyCount === 1 ? \"field\" : \"fields\"}\n </ToolMetaPill>\n </div>\n )}\n {props.selectedTool?.approval.reason === undefined ? null : (\n <p className=\"m-0 border-l border-hair pl-3 text-xs leading-5 text-muted-foreground\">\n {props.selectedTool.approval.reason}\n </p>\n )}\n </div>\n <div className=\"grid min-w-0 gap-3\">\n <SchemaArgumentEditor\n disabled={props.selectedTool === undefined}\n schema={props.selectedTool?.parameters}\n value={props.argsText}\n onChange={props.onArgsTextChange}\n />\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"min-w-0 truncate text-xs text-muted-foreground\">\n Arguments must be valid JSON.\n </span>\n <Button\n className=\"h-8 min-h-8 rounded-md px-4 text-xs\"\n type=\"button\"\n disabled={props.runState === \"running\" || props.selectedTool === undefined}\n onClick={props.onRun}\n >\n {props.runState === \"running\" ? \"Running\" : \"Run\"}\n </Button>\n </div>\n {props.runError.length > 0 ? (\n <div className=\"rounded-md border border-status-danger-ink bg-status-danger-fill px-3 py-2 text-xs leading-5 text-destructive\">\n {props.runError}\n </div>\n ) : null}\n {props.selectedTool === undefined ? null : (\n <details className=\"group border-t border-hair pt-3\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground marker:hidden\">\n Parameter schema\n <span className=\"font-medium normal-case tracking-normal\">\n {schemaType(props.selectedTool.parameters)}\n </span>\n </summary>\n <div className=\"mt-3\">\n <SchemaBlock value={props.selectedTool.parameters} title=\"JSON schema\" />\n </div>\n </details>\n )}\n {props.runResponse === undefined ? null : <ToolRunResult response={props.runResponse} />}\n </div>\n </section>\n );\n}\n\nfunction ToolRunResult(props: { response: StudioToolRunResponse }) {\n const hasResult = Object.hasOwn(props.response, \"result\");\n const primaryValue = hasResult ? props.response.result : props.response.error;\n const title = hasResult ? \"Tool result\" : \"Tool error\";\n\n return (\n <div className=\"grid gap-3\">\n <SchemaBlock value={displayToolRunValue(primaryValue)} title={title} />\n <details className=\"group border-t border-hair pt-3\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground marker:hidden\">\n Raw run response\n <span className=\"font-medium normal-case tracking-normal\">\n {props.response.status} / {props.response.durationMs}ms\n </span>\n </summary>\n <div className=\"mt-3\">\n <SchemaBlock value={props.response} title=\"Studio envelope\" />\n </div>\n </details>\n </div>\n );\n}\n\nexport function SchemaBlock(props: { value: unknown; title: string }) {\n return (\n <section className=\"grid min-w-0 content-start overflow-hidden rounded-lg bg-background\">\n <div className=\"flex min-h-9 items-center justify-between gap-3 bg-muted px-4\">\n <span className=\" text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n {props.title}\n </span>\n <span className=\" text-xs text-muted-foreground\">{schemaType(props.value)}</span>\n </div>\n <div className=\"min-w-0 overflow-x-auto\">\n <pre className=\"m-0 max-h-96 min-w-max p-4 text-xs leading-5 text-foreground\">\n <code>\n <JsonSyntax text={formatSchema(props.value)} />\n </code>\n </pre>\n </div>\n </section>\n );\n}\n\nexport function ToolMetaPill(props: { children: ReactNode }) {\n return (\n <span className=\"inline-flex min-h-7 items-center rounded-md bg-muted px-2.5 text-xs font-medium text-muted-foreground\">\n {props.children}\n </span>\n );\n}\n\nexport function approvalBadgeClass(required: boolean): string {\n return required\n ? \"border-hair bg-muted text-foreground\"\n : \"border-transparent bg-transparent text-dim\";\n}\n\nexport function sourceBadgeClass(source: \"static\" | \"dynamic\"): string {\n return source === \"dynamic\"\n ? \"border-hair bg-muted text-foreground\"\n : \"border-hair bg-muted text-muted-foreground\";\n}\n\nexport function originBadgeClass(tool: StudioAgentToolMetadata): string {\n return tool.mcpServerName === undefined\n ? sourceBadgeClass(tool.source)\n : \"border-hair bg-muted text-foreground\";\n}\n\nexport function toolOriginLabel(tool: StudioAgentToolMetadata): string {\n return tool.mcpServerName === undefined ? tool.source : `MCP / ${tool.mcpServerName}`;\n}\n\nexport function schemaType(value: unknown): string {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return \"value\";\n }\n const type = (value as { type?: unknown }).type;\n return typeof type === \"string\" ? type : \"object\";\n}\n\nexport function schemaPropertyCount(value: unknown): number {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return 0;\n }\n const properties = (value as { properties?: unknown }).properties;\n return typeof properties === \"object\" && properties !== null && !Array.isArray(properties)\n ? Object.keys(properties).length\n : 0;\n}\n\nexport function formatJson(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nexport function parseStudioToolRunResponse(value: unknown): StudioToolRunResponse | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n if (typeof value.agentId !== \"string\" || value.agentId.length === 0) {\n return undefined;\n }\n if (typeof value.toolName !== \"string\" || value.toolName.length === 0) {\n return undefined;\n }\n if (value.status !== \"success\" && value.status !== \"error\") {\n return undefined;\n }\n if (typeof value.durationMs !== \"number\" || !Number.isFinite(value.durationMs)) {\n return undefined;\n }\n if (typeof value.startedAt !== \"string\" || typeof value.endedAt !== \"string\") {\n return undefined;\n }\n if (!Array.isArray(value.events)) {\n return undefined;\n }\n return value as StudioToolRunResponse;\n}\n\nfunction displayToolRunValue(value: unknown): unknown {\n if (typeof value !== \"string\") {\n return value;\n }\n const parsed = parseToolDisplayValue(value);\n return parsed.kind === \"json\" ? parsed.value : value;\n}\n\nfunction formatSchema(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tool-runner-DvhSexHU.js","names":[],"sources":["../../../src/ui/app/modules/tools/schema-argument-editor.tsx","../../../src/ui/app/modules/tools/tool-runner.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { Button } from \"../../components/ui/button\";\nimport { Input } from \"../../components/ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { Textarea } from \"../../components/ui/textarea\";\nimport { isRecord } from \"../shared/object\";\n\ntype ArgumentMode = \"form\" | \"json\";\ntype JsonPath = Array<string | number>;\ntype ParseResult = { ok: true; value: unknown } | { ok: false; error: string };\n\nexport function SchemaArgumentEditor(props: {\n schema: unknown;\n value: string;\n disabled?: boolean;\n onChange: (value: string) => void;\n}) {\n const [mode, setMode] = useState<ArgumentMode>(\"form\");\n const rootFields = useMemo(() => schemaFields(props.schema), [props.schema]);\n const parsed = useMemo(() => parseJson(props.value), [props.value]);\n const disabled = props.disabled === true;\n const canRenderForm = rootFields.length > 0;\n const effectiveMode = canRenderForm ? mode : \"json\";\n const rootValue = parsed.ok && isRecord(parsed.value) ? parsed.value : undefined;\n\n function updatePath(path: JsonPath, value: unknown | undefined) {\n const base = rootValue ?? {};\n props.onChange(formatEditorJson(setValueAtPath(base, path, value)));\n }\n\n function removePathItem(path: JsonPath, index: number) {\n const base = rootValue ?? {};\n const arrayValue = getValueAtPath(base, path);\n if (!Array.isArray(arrayValue)) {\n return;\n }\n props.onChange(\n formatEditorJson(\n setValueAtPath(\n base,\n path,\n arrayValue.filter((_, itemIndex) => itemIndex !== index),\n ),\n ),\n );\n }\n\n return (\n <div className=\"grid min-w-0 gap-3\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Arguments\n </span>\n {canRenderForm ? (\n <div className=\"inline-grid h-8 grid-cols-2 overflow-hidden rounded-md border border-hair bg-background p-0.5\">\n <ModeButton active={effectiveMode === \"form\"} onClick={() => setMode(\"form\")}>\n Form\n </ModeButton>\n <ModeButton active={effectiveMode === \"json\"} onClick={() => setMode(\"json\")}>\n JSON\n </ModeButton>\n </div>\n ) : (\n <span className=\"text-xs font-medium text-muted-foreground\">JSON</span>\n )}\n </div>\n\n {effectiveMode === \"json\" || rootValue === undefined ? (\n <RawJsonEditor\n disabled={disabled}\n error={parsed.ok ? \"\" : parsed.error}\n value={props.value}\n onChange={props.onChange}\n />\n ) : (\n <div className=\"grid gap-3\">\n {rootFields.map((field) => (\n <SchemaField\n disabled={disabled}\n field={field}\n key={field.name}\n path={[field.name]}\n rootValue={rootValue}\n onChange={updatePath}\n onRemoveArrayItem={removePathItem}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction ModeButton(props: { active: boolean; children: string; onClick: () => void }) {\n return (\n <button\n className={\n props.active\n ? \"rounded-[5px] bg-muted px-3 text-xs font-semibold text-foreground\"\n : \"rounded-[5px] px-3 text-xs font-medium text-muted-foreground transition hover:text-foreground\"\n }\n type=\"button\"\n onClick={props.onClick}\n >\n {props.children}\n </button>\n );\n}\n\nfunction RawJsonEditor(props: {\n value: string;\n error: string;\n disabled: boolean;\n onChange: (value: string) => void;\n}) {\n return (\n <div className=\"grid gap-2\">\n <Textarea\n className=\"min-h-36 resize-y rounded-md border-border bg-background p-3 text-xs leading-5\"\n disabled={props.disabled}\n value={props.value}\n spellCheck={false}\n onChange={(event) => props.onChange(event.target.value)}\n />\n {props.error.length === 0 ? null : (\n <div className=\"rounded-md border border-status-danger-ink bg-status-danger-fill px-3 py-2 text-xs leading-5 text-destructive\">\n {props.error}\n </div>\n )}\n </div>\n );\n}\n\ntype SchemaFieldDefinition = {\n name: string;\n schema: Record<string, unknown>;\n required: boolean;\n};\n\nfunction SchemaField(props: {\n field: SchemaFieldDefinition;\n path: JsonPath;\n rootValue: Record<string, unknown>;\n disabled: boolean;\n onChange: (path: JsonPath, value: unknown | undefined) => void;\n onRemoveArrayItem: (path: JsonPath, index: number) => void;\n}) {\n const value = getValueAtPath(props.rootValue, props.path);\n const label = schemaLabel(props.field.schema, props.field.name);\n const description = schemaDescription(props.field.schema);\n const type = schemaPrimaryType(props.field.schema);\n\n if (type === \"object\") {\n const fields = schemaFields(props.field.schema);\n return (\n <fieldset className=\"grid min-w-0 gap-3 border-b border-hair pb-3 last:border-b-0\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <legend className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {label}\n </legend>\n {props.field.required ? <RequiredBadge /> : null}\n </div>\n {description === undefined ? null : (\n <p className=\"m-0 text-xs leading-5 text-muted-foreground\">{description}</p>\n )}\n {fields.length === 0 ? (\n <JsonValueField\n disabled={props.disabled}\n path={props.path}\n value={value}\n onChange={props.onChange}\n />\n ) : (\n <div className=\"grid gap-3 border-l border-hair pl-3\">\n {fields.map((field) => (\n <SchemaField\n disabled={props.disabled}\n field={field}\n key={field.name}\n path={[...props.path, field.name]}\n rootValue={props.rootValue}\n onChange={props.onChange}\n onRemoveArrayItem={props.onRemoveArrayItem}\n />\n ))}\n </div>\n )}\n </fieldset>\n );\n }\n\n if (type === \"array\") {\n return (\n <ArrayField\n description={description}\n disabled={props.disabled}\n field={props.field}\n label={label}\n path={props.path}\n rootValue={props.rootValue}\n value={value}\n onChange={props.onChange}\n onRemoveArrayItem={props.onRemoveArrayItem}\n />\n );\n }\n\n return (\n <div className=\"grid min-w-0 gap-2 border-b border-hair pb-3 last:border-b-0\">\n <FieldHeader label={label} required={props.field.required} />\n {description === undefined ? null : (\n <p className=\"m-0 text-xs leading-5 text-muted-foreground\">{description}</p>\n )}\n <ScalarFieldControl\n disabled={props.disabled}\n path={props.path}\n required={props.field.required}\n schema={props.field.schema}\n value={value}\n onChange={props.onChange}\n />\n </div>\n );\n}\n\nfunction ArrayField(props: {\n field: SchemaFieldDefinition;\n label: string;\n description: string | undefined;\n path: JsonPath;\n rootValue: Record<string, unknown>;\n value: unknown;\n disabled: boolean;\n onChange: (path: JsonPath, value: unknown | undefined) => void;\n onRemoveArrayItem: (path: JsonPath, index: number) => void;\n}) {\n const itemSchema = schemaItems(props.field.schema);\n const items = Array.isArray(props.value) ? props.value : [];\n const itemEntries = items.map((item, index) => ({\n index,\n key: `${formatPath(props.path)}:${index}:${formatEnumValue(item)}`,\n }));\n return (\n <div className=\"grid min-w-0 gap-3 border-b border-hair pb-3 last:border-b-0\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <FieldHeader label={props.label} required={props.field.required} />\n {itemSchema === undefined ? null : (\n <Button\n className=\"h-8 min-h-8 rounded-md px-3 text-xs\"\n disabled={props.disabled}\n type=\"button\"\n variant=\"secondary\"\n onClick={() =>\n props.onChange(props.path, [...items, defaultValueForSchema(itemSchema)])\n }\n >\n Add\n </Button>\n )}\n </div>\n {props.description === undefined ? null : (\n <p className=\"m-0 text-xs leading-5 text-muted-foreground\">{props.description}</p>\n )}\n {itemSchema === undefined ? (\n <JsonValueField\n disabled={props.disabled}\n path={props.path}\n value={props.value}\n onChange={props.onChange}\n />\n ) : items.length === 0 ? (\n <div className=\"rounded-md border border-dashed border-hair px-3 py-2 text-xs text-muted-foreground\">\n Empty array\n </div>\n ) : (\n <div className=\"grid gap-3 border-l border-hair pl-3\">\n {itemEntries.map((item) => (\n <div className=\"grid gap-2\" key={item.key}>\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n Item {item.index + 1}\n </span>\n <Button\n className=\"h-7 min-h-7 rounded-md px-2 text-xs\"\n disabled={props.disabled}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onRemoveArrayItem(props.path, item.index)}\n >\n Remove\n </Button>\n </div>\n <SchemaField\n disabled={props.disabled}\n field={{\n name: String(item.index + 1),\n required: true,\n schema: itemSchema,\n }}\n path={[...props.path, item.index]}\n rootValue={props.rootValue}\n onChange={props.onChange}\n onRemoveArrayItem={props.onRemoveArrayItem}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction FieldHeader(props: { label: string; required: boolean }) {\n return (\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">{props.label}</span>\n {props.required ? <RequiredBadge /> : null}\n </div>\n );\n}\n\nfunction RequiredBadge() {\n return (\n <span className=\"rounded-md bg-muted px-2 py-0.5 text-[11px] font-medium text-muted-foreground\">\n required\n </span>\n );\n}\n\nfunction ScalarFieldControl(props: {\n schema: Record<string, unknown>;\n path: JsonPath;\n value: unknown;\n required: boolean;\n disabled: boolean;\n onChange: (path: JsonPath, value: unknown | undefined) => void;\n}) {\n const enumOptions = schemaEnum(props.schema);\n if (enumOptions.length > 0) {\n const selectedIndex = enumOptions.findIndex((option) => jsonEqual(option, props.value));\n const optionEntries = enumOptions.map((option, index) => ({\n label: formatEnumValue(option),\n value: String(index),\n key: `${index}:${formatEnumValue(option)}`,\n }));\n return (\n <div className=\"flex min-w-0 items-center gap-2\">\n <Select\n value={selectedIndex === -1 ? \"\" : String(selectedIndex)}\n disabled={props.disabled}\n onValueChange={(value) => props.onChange(props.path, enumOptions[Number(value)])}\n >\n <SelectTrigger className=\"h-9 min-h-9 rounded-md border-border bg-background text-sm\">\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n {optionEntries.map((option) => (\n <SelectItem value={option.value} key={option.key}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {selectedIndex === -1 || props.required ? null : (\n <Button\n className=\"h-9 min-h-9 rounded-md px-3 text-xs\"\n disabled={props.disabled}\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onChange(props.path, undefined)}\n >\n Clear\n </Button>\n )}\n </div>\n );\n }\n\n const type = schemaPrimaryType(props.schema);\n if (type === \"boolean\") {\n return (\n <label className=\"flex min-h-9 w-fit cursor-pointer items-center gap-2 rounded-md border border-hair bg-background px-3 text-sm text-foreground\">\n <input\n checked={props.value === true}\n disabled={props.disabled}\n type=\"checkbox\"\n className=\"h-4 w-4 accent-foreground\"\n onChange={(event) => props.onChange(props.path, event.target.checked)}\n />\n Enabled\n </label>\n );\n }\n\n if (type === \"number\" || type === \"integer\") {\n return (\n <NumberFieldControl\n disabled={props.disabled}\n path={props.path}\n schema={props.schema}\n type={type}\n value={props.value}\n onChange={props.onChange}\n />\n );\n }\n\n if (type === \"string\") {\n return (\n <Input\n className=\"h-9 rounded-md border-border bg-background text-sm\"\n disabled={props.disabled}\n type=\"text\"\n value={typeof props.value === \"string\" ? props.value : \"\"}\n placeholder={schemaDefaultPlaceholder(props.schema)}\n onChange={(event) => {\n const nextValue = event.target.value;\n props.onChange(\n props.path,\n nextValue.length === 0 && !props.required ? undefined : nextValue,\n );\n }}\n />\n );\n }\n\n return (\n <JsonValueField\n disabled={props.disabled}\n path={props.path}\n value={props.value}\n onChange={props.onChange}\n />\n );\n}\n\nfunction NumberFieldControl(props: {\n schema: Record<string, unknown>;\n type: \"number\" | \"integer\";\n path: JsonPath;\n value: unknown;\n disabled: boolean;\n onChange: (path: JsonPath, value: unknown | undefined) => void;\n}) {\n const externalValue = typeof props.value === \"number\" ? String(props.value) : \"\";\n const [draft, setDraft] = useState(externalValue);\n\n useEffect(() => {\n setDraft(externalValue);\n }, [externalValue]);\n\n return (\n <Input\n className=\"h-9 rounded-md border-border bg-background text-sm\"\n disabled={props.disabled}\n inputMode={props.type === \"integer\" ? \"numeric\" : \"decimal\"}\n type=\"text\"\n value={draft}\n placeholder={schemaDefaultPlaceholder(props.schema)}\n onBlur={() => {\n if (draft.trim().length === 0) {\n setDraft(\"\");\n return;\n }\n const nextValue = parseNumberDraft(draft, props.type);\n setDraft(nextValue.ok ? String(nextValue.value) : externalValue);\n }}\n onChange={(event) => {\n const nextDraft = event.target.value;\n setDraft(nextDraft);\n if (nextDraft.trim().length === 0) {\n props.onChange(props.path, undefined);\n return;\n }\n const nextValue = parseNumberDraft(nextDraft, props.type);\n if (nextValue.ok) {\n props.onChange(props.path, nextValue.value);\n }\n }}\n />\n );\n}\n\nfunction JsonValueField(props: {\n path: JsonPath;\n value: unknown;\n disabled: boolean;\n onChange: (path: JsonPath, value: unknown | undefined) => void;\n}) {\n const externalValue = useMemo(() => fieldJsonValue(props.value), [props.value]);\n const [draft, setDraft] = useState(externalValue);\n const parsed = useMemo(() => parseJson(draft), [draft]);\n\n useEffect(() => {\n setDraft(externalValue);\n }, [externalValue]);\n\n return (\n <div className=\"grid gap-2\">\n <Textarea\n className=\"min-h-24 resize-y rounded-md border-border bg-background p-3 text-xs leading-5\"\n disabled={props.disabled}\n value={draft}\n spellCheck={false}\n onChange={(event) => {\n const nextDraft = event.target.value;\n setDraft(nextDraft);\n if (nextDraft.trim().length === 0) {\n props.onChange(props.path, undefined);\n return;\n }\n const nextValue = parseJson(nextDraft);\n if (nextValue.ok) {\n props.onChange(props.path, nextValue.value);\n }\n }}\n />\n {parsed.ok || draft.trim().length === 0 ? null : (\n <div className=\"rounded-md border border-status-danger-ink bg-status-danger-fill px-3 py-2 text-xs leading-5 text-destructive\">\n {parsed.error}\n </div>\n )}\n </div>\n );\n}\n\nfunction schemaFields(schema: unknown): SchemaFieldDefinition[] {\n if (!isRecord(schema)) {\n return [];\n }\n const properties = schema.properties;\n if (!isRecord(properties)) {\n return [];\n }\n const required = schemaRequired(schema);\n return Object.entries(properties).map(([name, propertySchema]) => ({\n name,\n required: required.has(name),\n schema: isRecord(propertySchema) ? propertySchema : {},\n }));\n}\n\nfunction schemaRequired(schema: Record<string, unknown>): Set<string> {\n const required = schema.required;\n if (!Array.isArray(required)) {\n return new Set();\n }\n return new Set(required.filter((item): item is string => typeof item === \"string\"));\n}\n\nfunction schemaPrimaryType(schema: Record<string, unknown>): string {\n const type = schema.type;\n if (typeof type === \"string\") {\n return type;\n }\n if (Array.isArray(type)) {\n const firstType = type.find(\n (item): item is string => typeof item === \"string\" && item !== \"null\",\n );\n if (firstType !== undefined) {\n return firstType;\n }\n }\n if (schemaEnum(schema).length > 0) {\n return \"enum\";\n }\n if (isRecord(schema.properties)) {\n return \"object\";\n }\n if (schema.items !== undefined) {\n return \"array\";\n }\n return \"unknown\";\n}\n\nfunction schemaItems(schema: Record<string, unknown>): Record<string, unknown> | undefined {\n return isRecord(schema.items) ? schema.items : undefined;\n}\n\nfunction schemaEnum(schema: Record<string, unknown>): unknown[] {\n return Array.isArray(schema.enum) ? schema.enum : [];\n}\n\nfunction schemaLabel(schema: Record<string, unknown>, fallback: string): string {\n return typeof schema.title === \"string\" && schema.title.length > 0\n ? schema.title\n : formatFieldName(fallback);\n}\n\nfunction schemaDescription(schema: Record<string, unknown>): string | undefined {\n return typeof schema.description === \"string\" && schema.description.length > 0\n ? schema.description\n : undefined;\n}\n\nfunction schemaDefaultPlaceholder(schema: Record<string, unknown>): string | undefined {\n return Object.hasOwn(schema, \"default\") ? formatEnumValue(schema.default) : undefined;\n}\n\nfunction defaultValueForSchema(schema: Record<string, unknown>): unknown {\n if (Object.hasOwn(schema, \"default\")) {\n return schema.default;\n }\n const enumOptions = schemaEnum(schema);\n if (enumOptions.length > 0) {\n return enumOptions[0];\n }\n const type = schemaPrimaryType(schema);\n if (type === \"boolean\") {\n return false;\n }\n if (type === \"integer\" || type === \"number\") {\n return 0;\n }\n if (type === \"array\") {\n return [];\n }\n if (type === \"object\") {\n return {};\n }\n if (type === \"string\") {\n return \"\";\n }\n return null;\n}\n\nfunction getValueAtPath(root: unknown, path: JsonPath): unknown {\n let current = root;\n for (const segment of path) {\n if (typeof segment === \"number\") {\n if (!Array.isArray(current)) {\n return undefined;\n }\n current = current[segment];\n continue;\n }\n if (!isRecord(current)) {\n return undefined;\n }\n current = current[segment];\n }\n return current;\n}\n\nfunction setValueAtPath(root: unknown, path: JsonPath, value: unknown | undefined): unknown {\n if (path.length === 0) {\n return value;\n }\n const [segment, ...rest] = path;\n const nextRoot = Array.isArray(root) ? [...root] : isRecord(root) ? { ...root } : {};\n if (rest.length === 0) {\n if (value === undefined) {\n if (Array.isArray(nextRoot) && typeof segment === \"number\") {\n nextRoot.splice(segment, 1);\n } else if (!Array.isArray(nextRoot) && typeof segment === \"string\") {\n delete nextRoot[segment];\n }\n return nextRoot;\n }\n if (Array.isArray(nextRoot) && typeof segment === \"number\") {\n nextRoot[segment] = value;\n } else if (!Array.isArray(nextRoot) && typeof segment === \"string\") {\n nextRoot[segment] = value;\n }\n return nextRoot;\n }\n const currentValue =\n Array.isArray(nextRoot) && typeof segment === \"number\"\n ? nextRoot[segment]\n : !Array.isArray(nextRoot) && typeof segment === \"string\"\n ? nextRoot[segment]\n : undefined;\n const nextValue = setValueAtPath(currentValue, rest, value);\n if (Array.isArray(nextRoot) && typeof segment === \"number\") {\n nextRoot[segment] = nextValue;\n } else if (!Array.isArray(nextRoot) && typeof segment === \"string\") {\n nextRoot[segment] = nextValue;\n }\n return nextRoot;\n}\n\nfunction parseJson(value: string): ParseResult {\n if (value.trim().length === 0) {\n return { ok: true, value: undefined };\n }\n try {\n return { ok: true, value: JSON.parse(value) };\n } catch (error) {\n return { ok: false, error: error instanceof Error ? error.message : String(error) };\n }\n}\n\ntype NumberParseResult = { ok: true; value: number } | { ok: false };\n\nfunction parseNumberDraft(value: string, type: \"number\" | \"integer\"): NumberParseResult {\n const normalized = value.trim();\n if (normalized.length === 0 || isIncompleteNumberDraft(normalized)) {\n return { ok: false };\n }\n const parsed = Number(normalized);\n if (!Number.isFinite(parsed)) {\n return { ok: false };\n }\n if (type === \"integer\" && !Number.isInteger(parsed)) {\n return { ok: false };\n }\n return { ok: true, value: parsed };\n}\n\nfunction isIncompleteNumberDraft(value: string): boolean {\n return (\n value === \"-\" ||\n value === \"+\" ||\n value === \".\" ||\n value === \"-.\" ||\n value === \"+.\" ||\n /^[+-]?\\d+\\.$/.test(value) ||\n /[eE][+-]?$/.test(value)\n );\n}\n\nfunction fieldJsonValue(value: unknown): string {\n if (value === undefined) {\n return \"\";\n }\n return formatEditorJson(value);\n}\n\nfunction formatEditorJson(value: unknown): string {\n return JSON.stringify(value, null, 2);\n}\n\nfunction jsonEqual(left: unknown, right: unknown): boolean {\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction formatEnumValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (value === null) {\n return \"null\";\n }\n return JSON.stringify(value);\n}\n\nfunction formatPath(path: JsonPath): string {\n return path.join(\".\");\n}\n\nfunction formatFieldName(value: string): string {\n return value\n .replace(/[_-]+/g, \" \")\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/\\b\\w/g, (match) => match.toUpperCase());\n}\n","import type { ReactNode } from \"react\";\nimport type { StudioAgentToolMetadata, StudioToolRunResponse } from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { parseToolDisplayValue } from \"../shared/format\";\nimport { isRecord } from \"../shared/object\";\nimport { JsonSyntax } from \"../shared/renderers\";\nimport { SchemaArgumentEditor } from \"./schema-argument-editor\";\n\nexport type ToolRunState = \"idle\" | \"running\";\n\nexport function ToolRunner(props: {\n selectedTool: StudioAgentToolMetadata | undefined;\n argsText: string;\n runState: ToolRunState;\n runError: string;\n runResponse: StudioToolRunResponse | undefined;\n onArgsTextChange: (value: string) => void;\n onRun: () => void;\n}) {\n const propertyCount =\n props.selectedTool === undefined ? 0 : schemaPropertyCount(props.selectedTool.parameters);\n return (\n <section className=\"grid gap-4 border-t border-hair pt-4 xl:grid-cols-[minmax(260px,0.42fr)_minmax(0,1fr)]\">\n <div className=\"grid content-start gap-3\">\n <div className=\"grid gap-1.5\">\n <h2 className=\"m-0 text-base font-semibold text-foreground\">Runner</h2>\n {props.selectedTool === undefined ? (\n <p className=\"m-0 text-sm leading-6 text-muted-foreground\">No tool selected</p>\n ) : (\n <>\n <p className=\"m-0 break-all text-sm font-semibold leading-6 text-foreground\">\n {props.selectedTool.name}\n </p>\n <p className=\"m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground\">\n {props.selectedTool.description}\n </p>\n </>\n )}\n </div>\n {props.selectedTool === undefined ? null : (\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <Badge className={originBadgeClass(props.selectedTool)}>\n {toolOriginLabel(props.selectedTool)}\n </Badge>\n <Badge className={approvalBadgeClass(props.selectedTool.approval.required)}>\n approval {props.selectedTool.approval.required ? \"required\" : \"none\"}\n </Badge>\n <ToolMetaPill>\n {propertyCount} {propertyCount === 1 ? \"field\" : \"fields\"}\n </ToolMetaPill>\n </div>\n )}\n {props.selectedTool?.approval.reason === undefined ? null : (\n <p className=\"m-0 border-l border-hair pl-3 text-xs leading-5 text-muted-foreground\">\n {props.selectedTool.approval.reason}\n </p>\n )}\n </div>\n <div className=\"grid min-w-0 gap-3\">\n <SchemaArgumentEditor\n disabled={props.selectedTool === undefined}\n schema={props.selectedTool?.parameters}\n value={props.argsText}\n onChange={props.onArgsTextChange}\n />\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"min-w-0 truncate text-xs text-muted-foreground\">\n Arguments must be valid JSON.\n </span>\n <Button\n className=\"h-8 min-h-8 rounded-md px-4 text-xs\"\n type=\"button\"\n disabled={props.runState === \"running\" || props.selectedTool === undefined}\n onClick={props.onRun}\n >\n {props.runState === \"running\" ? \"Running\" : \"Run\"}\n </Button>\n </div>\n {props.runError.length > 0 ? (\n <div className=\"rounded-md border border-status-danger-ink bg-status-danger-fill px-3 py-2 text-xs leading-5 text-destructive\">\n {props.runError}\n </div>\n ) : null}\n {props.selectedTool === undefined ? null : (\n <details className=\"group border-t border-hair pt-3\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground marker:hidden\">\n Parameter schema\n <span className=\"font-medium normal-case tracking-normal\">\n {schemaType(props.selectedTool.parameters)}\n </span>\n </summary>\n <div className=\"mt-3\">\n <SchemaBlock value={props.selectedTool.parameters} title=\"JSON schema\" />\n </div>\n </details>\n )}\n {props.runResponse === undefined ? null : <ToolRunResult response={props.runResponse} />}\n </div>\n </section>\n );\n}\n\nfunction ToolRunResult(props: { response: StudioToolRunResponse }) {\n const hasResult = Object.hasOwn(props.response, \"result\");\n const primaryValue = hasResult ? props.response.result : props.response.error;\n const title = hasResult ? \"Tool result\" : \"Tool error\";\n\n return (\n <div className=\"grid gap-3\">\n <SchemaBlock value={displayToolRunValue(primaryValue)} title={title} />\n <details className=\"group border-t border-hair pt-3\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground marker:hidden\">\n Raw run response\n <span className=\"font-medium normal-case tracking-normal\">\n {props.response.status} / {props.response.durationMs}ms\n </span>\n </summary>\n <div className=\"mt-3\">\n <SchemaBlock value={props.response} title=\"Studio envelope\" />\n </div>\n </details>\n </div>\n );\n}\n\nexport function SchemaBlock(props: { value: unknown; title: string }) {\n return (\n <section className=\"grid min-w-0 content-start overflow-hidden rounded-lg bg-background\">\n <div className=\"flex min-h-9 items-center justify-between gap-3 bg-muted px-4\">\n <span className=\" text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n {props.title}\n </span>\n <span className=\" text-xs text-muted-foreground\">{schemaType(props.value)}</span>\n </div>\n <div className=\"min-w-0 overflow-x-auto\">\n <pre className=\"m-0 max-h-96 min-w-max p-4 text-xs leading-5 text-foreground\">\n <code>\n <JsonSyntax text={formatSchema(props.value)} />\n </code>\n </pre>\n </div>\n </section>\n );\n}\n\nexport function ToolMetaPill(props: { children: ReactNode }) {\n return (\n <span className=\"inline-flex min-h-7 items-center rounded-md bg-muted px-2.5 text-xs font-medium text-muted-foreground\">\n {props.children}\n </span>\n );\n}\n\nexport function approvalBadgeClass(required: boolean): string {\n return required\n ? \"border-hair bg-muted text-foreground\"\n : \"border-transparent bg-transparent text-dim\";\n}\n\nexport function sourceBadgeClass(source: \"static\" | \"dynamic\"): string {\n return source === \"dynamic\"\n ? \"border-hair bg-muted text-foreground\"\n : \"border-hair bg-muted text-muted-foreground\";\n}\n\nexport function originBadgeClass(tool: StudioAgentToolMetadata): string {\n return tool.mcpServerName === undefined\n ? sourceBadgeClass(tool.source)\n : \"border-hair bg-muted text-foreground\";\n}\n\nexport function toolOriginLabel(tool: StudioAgentToolMetadata): string {\n return tool.mcpServerName === undefined ? tool.source : `MCP / ${tool.mcpServerName}`;\n}\n\nexport function schemaType(value: unknown): string {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return \"value\";\n }\n const type = (value as { type?: unknown }).type;\n return typeof type === \"string\" ? type : \"object\";\n}\n\nexport function schemaPropertyCount(value: unknown): number {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return 0;\n }\n const properties = (value as { properties?: unknown }).properties;\n return typeof properties === \"object\" && properties !== null && !Array.isArray(properties)\n ? Object.keys(properties).length\n : 0;\n}\n\nexport function formatJson(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nexport function parseStudioToolRunResponse(value: unknown): StudioToolRunResponse | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n if (typeof value.agentId !== \"string\" || value.agentId.length === 0) {\n return undefined;\n }\n if (typeof value.toolName !== \"string\" || value.toolName.length === 0) {\n return undefined;\n }\n if (value.status !== \"success\" && value.status !== \"error\") {\n return undefined;\n }\n if (typeof value.durationMs !== \"number\" || !Number.isFinite(value.durationMs)) {\n return undefined;\n }\n if (typeof value.startedAt !== \"string\" || typeof value.endedAt !== \"string\") {\n return undefined;\n }\n if (!Array.isArray(value.events)) {\n return undefined;\n }\n return value as StudioToolRunResponse;\n}\n\nfunction displayToolRunValue(value: unknown): unknown {\n if (typeof value !== \"string\") {\n return value;\n }\n const parsed = parseToolDisplayValue(value);\n return parsed.kind === \"json\" ? parsed.value : value;\n}\n\nfunction formatSchema(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as e,r as t,s as n}from"./dist-CHLp-Np4.js";import{t as r}from"./button-BWxpVW85.js";import{a as i,i as a,n as o,r as s,t as c}from"./select-C4MbvpHr.js";import{a as l,i as u,n as d,r as f,t as p}from"./studio-CtQdOoHK.js";import{t as m}from"./badge-DUs0RCHV.js";import{a as h,c as g,d as _,i as v,l as y,n as b,o as x,r as S,s as C}from"./tool-runner-xLspgGPa.js";var w=n(e(),1),T=t();function E(e){let t=e.agents.find(t=>t.id===e.selectedAgentId)??e.agents[0],n=(0,w.useMemo)(()=>e.summary?.tools??[],[e.summary]),[r,m]=(0,w.useState)(``),[g,_]=(0,w.useState)(`{}`),[v,y]=(0,w.useState)(`idle`),[b,x]=(0,w.useState)(),[E,O]=(0,w.useState)(``),k=(0,w.useMemo)(()=>n.find(e=>e.name===r)??n[0],[r,n]),A=t===void 0||k===void 0?``:`${t.id}:${k.name}`,M=(0,w.useRef)(A),N=(0,w.useRef)(0),P=j(n);(0,w.useEffect)(()=>{if(n.length===0){m(``);return}n.some(e=>e.name===r)||m(n[0]?.name??``)},[r,n]),(0,w.useEffect)(()=>{M.current!==A&&(M.current=A,N.current+=1,y(`idle`),O(``),x(void 0))},[A]);async function F(){if(t===void 0||k===void 0)return;let e;try{e=JSON.parse(g)}catch(e){O(e instanceof Error?e.message:String(e)),x(void 0);return}y(`running`),O(``),x(void 0);let n=A,r=N.current+1;N.current=r;let i=()=>N.current===r&&M.current===n;try{let n=await fetch(`/agents/${encodeURIComponent(t.id)}/tools/${encodeURIComponent(k.name)}/runs`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({args:e})}),r=await n.json();if(!i())return;let a=C(r);if(a===void 0){O(`Unexpected Studio tool run response: ${h(r)}`);return}x(a),(!n.ok||a.status===`error`)&&O(h(a.error??a))}catch(e){i()&&O(e instanceof Error?e.message:String(e))}finally{i()&&y(`idle`)}}return(0,T.jsxs)(l,{className:`grid-rows-[auto_minmax(0,1fr)]`,"aria-label":`Tools`,children:[(0,T.jsx)(u,{title:`Tools`,description:`Tool definitions registered on Studio agents, including approval policy and input schema.`,action:(0,T.jsxs)(`div`,{className:`flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start`,children:[(0,T.jsx)(d,{label:`tools`,value:P.total}),(0,T.jsx)(d,{label:`mcp`,value:P.mcp}),(0,T.jsx)(d,{label:`static`,value:P.static}),(0,T.jsx)(d,{label:`dynamic`,value:P.dynamic}),(0,T.jsx)(d,{label:`approvals`,value:P.approvals}),e.agents.length>1?(0,T.jsxs)(c,{value:t?.id??``,onValueChange:e.onSelectAgent,children:[(0,T.jsx)(a,{className:`h-8 min-h-8 w-64 rounded-md border-border text-xs max-sm:w-full`,children:(0,T.jsx)(i,{placeholder:`Agent`})}),(0,T.jsx)(o,{align:`end`,children:e.agents.map(e=>(0,T.jsx)(s,{value:e.id,children:e.name??e.id},e.id))})]}):null]})}),(0,T.jsx)(f,{className:`overflow-auto`,children:e.enabled?e.loading?(0,T.jsx)(p,{title:`Loading tools`,text:`Reading registered tool metadata.`}):n.length===0?(0,T.jsx)(p,{title:`No tools`,text:`The selected agent has no registered tools.`}):(0,T.jsxs)(`div`,{className:`grid w-full gap-5`,children:[(0,T.jsx)(D,{selectedToolName:k?.name??``,tools:n,onSelectTool:m}),(0,T.jsx)(S,{argsText:g,runError:E,runResponse:b,runState:v,selectedTool:k,onArgsTextChange:_,onRun:()=>void F()})]}):(0,T.jsx)(p,{title:`Tools unavailable`,text:`No registered Studio agent exposes static or dynamic tools.`})})]})}function D(e){return(0,T.jsx)(`div`,{className:`min-w-[1040px]`,children:(0,T.jsxs)(`table`,{className:`w-full border-separate border-spacing-0 text-left`,children:[(0,T.jsx)(`thead`,{className:`sticky top-0 z-10 bg-header backdrop-blur`,children:(0,T.jsxs)(`tr`,{children:[(0,T.jsx)(k,{children:`Tool`}),(0,T.jsx)(k,{children:`Origin`}),(0,T.jsx)(k,{children:`Schema`}),(0,T.jsx)(k,{children:`Approval`}),(0,T.jsx)(k,{children:`Run`})]})}),(0,T.jsx)(`tbody`,{children:e.tools.map(t=>(0,T.jsx)(O,{active:e.selectedToolName===t.name,tool:t,onSelectTool:e.onSelectTool},`${t.source}:${t.name}`))})]})})}function O(e){let t=g(e.tool.parameters);return(0,T.jsxs)(`tr`,{children:[(0,T.jsx)(A,{children:(0,T.jsxs)(`div`,{className:`grid min-w-0 gap-1.5`,children:[(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,T.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:e.tool.name}),e.active?(0,T.jsx)(m,{className:M,children:`selected`}):null]}),(0,T.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium text-muted-foreground`,children:e.tool.agentId}),(0,T.jsx)(`p`,{className:`m-0 max-w-[64ch] truncate text-sm leading-6 text-muted-foreground`,children:e.tool.description})]})}),(0,T.jsx)(A,{children:(0,T.jsx)(m,{className:x(e.tool),children:_(e.tool)})}),(0,T.jsx)(A,{children:(0,T.jsxs)(`div`,{className:`flex min-w-0 flex-wrap gap-2`,children:[(0,T.jsx)(b,{children:y(e.tool.parameters)}),(0,T.jsxs)(b,{children:[t,` `,t===1?`field`:`fields`]})]})}),(0,T.jsx)(A,{children:(0,T.jsxs)(`div`,{className:`grid min-w-0 gap-1.5`,children:[(0,T.jsx)(m,{className:v(e.tool.approval.required),children:e.tool.approval.required?`required`:`none`}),e.tool.approval.reason===void 0?null:(0,T.jsx)(`span`,{className:`max-w-[280px] truncate text-xs leading-5 text-muted-foreground`,title:e.tool.approval.reason,children:e.tool.approval.reason})]})}),(0,T.jsx)(A,{children:(0,T.jsx)(r,{className:`h-8 min-h-8 rounded-md px-3 text-xs`,type:`button`,variant:e.active?`secondary`:`ghost`,onClick:()=>e.onSelectTool(e.tool.name),children:e.active?`Selected`:`Use`})})]})}function k(e){return(0,T.jsx)(`th`,{className:`border-b border-hair py-2.5 pr-5 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground first:pl-0`,children:e.children})}function A(e){return(0,T.jsx)(`td`,{className:`border-b border-hair py-3.5 pr-5 align-top first:pl-0`,children:e.children})}function j(e){return e.reduce((e,t)=>(e.total+=1,t.source===`dynamic`?e.dynamic+=1:e.static+=1,t.mcpServerName!==void 0&&(e.mcp+=1),t.approval.required&&(e.approvals+=1),e),{approvals:0,dynamic:0,mcp:0,static:0,total:0})}var M=`border-hair bg-row-selected text-foreground`;export{E as ToolsPage};
2
- //# sourceMappingURL=tools-page-BMyx2xRT.js.map
1
+ import{i as e,r as t,s as n}from"./dist-xrWIzsxw.js";import{t as r}from"./button-jjWFI6nO.js";import{a as i,i as a,n as o,r as s,t as c}from"./select-Bt5d0Z3n.js";import{a as l,i as u,n as d,r as f,t as p}from"./studio-DeO7ueA2.js";import{t as m}from"./badge-MfEDrFTO.js";import{a as h,c as g,d as _,i as v,l as y,n as b,o as x,r as S,s as C}from"./tool-runner-DvhSexHU.js";var w=n(e(),1),T=t();function E(e){let t=e.agents.find(t=>t.id===e.selectedAgentId)??e.agents[0],n=(0,w.useMemo)(()=>e.summary?.tools??[],[e.summary]),[r,m]=(0,w.useState)(``),[g,_]=(0,w.useState)(`{}`),[v,y]=(0,w.useState)(`idle`),[b,x]=(0,w.useState)(),[E,O]=(0,w.useState)(``),k=(0,w.useMemo)(()=>n.find(e=>e.name===r)??n[0],[r,n]),A=t===void 0||k===void 0?``:`${t.id}:${k.name}`,M=(0,w.useRef)(A),N=(0,w.useRef)(0),P=j(n);(0,w.useEffect)(()=>{if(n.length===0){m(``);return}n.some(e=>e.name===r)||m(n[0]?.name??``)},[r,n]),(0,w.useEffect)(()=>{M.current!==A&&(M.current=A,N.current+=1,y(`idle`),O(``),x(void 0))},[A]);async function F(){if(t===void 0||k===void 0)return;let e;try{e=JSON.parse(g)}catch(e){O(e instanceof Error?e.message:String(e)),x(void 0);return}y(`running`),O(``),x(void 0);let n=A,r=N.current+1;N.current=r;let i=()=>N.current===r&&M.current===n;try{let n=await fetch(`/agents/${encodeURIComponent(t.id)}/tools/${encodeURIComponent(k.name)}/runs`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({args:e})}),r=await n.json();if(!i())return;let a=C(r);if(a===void 0){O(`Unexpected Studio tool run response: ${h(r)}`);return}x(a),(!n.ok||a.status===`error`)&&O(h(a.error??a))}catch(e){i()&&O(e instanceof Error?e.message:String(e))}finally{i()&&y(`idle`)}}return(0,T.jsxs)(l,{className:`grid-rows-[auto_minmax(0,1fr)]`,"aria-label":`Tools`,children:[(0,T.jsx)(u,{title:`Tools`,description:`Tool definitions registered on Studio agents, including approval policy and input schema.`,action:(0,T.jsxs)(`div`,{className:`flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start`,children:[(0,T.jsx)(d,{label:`tools`,value:P.total}),(0,T.jsx)(d,{label:`mcp`,value:P.mcp}),(0,T.jsx)(d,{label:`static`,value:P.static}),(0,T.jsx)(d,{label:`dynamic`,value:P.dynamic}),(0,T.jsx)(d,{label:`approvals`,value:P.approvals}),e.agents.length>1?(0,T.jsxs)(c,{value:t?.id??``,onValueChange:e.onSelectAgent,children:[(0,T.jsx)(a,{className:`h-8 min-h-8 w-64 rounded-md border-border text-xs max-sm:w-full`,children:(0,T.jsx)(i,{placeholder:`Agent`})}),(0,T.jsx)(o,{align:`end`,children:e.agents.map(e=>(0,T.jsx)(s,{value:e.id,children:e.name??e.id},e.id))})]}):null]})}),(0,T.jsx)(f,{className:`overflow-auto`,children:e.enabled?e.loading?(0,T.jsx)(p,{title:`Loading tools`,text:`Reading registered tool metadata.`}):n.length===0?(0,T.jsx)(p,{title:`No tools`,text:`The selected agent has no registered tools.`}):(0,T.jsxs)(`div`,{className:`grid w-full gap-5`,children:[(0,T.jsx)(D,{selectedToolName:k?.name??``,tools:n,onSelectTool:m}),(0,T.jsx)(S,{argsText:g,runError:E,runResponse:b,runState:v,selectedTool:k,onArgsTextChange:_,onRun:()=>void F()})]}):(0,T.jsx)(p,{title:`Tools unavailable`,text:`No registered Studio agent exposes static or dynamic tools.`})})]})}function D(e){return(0,T.jsx)(`div`,{className:`min-w-[1040px]`,children:(0,T.jsxs)(`table`,{className:`w-full border-separate border-spacing-0 text-left`,children:[(0,T.jsx)(`thead`,{className:`sticky top-0 z-10 bg-header backdrop-blur`,children:(0,T.jsxs)(`tr`,{children:[(0,T.jsx)(k,{children:`Tool`}),(0,T.jsx)(k,{children:`Origin`}),(0,T.jsx)(k,{children:`Schema`}),(0,T.jsx)(k,{children:`Approval`}),(0,T.jsx)(k,{children:`Run`})]})}),(0,T.jsx)(`tbody`,{children:e.tools.map(t=>(0,T.jsx)(O,{active:e.selectedToolName===t.name,tool:t,onSelectTool:e.onSelectTool},`${t.source}:${t.name}`))})]})})}function O(e){let t=g(e.tool.parameters);return(0,T.jsxs)(`tr`,{children:[(0,T.jsx)(A,{children:(0,T.jsxs)(`div`,{className:`grid min-w-0 gap-1.5`,children:[(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,T.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:e.tool.name}),e.active?(0,T.jsx)(m,{className:M,children:`selected`}):null]}),(0,T.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium text-muted-foreground`,children:e.tool.agentId}),(0,T.jsx)(`p`,{className:`m-0 max-w-[64ch] truncate text-sm leading-6 text-muted-foreground`,children:e.tool.description})]})}),(0,T.jsx)(A,{children:(0,T.jsx)(m,{className:x(e.tool),children:_(e.tool)})}),(0,T.jsx)(A,{children:(0,T.jsxs)(`div`,{className:`flex min-w-0 flex-wrap gap-2`,children:[(0,T.jsx)(b,{children:y(e.tool.parameters)}),(0,T.jsxs)(b,{children:[t,` `,t===1?`field`:`fields`]})]})}),(0,T.jsx)(A,{children:(0,T.jsxs)(`div`,{className:`grid min-w-0 gap-1.5`,children:[(0,T.jsx)(m,{className:v(e.tool.approval.required),children:e.tool.approval.required?`required`:`none`}),e.tool.approval.reason===void 0?null:(0,T.jsx)(`span`,{className:`max-w-[280px] truncate text-xs leading-5 text-muted-foreground`,title:e.tool.approval.reason,children:e.tool.approval.reason})]})}),(0,T.jsx)(A,{children:(0,T.jsx)(r,{className:`h-8 min-h-8 rounded-md px-3 text-xs`,type:`button`,variant:e.active?`secondary`:`ghost`,onClick:()=>e.onSelectTool(e.tool.name),children:e.active?`Selected`:`Use`})})]})}function k(e){return(0,T.jsx)(`th`,{className:`border-b border-hair py-2.5 pr-5 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground first:pl-0`,children:e.children})}function A(e){return(0,T.jsx)(`td`,{className:`border-b border-hair py-3.5 pr-5 align-top first:pl-0`,children:e.children})}function j(e){return e.reduce((e,t)=>(e.total+=1,t.source===`dynamic`?e.dynamic+=1:e.static+=1,t.mcpServerName!==void 0&&(e.mcp+=1),t.approval.required&&(e.approvals+=1),e),{approvals:0,dynamic:0,mcp:0,static:0,total:0})}var M=`border-hair bg-row-selected text-foreground`;export{E as ToolsPage};
2
+ //# sourceMappingURL=tools-page-B613Kgf3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools-page-BMyx2xRT.js","names":[],"sources":["../../../src/ui/app/modules/tools/tools-page.tsx"],"sourcesContent":["import { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n StudioAgentToolMetadata,\n StudioAgentToolsSummary,\n StudioConfig,\n StudioToolRunResponse,\n} from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport {\n StudioEmptyState,\n StudioHeaderMetric,\n StudioPageContent,\n StudioPageHeader,\n StudioPageShell,\n} from \"../../components/ui/studio\";\nimport {\n approvalBadgeClass,\n formatJson,\n originBadgeClass,\n parseStudioToolRunResponse,\n schemaPropertyCount,\n schemaType,\n ToolMetaPill,\n ToolRunner,\n toolOriginLabel,\n} from \"./tool-runner\";\n\nexport function ToolsPage(props: {\n agents: StudioConfig[\"agents\"];\n selectedAgentId: string;\n summary: StudioAgentToolsSummary | undefined;\n enabled: boolean;\n loading: boolean;\n onSelectAgent: (agentId: string) => void;\n}) {\n const selectedAgent =\n props.agents.find((agent) => agent.id === props.selectedAgentId) ?? props.agents[0];\n const tools = useMemo(() => props.summary?.tools ?? [], [props.summary]);\n const [selectedToolName, setSelectedToolName] = useState(\"\");\n const [argsText, setArgsText] = useState(\"{}\");\n const [runState, setRunState] = useState<\"idle\" | \"running\">(\"idle\");\n const [runResponse, setRunResponse] = useState<StudioToolRunResponse | undefined>();\n const [runError, setRunError] = useState(\"\");\n const selectedTool = useMemo(\n () => tools.find((tool) => tool.name === selectedToolName) ?? tools[0],\n [selectedToolName, tools],\n );\n const selectedToolRunKey =\n selectedAgent === undefined || selectedTool === undefined\n ? \"\"\n : `${selectedAgent.id}:${selectedTool.name}`;\n const selectedToolRunKeyRef = useRef(selectedToolRunKey);\n const runRequestIdRef = useRef(0);\n const toolTotals = summarizeTools(tools);\n\n useEffect(() => {\n if (tools.length === 0) {\n setSelectedToolName(\"\");\n return;\n }\n if (!tools.some((tool) => tool.name === selectedToolName)) {\n setSelectedToolName(tools[0]?.name ?? \"\");\n }\n }, [selectedToolName, tools]);\n\n useEffect(() => {\n if (selectedToolRunKeyRef.current === selectedToolRunKey) {\n return;\n }\n selectedToolRunKeyRef.current = selectedToolRunKey;\n runRequestIdRef.current += 1;\n setRunState(\"idle\");\n setRunError(\"\");\n setRunResponse(undefined);\n }, [selectedToolRunKey]);\n\n async function runSelectedTool() {\n if (selectedAgent === undefined || selectedTool === undefined) {\n return;\n }\n let args: unknown;\n try {\n args = JSON.parse(argsText);\n } catch (parseError) {\n setRunError(parseError instanceof Error ? parseError.message : String(parseError));\n setRunResponse(undefined);\n return;\n }\n\n setRunState(\"running\");\n setRunError(\"\");\n setRunResponse(undefined);\n const runToolKey = selectedToolRunKey;\n const requestId = runRequestIdRef.current + 1;\n runRequestIdRef.current = requestId;\n const isCurrentRun = () =>\n runRequestIdRef.current === requestId && selectedToolRunKeyRef.current === runToolKey;\n try {\n const response = await fetch(\n `/agents/${encodeURIComponent(selectedAgent.id)}/tools/${encodeURIComponent(\n selectedTool.name,\n )}/runs`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ args }),\n },\n );\n const rawBody = await response.json();\n if (!isCurrentRun()) {\n return;\n }\n const body = parseStudioToolRunResponse(rawBody);\n if (body === undefined) {\n setRunError(`Unexpected Studio tool run response: ${formatJson(rawBody)}`);\n return;\n }\n setRunResponse(body);\n if (!response.ok || body.status === \"error\") {\n setRunError(formatJson(body.error ?? body));\n }\n } catch (error) {\n if (isCurrentRun()) {\n setRunError(error instanceof Error ? error.message : String(error));\n }\n } finally {\n if (isCurrentRun()) {\n setRunState(\"idle\");\n }\n }\n }\n\n return (\n <StudioPageShell className=\"grid-rows-[auto_minmax(0,1fr)]\" aria-label=\"Tools\">\n <StudioPageHeader\n title=\"Tools\"\n description=\"Tool definitions registered on Studio agents, including approval policy and input schema.\"\n action={\n <div className=\"flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start\">\n <StudioHeaderMetric label=\"tools\" value={toolTotals.total} />\n <StudioHeaderMetric label=\"mcp\" value={toolTotals.mcp} />\n <StudioHeaderMetric label=\"static\" value={toolTotals.static} />\n <StudioHeaderMetric label=\"dynamic\" value={toolTotals.dynamic} />\n <StudioHeaderMetric label=\"approvals\" value={toolTotals.approvals} />\n {props.agents.length > 1 ? (\n <Select value={selectedAgent?.id ?? \"\"} onValueChange={props.onSelectAgent}>\n <SelectTrigger className=\"h-8 min-h-8 w-64 rounded-md border-border text-xs max-sm:w-full\">\n <SelectValue placeholder=\"Agent\" />\n </SelectTrigger>\n <SelectContent align=\"end\">\n {props.agents.map((agent) => (\n <SelectItem value={agent.id} key={agent.id}>\n {agent.name ?? agent.id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n </div>\n }\n />\n\n <StudioPageContent className=\"overflow-auto\">\n {!props.enabled ? (\n <StudioEmptyState\n title=\"Tools unavailable\"\n text=\"No registered Studio agent exposes static or dynamic tools.\"\n />\n ) : props.loading ? (\n <StudioEmptyState title=\"Loading tools\" text=\"Reading registered tool metadata.\" />\n ) : tools.length === 0 ? (\n <StudioEmptyState title=\"No tools\" text=\"The selected agent has no registered tools.\" />\n ) : (\n <div className=\"grid w-full gap-5\">\n <ToolRegistryTable\n selectedToolName={selectedTool?.name ?? \"\"}\n tools={tools}\n onSelectTool={setSelectedToolName}\n />\n <ToolRunner\n argsText={argsText}\n runError={runError}\n runResponse={runResponse}\n runState={runState}\n selectedTool={selectedTool}\n onArgsTextChange={setArgsText}\n onRun={() => void runSelectedTool()}\n />\n </div>\n )}\n </StudioPageContent>\n </StudioPageShell>\n );\n}\n\nfunction ToolRegistryTable(props: {\n tools: StudioAgentToolMetadata[];\n selectedToolName: string;\n onSelectTool: (toolName: string) => void;\n}) {\n return (\n <div className=\"min-w-[1040px]\">\n <table className=\"w-full border-separate border-spacing-0 text-left\">\n <thead className=\"sticky top-0 z-10 bg-header backdrop-blur\">\n <tr>\n <ToolTableHead>Tool</ToolTableHead>\n <ToolTableHead>Origin</ToolTableHead>\n <ToolTableHead>Schema</ToolTableHead>\n <ToolTableHead>Approval</ToolTableHead>\n <ToolTableHead>Run</ToolTableHead>\n </tr>\n </thead>\n <tbody>\n {props.tools.map((tool) => (\n <ToolRegistryRow\n active={props.selectedToolName === tool.name}\n key={`${tool.source}:${tool.name}`}\n tool={tool}\n onSelectTool={props.onSelectTool}\n />\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction ToolRegistryRow(props: {\n tool: StudioAgentToolMetadata;\n active: boolean;\n onSelectTool: (toolName: string) => void;\n}) {\n const propertyCount = schemaPropertyCount(props.tool.parameters);\n return (\n <tr>\n <ToolTableCell>\n <div className=\"grid min-w-0 gap-1.5\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {props.tool.name}\n </span>\n {props.active ? <Badge className={selectedBadge}>selected</Badge> : null}\n </div>\n <span className=\"min-w-0 truncate text-xs font-medium text-muted-foreground\">\n {props.tool.agentId}\n </span>\n <p className=\"m-0 max-w-[64ch] truncate text-sm leading-6 text-muted-foreground\">\n {props.tool.description}\n </p>\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <Badge className={originBadgeClass(props.tool)}>{toolOriginLabel(props.tool)}</Badge>\n </ToolTableCell>\n <ToolTableCell>\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <ToolMetaPill>{schemaType(props.tool.parameters)}</ToolMetaPill>\n <ToolMetaPill>\n {propertyCount} {propertyCount === 1 ? \"field\" : \"fields\"}\n </ToolMetaPill>\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <div className=\"grid min-w-0 gap-1.5\">\n <Badge className={approvalBadgeClass(props.tool.approval.required)}>\n {props.tool.approval.required ? \"required\" : \"none\"}\n </Badge>\n {props.tool.approval.reason === undefined ? null : (\n <span\n className=\"max-w-[280px] truncate text-xs leading-5 text-muted-foreground\"\n title={props.tool.approval.reason}\n >\n {props.tool.approval.reason}\n </span>\n )}\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <Button\n className=\"h-8 min-h-8 rounded-md px-3 text-xs\"\n type=\"button\"\n variant={props.active ? \"secondary\" : \"ghost\"}\n onClick={() => props.onSelectTool(props.tool.name)}\n >\n {props.active ? \"Selected\" : \"Use\"}\n </Button>\n </ToolTableCell>\n </tr>\n );\n}\n\nfunction ToolTableHead(props: { children: string }) {\n return (\n <th className=\"border-b border-hair py-2.5 pr-5 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground first:pl-0\">\n {props.children}\n </th>\n );\n}\n\nfunction ToolTableCell(props: { children: ReactNode }) {\n return (\n <td className=\"border-b border-hair py-3.5 pr-5 align-top first:pl-0\">{props.children}</td>\n );\n}\n\nfunction summarizeTools(tools: StudioAgentToolMetadata[]) {\n return tools.reduce(\n (totals, tool) => {\n totals.total += 1;\n if (tool.source === \"dynamic\") {\n totals.dynamic += 1;\n } else {\n totals.static += 1;\n }\n if (tool.mcpServerName !== undefined) {\n totals.mcp += 1;\n }\n if (tool.approval.required) {\n totals.approvals += 1;\n }\n return totals;\n },\n { approvals: 0, dynamic: 0, mcp: 0, static: 0, total: 0 },\n );\n}\n\nconst selectedBadge = \"border-hair bg-row-selected text-foreground\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"tools-page-B613Kgf3.js","names":[],"sources":["../../../src/ui/app/modules/tools/tools-page.tsx"],"sourcesContent":["import { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n StudioAgentToolMetadata,\n StudioAgentToolsSummary,\n StudioConfig,\n StudioToolRunResponse,\n} from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport {\n StudioEmptyState,\n StudioHeaderMetric,\n StudioPageContent,\n StudioPageHeader,\n StudioPageShell,\n} from \"../../components/ui/studio\";\nimport {\n approvalBadgeClass,\n formatJson,\n originBadgeClass,\n parseStudioToolRunResponse,\n schemaPropertyCount,\n schemaType,\n ToolMetaPill,\n ToolRunner,\n toolOriginLabel,\n} from \"./tool-runner\";\n\nexport function ToolsPage(props: {\n agents: StudioConfig[\"agents\"];\n selectedAgentId: string;\n summary: StudioAgentToolsSummary | undefined;\n enabled: boolean;\n loading: boolean;\n onSelectAgent: (agentId: string) => void;\n}) {\n const selectedAgent =\n props.agents.find((agent) => agent.id === props.selectedAgentId) ?? props.agents[0];\n const tools = useMemo(() => props.summary?.tools ?? [], [props.summary]);\n const [selectedToolName, setSelectedToolName] = useState(\"\");\n const [argsText, setArgsText] = useState(\"{}\");\n const [runState, setRunState] = useState<\"idle\" | \"running\">(\"idle\");\n const [runResponse, setRunResponse] = useState<StudioToolRunResponse | undefined>();\n const [runError, setRunError] = useState(\"\");\n const selectedTool = useMemo(\n () => tools.find((tool) => tool.name === selectedToolName) ?? tools[0],\n [selectedToolName, tools],\n );\n const selectedToolRunKey =\n selectedAgent === undefined || selectedTool === undefined\n ? \"\"\n : `${selectedAgent.id}:${selectedTool.name}`;\n const selectedToolRunKeyRef = useRef(selectedToolRunKey);\n const runRequestIdRef = useRef(0);\n const toolTotals = summarizeTools(tools);\n\n useEffect(() => {\n if (tools.length === 0) {\n setSelectedToolName(\"\");\n return;\n }\n if (!tools.some((tool) => tool.name === selectedToolName)) {\n setSelectedToolName(tools[0]?.name ?? \"\");\n }\n }, [selectedToolName, tools]);\n\n useEffect(() => {\n if (selectedToolRunKeyRef.current === selectedToolRunKey) {\n return;\n }\n selectedToolRunKeyRef.current = selectedToolRunKey;\n runRequestIdRef.current += 1;\n setRunState(\"idle\");\n setRunError(\"\");\n setRunResponse(undefined);\n }, [selectedToolRunKey]);\n\n async function runSelectedTool() {\n if (selectedAgent === undefined || selectedTool === undefined) {\n return;\n }\n let args: unknown;\n try {\n args = JSON.parse(argsText);\n } catch (parseError) {\n setRunError(parseError instanceof Error ? parseError.message : String(parseError));\n setRunResponse(undefined);\n return;\n }\n\n setRunState(\"running\");\n setRunError(\"\");\n setRunResponse(undefined);\n const runToolKey = selectedToolRunKey;\n const requestId = runRequestIdRef.current + 1;\n runRequestIdRef.current = requestId;\n const isCurrentRun = () =>\n runRequestIdRef.current === requestId && selectedToolRunKeyRef.current === runToolKey;\n try {\n const response = await fetch(\n `/agents/${encodeURIComponent(selectedAgent.id)}/tools/${encodeURIComponent(\n selectedTool.name,\n )}/runs`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ args }),\n },\n );\n const rawBody = await response.json();\n if (!isCurrentRun()) {\n return;\n }\n const body = parseStudioToolRunResponse(rawBody);\n if (body === undefined) {\n setRunError(`Unexpected Studio tool run response: ${formatJson(rawBody)}`);\n return;\n }\n setRunResponse(body);\n if (!response.ok || body.status === \"error\") {\n setRunError(formatJson(body.error ?? body));\n }\n } catch (error) {\n if (isCurrentRun()) {\n setRunError(error instanceof Error ? error.message : String(error));\n }\n } finally {\n if (isCurrentRun()) {\n setRunState(\"idle\");\n }\n }\n }\n\n return (\n <StudioPageShell className=\"grid-rows-[auto_minmax(0,1fr)]\" aria-label=\"Tools\">\n <StudioPageHeader\n title=\"Tools\"\n description=\"Tool definitions registered on Studio agents, including approval policy and input schema.\"\n action={\n <div className=\"flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start\">\n <StudioHeaderMetric label=\"tools\" value={toolTotals.total} />\n <StudioHeaderMetric label=\"mcp\" value={toolTotals.mcp} />\n <StudioHeaderMetric label=\"static\" value={toolTotals.static} />\n <StudioHeaderMetric label=\"dynamic\" value={toolTotals.dynamic} />\n <StudioHeaderMetric label=\"approvals\" value={toolTotals.approvals} />\n {props.agents.length > 1 ? (\n <Select value={selectedAgent?.id ?? \"\"} onValueChange={props.onSelectAgent}>\n <SelectTrigger className=\"h-8 min-h-8 w-64 rounded-md border-border text-xs max-sm:w-full\">\n <SelectValue placeholder=\"Agent\" />\n </SelectTrigger>\n <SelectContent align=\"end\">\n {props.agents.map((agent) => (\n <SelectItem value={agent.id} key={agent.id}>\n {agent.name ?? agent.id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : null}\n </div>\n }\n />\n\n <StudioPageContent className=\"overflow-auto\">\n {!props.enabled ? (\n <StudioEmptyState\n title=\"Tools unavailable\"\n text=\"No registered Studio agent exposes static or dynamic tools.\"\n />\n ) : props.loading ? (\n <StudioEmptyState title=\"Loading tools\" text=\"Reading registered tool metadata.\" />\n ) : tools.length === 0 ? (\n <StudioEmptyState title=\"No tools\" text=\"The selected agent has no registered tools.\" />\n ) : (\n <div className=\"grid w-full gap-5\">\n <ToolRegistryTable\n selectedToolName={selectedTool?.name ?? \"\"}\n tools={tools}\n onSelectTool={setSelectedToolName}\n />\n <ToolRunner\n argsText={argsText}\n runError={runError}\n runResponse={runResponse}\n runState={runState}\n selectedTool={selectedTool}\n onArgsTextChange={setArgsText}\n onRun={() => void runSelectedTool()}\n />\n </div>\n )}\n </StudioPageContent>\n </StudioPageShell>\n );\n}\n\nfunction ToolRegistryTable(props: {\n tools: StudioAgentToolMetadata[];\n selectedToolName: string;\n onSelectTool: (toolName: string) => void;\n}) {\n return (\n <div className=\"min-w-[1040px]\">\n <table className=\"w-full border-separate border-spacing-0 text-left\">\n <thead className=\"sticky top-0 z-10 bg-header backdrop-blur\">\n <tr>\n <ToolTableHead>Tool</ToolTableHead>\n <ToolTableHead>Origin</ToolTableHead>\n <ToolTableHead>Schema</ToolTableHead>\n <ToolTableHead>Approval</ToolTableHead>\n <ToolTableHead>Run</ToolTableHead>\n </tr>\n </thead>\n <tbody>\n {props.tools.map((tool) => (\n <ToolRegistryRow\n active={props.selectedToolName === tool.name}\n key={`${tool.source}:${tool.name}`}\n tool={tool}\n onSelectTool={props.onSelectTool}\n />\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction ToolRegistryRow(props: {\n tool: StudioAgentToolMetadata;\n active: boolean;\n onSelectTool: (toolName: string) => void;\n}) {\n const propertyCount = schemaPropertyCount(props.tool.parameters);\n return (\n <tr>\n <ToolTableCell>\n <div className=\"grid min-w-0 gap-1.5\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {props.tool.name}\n </span>\n {props.active ? <Badge className={selectedBadge}>selected</Badge> : null}\n </div>\n <span className=\"min-w-0 truncate text-xs font-medium text-muted-foreground\">\n {props.tool.agentId}\n </span>\n <p className=\"m-0 max-w-[64ch] truncate text-sm leading-6 text-muted-foreground\">\n {props.tool.description}\n </p>\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <Badge className={originBadgeClass(props.tool)}>{toolOriginLabel(props.tool)}</Badge>\n </ToolTableCell>\n <ToolTableCell>\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <ToolMetaPill>{schemaType(props.tool.parameters)}</ToolMetaPill>\n <ToolMetaPill>\n {propertyCount} {propertyCount === 1 ? \"field\" : \"fields\"}\n </ToolMetaPill>\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <div className=\"grid min-w-0 gap-1.5\">\n <Badge className={approvalBadgeClass(props.tool.approval.required)}>\n {props.tool.approval.required ? \"required\" : \"none\"}\n </Badge>\n {props.tool.approval.reason === undefined ? null : (\n <span\n className=\"max-w-[280px] truncate text-xs leading-5 text-muted-foreground\"\n title={props.tool.approval.reason}\n >\n {props.tool.approval.reason}\n </span>\n )}\n </div>\n </ToolTableCell>\n <ToolTableCell>\n <Button\n className=\"h-8 min-h-8 rounded-md px-3 text-xs\"\n type=\"button\"\n variant={props.active ? \"secondary\" : \"ghost\"}\n onClick={() => props.onSelectTool(props.tool.name)}\n >\n {props.active ? \"Selected\" : \"Use\"}\n </Button>\n </ToolTableCell>\n </tr>\n );\n}\n\nfunction ToolTableHead(props: { children: string }) {\n return (\n <th className=\"border-b border-hair py-2.5 pr-5 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground first:pl-0\">\n {props.children}\n </th>\n );\n}\n\nfunction ToolTableCell(props: { children: ReactNode }) {\n return (\n <td className=\"border-b border-hair py-3.5 pr-5 align-top first:pl-0\">{props.children}</td>\n );\n}\n\nfunction summarizeTools(tools: StudioAgentToolMetadata[]) {\n return tools.reduce(\n (totals, tool) => {\n totals.total += 1;\n if (tool.source === \"dynamic\") {\n totals.dynamic += 1;\n } else {\n totals.static += 1;\n }\n if (tool.mcpServerName !== undefined) {\n totals.mcp += 1;\n }\n if (tool.approval.required) {\n totals.approvals += 1;\n }\n return totals;\n },\n { approvals: 0, dynamic: 0, mcp: 0, static: 0, total: 0 },\n );\n}\n\nconst selectedBadge = \"border-hair bg-row-selected text-foreground\";\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import{i as e,n as t,r as n,s as r}from"./dist-xrWIzsxw.js";import{i,n as a,o,r as s,s as c,t as l}from"./dist-Che9Yn41.js";import{f as u,i as d,l as f,m as p,p as m,s as h,t as g,v as _,y as v}from"./button-jjWFI6nO.js";import{n as y,r as b,t as x}from"./Wrench.es-BEBc8KqB.js";import{n as S,t as C}from"./Check.es-DSgPB1Pv.js";import{t as w}from"./Copy.es-C6Vd2mhd.js";import{t as T}from"./MagnifyingGlass.es-DP3xtOg0.js";import{n as E,t as D}from"./icon-BivhXy0Y.js";import{n as O,t as ee}from"./dist-Du1CgPgL.js";import{t as k}from"./studio-DeO7ueA2.js";import{t as te}from"./badge-MfEDrFTO.js";import{t as ne}from"./input-C35vs5wD.js";var A=r(e(),1),re=new Map([[`bold`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M228,128a12,12,0,0,1-12,12H69l51.52,51.51a12,12,0,0,1-17,17l-72-72a12,12,0,0,1,0-17l72-72a12,12,0,0,1,17,17L69,116H216A12,12,0,0,1,228,128Z`}))],[`duotone`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M112,56V200L40,128Z`,opacity:`0.2`}),A.createElement(`path`,{d:`M216,120H120V56a8,8,0,0,0-13.66-5.66l-72,72a8,8,0,0,0,0,11.32l72,72A8,8,0,0,0,120,200V136h96a8,8,0,0,0,0-16ZM104,180.69,51.31,128,104,75.31Z`}))],[`fill`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M224,128a8,8,0,0,1-8,8H120v64a8,8,0,0,1-13.66,5.66l-72-72a8,8,0,0,1,0-11.32l72-72A8,8,0,0,1,120,56v64h96A8,8,0,0,1,224,128Z`}))],[`light`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M222,128a6,6,0,0,1-6,6H54.49l61.75,61.76a6,6,0,1,1-8.48,8.48l-72-72a6,6,0,0,1,0-8.48l72-72a6,6,0,0,1,8.48,8.48L54.49,122H216A6,6,0,0,1,222,128Z`}))],[`regular`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M224,128a8,8,0,0,1-8,8H59.31l58.35,58.34a8,8,0,0,1-11.32,11.32l-72-72a8,8,0,0,1,0-11.32l72-72a8,8,0,0,1,11.32,11.32L59.31,120H216A8,8,0,0,1,224,128Z`}))],[`thin`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M220,128a4,4,0,0,1-4,4H49.66l65.17,65.17a4,4,0,0,1-5.66,5.66l-72-72a4,4,0,0,1,0-5.66l72-72a4,4,0,0,1,5.66,5.66L49.66,124H216A4,4,0,0,1,220,128Z`}))]]),ie=new Map([[`bold`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M228,128a12,12,0,0,1-12,12H40a12,12,0,0,1,0-24H216A12,12,0,0,1,228,128ZM104.49,56.48,116,45V88a12,12,0,0,0,24,0V45l11.51,11.51a12,12,0,0,0,17-17l-32-32a12,12,0,0,0-17,0l-32,32a12,12,0,0,0,17,17Zm47,143L140,211V168a12,12,0,0,0-24,0v43l-11.51-11.52a12,12,0,0,0-17,17l32,32a12,12,0,0,0,17,0l32-32a12,12,0,0,0-17-17Z`}))],[`duotone`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M216,32V224a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V32A16,16,0,0,1,56,16H200A16,16,0,0,1,216,32Z`,opacity:`0.2`}),A.createElement(`path`,{d:`M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM101.66,53.66,120,35.31V96a8,8,0,0,0,16,0V35.31l18.34,18.35a8,8,0,0,0,11.32-11.32l-32-32a8,8,0,0,0-11.32,0l-32,32a8,8,0,0,0,11.32,11.32Zm52.68,148.68L136,220.69V160a8,8,0,0,0-16,0v60.69l-18.34-18.35a8,8,0,0,0-11.32,11.32l32,32a8,8,0,0,0,11.32,0l32-32a8,8,0,0,0-11.32-11.32Z`}))],[`fill`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M88.61,51.06a8,8,0,0,1,1.73-8.72l32-32a8,8,0,0,1,11.32,0l32,32A8,8,0,0,1,160,56H136V96a8,8,0,0,1-16,0V56H96A8,8,0,0,1,88.61,51.06ZM216,120H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Zm-56,80H136V160a8,8,0,0,0-16,0v40H96a8,8,0,0,0-5.66,13.66l32,32a8,8,0,0,0,11.32,0l32-32A8,8,0,0,0,160,200Z`}))],[`light`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M222,128a6,6,0,0,1-6,6H40a6,6,0,0,1,0-12H216A6,6,0,0,1,222,128ZM100.24,52.24,122,30.49V96a6,6,0,0,0,12,0V30.49l21.76,21.75a6,6,0,0,0,8.48-8.48l-32-32a6,6,0,0,0-8.48,0l-32,32a6,6,0,0,0,8.48,8.48Zm55.52,151.52L134,225.51V160a6,6,0,0,0-12,0v65.51l-21.76-21.75a6,6,0,0,0-8.48,8.48l32,32a6,6,0,0,0,8.48,0l32-32a6,6,0,0,0-8.48-8.48Z`}))],[`regular`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM101.66,53.66,120,35.31V96a8,8,0,0,0,16,0V35.31l18.34,18.35a8,8,0,0,0,11.32-11.32l-32-32a8,8,0,0,0-11.32,0l-32,32a8,8,0,0,0,11.32,11.32Zm52.68,148.68L136,220.69V160a8,8,0,0,0-16,0v60.69l-18.34-18.35a8,8,0,0,0-11.32,11.32l32,32a8,8,0,0,0,11.32,0l32-32a8,8,0,0,0-11.32-11.32Z`}))],[`thin`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M220,128a4,4,0,0,1-4,4H40a4,4,0,0,1,0-8H216A4,4,0,0,1,220,128ZM98.83,50.83,124,25.66V96a4,4,0,0,0,8,0V25.66l25.17,25.17a4,4,0,1,0,5.66-5.66l-32-32a4,4,0,0,0-5.66,0l-32,32a4,4,0,0,0,5.66,5.66Zm58.34,154.34L132,230.34V160a4,4,0,0,0-8,0v70.34L98.83,205.17a4,4,0,0,0-5.66,5.66l32,32a4,4,0,0,0,5.66,0l32-32a4,4,0,0,0-5.66-5.66Z`}))]]),ae=new Map([[`bold`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M54.8,119.49A35.06,35.06,0,0,1,49.05,128a35.06,35.06,0,0,1,5.75,8.51C60,147.24,60,159.83,60,172c0,25.94,1.84,32,20,32a12,12,0,0,1,0,24c-19.14,0-32.2-6.9-38.8-20.51C36,196.76,36,184.17,36,172c0-25.94-1.84-32-20-32a12,12,0,0,1,0-24c18.16,0,20-6.06,20-32,0-12.17,0-24.76,5.2-35.49C47.8,34.9,60.86,28,80,28a12,12,0,0,1,0,24c-18.16,0-20,6.06-20,32C60,96.17,60,108.76,54.8,119.49ZM240,116c-18.16,0-20-6.06-20-32,0-12.17,0-24.76-5.2-35.49C208.2,34.9,195.14,28,176,28a12,12,0,0,0,0,24c18.16,0,20,6.06,20,32,0,12.17,0,24.76,5.2,35.49A35.06,35.06,0,0,0,207,128a35.06,35.06,0,0,0-5.75,8.51C196,147.24,196,159.83,196,172c0,25.94-1.84,32-20,32a12,12,0,0,0,0,24c19.14,0,32.2-6.9,38.8-20.51C220,196.76,220,184.17,220,172c0-25.94,1.84-32,20-32a12,12,0,0,0,0-24Z`}))],[`duotone`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M240,128c-64,0,0,88-64,88H80c-64,0,0-88-64-88,64,0,0-88,64-88h96C240,40,176,128,240,128Z`,opacity:`0.2`}),A.createElement(`path`,{d:`M43.18,128a29.78,29.78,0,0,1,8,10.26c4.8,9.9,4.8,22,4.8,33.74,0,24.31,1,36,24,36a8,8,0,0,1,0,16c-17.48,0-29.32-6.14-35.2-18.26-4.8-9.9-4.8-22-4.8-33.74,0-24.31-1-36-24-36a8,8,0,0,1,0-16c23,0,24-11.69,24-36,0-11.72,0-23.84,4.8-33.74C50.68,38.14,62.52,32,80,32a8,8,0,0,1,0,16C57,48,56,59.69,56,84c0,11.72,0,23.84-4.8,33.74A29.78,29.78,0,0,1,43.18,128ZM240,120c-23,0-24-11.69-24-36,0-11.72,0-23.84-4.8-33.74C205.32,38.14,193.48,32,176,32a8,8,0,0,0,0,16c23,0,24,11.69,24,36,0,11.72,0,23.84,4.8,33.74a29.78,29.78,0,0,0,8,10.26,29.78,29.78,0,0,0-8,10.26c-4.8,9.9-4.8,22-4.8,33.74,0,24.31-1,36-24,36a8,8,0,0,0,0,16c17.48,0,29.32-6.14,35.2-18.26,4.8-9.9,4.8-22,4.8-33.74,0-24.31,1-36,24-36a8,8,0,0,0,0-16Z`}))],[`fill`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM88,155.84c.29,14.26.41,20.16,16,20.16a8,8,0,0,1,0,16c-31.27,0-31.72-22.43-32-35.84C71.71,141.9,71.59,136,56,136a8,8,0,0,1,0-16c15.59,0,15.71-5.9,16-20.16C72.28,86.43,72.73,64,104,64a8,8,0,0,1,0,16c-15.59,0-15.71,5.9-16,20.16-.17,8.31-.41,20.09-8,27.84C87.59,135.75,87.83,147.53,88,155.84ZM200,136c-15.59,0-15.71,5.9-16,20.16-.28,13.41-.73,35.84-32,35.84a8,8,0,0,1,0-16c15.59,0,15.71-5.9,16-20.16.17-8.31.41-20.09,8-27.84-7.6-7.75-7.84-19.53-8-27.84C167.71,85.9,167.59,80,152,80a8,8,0,0,1,0-16c31.27,0,31.72,22.43,32,35.84.29,14.26.41,20.16,16,20.16a8,8,0,0,1,0,16Z`}))],[`light`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M39.91,128a27.68,27.68,0,0,1,9.49,11.13C54,148.62,54,160.51,54,172c0,24.27,1.21,38,26,38a6,6,0,0,1,0,12c-16.88,0-27.81-5.6-33.4-17.13C42,195.38,42,183.49,42,172c0-24.27-1.21-38-26-38a6,6,0,0,1,0-12c24.79,0,26-13.73,26-38,0-11.49,0-23.38,4.6-32.87C52.19,39.6,63.12,34,80,34a6,6,0,0,1,0,12C55.21,46,54,59.73,54,84c0,11.49,0,23.38-4.6,32.87A27.68,27.68,0,0,1,39.91,128ZM240,122c-24.79,0-26-13.73-26-38,0-11.49,0-23.38-4.6-32.87C203.81,39.6,192.88,34,176,34a6,6,0,0,0,0,12c24.79,0,26,13.73,26,38,0,11.49,0,23.38,4.6,32.87A27.68,27.68,0,0,0,216.09,128a27.68,27.68,0,0,0-9.49,11.13C202,148.62,202,160.51,202,172c0,24.27-1.21,38-26,38a6,6,0,0,0,0,12c16.88,0,27.81-5.6,33.4-17.13,4.6-9.49,4.6-21.38,4.6-32.87,0-24.27,1.21-38,26-38a6,6,0,0,0,0-12Z`}))],[`regular`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M43.18,128a29.78,29.78,0,0,1,8,10.26c4.8,9.9,4.8,22,4.8,33.74,0,24.31,1,36,24,36a8,8,0,0,1,0,16c-17.48,0-29.32-6.14-35.2-18.26-4.8-9.9-4.8-22-4.8-33.74,0-24.31-1-36-24-36a8,8,0,0,1,0-16c23,0,24-11.69,24-36,0-11.72,0-23.84,4.8-33.74C50.68,38.14,62.52,32,80,32a8,8,0,0,1,0,16C57,48,56,59.69,56,84c0,11.72,0,23.84-4.8,33.74A29.78,29.78,0,0,1,43.18,128ZM240,120c-23,0-24-11.69-24-36,0-11.72,0-23.84-4.8-33.74C205.32,38.14,193.48,32,176,32a8,8,0,0,0,0,16c23,0,24,11.69,24,36,0,11.72,0,23.84,4.8,33.74a29.78,29.78,0,0,0,8,10.26,29.78,29.78,0,0,0-8,10.26c-4.8,9.9-4.8,22-4.8,33.74,0,24.31-1,36-24,36a8,8,0,0,0,0,16c17.48,0,29.32-6.14,35.2-18.26,4.8-9.9,4.8-22,4.8-33.74,0-24.31,1-36,24-36a8,8,0,0,0,0-16Z`}))],[`thin`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M35.89,128C52,136.23,52,155.64,52,172c0,24.8,1.35,40,28,40a4,4,0,0,1,0,8c-36,0-36-26.61-36-48,0-24.8-1.35-40-28-40a4,4,0,0,1,0-8c26.65,0,28-15.2,28-40,0-21.39,0-48,36-48a4,4,0,0,1,0,8C53.35,44,52,59.2,52,84,52,100.36,52,119.77,35.89,128ZM240,124c-26.65,0-28-15.2-28-40,0-21.39,0-48-36-48a4,4,0,0,0,0,8c26.65,0,28,15.2,28,40,0,16.36,0,35.77,16.11,44C204,136.23,204,155.64,204,172c0,24.8-1.35,40-28,40a4,4,0,0,0,0,8c36,0,36-26.61,36-48,0-24.8,1.35-40,28-40a4,4,0,0,0,0-8Z`}))]]),oe=new Map([[`bold`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M184.49,136.49l-80,80a12,12,0,0,1-17-17L159,128,87.51,56.49a12,12,0,1,1,17-17l80,80A12,12,0,0,1,184.49,136.49Z`}))],[`duotone`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M176,128,96,208V48Z`,opacity:`0.2`}),A.createElement(`path`,{d:`M181.66,122.34l-80-80A8,8,0,0,0,88,48V208a8,8,0,0,0,13.66,5.66l80-80A8,8,0,0,0,181.66,122.34ZM104,188.69V67.31L164.69,128Z`}))],[`fill`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M181.66,133.66l-80,80A8,8,0,0,1,88,208V48a8,8,0,0,1,13.66-5.66l80,80A8,8,0,0,1,181.66,133.66Z`}))],[`light`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M180.24,132.24l-80,80a6,6,0,0,1-8.48-8.48L167.51,128,91.76,52.24a6,6,0,0,1,8.48-8.48l80,80A6,6,0,0,1,180.24,132.24Z`}))],[`regular`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z`}))],[`thin`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M178.83,130.83l-80,80a4,4,0,0,1-5.66-5.66L170.34,128,93.17,50.83a4,4,0,0,1,5.66-5.66l80,80A4,4,0,0,1,178.83,130.83Z`}))]]),se=new Map([[`bold`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,20A108,108,0,1,0,236,128,108.12,108.12,0,0,0,128,20Zm0,192a84,84,0,1,1,84-84A84.09,84.09,0,0,1,128,212Zm68-84a12,12,0,0,1-12,12H128a12,12,0,0,1-12-12V72a12,12,0,0,1,24,0v44h44A12,12,0,0,1,196,128Z`}))],[`duotone`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z`,opacity:`0.2`}),A.createElement(`path`,{d:`M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm64-88a8,8,0,0,1-8,8H128a8,8,0,0,1-8-8V72a8,8,0,0,1,16,0v48h48A8,8,0,0,1,192,128Z`}))],[`fill`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm56,112H128a8,8,0,0,1-8-8V72a8,8,0,0,1,16,0v48h48a8,8,0,0,1,0,16Z`}))],[`light`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,26A102,102,0,1,0,230,128,102.12,102.12,0,0,0,128,26Zm0,192a90,90,0,1,1,90-90A90.1,90.1,0,0,1,128,218Zm62-90a6,6,0,0,1-6,6H128a6,6,0,0,1-6-6V72a6,6,0,0,1,12,0v50h50A6,6,0,0,1,190,128Z`}))],[`regular`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm64-88a8,8,0,0,1-8,8H128a8,8,0,0,1-8-8V72a8,8,0,0,1,16,0v48h48A8,8,0,0,1,192,128Z`}))],[`thin`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,28A100,100,0,1,0,228,128,100.11,100.11,0,0,0,128,28Zm0,192a92,92,0,1,1,92-92A92.1,92.1,0,0,1,128,220Zm60-92a4,4,0,0,1-4,4H128a4,4,0,0,1-4-4V72a4,4,0,0,1,8,0v52h52A4,4,0,0,1,188,128Z`}))]]),ce=new Map([[`bold`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,96a32,32,0,1,0,32,32A32,32,0,0,0,128,96Zm0,40a8,8,0,1,1,8-8A8,8,0,0,1,128,136Z`}))],[`duotone`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M152,128a24,24,0,1,1-24-24A24,24,0,0,1,152,128Z`,opacity:`0.2`}),A.createElement(`path`,{d:`M128,96a32,32,0,1,0,32,32A32,32,0,0,0,128,96Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,128,144Z`}))],[`fill`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M156,128a28,28,0,1,1-28-28A28,28,0,0,1,156,128Z`}))],[`light`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,98a30,30,0,1,0,30,30A30,30,0,0,0,128,98Zm0,48a18,18,0,1,1,18-18A18,18,0,0,1,128,146Z`}))],[`regular`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,96a32,32,0,1,0,32,32A32,32,0,0,0,128,96Zm0,48a16,16,0,1,1,16-16A16,16,0,0,1,128,144Z`}))],[`thin`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,100a28,28,0,1,0,28,28A28,28,0,0,0,128,100Zm0,48a20,20,0,1,1,20-20A20,20,0,0,1,128,148Z`}))]]),le=new Map([[`bold`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M199,125.31l-49.88-18.39L130.69,57a19.92,19.92,0,0,0-37.38,0L74.92,106.92,25,125.31a19.92,19.92,0,0,0,0,37.38l49.88,18.39L93.31,231a19.92,19.92,0,0,0,37.38,0l18.39-49.88L199,162.69a19.92,19.92,0,0,0,0-37.38Zm-63.38,35.16a12,12,0,0,0-7.11,7.11L112,212.28l-16.47-44.7a12,12,0,0,0-7.11-7.11L43.72,144l44.7-16.47a12,12,0,0,0,7.11-7.11L112,75.72l16.47,44.7a12,12,0,0,0,7.11,7.11L180.28,144ZM140,40a12,12,0,0,1,12-12h12V16a12,12,0,0,1,24,0V28h12a12,12,0,0,1,0,24H188V64a12,12,0,0,1-24,0V52H152A12,12,0,0,1,140,40ZM252,88a12,12,0,0,1-12,12h-4v4a12,12,0,0,1-24,0v-4h-4a12,12,0,0,1,0-24h4V72a12,12,0,0,1,24,0v4h4A12,12,0,0,1,252,88Z`}))],[`duotone`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M194.82,151.43l-55.09,20.3-20.3,55.09a7.92,7.92,0,0,1-14.86,0l-20.3-55.09-55.09-20.3a7.92,7.92,0,0,1,0-14.86l55.09-20.3,20.3-55.09a7.92,7.92,0,0,1,14.86,0l20.3,55.09,55.09,20.3A7.92,7.92,0,0,1,194.82,151.43Z`,opacity:`0.2`}),A.createElement(`path`,{d:`M197.58,129.06,146,110l-19-51.62a15.92,15.92,0,0,0-29.88,0L78,110l-51.62,19a15.92,15.92,0,0,0,0,29.88L78,178l19,51.62a15.92,15.92,0,0,0,29.88,0L146,178l51.62-19a15.92,15.92,0,0,0,0-29.88ZM137,164.22a8,8,0,0,0-4.74,4.74L112,223.85,91.78,169A8,8,0,0,0,87,164.22L32.15,144,87,123.78A8,8,0,0,0,91.78,119L112,64.15,132.22,119a8,8,0,0,0,4.74,4.74L191.85,144ZM144,40a8,8,0,0,1,8-8h16V16a8,8,0,0,1,16,0V32h16a8,8,0,0,1,0,16H184V64a8,8,0,0,1-16,0V48H152A8,8,0,0,1,144,40ZM248,88a8,8,0,0,1-8,8h-8v8a8,8,0,0,1-16,0V96h-8a8,8,0,0,1,0-16h8V72a8,8,0,0,1,16,0v8h8A8,8,0,0,1,248,88Z`}))],[`fill`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M208,144a15.78,15.78,0,0,1-10.42,14.94L146,178l-19,51.62a15.92,15.92,0,0,1-29.88,0L78,178l-51.62-19a15.92,15.92,0,0,1,0-29.88L78,110l19-51.62a15.92,15.92,0,0,1,29.88,0L146,110l51.62,19A15.78,15.78,0,0,1,208,144ZM152,48h16V64a8,8,0,0,0,16,0V48h16a8,8,0,0,0,0-16H184V16a8,8,0,0,0-16,0V32H152a8,8,0,0,0,0,16Zm88,32h-8V72a8,8,0,0,0-16,0v8h-8a8,8,0,0,0,0,16h8v8a8,8,0,0,0,16,0V96h8a8,8,0,0,0,0-16Z`}))],[`light`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M196.89,130.94,144.4,111.6,125.06,59.11a13.92,13.92,0,0,0-26.12,0L79.6,111.6,27.11,130.94a13.92,13.92,0,0,0,0,26.12L79.6,176.4l19.34,52.49a13.92,13.92,0,0,0,26.12,0L144.4,176.4l52.49-19.34a13.92,13.92,0,0,0,0-26.12Zm-4.15,14.86-55.08,20.3a6,6,0,0,0-3.56,3.56l-20.3,55.08a1.92,1.92,0,0,1-3.6,0L89.9,169.66a6,6,0,0,0-3.56-3.56L31.26,145.8a1.92,1.92,0,0,1,0-3.6l55.08-20.3a6,6,0,0,0,3.56-3.56l20.3-55.08a1.92,1.92,0,0,1,3.6,0l20.3,55.08a6,6,0,0,0,3.56,3.56l55.08,20.3a1.92,1.92,0,0,1,0,3.6ZM146,40a6,6,0,0,1,6-6h18V16a6,6,0,0,1,12,0V34h18a6,6,0,0,1,0,12H182V64a6,6,0,0,1-12,0V46H152A6,6,0,0,1,146,40ZM246,88a6,6,0,0,1-6,6H230v10a6,6,0,0,1-12,0V94H208a6,6,0,0,1,0-12h10V72a6,6,0,0,1,12,0V82h10A6,6,0,0,1,246,88Z`}))],[`regular`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M197.58,129.06,146,110l-19-51.62a15.92,15.92,0,0,0-29.88,0L78,110l-51.62,19a15.92,15.92,0,0,0,0,29.88L78,178l19,51.62a15.92,15.92,0,0,0,29.88,0L146,178l51.62-19a15.92,15.92,0,0,0,0-29.88ZM137,164.22a8,8,0,0,0-4.74,4.74L112,223.85,91.78,169A8,8,0,0,0,87,164.22L32.15,144,87,123.78A8,8,0,0,0,91.78,119L112,64.15,132.22,119a8,8,0,0,0,4.74,4.74L191.85,144ZM144,40a8,8,0,0,1,8-8h16V16a8,8,0,0,1,16,0V32h16a8,8,0,0,1,0,16H184V64a8,8,0,0,1-16,0V48H152A8,8,0,0,1,144,40ZM248,88a8,8,0,0,1-8,8h-8v8a8,8,0,0,1-16,0V96h-8a8,8,0,0,1,0-16h8V72a8,8,0,0,1,16,0v8h8A8,8,0,0,1,248,88Z`}))],[`thin`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M196.2,132.81l-53.36-19.65L123.19,59.8a11.93,11.93,0,0,0-22.38,0L81.16,113.16,27.8,132.81a11.93,11.93,0,0,0,0,22.38l53.36,19.65,19.65,53.36a11.93,11.93,0,0,0,22.38,0l19.65-53.36,53.36-19.65a11.93,11.93,0,0,0,0-22.38Zm-2.77,14.87L138.35,168a4,4,0,0,0-2.37,2.37l-20.3,55.08a3.92,3.92,0,0,1-7.36,0L88,170.35A4,4,0,0,0,85.65,168l-55.08-20.3a3.92,3.92,0,0,1,0-7.36L85.65,120A4,4,0,0,0,88,117.65l20.3-55.08a3.92,3.92,0,0,1,7.36,0L136,117.65a4,4,0,0,0,2.37,2.37l55.08,20.3a3.92,3.92,0,0,1,0,7.36ZM148,40a4,4,0,0,1,4-4h20V16a4,4,0,0,1,8,0V36h20a4,4,0,0,1,0,8H180V64a4,4,0,0,1-8,0V44H152A4,4,0,0,1,148,40Zm96,48a4,4,0,0,1-4,4H228v12a4,4,0,0,1-8,0V92H208a4,4,0,0,1,0-8h12V72a4,4,0,0,1,8,0V84h12A4,4,0,0,1,244,88Z`}))]]),ue=new Map([[`bold`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,44a96,96,0,1,0,96,96A96.11,96.11,0,0,0,128,44Zm0,168a72,72,0,1,1,72-72A72.08,72.08,0,0,1,128,212ZM164.49,99.51a12,12,0,0,1,0,17l-28,28a12,12,0,0,1-17-17l28-28A12,12,0,0,1,164.49,99.51ZM92,16A12,12,0,0,1,104,4h48a12,12,0,0,1,0,24H104A12,12,0,0,1,92,16Z`}))],[`duotone`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M216,136a88,88,0,1,1-88-88A88,88,0,0,1,216,136Z`,opacity:`0.2`}),A.createElement(`path`,{d:`M128,40a96,96,0,1,0,96,96A96.11,96.11,0,0,0,128,40Zm0,176a80,80,0,1,1,80-80A80.09,80.09,0,0,1,128,216ZM173.66,90.34a8,8,0,0,1,0,11.32l-40,40a8,8,0,0,1-11.32-11.32l40-40A8,8,0,0,1,173.66,90.34ZM96,16a8,8,0,0,1,8-8h48a8,8,0,0,1,0,16H104A8,8,0,0,1,96,16Z`}))],[`fill`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,40a96,96,0,1,0,96,96A96.11,96.11,0,0,0,128,40Zm45.66,61.66-40,40a8,8,0,0,1-11.32-11.32l40-40a8,8,0,0,1,11.32,11.32ZM96,16a8,8,0,0,1,8-8h48a8,8,0,0,1,0,16H104A8,8,0,0,1,96,16Z`}))],[`light`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,42a94,94,0,1,0,94,94A94.11,94.11,0,0,0,128,42Zm0,176a82,82,0,1,1,82-82A82.1,82.1,0,0,1,128,218ZM172.24,91.76a6,6,0,0,1,0,8.48l-40,40a6,6,0,1,1-8.48-8.48l40-40A6,6,0,0,1,172.24,91.76ZM98,16a6,6,0,0,1,6-6h48a6,6,0,0,1,0,12H104A6,6,0,0,1,98,16Z`}))],[`regular`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,40a96,96,0,1,0,96,96A96.11,96.11,0,0,0,128,40Zm0,176a80,80,0,1,1,80-80A80.09,80.09,0,0,1,128,216ZM173.66,90.34a8,8,0,0,1,0,11.32l-40,40a8,8,0,0,1-11.32-11.32l40-40A8,8,0,0,1,173.66,90.34ZM96,16a8,8,0,0,1,8-8h48a8,8,0,0,1,0,16H104A8,8,0,0,1,96,16Z`}))],[`thin`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M128,44a92,92,0,1,0,92,92A92.1,92.1,0,0,0,128,44Zm0,176a84,84,0,1,1,84-84A84.09,84.09,0,0,1,128,220ZM170.83,93.17a4,4,0,0,1,0,5.66l-40,40a4,4,0,1,1-5.66-5.66l40-40A4,4,0,0,1,170.83,93.17ZM100,16a4,4,0,0,1,4-4h48a4,4,0,0,1,0,8H104A4,4,0,0,1,100,16Z`}))]]),de=new Map([[`bold`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M160,116h48a20,20,0,0,0,20-20V48a20,20,0,0,0-20-20H160a20,20,0,0,0-20,20V60H128a28,28,0,0,0-28,28v28H76v-4A20,20,0,0,0,56,92H24A20,20,0,0,0,4,112v32a20,20,0,0,0,20,20H56a20,20,0,0,0,20-20v-4h24v28a28,28,0,0,0,28,28h12v12a20,20,0,0,0,20,20h48a20,20,0,0,0,20-20V160a20,20,0,0,0-20-20H160a20,20,0,0,0-20,20v12H128a4,4,0,0,1-4-4V88a4,4,0,0,1,4-4h12V96A20,20,0,0,0,160,116ZM52,140H28V116H52Zm112,24h40v40H164Zm0-112h40V92H164Z`}))],[`duotone`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M64,112v32a8,8,0,0,1-8,8H24a8,8,0,0,1-8-8V112a8,8,0,0,1,8-8H56A8,8,0,0,1,64,112ZM208,40H160a8,8,0,0,0-8,8V96a8,8,0,0,0,8,8h48a8,8,0,0,0,8-8V48A8,8,0,0,0,208,40Zm0,112H160a8,8,0,0,0-8,8v48a8,8,0,0,0,8,8h48a8,8,0,0,0,8-8V160A8,8,0,0,0,208,152Z`,opacity:`0.2`}),A.createElement(`path`,{d:`M160,112h48a16,16,0,0,0,16-16V48a16,16,0,0,0-16-16H160a16,16,0,0,0-16,16V64H128a24,24,0,0,0-24,24v32H72v-8A16,16,0,0,0,56,96H24A16,16,0,0,0,8,112v32a16,16,0,0,0,16,16H56a16,16,0,0,0,16-16v-8h32v32a24,24,0,0,0,24,24h16v16a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V160a16,16,0,0,0-16-16H160a16,16,0,0,0-16,16v16H128a8,8,0,0,1-8-8V88a8,8,0,0,1,8-8h16V96A16,16,0,0,0,160,112ZM56,144H24V112H56v32Zm104,16h48v48H160Zm0-112h48V96H160Z`}))],[`fill`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M144,96V80H128a8,8,0,0,0-8,8v80a8,8,0,0,0,8,8h16V160a16,16,0,0,1,16-16h48a16,16,0,0,1,16,16v48a16,16,0,0,1-16,16H160a16,16,0,0,1-16-16V192H128a24,24,0,0,1-24-24V136H72v8a16,16,0,0,1-16,16H24A16,16,0,0,1,8,144V112A16,16,0,0,1,24,96H56a16,16,0,0,1,16,16v8h32V88a24,24,0,0,1,24-24h16V48a16,16,0,0,1,16-16h48a16,16,0,0,1,16,16V96a16,16,0,0,1-16,16H160A16,16,0,0,1,144,96Z`}))],[`light`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M160,110h48a14,14,0,0,0,14-14V48a14,14,0,0,0-14-14H160a14,14,0,0,0-14,14V66H128a22,22,0,0,0-22,22v34H70V112A14,14,0,0,0,56,98H24a14,14,0,0,0-14,14v32a14,14,0,0,0,14,14H56a14,14,0,0,0,14-14V134h36v34a22,22,0,0,0,22,22h18v18a14,14,0,0,0,14,14h48a14,14,0,0,0,14-14V160a14,14,0,0,0-14-14H160a14,14,0,0,0-14,14v18H128a10,10,0,0,1-10-10V88a10,10,0,0,1,10-10h18V96A14,14,0,0,0,160,110ZM58,144a2,2,0,0,1-2,2H24a2,2,0,0,1-2-2V112a2,2,0,0,1,2-2H56a2,2,0,0,1,2,2Zm100,16a2,2,0,0,1,2-2h48a2,2,0,0,1,2,2v48a2,2,0,0,1-2,2H160a2,2,0,0,1-2-2Zm0-112a2,2,0,0,1,2-2h48a2,2,0,0,1,2,2V96a2,2,0,0,1-2,2H160a2,2,0,0,1-2-2Z`}))],[`regular`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M160,112h48a16,16,0,0,0,16-16V48a16,16,0,0,0-16-16H160a16,16,0,0,0-16,16V64H128a24,24,0,0,0-24,24v32H72v-8A16,16,0,0,0,56,96H24A16,16,0,0,0,8,112v32a16,16,0,0,0,16,16H56a16,16,0,0,0,16-16v-8h32v32a24,24,0,0,0,24,24h16v16a16,16,0,0,0,16,16h48a16,16,0,0,0,16-16V160a16,16,0,0,0-16-16H160a16,16,0,0,0-16,16v16H128a8,8,0,0,1-8-8V88a8,8,0,0,1,8-8h16V96A16,16,0,0,0,160,112ZM56,144H24V112H56v32Zm104,16h48v48H160Zm0-112h48V96H160Z`}))],[`thin`,A.createElement(A.Fragment,null,A.createElement(`path`,{d:`M160,108h48a12,12,0,0,0,12-12V48a12,12,0,0,0-12-12H160a12,12,0,0,0-12,12V68H128a20,20,0,0,0-20,20v36H68V112a12,12,0,0,0-12-12H24a12,12,0,0,0-12,12v32a12,12,0,0,0,12,12H56a12,12,0,0,0,12-12V132h40v36a20,20,0,0,0,20,20h20v20a12,12,0,0,0,12,12h48a12,12,0,0,0,12-12V160a12,12,0,0,0-12-12H160a12,12,0,0,0-12,12v20H128a12,12,0,0,1-12-12V88a12,12,0,0,1,12-12h20V96A12,12,0,0,0,160,108ZM60,144a4,4,0,0,1-4,4H24a4,4,0,0,1-4-4V112a4,4,0,0,1,4-4H56a4,4,0,0,1,4,4Zm96,16a4,4,0,0,1,4-4h48a4,4,0,0,1,4,4v48a4,4,0,0,1-4,4H160a4,4,0,0,1-4-4Zm0-112a4,4,0,0,1,4-4h48a4,4,0,0,1,4,4V96a4,4,0,0,1-4,4H160a4,4,0,0,1-4-4Z`}))]]),fe=A.forwardRef((e,t)=>A.createElement(E,{ref:t,...e,weights:re}));fe.displayName=`ArrowLeftIcon`;var pe=fe,me=A.forwardRef((e,t)=>A.createElement(E,{ref:t,...e,weights:ie}));me.displayName=`ArrowsOutLineVerticalIcon`;var he=me,ge=A.forwardRef((e,t)=>A.createElement(E,{ref:t,...e,weights:ae}));ge.displayName=`BracketsCurlyIcon`;var _e=ge,ve=A.forwardRef((e,t)=>A.createElement(E,{ref:t,...e,weights:oe}));ve.displayName=`CaretRightIcon`;var j=ve,ye=A.forwardRef((e,t)=>A.createElement(E,{ref:t,...e,weights:se}));ye.displayName=`ClockIcon`;var be=ye,xe=A.forwardRef((e,t)=>A.createElement(E,{ref:t,...e,weights:ce}));xe.displayName=`DotOutlineIcon`;var Se=xe,Ce=A.forwardRef((e,t)=>A.createElement(E,{ref:t,...e,weights:le}));Ce.displayName=`SparkleIcon`;var we=Ce,Te=A.forwardRef((e,t)=>A.createElement(E,{ref:t,...e,weights:ue}));Te.displayName=`TimerIcon`;var Ee=Te,De=A.forwardRef((e,t)=>A.createElement(E,{ref:t,...e,weights:de}));De.displayName=`TreeStructureIcon`;var Oe=De,M=n();function ke(e){try{return JSON.stringify(e,null,2)??`undefined`}catch{return String(e)}}function Ae(e){return(0,M.jsx)(`div`,{className:`overflow-x-auto rounded-lg border bg-muted p-4 font-mono text-xs leading-5 text-foreground`,children:(0,M.jsx)(Ne,{depth:0,path:`$`,value:e.value})})}var je=16,Me=20;function Ne(e){return Re(e.value)?(0,M.jsx)(Pe,{arrayIndex:e.arrayIndex,depth:e.depth,path:e.path,propertyKey:e.propertyKey,trailingComma:e.trailingComma,value:e.value}):(0,M.jsxs)(`div`,{className:`min-w-max whitespace-pre`,style:{paddingLeft:`${Fe(e.depth)}px`},children:[(0,M.jsx)(Ie,{arrayIndex:e.arrayIndex,propertyKey:e.propertyKey}),(0,M.jsx)(Le,{value:e.value}),e.trailingComma?(0,M.jsx)(`span`,{className:`text-foreground`,children:`,`}):null]})}function Pe(e){let[t,n]=(0,A.useState)(e.depth===0),r=Array.isArray(e.value)?e.value:void 0,i=r===void 0?Object.entries(e.value):r.map((e,t)=>[String(t),e]),a=r===void 0?`{`:`[`,o=r===void 0?`}`:`]`,s=r===void 0?`{…}`:`[…]`;return i.length===0?(0,M.jsxs)(`div`,{className:`min-w-max whitespace-pre`,style:{paddingLeft:`${Fe(e.depth)}px`},children:[(0,M.jsx)(Ie,{arrayIndex:e.arrayIndex,propertyKey:e.propertyKey}),(0,M.jsxs)(`span`,{className:`text-foreground`,children:[a,o,e.trailingComma?`,`:``]})]}):(0,M.jsxs)(`div`,{className:`grid min-w-max`,children:[(0,M.jsxs)(`button`,{"aria-expanded":t,className:`grid min-w-max grid-cols-[16px_auto] items-center gap-1 rounded-lg py-0.5 pr-2 text-left transition duration-200 hover:bg-transparent hover:text-foreground`,onClick:()=>n(e=>!e),style:{paddingLeft:`${e.depth*je}px`},type:`button`,children:[(0,M.jsx)(`span`,{className:`grid h-4 w-4 place-items-center text-muted-foreground [&_svg]:h-3 [&_svg]:w-3`,children:t?(0,M.jsx)(D,{icon:S,"aria-hidden":`true`}):(0,M.jsx)(D,{icon:j,"aria-hidden":`true`})}),(0,M.jsxs)(`span`,{className:`whitespace-pre`,children:[(0,M.jsx)(Ie,{arrayIndex:e.arrayIndex,propertyKey:e.propertyKey}),t?(0,M.jsx)(`span`,{className:`text-foreground`,children:a}):(0,M.jsx)(`span`,{className:`text-muted-foreground`,children:s}),!t&&e.trailingComma?(0,M.jsx)(`span`,{className:`text-foreground`,children:`,`}):null]})]}),t?(0,M.jsxs)(M.Fragment,{children:[i.map(([t,n],a)=>(0,M.jsx)(Ne,{arrayIndex:r===void 0?void 0:Number(t),depth:e.depth+1,path:`${e.path}.${t}`,propertyKey:r===void 0?t:void 0,trailingComma:a<i.length-1,value:n},`${e.path}.${t}`)),(0,M.jsxs)(`div`,{className:`min-w-max whitespace-pre text-foreground`,style:{paddingLeft:`${Fe(e.depth)}px`},children:[o,e.trailingComma?`,`:``]})]}):null]})}function Fe(e){return e*je+Me}function Ie(e){return e.propertyKey===void 0?e.arrayIndex===void 0?null:(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`span`,{className:`text-muted-foreground`,children:[`[`,e.arrayIndex,`]`]}),(0,M.jsx)(`span`,{className:`text-foreground`,children:` `})]}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{className:`code-keyword`,children:JSON.stringify(e.propertyKey)}),(0,M.jsx)(`span`,{className:`text-foreground`,children:`: `})]})}function Le(e){return typeof e.value==`string`?(0,M.jsx)(`span`,{className:`code-string`,children:JSON.stringify(e.value)}):typeof e.value==`number`?(0,M.jsx)(`span`,{className:`code-number`,children:String(e.value)}):typeof e.value==`boolean`?(0,M.jsx)(`span`,{className:`code-literal`,children:String(e.value)}):e.value===null?(0,M.jsx)(`span`,{className:`code-comment`,children:`null`}):e.value===void 0?(0,M.jsx)(`span`,{className:`text-muted-foreground`,children:`undefined`}):(0,M.jsx)(`span`,{className:`text-foreground`,children:ke(e.value)})}function Re(e){return Array.isArray(e)||v(e)}function ze(e){let t=/("(?:\\u[\da-fA-F]{4}|\\[^u]|[^\\"])*"(?=\s*:)|"(?:\\u[\da-fA-F]{4}|\\[^u]|[^\\"])*"|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|\btrue\b|\bfalse\b|\bnull\b)/g,n=[],r=0;for(let i of e.matchAll(t)){let t=i[0],a=i.index??0;a>r&&n.push({text:e.slice(r,a),type:`plain`,start:r}),n.push({text:t,type:Be(t,e.slice(a+t.length)),start:a}),r=a+t.length}return r<e.length&&n.push({text:e.slice(r),type:`plain`,start:r}),n}function Be(e,t){return e.startsWith(`"`)?t.trimStart().startsWith(`:`)?`key`:`string`:e===`true`||e===`false`?`boolean`:e===`null`?`null`:`number`}function Ve(e){let t=new Map;for(let n of e.observations){let e=Number.isFinite(n.turn)?n.turn:t.size+1;t.set(e,[...t.get(e)??[],n])}return[...t.entries()].sort(([e],[t])=>e-t).map(([e,t])=>({turn:e,observations:t,durationMs:t.reduce((e,t)=>e+(t.durationMs??0),0)}))}function He(e){let t=new Map;for(let n of e)t.set(n.id,{observation:n,children:[]});let n=[];for(let r of e){let e=t.get(r.id);if(e===void 0)continue;let i=r.parentObservationId,a=i===void 0?void 0:t.get(i);a===void 0?n.push(e):a.children.push(e)}return n}function Ue(e,t,n){if(n===`agent`)return{title:`agent.run`,tone:`agent`,status:e.status,startedAt:m(e.startedAt),durationMs:e.durationMs,firstDeltaMs:P(e.observations),usage:p(e.usage),input:e.input,output:e.output,error:e.error,metadata:We(e)};if(n.startsWith(`turn:`)){let r=Number(n.slice(5)),i=t.find(e=>e.turn===r);return{title:`turn.${Number.isFinite(r)?r:1}`,tone:`turn`,status:Qe(i?.observations??[]),startedAt:m(i?.observations[0]?.startedAt??e.startedAt),durationMs:i?.durationMs,firstDeltaMs:P(i?.observations??[]),usage:it(i?.observations??[]),input:i?.observations[0]?.input,output:i?.observations.at(-1)?.output,metadata:Ge(r,i?.observations??[])}}if(n.startsWith(`observation:`)){let t=n.slice(12),r=e.observations.find(e=>e.id===t);if(r!==void 0)return{title:et(r),tone:r.kind,status:r.status,startedAt:m(r.startedAt),durationMs:r.durationMs,firstDeltaMs:tt(r.metadata),usage:rt(r),input:r.input,output:r.output,error:r.error,metadata:Ke(r)}}return{title:e.name??`Agent`,tone:`trace`,status:e.status,startedAt:m(e.startedAt),durationMs:e.durationMs,firstDeltaMs:P(e.observations),usage:p(e.usage),input:e.input,output:e.output,error:e.error,metadata:We(e)}}function We(e){let t=v(e.metadata)?e.metadata:{},n=N({status:e.status,traceId:e.trace?.traceId??e.id,observationId:e.trace?.observationId,sessionId:e.sessionId,observationCount:e.observationCount,messageCount:$e(t.messages),startedAt:e.startedAt,endedAt:e.endedAt,durationMs:e.durationMs});return N({...t,status:e.status,traceId:e.trace?.traceId??e.id,observationId:e.trace?.observationId,sessionId:e.sessionId,observationCount:e.observationCount,messageCount:$e(t.messages),startedAt:e.startedAt,endedAt:e.endedAt,durationMs:e.durationMs,trace:v(t.trace)?t.trace:n})}function Ge(e,t){return N({turn:e,observationCount:t.length,generationCount:t.filter(e=>e.kind===`generation`).length,toolCount:t.filter(e=>e.kind===`tool`).length,agentCount:t.filter(e=>e.kind===`agent`).length,firstDeltaMs:P(t),status:Qe(t),startedAt:t[0]?.startedAt,endedAt:t.at(-1)?.endedAt})}function Ke(e){let t=N({...v(e.metadata)?e.metadata:{},status:e.status,kind:e.kind,turn:e.turn,parentObservationId:e.parentObservationId??null,startedAt:e.startedAt,endedAt:e.endedAt??null,durationMs:e.durationMs});return N({...t,trace:v(t.trace)?t.trace:N({status:e.status,kind:e.kind,turn:e.turn,parentObservationId:e.parentObservationId??null,startedAt:e.startedAt,endedAt:e.endedAt??null,durationMs:e.durationMs}),modelInfo:v(t.modelInfo)?t.modelInfo:qe(t),modelCall:v(t.modelCall)?t.modelCall:Je(t),response:v(t.response)?t.response:Ye(t),tools:v(t.tools)?t.tools:Xe(t),timing:v(t.timing)?t.timing:Ze(t)})}function qe(e){let t=N({provider:e.provider,modelId:e.modelId});return Object.keys(t).length===0?void 0:t}function Je(e){let t=N({messageCount:e.historyCount,documentCount:e.documentCount,toolCount:e.toolCount,toolNames:e.toolNames,temperature:e.temperature,maxTokens:e.maxTokens,toolChoice:e.toolChoice,hasOutputSchema:e.hasOutputSchema,providerOptionKeys:e.providerOptionKeys}),n=N({request:Object.keys(t).length===0?void 0:t,providerRequest:e.providerRequest});return Object.keys(n).length===0?void 0:n}function Ye(e){let t=N({messageId:e.messageId,usage:e.usage,providerResponse:e.providerResponse});return Object.keys(t).length===0?void 0:t}function Xe(e){let t=N({count:e.toolCount,names:e.toolNames,toolChoice:e.toolChoice,internalCallId:e.internalCallId,toolCallId:e.toolCallId,skipped:e.skipped,description:e.toolDescription,parameterKeys:e.parameterKeys,requiredParameterKeys:e.requiredParameterKeys,approvalRequired:e.approvalRequired,mcpServerName:e.mcpServerName,argumentBytes:e.argumentBytes,resultBytes:e.resultBytes});return Object.keys(t).length===0?void 0:t}function Ze(e){let t=N({firstDeltaMs:e.firstDeltaMs,durationMs:e.durationMs,startedAt:e.startedAt,endedAt:e.endedAt});return Object.keys(t).length===0?void 0:t}function Qe(e){return e.length===0?`empty`:e.some(e=>e.status===`error`)?`error`:e.some(e=>e.status===`cancelled`)?`cancelled`:e.some(e=>e.status===`running`)?`running`:`success`}function $e(e){return Array.isArray(e)?e.length:void 0}function N(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function et(e){return e.kind===`agent`?e.name:e.kind===`tool`?`tool.${e.name}`:e.name}function P(e){for(let t of e){let e=tt(t.metadata);if(e!==void 0)return e}}function tt(e){if(!(!v(e)||typeof e.firstDeltaMs!=`number`))return e.firstDeltaMs}function nt(e){switch(e.tone){case`trace`:return(0,M.jsx)(D,{icon:Se,"aria-hidden":`true`});case`agent`:return(0,M.jsx)(D,{icon:y,"aria-hidden":`true`});case`turn`:return(0,M.jsx)(D,{icon:y,"aria-hidden":`true`});case`generation`:return(0,M.jsx)(D,{icon:we,"aria-hidden":`true`});case`tool`:return(0,M.jsx)(D,{icon:x,"aria-hidden":`true`});default:return(0,M.jsx)(D,{icon:Se,"aria-hidden":`true`})}}function F(e){switch(e){case`trace`:return`bg-foreground text-background`;case`agent`:return`bg-tone-agent text-tone-text`;case`turn`:return`bg-tone-agent text-tone-text`;case`generation`:return`bg-tone-generation text-tone-text`;case`tool`:return`bg-tone-tool text-tone-text`;default:return`bg-muted text-muted-foreground`}}function rt(e){return!v(e.output)||!v(e.output.usage)?``:at(e.output.usage)}function it(e){return e.map(rt).filter(e=>e.length>0).join(` + `)}function at(e){let t=typeof e.inputTokens==`number`?e.inputTokens:0,n=typeof e.outputTokens==`number`?e.outputTokens:0,r=typeof e.totalTokens==`number`?e.totalTokens:t+n;return r===0?``:`${t} -> ${n} (Σ ${r})`}function ot({className:e,...n}){return(0,M.jsx)(`div`,{className:t(`flex flex-col gap-4 overflow-hidden rounded-none border border-border bg-card py-4 text-base text-card-foreground`,e),...n})}var st=Object.defineProperty,I=(e,t)=>st(e,`name`,{value:t,configurable:!0});function ct(e,t){return A.useReducer((e,n)=>t[e][n]??e,e)}I(ct,`useStateMachine`);var lt=`ScrollArea`,[ut,dt]=o(lt),[ft,L]=ut(lt),pt=A.forwardRef(I(function(e,t){let{__scopeScrollArea:n,type:r=`hover`,dir:a,scrollHideDelay:o=600,...s}=e,[c,l]=A.useState(null),[u,f]=A.useState(null),[p,m]=A.useState(null),[h,g]=A.useState(null),[_,v]=A.useState(null),[y,b]=A.useState(0),[x,S]=A.useState(0),[C,w]=A.useState(!1),[T,E]=A.useState(!1),D=d(t,l),O=ee(a);return(0,M.jsx)(ft,{scope:n,type:r,dir:O,scrollHideDelay:o,scrollArea:c,viewport:u,onViewportChange:f,content:p,onContentChange:m,scrollbarX:h,onScrollbarXChange:g,scrollbarXEnabled:C,onScrollbarXEnabledChange:w,scrollbarY:_,onScrollbarYChange:v,scrollbarYEnabled:T,onScrollbarYEnabledChange:E,onCornerWidthChange:b,onCornerHeightChange:S,children:(0,M.jsx)(i.div,{dir:O,...s,ref:D,style:{position:`relative`,"--radix-scroll-area-corner-width":y+`px`,"--radix-scroll-area-corner-height":x+`px`,...e.style}})})},`ScrollArea`)),mt=`ScrollAreaViewport`,ht=A.forwardRef(I(function(e,t){let{__scopeScrollArea:n,children:r,nonce:a,...o}=e,s=L(mt,n),c=A.useRef(null),l=d(t,c,s.onViewportChange);return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(gt,{nonce:a}),(0,M.jsx)(i.div,{"data-radix-scroll-area-viewport":``,...o,ref:l,style:{overflowX:s.scrollbarXEnabled?`scroll`:`hidden`,overflowY:s.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,M.jsx)(`div`,{ref:s.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})},`ScrollAreaViewport`)),gt=A.memo(I(function({nonce:e}){return(0,M.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`},nonce:e})},`ScrollAreaViewportStyle`),(e,t)=>e.nonce===t.nonce),R=`ScrollAreaScrollbar`,_t=A.forwardRef(I(function(e,t){let{forceMount:n,...r}=e,i=L(R,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return A.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,M.jsx)(vt,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,M.jsx)(yt,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,M.jsx)(bt,{...r,ref:t,forceMount:n}):i.type===`always`?(0,M.jsx)(z,{...r,ref:t,"data-state":`visible`}):null},`ScrollAreaScrollbar`)),vt=A.forwardRef(I(function(e,t){let{forceMount:n,...r}=e,i=L(R,e.__scopeScrollArea),[a,o]=A.useState(!1);return A.useEffect(()=>{let e=i.scrollArea,t=0;if(e){let n=I(()=>{window.clearTimeout(t),o(!0)},`handlePointerEnter`),r=I(()=>{t=window.setTimeout(()=>o(!1),i.scrollHideDelay)},`handlePointerLeave`);return e.addEventListener(`pointerenter`,n),e.addEventListener(`pointerleave`,r),()=>{window.clearTimeout(t),e.removeEventListener(`pointerenter`,n),e.removeEventListener(`pointerleave`,r)}}},[i.scrollArea,i.scrollHideDelay]),(0,M.jsx)(l,{present:n||a,children:(0,M.jsx)(bt,{"data-state":a?`visible`:`hidden`,...r,ref:t})})},`ScrollAreaScrollbarHover`)),yt=A.forwardRef(I(function(e,t){let{forceMount:n,...r}=e,i=L(R,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=U(()=>u(`SCROLL_END`),100),[s,u]=ct(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}});return A.useEffect(()=>{if(s===`idle`){let e=window.setTimeout(()=>u(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[s,i.scrollHideDelay,u]),A.useEffect(()=>{let e=i.viewport,t=a?`scrollLeft`:`scrollTop`;if(e){let n=e[t],r=I(()=>{let r=e[t];n!==r&&(u(`SCROLL`),o()),n=r},`handleScroll`);return e.addEventListener(`scroll`,r),()=>e.removeEventListener(`scroll`,r)}},[i.viewport,a,u,o]),(0,M.jsx)(l,{present:n||s!==`hidden`,children:(0,M.jsx)(z,{"data-state":s===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:c(e.onPointerEnter,()=>u(`POINTER_ENTER`)),onPointerLeave:c(e.onPointerLeave,()=>u(`POINTER_LEAVE`))})})},`ScrollAreaScrollbarScroll`)),bt=A.forwardRef(I(function(e,t){let n=L(R,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=A.useState(!1),s=e.orientation===`horizontal`,c=U(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;o(s?e:t)}},10);return W(n.viewport,c),W(n.content,c),(0,M.jsx)(l,{present:r||a,children:(0,M.jsx)(z,{"data-state":a?`visible`:`hidden`,...i,ref:t})})},`ScrollAreaScrollbarAuto`)),z=A.forwardRef(I(function(e,t){let{orientation:n=`vertical`,...r}=e,i=L(R,e.__scopeScrollArea),a=A.useRef(null),o=A.useRef(0),[s,c]=A.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=Mt(s.viewport,s.content),u={...r,sizes:s,onSizesChange:c,hasThumb:l>0&&l<1,onThumbChange:I(e=>a.current=e,`onThumbChange`),onThumbPointerUp:I(()=>o.current=0,`onThumbPointerUp`),onThumbPointerDown:I(e=>o.current=e,`onThumbPointerDown`)};function d(e,t){return Nt(e,o.current,s,t)}return I(d,`getScrollPosition`),n===`horizontal`?(0,M.jsx)(xt,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=Pt(e,s,i.dir);a.current.style.transform=`translate3d(${t}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=d(e,i.dir))}}):n===`vertical`?(0,M.jsx)(St,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=Pt(e,s);a.current.style.transform=`translate3d(0, ${t}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=d(e))}}):null},`ScrollAreaScrollbarVisible`)),xt=A.forwardRef(I(function(e,t){let{sizes:n,onSizesChange:r,...i}=e,a=L(R,e.__scopeScrollArea),[o,s]=A.useState(),c=A.useRef(null),l=d(t,c,a.onScrollbarXChange);return A.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,M.jsx)(Tt,{"data-orientation":`horizontal`,...i,ref:l,sizes:n,style:{bottom:0,left:a.dir===`rtl`?`var(--radix-scroll-area-corner-width)`:0,right:a.dir===`ltr`?`var(--radix-scroll-area-corner-width)`:0,"--radix-scroll-area-thumb-width":V(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,n)=>{if(a.viewport){let r=a.viewport.scrollLeft+t.deltaX;e.onWheelScroll(r),Ft(r,n)&&t.preventDefault()}},onResize:()=>{c.current&&a.viewport&&o&&r({content:a.viewport.scrollWidth,viewport:a.viewport.offsetWidth,scrollbar:{size:c.current.clientWidth,paddingStart:B(o.paddingLeft),paddingEnd:B(o.paddingRight)}})}})},`ScrollAreaScrollbarX`)),St=A.forwardRef(I(function(e,t){let{sizes:n,onSizesChange:r,...i}=e,a=L(R,e.__scopeScrollArea),[o,s]=A.useState(),c=A.useRef(null),l=d(t,c,a.onScrollbarYChange);return A.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,M.jsx)(Tt,{"data-orientation":`vertical`,...i,ref:l,sizes:n,style:{top:0,right:a.dir===`ltr`?0:void 0,left:a.dir===`rtl`?0:void 0,bottom:`var(--radix-scroll-area-corner-height)`,"--radix-scroll-area-thumb-height":V(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,n)=>{if(a.viewport){let r=a.viewport.scrollTop+t.deltaY;e.onWheelScroll(r),Ft(r,n)&&t.preventDefault()}},onResize:()=>{c.current&&a.viewport&&o&&r({content:a.viewport.scrollHeight,viewport:a.viewport.offsetHeight,scrollbar:{size:c.current.clientHeight,paddingStart:B(o.paddingTop),paddingEnd:B(o.paddingBottom)}})}})},`ScrollAreaScrollbarY`)),[Ct,wt]=ut(R),Tt=A.forwardRef(I(function(e,t){let{__scopeScrollArea:n,sizes:r,hasThumb:a,onThumbChange:o,onThumbPointerUp:l,onThumbPointerDown:u,onThumbPositionChange:f,onDragScroll:p,onWheelScroll:m,onResize:h,...g}=e,_=L(R,n),[v,y]=A.useState(null),b=d(t,y),x=A.useRef(null),S=A.useRef(``),C=_.viewport,w=r.content-r.viewport,T=s(m),E=s(f),D=U(h,10);function O(e){if(x.current){let t=e.clientX-x.current.left,n=e.clientY-x.current.top;p({x:t,y:n})}}return I(O,`handleDragScroll`),A.useEffect(()=>{let e=I(e=>{let t=e.target;v?.contains(t)&&T(e,w)},`handleWheel`);return document.addEventListener(`wheel`,e,{passive:!1}),()=>document.removeEventListener(`wheel`,e,{passive:!1})},[C,v,w,T]),A.useEffect(E,[r,E]),W(v,D),W(_.content,D),(0,M.jsx)(Ct,{scope:n,scrollbar:v,hasThumb:a,onThumbChange:s(o),onThumbPointerUp:s(l),onThumbPositionChange:E,onThumbPointerDown:s(u),children:(0,M.jsx)(i.div,{...g,ref:b,style:{position:`absolute`,...g.style},onPointerDown:c(e.onPointerDown,e=>{e.button===0&&(e.target.setPointerCapture(e.pointerId),x.current=v.getBoundingClientRect(),S.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,_.viewport&&(_.viewport.style.scrollBehavior=`auto`),O(e))}),onPointerMove:c(e.onPointerMove,O),onPointerUp:c(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=S.current,_.viewport&&(_.viewport.style.scrollBehavior=``),x.current=null})})})},`ScrollAreaScrollbarImpl`)),Et=`ScrollAreaThumb`,Dt=A.forwardRef(I(function(e,t){let{forceMount:n,...r}=e,i=wt(Et,e.__scopeScrollArea);return(0,M.jsx)(l,{present:n||i.hasThumb,children:(0,M.jsx)(Ot,{ref:t,...r})})},`ScrollAreaThumb`)),Ot=A.forwardRef(I(function(e,t){let{__scopeScrollArea:n,style:r,...a}=e,o=L(Et,n),s=wt(Et,n),{onThumbPositionChange:l}=s,u=d(t,s.onThumbChange),f=A.useRef(void 0),p=U(()=>{f.current&&=(f.current(),void 0)},100);return A.useEffect(()=>{let e=o.viewport;if(e){let t=I(()=>{if(p(),!f.current){let t=It(e,l);f.current=t,l()}},`handleScroll`);return l(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[o.viewport,p,l]),(0,M.jsx)(i.div,{"data-state":s.hasThumb?`visible`:`hidden`,...a,ref:u,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...r},onPointerDownCapture:c(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;s.onThumbPointerDown({x:n,y:r})}),onPointerUp:c(e.onPointerUp,s.onThumbPointerUp)})},`ScrollAreaThumbImpl`)),kt=`ScrollAreaCorner`,At=A.forwardRef(I(function(e,t){let n=L(kt,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,M.jsx)(jt,{...e,ref:t}):null},`ScrollAreaCorner`)),jt=A.forwardRef(I(function(e,t){let{__scopeScrollArea:n,...r}=e,a=L(kt,n),[o,s]=A.useState(0),[c,l]=A.useState(0),u=!!(o&&c),{onCornerWidthChange:d,onCornerHeightChange:f}=a;return W(a.scrollbarX,()=>{let e=a.scrollbarX?.offsetHeight||0;a.onCornerHeightChange(e),l(e)}),W(a.scrollbarY,()=>{let e=a.scrollbarY?.offsetWidth||0;a.onCornerWidthChange(e),s(e)}),A.useEffect(()=>()=>{d(0),f(0)},[d,f]),u?(0,M.jsx)(i.div,{...r,ref:t,style:{width:o,height:c,position:`absolute`,right:a.dir===`ltr`?0:void 0,left:a.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null},`ScrollAreaCornerImpl`));function B(e){return e?parseInt(e,10):0}I(B,`toInt`);function Mt(e,t){let n=e/t;return isNaN(n)?0:n}I(Mt,`getThumbRatio`);function V(e){let t=Mt(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}I(V,`getThumbSize`);function Nt(e,t,n,r=`ltr`){let i=V(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return H([c,l],d)(e)}I(Nt,`getScrollPositionFromPointer`);function Pt(e,t,n=`ltr`){let r=V(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=n===`ltr`?[0,o]:[o*-1,0],l=O(e,c);return H([0,o],[0,s])(l)}I(Pt,`getThumbOffsetFromScroll`);function H(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}I(H,`linearScale`);function Ft(e,t){return e>0&&e<t}I(Ft,`isScrollingWithinScrollbarBounds`);var It=I((e,t=()=>{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return I((function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)}),`loop`)(),()=>window.cancelAnimationFrame(r)},`addUnlinkedScrollListener`);function U(e,t){let n=s(e),r=A.useRef(0);return A.useEffect(()=>()=>window.clearTimeout(r.current),[]),A.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}I(U,`useDebounceCallback`);function W(e,t){let n=s(t);a(()=>{let t=0;if(e){let r=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(n)});return r.observe(e),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}},[e,n])}I(W,`useResizeObserver`);var Lt=pt,Rt=ht,zt=At;function Bt({className:e,children:n,...r}){return(0,M.jsxs)(Lt,{className:t(`relative overflow-hidden`,e),...r,children:[(0,M.jsx)(Rt,{className:`h-full w-full rounded-[inherit] outline-none transition-[color,box-shadow] focus-visible:ring-3 focus-visible:ring-ring`,children:n}),(0,M.jsx)(Vt,{}),(0,M.jsx)(zt,{})]})}function Vt({className:e,orientation:n=`vertical`,...r}){return(0,M.jsx)(_t,{orientation:n,className:t(`flex touch-none select-none transition-colors`,n===`vertical`&&`h-full w-2.5 border-l border-l-transparent p-px`,n===`horizontal`&&`h-2.5 flex-col border-t border-t-transparent p-px`,e),...r,children:(0,M.jsx)(Dt,{className:`relative flex-1 rounded-full bg-border`})})}var Ht=[`messages`,`inputMessages`,`input_messages`,`outputMessages`,`output_messages`,`chatHistory`,`chat_history`,`history`,`prompt`,`output`,`choice`],Ut=[`tools`,`functions`,`toolSchemas`,`tool_schemas`];function Wt(e,t){let n=[],r=[],i=t===`output`?`assistant`:`user`;if(Array.isArray(e)){let t=[];return e.forEach((e,r)=>{let a=K(e,`message:${r}`,i);a===void 0?t.push(e):n.push(a)}),{messages:n,tools:r,additional:t.length>0?t:void 0,hasMessages:n.length>0}}if(!v(e))return{messages:n,tools:r,additional:e,hasMessages:!1};let a=K(e,`message:direct`);if(a!==void 0){let t=new Set([`role`,`type`,`content`,`text`,`message`,`result`,`output`,`value`,`tool_calls`,`toolCalls`,`toolName`,`input`,`arguments`]),n=Object.entries(e).filter(([e])=>!t.has(e));return{messages:[a],tools:r,additional:n.length>0?Object.fromEntries(n):void 0,hasMessages:!0}}let o=new Set;typeof e.instructions==`string`&&e.instructions.trim().length>0&&(n.push({key:`instructions`,role:`system`,content:e.instructions,toolCalls:[]}),o.add(`instructions`));for(let t of Ht){let r=e[t];if(Array.isArray(r)){let e=r.map((e,n)=>K(e,`${t}:${n}`,i)).filter(e=>e!==void 0);e.length>0&&(n.push(...e),o.add(t));continue}let a=K(r,`${t}:direct`,i);a!==void 0&&(n.push(a),o.add(t))}if(Array.isArray(e.choices)){let t=e.choices.map((e,t)=>{if(v(e))return K(e.message??e.delta??e,`choices:${t}`,`assistant`)}).filter(e=>e!==void 0);t.length>0&&(n.push(...t),o.add(`choices`))}for(let t of Ut){let n=e[t];Array.isArray(n)&&(r.push(...n.map((e,n)=>q(e,`${t}:${n}`))),o.add(t))}let s=Object.entries(e).filter(([e])=>!o.has(e));return{messages:n,tools:r,additional:s.length>0?Object.fromEntries(s):void 0,hasMessages:n.length>0}}function Gt(e){let t=[],n=(e,r)=>{if(Array.isArray(e)){e.length===0&&t.push({path:r,label:r||`Value`,value:e}),e.forEach((e,t)=>n(e,r?`${r}.${t}`:String(t)));return}if(v(e)){let i=Object.entries(e);i.length===0&&t.push({path:r,label:r||`Value`,value:e}),i.forEach(([e,t])=>n(t,r?`${r}.${e}`:e));return}t.push({path:r,label:r?qt(r.split(`.`).at(-1)??r):`Value`,value:e})};return n(e,``),t}function G(e){return e===null?`null`:e===void 0?`undefined`:typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):Kt(e)}function Kt(e){try{return JSON.stringify(e,null,2)??`undefined`}catch{return String(e)}}function qt(e){return e.replace(/[_-]+/g,` `).replace(/([a-z0-9])([A-Z])/g,`$1 $2`).trim().replace(/\b\w/g,e=>e.toUpperCase())}function K(e,t,n){if(!v(e))return;let r=Yt(e)??(Jt(e)?n:void 0);if(r===void 0)return;let i=Xt(e.content??e.text??e.message??e.result??e.output??e.value),a=[...Zt(e.tool_calls,`${t}:tool-call`),...Zt(e.toolCalls,`${t}:tool-calls`),...Qt(e.content,`${t}:content-tool-call`)];return J(e)&&a.push(q(e,`${t}:tool`)),{key:t,role:r,content:i,toolCalls:a}}function Jt(e){return`content`in e||`text`in e||`message`in e||`result`in e||`output`in e||`value`in e||`tool_calls`in e||`toolCalls`in e||J(e)}function Yt(e){if(typeof e.role==`string`)return e.role.toLowerCase();if(e.type===`reasoning`)return`reasoning`;if(J(e))return`tool`}function Xt(e){if(e==null)return``;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`)return String(e);if(Array.isArray(e))return e.map(e=>v(e)?J(e)?``:typeof e.text==`string`?e.text:typeof e.content==`string`?e.content:e.type===`image`||e.type===`image_url`?`[Image]`:e.type===`file`?`[File]`:e.type===`audio`?`[Audio]`:G(e):Xt(e)).filter(Boolean).join(`
2
+ `);if(v(e)){if(typeof e.text==`string`)return e.text;if(typeof e.content==`string`)return e.content}return G(e)}function Zt(e,t){return Array.isArray(e)?e.map((e,n)=>q(e,`${t}:${n}`)):[]}function Qt(e,t){return Array.isArray(e)?e.filter(e=>v(e)&&J(e)).map((e,n)=>q(e,`${t}:${n}`)):[]}function q(e,t){if(!v(e))return{key:t,name:`Tool`,value:e};let n=v(e.function)?e.function:void 0,r=Y(e.toolName)??Y(e.name)??Y(n?.name)??(typeof e.type==`string`?qt(e.type):`Tool`),i=Y(e.description)??Y(n?.description),a={key:t,name:r,value:$t(n?.arguments??e.arguments??e.input??e.result??e.output??e.value??e.content??e)};return i!==void 0&&(a.description=i),a}function $t(e){if(typeof e!=`string`)return e;try{return JSON.parse(e)}catch{return e}}function J(e){return[`tool_call`,`server_tool_call`,`tool_result`,`server_tool_result`,`tool-call`,`server-tool-call`,`tool-result`,`server-tool-result`].includes(String(e.type))}function Y(e){return typeof e==`string`&&e.length>0?e:void 0}var en=1e5;function X(e){let t=(0,A.useMemo)(()=>Kt(e.value),[e.value]),n=t.length>en,r=(0,A.useMemo)(()=>e.field!==`input`&&e.field!==`output`||n?void 0:Wt(e.value,e.field),[e.field,e.value,n]),i=(0,A.useMemo)(()=>n?[{id:`raw`,label:e.field===`metadata`?`JSON`:`Raw`}]:e.field===`metadata`?[{id:`table`,label:`Table`},{id:`raw`,label:`JSON`}]:r?.hasMessages?[{id:`readable`,label:e.field===`output`?`Response`:`Messages`},{id:`structure`,label:`Structure`},{id:`raw`,label:`Raw`}]:[{id:`structure`,label:`Structure`},{id:`raw`,label:`Raw`}],[r?.hasMessages,e.field,n]),[a,o]=(0,A.useState)(()=>i[0]?.id??`raw`),s=i.some(e=>e.id===a)?a:i[0]?.id??`raw`,c=e.value===null||e.value===void 0?(0,M.jsx)(un,{}):n?(0,M.jsx)(ln,{json:t,title:e.title,truncated:!0}):s===`raw`?(0,M.jsx)(ln,{json:t,title:e.title}):s===`table`?(0,M.jsx)(on,{value:e.value}):s===`readable`&&r?.hasMessages?(0,M.jsx)(nn,{additional:r.additional,messages:r.messages,tools:r.tools}):(0,M.jsx)(Ae,{value:e.value});if(e.field===`metadata`){let t=n||e.value===null||e.value===void 0?0:Gt(e.value).length;return(0,M.jsxs)(`details`,{className:`group grid min-w-0 gap-3`,children:[(0,M.jsxs)(`summary`,{className:`flex cursor-pointer list-none items-center gap-2 rounded-sm py-1 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-3 [&::-webkit-details-marker]:hidden`,children:[(0,M.jsx)(D,{icon:j,"aria-hidden":`true`,className:`size-3.5 text-muted-foreground transition-transform group-open:rotate-90`}),(0,M.jsx)(`h3`,{className:`m-0 text-sm font-semibold`,children:e.title}),(0,M.jsx)(`span`,{className:`ml-auto font-mono text-[10px] uppercase tracking-wide text-muted-foreground`,children:n?`Large payload`:`${t} ${t===1?`field`:`fields`}`})]}),(0,M.jsxs)(`div`,{className:`grid gap-3 pl-5`,children:[(0,M.jsx)(tn,{options:i,value:s,onChange:o}),c]})]})}return(0,M.jsxs)(`section`,{className:`grid min-w-0 gap-3`,"aria-label":`${e.title} payload`,children:[(0,M.jsxs)(`header`,{className:`flex min-w-0 items-center gap-3`,children:[(0,M.jsx)(`h3`,{className:`m-0 text-sm font-semibold`,children:e.title}),(0,M.jsx)(`div`,{className:`ml-auto`,children:(0,M.jsx)(tn,{options:i,value:s,onChange:o})})]}),c]})}function tn(e){return e.options.length<2?null:(0,M.jsx)(`fieldset`,{className:`flex h-7 shrink-0 items-center rounded-md border p-0.5`,"aria-label":`Field view`,children:e.options.map(n=>(0,M.jsx)(`button`,{"aria-pressed":e.value===n.id,className:t(`h-5 rounded px-2 font-mono text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,e.value===n.id&&`bg-accent text-foreground`),type:`button`,onClick:()=>e.onChange(n.id),children:n.label},n.id))})}function nn(e){return(0,M.jsxs)(`div`,{className:`grid min-w-0 gap-5`,children:[(0,M.jsx)(`div`,{className:`grid gap-5`,children:e.messages.map(e=>(0,M.jsxs)(`article`,{className:`grid min-w-0 grid-cols-[6.5rem_minmax(0,1fr)] gap-3 max-sm:grid-cols-1`,children:[(0,M.jsx)(`div`,{className:`pt-0.5`,children:(0,M.jsx)(rn,{role:e.role})}),(0,M.jsxs)(`div`,{className:`grid min-w-0 gap-3`,children:[e.content.length>0?(0,M.jsx)(`p`,{className:`m-0 whitespace-pre-wrap break-words text-sm leading-6`,children:e.content}):e.toolCalls.length===0?(0,M.jsx)(`span`,{className:`text-sm italic text-muted-foreground`,children:`No text content`}):null,e.toolCalls.map(e=>(0,M.jsx)(an,{tool:e,label:`Tool call`},e.key))]})]},e.key))}),e.tools.length>0?(0,M.jsxs)(`section`,{children:[(0,M.jsxs)(`p`,{className:`mb-3 font-mono text-[10px] font-semibold uppercase tracking-wide text-muted-foreground`,children:[`Available tools · `,e.tools.length]}),(0,M.jsx)(`div`,{className:`grid gap-2`,children:e.tools.map(e=>(0,M.jsx)(an,{tool:e,label:`Definition`},e.key))})]}):null,e.additional===void 0?null:(0,M.jsxs)(`details`,{className:`group/additional`,children:[(0,M.jsxs)(`summary`,{className:`flex cursor-pointer list-none items-center gap-2 text-xs font-medium text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-3 [&::-webkit-details-marker]:hidden`,children:[(0,M.jsx)(D,{icon:j,"aria-hidden":`true`,className:`size-3 transition-transform group-open/additional:rotate-90`}),`Additional fields`]}),(0,M.jsx)(`div`,{className:`mt-3 border-l pl-4`,children:(0,M.jsx)(sn,{value:e.additional})})]})]})}function rn({role:e}){return(0,M.jsx)(te,{className:t(`border-hair bg-status-neutral-fill text-status-neutral-ink`,e===`tool`&&`border-tone-tool bg-transparent text-tone-tool`,e===`assistant`&&`text-foreground`),children:qt(e)})}function an(e){return(0,M.jsxs)(`details`,{className:`border-l-2 border-tone-tool pl-3`,children:[(0,M.jsxs)(`summary`,{className:`cursor-pointer list-none py-1 text-xs focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-3 [&::-webkit-details-marker]:hidden`,children:[(0,M.jsx)(`span`,{className:`font-mono text-[10px] uppercase tracking-wide text-muted-foreground`,children:e.label}),` `,(0,M.jsx)(`span`,{className:`font-semibold`,children:e.tool.name}),e.tool.description?(0,M.jsx)(`span`,{className:`ml-2 text-muted-foreground`,children:e.tool.description}):null]}),(0,M.jsx)(`div`,{className:`py-2`,children:(0,M.jsx)(sn,{value:e.tool.value})})]})}function on({value:e}){let t=(0,A.useId)(),n=(0,A.useMemo)(()=>Gt(e),[e]),[r,i]=(0,A.useState)(``),a=r.trim().toLowerCase(),o=a?n.filter(e=>e.path.toLowerCase().includes(a)||G(e.value).toLowerCase().includes(a)):n;return(0,M.jsxs)(`div`,{className:`grid gap-2`,children:[(0,M.jsxs)(`label`,{className:`relative block`,htmlFor:t,children:[(0,M.jsx)(D,{icon:T,"aria-hidden":`true`,className:`pointer-events-none absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground`}),(0,M.jsx)(ne,{"aria-label":`Search metadata`,className:`h-8 pl-8 font-mono text-xs`,id:t,placeholder:`Search metadata`,value:r,onChange:e=>i(e.currentTarget.value)})]}),(0,M.jsx)(`div`,{className:`min-w-0 overflow-hidden`,children:o.length>0?(0,M.jsx)(`dl`,{className:`grid gap-1`,children:o.map(e=>(0,M.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[minmax(8rem,0.42fr)_minmax(0,1fr)] gap-4 py-2 text-xs max-sm:grid-cols-1 max-sm:gap-1`,children:[(0,M.jsx)(`dt`,{className:`break-all font-mono text-muted-foreground`,title:e.path,children:e.path||e.label}),(0,M.jsx)(`dd`,{className:`m-0 whitespace-pre-wrap break-words font-mono`,children:G(e.value)})]},e.path))}):(0,M.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:`No matching fields`})})]})}function sn({value:e}){if(Array.isArray(e))return e.length===0?(0,M.jsx)(Z,{value:e}):(0,M.jsx)(`div`,{className:`grid gap-1`,children:e.map((e,t)=>(0,M.jsx)(cn,{depth:0,label:String(t),value:e},`${t}:${Kt(e).slice(0,80)}`))});if(v(e)){let t=Object.entries(e);return t.length===0?(0,M.jsx)(Z,{value:e}):(0,M.jsx)(`div`,{className:`grid gap-1`,children:t.map(([e,t])=>(0,M.jsx)(cn,{depth:0,label:e,value:t},e))})}return(0,M.jsx)(Z,{value:e})}function cn(e){if(!(Array.isArray(e.value)||v(e.value)))return(0,M.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[minmax(7rem,0.34fr)_minmax(0,1fr)] gap-4 py-2 text-xs max-sm:grid-cols-1 max-sm:gap-1`,children:[(0,M.jsx)(`span`,{className:`break-all font-mono text-muted-foreground`,children:e.label}),(0,M.jsx)(Z,{value:e.value})]});let t=Array.isArray(e.value)?e.value.map((e,t)=>[String(t),e]):v(e.value)?Object.entries(e.value):[];return(0,M.jsxs)(`details`,{open:e.depth<1,className:`group/row py-2`,children:[(0,M.jsxs)(`summary`,{className:`flex cursor-pointer list-none items-center gap-2 font-mono text-xs focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-3 [&::-webkit-details-marker]:hidden`,children:[(0,M.jsx)(D,{icon:j,"aria-hidden":`true`,className:`size-3 text-muted-foreground transition-transform group-open/row:rotate-90`}),(0,M.jsx)(`span`,{children:e.label}),(0,M.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:Array.isArray(e.value)?`${t.length} items`:`${t.length} fields`})]}),(0,M.jsx)(`div`,{className:`ml-1.5 mt-2 grid gap-1 border-l pl-4`,children:t.length>0?t.map(([t,n])=>(0,M.jsx)(cn,{depth:e.depth+1,label:t,value:n},`${e.label}:${t}`)):(0,M.jsx)(Z,{value:e.value})})]})}function Z({value:e}){return(0,M.jsx)(`span`,{className:t(`min-w-0 whitespace-pre-wrap break-words font-mono text-xs`,e==null&&`code-comment`,typeof e==`string`&&`code-string`,typeof e==`number`&&`code-number`,typeof e==`boolean`&&`code-literal`),children:G(e)})}function ln(e){let[n,r]=(0,A.useState)(!1),i=e.truncated?e.json.slice(0,en):e.json;return(0,M.jsxs)(`div`,{className:`relative min-w-0 rounded-lg border bg-muted`,children:[e.truncated?(0,M.jsxs)(`p`,{className:`m-0 border-b px-3 py-2 text-xs text-muted-foreground`,children:[`Large payload · showing the first `,en.toLocaleString(),` `,`characters`]}):null,(0,M.jsx)(g,{"aria-label":`Copy ${e.title} JSON`,className:`absolute right-2 top-2 z-10`,size:`icon`,title:n?`Copied`:`Copy JSON`,type:`button`,variant:`secondary`,onClick:()=>{let t=navigator.clipboard?.writeText(e.json);t!==void 0&&t.then(()=>{r(!0),window.setTimeout(()=>r(!1),1500)},()=>void 0)},children:(0,M.jsx)(D,{icon:n?C:w,"aria-hidden":`true`})}),(0,M.jsxs)(`pre`,{className:`m-0 max-h-[32rem] overflow-auto p-4 pr-12 font-mono text-xs leading-5 text-foreground`,children:[ze(i).map(e=>(0,M.jsx)(`span`,{className:t(e.type===`key`&&`code-keyword`,e.type===`string`&&`code-string`,e.type===`number`&&`code-number`,e.type===`boolean`&&`code-literal`,e.type===`null`&&`code-comment`),children:e.text},e.start)),e.truncated?`
3
+ … display truncated`:null]})]})}function un(){return(0,M.jsx)(`div`,{className:`border-y border-dashed px-4 py-6 text-center text-sm text-muted-foreground`,children:`No data captured`})}function dn(e){if(!e.tracesEnabled)return(0,M.jsx)(k,{className:`h-full`,title:`Tracing unavailable`,text:`This Studio runtime does not expose traces.`});let t=e.selectedTraceId.length===0?void 0:e.traces.find(t=>t.id===e.selectedTraceId),n=t===void 0||e.traceSessionDetailId!==t.sessionId?[]:e.traces.filter(e=>e.sessionId===t.sessionId);return(0,M.jsx)(`section`,{className:`grid h-full min-h-0 w-full content-stretch`,"aria-label":`Tracing`,children:e.selectedTraceId.length===0?(0,M.jsx)(fn,{agents:e.agents,traces:e.traces,traceLoadState:e.traceLoadState,onSelectTrace:e.onSelectTrace}):(0,M.jsx)(pn,{selectedTrace:t,selectedSessionTraces:n,selectedTraceId:e.selectedTraceId,traceLoadState:e.traceLoadState,onBack:()=>e.onSelectTrace(``),onShowSessionTraces:e.onShowSessionTraces})})}function fn(e){return e.traces.length===0?(0,M.jsx)(k,{title:e.traceLoadState===`loading`?`Loading traces`:`No traces found`,text:e.traceLoadState===`loading`?`Reading runtime trace records.`:`Run an agent to populate the tracing timeline.`}):(0,M.jsx)(ot,{className:`min-h-0 overflow-hidden rounded-none border-0 bg-background p-0`,"aria-label":`Traces`,children:(0,M.jsx)(Bt,{className:`h-full min-h-0`,children:(0,M.jsxs)(`div`,{className:`grid min-w-280`,children:[(0,M.jsxs)(`div`,{className:`sticky top-0 z-10 grid min-h-11 grid-cols-[minmax(220px,1.3fr)_150px_120px_120px_120px_120px_110px_90px] items-center gap-4 border-b bg-header px-4 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground backdrop-blur`,children:[(0,M.jsx)(`span`,{children:`Trace`}),(0,M.jsx)(`span`,{children:`Session`}),(0,M.jsx)(`span`,{children:`Agent`}),(0,M.jsx)(`span`,{children:`Status`}),(0,M.jsx)(`span`,{children:`Started`}),(0,M.jsx)(`span`,{children:`Duration`}),(0,M.jsx)(`span`,{children:`First delta`}),(0,M.jsx)(`span`,{children:`Events`})]}),e.traces.map(t=>(0,M.jsxs)(g,{className:`grid h-auto min-h-14 w-full grid-cols-[minmax(220px,1.3fr)_150px_120px_120px_120px_120px_110px_90px] items-center justify-start gap-4 whitespace-normal rounded-none border-0 border-b bg-transparent px-4 py-2.5 text-left text-muted-foreground shadow-none transition duration-200 hover:bg-transparent hover:text-foreground`,type:`button`,variant:`ghost`,onClick:()=>e.onSelectTrace(t.id),children:[(0,M.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium text-muted-foreground`,children:t.id}),(0,M.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium`,children:t.sessionId}),(0,M.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium`,children:_(e.agents,t)}),(0,M.jsx)(hn,{status:t.status}),(0,M.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium`,children:u(t.startedAt)}),(0,M.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium`,children:h(f(t.durationMs))}),(0,M.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium`,children:h(f(P(t.observations)))}),(0,M.jsx)(`span`,{className:`min-w-0 truncate text-xs font-medium tabular-nums`,children:t.observationCount})]},t.id))]})})})}function pn(e){let n=e.selectedTrace?.observations[0]?.kind??`trace`;return(0,M.jsxs)(`div`,{className:`grid h-full min-h-0 min-w-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background`,children:[(0,M.jsxs)(`header`,{className:`shrink-0 border-b bg-background px-4 py-3`,children:[(0,M.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[(0,M.jsx)(g,{"aria-label":`Back to traces`,className:`mt-0.5 text-muted-foreground hover:text-foreground`,size:`icon`,type:`button`,variant:`ghost`,onClick:e.onBack,children:(0,M.jsx)(D,{icon:pe,"aria-hidden":`true`})}),(0,M.jsx)(`span`,{className:t(`grid size-9 shrink-0 place-items-center rounded-lg [&_svg]:size-4`,F(n)),children:(0,M.jsx)(nt,{tone:n})}),(0,M.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,M.jsx)(`h1`,{className:`truncate text-lg font-semibold tracking-tight`,children:mn(e.selectedTrace)}),e.selectedTrace?(0,M.jsx)(hn,{status:e.selectedTrace.status}):null]}),(0,M.jsx)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted-foreground`,children:e.selectedTrace===void 0?e.traceLoadState===`loading`?`Loading trace`:`Trace not found`:(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{children:u(e.selectedTrace.startedAt)}),(0,M.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,M.jsx)(`span`,{className:`font-mono`,title:e.selectedTraceId,children:e.selectedTraceId})]})})]})]}),e.selectedTrace?(0,M.jsxs)(`dl`,{className:`mt-3 grid grid-cols-2 gap-x-6 gap-y-3 border-t pt-3 sm:grid-cols-4`,children:[(0,M.jsx)(Q,{label:`Duration`,value:f(e.selectedTrace.durationMs)}),(0,M.jsx)(Q,{label:`Spans`,value:String(e.selectedTrace.observationCount)}),(0,M.jsx)(Q,{label:`Tokens`,value:h(p(e.selectedTrace.usage))}),(0,M.jsx)(Q,{label:`Session`,value:e.selectedTrace.sessionId,mono:!0})]}):null]}),(0,M.jsx)(`div`,{className:`min-h-0 min-w-0 overflow-hidden`,children:e.selectedTrace===void 0?(0,M.jsx)(k,{className:`h-full rounded-none`,title:e.traceLoadState===`loading`?`Loading trace`:`Trace not found`,text:e.traceLoadState===`loading`?`Reading the selected trace.`:`The selected trace is not available in this Studio runtime.`}):(0,M.jsx)(gn,{traces:e.selectedSessionTraces.length>0?e.selectedSessionTraces:[e.selectedTrace],onShowSessionTraces:e.onShowSessionTraces})})]})}function mn(e){return e?.name?e.name:v(e?.metadata)&&typeof e.metadata.agentName==`string`?e.metadata.agentName:`Trace detail`}function Q(e){return(0,M.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,M.jsx)(`dt`,{className:`text-xs text-muted-foreground`,children:e.label}),(0,M.jsx)(`dd`,{className:t(`truncate text-sm font-medium tabular-nums`,e.mono&&`font-mono`),children:e.value})]})}function hn({status:e}){return(0,M.jsx)(te,{className:t(`border-0 capitalize`,e===`success`&&`bg-status-success-fill text-status-success-ink`,e===`error`&&`bg-status-danger-fill text-status-danger-ink`,(e===`running`||e===`suspended`||e===`cancelled`)&&`bg-status-pending-fill text-status-pending-ink`,e!==`success`&&e!==`error`&&e!==`running`&&e!==`suspended`&&e!==`cancelled`&&`bg-status-neutral-fill text-status-neutral-ink`),children:e})}function gn(e){let t=(0,A.useMemo)(()=>[...e.traces].sort((e,t)=>Date.parse(e.startedAt)-Date.parse(t.startedAt)),[e.traces]),n=t[0]?.id??``,[r,i]=(0,A.useState)(n),[a,o]=(0,A.useState)(`agent`),[s,c]=(0,A.useState)(()=>new Set),[l,u]=(0,A.useState)(``);(0,A.useEffect)(()=>{i(n),o(`agent`)},[n]);let d=t.find(e=>e.id===r)??t[0],p=d===void 0?[]:Ve(d),m=(e,t)=>{i(e),o(t)},h=l.trim().toLowerCase(),_=h.length===0?[]:t.flatMap(e=>e.observations.filter(e=>[e.name,e.kind,e.id].some(e=>e.toLowerCase().includes(h))).map(t=>({trace:e,observation:t}))),v=t.map(e=>`${e.id}:agent`),y=v.length>0&&v.every(e=>s.has(e)),b=e=>{c(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};return d===void 0?(0,M.jsx)(k,{className:`h-full rounded-none`,title:`No trace selected`,text:`Choose a trace to inspect its spans and metadata.`}):(0,M.jsx)(`section`,{className:`grid h-full min-h-0 w-full content-stretch overflow-hidden bg-background`,"aria-label":`Traces`,children:(0,M.jsxs)(`div`,{className:`grid h-full min-h-0 grid-cols-[minmax(280px,36%)_minmax(420px,64%)] overflow-hidden max-md:grid-cols-1`,children:[(0,M.jsxs)(`nav`,{className:`flex h-full min-h-0 flex-col border-r bg-background max-md:max-h-80 max-md:border-b max-md:border-r-0`,"aria-label":`Trace timeline`,children:[(0,M.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 border-b p-1.5`,children:[(0,M.jsxs)(`div`,{className:`relative min-w-0 flex-1`,children:[(0,M.jsx)(D,{icon:T,"aria-hidden":`true`,className:`pointer-events-none absolute left-2 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground`}),(0,M.jsx)(ne,{"aria-label":`Search spans`,className:`h-8 border-0 bg-transparent pl-7 shadow-none focus-visible:ring-1`,placeholder:`Search spans`,value:l,onChange:e=>u(e.target.value)})]}),(0,M.jsx)(g,{"aria-label":y?`Expand all spans`:`Collapse all spans`,className:`size-8`,size:`icon`,title:y?`Expand all`:`Collapse all`,variant:`ghost`,onClick:()=>c(y?new Set:new Set(v)),children:(0,M.jsx)(D,{icon:y?he:Oe,"aria-hidden":`true`})})]}),(0,M.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto overscroll-contain px-2 py-1`,children:h.length>0?_.length>0?_.map(({trace:e,observation:t})=>(0,M.jsx)($,{active:d.id===e.id&&a===`observation:${t.id}`,ancestorLevels:[],hasChildren:!1,isLastSibling:!0,level:0,tone:t.kind,title:et(t),subtitle:f(t.durationMs),onSelect:()=>m(e.id,`observation:${t.id}`)},`${e.id}:${t.id}`)):(0,M.jsxs)(`div`,{className:`grid place-items-center gap-1 p-6 text-center`,children:[(0,M.jsx)(`span`,{className:`text-sm font-medium`,children:`No matching spans`}),(0,M.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Search by name, kind, or ID.`})]}):t.map(e=>{let n=d.id===e.id,r=Ve(e),i=`${e.id}:agent`,o=s.has(i);return(0,M.jsxs)(`div`,{className:`contents`,children:[(0,M.jsx)($,{active:n&&a===`agent`,ancestorLevels:[],hasChildren:r.length>0,isLastSibling:!0,level:0,tone:`agent`,title:t.length>1?e.name??`agent.run`:`agent.run`,subtitle:f(e.durationMs),collapsed:o,onSelect:()=>m(e.id,`agent`),onToggle:()=>b(i)}),o?null:r.map(t=>{let i=`${e.id}:turn:${t.turn}`,o=s.has(i);return(0,M.jsxs)(`div`,{className:`contents`,children:[(0,M.jsx)($,{active:n&&a===`turn:${t.turn}`,ancestorLevels:[],hasChildren:t.observations.length>0,isLastSibling:t.turn===r.at(-1)?.turn,level:1,tone:`turn`,title:`turn.${t.turn}`,subtitle:f(t.durationMs),collapsed:o,onSelect:()=>m(e.id,`turn:${t.turn}`),onToggle:()=>b(i)}),o?null:(0,M.jsx)(vn,{activeKey:a,collapsed:s,isLastTurn:t.turn===r.at(-1)?.turn,observations:t.observations,onSelect:t=>m(e.id,`observation:${t}`),onToggle:b,traceActive:n})]},i)})]},e.id)})})]}),(0,M.jsx)(bn,{trace:d,turns:p,activeKey:a,onShowSessionTraces:e.onShowSessionTraces})]})})}function $(e){return(0,M.jsxs)(`div`,{className:t(`group flex min-w-0 items-stretch text-muted-foreground hover:bg-transparent hover:text-foreground`,e.active&&`bg-row-selected text-foreground`),children:[(0,M.jsxs)(`button`,{"aria-current":e.active?`true`:void 0,className:`flex min-w-0 flex-1 items-stretch text-left`,type:`button`,onClick:e.onSelect,children:[(0,M.jsx)(_n,{ancestorLevels:e.ancestorLevels,hasChildren:e.hasChildren,isLastSibling:e.isLastSibling,level:e.level,tone:e.tone}),(0,M.jsxs)(`span`,{className:`grid min-w-0 flex-1 content-center py-1.5 pr-2`,children:[(0,M.jsx)(`span`,{className:`truncate text-xs font-medium text-current`,title:e.title,children:e.title}),(0,M.jsx)(`span`,{className:`flex flex-wrap gap-x-2 text-[10px] text-muted-foreground`,children:e.subtitle})]})]}),e.hasChildren&&e.onToggle?(0,M.jsx)(`button`,{"aria-expanded":!e.collapsed,"aria-label":e.collapsed?`Expand ${e.title}`:`Collapse ${e.title}`,className:`m-1 grid size-7 shrink-0 place-items-center rounded-md hover:bg-transparent hover:text-foreground`,type:`button`,onClick:e.onToggle,children:(0,M.jsx)(D,{icon:j,"aria-hidden":`true`,className:t(`size-3.5 transition-transform`,!e.collapsed&&`rotate-90`)})}):null]})}function _n(e){let n=e.level*20;return(0,M.jsxs)(`span`,{className:`relative shrink-0`,"data-tree-depth":e.level,style:{width:`${(e.level+1)*20+4}px`},children:[e.ancestorLevels.map(e=>(0,M.jsx)(`span`,{className:`absolute inset-y-0 w-px bg-border`,"data-tree-line":`ancestor`,style:{left:`${e*20+10}px`}},`ancestor-line-${e}`)),e.level>0?e.isLastSibling?(0,M.jsx)(`span`,{className:`absolute top-0 h-1/2 rounded-bl-sm border-b border-l border-border`,"data-tree-line":`elbow`,style:{left:`${(e.level-1)*20+10}px`,width:`20px`}}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`span`,{className:`absolute inset-y-0 w-px bg-border`,"data-tree-line":`sibling-continuation`,style:{left:`${(e.level-1)*20+10}px`}}),(0,M.jsx)(`span`,{className:`absolute top-1/2 h-px bg-border`,"data-tree-line":`elbow`,style:{left:`${(e.level-1)*20+10}px`,width:`20px`}})]}):null,e.hasChildren?(0,M.jsx)(`span`,{className:`absolute bottom-0 w-px bg-border`,"data-tree-line":`children`,style:{left:`${n+10}px`,top:`calc(50% + 0.5rem)`}}):null,(0,M.jsx)(`span`,{className:t(`absolute top-1/2 grid size-4 -translate-y-1/2 place-items-center rounded-sm [&_svg]:size-2.5`,F(e.tone)),style:{left:`${n+2}px`},children:(0,M.jsx)(nt,{tone:e.tone})})]})}function vn(e){let t=He(e.observations);return(0,M.jsx)(M.Fragment,{children:t.map((n,r)=>(0,M.jsx)(yn,{activeKey:e.activeKey,ancestorLevels:e.isLastTurn?[]:[0],collapsed:e.collapsed,isLastSibling:r===t.length-1,level:2,node:n,onSelect:e.onSelect,onToggle:e.onToggle,traceActive:e.traceActive},n.observation.id))})}function yn(e){let t=rt(e.node.observation),n=`observation:${e.node.observation.id}`,r=e.collapsed.has(n),i=e.isLastSibling?e.ancestorLevels:[...e.ancestorLevels,e.level];return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)($,{active:e.traceActive&&e.activeKey===`observation:${e.node.observation.id}`,ancestorLevels:e.ancestorLevels,hasChildren:e.node.children.length>0,isLastSibling:e.isLastSibling,level:e.level,tone:e.node.observation.kind,title:et(e.node.observation),subtitle:t.length>0?`${f(e.node.observation.durationMs)} · ${t}`:f(e.node.observation.durationMs),collapsed:r,onSelect:()=>e.onSelect(e.node.observation.id),onToggle:()=>e.onToggle(n)}),r?null:e.node.children.map((t,n)=>(0,M.jsx)(yn,{activeKey:e.activeKey,ancestorLevels:i,collapsed:e.collapsed,isLastSibling:n===e.node.children.length-1,level:e.level+1,node:t,onSelect:e.onSelect,onToggle:e.onToggle,traceActive:e.traceActive},t.observation.id))]})}function bn(e){let n=Ue(e.trace,e.turns,e.activeKey);return(0,M.jsxs)(`section`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background`,"aria-label":`Trace detail`,children:[(0,M.jsx)(`header`,{className:`shrink-0 border-b px-4 py-4 md:px-6`,children:(0,M.jsxs)(`div`,{className:`grid min-w-0 gap-4`,children:[(0,M.jsx)(`div`,{className:`flex min-w-0 flex-wrap items-start justify-between gap-3`,children:(0,M.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,M.jsx)(`span`,{className:t(`grid size-9 shrink-0 place-items-center rounded-lg [&_svg]:size-4`,F(n.tone)),children:(0,M.jsx)(nt,{tone:n.tone})}),(0,M.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,M.jsx)(`h2`,{className:`m-0 min-w-0 truncate text-xl font-semibold tracking-tight`,children:n.title}),(0,M.jsx)(hn,{status:n.status})]}),(0,M.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:n.startedAt})]})]})}),(0,M.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,M.jsx)(xn,{icon:(0,M.jsx)(D,{icon:be,"aria-hidden":`true`}),label:`Duration`,value:f(n.durationMs)}),n.firstDeltaMs===void 0?null:(0,M.jsx)(xn,{icon:(0,M.jsx)(D,{icon:Ee,"aria-hidden":`true`}),label:`First delta`,value:f(n.firstDeltaMs)}),n.usage.length===0?null:(0,M.jsx)(xn,{icon:(0,M.jsx)(D,{icon:_e,"aria-hidden":`true`}),label:`Usage`,value:n.usage}),(0,M.jsxs)(`button`,{className:`flex min-w-0 items-center gap-2 rounded-md border bg-muted px-2.5 py-1.5 text-xs hover:border-foreground hover:bg-transparent`,type:`button`,onClick:()=>e.onShowSessionTraces(e.trace.sessionId),children:[(0,M.jsx)(D,{icon:b,"aria-hidden":`true`,className:`size-3.5 text-muted-foreground`}),(0,M.jsx)(`span`,{className:`text-muted-foreground`,children:`Session`}),(0,M.jsx)(`span`,{className:`max-w-44 truncate font-mono font-medium`,children:e.trace.sessionId})]})]})]})}),(0,M.jsx)(`div`,{className:`min-w-0 overflow-auto`,children:(0,M.jsxs)(`div`,{className:`grid min-w-0 content-start gap-6 p-6`,children:[n.input===void 0?null:(0,M.jsx)(X,{field:`input`,title:`Input`,value:n.input}),n.output===void 0?null:(0,M.jsx)(X,{field:`output`,title:`Output`,value:n.output}),n.error===void 0?null:(0,M.jsx)(X,{field:`error`,title:`Error`,value:n.error}),(0,M.jsx)(X,{field:`metadata`,title:`Metadata`,value:n.metadata})]})})]})}function xn(e){return(0,M.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 rounded-md border bg-muted px-2.5 py-1.5 text-xs`,children:[(0,M.jsx)(`span`,{className:`text-muted-foreground [&_svg]:size-3.5`,children:e.icon}),(0,M.jsx)(`span`,{className:`text-muted-foreground`,children:e.label}),(0,M.jsx)(`span`,{className:`max-w-44 truncate font-mono font-medium`,children:e.value})]})}export{dn as TraceBrowser};
4
+ //# sourceMappingURL=trace-browser-B4cu-jFZ.js.map