@anvia/studio 1.3.13 → 1.3.15

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 (132) hide show
  1. package/dist/ui/assets/{ArrowClockwise.es-DwsUsBcf.js → ArrowClockwise.es-DZEjRq0J.js} +2 -2
  2. package/dist/ui/assets/ArrowClockwise.es-DZEjRq0J.js.map +1 -0
  3. package/dist/ui/assets/{Check.es-DSgPB1Pv.js → Check.es-TFx4xBI5.js} +2 -2
  4. package/dist/ui/assets/Check.es-TFx4xBI5.js.map +1 -0
  5. package/dist/ui/assets/Combination-CFi_6UzA.js +42 -0
  6. package/dist/ui/assets/Combination-CFi_6UzA.js.map +1 -0
  7. package/dist/ui/assets/{Copy.es-C6Vd2mhd.js → Copy.es-BUkmbhxT.js} +2 -2
  8. package/dist/ui/assets/Copy.es-BUkmbhxT.js.map +1 -0
  9. package/dist/ui/assets/{MagnifyingGlass.es-DP3xtOg0.js → MagnifyingGlass.es-DVzl9EQ2.js} +2 -2
  10. package/dist/ui/assets/MagnifyingGlass.es-DVzl9EQ2.js.map +1 -0
  11. package/dist/ui/assets/{Wrench.es-BEBc8KqB.js → Wrench.es-Uf2XraWM.js} +2 -2
  12. package/dist/ui/assets/Wrench.es-Uf2XraWM.js.map +1 -0
  13. package/dist/ui/assets/{agents-page-BeBY9su3.js → agents-page-BLy19QA8.js} +2 -2
  14. package/dist/ui/assets/agents-page-BLy19QA8.js.map +1 -0
  15. package/dist/ui/assets/{badge-MfEDrFTO.js → badge-D6eyQQ0T.js} +2 -2
  16. package/dist/ui/assets/badge-D6eyQQ0T.js.map +1 -0
  17. package/dist/ui/assets/button-4bdMllZ8.js +2 -0
  18. package/dist/ui/assets/button-4bdMllZ8.js.map +1 -0
  19. package/dist/ui/assets/dialog-D1odZMnQ.js +2 -0
  20. package/dist/ui/assets/dialog-D1odZMnQ.js.map +1 -0
  21. package/dist/ui/assets/dist-C6Ez28oH.js +2 -0
  22. package/dist/ui/assets/dist-C6Ez28oH.js.map +1 -0
  23. package/dist/ui/assets/dist-gzPjmjmv.js +2 -0
  24. package/dist/ui/assets/dist-gzPjmjmv.js.map +1 -0
  25. package/dist/ui/assets/dist-uvOGC5z0.js +2 -0
  26. package/dist/ui/assets/dist-uvOGC5z0.js.map +1 -0
  27. package/dist/ui/assets/{graphs-page-2rKZQJAl.js → graphs-page-CDMb6H6o.js} +2 -2
  28. package/dist/ui/assets/graphs-page-CDMb6H6o.js.map +1 -0
  29. package/dist/ui/assets/{icon-BivhXy0Y.js → icon-B3s_bapw.js} +2 -2
  30. package/dist/ui/assets/icon-B3s_bapw.js.map +1 -0
  31. package/dist/ui/assets/index-BpwQ_xqH.js +67 -0
  32. package/dist/ui/assets/index-BpwQ_xqH.js.map +1 -0
  33. package/dist/ui/assets/index-DVwgJz2a.css +2 -0
  34. package/dist/ui/assets/{input-C35vs5wD.js → input-DjRTBLA6.js} +2 -2
  35. package/dist/ui/assets/input-DjRTBLA6.js.map +1 -0
  36. package/dist/ui/assets/knowledge-model-B6kRb7zc.js.map +1 -1
  37. package/dist/ui/assets/knowledge-page-BpSbnDxl.js +2 -0
  38. package/dist/ui/assets/knowledge-page-BpSbnDxl.js.map +1 -0
  39. package/dist/ui/assets/mcps-page-CAdyljvT.js +2 -0
  40. package/dist/ui/assets/mcps-page-CAdyljvT.js.map +1 -0
  41. package/dist/ui/assets/memory-page-MhRppZ8j.js +4 -0
  42. package/dist/ui/assets/memory-page-MhRppZ8j.js.map +1 -0
  43. package/dist/ui/assets/{pipelines-page-BeE6_VuK.js → pipelines-page-ClFgb3LL.js} +2 -2
  44. package/dist/ui/assets/pipelines-page-ClFgb3LL.js.map +1 -0
  45. package/dist/ui/assets/renderers-C1LvbME4.js +94 -0
  46. package/dist/ui/assets/renderers-C1LvbME4.js.map +1 -0
  47. package/dist/ui/assets/{request-CpxtfF0E.js → request-C9FAR59q.js} +2 -2
  48. package/dist/ui/assets/request-C9FAR59q.js.map +1 -0
  49. package/dist/ui/assets/rfb-CtGtw_KV.js +6 -0
  50. package/dist/ui/assets/rfb-CtGtw_KV.js.map +1 -0
  51. package/dist/ui/assets/{sandboxes-page-GPkBA_26.js → sandboxes-page-B1j_lSIA.js} +2 -2
  52. package/dist/ui/assets/sandboxes-page-B1j_lSIA.js.map +1 -0
  53. package/dist/ui/assets/select-DwjXlQvi.js +2 -0
  54. package/dist/ui/assets/select-DwjXlQvi.js.map +1 -0
  55. package/dist/ui/assets/{sessions-page-CDvKPoVi.js → sessions-page-Bym9fk3t.js} +2 -2
  56. package/dist/ui/assets/sessions-page-Bym9fk3t.js.map +1 -0
  57. package/dist/ui/assets/status-page-WZ4bloEs.js +2 -0
  58. package/dist/ui/assets/status-page-WZ4bloEs.js.map +1 -0
  59. package/dist/ui/assets/{studio-DeO7ueA2.js → studio-ZpV3GAsn.js} +2 -2
  60. package/dist/ui/assets/studio-ZpV3GAsn.js.map +1 -0
  61. package/dist/ui/assets/style-B23wzg_0.js +8 -0
  62. package/dist/ui/assets/style-B23wzg_0.js.map +1 -0
  63. package/dist/ui/assets/{team-playground-C-nJy3BC.js → team-playground-BWPiCcRS.js} +2 -2
  64. package/dist/ui/assets/{team-playground-C-nJy3BC.js.map → team-playground-BWPiCcRS.js.map} +1 -1
  65. package/dist/ui/assets/{textarea-BqjRR-2a.js → textarea-D_t9rW9X.js} +2 -2
  66. package/dist/ui/assets/textarea-D_t9rW9X.js.map +1 -0
  67. package/dist/ui/assets/{tool-runner-D3CdDSUU.js → tool-runner-BVvlqFJh.js} +2 -2
  68. package/dist/ui/assets/tool-runner-BVvlqFJh.js.map +1 -0
  69. package/dist/ui/assets/tools-page-BTQvpS16.js +2 -0
  70. package/dist/ui/assets/tools-page-BTQvpS16.js.map +1 -0
  71. package/dist/ui/assets/trace-browser-DiYLVmUu.js +4 -0
  72. package/dist/ui/assets/trace-browser-DiYLVmUu.js.map +1 -0
  73. package/dist/ui/assets/{transcript-item-D9M-VsnP.js → transcript-item-Wai6fv5d.js} +2 -2
  74. package/dist/ui/assets/transcript-item-Wai6fv5d.js.map +1 -0
  75. package/dist/ui/assets/{with-selector-CfGDDu3e.js → with-selector-DI0K_VfM.js} +2 -2
  76. package/dist/ui/assets/with-selector-DI0K_VfM.js.map +1 -0
  77. package/dist/ui/index.html +17 -17
  78. package/package.json +22 -22
  79. package/dist/ui/assets/ArrowClockwise.es-DwsUsBcf.js.map +0 -1
  80. package/dist/ui/assets/Check.es-DSgPB1Pv.js.map +0 -1
  81. package/dist/ui/assets/Combination-BkVfYDnw.js +0 -42
  82. package/dist/ui/assets/Combination-BkVfYDnw.js.map +0 -1
  83. package/dist/ui/assets/Copy.es-C6Vd2mhd.js.map +0 -1
  84. package/dist/ui/assets/MagnifyingGlass.es-DP3xtOg0.js.map +0 -1
  85. package/dist/ui/assets/Wrench.es-BEBc8KqB.js.map +0 -1
  86. package/dist/ui/assets/agents-page-BeBY9su3.js.map +0 -1
  87. package/dist/ui/assets/badge-MfEDrFTO.js.map +0 -1
  88. package/dist/ui/assets/button-jjWFI6nO.js +0 -2
  89. package/dist/ui/assets/button-jjWFI6nO.js.map +0 -1
  90. package/dist/ui/assets/dialog-7KiF6M8r.js +0 -2
  91. package/dist/ui/assets/dialog-7KiF6M8r.js.map +0 -1
  92. package/dist/ui/assets/dist-Che9Yn41.js +0 -2
  93. package/dist/ui/assets/dist-Che9Yn41.js.map +0 -1
  94. package/dist/ui/assets/dist-Du1CgPgL.js +0 -2
  95. package/dist/ui/assets/dist-Du1CgPgL.js.map +0 -1
  96. package/dist/ui/assets/dist-xrWIzsxw.js +0 -2
  97. package/dist/ui/assets/dist-xrWIzsxw.js.map +0 -1
  98. package/dist/ui/assets/graphs-page-2rKZQJAl.js.map +0 -1
  99. package/dist/ui/assets/icon-BivhXy0Y.js.map +0 -1
  100. package/dist/ui/assets/index-BDFcpxF9.css +0 -2
  101. package/dist/ui/assets/index-DQo99AOj.js +0 -67
  102. package/dist/ui/assets/index-DQo99AOj.js.map +0 -1
  103. package/dist/ui/assets/input-C35vs5wD.js.map +0 -1
  104. package/dist/ui/assets/knowledge-page-CguNnujL.js +0 -2
  105. package/dist/ui/assets/knowledge-page-CguNnujL.js.map +0 -1
  106. package/dist/ui/assets/mcps-page-BZVfflk-.js +0 -2
  107. package/dist/ui/assets/mcps-page-BZVfflk-.js.map +0 -1
  108. package/dist/ui/assets/memory-page-DyK3UTyb.js +0 -4
  109. package/dist/ui/assets/memory-page-DyK3UTyb.js.map +0 -1
  110. package/dist/ui/assets/pipelines-page-BeE6_VuK.js.map +0 -1
  111. package/dist/ui/assets/renderers-BakHuLSK.js +0 -96
  112. package/dist/ui/assets/renderers-BakHuLSK.js.map +0 -1
  113. package/dist/ui/assets/request-CpxtfF0E.js.map +0 -1
  114. package/dist/ui/assets/rfb-NV_fh9Db.js +0 -6
  115. package/dist/ui/assets/rfb-NV_fh9Db.js.map +0 -1
  116. package/dist/ui/assets/sandboxes-page-GPkBA_26.js.map +0 -1
  117. package/dist/ui/assets/select-Bt5d0Z3n.js +0 -2
  118. package/dist/ui/assets/select-Bt5d0Z3n.js.map +0 -1
  119. package/dist/ui/assets/sessions-page-CDvKPoVi.js.map +0 -1
  120. package/dist/ui/assets/status-page-DvH1oCw1.js +0 -2
  121. package/dist/ui/assets/status-page-DvH1oCw1.js.map +0 -1
  122. package/dist/ui/assets/studio-DeO7ueA2.js.map +0 -1
  123. package/dist/ui/assets/style-C_1A5pxg.js +0 -8
  124. package/dist/ui/assets/style-C_1A5pxg.js.map +0 -1
  125. package/dist/ui/assets/textarea-BqjRR-2a.js.map +0 -1
  126. package/dist/ui/assets/tool-runner-D3CdDSUU.js.map +0 -1
  127. package/dist/ui/assets/tools-page-C0lqOcri.js +0 -2
  128. package/dist/ui/assets/tools-page-C0lqOcri.js.map +0 -1
  129. package/dist/ui/assets/trace-browser-B4cu-jFZ.js +0 -4
  130. package/dist/ui/assets/trace-browser-B4cu-jFZ.js.map +0 -1
  131. package/dist/ui/assets/transcript-item-D9M-VsnP.js.map +0 -1
  132. package/dist/ui/assets/with-selector-CfGDDu3e.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-outline-style:solid;--tw-divide-x-reverse:0;--tw-content:""}}}@layer theme{:root,:host{--font-sans:"Geist Variable", sans-serif;--color-amber-500:oklch(76.9% .188 70.08);--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-500:oklch(71.5% .143 215.221);--color-sky-500:oklch(68.5% .169 237.323);--color-violet-500:oklch(60.6% .25 292.717);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-rose-500:oklch(64.5% .246 16.439);--spacing:.25rem;--container-sm:24rem;--container-lg:32rem;--container-xl:36rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-lg:var(--radius);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-xs:4px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:"Geist Variable", sans-serif;--default-mono-font-family:"Geist Mono Variable", monospace}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring);box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--sb-scrollbar) transparent}html{background:var(--background);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;max-width:100%;height:100%;font-size:16px;overflow:hidden}html.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{background-color:var(--background);color:var(--foreground);min-width:320px;max-width:100%;height:100%;font-family:var(--font-sans);font-feature-settings:"cv02", "cv03", "cv04", "cv11";font-variant-numeric:tabular-nums;margin:0;font-size:1rem;line-height:1.5;overflow:hidden}#anvia-ui{width:100%;max-width:100%;height:100dvh;overflow:hidden}::selection{background:var(--sb-selection)}.shell-loading{background:var(--background);min-height:100vh;color:var(--foreground);font-family:var(--font-sans);place-items:center;display:grid}.studio-logo-lockup{justify-content:center;align-items:center;gap:.5rem;max-width:100%;display:inline-flex}.studio-logo-image{object-fit:contain;width:10rem;max-width:52vw;height:auto;display:block}.studio-logo-badge{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--secondary);min-height:1.25rem;color:var(--secondary-foreground);white-space:nowrap;align-items:center;padding:.125rem .5rem;font-size:.6875rem;font-weight:500;line-height:1;display:inline-flex}:focus-visible{outline:2px solid var(--ring);outline-offset:3px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:var(--sb-scrollbar);border-radius:999px}::-webkit-scrollbar-thumb:hover{background-color:var(--sb-scrollbar-hover)}.xterm .xterm-viewport{scrollbar-width:none}.xterm .xterm-viewport::-webkit-scrollbar{width:0;height:0}.pipeline-flow .react-flow__edge.pipeline-flow-edge .react-flow__edge-path{stroke:var(--muted-foreground);stroke-width:1.6px;opacity:.78}.pipeline-flow .react-flow__edges marker path{fill:var(--muted-foreground);stroke:var(--muted-foreground)}.code-keyword{color:var(--sb-code-keyword)}.code-type{color:var(--sb-code-type)}.code-function{color:var(--sb-code-function)}.code-string{color:var(--sb-code-string)}.code-number{color:var(--sb-code-number)}.code-literal{color:var(--sb-code-literal)}.code-comment{color:var(--sb-code-comment)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-4{top:calc(var(--spacing) * 4)}.top-full{top:100%}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.bottom-0{bottom:0}.-left-1{left:calc(var(--spacing) * -1)}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-4{left:calc(var(--spacing) * 4)}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.col-span-4{grid-column:span 4/span 4}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.m-1{margin:var(--spacing)}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing) * 2)}.my-4{margin-block:calc(var(--spacing) * 4)}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.71429}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.888889em;margin-bottom:.888889em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em;margin-bottom:1.33333em;padding-inline-start:1.11111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:.8em;font-size:2.14286em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:.8em;font-size:1.42857em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.55556em;margin-bottom:.444444em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.42857em;margin-bottom:.571429em;line-height:1.42857}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.142857em;padding-inline-end:.357143em;padding-bottom:.142857em;border-radius:.3125rem;padding-inline-start:.357143em;font-size:.857143em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;border-radius:.25rem;margin-top:1.66667em;margin-bottom:1.66667em;padding-inline-start:1em;font-size:.857143em;line-height:1.66667}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em;padding-inline-start:1.57143em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;margin-bottom:.285714em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.428571em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;padding-inline-start:1.57143em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.85714em;margin-bottom:2.85714em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.666667em;font-size:.857143em;line-height:1.33333}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.-mb-4{margin-bottom:calc(var(--spacing) * -4)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-8{margin-left:calc(var(--spacing) * 8)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.\!size-1\.5{width:calc(var(--spacing) * 1.5)!important;height:calc(var(--spacing) * 1.5)!important}.size-1{width:var(--spacing);height:var(--spacing)}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.\!h-0{height:0!important}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-1\/2{height:50%}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-\[100dvh\]{height:100dvh}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[28rem\]{max-height:28rem}.max-h-\[32rem\]{max-height:32rem}.max-h-\[calc\(100dvh-32px\)\]{max-height:calc(100dvh - 32px)}.max-h-full{max-height:100%}.min-h-0{min-height:0}.min-h-5{min-height:calc(var(--spacing) * 5)}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-14{min-height:calc(var(--spacing) * 14)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-24{min-height:calc(var(--spacing) * 24)}.min-h-32{min-height:calc(var(--spacing) * 32)}.min-h-36{min-height:calc(var(--spacing) * 36)}.min-h-44{min-height:calc(var(--spacing) * 44)}.min-h-48{min-height:calc(var(--spacing) * 48)}.min-h-64{min-height:calc(var(--spacing) * 64)}.min-h-96{min-height:calc(var(--spacing) * 96)}.min-h-\[74px\]{min-height:74px}.min-h-\[480px\]{min-height:480px}.min-h-full{min-height:100%}.\!w-0{width:0!important}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-4\/5{width:80%}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-14{width:calc(var(--spacing) * 14)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-60{width:calc(var(--spacing) * 60)}.w-64{width:calc(var(--spacing) * 64)}.w-\[180px\]{width:180px}.w-\[210px\]{width:210px}.w-\[min\(420px\,calc\(100vw-32px\)\)\]{width:min(420px,100vw - 32px)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-44{max-width:calc(var(--spacing) * 44)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-200{max-width:calc(var(--spacing) * 200)}.max-w-205{max-width:calc(var(--spacing) * 205)}.max-w-\[62ch\]{max-width:62ch}.max-w-\[64ch\]{max-width:64ch}.max-w-\[68ch\]{max-width:68ch}.max-w-\[72ch\]{max-width:72ch}.max-w-\[260px\]{max-width:260px}.max-w-\[280px\]{max-width:280px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-\[min\(64ch\,82\%\)\]{max-width:min(64ch,82%)}.max-w-\[min\(82ch\,100\%\)\]{max-width:min(82ch,100%)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.min-w-32{min-width:calc(var(--spacing) * 32)}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-225{min-width:calc(var(--spacing) * 225)}.min-w-280{min-width:calc(var(--spacing) * 280)}.min-w-\[980px\]{min-width:980px}.min-w-\[1040px\]{min-width:1040px}.min-w-full{min-width:100%}.min-w-max{min-width:max-content}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:0px;--tw-border-spacing-y:0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-1px\]{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-90{rotate:90deg}.animate-pulse{animation:var(--animate-pulse)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.\[scrollbar-gutter\:stable\]{scrollbar-gutter:stable}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-\[6\.5rem_minmax\(0\,1fr\)\]{grid-template-columns:6.5rem minmax(0,1fr)}.grid-cols-\[16px_auto\]{grid-template-columns:16px auto}.grid-cols-\[18px_minmax\(0\,1fr\)_auto\]{grid-template-columns:18px minmax(0,1fr) auto}.grid-cols-\[82px_minmax\(0\,1fr\)\]{grid-template-columns:82px minmax(0,1fr)}.grid-cols-\[90px_minmax\(0\,1fr\)\]{grid-template-columns:90px minmax(0,1fr)}.grid-cols-\[250px_minmax\(300px\,0\.8fr\)_minmax\(400px\,1\.2fr\)\]{grid-template-columns:250px minmax(300px,.8fr) minmax(400px,1.2fr)}.grid-cols-\[260px_minmax\(320px\,0\.78fr\)_minmax\(0\,1\.22fr\)\]{grid-template-columns:260px minmax(320px,.78fr) minmax(0,1.22fr)}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,460px\)\]{grid-template-columns:minmax(0,1fr) minmax(0,460px)}.grid-cols-\[minmax\(0\,2fr\)_340px\]{grid-template-columns:minmax(0,2fr) 340px}.grid-cols-\[minmax\(0\,2fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}.grid-cols-\[minmax\(7rem\,0\.34fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(7rem,.34fr) minmax(0,1fr)}.grid-cols-\[minmax\(8rem\,0\.42fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(8rem,.42fr) minmax(0,1fr)}.grid-cols-\[minmax\(92px\,max-content\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(92px,max-content) minmax(0,1fr)}.grid-cols-\[minmax\(120px\,0\.5fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(120px,.5fr) minmax(0,1fr)}.grid-cols-\[minmax\(140px\,0\.24fr\)_minmax\(96px\,0\.14fr\)_minmax\(96px\,0\.14fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(140px,.24fr) minmax(96px,.14fr) minmax(96px,.14fr) minmax(0,1fr)}.grid-cols-\[minmax\(220px\,1\.3fr\)_150px_120px_120px_120px_120px_110px_90px\]{grid-template-columns:minmax(220px,1.3fr) 150px 120px 120px 120px 120px 110px 90px}.grid-cols-\[minmax\(220px\,1\.3fr\)_180px_120px_120px\]{grid-template-columns:minmax(220px,1.3fr) 180px 120px 120px}.grid-cols-\[minmax\(220px\,1\.3fr\)_180px_120px_120px_72px\]{grid-template-columns:minmax(220px,1.3fr) 180px 120px 120px 72px}.grid-cols-\[minmax\(270px\,0\.34fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(270px,.34fr) minmax(0,1fr)}.grid-cols-\[minmax\(280px\,36\%\)_minmax\(420px\,64\%\)\]{grid-template-columns:minmax(280px,36%) minmax(420px,64%)}.grid-cols-\[minmax\(300px\,0\.75fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(300px,.75fr) minmax(0,1fr)}.grid-rows-\[56px_minmax\(0\,1fr\)\]{grid-template-rows:56px minmax(0,1fr)}.grid-rows-\[auto_auto_minmax\(0\,1fr\)\]{grid-template-rows:auto auto minmax(0,1fr)}.grid-rows-\[auto_minmax\(0\,1fr\)\]{grid-template-rows:auto minmax(0,1fr)}.grid-rows-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-rows:auto minmax(0,1fr) auto}.grid-rows-\[minmax\(0\,1fr\)\]{grid-template-rows:minmax(0,1fr)}.grid-rows-\[minmax\(0\,1fr\)_auto\]{grid-template-rows:minmax(0,1fr) auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.place-items-stretch{place-items:stretch stretch}.content-center{align-content:center}.content-start{align-content:flex-start}.content-stretch{align-content:stretch}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-stretch{justify-content:stretch}.justify-items-center{justify-items:center}.justify-items-end{justify-items:end}.gap-0{gap:0}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-1{row-gap:var(--spacing)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-hair>:not(:last-child)){border-color:var(--sb-hair)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-4xl{border-radius:calc(var(--radius) * 2.6)}.rounded-\[5px\]{border-radius:5px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) * .8)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) * .6)}.rounded-xl{border-radius:calc(var(--radius) * 1.4)}.rounded-b-lg{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.rounded-bl-sm{border-bottom-left-radius:calc(var(--radius) * .6)}.\!border-0{border-style:var(--tw-border-style)!important;border-width:0!important}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-border,.border-border\/80{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/80{border-color:color-mix(in oklab, var(--border) 80%, transparent)}}.border-destructive{border-color:var(--destructive)}.border-foreground,.border-foreground\/30{border-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.border-foreground\/30{border-color:color-mix(in oklab, var(--foreground) 30%, transparent)}}.border-hair{border-color:var(--sb-hair)}.border-input{border-color:var(--input)}.border-muted-foreground{border-color:var(--muted-foreground)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-status-danger-ink{border-color:var(--sb-status-danger-ink)}.border-tone-tool{border-color:var(--sb-tone-tool)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.\!bg-muted-foreground\/50{background-color:var(--muted-foreground)!important}@supports (color:color-mix(in lab, red, red)){.\!bg-muted-foreground\/50{background-color:color-mix(in oklab, var(--muted-foreground) 50%, transparent)!important}}.\!bg-transparent{background-color:#0000!important}.bg-\[var\(--ops-strong\)\]{background-color:var(--ops-strong)}.bg-\[var\(--sb-overlay\)\]{background-color:var(--sb-overlay)}.bg-accent{background-color:var(--accent)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-background,.bg-background\/70{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/70{background-color:color-mix(in oklab, var(--background) 70%, transparent)}}.bg-background\/90{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/90{background-color:color-mix(in oklab, var(--background) 90%, transparent)}}.bg-border{background-color:var(--border)}.bg-card,.bg-card\/25{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/25{background-color:color-mix(in oklab, var(--card) 25%, transparent)}}.bg-card\/35{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/35{background-color:color-mix(in oklab, var(--card) 35%, transparent)}}.bg-current{background-color:currentColor}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-destructive{background-color:var(--destructive)}.bg-dim{background-color:var(--sb-dim)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-foreground{background-color:var(--foreground)}.bg-fuchsia-500{background-color:var(--color-fuchsia-500)}.bg-header{background-color:var(--sb-header)}.bg-muted{background-color:var(--muted)}.bg-muted-foreground{background-color:var(--muted-foreground)}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-row-selected{background-color:var(--sb-row-selected)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-accent{background-color:var(--sidebar-accent)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-status-danger-fill{background-color:var(--sb-status-danger-fill)}.bg-status-neutral-fill{background-color:var(--sb-status-neutral-fill)}.bg-status-pending-fill{background-color:var(--sb-status-pending-fill)}.bg-status-success-fill{background-color:var(--sb-status-success-fill)}.bg-tone-agent{background-color:var(--sb-tone-agent)}.bg-tone-generation{background-color:var(--sb-tone-generation)}.bg-tone-tool{background-color:var(--sb-tone-tool)}.bg-transparent{background-color:#0000}.bg-violet-500{background-color:var(--color-violet-500)}.bg-clip-padding{background-clip:padding-box}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-px{padding:1px}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-0{padding-top:0}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pr-1{padding-right:var(--spacing)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pr-12{padding-right:calc(var(--spacing) * 12)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pl-0{padding-left:0}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-7{padding-left:calc(var(--spacing) * 7)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-heading{font-family:var(--font-sans)}.font-mono{font-family:Geist Mono Variable,monospace}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-sm\/relaxed{font-size:var(--text-sm);line-height:var(--leading-relaxed)}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-\[400\]{--tw-font-weight:400;font-weight:400}.font-\[450\]{--tw-font-weight:450;font-weight:450}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.006em\]{--tw-tracking:-.006em;letter-spacing:-.006em}.tracking-\[0\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-balance{text-wrap:balance}.text-pretty{text-wrap:pretty}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--ops-strong-text\)\]{color:var(--ops-strong-text)}.text-background{color:var(--background)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-dim{color:var(--sb-dim)}.text-foreground{color:var(--foreground)}.text-inherit{color:inherit}.text-muted-foreground{color:var(--muted-foreground)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-accent-foreground{color:var(--sidebar-accent-foreground)}.text-sidebar-foreground{color:var(--sidebar-foreground)}.text-status-danger-ink{color:var(--sb-status-danger-ink)}.text-status-neutral-ink{color:var(--sb-status-neutral-ink)}.text-status-pending-ink{color:var(--sb-status-pending-ink)}.text-status-success-ink{color:var(--sb-status-success-ink)}.text-tone-text{color:var(--sb-tone-text)}.text-tone-tool{color:var(--sb-tone-tool)}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.accent-foreground{accent-color:var(--foreground)}.\!opacity-0{opacity:0!important}.opacity-30{opacity:.3}.opacity-35{opacity:.35}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow-\[inset_0_1px_0_var\(--sb-inset-highlight\)\]{--tw-shadow:inset 0 1px 0 var(--tw-shadow-color,var(--sb-inset-highlight));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-\[var\(--sb-popover-ring\)\]{--tw-ring-color:var(--sb-popover-ring)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[animation-delay\:150ms\]{animation-delay:.15s}.\[animation-delay\:300ms\]{animation-delay:.3s}.\[overflow-anchor\:none\]{overflow-anchor:none}.group-last\/row\:border-b-0:is(:where(.group\/row):last-child *){border-bottom-style:var(--tw-border-style);border-bottom-width:0}.group-open\:hidden:is(:where(.group):is([open],:popover-open,:open) *){display:none}.group-open\:inline:is(:where(.group):is([open],:popover-open,:open) *){display:inline}.group-open\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}.group-open\:text-foreground:is(:where(.group):is([open],:popover-open,:open) *){color:var(--foreground)}.group-open\/additional\:rotate-90:is(:where(.group\/additional):is([open],:popover-open,:open) *),.group-open\/row\:rotate-90:is(:where(.group\/row):is([open],:popover-open,:open) *){rotate:90deg}.group-focus-within\:grid:is(:where(.group):focus-within *){display:grid}.group-focus-within\:inline-flex:is(:where(.group):focus-within *){display:inline-flex}@media (hover:hover){.group-hover\:grid:is(:where(.group):hover *){display:grid}.group-hover\:inline-flex:is(:where(.group):hover *){display:inline-flex}}.marker\:hidden ::marker{display:none}.marker\:hidden::marker{display:none}.marker\:hidden ::-webkit-details-marker{display:none}.marker\:hidden::-webkit-details-marker{display:none}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.first\:pt-3:first-child{padding-top:calc(var(--spacing) * 3)}.first\:pl-0:first-child{padding-left:0}.first\:pl-5:first-child{padding-left:calc(var(--spacing) * 5)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.last\:pr-0:last-child{padding-right:0}.last\:pr-5:last-child{padding-right:calc(var(--spacing) * 5)}.focus-within\:outline-2:focus-within{outline-style:var(--tw-outline-style);outline-width:2px}.focus-within\:outline-offset-3:focus-within{outline-offset:3px}.focus-within\:outline-ring:focus-within{outline-color:var(--ring)}@media (hover:hover){.hover\:border-foreground:hover,.hover\:border-foreground\/90:hover{border-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:border-foreground\/90:hover{border-color:color-mix(in oklab, var(--foreground) 90%, transparent)}}.hover\:border-hair:hover{border-color:var(--sb-hair)}.hover\:border-status-danger-ink:hover{border-color:var(--sb-status-danger-ink)}.hover\:bg-action-muted:hover{background-color:var(--sb-action-muted)}.hover\:bg-foreground\/90:hover{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-foreground\/90:hover{background-color:color-mix(in oklab, var(--foreground) 90%, transparent)}}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:bg-status-danger-fill:hover{background-color:var(--sb-status-danger-fill)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-background:hover{color:var(--background)}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-inherit:hover{color:inherit}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:opacity-100:hover{opacity:1}}.focus\:border-foreground:focus{border-color:var(--foreground)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:border-transparent:focus-visible{border-color:#0000}.focus-visible\:bg-action-muted:focus-visible{background-color:var(--sb-action-muted)}.focus-visible\:bg-sidebar-accent:focus-visible{background-color:var(--sidebar-accent)}.focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--ring)}.focus-visible\:ring-offset-3:focus-visible{--tw-ring-offset-width:3px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:translate-y-px:active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-border:disabled{border-color:var(--border)}.disabled\:bg-muted:disabled{background-color:var(--muted)}.disabled\:text-muted-foreground:disabled{color:var(--muted-foreground)}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[highlighted\]\:bg-accent[data-highlighted]{background-color:var(--accent)}.data-\[highlighted\]\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}@media (prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}}@media not all and (width>=80rem){.max-xl\:col-span-2{grid-column:span 2/span 2}.max-xl\:hidden{display:none}.max-xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-xl\:grid-cols-\[240px_minmax\(0\,1fr\)\]{grid-template-columns:240px minmax(0,1fr)}.max-xl\:grid-rows-\[minmax\(240px\,0\.42fr\)_minmax\(0\,1fr\)\]{grid-template-rows:minmax(240px,.42fr) minmax(0,1fr)}.max-xl\:border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.max-xl\:pr-0{padding-right:0}.max-xl\:pl-0{padding-left:0}}@media not all and (width>=64rem){.max-lg\:min-h-96{min-height:calc(var(--spacing) * 96)}.max-lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-lg\:grid-rows-\[minmax\(220px\,0\.44fr\)_minmax\(0\,1fr\)\]{grid-template-rows:minmax(220px,.44fr) minmax(0,1fr)}.max-lg\:border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.max-lg\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.max-lg\:pr-0{padding-right:0}.max-lg\:pl-0{padding-left:0}}@media not all and (width>=48rem){.max-md\:col-span-1{grid-column:span 1/span 1}.max-md\:grid{display:grid}.max-md\:max-h-80{max-height:calc(var(--spacing) * 80)}.max-md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-md\:grid-rows-\[auto_minmax\(240px\,0\.38fr\)_minmax\(0\,1fr\)\]{grid-template-rows:auto minmax(240px,.38fr) minmax(0,1fr)}.max-md\:justify-start{justify-content:flex-start}.max-md\:gap-1{gap:var(--spacing)}.max-md\:border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.max-md\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.max-md\:px-0{padding-inline:0}.max-md\:pr-0{padding-right:0}}@media not all and (width>=40rem){.max-sm\:w-full{width:100%}.max-sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-sm\:justify-start{justify-content:flex-start}.max-sm\:gap-1{gap:var(--spacing)}}@media (width>=40rem){.sm\:max-w-56{max-width:calc(var(--spacing) * 56)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.sm\:flex-row{flex-direction:row}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}:where(.sm\:divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.sm\:divide-hair>:not(:last-child)){border-color:var(--sb-hair)}.sm\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}@media (width>=48rem){.md\:px-6{padding-inline:calc(var(--spacing) * 6)}.md\:pt-6{padding-top:calc(var(--spacing) * 6)}.md\:pb-6{padding-bottom:calc(var(--spacing) * 6)}}@media (width>=64rem){.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:min-h-0{min-height:0}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1fr\)_360px\]{grid-template-columns:minmax(0,1fr) 360px}.lg\:overflow-hidden{overflow:hidden}.lg\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.lg\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}}@media (width>=80rem){.xl\:grid-cols-\[minmax\(0\,1\.05fr\)_minmax\(0\,0\.95fr\)\]{grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr)}.xl\:grid-cols-\[minmax\(0\,1fr\)_420px\]{grid-template-columns:minmax(0,1fr) 420px}.xl\:grid-cols-\[minmax\(260px\,0\.42fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(260px,.42fr) minmax(0,1fr)}.xl\:grid-cols-\[minmax\(280px\,0\.58fr\)_minmax\(0\,1\.42fr\)\]{grid-template-columns:minmax(280px,.58fr) minmax(0,1.42fr)}.xl\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.xl\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.xl\:pr-5{padding-right:calc(var(--spacing) * 5)}.xl\:pb-0{padding-bottom:0}}.dark\:bg-muted:is(.dark *){background-color:var(--muted)}.dark\:bg-transparent:is(.dark *){background-color:#0000}.dark\:prose-invert:is(.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.dark\:disabled\:bg-muted:is(.dark *):disabled{background-color:var(--muted)}.prose-headings\:font-semibold :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose-headings\:text-current :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)),.dark\:prose-headings\:text-current:is(.dark *) :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)){color:currentColor}.prose-p\:leading-7 :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.prose-p\:text-current :where(p):not(:where([class~=not-prose],[class~=not-prose] *)),.dark\:prose-p\:text-current:is(.dark *) :where(p):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-a\:text-current :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:currentColor}.prose-a\:decoration-muted-foreground :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){-webkit-text-decoration-color:var(--muted-foreground);-webkit-text-decoration-color:var(--muted-foreground);-webkit-text-decoration-color:var(--muted-foreground);text-decoration-color:var(--muted-foreground)}.prose-a\:underline-offset-2 :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-underline-offset:2px}.prose-blockquote\:border-border :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--border)}.prose-blockquote\:text-muted-foreground :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--muted-foreground)}.prose-strong\:text-current :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)),.dark\:prose-strong\:text-current:is(.dark *) :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:currentColor}.prose-code\:rounded-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:var(--radius)}.prose-code\:border :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){border-style:var(--tw-border-style);border-width:1px}.prose-code\:border-hair :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--sb-hair)}.prose-code\:bg-muted :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--muted)}.prose-code\:px-1 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline:var(--spacing)}.prose-code\:py-0\.5 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){padding-block:calc(var(--spacing) * .5)}.prose-code\:text-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.prose-code\:font-semibold :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose-code\:text-current :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:currentColor}.prose-code\:before\:content-none :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-code\:after\:content-none :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:var(--tw-content);--tw-content:none;content:none}.dark\:prose-code\:text-current:is(.dark *) :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:currentColor}.prose-pre\:overflow-auto :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){overflow:auto}.prose-pre\:rounded-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:var(--radius)}.prose-pre\:border :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-style:var(--tw-border-style);border-width:1px}.prose-pre\:border-hair :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--sb-hair)}.prose-pre\:bg-card :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--card)}.prose-pre\:text-current :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:currentColor}.dark\:prose-pre\:bg-card:is(.dark *) :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--card)}.dark\:prose-pre\:text-current:is(.dark *) :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:currentColor}.prose-li\:marker\:text-muted-foreground :where(li):not(:where([class~=not-prose],[class~=not-prose] *)) ::marker{color:var(--muted-foreground)}.prose-li\:marker\:text-muted-foreground :where(li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--muted-foreground)}.prose-li\:marker\:text-muted-foreground :where(li):not(:where([class~=not-prose],[class~=not-prose] *)) ::-webkit-details-marker{color:var(--muted-foreground)}.prose-li\:marker\:text-muted-foreground :where(li):not(:where([class~=not-prose],[class~=not-prose] *))::-webkit-details-marker{color:var(--muted-foreground)}.prose-table\:m-0 :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){margin:0}.prose-thead\:border-0 :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tr\:border-0 :where(tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-style:var(--tw-border-style);border-width:0}.prose-th\:p-0 :where(th):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-td\:p-0 :where(td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:0}.prose-hr\:border-border :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--border)}.\[\&_\.grid\]\:mt-2 .grid{margin-top:calc(var(--spacing) * 2)}.\[\&_\.grid\]\:border-l .grid{border-left-style:var(--tw-border-style);border-left-width:1px}.\[\&_\.grid\]\:border-border .grid{border-color:var(--border)}.\[\&_\.grid\]\:pl-3 .grid{padding-left:calc(var(--spacing) * 3)}.\[\&_canvas\]\:outline-none canvas{--tw-outline-style:none;outline-style:none}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:\!size-3 svg{width:calc(var(--spacing) * 3)!important;height:calc(var(--spacing) * 3)!important}.\[\&_svg\]\:size-2\.5 svg{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:h-3 svg{height:calc(var(--spacing) * 3)}.\[\&_svg\]\:h-3\.5 svg{height:calc(var(--spacing) * 3.5)}.\[\&_svg\]\:h-4 svg{height:calc(var(--spacing) * 4)}.\[\&_svg\]\:w-3 svg{width:calc(var(--spacing) * 3)}.\[\&_svg\]\:w-3\.5 svg{width:calc(var(--spacing) * 3.5)}.\[\&_svg\]\:w-4 svg{width:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\>\[data-entry-kind\=tool\]\+\[data-entry-kind\=tool\]\]\:-mt-3>[data-entry-kind=tool]+[data-entry-kind=tool]{margin-top:calc(var(--spacing) * -3)}}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/ui/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/ui/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/ui/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/ui/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/ui/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/ui/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--black:#000;--white:#fff;--zinc-50:#fafafa;--zinc-100:#f4f4f5;--zinc-200:#e4e4e7;--zinc-300:#d4d4d8;--zinc-400:#a1a1aa;--zinc-500:#71717a;--zinc-600:#52525b;--zinc-700:#3f3f46;--zinc-800:#27272a;--zinc-900:#18181b;--zinc-950:#09090b;--ops-bg:var(--zinc-100);--ops-sheet:var(--zinc-50);--ops-card:var(--zinc-100);--ops-ink:var(--zinc-900);--ops-muted:var(--zinc-600);--ops-dim:var(--zinc-400);--ops-line:var(--zinc-300);--ops-hair:var(--zinc-200);--ops-strong:var(--zinc-900);--ops-strong-text:var(--zinc-50);--ops-hover-surface:transparent;--ops-control-active:var(--zinc-200);--ops-row-selected:var(--zinc-200);--ops-brand-bright:#2bf563;--ops-brand-bright-hover:#24dc59;--ops-viz-blue:#5b8def;--ops-viz-gold:#d8a640;--ops-viz-red:#db5b5b;--ops-status-success:#4fc77a;--ops-purple:#7c3aed;--ops-orange:#d97706;--sb-bg:var(--ops-sheet);--sb-card:var(--ops-card);--sb-hover:var(--ops-hover-surface);--sb-active:var(--ops-control-active);--sb-row-selected:var(--ops-row-selected);--sb-ink:var(--ops-ink);--sb-muted:var(--ops-muted);--sb-dim:var(--ops-dim);--sb-line:var(--ops-line);--sb-hair:var(--ops-hair);--sb-action:var(--ops-brand-bright);--sb-action-hover:var(--ops-brand-bright-hover);--sb-action-muted:var(--sb-action)}@supports (color:color-mix(in lab, red, red)){:root{--sb-action-muted:color-mix(in srgb, var(--sb-action) 35%, transparent)}}:root{--sb-action-text:var(--zinc-950);--sb-green:var(--ops-brand-bright);--sb-header:var(--sb-bg)}@supports (color:color-mix(in lab, red, red)){:root{--sb-header:color-mix(in srgb, var(--sb-bg) 95%, transparent)}}:root{--sb-status-success-ink:#166534;--sb-status-success-fill:#dcfce7;--sb-status-danger-ink:#991b1b;--sb-status-danger-fill:#fee2e2;--sb-status-pending-ink:#854d0e;--sb-status-pending-fill:#fef9c3;--sb-status-neutral-ink:var(--zinc-700);--sb-status-neutral-fill:var(--zinc-200);--sb-tone-agent:var(--ops-purple);--sb-tone-generation:var(--ops-viz-blue);--sb-tone-tool:var(--ops-orange);--sb-tone-text:var(--white);--sb-overlay:var(--black)}@supports (color:color-mix(in lab, red, red)){:root{--sb-overlay:color-mix(in srgb, var(--black) 12%, transparent)}}:root{--sb-popover-ring:var(--sb-ink)}@supports (color:color-mix(in lab, red, red)){:root{--sb-popover-ring:color-mix(in srgb, var(--sb-ink) 12%, transparent)}}:root{--sb-selection:var(--sb-ink)}@supports (color:color-mix(in lab, red, red)){:root{--sb-selection:color-mix(in srgb, var(--sb-ink) 18%, transparent)}}:root{--sb-scrollbar:var(--sb-muted)}@supports (color:color-mix(in lab, red, red)){:root{--sb-scrollbar:color-mix(in srgb, var(--sb-muted) 30%, transparent)}}:root{--sb-scrollbar-hover:var(--sb-muted)}@supports (color:color-mix(in lab, red, red)){:root{--sb-scrollbar-hover:color-mix(in srgb, var(--sb-muted) 52%, transparent)}}:root{--sb-inset-highlight:var(--sb-ink)}@supports (color:color-mix(in lab, red, red)){:root{--sb-inset-highlight:color-mix(in srgb, var(--sb-ink) 6%, transparent)}}:root{--sb-code:#48504c;--sb-code-keyword:#9c2c62;--sb-code-type:#087d78;--sb-code-function:#255fa6;--sb-code-string:#257044;--sb-code-number:#955810;--sb-code-literal:#7144a5;--sb-code-comment:#788079;--background:var(--sb-bg);--foreground:var(--sb-ink);--card:var(--sb-card);--card-foreground:var(--sb-ink);--popover:var(--sb-bg);--popover-foreground:var(--sb-ink);--primary:var(--sb-action);--primary-foreground:var(--sb-action-text);--secondary:var(--sb-card);--secondary-foreground:var(--sb-ink);--muted:var(--sb-card);--muted-foreground:var(--sb-muted);--accent:var(--sb-active);--accent-foreground:var(--sb-ink);--destructive:var(--sb-status-danger-ink);--destructive-foreground:var(--sb-status-danger-fill);--border:var(--sb-line);--input:var(--sb-line);--ring:var(--ops-strong);--chart-1:var(--ops-viz-gold);--chart-2:var(--ops-viz-blue);--chart-3:var(--ops-viz-red);--chart-4:var(--ops-status-success);--chart-5:var(--ops-brand-bright);--radius:.375rem;--sidebar:var(--sb-bg);--sidebar-foreground:var(--sb-ink);--sidebar-primary:var(--sb-action);--sidebar-primary-foreground:var(--sb-action-text);--sidebar-accent:var(--sb-active);--sidebar-accent-foreground:var(--sb-ink);--sidebar-border:var(--sb-line);--sidebar-ring:var(--ops-strong)}.dark,[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--ops-bg:var(--black);--ops-sheet:var(--zinc-950);--ops-card:var(--zinc-900);--ops-ink:var(--zinc-300);--ops-muted:var(--zinc-500);--ops-dim:var(--zinc-700);--ops-line:var(--zinc-800);--ops-hair:var(--ops-line);--ops-strong:var(--white);--ops-strong-text:var(--zinc-950);--ops-control-active:var(--zinc-950);--ops-row-selected:var(--zinc-900);--sb-status-success-ink:#86efac;--sb-status-success-fill:#14532d;--sb-status-danger-ink:#fca5a5;--sb-status-danger-fill:#7f1d1d;--sb-status-pending-ink:#fde047;--sb-status-pending-fill:#713f12;--sb-status-neutral-ink:var(--zinc-300);--sb-status-neutral-fill:var(--zinc-800);--sb-code:#b7c0ca;--sb-code-keyword:#e6a15c;--sb-code-type:#62c3b5;--sb-code-function:#78aee8;--sb-code-string:#9fbd73;--sb-code-number:#bd93d8;--sb-code-literal:#df7d68;--sb-code-comment:#56606a}@keyframes studio-stream-gradient-settle{to{opacity:1}}.studio-markdown [data-state=revealing]{opacity:var(--anvia-stream-reveal-opacity,1);animation:studio-stream-gradient-settle var(--anvia-stream-reveal-duration,.18s) linear both}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.studio-markdown [data-state=revealing]{opacity:1;animation:none}}@property --tw-border-spacing-x{syntax:"<length>";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"<length>";inherits:false;initial-value:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes pulse{50%{opacity:.5}}
@@ -1,2 +1,2 @@
1
- import{n as e,r as t}from"./dist-xrWIzsxw.js";var n=t();function r({className:t,type:r,...i}){return(0,n.jsx)(`input`,{type:r,className:e(`h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base text-foreground outline-none transition-colors placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-50 dark:bg-transparent dark:disabled:bg-muted`,t),...i})}export{r as t};
2
- //# sourceMappingURL=input-C35vs5wD.js.map
1
+ import{n as e,r as t}from"./dist-gzPjmjmv.js";var n=t();function r({className:t,type:r,...i}){return(0,n.jsx)(`input`,{type:r,className:e(`h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base text-foreground outline-none transition-colors placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-50 dark:bg-transparent dark:disabled:bg-muted`,t),...i})}export{r as t};
2
+ //# sourceMappingURL=input-DjRTBLA6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-DjRTBLA6.js","names":["cn","require_jsx_runtime","import_jsx_runtime","Input","props","className"],"sources":["../../../src/ui/app/components/ui/input.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport function Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n className={cn(\n \"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base text-foreground outline-none transition-colors placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-50 dark:bg-transparent dark:disabled:bg-muted\",\n className,\n )}\n {...props}\n />\n );\n}\n"],"mappings":"wDAGA,SAAgBG,EAAM,CAAE,YAAW,OAAM,GAAGC,GAAwC,CAClF,OACE,EAAAF,EAAA,IAAA,CAAC,QAAD,CACQ,OACN,UAAWF,EACT,2XACAK,CACF,EACA,GAAID,CACL,CAAA,CAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge-model-B6kRb7zc.js","names":[],"sources":["../../../src/ui/app/modules/knowledge/knowledge-model.ts"],"sourcesContent":["import type {\n StudioAgentKnowledgeConfig,\n StudioKnowledgeItem,\n StudioKnowledgeSourceKind,\n StudioKnowledgeSourceSummary,\n} from \"../../../../types\";\nimport type { KnowledgeTab } from \"../shared/types\";\n\nexport const itemLimit = 50;\n\nexport type KnowledgeSourceRef = {\n key: string;\n agentId: string;\n agentName: string;\n source: StudioKnowledgeSourceSummary;\n};\n\nexport type ItemState = {\n key: string;\n loading: boolean;\n items: StudioKnowledgeItem[];\n nextCursor?: string;\n totalCount?: number;\n inspectable: boolean;\n message?: string;\n error?: string;\n};\n\nexport function flattenSources(agents: StudioAgentKnowledgeConfig[]): KnowledgeSourceRef[] {\n return agents.flatMap((agent) =>\n agent.sources.map((source, index) => ({\n key: `${agent.agentId}:${sourceId(source, index)}`,\n agentId: agent.agentId,\n agentName: agent.agentName ?? agent.agentId,\n source: withSourceId(source, index),\n })),\n );\n}\n\nexport const knowledgeTabs: Array<{ id: KnowledgeTab; label: string }> = [\n { id: \"static-context\", label: \"Static Context\" },\n { id: \"dynamic-context\", label: \"Dynamic Context\" },\n { id: \"dynamic-tools\", label: \"Dynamic Tools\" },\n { id: \"retrieval-log\", label: \"Retrieval Log\" },\n];\n\nfunction withSourceId(\n source: StudioKnowledgeSourceSummary,\n index: number,\n): StudioKnowledgeSourceSummary {\n return source.sourceId === undefined\n ? { ...source, sourceId: fallbackSourceId(source, index) }\n : source;\n}\n\nexport function sourceId(source: StudioKnowledgeSourceSummary, index = 0): string {\n return source.sourceId ?? fallbackSourceId(source, index);\n}\n\nfunction fallbackSourceId(source: StudioKnowledgeSourceSummary, index: number): string {\n switch (source.kind) {\n case \"static_context\":\n return \"static-context\";\n case \"dynamic_context\":\n return `dynamic-context-${source.registrationIndex ?? index}`;\n case \"dynamic_tools\":\n return `dynamic-tools-${source.registrationIndex ?? index}`;\n }\n}\n\nfunction sumKind(sources: StudioKnowledgeSourceSummary[], kind: StudioKnowledgeSourceKind): number {\n return sources\n .filter((source) => source.kind === kind)\n .reduce((total, source) => total + (source.itemCount ?? source.count), 0);\n}\n\nexport function sourceLabel(kind: StudioKnowledgeSourceKind): string {\n switch (kind) {\n case \"static_context\":\n return \"Static context\";\n case \"dynamic_context\":\n return \"Dynamic context\";\n case \"dynamic_tools\":\n return \"Dynamic tools\";\n }\n}\n\nexport function sourceKindForTab(tab: KnowledgeTab): StudioKnowledgeSourceKind | undefined {\n switch (tab) {\n case \"static-context\":\n return \"static_context\";\n case \"dynamic-context\":\n return \"dynamic_context\";\n case \"dynamic-tools\":\n return \"dynamic_tools\";\n case \"retrieval-log\":\n return undefined;\n }\n}\n\nexport function tabLabel(tab: KnowledgeTab): string {\n return knowledgeTabs.find((item) => item.id === tab)?.label ?? \"Knowledge\";\n}\n\nexport function tabCountLabel(\n tab: KnowledgeTab,\n sources: KnowledgeSourceRef[],\n evidenceCount: number,\n): string {\n const sourceKind = sourceKindForTab(tab);\n if (sourceKind === undefined) {\n return `${evidenceCount} entries`;\n }\n const tabSources = sources.filter((source) => source.source.kind === sourceKind);\n const itemCount = sumKind(\n tabSources.map((source) => source.source),\n sourceKind,\n );\n return `${tabSources.length} sources / ${itemCount} items`;\n}\n\nexport function itemKindLabel(kind: StudioKnowledgeItem[\"kind\"]): string {\n switch (kind) {\n case \"static_context\":\n return \"Static context\";\n case \"dynamic_context\":\n return \"Dynamic context\";\n case \"dynamic_tool\":\n return \"Dynamic tool\";\n }\n}\n"],"mappings":"AA4BA,SAAgB,EAAe,EAA4D,CACzF,OAAO,EAAO,QAAS,GACrB,EAAM,QAAQ,KAAK,EAAQ,KAAW,CACpC,IAAK,GAAG,EAAM,QAAQ,GAAG,EAAS,EAAQ,CAAK,IAC/C,QAAS,EAAM,QACf,UAAW,EAAM,WAAa,EAAM,QACpC,OAAQ,EAAa,EAAQ,CAAK,CACpC,EAAE,CACJ,CACF,CAEA,IAAa,EAA4D,CACvE,CAAE,GAAI,iBAAkB,MAAO,gBAAiB,EAChD,CAAE,GAAI,kBAAmB,MAAO,iBAAkB,EAClD,CAAE,GAAI,gBAAiB,MAAO,eAAgB,EAC9C,CAAE,GAAI,gBAAiB,MAAO,eAAgB,CAChD,EAEA,SAAS,EACP,EACA,EAC8B,CAC9B,OAAO,EAAO,WAAa,IAAA,GACvB,CAAE,GAAG,EAAQ,SAAU,EAAiB,EAAQ,CAAK,CAAE,EACvD,CACN,CAEA,SAAgB,EAAS,EAAsC,EAAQ,EAAW,CAChF,OAAO,EAAO,UAAY,EAAiB,EAAQ,CAAK,CAC1D,CAEA,SAAS,EAAiB,EAAsC,EAAuB,CACrF,OAAQ,EAAO,KAAf,CACE,IAAK,iBACH,MAAO,iBACT,IAAK,kBACH,MAAO,mBAAmB,EAAO,mBAAqB,IACxD,IAAK,gBACH,MAAO,iBAAiB,EAAO,mBAAqB,GACxD,CACF,CAQA,SAAgB,EAAY,EAAyC,CACnE,OAAQ,EAAR,CACE,IAAK,iBACH,MAAO,iBACT,IAAK,kBACH,MAAO,kBACT,IAAK,gBACH,MAAO,eACX,CACF,CAEA,SAAgB,EAAiB,EAA0D,CACzF,OAAQ,EAAR,CACE,IAAK,iBACH,MAAO,iBACT,IAAK,kBACH,MAAO,kBACT,IAAK,gBACH,MAAO,gBACT,IAAK,gBACH,MACJ,CACF,CAEA,SAAgB,EAAS,EAA2B,CAClD,OAAO,EAAc,KAAM,GAAS,EAAK,KAAO,CAAG,CAAC,EAAE,OAAS,WACjE"}
1
+ {"version":3,"file":"knowledge-model-B6kRb7zc.js","names":["flattenSources","agents","agent","sourceId","source","index","withSourceId","knowledgeTabs","fallbackSourceId","sourceLabel","kind","sourceKindForTab","tab","tabLabel","item"],"sources":["../../../src/ui/app/modules/knowledge/knowledge-model.ts"],"sourcesContent":["import type {\n StudioAgentKnowledgeConfig,\n StudioKnowledgeItem,\n StudioKnowledgeSourceKind,\n StudioKnowledgeSourceSummary,\n} from \"../../../../types\";\nimport type { KnowledgeTab } from \"../shared/types\";\n\nexport const itemLimit = 50;\n\nexport type KnowledgeSourceRef = {\n key: string;\n agentId: string;\n agentName: string;\n source: StudioKnowledgeSourceSummary;\n};\n\nexport type ItemState = {\n key: string;\n loading: boolean;\n items: StudioKnowledgeItem[];\n nextCursor?: string;\n totalCount?: number;\n inspectable: boolean;\n message?: string;\n error?: string;\n};\n\nexport function flattenSources(agents: StudioAgentKnowledgeConfig[]): KnowledgeSourceRef[] {\n return agents.flatMap((agent) =>\n agent.sources.map((source, index) => ({\n key: `${agent.agentId}:${sourceId(source, index)}`,\n agentId: agent.agentId,\n agentName: agent.agentName ?? agent.agentId,\n source: withSourceId(source, index),\n })),\n );\n}\n\nexport const knowledgeTabs: Array<{ id: KnowledgeTab; label: string }> = [\n { id: \"static-context\", label: \"Static Context\" },\n { id: \"dynamic-context\", label: \"Dynamic Context\" },\n { id: \"dynamic-tools\", label: \"Dynamic Tools\" },\n { id: \"retrieval-log\", label: \"Retrieval Log\" },\n];\n\nfunction withSourceId(\n source: StudioKnowledgeSourceSummary,\n index: number,\n): StudioKnowledgeSourceSummary {\n return source.sourceId === undefined\n ? { ...source, sourceId: fallbackSourceId(source, index) }\n : source;\n}\n\nexport function sourceId(source: StudioKnowledgeSourceSummary, index = 0): string {\n return source.sourceId ?? fallbackSourceId(source, index);\n}\n\nfunction fallbackSourceId(source: StudioKnowledgeSourceSummary, index: number): string {\n switch (source.kind) {\n case \"static_context\":\n return \"static-context\";\n case \"dynamic_context\":\n return `dynamic-context-${source.registrationIndex ?? index}`;\n case \"dynamic_tools\":\n return `dynamic-tools-${source.registrationIndex ?? index}`;\n }\n}\n\nfunction sumKind(sources: StudioKnowledgeSourceSummary[], kind: StudioKnowledgeSourceKind): number {\n return sources\n .filter((source) => source.kind === kind)\n .reduce((total, source) => total + (source.itemCount ?? source.count), 0);\n}\n\nexport function sourceLabel(kind: StudioKnowledgeSourceKind): string {\n switch (kind) {\n case \"static_context\":\n return \"Static context\";\n case \"dynamic_context\":\n return \"Dynamic context\";\n case \"dynamic_tools\":\n return \"Dynamic tools\";\n }\n}\n\nexport function sourceKindForTab(tab: KnowledgeTab): StudioKnowledgeSourceKind | undefined {\n switch (tab) {\n case \"static-context\":\n return \"static_context\";\n case \"dynamic-context\":\n return \"dynamic_context\";\n case \"dynamic-tools\":\n return \"dynamic_tools\";\n case \"retrieval-log\":\n return undefined;\n }\n}\n\nexport function tabLabel(tab: KnowledgeTab): string {\n return knowledgeTabs.find((item) => item.id === tab)?.label ?? \"Knowledge\";\n}\n\nexport function tabCountLabel(\n tab: KnowledgeTab,\n sources: KnowledgeSourceRef[],\n evidenceCount: number,\n): string {\n const sourceKind = sourceKindForTab(tab);\n if (sourceKind === undefined) {\n return `${evidenceCount} entries`;\n }\n const tabSources = sources.filter((source) => source.source.kind === sourceKind);\n const itemCount = sumKind(\n tabSources.map((source) => source.source),\n sourceKind,\n );\n return `${tabSources.length} sources / ${itemCount} items`;\n}\n\nexport function itemKindLabel(kind: StudioKnowledgeItem[\"kind\"]): string {\n switch (kind) {\n case \"static_context\":\n return \"Static context\";\n case \"dynamic_context\":\n return \"Dynamic context\";\n case \"dynamic_tool\":\n return \"Dynamic tool\";\n }\n}\n"],"mappings":"AA4BA,SAAgBA,EAAe,EAA4D,CACzF,OAAOC,EAAO,QAAS,GACrBC,EAAM,QAAQ,KAAK,EAAQ,KAAW,CACpC,IAAK,GAAGA,EAAM,QAAQ,GAAGC,EAASC,EAAQC,CAAK,IAC/C,QAASH,EAAM,QACf,UAAWA,EAAM,WAAaA,EAAM,QACpC,OAAQI,EAAaF,EAAQC,CAAK,CACpC,EAAE,CACJ,CACF,CAEA,IAAaE,EAA4D,CACvE,CAAE,GAAI,iBAAkB,MAAO,gBAAiB,EAChD,CAAE,GAAI,kBAAmB,MAAO,iBAAkB,EAClD,CAAE,GAAI,gBAAiB,MAAO,eAAgB,EAC9C,CAAE,GAAI,gBAAiB,MAAO,eAAgB,CAChD,EAEA,SAASD,EACP,EACA,EAC8B,CAC9B,OAAOF,EAAO,WAAa,IAAA,GACvB,CAAE,GAAGA,EAAQ,SAAUI,EAAiBJ,EAAQC,CAAK,CAAE,EACvDD,CACN,CAEA,SAAgBD,EAAS,EAAsC,EAAQ,EAAW,CAChF,OAAOC,EAAO,UAAYI,EAAiBJ,EAAQC,CAAK,CAC1D,CAEA,SAASG,EAAiB,EAAsC,EAAuB,CACrF,OAAQJ,EAAO,KAAf,CACE,IAAK,iBACH,MAAO,iBACT,IAAK,kBACH,MAAO,mBAAmBA,EAAO,mBAAqBC,IACxD,IAAK,gBACH,MAAO,iBAAiBD,EAAO,mBAAqBC,GACxD,CACF,CAQA,SAAgBI,EAAY,EAAyC,CACnE,OAAQC,EAAR,CACE,IAAK,iBACH,MAAO,iBACT,IAAK,kBACH,MAAO,kBACT,IAAK,gBACH,MAAO,eACX,CACF,CAEA,SAAgBC,EAAiB,EAA0D,CACzF,OAAQC,EAAR,CACE,IAAK,iBACH,MAAO,iBACT,IAAK,kBACH,MAAO,kBACT,IAAK,gBACH,MAAO,gBACT,IAAK,gBACH,MACJ,CACF,CAEA,SAAgBC,EAAS,EAA2B,CAClD,OAAON,EAAc,KAAM,GAASO,EAAK,KAAOF,CAAG,CAAC,EAAE,OAAS,WACjE"}
@@ -0,0 +1,2 @@
1
+ import{i as e,r as t,s as n}from"./dist-gzPjmjmv.js";import{b as r,t as i}from"./button-4bdMllZ8.js";import{t as a}from"./ArrowClockwise.es-DZEjRq0J.js";import{t as o}from"./icon-B3s_bapw.js";import{a as s,i as c,o as l,r as u,t as d}from"./knowledge-model-B6kRb7zc.js";import{a as f,i as p,r as m,t as h}from"./studio-ZpV3GAsn.js";import{t as g}from"./badge-D6eyQQ0T.js";import{n as _,t as v}from"./renderers-C1LvbME4.js";var y=n(e(),1),b=t();function x(e){let t=e.source!==void 0&&e.state?.key===e.source.key?e.state:void 0;if(e.source?.source.kind===`dynamic_tools`)return(0,b.jsx)(w,{source:e.source,state:t,onLoadMore:e.onLoadMore});let n=S(e.source,t);return(0,b.jsxs)(`section`,{className:`grid min-h-0 grid-rows-[minmax(0,1fr)_auto] overflow-hidden`,children:[(0,b.jsx)(`div`,{className:`min-h-0 overflow-auto`,children:(0,b.jsx)(`div`,{className:`pb-4 pt-0`,children:n===void 0?(0,b.jsx)(`div`,{className:`grid gap-3`,children:t?.items.map(t=>(0,b.jsx)(C,{item:t,source:e.source},`${t.kind}:${t.id}`))}):(0,b.jsx)(h,{title:n.title,text:n.text})})}),(0,b.jsxs)(`div`,{className:`flex min-h-12 items-center justify-between gap-3 border-t border-hair bg-muted py-2`,children:[(0,b.jsx)(`span`,{className:` text-xs text-muted-foreground`,children:t===void 0?`0 loaded`:`${t.items.length} loaded`}),(0,b.jsx)(i,{className:`h-8 min-h-8`,type:`button`,variant:`secondary`,disabled:t?.loading===!0||t?.nextCursor===void 0,onClick:e.onLoadMore,children:`Load more`})]})]})}function S(e,t){if(e===void 0)return{title:`No knowledge source selected`,text:`Choose a knowledge source to inspect its stored items.`};if(t===void 0||t.loading&&t.items.length===0)return{title:`Loading items`,text:`Reading items from the selected knowledge source.`};if(t.error!==void 0)return{title:`Knowledge source error`,text:t.error};if(t.inspectable===!1)return{title:`Source unavailable`,text:t.message??`This source does not expose browseable items.`};if(t.items.length===0)return{title:`No items`,text:`The selected knowledge source is empty.`}}function C(e){return e.item.kind===`dynamic_tool`?(0,b.jsx)(`article`,{className:`rounded-none border border-hair bg-background p-4`,children:(0,b.jsx)(E,{item:e.item,source:e.source})}):(0,b.jsxs)(`article`,{className:`grid gap-3 rounded-none border border-hair bg-background p-4`,children:[(0,b.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-3`,children:[(0,b.jsx)(`div`,{className:`min-w-0`,children:(0,b.jsx)(`div`,{className:`truncate text-xs font-semibold text-foreground`,children:e.item.toolName??e.item.id})}),e.item.parameterKeys===void 0||e.item.parameterKeys.length===0?null:(0,b.jsxs)(g,{children:[e.item.parameterKeys.length,` params`]})]}),e.item.description===void 0||e.item.description.length===0?null:(0,b.jsx)(`p`,{className:`m-0 text-sm leading-6 text-muted-foreground [overflow-wrap:anywhere]`,children:e.item.description}),e.item.text===void 0?null:(0,b.jsx)(`p`,{className:`m-0 whitespace-pre-wrap text-sm leading-6 text-foreground [overflow-wrap:anywhere]`,children:e.item.text}),e.item.document===void 0?null:(0,b.jsx)(B,{title:`Document`,value:e.item.document}),e.item.metadata===void 0?null:(0,b.jsx)(B,{title:`Metadata`,value:e.item.metadata}),e.item.parameterKeys===void 0||e.item.parameterKeys.length===0?null:(0,b.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.item.parameterKeys.map(e=>(0,b.jsx)(g,{children:e},e))})]})}function w(e){let t=e.state===void 0||e.state.loading,n=(0,y.useMemo)(()=>(e.state?.items??[]).filter(M),[e.state?.items]),[r,a]=(0,y.useState)(``),o=n.find(e=>e.id===r)??n[0],c=(0,y.useMemo)(()=>N(n),[n]);return(0,y.useEffect)(()=>{n.length===0?a(``):n.some(e=>e.id===r)||a(n[0]?.id??``)},[r,n]),(0,b.jsxs)(`section`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)_auto] overflow-hidden`,children:[(0,b.jsxs)(`header`,{className:`grid min-h-16 grid-cols-[minmax(0,1fr)_auto] items-center gap-4 border-b border-hair py-3 max-md:grid-cols-1`,children:[(0,b.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,b.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:`Runtime tool index`}),(0,b.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1 text-sm`,children:[(0,b.jsx)(`span`,{className:`font-semibold text-foreground`,children:e.source.source.label??s(e.source.source.kind)}),(0,b.jsx)(`span`,{className:`text-muted-foreground`,children:e.source.agentName})]})]}),(0,b.jsxs)(`div`,{className:`flex min-w-0 flex-wrap justify-end gap-2 max-md:justify-start`,children:[(0,b.jsx)(F,{label:`tools`,value:n.length}),(0,b.jsx)(F,{label:`params`,value:c.parameterCount}),(0,b.jsx)(F,{label:`required`,value:c.requiredCount})]})]}),(0,b.jsxs)(`div`,{className:`grid min-h-0 grid-cols-[minmax(270px,0.34fr)_minmax(0,1fr)] overflow-hidden max-lg:grid-cols-1 max-lg:grid-rows-[minmax(220px,0.44fr)_minmax(0,1fr)]`,children:[(0,b.jsx)(`aside`,{className:`min-h-0 overflow-auto border-r border-hair pr-3 max-lg:border-b max-lg:border-r-0 max-lg:pr-0`,children:(0,b.jsxs)(`div`,{className:`grid gap-1 py-3 pr-3 max-lg:pr-0`,children:[e.source===void 0?(0,b.jsx)(V,{text:`No knowledge source selected`}):null,t&&n.length===0?(0,b.jsx)(V,{text:`Loading dynamic tools`}):null,e.state?.error===void 0?null:(0,b.jsx)(V,{text:e.state.error}),e.state?.inspectable===!1?(0,b.jsx)(V,{text:e.state.message??`This source does not expose browseable tools.`}):null,e.state?.inspectable!==!1&&!t&&n.length===0?(0,b.jsx)(V,{text:`No dynamic tools in this source`}):null,n.map(e=>(0,b.jsx)(T,{active:o?.id===e.id,item:e,onSelect:()=>a(e.id)},e.id))]})}),(0,b.jsx)(`div`,{className:`min-h-0 overflow-auto py-4 pl-5 max-lg:pl-0`,children:o===void 0?(0,b.jsx)(k,{}):(0,b.jsx)(E,{item:o,source:e.source})})]}),(0,b.jsxs)(`div`,{className:`flex min-h-12 items-center justify-between gap-3 border-t border-hair bg-background py-2`,children:[(0,b.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.state===void 0?`0 loaded`:`${e.state.items.length} loaded`}),(0,b.jsx)(i,{className:`h-8 min-h-8`,type:`button`,variant:`secondary`,disabled:t||e.state?.nextCursor===void 0,onClick:e.onLoadMore,children:`Load more`})]})]})}function T(e){let t=A(e.item),n=j(e.item),r=n.filter(e=>e.required).length,i=t.name??e.item.toolName??e.item.id;return(0,b.jsxs)(`button`,{className:[`grid min-w-0 gap-2 rounded-lg border border-transparent px-3 py-3 text-left transition duration-200 hover:border-hair hover:bg-transparent hover:text-foreground focus-visible:border-ring focus-visible:outline-none`,e.active?`border-hair bg-row-selected text-foreground`:`text-muted-foreground`].join(` `),type:`button`,onClick:e.onSelect,children:[(0,b.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,b.jsx)(`span`,{className:`min-w-0 truncate font-mono text-sm font-semibold text-foreground`,children:i}),(0,b.jsx)(`span`,{className:`shrink-0 text-xs tabular-nums text-muted-foreground`,children:n.length})]}),(0,b.jsx)(`p`,{className:`m-0 line-clamp-2 text-xs leading-5 text-muted-foreground`,children:t.description??e.item.description??`No description`}),(0,b.jsxs)(`div`,{className:`flex min-w-0 flex-wrap gap-2 text-[11px] font-medium text-muted-foreground`,children:[(0,b.jsxs)(`span`,{children:[r,` required`]}),(0,b.jsxs)(`span`,{children:[n.length-r,` optional`]})]})]})}function E(e){let t=A(e.item),n=j(e.item),r=t.description??e.item.description,i=t.name??e.item.toolName??e.item.id;return(0,b.jsxs)(`article`,{className:`grid min-w-0 gap-5`,children:[(0,b.jsxs)(`header`,{className:`grid gap-4 border-b border-hair pb-5`,children:[(0,b.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-4 max-md:grid`,children:[(0,b.jsxs)(`div`,{className:`grid min-w-0 gap-2`,children:[(0,b.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:`Selected tool`}),(0,b.jsx)(`h2`,{className:`m-0 truncate font-mono text-2xl font-semibold leading-none text-foreground`,children:i})]}),(0,b.jsxs)(`div`,{className:`flex min-w-0 flex-wrap justify-end gap-2 max-md:justify-start`,children:[(0,b.jsxs)(g,{children:[n.length,` params`]}),(0,b.jsxs)(g,{children:[n.filter(e=>e.required).length,` required`]})]})]}),r===void 0||r.length===0?null:(0,b.jsx)(`p`,{className:`m-0 max-w-[72ch] text-base leading-7 text-muted-foreground [overflow-wrap:anywhere]`,children:r}),(0,b.jsx)(`div`,{className:`min-w-0 overflow-x-auto border-y border-hair bg-muted px-3 py-2`,children:(0,b.jsx)(`code`,{className:`font-mono text-sm leading-6 text-foreground`,children:P(i,n)})})]}),(0,b.jsx)(D,{parameters:n}),(0,b.jsx)(O,{item:e.item,source:e.source}),e.item.document===void 0?null:(0,b.jsx)(L,{title:`Raw definition`,value:e.item.document}),e.item.metadata===void 0?null:(0,b.jsx)(L,{title:`Metadata`,value:e.item.metadata})]})}function D(e){return(0,b.jsxs)(`section`,{className:`grid gap-3`,children:[(0,b.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,b.jsx)(`h3`,{className:`m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:`Parameters`}),(0,b.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground`,children:e.parameters.length===0?`No parameters`:`${e.parameters.length} defined`})]}),e.parameters.length===0?(0,b.jsx)(`div`,{className:`border-y border-dashed border-hair px-3 py-4 text-sm text-muted-foreground`,children:`This tool does not declare input parameters.`}):(0,b.jsx)(`div`,{className:`min-w-0 overflow-hidden border-y border-hair`,children:e.parameters.map(e=>(0,b.jsxs)(`div`,{className:`grid min-w-0 grid-cols-[minmax(140px,0.24fr)_minmax(96px,0.14fr)_minmax(96px,0.14fr)_minmax(0,1fr)] gap-4 border-b border-hair py-3 last:border-b-0 max-md:grid-cols-1 max-md:gap-1`,children:[(0,b.jsx)(`div`,{className:`min-w-0 font-mono text-sm font-semibold text-foreground [overflow-wrap:anywhere]`,children:e.name}),(0,b.jsx)(`div`,{className:`text-sm text-muted-foreground [overflow-wrap:anywhere]`,children:e.type}),(0,b.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:e.required?`Required`:`Optional`}),(0,b.jsx)(`div`,{className:`text-sm leading-6 text-muted-foreground [overflow-wrap:anywhere]`,children:e.description??`No description`})]},e.name))})]})}function O(e){let t=[{label:`Agent`,value:e.source?.agentName??e.source?.agentId},{label:`Source`,value:e.source===void 0?void 0:`${e.source.source.label??s(e.source.source.kind)} / ${u(e.source.source)}`},{label:`Item ID`,value:e.item.id}].filter(e=>e.value!==void 0);return t.length===0?null:(0,b.jsxs)(`section`,{className:`grid gap-3 border-t border-hair pt-4`,children:[(0,b.jsx)(`h3`,{className:`m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:`Source`}),(0,b.jsx)(`dl`,{className:`grid border-y border-hair sm:grid-cols-3 sm:divide-x sm:divide-hair`,children:t.map(e=>(0,b.jsxs)(`div`,{className:`min-w-0 px-3 py-3 first:pl-0 last:pr-0`,children:[(0,b.jsx)(`dt`,{className:`text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:e.label}),(0,b.jsx)(`dd`,{className:`m-0 mt-1 truncate text-sm font-medium text-foreground`,children:e.value})]},e.label))})]})}function k(){return(0,b.jsx)(h,{className:`h-full`,title:`No dynamic tool selected`,text:`Select a tool from the index to inspect its definition and parameters.`})}function A(e){let t=r(e.document)?e.document:void 0,n=r(t?.definition)?t.definition:void 0;return{name:typeof n?.name==`string`?n.name:typeof t?.toolName==`string`?t.toolName:e.toolName,description:typeof n?.description==`string`?n.description:e.description,parameters:n?.parameters}}function j(e){let t=A(e),n=r(t.parameters)?t.parameters:void 0,i=r(n?.properties)?n.properties:void 0,a=new Set(Array.isArray(n?.required)?n.required.filter(e=>typeof e==`string`):[]);return i===void 0?(e.parameterKeys??[]).map(e=>({name:e,type:`unknown`,required:!1,description:void 0})):Object.entries(i).map(([e,t])=>{let n=r(t)?t:{};return{name:e,type:I(n.type),required:a.has(e),description:typeof n.description==`string`?n.description:void 0}})}function M(e){return e.kind===`dynamic_tool`}function N(e){return e.reduce((e,t)=>{let n=j(t);return e.parameterCount+=n.length,e.requiredCount+=n.filter(e=>e.required).length,e},{parameterCount:0,requiredCount:0})}function P(e,t){return t.length===0?`${e}()`:`${e}({ ${t.map(e=>`${e.name}${e.required?``:`?`}: ${e.type}`).join(`, `)} })`}function F(e){return(0,b.jsxs)(`span`,{className:`inline-flex h-8 items-center gap-2 border border-hair bg-background px-2.5 text-xs font-medium text-muted-foreground`,children:[(0,b.jsx)(`span`,{className:`font-semibold tabular-nums text-foreground`,children:e.value}),e.label]})}function I(e){if(typeof e==`string`)return e;if(Array.isArray(e)){let t=e.filter(e=>typeof e==`string`);return t.length===0?`unknown`:t.join(` / `)}return`unknown`}function L(e){let t=R(e.value);return(0,b.jsxs)(`details`,{className:`group rounded-none border border-hair bg-card`,children:[(0,b.jsxs)(`summary`,{className:`flex cursor-pointer list-none items-center justify-between gap-3 px-4 py-3 text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground marker:hidden`,children:[(0,b.jsx)(`span`,{children:e.title}),(0,b.jsx)(`span`,{className:`text-xs normal-case tracking-normal text-muted-foreground group-open:hidden`,children:`Show`}),(0,b.jsx)(`span`,{className:`hidden text-xs normal-case tracking-normal text-muted-foreground group-open:inline`,children:`Hide`})]}),(0,b.jsx)(`div`,{className:`border-t border-hair`,children:(0,b.jsx)(`pre`,{className:`m-0 max-h-96 overflow-auto p-4 font-mono text-xs leading-5 text-foreground`,children:(0,b.jsx)(`code`,{children:(0,b.jsx)(v,{text:t})})})})]})}function R(e){try{return JSON.stringify(e,null,2)}catch{return JSON.stringify(String(e),null,2)}}function z(e){return(0,b.jsxs)(`section`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background`,children:[(0,b.jsx)(`div`,{className:`border-b border-hair px-4 py-3`,children:(0,b.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-3`,children:[(0,b.jsxs)(`div`,{className:`min-w-0`,children:[(0,b.jsx)(`h2`,{className:`m-0 truncate text-sm font-semibold text-foreground`,children:`Retrieval log`}),(0,b.jsx)(`p`,{className:`m-0 mt-1 truncate text-xs text-muted-foreground`,children:`traces / retrieval-evidence`})]}),(0,b.jsxs)(g,{children:[e.evidence.length,` entries`]})]})}),(0,b.jsxs)(`div`,{className:`min-h-0 overflow-auto p-4`,children:[e.evidence.length===0?(0,b.jsx)(h,{className:`h-full`,title:`No retrieval evidence`,text:`Retrieval activity will appear here after an agent queries a knowledge source.`}):null,(0,b.jsx)(`div`,{className:`grid gap-3`,children:e.evidence.map(t=>(0,b.jsxs)(`article`,{className:`grid gap-3 rounded-none border border-hair bg-background p-3`,children:[(0,b.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-3`,children:[(0,b.jsxs)(`div`,{className:`min-w-0`,children:[(0,b.jsx)(`div`,{className:`truncate text-sm font-semibold text-foreground`,children:t.observationName}),(0,b.jsxs)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:[`Turn `,t.turn]})]}),(0,b.jsx)(i,{className:`h-auto min-h-0 rounded-lg border border-border bg-muted px-2 py-1 text-xs text-muted-foreground`,type:`button`,variant:`ghost`,onClick:()=>e.onOpenTrace(t.traceId),children:`Trace`})]}),(0,b.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,b.jsxs)(g,{children:[t.documentCount,` docs`]}),(0,b.jsxs)(g,{children:[t.toolCount,` tools`]})]}),t.query===void 0?null:(0,b.jsxs)(`p`,{className:`m-0 text-sm leading-6 text-muted-foreground [overflow-wrap:anywhere]`,children:[(0,b.jsx)(`span`,{className:` text-xs font-semibold uppercase tracking-[0.14em] text-foreground`,children:`Query`}),` `,t.query]}),t.documents.slice(0,2).map(e=>(0,b.jsxs)(`p`,{className:`m-0 text-xs leading-5 text-muted-foreground [overflow-wrap:anywhere]`,children:[(0,b.jsx)(`span`,{className:` text-foreground`,children:e.id??`document`}),` `,e.text??``]},`${e.id??`doc`}:${e.text??``}`)),t.tools.length===0?null:(0,b.jsxs)(`p`,{className:`m-0 text-xs leading-5 text-muted-foreground`,children:[`Tools: `,t.tools.join(`, `)]})]},`${t.traceId}:${t.observationId}`))})]})]})}function B(e){return(0,b.jsxs)(`div`,{className:`grid gap-2 border-t border-hair pt-3`,children:[(0,b.jsx)(`div`,{className:` text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:e.title}),(0,b.jsx)(_,{value:e.value})]})}function V(e){return(0,b.jsx)(`div`,{className:`rounded-lg border border-dashed border-border px-4 py-3 text-sm font-medium text-muted-foreground`,children:e.text})}function H(e){let[t,n]=(0,y.useState)(``),[r,s]=(0,y.useState)(),g=(0,y.useMemo)(()=>e.summary?.agents??[],[e.summary]),_=e.summary?.evidence??[],v=(0,y.useMemo)(()=>d(g),[g]),S=c(e.activeTab),C=(0,y.useMemo)(()=>S===void 0?[]:v.filter(e=>e.source.kind===S),[S,v]),w=C.find(e=>e.key===t)??C[0],T=W({activeTab:e.activeTab,enabled:e.enabled,evidenceCount:_.length,loading:e.loading,sourceCount:C.length});(0,y.useEffect)(()=>{if(C.length===0){n(``);return}if(C.some(e=>e.key===t))return;let e=C.find(e=>e.source.inspectable===!0&&(e.source.itemCount??0)>0)??C.find(e=>e.source.inspectable===!0)??C[0];n(e?.key??``)},[t,C]);let E=(0,y.useCallback)(async(e,t)=>{let n=e.key;s(r=>{let i={key:n,loading:!0,inspectable:r?.key===n?r.inspectable:e.source.inspectable===!0,items:t.append&&r?.key===n?r.items:[]};return t.append&&r?.key===n&&r.nextCursor!==void 0&&(i.nextCursor=r.nextCursor),r?.key===n&&r.totalCount!==void 0&&(i.totalCount=r.totalCount),i});try{let r=new URLSearchParams({agentId:e.agentId,sourceId:u(e.source),limit:`50`});t.cursor!==void 0&&r.set(`cursor`,t.cursor);let i=await fetch(`/knowledge/items?${r.toString()}`);if(!i.ok)throw Error(`Knowledge items failed with HTTP ${i.status}`);let a=await i.json();s(e=>{if(e?.key!==n)return e;let r={key:n,loading:!1,inspectable:a.inspectable,items:t.append?[...e.items,...a.items]:a.items};return a.nextCursor!==void 0&&(r.nextCursor=a.nextCursor),a.totalCount!==void 0&&(r.totalCount=a.totalCount),a.message!==void 0&&(r.message=a.message),r})}catch(e){s(t=>t?.key===n?{key:n,loading:!1,inspectable:t.inspectable,items:t.items,error:e instanceof Error?e.message:String(e)}:t)}},[]);return(0,y.useEffect)(()=>{!e.enabled||w===void 0?s(void 0):E(w,{append:!1})},[E,e.enabled,w]),(0,b.jsxs)(f,{className:`grid-rows-[auto_minmax(0,1fr)]`,"aria-label":l(e.activeTab),children:[(0,b.jsx)(p,{title:l(e.activeTab),description:G(e.activeTab),action:(0,b.jsxs)(i,{className:`h-8 min-h-8 gap-2`,type:`button`,variant:`secondary`,disabled:!e.enabled,onClick:e.onRefresh,children:[(0,b.jsx)(o,{icon:a,"aria-hidden":`true`}),`Refresh`]})}),(0,b.jsx)(m,{className:`grid grid-rows-[minmax(0,1fr)] overflow-hidden`,children:T===void 0?e.activeTab===`retrieval-log`?(0,b.jsx)(z,{evidence:_,onOpenTrace:e.onOpenTrace}):(0,b.jsx)(U,{sources:C,selectedKey:w?.key??``,activeTab:e.activeTab,onSelect:n,children:(0,b.jsx)(x,{source:w,state:r,onLoadMore:()=>{w!==void 0&&E(w,r?.nextCursor===void 0?{append:!0}:{append:!0,cursor:r.nextCursor})}})}):(0,b.jsx)(h,{className:`h-full`,title:T.title,text:T.text})})]})}function U(e){let t=e.sources.length>1;return(0,b.jsxs)(`div`,{className:[`grid min-h-0 gap-3 overflow-hidden`,t?`grid-rows-[auto_minmax(0,1fr)]`:`grid-rows-[minmax(0,1fr)]`].join(` `),children:[t?(0,b.jsx)(`div`,{className:`min-w-0 overflow-x-auto border-b border-hair`,children:(0,b.jsxs)(`div`,{className:`flex min-h-11 min-w-max items-center gap-2`,children:[(0,b.jsx)(`span`,{className:`mr-2 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:l(e.activeTab)}),e.sources.map(t=>(0,b.jsxs)(`button`,{className:[`flex h-7 items-center gap-2 rounded-lg border border-hair bg-background px-2.5 text-xs font-semibold text-muted-foreground transition duration-200 hover:border-foreground hover:bg-transparent hover:text-foreground focus-visible:border-ring focus-visible:outline-none`,e.selectedKey===t.key?`border-hair bg-muted text-foreground`:``].join(` `),type:`button`,onClick:()=>e.onSelect(t.key),children:[(0,b.jsx)(`span`,{children:t.source.label??s(t.source.kind)}),t.source.itemCount===void 0?null:(0,b.jsx)(`span`,{className:`text-muted-foreground`,children:t.source.itemCount})]},t.key))]})}):null,e.children]})}function W(e){let t=l(e.activeTab);if(!e.enabled)return{title:`${t} unavailable`,text:`This Studio runtime does not expose knowledge inspection.`};let n=e.activeTab===`retrieval-log`?e.evidenceCount:e.sourceCount;if(e.loading&&n===0)return{title:`Loading ${t.toLowerCase()}`,text:`Reading knowledge metadata.`};if(!(n>0))switch(e.activeTab){case`retrieval-log`:return{title:`No retrieval evidence`,text:`Retrieval activity will appear here after an agent queries a knowledge source.`};case`static-context`:return{title:`No static context`,text:`No static context sources are registered in this Studio runtime.`};case`dynamic-context`:return{title:`No dynamic context`,text:`No dynamic context sources are registered in this Studio runtime.`};case`dynamic-tools`:return{title:`No dynamic tools`,text:`No dynamic tool sources are registered in this Studio runtime.`}}}function G(e){switch(e){case`static-context`:return`Browse configured static context exposed to agents.`;case`dynamic-context`:return`Inspect dynamic context chunks resolved at runtime.`;case`dynamic-tools`:return`Review dynamic tool definitions and parameters.`;case`retrieval-log`:return`Inspect retrieval evidence and jump into related traces.`}}export{H as KnowledgePage};
2
+ //# sourceMappingURL=knowledge-page-BpSbnDxl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-page-BpSbnDxl.js","names":["useMemo","useState","useState","useMemo","useCallback","ArrowClockwise","require_react","require_jsx_runtime","__toESM","isRecord","Button","m","StudioIcon","sourceLabel","sourceKindForTab","tabLabel","sourceId","flattenSources","StudioPageShell","StudioPageHeader","StudioPageContent","StudioEmptyState","Badge","JsonValueView","JsonSyntax","import_react","import_jsx_runtime","ItemBrowser","state","props","DynamicToolsBrowser","placeholder","knowledgeItemsPlaceholder","KnowledgeItemCard","item","source","DynamicToolInspector","JsonBlock","key","loading","tools","isDynamicToolItem","selectedId","setSelectedId","selectedTool","stats","dynamicToolStats","KnowledgeMetric","MutedRow","DynamicToolListItem","DynamicToolEmptyPanel","definition","dynamicToolDefinition","parameters","dynamicToolParameters","requiredCount","parameter","toolName","description","dynamicToolSignature","DynamicToolParameterList","DynamicToolSourceDetails","JsonDetails","details","detail","document","schema","properties","required","value","name","property","schemaTypeLabel","items","totals","labels","display","jsonDisplay","RetrievalLogPanel","KnowledgePage","selectedKey","setSelectedKey","itemState","setItemState","agents","evidence","sources","activeSourceKind","visibleSources","selectedSource","emptyState","knowledgeEmptyState","next","loadItems","sourceKey","current","options","params","response","page","error","knowledgePageDescription","SourceWorkspace","showSources","label","itemCount","tab"],"sources":["../../../src/ui/app/modules/knowledge/knowledge-panels.tsx","../../../src/ui/app/modules/knowledge/knowledge-page.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport type { StudioKnowledgeItem, StudioKnowledgeSummary } from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { StudioEmptyState } from \"../../components/ui/studio\";\nimport { isRecord } from \"../shared/object\";\nimport { JsonSyntax, JsonValueView } from \"../shared/renderers\";\nimport { type ItemState, type KnowledgeSourceRef, sourceId, sourceLabel } from \"./knowledge-model\";\n\nexport function ItemBrowser(props: {\n source: KnowledgeSourceRef | undefined;\n state: ItemState | undefined;\n onLoadMore: () => void;\n}) {\n const state =\n props.source !== undefined && props.state?.key === props.source.key ? props.state : undefined;\n if (props.source?.source.kind === \"dynamic_tools\") {\n return (\n <DynamicToolsBrowser source={props.source} state={state} onLoadMore={props.onLoadMore} />\n );\n }\n const placeholder = knowledgeItemsPlaceholder(props.source, state);\n\n return (\n <section className=\"grid min-h-0 grid-rows-[minmax(0,1fr)_auto] overflow-hidden\">\n <div className=\"min-h-0 overflow-auto\">\n <div className=\"pb-4 pt-0\">\n {placeholder === undefined ? (\n <div className=\"grid gap-3\">\n {state?.items.map((item) => (\n <KnowledgeItemCard\n item={item}\n key={`${item.kind}:${item.id}`}\n source={props.source}\n />\n ))}\n </div>\n ) : (\n <StudioEmptyState title={placeholder.title} text={placeholder.text} />\n )}\n </div>\n </div>\n <div className=\"flex min-h-12 items-center justify-between gap-3 border-t border-hair bg-muted py-2\">\n <span className=\" text-xs text-muted-foreground\">\n {state === undefined ? \"0 loaded\" : `${state.items.length} loaded`}\n </span>\n <Button\n className=\"h-8 min-h-8\"\n type=\"button\"\n variant=\"secondary\"\n disabled={state?.loading === true || state?.nextCursor === undefined}\n onClick={props.onLoadMore}\n >\n Load more\n </Button>\n </div>\n </section>\n );\n}\n\nfunction knowledgeItemsPlaceholder(\n source: KnowledgeSourceRef | undefined,\n state: ItemState | undefined,\n): { title: string; text: string } | undefined {\n if (source === undefined) {\n return {\n title: \"No knowledge source selected\",\n text: \"Choose a knowledge source to inspect its stored items.\",\n };\n }\n if (state === undefined || (state.loading && state.items.length === 0)) {\n return { title: \"Loading items\", text: \"Reading items from the selected knowledge source.\" };\n }\n if (state.error !== undefined) {\n return { title: \"Knowledge source error\", text: state.error };\n }\n if (state.inspectable === false) {\n return {\n title: \"Source unavailable\",\n text: state.message ?? \"This source does not expose browseable items.\",\n };\n }\n if (state.items.length === 0) {\n return { title: \"No items\", text: \"The selected knowledge source is empty.\" };\n }\n return undefined;\n}\n\nfunction KnowledgeItemCard(props: {\n item: StudioKnowledgeItem;\n source: KnowledgeSourceRef | undefined;\n}) {\n if (props.item.kind === \"dynamic_tool\") {\n return (\n <article className=\"rounded-none border border-hair bg-background p-4\">\n <DynamicToolInspector item={props.item} source={props.source} />\n </article>\n );\n }\n\n return (\n <article className=\"grid gap-3 rounded-none border border-hair bg-background p-4\">\n <div className=\"flex min-w-0 items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-xs font-semibold text-foreground\">\n {props.item.toolName ?? props.item.id}\n </div>\n </div>\n {props.item.parameterKeys === undefined || props.item.parameterKeys.length === 0 ? null : (\n <Badge>{props.item.parameterKeys.length} params</Badge>\n )}\n </div>\n {props.item.description === undefined || props.item.description.length === 0 ? null : (\n <p className=\"m-0 text-sm leading-6 text-muted-foreground [overflow-wrap:anywhere]\">\n {props.item.description}\n </p>\n )}\n {props.item.text === undefined ? null : (\n <p className=\"m-0 whitespace-pre-wrap text-sm leading-6 text-foreground [overflow-wrap:anywhere]\">\n {props.item.text}\n </p>\n )}\n {props.item.document === undefined ? null : (\n <JsonBlock title=\"Document\" value={props.item.document} />\n )}\n {props.item.metadata === undefined ? null : (\n <JsonBlock title=\"Metadata\" value={props.item.metadata} />\n )}\n {props.item.parameterKeys === undefined || props.item.parameterKeys.length === 0 ? null : (\n <div className=\"flex flex-wrap gap-2\">\n {props.item.parameterKeys.map((key) => (\n <Badge key={key}>{key}</Badge>\n ))}\n </div>\n )}\n </article>\n );\n}\n\ntype DynamicToolParameter = {\n name: string;\n type: string;\n required: boolean;\n description: string | undefined;\n};\n\nfunction DynamicToolsBrowser(props: {\n source: KnowledgeSourceRef;\n state: ItemState | undefined;\n onLoadMore: () => void;\n}) {\n const loading = props.state === undefined || props.state.loading;\n const tools = useMemo(\n () => (props.state?.items ?? []).filter(isDynamicToolItem),\n [props.state?.items],\n );\n const [selectedId, setSelectedId] = useState(\"\");\n const selectedTool = tools.find((item) => item.id === selectedId) ?? tools[0];\n const stats = useMemo(() => dynamicToolStats(tools), [tools]);\n\n useEffect(() => {\n if (tools.length === 0) {\n setSelectedId(\"\");\n return;\n }\n if (!tools.some((item) => item.id === selectedId)) {\n setSelectedId(tools[0]?.id ?? \"\");\n }\n }, [selectedId, tools]);\n\n return (\n <section className=\"grid min-h-0 grid-rows-[auto_minmax(0,1fr)_auto] overflow-hidden\">\n <header className=\"grid min-h-16 grid-cols-[minmax(0,1fr)_auto] items-center gap-4 border-b border-hair py-3 max-md:grid-cols-1\">\n <div className=\"grid min-w-0 gap-1\">\n <div className=\"text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Runtime tool index\n </div>\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1 text-sm\">\n <span className=\"font-semibold text-foreground\">\n {props.source.source.label ?? sourceLabel(props.source.source.kind)}\n </span>\n <span className=\"text-muted-foreground\">{props.source.agentName}</span>\n </div>\n </div>\n <div className=\"flex min-w-0 flex-wrap justify-end gap-2 max-md:justify-start\">\n <KnowledgeMetric label=\"tools\" value={tools.length} />\n <KnowledgeMetric label=\"params\" value={stats.parameterCount} />\n <KnowledgeMetric label=\"required\" value={stats.requiredCount} />\n </div>\n </header>\n\n <div className=\"grid min-h-0 grid-cols-[minmax(270px,0.34fr)_minmax(0,1fr)] overflow-hidden max-lg:grid-cols-1 max-lg:grid-rows-[minmax(220px,0.44fr)_minmax(0,1fr)]\">\n <aside className=\"min-h-0 overflow-auto border-r border-hair pr-3 max-lg:border-b max-lg:border-r-0 max-lg:pr-0\">\n <div className=\"grid gap-1 py-3 pr-3 max-lg:pr-0\">\n {props.source === undefined ? <MutedRow text=\"No knowledge source selected\" /> : null}\n {loading && tools.length === 0 ? <MutedRow text=\"Loading dynamic tools\" /> : null}\n {props.state?.error === undefined ? null : <MutedRow text={props.state.error} />}\n {props.state?.inspectable === false ? (\n <MutedRow\n text={props.state.message ?? \"This source does not expose browseable tools.\"}\n />\n ) : null}\n {props.state?.inspectable !== false && !loading && tools.length === 0 ? (\n <MutedRow text=\"No dynamic tools in this source\" />\n ) : null}\n {tools.map((item) => (\n <DynamicToolListItem\n active={selectedTool?.id === item.id}\n item={item}\n key={item.id}\n onSelect={() => setSelectedId(item.id)}\n />\n ))}\n </div>\n </aside>\n\n <div className=\"min-h-0 overflow-auto py-4 pl-5 max-lg:pl-0\">\n {selectedTool === undefined ? (\n <DynamicToolEmptyPanel />\n ) : (\n <DynamicToolInspector item={selectedTool} source={props.source} />\n )}\n </div>\n </div>\n\n <div className=\"flex min-h-12 items-center justify-between gap-3 border-t border-hair bg-background py-2\">\n <span className=\"text-xs text-muted-foreground\">\n {props.state === undefined ? \"0 loaded\" : `${props.state.items.length} loaded`}\n </span>\n <Button\n className=\"h-8 min-h-8\"\n type=\"button\"\n variant=\"secondary\"\n disabled={loading || props.state?.nextCursor === undefined}\n onClick={props.onLoadMore}\n >\n Load more\n </Button>\n </div>\n </section>\n );\n}\n\nfunction DynamicToolListItem(props: {\n item: StudioKnowledgeItem;\n active: boolean;\n onSelect: () => void;\n}) {\n const definition = dynamicToolDefinition(props.item);\n const parameters = dynamicToolParameters(props.item);\n const requiredCount = parameters.filter((parameter) => parameter.required).length;\n const toolName = definition.name ?? props.item.toolName ?? props.item.id;\n\n return (\n <button\n className={[\n \"grid min-w-0 gap-2 rounded-lg border border-transparent px-3 py-3 text-left transition duration-200 hover:border-hair hover:bg-transparent hover:text-foreground focus-visible:border-ring focus-visible:outline-none\",\n props.active ? \"border-hair bg-row-selected text-foreground\" : \"text-muted-foreground\",\n ].join(\" \")}\n type=\"button\"\n onClick={props.onSelect}\n >\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"min-w-0 truncate font-mono text-sm font-semibold text-foreground\">\n {toolName}\n </span>\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {parameters.length}\n </span>\n </div>\n <p className=\"m-0 line-clamp-2 text-xs leading-5 text-muted-foreground\">\n {definition.description ?? props.item.description ?? \"No description\"}\n </p>\n <div className=\"flex min-w-0 flex-wrap gap-2 text-[11px] font-medium text-muted-foreground\">\n <span>{requiredCount} required</span>\n <span>{parameters.length - requiredCount} optional</span>\n </div>\n </button>\n );\n}\n\nfunction DynamicToolInspector(props: {\n item: StudioKnowledgeItem;\n source: KnowledgeSourceRef | undefined;\n}) {\n const definition = dynamicToolDefinition(props.item);\n const parameters = dynamicToolParameters(props.item);\n const description = definition.description ?? props.item.description;\n const toolName = definition.name ?? props.item.toolName ?? props.item.id;\n\n return (\n <article className=\"grid min-w-0 gap-5\">\n <header className=\"grid gap-4 border-b border-hair pb-5\">\n <div className=\"flex min-w-0 items-start justify-between gap-4 max-md:grid\">\n <div className=\"grid min-w-0 gap-2\">\n <div className=\"text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Selected tool\n </div>\n <h2 className=\"m-0 truncate font-mono text-2xl font-semibold leading-none text-foreground\">\n {toolName}\n </h2>\n </div>\n <div className=\"flex min-w-0 flex-wrap justify-end gap-2 max-md:justify-start\">\n <Badge>{parameters.length} params</Badge>\n <Badge>{parameters.filter((parameter) => parameter.required).length} required</Badge>\n </div>\n </div>\n {description === undefined || description.length === 0 ? null : (\n <p className=\"m-0 max-w-[72ch] text-base leading-7 text-muted-foreground [overflow-wrap:anywhere]\">\n {description}\n </p>\n )}\n <div className=\"min-w-0 overflow-x-auto border-y border-hair bg-muted px-3 py-2\">\n <code className=\"font-mono text-sm leading-6 text-foreground\">\n {dynamicToolSignature(toolName, parameters)}\n </code>\n </div>\n </header>\n\n <DynamicToolParameterList parameters={parameters} />\n <DynamicToolSourceDetails item={props.item} source={props.source} />\n\n {props.item.document === undefined ? null : (\n <JsonDetails title=\"Raw definition\" value={props.item.document} />\n )}\n\n {props.item.metadata === undefined ? null : (\n <JsonDetails title=\"Metadata\" value={props.item.metadata} />\n )}\n </article>\n );\n}\n\nfunction DynamicToolParameterList(props: { parameters: DynamicToolParameter[] }) {\n return (\n <section className=\"grid gap-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <h3 className=\"m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Parameters\n </h3>\n <span className=\"text-xs font-medium text-muted-foreground\">\n {props.parameters.length === 0 ? \"No parameters\" : `${props.parameters.length} defined`}\n </span>\n </div>\n {props.parameters.length === 0 ? (\n <div className=\"border-y border-dashed border-hair px-3 py-4 text-sm text-muted-foreground\">\n This tool does not declare input parameters.\n </div>\n ) : (\n <div className=\"min-w-0 overflow-hidden border-y border-hair\">\n {props.parameters.map((parameter) => (\n <div\n className=\"grid min-w-0 grid-cols-[minmax(140px,0.24fr)_minmax(96px,0.14fr)_minmax(96px,0.14fr)_minmax(0,1fr)] gap-4 border-b border-hair py-3 last:border-b-0 max-md:grid-cols-1 max-md:gap-1\"\n key={parameter.name}\n >\n <div className=\"min-w-0 font-mono text-sm font-semibold text-foreground [overflow-wrap:anywhere]\">\n {parameter.name}\n </div>\n <div className=\"text-sm text-muted-foreground [overflow-wrap:anywhere]\">\n {parameter.type}\n </div>\n <div className=\"text-sm text-muted-foreground\">\n {parameter.required ? \"Required\" : \"Optional\"}\n </div>\n <div className=\"text-sm leading-6 text-muted-foreground [overflow-wrap:anywhere]\">\n {parameter.description ?? \"No description\"}\n </div>\n </div>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction DynamicToolSourceDetails(props: {\n item: StudioKnowledgeItem;\n source: KnowledgeSourceRef | undefined;\n}) {\n const details = [\n { label: \"Agent\", value: props.source?.agentName ?? props.source?.agentId },\n {\n label: \"Source\",\n value:\n props.source === undefined\n ? undefined\n : `${props.source.source.label ?? sourceLabel(props.source.source.kind)} / ${sourceId(\n props.source.source,\n )}`,\n },\n { label: \"Item ID\", value: props.item.id },\n ].filter((item): item is { label: string; value: string } => item.value !== undefined);\n\n if (details.length === 0) {\n return null;\n }\n\n return (\n <section className=\"grid gap-3 border-t border-hair pt-4\">\n <h3 className=\"m-0 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n Source\n </h3>\n <dl className=\"grid border-y border-hair sm:grid-cols-3 sm:divide-x sm:divide-hair\">\n {details.map((detail) => (\n <div className=\"min-w-0 px-3 py-3 first:pl-0 last:pr-0\" key={detail.label}>\n <dt className=\"text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n {detail.label}\n </dt>\n <dd className=\"m-0 mt-1 truncate text-sm font-medium text-foreground\">\n {detail.value}\n </dd>\n </div>\n ))}\n </dl>\n </section>\n );\n}\n\nfunction DynamicToolEmptyPanel() {\n return (\n <StudioEmptyState\n className=\"h-full\"\n title=\"No dynamic tool selected\"\n text=\"Select a tool from the index to inspect its definition and parameters.\"\n />\n );\n}\n\nfunction dynamicToolDefinition(item: StudioKnowledgeItem): {\n name: string | undefined;\n description: string | undefined;\n parameters: unknown;\n} {\n const document = isRecord(item.document) ? item.document : undefined;\n const definition = isRecord(document?.definition) ? document.definition : undefined;\n const name =\n typeof definition?.name === \"string\"\n ? definition.name\n : typeof document?.toolName === \"string\"\n ? document.toolName\n : item.toolName;\n const description =\n typeof definition?.description === \"string\" ? definition.description : item.description;\n\n return {\n name,\n description,\n parameters: definition?.parameters,\n };\n}\n\nfunction dynamicToolParameters(item: StudioKnowledgeItem): DynamicToolParameter[] {\n const definition = dynamicToolDefinition(item);\n const schema = isRecord(definition.parameters) ? definition.parameters : undefined;\n const properties = isRecord(schema?.properties) ? schema.properties : undefined;\n const required = new Set(\n Array.isArray(schema?.required)\n ? schema.required.filter((value): value is string => typeof value === \"string\")\n : [],\n );\n\n if (properties === undefined) {\n return (item.parameterKeys ?? []).map((name) => ({\n name,\n type: \"unknown\",\n required: false,\n description: undefined,\n }));\n }\n\n return Object.entries(properties).map(([name, value]) => {\n const property = isRecord(value) ? value : {};\n return {\n name,\n type: schemaTypeLabel(property.type),\n required: required.has(name),\n description: typeof property.description === \"string\" ? property.description : undefined,\n };\n });\n}\n\nfunction isDynamicToolItem(item: StudioKnowledgeItem): item is StudioKnowledgeItem & {\n kind: \"dynamic_tool\";\n} {\n return item.kind === \"dynamic_tool\";\n}\n\nfunction dynamicToolStats(items: StudioKnowledgeItem[]): {\n parameterCount: number;\n requiredCount: number;\n} {\n return items.reduce(\n (totals, item) => {\n const parameters = dynamicToolParameters(item);\n totals.parameterCount += parameters.length;\n totals.requiredCount += parameters.filter((parameter) => parameter.required).length;\n return totals;\n },\n { parameterCount: 0, requiredCount: 0 },\n );\n}\n\nfunction dynamicToolSignature(toolName: string, parameters: DynamicToolParameter[]): string {\n if (parameters.length === 0) {\n return `${toolName}()`;\n }\n return `${toolName}({ ${parameters\n .map((parameter) => `${parameter.name}${parameter.required ? \"\" : \"?\"}: ${parameter.type}`)\n .join(\", \")} })`;\n}\n\nfunction KnowledgeMetric(props: { label: string; value: number }) {\n return (\n <span className=\"inline-flex h-8 items-center gap-2 border border-hair bg-background px-2.5 text-xs font-medium text-muted-foreground\">\n <span className=\"font-semibold tabular-nums text-foreground\">{props.value}</span>\n {props.label}\n </span>\n );\n}\n\nfunction schemaTypeLabel(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n if (Array.isArray(value)) {\n const labels = value.filter((item): item is string => typeof item === \"string\");\n return labels.length === 0 ? \"unknown\" : labels.join(\" / \");\n }\n return \"unknown\";\n}\n\nfunction JsonDetails(props: { title: string; value: unknown }) {\n const display = jsonDisplay(props.value);\n\n return (\n <details className=\"group rounded-none border border-hair bg-card\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-4 py-3 text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground marker:hidden\">\n <span>{props.title}</span>\n <span className=\"text-xs normal-case tracking-normal text-muted-foreground group-open:hidden\">\n Show\n </span>\n <span className=\"hidden text-xs normal-case tracking-normal text-muted-foreground group-open:inline\">\n Hide\n </span>\n </summary>\n <div className=\"border-t border-hair\">\n <pre className=\"m-0 max-h-96 overflow-auto p-4 font-mono text-xs leading-5 text-foreground\">\n <code>\n <JsonSyntax text={display} />\n </code>\n </pre>\n </div>\n </details>\n );\n}\n\nfunction jsonDisplay(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return JSON.stringify(String(value), null, 2);\n }\n}\n\nexport function RetrievalLogPanel(props: {\n evidence: NonNullable<StudioKnowledgeSummary[\"evidence\"]>;\n onOpenTrace: (traceId: string) => void;\n}) {\n return (\n <section className=\"grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background\">\n <div className=\"border-b border-hair px-4 py-3\">\n <div className=\"flex min-w-0 items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <h2 className=\"m-0 truncate text-sm font-semibold text-foreground\">Retrieval log</h2>\n <p className=\"m-0 mt-1 truncate text-xs text-muted-foreground\">\n traces / retrieval-evidence\n </p>\n </div>\n <Badge>{props.evidence.length} entries</Badge>\n </div>\n </div>\n <div className=\"min-h-0 overflow-auto p-4\">\n {props.evidence.length === 0 ? (\n <StudioEmptyState\n className=\"h-full\"\n title=\"No retrieval evidence\"\n text=\"Retrieval activity will appear here after an agent queries a knowledge source.\"\n />\n ) : null}\n <div className=\"grid gap-3\">\n {props.evidence.map((item) => (\n <article\n className=\"grid gap-3 rounded-none border border-hair bg-background p-3\"\n key={`${item.traceId}:${item.observationId}`}\n >\n <div className=\"flex min-w-0 items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-semibold text-foreground\">\n {item.observationName}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">Turn {item.turn}</div>\n </div>\n <Button\n className=\"h-auto min-h-0 rounded-lg border border-border bg-muted px-2 py-1 text-xs text-muted-foreground\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => props.onOpenTrace(item.traceId)}\n >\n Trace\n </Button>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <Badge>{item.documentCount} docs</Badge>\n <Badge>{item.toolCount} tools</Badge>\n </div>\n {item.query === undefined ? null : (\n <p className=\"m-0 text-sm leading-6 text-muted-foreground [overflow-wrap:anywhere]\">\n <span className=\" text-xs font-semibold uppercase tracking-[0.14em] text-foreground\">\n Query\n </span>{\" \"}\n {item.query}\n </p>\n )}\n {item.documents.slice(0, 2).map((document) => (\n <p\n className=\"m-0 text-xs leading-5 text-muted-foreground [overflow-wrap:anywhere]\"\n key={`${document.id ?? \"doc\"}:${document.text ?? \"\"}`}\n >\n <span className=\" text-foreground\">{document.id ?? \"document\"}</span>{\" \"}\n {document.text ?? \"\"}\n </p>\n ))}\n {item.tools.length === 0 ? null : (\n <p className=\"m-0 text-xs leading-5 text-muted-foreground\">\n Tools: {item.tools.join(\", \")}\n </p>\n )}\n </article>\n ))}\n </div>\n </div>\n </section>\n );\n}\n\nfunction JsonBlock(props: { title: string; value: unknown }) {\n return (\n <div className=\"grid gap-2 border-t border-hair pt-3\">\n <div className=\" text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n {props.title}\n </div>\n <JsonValueView value={props.value} />\n </div>\n );\n}\n\nfunction MutedRow(props: { text: string }) {\n return (\n <div className=\"rounded-lg border border-dashed border-border px-4 py-3 text-sm font-medium text-muted-foreground\">\n {props.text}\n </div>\n );\n}\n","import { ArrowClockwise } from \"@phosphor-icons/react\";\nimport { type ReactNode, useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { StudioKnowledgeItemsPage, StudioKnowledgeSummary } from \"../../../../types\";\nimport { Button } from \"../../components/ui/button\";\nimport { StudioIcon } from \"../../components/ui/icon\";\nimport {\n StudioEmptyState,\n StudioPageContent,\n StudioPageHeader,\n StudioPageShell,\n} from \"../../components/ui/studio\";\nimport type { KnowledgeTab } from \"../shared/types\";\nimport {\n flattenSources,\n type ItemState,\n itemLimit,\n type KnowledgeSourceRef,\n sourceId,\n sourceKindForTab,\n sourceLabel,\n tabLabel,\n} from \"./knowledge-model\";\nimport { ItemBrowser, RetrievalLogPanel } from \"./knowledge-panels\";\n\nexport function KnowledgePage(props: {\n activeTab: KnowledgeTab;\n enabled: boolean;\n summary: StudioKnowledgeSummary | undefined;\n loading: boolean;\n onOpenTrace: (traceId: string) => void;\n onRefresh: () => void;\n}) {\n const [selectedKey, setSelectedKey] = useState(\"\");\n const [itemState, setItemState] = useState<ItemState | undefined>();\n\n const agents = useMemo(() => props.summary?.agents ?? [], [props.summary]);\n const evidence = props.summary?.evidence ?? [];\n const sources = useMemo(() => flattenSources(agents), [agents]);\n const activeSourceKind = sourceKindForTab(props.activeTab);\n const visibleSources = useMemo(\n () =>\n activeSourceKind === undefined\n ? []\n : sources.filter((source) => source.source.kind === activeSourceKind),\n [activeSourceKind, sources],\n );\n const selectedSource =\n visibleSources.find((source) => source.key === selectedKey) ?? visibleSources[0];\n const emptyState = knowledgeEmptyState({\n activeTab: props.activeTab,\n enabled: props.enabled,\n evidenceCount: evidence.length,\n loading: props.loading,\n sourceCount: visibleSources.length,\n });\n\n useEffect(() => {\n if (visibleSources.length === 0) {\n setSelectedKey(\"\");\n return;\n }\n if (visibleSources.some((source) => source.key === selectedKey)) {\n return;\n }\n const next =\n visibleSources.find(\n (source) => source.source.inspectable === true && (source.source.itemCount ?? 0) > 0,\n ) ??\n visibleSources.find((source) => source.source.inspectable === true) ??\n visibleSources[0];\n setSelectedKey(next?.key ?? \"\");\n }, [selectedKey, visibleSources]);\n\n const loadItems = useCallback(\n async (source: KnowledgeSourceRef, options: { append: boolean; cursor?: string }) => {\n const sourceKey = source.key;\n setItemState((current) => {\n const next: ItemState = {\n key: sourceKey,\n loading: true,\n inspectable:\n current?.key === sourceKey ? current.inspectable : source.source.inspectable === true,\n items: options.append && current?.key === sourceKey ? current.items : [],\n };\n if (options.append && current?.key === sourceKey && current.nextCursor !== undefined) {\n next.nextCursor = current.nextCursor;\n }\n if (current?.key === sourceKey && current.totalCount !== undefined) {\n next.totalCount = current.totalCount;\n }\n return next;\n });\n\n try {\n const params = new URLSearchParams({\n agentId: source.agentId,\n sourceId: sourceId(source.source),\n limit: String(itemLimit),\n });\n if (options.cursor !== undefined) {\n params.set(\"cursor\", options.cursor);\n }\n const response = await fetch(`/knowledge/items?${params.toString()}`);\n if (!response.ok) {\n throw new Error(`Knowledge items failed with HTTP ${response.status}`);\n }\n const page = (await response.json()) as StudioKnowledgeItemsPage;\n setItemState((current) => {\n if (current?.key !== sourceKey) {\n return current;\n }\n const next: ItemState = {\n key: sourceKey,\n loading: false,\n inspectable: page.inspectable,\n items: options.append ? [...current.items, ...page.items] : page.items,\n };\n if (page.nextCursor !== undefined) next.nextCursor = page.nextCursor;\n if (page.totalCount !== undefined) next.totalCount = page.totalCount;\n if (page.message !== undefined) next.message = page.message;\n return next;\n });\n } catch (error) {\n setItemState((current) => {\n if (current?.key !== sourceKey) {\n return current;\n }\n return {\n key: sourceKey,\n loading: false,\n inspectable: current.inspectable,\n items: current.items,\n error: error instanceof Error ? error.message : String(error),\n };\n });\n }\n },\n [],\n );\n\n useEffect(() => {\n if (!props.enabled || selectedSource === undefined) {\n setItemState(undefined);\n return;\n }\n void loadItems(selectedSource, { append: false });\n }, [loadItems, props.enabled, selectedSource]);\n\n return (\n <StudioPageShell\n className=\"grid-rows-[auto_minmax(0,1fr)]\"\n aria-label={tabLabel(props.activeTab)}\n >\n <StudioPageHeader\n title={tabLabel(props.activeTab)}\n description={knowledgePageDescription(props.activeTab)}\n action={\n <Button\n className=\"h-8 min-h-8 gap-2\"\n type=\"button\"\n variant=\"secondary\"\n disabled={!props.enabled}\n onClick={props.onRefresh}\n >\n <StudioIcon icon={ArrowClockwise} aria-hidden=\"true\" />\n Refresh\n </Button>\n }\n />\n <StudioPageContent className=\"grid grid-rows-[minmax(0,1fr)] overflow-hidden\">\n {emptyState !== undefined ? (\n <StudioEmptyState className=\"h-full\" title={emptyState.title} text={emptyState.text} />\n ) : props.activeTab === \"retrieval-log\" ? (\n <RetrievalLogPanel evidence={evidence} onOpenTrace={props.onOpenTrace} />\n ) : (\n <SourceWorkspace\n sources={visibleSources}\n selectedKey={selectedSource?.key ?? \"\"}\n activeTab={props.activeTab}\n onSelect={setSelectedKey}\n >\n <ItemBrowser\n source={selectedSource}\n state={itemState}\n onLoadMore={() => {\n if (selectedSource === undefined) {\n return;\n }\n void loadItems(\n selectedSource,\n itemState?.nextCursor === undefined\n ? { append: true }\n : { append: true, cursor: itemState.nextCursor },\n );\n }}\n />\n </SourceWorkspace>\n )}\n </StudioPageContent>\n </StudioPageShell>\n );\n}\n\nfunction SourceWorkspace(props: {\n sources: KnowledgeSourceRef[];\n selectedKey: string;\n activeTab: KnowledgeTab;\n onSelect: (key: string) => void;\n children: ReactNode;\n}) {\n const showSources = props.sources.length > 1;\n return (\n <div\n className={[\n \"grid min-h-0 gap-3 overflow-hidden\",\n showSources ? \"grid-rows-[auto_minmax(0,1fr)]\" : \"grid-rows-[minmax(0,1fr)]\",\n ].join(\" \")}\n >\n {showSources ? (\n <div className=\"min-w-0 overflow-x-auto border-b border-hair\">\n <div className=\"flex min-h-11 min-w-max items-center gap-2\">\n <span className=\"mr-2 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {tabLabel(props.activeTab)}\n </span>\n {props.sources.map((source) => (\n <button\n className={[\n \"flex h-7 items-center gap-2 rounded-lg border border-hair bg-background px-2.5 text-xs font-semibold text-muted-foreground transition duration-200 hover:border-foreground hover:bg-transparent hover:text-foreground focus-visible:border-ring focus-visible:outline-none\",\n props.selectedKey === source.key ? \"border-hair bg-muted text-foreground\" : \"\",\n ].join(\" \")}\n key={source.key}\n type=\"button\"\n onClick={() => props.onSelect(source.key)}\n >\n <span>{source.source.label ?? sourceLabel(source.source.kind)}</span>\n {source.source.itemCount === undefined ? null : (\n <span className=\"text-muted-foreground\">{source.source.itemCount}</span>\n )}\n </button>\n ))}\n </div>\n </div>\n ) : null}\n {props.children}\n </div>\n );\n}\n\nfunction knowledgeEmptyState(props: {\n activeTab: KnowledgeTab;\n enabled: boolean;\n evidenceCount: number;\n loading: boolean;\n sourceCount: number;\n}): { title: string; text: string } | undefined {\n const label = tabLabel(props.activeTab);\n if (!props.enabled) {\n return {\n title: `${label} unavailable`,\n text: \"This Studio runtime does not expose knowledge inspection.\",\n };\n }\n const itemCount = props.activeTab === \"retrieval-log\" ? props.evidenceCount : props.sourceCount;\n if (props.loading && itemCount === 0) {\n return { title: `Loading ${label.toLowerCase()}`, text: \"Reading knowledge metadata.\" };\n }\n if (itemCount > 0) {\n return undefined;\n }\n switch (props.activeTab) {\n case \"retrieval-log\":\n return {\n title: \"No retrieval evidence\",\n text: \"Retrieval activity will appear here after an agent queries a knowledge source.\",\n };\n case \"static-context\":\n return {\n title: \"No static context\",\n text: \"No static context sources are registered in this Studio runtime.\",\n };\n case \"dynamic-context\":\n return {\n title: \"No dynamic context\",\n text: \"No dynamic context sources are registered in this Studio runtime.\",\n };\n case \"dynamic-tools\":\n return {\n title: \"No dynamic tools\",\n text: \"No dynamic tool sources are registered in this Studio runtime.\",\n };\n }\n}\n\nfunction knowledgePageDescription(tab: KnowledgeTab): string {\n switch (tab) {\n case \"static-context\":\n return \"Browse configured static context exposed to agents.\";\n case \"dynamic-context\":\n return \"Inspect dynamic context chunks resolved at runtime.\";\n case \"dynamic-tools\":\n return \"Review dynamic tool definitions and parameters.\";\n case \"retrieval-log\":\n return \"Inspect retrieval evidence and jump into related traces.\";\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{i as e,r as t,s as n}from"./dist-gzPjmjmv.js";import{t as r}from"./button-4bdMllZ8.js";import{a as i,i as a,n as o,r as s,t as c}from"./select-DwjXlQvi.js";import{a as l,i as u,n as d,r as f,t as p}from"./studio-ZpV3GAsn.js";import{t as m}from"./badge-D6eyQQ0T.js";import{a as h,c as g,r as _,s as v,t as y,u as b}from"./tool-runner-BVvlqFJh.js";var x=n(e(),1),S=t();function C(e){let t=e.agents.find(t=>t.id===e.selectedAgentId)??e.agents[0],n=(0,x.useMemo)(()=>e.summary?.servers??[],[e.summary]),r=n.reduce((e,t)=>e+t.toolCount,0),m=(0,x.useMemo)(()=>E(n),[n]),[g,y]=(0,x.useState)(``),[b,C]=(0,x.useState)(`{}`),[T,D]=(0,x.useState)(`idle`),[O,k]=(0,x.useState)(),[A,j]=(0,x.useState)(``),M=(0,x.useMemo)(()=>m.find(e=>e.key===g)??m[0],[m,g]),N=(0,x.useRef)(``),P=(0,x.useRef)(0);(0,x.useEffect)(()=>{m.length===0?y(``):m.some(e=>e.key===g)||y(m[0]?.key??``)},[m,g]),(0,x.useEffect)(()=>{let e=M?.key??``;N.current!==e&&(N.current=e,P.current+=1,C(`{}`),D(`idle`),j(``),k(void 0))},[M]);async function F(){if(M===void 0)return;let e;try{e=JSON.parse(b)}catch(e){j(e instanceof Error?e.message:String(e)),k(void 0);return}D(`running`),j(``),k(void 0);let t=M.key,n=P.current+1;P.current=n;let r=()=>P.current===n&&N.current===t;try{let t=await fetch(`/agents/${encodeURIComponent(M.agentId)}/tools/${encodeURIComponent(M.name)}/runs`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({args:e})}),n=await t.json();if(!r())return;let i=v(n);if(i===void 0){j(`Unexpected Studio tool run response: ${h(n)}`);return}k(i),(!t.ok||i.status===`error`)&&j(h(i.error??i))}catch(e){r()&&j(e instanceof Error?e.message:String(e))}finally{r()&&D(`idle`)}}return(0,S.jsxs)(l,{className:`grid-rows-[auto_minmax(0,1fr)]`,"aria-label":`MCPs`,children:[(0,S.jsx)(u,{title:`MCPs`,description:`MCP servers and remote tools registered on Studio agents, grouped by server.`,action:(0,S.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center justify-end gap-2 max-sm:justify-start`,children:[(0,S.jsx)(d,{label:`servers`,value:n.length}),(0,S.jsx)(d,{label:`tools`,value:r}),e.agents.length>1?(0,S.jsxs)(c,{value:t?.id??``,onValueChange:e.onSelectAgent,children:[(0,S.jsx)(a,{className:`h-8 min-h-8 w-64 rounded-md border-border text-xs max-sm:w-full`,children:(0,S.jsx)(i,{placeholder:`Agent`})}),(0,S.jsx)(o,{align:`end`,children:e.agents.map(e=>(0,S.jsx)(s,{value:e.id,children:e.name??e.id},e.id))})]}):null]})}),(0,S.jsx)(f,{className:`overflow-auto`,children:e.enabled?e.loading?(0,S.jsx)(p,{title:`Loading MCPs`,text:`Reading registered MCP metadata.`}):n.length===0?(0,S.jsx)(p,{title:`No MCPs`,text:`The selected agent has no registered MCP tools.`}):(0,S.jsxs)(`div`,{className:`grid w-full gap-5`,children:[n.map(e=>(0,S.jsx)(w,{selectedToolKey:M?.key??``,server:e,onSelectTool:y},e.name)),m.length===0?null:(0,S.jsx)(_,{argsText:b,runError:A,runResponse:O,runState:T,selectedTool:M,onArgsTextChange:C,onRun:()=>void F()})]}):(0,S.jsx)(p,{title:`MCPs unavailable`,text:`No registered Studio agent exposes MCP tools.`})})]})}function w(e){return(0,S.jsxs)(`section`,{className:`overflow-hidden border-t`,children:[(0,S.jsxs)(`header`,{className:`grid min-h-14 grid-cols-[minmax(0,1fr)_auto] items-center gap-4 border-b bg-muted px-4`,children:[(0,S.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,S.jsx)(`h2`,{className:`m-0 truncate text-sm font-semibold text-foreground`,children:e.server.name}),(0,S.jsx)(`span`,{className:`truncate text-xs font-medium text-muted-foreground`,children:e.server.agentId})]}),(0,S.jsxs)(m,{className:`border-hair bg-background text-muted-foreground`,children:[e.server.toolCount,` tools`]})]}),(0,S.jsx)(`div`,{className:`mt-1 grid gap-1`,children:e.server.tools.map(t=>(0,S.jsx)(T,{serverName:e.server.name,active:e.selectedToolKey===D(e.server.name,t),tool:t,onSelectTool:e.onSelectTool},`${t.source}:${t.name}`))})]})}function T(e){let t=D(e.serverName,e.tool);return(0,S.jsxs)(`article`,{className:`grid grid-cols-[minmax(300px,0.75fr)_minmax(0,1fr)] gap-2 rounded-lg border border-transparent bg-background p-2 transition duration-200 hover:border-hair hover:bg-transparent max-lg:grid-cols-1`,children:[(0,S.jsxs)(`div`,{className:`grid content-start gap-4 rounded-lg bg-card p-3`,children:[(0,S.jsxs)(`div`,{className:`grid gap-1`,children:[(0,S.jsx)(`h3`,{className:`m-0 truncate text-sm font-semibold text-foreground`,children:e.tool.name}),(0,S.jsx)(`span`,{className:` text-xs font-medium text-muted-foreground`,children:e.tool.source})]}),(0,S.jsx)(`p`,{className:`m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground`,children:e.tool.description}),(0,S.jsxs)(`div`,{className:`flex min-w-0 flex-wrap gap-2`,children:[(0,S.jsx)(m,{className:b(e.tool.source),children:e.tool.source}),(0,S.jsxs)(m,{className:`border-hair bg-transparent text-muted-foreground`,children:[g(e.tool.parameters),` fields`]})]}),(0,S.jsx)(r,{className:`h-8 min-h-8 w-fit rounded-md px-3 text-xs`,type:`button`,variant:`secondary`,onClick:()=>e.onSelectTool(t),children:e.active?`Selected`:`Use`})]}),(0,S.jsx)(y,{value:e.tool.parameters,title:`Parameter schema`})]})}function E(e){return e.flatMap(e=>e.tools.map(t=>({key:D(e.name,t),agentId:e.agentId,name:t.name,description:t.description,parameters:t.parameters,source:t.source,mcpServerName:e.name,approval:t.approval})))}function D(e,t){return`${e}:${t.source}:${t.name}`}export{C as McpsPage};
2
+ //# sourceMappingURL=mcps-page-CAdyljvT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcps-page-CAdyljvT.js","names":["useMemo","useState","useRef","require_react","require_jsx_runtime","__toESM","Button","SelectValue","SelectTrigger","SelectContent","SelectItem","Select","StudioPageShell","StudioPageHeader","StudioHeaderMetric","StudioPageContent","StudioEmptyState","Badge","formatJson","schemaPropertyCount","ToolRunner","parseStudioToolRunResponse","SchemaBlock","sourceBadgeClass","import_react","import_jsx_runtime","McpsPage","selectedAgent","props","agent","servers","toolCount","total","server","runnableTools","mcpRunnableTools","selectedToolKey","setSelectedToolKey","argsText","setArgsText","runState","setRunState","runResponse","setRunResponse","runError","setRunError","selectedTool","tool","lastSelectedToolKeyRef","runRequestIdRef","nextSelectedToolKey","runSelectedTool","args","parseError","runToolKey","requestId","isCurrentRun","response","rawBody","body","error","McpServerSection","McpToolRow","mcpToolKey","toolKey","serverName"],"sources":["../../../src/ui/app/modules/mcps/mcps-page.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n StudioAgentMcpServerMetadata,\n StudioAgentMcpsSummary,\n StudioAgentMcpToolMetadata,\n StudioAgentToolMetadata,\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 formatJson,\n parseStudioToolRunResponse,\n SchemaBlock,\n schemaPropertyCount,\n sourceBadgeClass,\n ToolRunner,\n} from \"../tools/tool-runner\";\n\nexport function McpsPage(props: {\n agents: StudioConfig[\"agents\"];\n selectedAgentId: string;\n summary: StudioAgentMcpsSummary | 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 servers = useMemo(() => props.summary?.servers ?? [], [props.summary]);\n const toolCount = servers.reduce((total, server) => total + server.toolCount, 0);\n const runnableTools = useMemo(() => mcpRunnableTools(servers), [servers]);\n const [selectedToolKey, setSelectedToolKey] = 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 () => runnableTools.find((tool) => tool.key === selectedToolKey) ?? runnableTools[0],\n [runnableTools, selectedToolKey],\n );\n const lastSelectedToolKeyRef = useRef(\"\");\n const runRequestIdRef = useRef(0);\n\n useEffect(() => {\n if (runnableTools.length === 0) {\n setSelectedToolKey(\"\");\n return;\n }\n if (!runnableTools.some((tool) => tool.key === selectedToolKey)) {\n setSelectedToolKey(runnableTools[0]?.key ?? \"\");\n }\n }, [runnableTools, selectedToolKey]);\n\n useEffect(() => {\n const nextSelectedToolKey = selectedTool?.key ?? \"\";\n if (lastSelectedToolKeyRef.current === nextSelectedToolKey) {\n return;\n }\n lastSelectedToolKeyRef.current = nextSelectedToolKey;\n runRequestIdRef.current += 1;\n setArgsText(\"{}\");\n setRunState(\"idle\");\n setRunError(\"\");\n setRunResponse(undefined);\n }, [selectedTool]);\n\n async function runSelectedTool() {\n if (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 = selectedTool.key;\n const requestId = runRequestIdRef.current + 1;\n runRequestIdRef.current = requestId;\n const isCurrentRun = () =>\n runRequestIdRef.current === requestId && lastSelectedToolKeyRef.current === runToolKey;\n try {\n const response = await fetch(\n `/agents/${encodeURIComponent(selectedTool.agentId)}/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=\"MCPs\">\n <StudioPageHeader\n title=\"MCPs\"\n description=\"MCP servers and remote tools registered on Studio agents, grouped by server.\"\n action={\n <div className=\"flex min-w-0 flex-wrap items-center justify-end gap-2 max-sm:justify-start\">\n <StudioHeaderMetric label=\"servers\" value={servers.length} />\n <StudioHeaderMetric label=\"tools\" value={toolCount} />\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=\"MCPs unavailable\"\n text=\"No registered Studio agent exposes MCP tools.\"\n />\n ) : props.loading ? (\n <StudioEmptyState title=\"Loading MCPs\" text=\"Reading registered MCP metadata.\" />\n ) : servers.length === 0 ? (\n <StudioEmptyState\n title=\"No MCPs\"\n text=\"The selected agent has no registered MCP tools.\"\n />\n ) : (\n <div className=\"grid w-full gap-5\">\n {servers.map((server) => (\n <McpServerSection\n selectedToolKey={selectedTool?.key ?? \"\"}\n server={server}\n key={server.name}\n onSelectTool={setSelectedToolKey}\n />\n ))}\n {runnableTools.length === 0 ? null : (\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 )}\n </div>\n )}\n </StudioPageContent>\n </StudioPageShell>\n );\n}\n\nfunction McpServerSection(props: {\n server: StudioAgentMcpServerMetadata;\n selectedToolKey: string;\n onSelectTool: (toolKey: string) => void;\n}) {\n return (\n <section className=\"overflow-hidden border-t\">\n <header className=\"grid min-h-14 grid-cols-[minmax(0,1fr)_auto] items-center gap-4 border-b bg-muted px-4\">\n <div className=\"grid min-w-0 gap-1\">\n <h2 className=\"m-0 truncate text-sm font-semibold text-foreground\">\n {props.server.name}\n </h2>\n <span className=\"truncate text-xs font-medium text-muted-foreground\">\n {props.server.agentId}\n </span>\n </div>\n <Badge className=\"border-hair bg-background text-muted-foreground\">\n {props.server.toolCount} tools\n </Badge>\n </header>\n <div className=\"mt-1 grid gap-1\">\n {props.server.tools.map((tool) => (\n <McpToolRow\n serverName={props.server.name}\n active={props.selectedToolKey === mcpToolKey(props.server.name, tool)}\n tool={tool}\n key={`${tool.source}:${tool.name}`}\n onSelectTool={props.onSelectTool}\n />\n ))}\n </div>\n </section>\n );\n}\n\nfunction McpToolRow(props: {\n serverName: string;\n active: boolean;\n tool: StudioAgentMcpToolMetadata;\n onSelectTool: (toolKey: string) => void;\n}) {\n const toolKey = mcpToolKey(props.serverName, props.tool);\n return (\n <article className=\"grid grid-cols-[minmax(300px,0.75fr)_minmax(0,1fr)] gap-2 rounded-lg border border-transparent bg-background p-2 transition duration-200 hover:border-hair hover:bg-transparent max-lg:grid-cols-1\">\n <div className=\"grid content-start gap-4 rounded-lg bg-card p-3\">\n <div className=\"grid gap-1\">\n <h3 className=\"m-0 truncate text-sm font-semibold text-foreground\">{props.tool.name}</h3>\n <span className=\" text-xs font-medium text-muted-foreground\">{props.tool.source}</span>\n </div>\n <p className=\"m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground\">\n {props.tool.description}\n </p>\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <Badge className={sourceBadgeClass(props.tool.source)}>{props.tool.source}</Badge>\n <Badge className=\"border-hair bg-transparent text-muted-foreground\">\n {schemaPropertyCount(props.tool.parameters)} fields\n </Badge>\n </div>\n <Button\n className=\"h-8 min-h-8 w-fit rounded-md px-3 text-xs\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => props.onSelectTool(toolKey)}\n >\n {props.active ? \"Selected\" : \"Use\"}\n </Button>\n </div>\n <SchemaBlock value={props.tool.parameters} title=\"Parameter schema\" />\n </article>\n );\n}\n\ntype McpRunnableTool = StudioAgentToolMetadata & {\n key: string;\n mcpServerName: string;\n};\n\nfunction mcpRunnableTools(servers: StudioAgentMcpServerMetadata[]): McpRunnableTool[] {\n return servers.flatMap((server) =>\n server.tools.map((tool) => ({\n key: mcpToolKey(server.name, tool),\n agentId: server.agentId,\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n source: tool.source,\n mcpServerName: server.name,\n approval: tool.approval,\n })),\n );\n}\n\nfunction mcpToolKey(serverName: string, tool: StudioAgentMcpToolMetadata): string {\n return `${serverName}:${tool.source}:${tool.name}`;\n}\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import{i as e,r as t,s as n}from"./dist-gzPjmjmv.js";import{d as r,t as i}from"./button-4bdMllZ8.js";import{a,i as o,n as s,r as c,t as l}from"./select-DwjXlQvi.js";import{a as u,i as d,n as f,r as p,t as m}from"./studio-ZpV3GAsn.js";import{t as h}from"./badge-D6eyQQ0T.js";import{t as g}from"./renderers-C1LvbME4.js";function _(e){if(e.role!==`assistant`||!v(e.metadata))return;let t=e.metadata.anvia;if(!v(t))return;let n=t.generation;if(!v(n)||typeof n.provider!=`string`||typeof n.modelId!=`string`||!w(n.usage))return;let r={...n.usage};n.usage.details!==void 0&&(r={...r,details:{...n.usage.details}});let i={provider:n.provider,modelId:n.modelId,usage:r};return k(n.finishReason)&&(i.finishReason=n.finishReason),typeof n.providerFinishReason==`string`&&(i.providerFinishReason=n.providerFinishReason),y(n.contextUsage)&&(i.contextUsage={...n.contextUsage,model:{...n.contextUsage.model,context:{...n.contextUsage.model.context}}}),D(n.sources)&&(i.sources=n.sources.map(e=>({...e}))),O(n.providerToolCalls)&&(i.providerToolCalls=n.providerToolCalls.map(e=>{let t={...e};return e.details!==void 0&&(t={...t,details:{...e.details}}),t})),i}function v(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function y(e){if(!v(e)||!v(e.model))return!1;let t=e.model.context;if(typeof e.model.modelId==`string`&&v(t)&&x(t.contextWindow)&&S(t.maxInputTokens)&&S(t.maxOutputTokens)&&T(e.usedTokens)&&T(e.remainingTokens)&&C(e.usedPercent)&&C(e.remainingPercent)){let n=t.contextWindow,r=Math.max(0,n-e.usedTokens),i=Math.min(100,e.usedTokens/n*100),a=r/n*100;return e.remainingTokens===r&&b(e.usedPercent,i)&&b(e.remainingPercent,a)}return!1}function b(e,t){let n=Math.max(1,Math.abs(e),Math.abs(t));return Math.abs(e-t)<=2**-52*n*8}function x(e){return T(e)&&e>0}function S(e){return e===void 0||x(e)}function C(e){return T(e)&&e<=100}function w(e){return v(e)?T(e.inputTokens)&&T(e.outputTokens)&&T(e.totalTokens)&&T(e.cachedInputTokens)&&T(e.cacheCreationInputTokens)&&E(e.details):!1}function T(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0}function E(e){if(e===void 0)return!0;if(!v(e))return!1;let t,n=0;for(let[r,i]of Object.entries(e)){if(i===void 0||!T(i))return!1;r===`total`?t=i:n+=i}return t!==void 0&&t===n}function D(e){return Array.isArray(e)&&e.every(e=>v(e)&&e.type===`url`&&typeof e.url==`string`&&(e.title===void 0||typeof e.title==`string`)&&(e.id===void 0||typeof e.id==`string`)&&(e.startIndex===void 0||typeof e.startIndex==`number`)&&(e.endIndex===void 0||typeof e.endIndex==`number`))}function O(e){return Array.isArray(e)&&e.every(e=>v(e)&&typeof e.id==`string`&&typeof e.name==`string`&&(e.status===void 0||typeof e.status==`string`)&&(e.details===void 0||v(e.details)))}function k(e){return e===`stop`||e===`length`||e===`content-filter`||e===`tool-calls`||e===`other`}var A=n(e(),1),j=t();function M(e){return e.flatMap(e=>e.message.role===`assistant`?[{position:e.position,runId:e.runId,turn:e.turn,createdAt:e.createdAt,preview:I(e.message),generation:_(e.message)}]:[])}function N(e){let t=M(e.records);return(0,j.jsxs)(`section`,{className:`grid min-w-0 overflow-hidden border-y border-hair`,children:[(0,j.jsxs)(`header`,{className:`flex min-h-11 items-center justify-between gap-3 bg-muted px-3 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:[(0,j.jsx)(`span`,{children:`Assistant responses`}),(0,j.jsxs)(`span`,{className:`font-medium normal-case tracking-normal`,children:[t.length,` responses`]})]}),t.length===0?(0,j.jsx)(`div`,{className:`border-t border-hair px-4 py-8 text-center text-sm text-muted-foreground`,children:`No persisted assistant responses.`}):(0,j.jsx)(`div`,{className:`grid divide-y divide-hair border-t border-hair`,children:t.map(e=>(0,j.jsx)(P,{row:e},`${e.position}:${e.runId}`))})]})}function P(e){let t=e.row.generation;return(0,j.jsxs)(`article`,{className:`grid min-w-0 gap-3 px-3 py-4`,children:[(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center justify-between gap-2`,children:[(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,j.jsxs)(h,{className:`border-hair bg-muted text-foreground`,children:[`Turn `,e.row.turn]}),t===void 0?(0,j.jsx)(h,{className:`border-hair bg-background text-muted-foreground`,children:`Usage unavailable`}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(h,{className:`border-hair bg-muted text-foreground`,children:t.provider}),(0,j.jsx)(h,{className:`max-w-full truncate border-hair bg-muted text-foreground`,children:t.modelId})]})]}),(0,j.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:r(e.row.createdAt)})]}),(0,j.jsx)(`p`,{className:`m-0 whitespace-pre-wrap break-words text-sm leading-6 text-foreground`,children:e.row.preview}),t===void 0?null:(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-wrap gap-x-4 gap-y-1 text-xs text-muted-foreground`,children:[(0,j.jsx)(F,{label:`total`,value:t.usage.totalTokens,suffix:` tokens`}),(0,j.jsx)(F,{label:`input`,value:t.usage.inputTokens}),(0,j.jsx)(F,{label:`output`,value:t.usage.outputTokens}),(0,j.jsx)(F,{label:`cached`,value:t.usage.cachedInputTokens}),(0,j.jsx)(F,{label:`cache create`,value:t.usage.cacheCreationInputTokens})]})]})}function F(e){return(0,j.jsxs)(`span`,{children:[e.label,` `,e.value.toLocaleString(),e.suffix]})}function I(e){if(typeof e.content==`string`)return e.content.trim().length>0?L(e.content):`Assistant response`;let t=e.content.flatMap(e=>e.type===`text`?[e.text]:[]).join(`
2
+ `).trim();if(t.length>0)return L(t);let n=e.content.flatMap(e=>e.type===`tool-call`?[e.toolName]:[]);if(n.length>0)return`Tool call${n.length===1?``:`s`}: ${n.join(`, `)}`;let r=e.content.flatMap(e=>e.type===`reasoning`?[e.text]:[]).join(`
3
+ `).trim();if(r.length>0)return L(r);let i=e.content.filter(e=>e.type===`image`).length;return i>0?`${i} generated image${i===1?``:`s`}`:`Assistant response`}function L(e){let t=e.replace(/\s+/g,` `).trim();return t.length>220?`${t.slice(0,217)}...`:t}function R(e){let[t,n]=(0,A.useState)([]),[r,h]=(0,A.useState)(``),[g,_]=(0,A.useState)([]),[v,y]=(0,A.useState)([]),[b,x]=(0,A.useState)(``),[S,C]=(0,A.useState)(``),[w,T]=(0,A.useState)(),[E,D]=(0,A.useState)(),[O,k]=(0,A.useState)(!1),[M,N]=(0,A.useState)(!1),[P,F]=(0,A.useState)(!1),[I,L]=(0,A.useState)(``),R=(0,A.useRef)(0),B=t.find(e=>e.ref===r),H=(0,A.useCallback)(async()=>{if(!e.enabled)n([]),h(``);else{k(!0),L(``);try{let e=await fetch(`/memory/sources`);if(!e.ok)throw Error(`Memory sources failed with HTTP ${e.status}`);let t=await e.json();n(t.sources),h(e=>t.sources.some(t=>t.ref===e)?e:Z(t.sources))}catch(e){L(e instanceof Error?e.message:String(e))}finally{k(!1)}}},[e.enabled]);(0,A.useEffect)(()=>{H()},[H]);let G=(0,A.useCallback)(async()=>{let t=R.current+1;if(R.current=t,!e.enabled||B===void 0||!B.available)_([]),y([]),T(void 0),D(void 0),N(!1);else{N(!0),L(``);try{let e=`/memory/sources/${encodeURIComponent(B.ref)}`,[n,r]=await Promise.all([fetch(`${e}/users?limit=50`),fetch(`${e}/conversations?limit=100`)]);if(!n.ok)throw Error(`Memory users failed with HTTP ${n.status}`);if(!r.ok)throw Error(`Memory conversations failed with HTTP ${r.status}`);let i=await n.json(),a=await r.json();if(R.current!==t)return;_(i.users),y(a.conversations),C(e=>a.conversations.find(t=>t.ref===e)?.ref??a.conversations[0]?.ref??``)}catch(e){R.current===t&&L(e instanceof Error?e.message:String(e))}finally{R.current===t&&N(!1)}}},[e.enabled,B]);(0,A.useEffect)(()=>{x(``),C(``),_([]),y([]),T(void 0),D(void 0),G()},[G]),(0,A.useEffect)(()=>{if(!e.enabled||B===void 0||!B.available||S.length===0){T(void 0),D(void 0);return}let t=B.ref,n=!1;async function r(){F(!0),L(``);try{let e=`/memory/sources/${encodeURIComponent(t)}/conversations/${encodeURIComponent(S)}`,[r,i]=await Promise.all([fetch(`${e}/messages`),fetch(`${e}/steps`)]);if(!r.ok)throw Error(`Conversation messages failed with HTTP ${r.status}`);if(!i.ok)throw Error(`Conversation steps failed with HTTP ${i.status}`);n||(T(await r.json()),D(await i.json()))}catch(e){n||(L(e instanceof Error?e.message:String(e)),T(void 0),D(void 0))}finally{n||F(!1)}}return r(),()=>{n=!0}},[e.enabled,S,B]);let K=(0,A.useMemo)(()=>b.length===0?v:v.filter(e=>e.userId===b),[v,b]),q=(0,A.useMemo)(()=>X(g,v),[v,g]),Q=K.find(e=>e.ref===S)??K[0];return(0,A.useEffect)(()=>{K.length===0?C(``):K.some(e=>e.ref===S)||C(K[0]?.ref??``)},[S,K]),(0,j.jsxs)(u,{className:`grid-rows-[auto_minmax(0,1fr)]`,"aria-label":`Memory`,children:[(0,j.jsx)(d,{title:`Memory`,description:`Inspect persisted agent conversations directly. Studio sessions appear only as a fallback for agents without configured memory.`,action:(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-wrap justify-end gap-2 max-sm:justify-start`,children:[t.length===0?null:(0,j.jsxs)(l,{value:r,onValueChange:h,children:[(0,j.jsx)(o,{className:`h-8 min-h-8 w-60 rounded-md border-border text-xs max-sm:w-full`,children:(0,j.jsx)(a,{placeholder:`Memory source`})}),(0,j.jsx)(s,{align:`end`,children:t.map(e=>(0,j.jsxs)(c,{value:e.ref,children:[e.label,e.available?``:` (unavailable)`]},e.ref))})]}),(0,j.jsx)(f,{label:`users`,value:q.userCount}),(0,j.jsx)(f,{label:`conversations`,value:q.conversationCount}),(0,j.jsx)(f,{label:`messages`,value:q.messageCount}),(0,j.jsx)(i,{className:`h-8 min-h-8 rounded-md px-3 text-xs`,type:`button`,variant:`secondary`,disabled:O||M,onClick:()=>void H(),children:`Refresh`})]})}),(0,j.jsx)(p,{className:`overflow-hidden`,children:e.enabled?O&&t.length===0?(0,j.jsx)(m,{title:`Loading memory`,text:`Discovering configured memory sources.`}):I.length>0&&t.length===0?(0,j.jsx)(m,{title:`Memory error`,text:I}):B===void 0?(0,j.jsx)(m,{title:`No memory sources`,text:`No registered agent exposes memory.`}):B.available?M&&v.length===0?(0,j.jsx)(m,{title:`Loading memory`,text:`Reading ${B.label}.`}):I.length>0&&v.length===0?(0,j.jsx)(m,{title:`Memory error`,text:I}):v.length===0?(0,j.jsx)(J,{source:B,userCount:g.length,onRefresh:()=>void G()}):(0,j.jsxs)(`div`,{className:[`grid h-full min-h-0 overflow-hidden`,I.length===0?`grid-rows-[minmax(0,1fr)]`:`grid-rows-[auto_minmax(0,1fr)]`].join(` `),children:[I.length===0?null:(0,j.jsx)(Y,{message:I}),(0,j.jsxs)(`div`,{className:`grid min-h-0 grid-cols-[260px_minmax(320px,0.78fr)_minmax(0,1.22fr)] overflow-hidden border-t border-hair max-xl:grid-cols-[240px_minmax(0,1fr)] max-xl:grid-rows-[minmax(240px,0.42fr)_minmax(0,1fr)] max-md:grid-cols-1 max-md:grid-rows-[auto_minmax(240px,0.38fr)_minmax(0,1fr)]`,children:[(0,j.jsx)(z,{users:g,selectedUserId:b,totalConversations:v.length,onSelect:x}),(0,j.jsx)(V,{agents:e.agents,conversations:K,selectedConversationRef:Q?.ref??``,source:B,onSelect:C}),(0,j.jsx)(U,{agents:e.agents,conversation:Q,detailLoading:P,messages:w,source:B,steps:E})]})]}):(0,j.jsx)(W,{source:B}):(0,j.jsx)(m,{title:`Memory unavailable`,text:`No agent memory or Studio session store is configured.`})})]})}function z(e){return(0,j.jsx)(`aside`,{className:`min-h-0 overflow-auto border-r border-hair pr-3 max-md:border-b max-md:border-r-0 max-md:pr-0`,children:(0,j.jsxs)(`div`,{className:`grid gap-3 py-4 pr-3 max-md:pr-0`,children:[(0,j.jsx)(K,{label:`Users`,value:e.users.length}),(0,j.jsx)(B,{active:e.selectedUserId.length===0,title:`All users`,detail:`${e.totalConversations} conversations`,onClick:()=>e.onSelect(``)}),(0,j.jsx)(`div`,{className:`grid gap-1`,children:e.users.map(t=>(0,j.jsx)(B,{active:e.selectedUserId===t.userId,title:t.userId,detail:`${t.conversationCount} conversations / ${r(t.lastInteractionAt)}`,onClick:()=>e.onSelect(t.userId)},t.userId))})]})})}function B(e){return(0,j.jsxs)(`button`,{className:[`grid min-w-0 gap-1 rounded-lg border border-transparent px-3 py-2.5 text-left transition duration-200 hover:border-hair hover:bg-transparent hover:text-foreground focus-visible:border-ring focus-visible:outline-none`,e.active?`border-hair bg-row-selected`:``].join(` `),type:`button`,onClick:e.onClick,children:[(0,j.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:e.title}),(0,j.jsx)(`span`,{className:`min-w-0 truncate text-xs leading-5 text-muted-foreground`,children:e.detail})]})}function V(e){return(0,j.jsx)(`section`,{className:`min-h-0 overflow-auto border-r border-hair px-4 max-xl:border-r-0 max-xl:pr-0 max-md:border-b max-md:px-0`,children:(0,j.jsxs)(`div`,{className:`grid gap-3 py-4`,children:[(0,j.jsx)(K,{label:`Conversations`,value:e.conversations.length}),e.conversations.length===0?(0,j.jsx)(`div`,{className:`border-y border-dashed border-hair px-3 py-8 text-center text-sm text-muted-foreground`,children:`No conversations for this user.`}):(0,j.jsx)(`div`,{className:`grid border-y border-hair`,children:e.conversations.map(t=>(0,j.jsx)(H,{active:t.ref===e.selectedConversationRef,agentName:$(e.agents,e.source,t.agentIds),conversation:t,onSelect:()=>e.onSelect(t.ref)},t.ref))})]})})}function H(e){return(0,j.jsxs)(`button`,{className:[`grid min-w-0 gap-2 border-b border-hair px-3 py-3 text-left transition duration-200 last:border-b-0 hover:bg-transparent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,e.active?`bg-row-selected`:``].join(` `),type:`button`,onClick:e.onSelect,children:[(0,j.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-3`,children:[(0,j.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,j.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:e.conversation.title??e.conversation.sessionId}),(0,j.jsxs)(`span`,{className:`min-w-0 truncate text-xs text-muted-foreground`,children:[e.agentName,` / `,e.conversation.userId]})]}),(0,j.jsx)(`span`,{className:`shrink-0 text-xs tabular-nums text-muted-foreground`,children:e.conversation.messageCount})]}),(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-wrap gap-x-3 gap-y-1 text-xs text-muted-foreground`,children:[(0,j.jsx)(`span`,{children:r(e.conversation.updatedAt)}),(0,j.jsx)(`span`,{className:`min-w-0 truncate`,children:e.conversation.sessionId})]})]})}function U(e){return e.conversation===void 0?(0,j.jsx)(`section`,{className:`min-h-0 overflow-auto py-4 pl-5 max-xl:col-span-2 max-xl:pl-0 max-md:col-span-1`,children:(0,j.jsx)(m,{title:`No conversation selected`,text:`Choose a conversation to inspect.`})}):(0,j.jsx)(`section`,{className:`min-h-0 overflow-auto py-4 pl-5 max-xl:col-span-2 max-xl:pl-0 max-md:col-span-1`,children:(0,j.jsxs)(`div`,{className:`grid min-w-0 gap-5`,children:[(0,j.jsxs)(`header`,{className:`grid gap-4 border-b border-hair pb-5`,children:[(0,j.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-4 max-md:grid`,children:[(0,j.jsxs)(`div`,{className:`grid min-w-0 gap-2`,children:[(0,j.jsx)(`div`,{className:`text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:`Persisted conversation`}),(0,j.jsx)(`h2`,{className:`m-0 min-w-0 truncate text-2xl font-semibold leading-none text-foreground`,children:e.conversation.title??e.conversation.sessionId}),(0,j.jsx)(`span`,{className:`min-w-0 break-all font-mono text-xs text-muted-foreground`,children:e.conversation.ref})]}),(0,j.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-2 max-md:justify-start`,children:[(0,j.jsx)(h,{className:`border-hair bg-muted text-foreground`,children:e.source.storeKind??e.source.kind}),(0,j.jsx)(h,{className:`border-hair bg-muted text-foreground`,children:$(e.agents,e.source,e.conversation.agentIds)})]})]}),(0,j.jsxs)(`div`,{className:`grid border-y border-hair sm:grid-cols-4 sm:divide-x sm:divide-hair`,children:[(0,j.jsx)(q,{label:`user`,value:e.conversation.userId}),(0,j.jsx)(q,{label:`messages`,value:e.conversation.messageCount}),(0,j.jsx)(q,{label:`created`,value:r(e.conversation.createdAt)}),(0,j.jsx)(q,{label:`updated`,value:r(e.conversation.updatedAt)})]})]}),e.detailLoading?(0,j.jsx)(m,{title:`Loading detail`,text:`Reading persisted messages.`}):(0,j.jsxs)(`div`,{className:`grid gap-4`,children:[e.conversation.metadata===void 0?null:(0,j.jsx)(G,{title:`metadata`,value:e.conversation.metadata}),(0,j.jsx)(N,{records:e.messages?.records??[]}),(0,j.jsx)(G,{title:`messages`,value:e.messages?.messages??[]}),(0,j.jsx)(G,{title:`message records`,value:e.messages?.records??[]}),(0,j.jsx)(G,{title:`derived transcript`,value:e.steps?.steps??[]})]})]})})}function W(e){return(0,j.jsx)(m,{className:`h-full`,title:`${e.source.label} is not inspectable`,text:e.source.reason??`This memory store does not expose read-only discovery.`})}function G(e){let t=Array.isArray(e.value)?e.value.length:void 0;return(0,j.jsxs)(`details`,{className:`group grid min-w-0 overflow-hidden border-y border-hair`,open:!0,children:[(0,j.jsxs)(`summary`,{className:`flex min-h-11 cursor-pointer list-none items-center justify-between gap-3 bg-muted px-3 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground marker:hidden`,children:[(0,j.jsx)(`span`,{children:e.title}),(0,j.jsx)(`span`,{className:`font-medium normal-case tracking-normal`,children:t===void 0?`JSON`:`${t} items`})]}),(0,j.jsx)(`div`,{className:`min-w-0 overflow-x-auto border-t border-hair`,children:(0,j.jsx)(`pre`,{className:`m-0 max-h-96 min-w-max p-4 text-xs leading-5 text-foreground`,children:(0,j.jsx)(`code`,{children:(0,j.jsx)(g,{text:Q(e.value)})})})})]})}function K(e){return(0,j.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,j.jsx)(`h2`,{className:`m-0 text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:e.label}),(0,j.jsx)(`span`,{className:`text-xs font-semibold tabular-nums text-muted-foreground`,children:e.value})]})}function q(e){return(0,j.jsxs)(`div`,{className:`grid min-w-0 gap-1 px-3 py-3 first:pl-0 last:pr-0`,children:[(0,j.jsx)(`span`,{className:`text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground`,children:e.label}),(0,j.jsx)(`span`,{className:`min-w-0 truncate text-sm text-foreground`,title:String(e.value),children:e.value})]})}function J(e){return(0,j.jsx)(m,{className:`h-full`,title:`No saved conversations yet`,text:`Conversations will appear here after the connected agent writes to ${e.source.label}. ${e.userCount} users are currently available.`,action:(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center justify-center gap-3`,children:[(0,j.jsx)(i,{className:`h-8 min-h-8 rounded-md px-3 text-xs`,type:`button`,variant:`secondary`,onClick:e.onRefresh,children:`Refresh`}),(0,j.jsx)(`span`,{className:`text-xs leading-5 text-muted-foreground`,children:`Existing database conversations are discovered automatically.`})]})})}function Y(e){return(0,j.jsx)(`div`,{className:`mb-3 border border-status-danger-ink bg-status-danger-fill px-3 py-2 text-xs leading-5 text-destructive`,children:e.message})}function X(e,t){return{userCount:e.length,conversationCount:t.length,messageCount:t.reduce((e,t)=>e+t.messageCount,0)}}function Z(e){return e.find(e=>e.kind===`agent`&&e.available)?.ref??e.find(e=>e.available)?.ref??e[0]?.ref??``}function Q(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function $(e,t,n){if(n.length===1){let t=n[0]??`agent`;return e.find(e=>e.id===t)?.name??t}return t.label}export{R as MemoryPage};
4
+ //# sourceMappingURL=memory-page-MhRppZ8j.js.map