@anvia/studio 0.7.4 → 0.7.5

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 (74) hide show
  1. package/dist/index.d.ts +17 -1
  2. package/dist/index.js +66 -12
  3. package/dist/index.js.map +1 -1
  4. package/dist/ui/assets/PathIcon-DX1w_Nk9.js +2 -0
  5. package/dist/ui/assets/PathIcon-DX1w_Nk9.js.map +1 -0
  6. package/dist/ui/assets/PlayIcon-Culan3xL.js +2 -0
  7. package/dist/ui/assets/PlayIcon-Culan3xL.js.map +1 -0
  8. package/dist/ui/assets/RefreshIcon-B3w42HZJ.js +2 -0
  9. package/dist/ui/assets/RefreshIcon-B3w42HZJ.js.map +1 -0
  10. package/dist/ui/assets/agents-page-B8Tw2e11.js +2 -0
  11. package/dist/ui/assets/agents-page-B8Tw2e11.js.map +1 -0
  12. package/dist/ui/assets/badge-BH7gz3tB.js +2 -0
  13. package/dist/ui/assets/badge-BH7gz3tB.js.map +1 -0
  14. package/dist/ui/assets/evals-page-ClfscpGe.js +2 -0
  15. package/dist/ui/assets/evals-page-ClfscpGe.js.map +1 -0
  16. package/dist/ui/assets/format-C9HPGfkW.js +2 -0
  17. package/dist/ui/assets/format-C9HPGfkW.js.map +1 -0
  18. package/dist/ui/assets/index-C3lio5tU.css +1 -0
  19. package/dist/ui/assets/index-COJ_MozM.js +54 -0
  20. package/dist/ui/assets/index-COJ_MozM.js.map +1 -0
  21. package/dist/ui/assets/knowledge-page-Dt81OgNg.js +2 -0
  22. package/dist/ui/assets/knowledge-page-Dt81OgNg.js.map +1 -0
  23. package/dist/ui/assets/mcps-page-Bm4k-j7D.js +2 -0
  24. package/dist/ui/assets/mcps-page-Bm4k-j7D.js.map +1 -0
  25. package/dist/ui/assets/memory-page-CxinVNJm.js +2 -0
  26. package/dist/ui/assets/memory-page-CxinVNJm.js.map +1 -0
  27. package/dist/ui/assets/pipelines-page-CIAhfO0w.js +8 -0
  28. package/dist/ui/assets/{pipelines-page-B1kaAtRn.js.map → pipelines-page-CIAhfO0w.js.map} +1 -1
  29. package/dist/ui/assets/{renderers-BsGl9Gjx.js → renderers-CIC1VVRv.js} +3 -3
  30. package/dist/ui/assets/{renderers-BsGl9Gjx.js.map → renderers-CIC1VVRv.js.map} +1 -1
  31. package/dist/ui/assets/sessions-page-DqKjZ6zC.js +2 -0
  32. package/dist/ui/assets/sessions-page-DqKjZ6zC.js.map +1 -0
  33. package/dist/ui/assets/status-page-N-P1HQHB.js +2 -0
  34. package/dist/ui/assets/status-page-N-P1HQHB.js.map +1 -0
  35. package/dist/ui/assets/tools-page-B0Y9wa_k.js +2 -0
  36. package/dist/ui/assets/tools-page-B0Y9wa_k.js.map +1 -0
  37. package/dist/ui/assets/trace-browser-BRkv3nwQ.js +10 -0
  38. package/dist/ui/assets/trace-browser-BRkv3nwQ.js.map +1 -0
  39. package/dist/ui/assets/transcript-item-goNEUTqW.js +3 -0
  40. package/dist/ui/assets/transcript-item-goNEUTqW.js.map +1 -0
  41. package/dist/ui/index.html +3 -2
  42. package/package.json +3 -2
  43. package/dist/ui/assets/ArrowClockwise.es-BRsjq4nG.js +0 -2
  44. package/dist/ui/assets/ArrowClockwise.es-BRsjq4nG.js.map +0 -1
  45. package/dist/ui/assets/Path.es-BUWhvlO4.js +0 -2
  46. package/dist/ui/assets/Path.es-BUWhvlO4.js.map +0 -1
  47. package/dist/ui/assets/Play.es-BMj9mcZd.js +0 -2
  48. package/dist/ui/assets/Play.es-BMj9mcZd.js.map +0 -1
  49. package/dist/ui/assets/agents-page-Cs0-55-x.js +0 -2
  50. package/dist/ui/assets/agents-page-Cs0-55-x.js.map +0 -1
  51. package/dist/ui/assets/badge-Bqf5Z3q8.js +0 -2
  52. package/dist/ui/assets/badge-Bqf5Z3q8.js.map +0 -1
  53. package/dist/ui/assets/evals-page-CEsOQH1F.js +0 -2
  54. package/dist/ui/assets/evals-page-CEsOQH1F.js.map +0 -1
  55. package/dist/ui/assets/index-CISgSi9m.js +0 -54
  56. package/dist/ui/assets/index-CISgSi9m.js.map +0 -1
  57. package/dist/ui/assets/index-DZcBJXlw.css +0 -1
  58. package/dist/ui/assets/knowledge-page-DkuuWYwn.js +0 -2
  59. package/dist/ui/assets/knowledge-page-DkuuWYwn.js.map +0 -1
  60. package/dist/ui/assets/mcps-page-Cg44hTqs.js +0 -2
  61. package/dist/ui/assets/mcps-page-Cg44hTqs.js.map +0 -1
  62. package/dist/ui/assets/memory-page-CSfAtDIq.js +0 -2
  63. package/dist/ui/assets/memory-page-CSfAtDIq.js.map +0 -1
  64. package/dist/ui/assets/pipelines-page-B1kaAtRn.js +0 -8
  65. package/dist/ui/assets/sessions-page-BC0CO7NX.js +0 -2
  66. package/dist/ui/assets/sessions-page-BC0CO7NX.js.map +0 -1
  67. package/dist/ui/assets/status-page-BRktao-I.js +0 -2
  68. package/dist/ui/assets/status-page-BRktao-I.js.map +0 -1
  69. package/dist/ui/assets/tools-page-FH6kc45U.js +0 -2
  70. package/dist/ui/assets/tools-page-FH6kc45U.js.map +0 -1
  71. package/dist/ui/assets/trace-browser-KsF4pJ1E.js +0 -10
  72. package/dist/ui/assets/trace-browser-KsF4pJ1E.js.map +0 -1
  73. package/dist/ui/assets/transcript-item-BwOv5UHH.js +0 -3
  74. package/dist/ui/assets/transcript-item-BwOv5UHH.js.map +0 -1
@@ -1 +0,0 @@
1
- @import "https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600;700&family=Inter:wght@400;500;600;700;800&family=Krona+One&display=swap";@layer components;@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-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--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-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-serif:var(--font-serif);--font-mono:var(--font-mono);--color-amber-400:oklch(82.8% .189 84.429);--color-yellow-500:oklch(79.5% .184 86.047);--color-sky-300:oklch(82.8% .111 230.318);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-zinc-100:oklch(96.7% .001 286.375);--color-black:#000;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-6xl:72rem;--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);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-normal:0em;--leading-tight:1.25;--radius-2xl:1rem;--shadow-2xs:var(--shadow-2xs);--shadow-xs:var(--shadow-xs);--shadow-sm:var(--shadow-sm);--shadow-md:var(--shadow-md);--shadow-lg:var(--shadow-lg);--shadow-xl:var(--shadow-xl);--shadow-2xl:var(--shadow-2xl);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--shadow:var(--shadow)}}@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,ui-sans-serif, system-ui, 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{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)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, var(--ring) 50%, transparent)}}*{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--muted-foreground) transparent}@supports (color:color-mix(in lab, red, red)){*{scrollbar-color:color-mix(in oklch, var(--muted-foreground) 38%, transparent) transparent}}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:var(--background);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);background:radial-gradient(circle at 20% -10%, #e1ff1f12, transparent 30rem), radial-gradient(circle at 88% 8%, #6ea5c90d, transparent 28rem), var(--background);width:100%;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;letter-spacing:0;text-rendering:geometricprecision;margin:0;overflow:hidden}body:before{z-index:0;pointer-events:none;content:"";opacity:.22;background-image:linear-gradient(#e4e8ec08 1px,#0000 1px),linear-gradient(90deg,#e4e8ec06 1px,#0000 1px),radial-gradient(circle at 25% 15%,#e1ff1f12,#0000 18rem);background-size:84px 84px,84px 84px,auto;position:fixed;inset:0;-webkit-mask-image:linear-gradient(#000,#0000 88%);mask-image:linear-gradient(#000,#0000 88%)}#anvia-ui{isolation:isolate;z-index:1;width:100%;max-width:100%;height:100dvh;position:relative;overflow:hidden}::selection{background:#e1ff1f47}.shell-loading{background:linear-gradient(#ffffff0e 1px, transparent 1px), linear-gradient(90deg, #ffffff0e 1px, transparent 1px), var(--background);min-height:100vh;color:var(--foreground);font-family:var(--font-sans);background-size:84px 84px,84px 84px,auto;place-items:center;display:grid}.shell-loading>div{justify-items:center;gap:.75rem;display:grid}.shell-loading .eyebrow{color:var(--primary);letter-spacing:.2em;text-transform:uppercase;margin:0;font-size:.75rem;font-weight:700}.shell-loading h1{letter-spacing:0;margin:0;font-size:1.125rem;font-weight:600}.anvia-wordmark{font-family:"Krona One", var(--font-sans);letter-spacing:-.04em}:focus-visible{outline:2px solid var(--ring);outline-offset:2px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){::-webkit-scrollbar-thumb{background-color:color-mix(in oklch, var(--muted-foreground) 30%, transparent)}}::-webkit-scrollbar-thumb{border-radius:.5rem}::-webkit-scrollbar-thumb:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklch, var(--muted-foreground) 52%, transparent)}}.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(--primary);stroke-width:1.6px;opacity:.78}.pipeline-flow .react-flow__edges marker path{fill:var(--primary);stroke:var(--primary)}}@layer utilities{.pointer-events-none{pointer-events:none}.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:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.right-0{right:calc(var(--spacing) * 0)}.bottom-0{bottom:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.z-10{z-index:10}.z-30{z-index:30}.z-50{z-index:50}.col-span-4{grid-column:span 4/span 4}.m-0{margin:calc(var(--spacing) * 0)}.mx-auto{margin-inline:auto}.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:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-auto{margin-top:auto}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.\!h-0{height:calc(var(--spacing) * 0)!important}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.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-15{height:calc(var(--spacing) * 15)}.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-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-\[60vh\]{max-height:60vh}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-5{min-height:calc(var(--spacing) * 5)}.min-h-6{min-height:calc(var(--spacing) * 6)}.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-13{min-height:calc(var(--spacing) * 13)}.min-h-14{min-height:calc(var(--spacing) * 14)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-24{min-height:calc(var(--spacing) * 24)}.min-h-40{min-height:calc(var(--spacing) * 40)}.min-h-44{min-height:calc(var(--spacing) * 44)}.min-h-80{min-height:calc(var(--spacing) * 80)}.min-h-96{min-height:calc(var(--spacing) * 96)}.min-h-\[74px\]{min-height:74px}.min-h-full{min-height:100%}.\!w-0{width:calc(var(--spacing) * 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{width:calc(var(--spacing) * 3)}.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-9{width:calc(var(--spacing) * 9)}.w-20{width:calc(var(--spacing) * 20)}.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-64{width:calc(var(--spacing) * 64)}.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-max{width:max-content}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-44{max-width:calc(var(--spacing) * 44)}.max-w-60{max-width:calc(var(--spacing) * 60)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-205{max-width:calc(var(--spacing) * 205)}.max-w-235{max-width:calc(var(--spacing) * 235)}.max-w-\[42vw\]{max-width:42vw}.max-w-\[62ch\]{max-width:62ch}.max-w-\[72ch\]{max-width:72ch}.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-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-6{min-width:calc(var(--spacing) * 6)}.min-w-225{min-width:calc(var(--spacing) * 225)}.min-w-280{min-width:calc(var(--spacing) * 280)}.min-w-\[8rem\]{min-width:8rem}.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:calc(var(--spacing) * 0);--tw-border-spacing-y:calc(var(--spacing) * 0);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)}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize-none{resize:none}.resize-y{resize:vertical}.auto-rows-min{grid-auto-rows:min-content}.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-\[16px_auto\]{grid-template-columns:16px auto}.grid-cols-\[20px_minmax\(0\,1fr\)\]{grid-template-columns:20px minmax(0,1fr)}.grid-cols-\[28px_minmax\(0\,1fr\)\]{grid-template-columns:28px minmax(0,1fr)}.grid-cols-\[82px_minmax\(0\,1fr\)\]{grid-template-columns:82px minmax(0,1fr)}.grid-cols-\[150px_minmax\(0\,1fr\)\]{grid-template-columns:150px minmax(0,1fr)}.grid-cols-\[320px_minmax\(0\,1fr\)\]{grid-template-columns:320px minmax(0,1fr)}.grid-cols-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\[minmax\(0\,1fr\)_36px\]{grid-template-columns:minmax(0,1fr) 36px}.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\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,2fr) 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\(110px\,0\.75fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(110px,.75fr) 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\(260px\,0\.75fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(260px,.75fr) minmax(0,1fr)}.grid-cols-\[minmax\(300px\,0\.75fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(300px,.75fr) minmax(0,1fr)}.grid-cols-\[repeat\(auto-fit\,minmax\(150px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.grid-rows-\[52px_minmax\(0\,1fr\)\]{grid-template-rows:52px 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-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.place-items-end{place-items:end}.content-between{align-content:space-between}.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}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-end{justify-items:end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.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)}.gap-7{gap:calc(var(--spacing) * 7)}.gap-8{gap:calc(var(--spacing) * 8)}.self-center{align-self:center}.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}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.\!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-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-amber-400{border-color:var(--color-amber-400)}.border-border,.border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/60{border-color:color-mix(in oklab, var(--border) 60%, transparent)}}.border-border\/65{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/65{border-color:color-mix(in oklab, var(--border) 65%, transparent)}}.border-border\/70{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/70{border-color:color-mix(in oklab, var(--border) 70%, transparent)}}.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-border\/90{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/90{border-color:color-mix(in oklab, var(--border) 90%, transparent)}}.border-chart-1\/40{border-color:var(--chart-1)}@supports (color:color-mix(in lab, red, red)){.border-chart-1\/40{border-color:color-mix(in oklab, var(--chart-1) 40%, transparent)}}.border-chart-2\/40{border-color:var(--chart-2)}@supports (color:color-mix(in lab, red, red)){.border-chart-2\/40{border-color:color-mix(in oklab, var(--chart-2) 40%, transparent)}}.border-chart-5\/40{border-color:var(--chart-5)}@supports (color:color-mix(in lab, red, red)){.border-chart-5\/40{border-color:color-mix(in oklab, var(--chart-5) 40%, transparent)}}.border-destructive,.border-destructive\/30{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\/30{border-color:color-mix(in oklab, var(--destructive) 30%, transparent)}}.border-destructive\/40{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\/40{border-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.border-input{border-color:var(--input)}.border-muted-foreground,.border-muted-foreground\/45{border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\/45{border-color:color-mix(in oklab, var(--muted-foreground) 45%, transparent)}}.border-primary,.border-primary\/20{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/20{border-color:color-mix(in oklab, var(--primary) 20%, transparent)}}.border-primary\/25{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/25{border-color:color-mix(in oklab, var(--primary) 25%, transparent)}}.border-primary\/35{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/35{border-color:color-mix(in oklab, var(--primary) 35%, transparent)}}.border-primary\/40{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/40{border-color:color-mix(in oklab, var(--primary) 40%, transparent)}}.border-primary\/45{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/45{border-color:color-mix(in oklab, var(--primary) 45%, transparent)}}.border-primary\/55{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/55{border-color:color-mix(in oklab, var(--primary) 55%, transparent)}}.border-primary\/70{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/70{border-color:color-mix(in oklab, var(--primary) 70%, transparent)}}.border-primary\/80{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\/80{border-color:color-mix(in oklab, var(--primary) 80%, transparent)}}.border-transparent{border-color:#0000}.border-yellow-500{border-color:var(--color-yellow-500)}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.\!bg-transparent{background-color:#0000!important}.bg-background,.bg-background\/25{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/25{background-color:color-mix(in oklab, var(--background) 25%, transparent)}}.bg-background\/35{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/35{background-color:color-mix(in oklab, var(--background) 35%, transparent)}}.bg-background\/45{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/45{background-color:color-mix(in oklab, var(--background) 45%, transparent)}}.bg-background\/50{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/50{background-color:color-mix(in oklab, var(--background) 50%, transparent)}}.bg-background\/55{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/55{background-color:color-mix(in oklab, var(--background) 55%, transparent)}}.bg-background\/65{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/65{background-color:color-mix(in oklab, var(--background) 65%, transparent)}}.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\/80{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/80{background-color:color-mix(in oklab, var(--background) 80%, transparent)}}.bg-background\/88{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/88{background-color:color-mix(in oklab, var(--background) 88%, transparent)}}.bg-border,.bg-border\/80{background-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.bg-border\/80{background-color:color-mix(in oklab, var(--border) 80%, transparent)}}.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\/30{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/30{background-color:color-mix(in oklab, var(--card) 30%, 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-card\/45{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/45{background-color:color-mix(in oklab, var(--card) 45%, transparent)}}.bg-card\/55{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/55{background-color:color-mix(in oklab, var(--card) 55%, transparent)}}.bg-card\/70{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/70{background-color:color-mix(in oklab, var(--card) 70%, transparent)}}.bg-card\/80{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/80{background-color:color-mix(in oklab, var(--card) 80%, transparent)}}.bg-card\/85{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/85{background-color:color-mix(in oklab, var(--card) 85%, transparent)}}.bg-card\/90{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/90{background-color:color-mix(in oklab, var(--card) 90%, transparent)}}.bg-card\/95{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.bg-card\/95{background-color:color-mix(in oklab, var(--card) 95%, transparent)}}.bg-chart-1,.bg-chart-1\/15{background-color:var(--chart-1)}@supports (color:color-mix(in lab, red, red)){.bg-chart-1\/15{background-color:color-mix(in oklab, var(--chart-1) 15%, transparent)}}.bg-chart-2,.bg-chart-2\/15{background-color:var(--chart-2)}@supports (color:color-mix(in lab, red, red)){.bg-chart-2\/15{background-color:color-mix(in oklab, var(--chart-2) 15%, transparent)}}.bg-chart-4{background-color:var(--chart-4)}.bg-chart-5,.bg-chart-5\/15{background-color:var(--chart-5)}@supports (color:color-mix(in lab, red, red)){.bg-chart-5\/15{background-color:color-mix(in oklab, var(--chart-5) 15%, transparent)}}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/10{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.bg-destructive\/15{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/15{background-color:color-mix(in oklab, var(--destructive) 15%, transparent)}}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/35{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\/35{background-color:color-mix(in oklab, var(--muted-foreground) 35%, transparent)}}.bg-muted-foreground\/40{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\/40{background-color:color-mix(in oklab, var(--muted-foreground) 40%, transparent)}}.bg-muted\/10{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/10{background-color:color-mix(in oklab, var(--muted) 10%, transparent)}}.bg-muted\/20{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/20{background-color:color-mix(in oklab, var(--muted) 20%, transparent)}}.bg-muted\/35{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/35{background-color:color-mix(in oklab, var(--muted) 35%, transparent)}}.bg-muted\/45{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/45{background-color:color-mix(in oklab, var(--muted) 45%, transparent)}}.bg-muted\/55{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/55{background-color:color-mix(in oklab, var(--muted) 55%, transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/60{background-color:color-mix(in oklab, var(--muted) 60%, transparent)}}.bg-muted\/70{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/70{background-color:color-mix(in oklab, var(--muted) 70%, transparent)}}.bg-popover,.bg-popover\/98{background-color:var(--popover)}@supports (color:color-mix(in lab, red, red)){.bg-popover\/98{background-color:color-mix(in oklab, var(--popover) 98%, transparent)}}.bg-primary,.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.bg-primary\/15{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/15{background-color:color-mix(in oklab, var(--primary) 15%, transparent)}}.bg-primary\/25{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/25{background-color:color-mix(in oklab, var(--primary) 25%, transparent)}}.bg-primary\/45{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/45{background-color:color-mix(in oklab, var(--primary) 45%, transparent)}}.bg-primary\/55{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/55{background-color:color-mix(in oklab, var(--primary) 55%, transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-accent{background-color:var(--sidebar-accent)}.bg-transparent{background-color:#0000}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-card{--tw-gradient-from:var(--card);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-card\/95{--tw-gradient-via:var(--card)}@supports (color:color-mix(in lab, red, red)){.via-card\/95{--tw-gradient-via:color-mix(in oklab, var(--card) 95%, transparent)}}.via-card\/95{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-card\/0{--tw-gradient-to:var(--card)}@supports (color:color-mix(in lab, red, red)){.to-card\/0{--tw-gradient-to:color-mix(in oklab, var(--card) 0%, transparent)}}.to-card\/0{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.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-8{padding:calc(var(--spacing) * 8)}.p-px{padding:1px}.px-0{padding-inline:calc(var(--spacing) * 0)}.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)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.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-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-1{padding-right:calc(var(--spacing) * 1)}.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)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.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:calc(var(--spacing) * 0)}.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-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--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-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-\[1\.08rem\]{font-size:1.08rem}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.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-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.01em\]{--tw-tracking:-.01em;letter-spacing:-.01em}.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-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.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-background{color:var(--background)}.text-card-foreground{color:var(--card-foreground)}.text-chart-1{color:var(--chart-1)}.text-chart-2{color:var(--chart-2)}.text-chart-4{color:var(--chart-4)}.text-chart-5{color:var(--chart-5)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-foreground{color:var(--foreground)}.text-inherit{color:inherit}.text-muted-foreground,.text-muted-foreground\/85{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/85{color:color-mix(in oklab, var(--muted-foreground) 85%, transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.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,.text-sidebar-foreground\/62{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\/62{color:color-mix(in oklab, var(--sidebar-foreground) 62%, transparent)}}.text-sidebar-foreground\/72{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\/72{color:color-mix(in oklab, var(--sidebar-foreground) 72%, transparent)}}.text-yellow-500{color:var(--color-yellow-500)}.capitalize{text-transform:capitalize}.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,)}.\!opacity-0{opacity:0!important}.opacity-35{opacity:.35}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow:var(--shadow-2xl);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[inset_0_1px_0_hsl\(0_0\%_100\%_\/_0\.08\)\]{--tw-shadow:inset 0 1px 0 var(--tw-shadow-color,#ffffff14);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[inset_0_1px_0_hsl\(var\(--foreground\)\/0\.06\)\]{--tw-shadow:inset 0 1px 0 var(--tw-shadow-color,hsl(var(--foreground)/.06));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);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:var(--shadow-sm);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:var(--shadow-xl);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:var(--shadow-xs);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)}.shadow-black\/10{--tw-shadow-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.shadow-black\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/20{--tw-shadow-color:#0003}@supports (color:color-mix(in lab, red, red)){.shadow-black\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/35{--tw-shadow-color:#00000059}@supports (color:color-mix(in lab, red, red)){.shadow-black\/35{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 35%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/40{--tw-shadow-color:#0006}@supports (color:color-mix(in lab, red, red)){.shadow-black\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/45{--tw-shadow-color:#00000073}@supports (color:color-mix(in lab, red, red)){.shadow-black\/45{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 45%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-primary\/10{--tw-shadow-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.shadow-primary\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--primary) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-primary\/15{--tw-shadow-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.shadow-primary\/15{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--primary) 15%, transparent) var(--tw-shadow-alpha), transparent)}}.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-sm{--tw-backdrop-blur:blur(var(--blur-sm));-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-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))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.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}.\[scrollbar-gutter\:stable\]{scrollbar-gutter:stable}.group-last\/row\:border-b-0:is(:where(.group\/row):last-child *){border-bottom-style:var(--tw-border-style);border-bottom-width:0}.group-focus-within\:grid:is(:where(.group):focus-within *){display:grid}.group-focus-within\:opacity-0:is(:where(.group):focus-within *){opacity:0}@media (hover:hover){.group-hover\:grid:is(:where(.group):hover *){display:grid}.group-hover\:text-primary:is(:where(.group):hover *){color:var(--primary)}.group-hover\:opacity-0:is(:where(.group):hover *){opacity:0}}.placeholder\:text-muted-foreground\/65::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\:text-muted-foreground\/65::placeholder{color:color-mix(in oklab, var(--muted-foreground) 65%, transparent)}}.placeholder\:text-muted-foreground\/70::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\:text-muted-foreground\/70::placeholder{color:color-mix(in oklab, var(--muted-foreground) 70%, transparent)}}.first\:pl-5:first-child{padding-left:calc(var(--spacing) * 5)}.last\:pr-5:last-child{padding-right:calc(var(--spacing) * 5)}.focus-within\:border-primary:focus-within{border-color:var(--primary)}.focus-within\:bg-sidebar-accent\/80:focus-within{background-color:var(--sidebar-accent)}@supports (color:color-mix(in lab, red, red)){.focus-within\:bg-sidebar-accent\/80:focus-within{background-color:color-mix(in oklab, var(--sidebar-accent) 80%, transparent)}}.focus-within\:ring-2:focus-within{--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-within\:ring-primary\/25:focus-within{--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.focus-within\:ring-primary\/25:focus-within{--tw-ring-color:color-mix(in oklab, var(--primary) 25%, transparent)}}@media (hover:hover){.hover\:border-border:hover,.hover\:border-border\/70:hover{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.hover\:border-border\/70:hover{border-color:color-mix(in oklab, var(--border) 70%, transparent)}}.hover\:border-primary:hover,.hover\:border-primary\/20:hover{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/20:hover{border-color:color-mix(in oklab, var(--primary) 20%, transparent)}}.hover\:border-primary\/35:hover{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/35:hover{border-color:color-mix(in oklab, var(--primary) 35%, transparent)}}.hover\:border-primary\/45:hover{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/45:hover{border-color:color-mix(in oklab, var(--primary) 45%, transparent)}}.hover\:bg-accent:hover,.hover\:bg-accent\/45:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/45:hover{background-color:color-mix(in oklab, var(--accent) 45%, transparent)}}.hover\:bg-accent\/60:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/60:hover{background-color:color-mix(in oklab, var(--accent) 60%, transparent)}}.hover\:bg-accent\/70:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/70:hover{background-color:color-mix(in oklab, var(--accent) 70%, transparent)}}.hover\:bg-accent\/80:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/80:hover{background-color:color-mix(in oklab, var(--accent) 80%, transparent)}}.hover\:bg-background\/35:hover{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-background\/35:hover{background-color:color-mix(in oklab, var(--background) 35%, transparent)}}.hover\:bg-card\/60:hover{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-card\/60:hover{background-color:color-mix(in oklab, var(--card) 60%, transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-primary\/10:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.hover\:bg-primary\/15:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/15:hover{background-color:color-mix(in oklab, var(--primary) 15%, transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.hover\:bg-sidebar-accent:hover,.hover\:bg-sidebar-accent\/80:hover{background-color:var(--sidebar-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-sidebar-accent\/80:hover{background-color:color-mix(in oklab, var(--sidebar-accent) 80%, transparent)}}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-inherit:hover{color:inherit}.hover\:text-primary:hover{color:var(--primary)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:text-sidebar-foreground:hover{color:var(--sidebar-foreground)}.hover\:opacity-100:hover{opacity:1}}.focus\:border-primary:focus{border-color:var(--primary)}.focus\:border-ring:focus{border-color:var(--ring)}.focus\:border-transparent:focus{border-color:#0000}.focus\:ring-0:focus{--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\:ring-2:focus{--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\:ring-primary\/25:focus{--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.focus\:ring-primary\/25:focus{--tw-ring-color:color-mix(in oklab, var(--primary) 25%, transparent)}}.focus\:ring-ring\/20:focus{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus\:ring-ring\/20:focus{--tw-ring-color:color-mix(in oklab, var(--ring) 20%, transparent)}}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.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-ring\/35:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/35:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 35%, transparent)}}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--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\: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 not all and (width>=80rem){.max-xl\:hidden{display:none}.max-xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media not all and (width>=64rem){.max-lg\:hidden{display:none}.max-lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-lg\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.max-lg\:border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}}@media not all and (width>=48rem){.max-md\:grid{display:grid}.max-md\:max-h-80{max-height:calc(var(--spacing) * 80)}.max-md\:w-full{width:100%}.max-md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.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}}@media (width>=40rem){.sm\:block{display:block}.sm\:max-w-72{max-width:calc(var(--spacing) * 72)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=48rem){.md\:block{display:block}}@media (width>=64rem){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[228px_minmax\(0\,1fr\)\]{grid-template-columns:228px minmax(0,1fr)}.lg\:grid-cols-\[320px_minmax\(0\,1fr\)\]{grid-template-columns:320px minmax(0,1fr)}}@media (width>=80rem){.xl\:grid-cols-\[280px_minmax\(320px\,0\.8fr\)_minmax\(0\,1\.2fr\)\]{grid-template-columns:280px minmax(320px,.8fr) minmax(0,1.2fr)}.xl\:grid-cols-\[minmax\(0\,0\.85fr\)_minmax\(0\,1\.15fr\)\]{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr)}.xl\:grid-cols-\[minmax\(280px\,0\.72fr\)_minmax\(0\,1fr\)_minmax\(280px\,0\.7fr\)\]{grid-template-columns:minmax(280px,.72fr) minmax(0,1fr) minmax(280px,.7fr)}.xl\:grid-cols-\[minmax\(300px\,0\.7fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(300px,.7fr) minmax(0,1fr)}}.dark\:text-fuchsia-300:is(.dark *){color:var(--color-fuchsia-300)}.dark\:text-sky-300:is(.dark *){color:var(--color-sky-300)}.dark\:text-zinc-100:is(.dark *){color:var(--color-zinc-100)}.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)}.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-border\/80 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.prose-code\:border-border\/80 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab, var(--border) 80%, transparent)}}.prose-code\:bg-muted\/80 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.prose-code\:bg-muted\/80 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab, var(--muted) 80%, transparent)}}.prose-code\:px-1 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline:calc(var(--spacing) * 1)}.prose-code\:py-0\.5 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){padding-block:calc(var(--spacing) * .5)}.prose-code\:text-\[0\.92em\] :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.92em}.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-border\/80 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.prose-pre\:border-border\/80 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:color-mix(in oklab, var(--border) 80%, transparent)}}.prose-pre\:bg-card\/90 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.prose-pre\:bg-card\/90 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:color-mix(in oklab, var(--card) 90%, transparent)}}.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:calc(var(--spacing) * 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:calc(var(--spacing) * 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)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_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}.\[\&_svg\]\:opacity-100 svg{opacity:1}}:root{--background:#f1f3ed;--foreground:#181f25;--card:#fdfdfc;--card-foreground:#181f25;--popover:#fdfdfc;--popover-foreground:#181f25;--primary:#879915;--primary-foreground:#f8f9f5;--secondary:#e8ece4;--secondary-foreground:#212a31;--muted:#e3e7de;--muted-foreground:#636f79;--accent:#8799151a;--accent-foreground:#626f0b;--destructive:#c13833;--destructive-foreground:#f8f9f5;--border:#2a353c1f;--input:#2a353c29;--ring:#879915;--chart-1:#879915;--chart-2:#46787c;--chart-3:#636f79;--chart-4:#242f38;--chart-5:#c13833;--sidebar:#f1f3ed;--sidebar-foreground:#181f25;--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:#8799151a;--sidebar-accent-foreground:#626f0b;--sidebar-border:var(--border);--sidebar-ring:var(--ring);--font-sans:Inter, -apple-system, BlinkMacSystemFont, ui-sans-serif, sans-serif, system-ui;--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:Geist Mono, ui-monospace, monospace;--radius:.5rem;--shadow-x:0;--shadow-y:1px;--shadow-blur:3px;--shadow-spread:0px;--shadow-opacity:.1;--shadow-color:#1f252e;--shadow-2xs:0 1px 2px 0px #1f252e0d;--shadow-xs:0 1px 3px 0px #1f252e0f;--shadow-sm:0 1px 2px #1f252e14, 0 8px 18px -18px #1f252e42;--shadow:0 1px 2px #1f252e1a, 0 14px 34px -26px #1f252e57;--shadow-md:0 2px 4px #1f252e1f, 0 20px 44px -30px #1f252e6b;--shadow-lg:0 3px 8px #1f252e29, 0 28px 64px -38px #1f252e80;--shadow-xl:0 4px 12px #1f252e33, 0 34px 86px -44px #1f252e8f;--shadow-2xl:0 10px 32px #1f252e47, 0 48px 120px -56px #1f252ead;--tracking-normal:0em;--spacing:.25rem}.dark{--background:#131416;--foreground:#e8ece4;--card:#16181a;--card-foreground:#e8ece4;--popover:#171a1c;--popover-foreground:#e8ece4;--primary:#e1ff1f;--primary-foreground:#0a0a0a;--secondary:#1f2123;--secondary-foreground:#e1e6db;--muted:#242629;--muted-foreground:#9fa696;--accent:#e1ff1f1a;--accent-foreground:#e5ff3d;--destructive:#db605c;--destructive-foreground:#101419;--border:#e1e7da14;--input:#e1e7da1f;--ring:#e1ff1f;--chart-1:#e1ff1f;--chart-2:#69b0b5;--chart-3:#9fa696;--chart-4:#dce2d5;--chart-5:#db605c;--sidebar:#131416;--sidebar-foreground:#e8ece4;--sidebar-primary:var(--primary);--sidebar-primary-foreground:var(--primary-foreground);--sidebar-accent:#e1ff1f1a;--sidebar-accent-foreground:#e5ff3d;--sidebar-border:var(--border);--sidebar-ring:var(--ring);--font-sans:Inter, -apple-system, BlinkMacSystemFont, ui-sans-serif, sans-serif, system-ui;--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:Geist Mono, ui-monospace, monospace;--radius:.5rem;--shadow-x:0;--shadow-y:1px;--shadow-blur:3px;--shadow-spread:0px;--shadow-opacity:.1;--shadow-color:#05070a;--shadow-2xs:0 1px 2px 0px #05070a40;--shadow-xs:0 1px 3px 0px #05070a47;--shadow-sm:0 1px 2px #05070a5c, 0 10px 24px -20px #05070ab3;--shadow:0 1px 2px #05070a6b, 0 20px 54px -34px #05070adb;--shadow-md:0 2px 6px #05070a7a, 0 28px 70px -42px #05070ae6;--shadow-lg:0 4px 10px #05070a8a, 0 36px 90px -48px #05070af0;--shadow-xl:0 8px 18px #05070a9e, 0 44px 110px -54px #05070afa;--shadow-2xl:0 14px 44px #05070ab8, 0 60px 140px -64px #05070a}@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-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@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-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes pulse{50%{opacity:.5}}
@@ -1,2 +0,0 @@
1
- import{i as e,r as t,s as n}from"./utils-BN2yP0LH.js";import{t as r}from"./ArrowClockwise.es-BRsjq4nG.js";import{w as i}from"./index-CISgSi9m.js";import{t as a}from"./badge-Bqf5Z3q8.js";import{n as o}from"./renderers-BsGl9Gjx.js";var s=n(e(),1);function c(e){return e.flatMap(e=>e.sources.map((t,n)=>({key:`${e.agentId}:${d(t,n)}`,agentId:e.agentId,agentName:e.agentName??e.agentId,source:u(t,n)})))}var l=[{id:`static-context`,label:`Static Context`},{id:`dynamic-context`,label:`Dynamic Context`},{id:`dynamic-tools`,label:`Dynamic Tools`},{id:`retrieval-log`,label:`Retrieval Log`}];function u(e,t){return e.sourceId===void 0?{...e,sourceId:f(e,t)}:e}function d(e,t=0){return e.sourceId??f(e,t)}function f(e,t){switch(e.kind){case`static_context`:return`static-context`;case`dynamic_context`:return`dynamic-context-${e.registrationIndex??t}`;case`dynamic_tools`:return`dynamic-tools-${e.registrationIndex??t}`}}function p(e,t){return e.filter(e=>e.kind===t).reduce((e,t)=>e+(t.itemCount??t.count),0)}function m(e){switch(e){case`static_context`:return`Static context`;case`dynamic_context`:return`Dynamic context`;case`dynamic_tools`:return`Dynamic tools`}}function h(e){switch(e){case`static-context`:return`static_context`;case`dynamic-context`:return`dynamic_context`;case`dynamic-tools`:return`dynamic_tools`;case`retrieval-log`:return}}function g(e){return l.find(t=>t.id===e)?.label??`Knowledge`}function _(e,t,n){let r=h(e);if(r===void 0)return`${n} entries`;let i=t.filter(e=>e.source.kind===r),a=p(i.map(e=>e.source),r);return`${i.length} sources / ${a} items`}function v(e){switch(e){case`static_context`:return`Static context`;case`dynamic_context`:return`Dynamic context`;case`dynamic_tool`:return`Dynamic tool`}}var y=t();function b(e){let t=e.state;return(0,y.jsxs)(`section`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)_auto] overflow-hidden rounded-xl border border-border/80 bg-card/55`,children:[(0,y.jsx)(`div`,{className:`border-b border-border/80 px-4 py-3`,children:(0,y.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-3`,children:[(0,y.jsxs)(`div`,{className:`min-w-0`,children:[(0,y.jsx)(`h2`,{className:`m-0 truncate text-sm font-semibold text-foreground`,children:e.source?.source.label??`Knowledge items`}),(0,y.jsx)(`p`,{className:`m-0 mt-1 truncate font-mono text-xs text-muted-foreground`,children:e.source===void 0?`No source selected`:`${e.source.agentId} / ${d(e.source.source)}`})]}),t?.totalCount===void 0?null:(0,y.jsxs)(a,{children:[t.totalCount,` total`]})]})}),(0,y.jsx)(`div`,{className:`min-h-0 overflow-auto`,children:(0,y.jsxs)(`div`,{className:`p-4`,children:[e.source===void 0?(0,y.jsx)(T,{text:`No knowledge source selected`}):null,t?.loading===!0&&t.items.length===0?(0,y.jsx)(T,{text:`Loading items`}):null,t?.error===void 0?null:(0,y.jsx)(T,{text:t.error}),t?.inspectable===!1?(0,y.jsx)(T,{text:t.message??`This source does not expose browseable chunks.`}):null,t?.inspectable!==!1&&t?.loading===!1&&t.items.length===0?(0,y.jsx)(T,{text:`No items in this source`}):null,(0,y.jsx)(`div`,{className:`grid gap-3`,children:t?.items.map(e=>(0,y.jsx)(x,{item:e},`${e.kind}:${e.id}`))})]})}),(0,y.jsxs)(`div`,{className:`flex min-h-12 items-center justify-between gap-3 bg-muted/10 px-4 py-2`,children:[(0,y.jsx)(`span`,{className:`font-mono text-[11px] text-muted-foreground`,children:t===void 0?`0 loaded`:`${t.items.length} loaded`}),(0,y.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 x(e){return(0,y.jsxs)(`article`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/55 p-4`,children:[(0,y.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-3`,children:[(0,y.jsxs)(`div`,{className:`min-w-0`,children:[(0,y.jsx)(`div`,{className:`truncate font-mono text-xs font-semibold text-primary`,children:e.item.toolName??e.item.id}),(0,y.jsx)(`div`,{className:`mt-1 font-mono text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:v(e.item.kind)})]}),e.item.parameterKeys===void 0||e.item.parameterKeys.length===0?null:(0,y.jsxs)(a,{children:[e.item.parameterKeys.length,` params`]})]}),e.item.description===void 0||e.item.description.length===0?null:(0,y.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,y.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,y.jsx)(C,{title:`Document`,value:e.item.document}),e.item.metadata===void 0?null:(0,y.jsx)(C,{title:`Metadata`,value:e.item.metadata}),e.item.parameterKeys===void 0||e.item.parameterKeys.length===0?null:(0,y.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.item.parameterKeys.map(e=>(0,y.jsx)(a,{children:e},e))})]})}function S(e){return(0,y.jsxs)(`section`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden rounded-xl border border-border/80 bg-card/55`,children:[(0,y.jsx)(`div`,{className:`border-b border-border/80 px-4 py-3`,children:(0,y.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-3`,children:[(0,y.jsxs)(`div`,{className:`min-w-0`,children:[(0,y.jsx)(`h2`,{className:`m-0 truncate text-sm font-semibold text-foreground`,children:`Retrieval log`}),(0,y.jsx)(`p`,{className:`m-0 mt-1 truncate font-mono text-xs text-muted-foreground`,children:`traces / retrieval-evidence`})]}),(0,y.jsxs)(a,{children:[e.evidence.length,` entries`]})]})}),(0,y.jsxs)(`div`,{className:`min-h-0 overflow-auto p-4`,children:[e.evidence.length===0?(0,y.jsx)(T,{text:`No retrieval evidence captured yet`}):null,(0,y.jsx)(`div`,{className:`grid gap-3`,children:e.evidence.map(t=>(0,y.jsxs)(`article`,{className:`grid gap-3 rounded-xl border border-border/80 bg-background/45 p-3`,children:[(0,y.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-3`,children:[(0,y.jsxs)(`div`,{className:`min-w-0`,children:[(0,y.jsx)(`div`,{className:`truncate text-sm font-semibold text-foreground`,children:t.observationName}),(0,y.jsxs)(`div`,{className:`mt-1 font-mono text-[11px] text-muted-foreground`,children:[`Turn `,t.turn]})]}),(0,y.jsx)(i,{className:`h-auto min-h-0 rounded-lg border border-border bg-muted px-2 py-1 font-mono text-[10px] text-muted-foreground`,type:`button`,variant:`ghost`,onClick:()=>e.onOpenTrace(t.traceId),children:`Trace`})]}),(0,y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,y.jsxs)(a,{children:[t.documentCount,` docs`]}),(0,y.jsxs)(a,{children:[t.toolCount,` tools`]})]}),t.query===void 0?null:(0,y.jsxs)(`p`,{className:`m-0 text-sm leading-6 text-muted-foreground [overflow-wrap:anywhere]`,children:[(0,y.jsx)(`span`,{className:`font-mono text-xs font-semibold uppercase tracking-[0.14em] text-foreground`,children:`Query`}),` `,t.query]}),t.documents.slice(0,2).map(e=>(0,y.jsxs)(`p`,{className:`m-0 text-xs leading-5 text-muted-foreground [overflow-wrap:anywhere]`,children:[(0,y.jsx)(`span`,{className:`font-mono text-foreground`,children:e.id??`document`}),` `,e.text??``]},`${e.id??`doc`}:${e.text??``}`)),t.tools.length===0?null:(0,y.jsxs)(`p`,{className:`m-0 text-xs leading-5 text-muted-foreground`,children:[`Tools: `,t.tools.join(`, `)]})]},`${t.traceId}:${t.observationId}`))})]})]})}function C(e){return(0,y.jsxs)(`div`,{className:`grid gap-2 border-t border-border/70 pt-3`,children:[(0,y.jsx)(`div`,{className:`font-mono text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground`,children:e.title}),(0,y.jsx)(o,{value:e.value})]})}function w(e){return(0,y.jsx)(`section`,{className:`grid h-full place-items-center p-8`,children:(0,y.jsxs)(`div`,{className:`grid max-w-sm gap-2 text-center`,children:[(0,y.jsx)(`h1`,{className:`m-0 text-base font-semibold text-foreground`,children:e.title}),(0,y.jsx)(`p`,{className:`m-0 text-sm font-medium leading-6 text-muted-foreground`,children:e.text})]})})}function T(e){return(0,y.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 E(e){let[t,n]=(0,s.useState)(``),[a,o]=(0,s.useState)(),l=e.summary?.agents??[],u=e.summary?.evidence??[],f=(0,s.useMemo)(()=>c(l),[l]),p=h(e.activeTab),m=(0,s.useMemo)(()=>p===void 0?[]:f.filter(e=>e.source.kind===p),[p,f]),g=m.find(e=>e.key===t)??m[0];(0,s.useEffect)(()=>{if(m.length===0){n(``);return}m.some(e=>e.key===t)||n((m.find(e=>e.source.inspectable===!0&&(e.source.itemCount??0)>0)??m.find(e=>e.source.inspectable===!0)??m[0])?.key??``)},[t,m]);let _=(0,s.useCallback)(async(e,t)=>{let n=e.key;o(r=>({key:n,loading:!0,inspectable:r?.key===n?r.inspectable:e.source.inspectable===!0,items:t.append&&r?.key===n?r.items:[],...t.append&&r?.key===n&&r.nextCursor!==void 0?{nextCursor:r.nextCursor}:{},...r?.key===n&&r.totalCount!==void 0?{totalCount:r.totalCount}:{}}));try{let r=new URLSearchParams({agentId:e.agentId,sourceId:d(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();o(e=>e?.key===n?{key:n,loading:!1,inspectable:a.inspectable,items:t.append?[...e.items,...a.items]:a.items,...a.nextCursor===void 0?{}:{nextCursor:a.nextCursor},...a.totalCount===void 0?{}:{totalCount:a.totalCount},...a.message===void 0?{}:{message:a.message}}:e)}catch(e){o(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,s.useEffect)(()=>{if(g===void 0){o(void 0);return}_(g,{append:!1})},[_,g]),e.enabled?(0,y.jsxs)(`section`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background/55`,children:[(0,y.jsx)(`header`,{className:`bg-background/70 pb-5 pl-0 pr-6 pt-0 backdrop-blur`,children:(0,y.jsxs)(`div`,{className:`grid w-full grid-cols-[minmax(0,1fr)_auto] items-end gap-4 max-md:grid-cols-1`,children:[(0,y.jsxs)(`div`,{className:`grid min-w-0 gap-2`,children:[(0,y.jsx)(`div`,{className:`font-mono text-[10px] font-semibold uppercase tracking-[0.24em] text-primary`,children:`Agent context`}),(0,y.jsx)(`h1`,{className:`m-0 text-2xl font-semibold leading-none tracking-tight text-foreground`,children:`Knowledge`}),(0,y.jsx)(`p`,{className:`m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground`,children:`Browse configured context, dynamic chunks, and retrieval evidence.`})]}),(0,y.jsxs)(i,{className:`h-8 min-h-8 gap-2`,type:`button`,variant:`secondary`,onClick:e.onRefresh,children:[(0,y.jsx)(r,{"aria-hidden":`true`}),`Refresh`]})]})}),(0,y.jsxs)(`div`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)] gap-4 overflow-hidden pb-6 pl-0 pr-6 pt-0`,children:[(0,y.jsx)(D,{activeTab:e.activeTab,sources:f,evidenceCount:u.length,onSelectTab:e.onSelectTab}),e.activeTab===`retrieval-log`?(0,y.jsx)(S,{evidence:u,onOpenTrace:e.onOpenTrace}):(0,y.jsx)(O,{sources:m,selectedKey:g?.key??``,loading:e.loading,activeTab:e.activeTab,onSelect:n,children:(0,y.jsx)(b,{source:g,state:a,onLoadMore:()=>{g!==void 0&&_(g,a?.nextCursor===void 0?{append:!0}:{append:!0,cursor:a.nextCursor})}})})]})]}):(0,y.jsx)(w,{title:`Knowledge unavailable`,text:`No registered agent exposes inspectable context.`})}function D(e){return(0,y.jsx)(`nav`,{className:`flex min-w-0 gap-7 overflow-x-auto border-b border-border/80`,"aria-label":`Knowledge sections`,children:l.map(t=>{let n=e.activeTab===t.id;return(0,y.jsxs)(`button`,{className:[`flex min-h-10 shrink-0 items-center gap-2 border-b px-0 pb-2 pt-1 text-left transition duration-200 hover:text-foreground focus-visible:outline-none`,n?`border-primary text-foreground`:`border-transparent text-muted-foreground hover:border-border`].join(` `),type:`button`,"aria-current":n?`page`:void 0,onClick:()=>e.onSelectTab(t.id),children:[(0,y.jsx)(`span`,{className:`text-sm font-semibold`,children:t.label}),(0,y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:_(t.id,e.sources,e.evidenceCount)})]},t.id)})})}function O(e){let t=e.sources.length!==1||e.loading;return(0,y.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,y.jsx)(`div`,{className:`min-w-0 overflow-x-auto rounded-xl border border-border/80 bg-card/55`,children:(0,y.jsxs)(`div`,{className:`flex min-h-11 min-w-max items-center gap-2 px-3`,children:[(0,y.jsx)(`span`,{className:`mr-2 font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:g(e.activeTab)}),e.loading&&e.sources.length===0?(0,y.jsx)(`span`,{className:`font-mono text-[11px] text-muted-foreground`,children:`Loading sources`}):null,!e.loading&&e.sources.length===0?(0,y.jsx)(`span`,{className:`font-mono text-[11px] text-muted-foreground`,children:`No knowledge sources`}):null,e.sources.map(t=>(0,y.jsxs)(`button`,{className:[`flex h-7 items-center gap-2 rounded-lg border border-border/80 bg-background/45 px-2.5 font-mono text-[11px] font-semibold text-muted-foreground transition duration-200 hover:border-primary/45 hover:bg-primary/10 hover:text-foreground focus-visible:border-ring focus-visible:outline-none`,e.selectedKey===t.key?`border-primary/45 bg-primary/10 text-primary`:``].join(` `),type:`button`,onClick:()=>e.onSelect(t.key),children:[(0,y.jsx)(`span`,{children:t.source.label??m(t.source.kind)}),t.source.itemCount===void 0?null:(0,y.jsx)(`span`,{className:`text-muted-foreground`,children:t.source.itemCount})]},t.key))]})}):null,e.children]})}export{E as KnowledgePage};
2
- //# sourceMappingURL=knowledge-page-DkuuWYwn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"knowledge-page-DkuuWYwn.js","names":[],"sources":["../../../src/ui/app/modules/knowledge/knowledge-model.ts","../../../src/ui/app/modules/knowledge/knowledge-panels.tsx","../../../src/ui/app/modules/knowledge/knowledge-page.tsx"],"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","import type { StudioKnowledgeItem, StudioKnowledgeSummary } from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { JsonValueView } from \"../shared/renderers\";\nimport {\n type ItemState,\n itemKindLabel,\n type KnowledgeSourceRef,\n sourceId,\n} from \"./knowledge-model\";\n\nexport function ItemBrowser(props: {\n source: KnowledgeSourceRef | undefined;\n state: ItemState | undefined;\n onLoadMore: () => void;\n}) {\n const state = props.state;\n return (\n <section className=\"grid min-h-0 grid-rows-[auto_minmax(0,1fr)_auto] overflow-hidden rounded-xl border border-border/80 bg-card/55\">\n <div className=\"border-b border-border/80 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\">\n {props.source?.source.label ?? \"Knowledge items\"}\n </h2>\n <p className=\"m-0 mt-1 truncate font-mono text-xs text-muted-foreground\">\n {props.source === undefined\n ? \"No source selected\"\n : `${props.source.agentId} / ${sourceId(props.source.source)}`}\n </p>\n </div>\n {state?.totalCount === undefined ? null : <Badge>{state.totalCount} total</Badge>}\n </div>\n </div>\n <div className=\"min-h-0 overflow-auto\">\n <div className=\"p-4\">\n {props.source === undefined ? <MutedRow text=\"No knowledge source selected\" /> : null}\n {state?.loading === true && state.items.length === 0 ? (\n <MutedRow text=\"Loading items\" />\n ) : null}\n {state?.error === undefined ? null : <MutedRow text={state.error} />}\n {state?.inspectable === false ? (\n <MutedRow text={state.message ?? \"This source does not expose browseable chunks.\"} />\n ) : null}\n {state?.inspectable !== false && state?.loading === false && state.items.length === 0 ? (\n <MutedRow text=\"No items in this source\" />\n ) : null}\n <div className=\"grid gap-3\">\n {state?.items.map((item) => (\n <KnowledgeItemCard item={item} key={`${item.kind}:${item.id}`} />\n ))}\n </div>\n </div>\n </div>\n <div className=\"flex min-h-12 items-center justify-between gap-3 bg-muted/10 px-4 py-2\">\n <span className=\"font-mono text-[11px] 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 KnowledgeItemCard(props: { item: StudioKnowledgeItem }) {\n return (\n <article className=\"grid gap-3 rounded-xl border border-border/80 bg-background/55 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 font-mono text-xs font-semibold text-primary\">\n {props.item.toolName ?? props.item.id}\n </div>\n <div className=\"mt-1 font-mono text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n {itemKindLabel(props.item.kind)}\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\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 rounded-xl border border-border/80 bg-card/55\">\n <div className=\"border-b border-border/80 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 font-mono 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 <MutedRow text=\"No retrieval evidence captured yet\" />\n ) : null}\n <div className=\"grid gap-3\">\n {props.evidence.map((item) => (\n <article\n className=\"grid gap-3 rounded-xl border border-border/80 bg-background/45 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 font-mono text-[11px] text-muted-foreground\">\n Turn {item.turn}\n </div>\n </div>\n <Button\n className=\"h-auto min-h-0 rounded-lg border border-border bg-muted px-2 py-1 font-mono text-[10px] 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=\"font-mono 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=\"font-mono 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-border/70 pt-3\">\n <div className=\"font-mono text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n {props.title}\n </div>\n <JsonValueView value={props.value} />\n </div>\n );\n}\n\nexport function EmptyState(props: { title: string; text: string }) {\n return (\n <section className=\"grid h-full place-items-center p-8\">\n <div className=\"grid max-w-sm gap-2 text-center\">\n <h1 className=\"m-0 text-base font-semibold text-foreground\">{props.title}</h1>\n <p className=\"m-0 text-sm font-medium leading-6 text-muted-foreground\">{props.text}</p>\n </div>\n </section>\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 type { KnowledgeTab } from \"../shared/types\";\nimport {\n flattenSources,\n type ItemState,\n itemLimit,\n type KnowledgeSourceRef,\n knowledgeTabs,\n sourceId,\n sourceKindForTab,\n sourceLabel,\n tabCountLabel,\n tabLabel,\n} from \"./knowledge-model\";\nimport { EmptyState, 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 onSelectTab: (tab: KnowledgeTab) => void;\n}) {\n const [selectedKey, setSelectedKey] = useState(\"\");\n const [itemState, setItemState] = useState<ItemState | undefined>();\n\n const agents = props.summary?.agents ?? [];\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\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 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 ...(options.append && current?.key === sourceKey && current.nextCursor !== undefined\n ? { nextCursor: current.nextCursor }\n : {}),\n ...(current?.key === sourceKey && current.totalCount !== undefined\n ? { totalCount: current.totalCount }\n : {}),\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 return {\n key: sourceKey,\n loading: false,\n inspectable: page.inspectable,\n items: options.append ? [...current.items, ...page.items] : page.items,\n ...(page.nextCursor === undefined ? {} : { nextCursor: page.nextCursor }),\n ...(page.totalCount === undefined ? {} : { totalCount: page.totalCount }),\n ...(page.message === undefined ? {} : { message: page.message }),\n };\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 (selectedSource === undefined) {\n setItemState(undefined);\n return;\n }\n void loadItems(selectedSource, { append: false });\n }, [loadItems, selectedSource]);\n\n if (!props.enabled) {\n return (\n <EmptyState\n title=\"Knowledge unavailable\"\n text=\"No registered agent exposes inspectable context.\"\n />\n );\n }\n\n return (\n <section className=\"grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background/55\">\n <header className=\"bg-background/70 pb-5 pl-0 pr-6 pt-0 backdrop-blur\">\n <div className=\"grid w-full grid-cols-[minmax(0,1fr)_auto] items-end gap-4 max-md:grid-cols-1\">\n <div className=\"grid min-w-0 gap-2\">\n <div className=\"font-mono text-[10px] font-semibold uppercase tracking-[0.24em] text-primary\">\n Agent context\n </div>\n <h1 className=\"m-0 text-2xl font-semibold leading-none tracking-tight text-foreground\">\n Knowledge\n </h1>\n <p className=\"m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground\">\n Browse configured context, dynamic chunks, and retrieval evidence.\n </p>\n </div>\n <Button\n className=\"h-8 min-h-8 gap-2\"\n type=\"button\"\n variant=\"secondary\"\n onClick={props.onRefresh}\n >\n <ArrowClockwise aria-hidden=\"true\" />\n Refresh\n </Button>\n </div>\n </header>\n <div className=\"grid min-h-0 grid-rows-[auto_minmax(0,1fr)] gap-4 overflow-hidden pb-6 pl-0 pr-6 pt-0\">\n <KnowledgeTabs\n activeTab={props.activeTab}\n sources={sources}\n evidenceCount={evidence.length}\n onSelectTab={props.onSelectTab}\n />\n {props.activeTab === \"retrieval-log\" ? (\n <RetrievalLogPanel evidence={evidence} onOpenTrace={props.onOpenTrace} />\n ) : (\n <SourceWorkspace\n sources={visibleSources}\n selectedKey={selectedSource?.key ?? \"\"}\n loading={props.loading}\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 </div>\n </section>\n );\n}\n\nfunction KnowledgeTabs(props: {\n activeTab: KnowledgeTab;\n sources: KnowledgeSourceRef[];\n evidenceCount: number;\n onSelectTab: (tab: KnowledgeTab) => void;\n}) {\n return (\n <nav\n className=\"flex min-w-0 gap-7 overflow-x-auto border-b border-border/80\"\n aria-label=\"Knowledge sections\"\n >\n {knowledgeTabs.map((tab) => {\n const active = props.activeTab === tab.id;\n return (\n <button\n className={[\n \"flex min-h-10 shrink-0 items-center gap-2 border-b px-0 pb-2 pt-1 text-left transition duration-200 hover:text-foreground focus-visible:outline-none\",\n active\n ? \"border-primary text-foreground\"\n : \"border-transparent text-muted-foreground hover:border-border\",\n ].join(\" \")}\n key={tab.id}\n type=\"button\"\n aria-current={active ? \"page\" : undefined}\n onClick={() => props.onSelectTab(tab.id)}\n >\n <span className=\"text-sm font-semibold\">{tab.label}</span>\n <span className=\"font-mono text-[10px] text-muted-foreground\">\n {tabCountLabel(tab.id, props.sources, props.evidenceCount)}\n </span>\n </button>\n );\n })}\n </nav>\n );\n}\n\nfunction SourceWorkspace(props: {\n sources: KnowledgeSourceRef[];\n selectedKey: string;\n loading: boolean;\n activeTab: KnowledgeTab;\n onSelect: (key: string) => void;\n children: ReactNode;\n}) {\n const showSources = props.sources.length !== 1 || props.loading;\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 rounded-xl border border-border/80 bg-card/55\">\n <div className=\"flex min-h-11 min-w-max items-center gap-2 px-3\">\n <span className=\"mr-2 font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {tabLabel(props.activeTab)}\n </span>\n {props.loading && props.sources.length === 0 ? (\n <span className=\"font-mono text-[11px] text-muted-foreground\">Loading sources</span>\n ) : null}\n {!props.loading && props.sources.length === 0 ? (\n <span className=\"font-mono text-[11px] text-muted-foreground\">\n No knowledge sources\n </span>\n ) : null}\n {props.sources.map((source) => (\n <button\n className={[\n \"flex h-7 items-center gap-2 rounded-lg border border-border/80 bg-background/45 px-2.5 font-mono text-[11px] font-semibold text-muted-foreground transition duration-200 hover:border-primary/45 hover:bg-primary/10 hover:text-foreground focus-visible:border-ring focus-visible:outline-none\",\n props.selectedKey === source.key\n ? \"border-primary/45 bg-primary/10 text-primary\"\n : \"\",\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"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{r as e}from"./utils-BN2yP0LH.js";import{a as t,i as n,n as r,o as i,r as a}from"./index-CISgSi9m.js";import{t as o}from"./badge-Bqf5Z3q8.js";import{t as s}from"./renderers-BsGl9Gjx.js";var c=e();function l(e){let s=e.agents.find(t=>t.id===e.selectedAgentId)??e.agents[0],l=e.summary?.servers??[],d=l.reduce((e,t)=>e+t.toolCount,0);return(0,c.jsxs)(`section`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background/55`,"aria-label":`MCPs`,children:[(0,c.jsx)(`header`,{className:`bg-background/70 pb-5 pl-0 pr-6 pt-0 backdrop-blur`,children:(0,c.jsxs)(`div`,{className:`grid w-full grid-cols-[minmax(0,1fr)_auto] items-end gap-4 max-md:grid-cols-1`,children:[(0,c.jsxs)(`div`,{className:`grid min-w-0 gap-2`,children:[(0,c.jsx)(`div`,{className:`font-mono text-[10px] font-semibold uppercase tracking-[0.24em] text-primary`,children:`External context`}),(0,c.jsx)(`h1`,{className:`m-0 text-2xl font-semibold leading-none tracking-tight text-foreground`,children:`MCPs`}),(0,c.jsx)(`p`,{className:`m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground`,children:`MCP servers and remote tools registered on Studio agents, grouped by server.`})]}),(0,c.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3 max-md:grid max-md:grid-cols-1`,children:[(0,c.jsxs)(o,{className:`h-9 justify-center border-border/80 bg-card/70 text-muted-foreground`,children:[l.length,` servers / `,d,` tools`]}),e.agents.length>1?(0,c.jsxs)(r,{value:s?.id??``,onValueChange:e.onSelectAgent,children:[(0,c.jsx)(t,{className:`h-9 min-h-9 w-64 rounded-lg border-border bg-card/80 font-mono text-xs max-md:w-full`,children:(0,c.jsx)(i,{placeholder:`Agent`})}),(0,c.jsx)(a,{align:`end`,children:e.agents.map(e=>(0,c.jsx)(n,{value:e.id,children:e.name??e.id},e.id))})]}):null]})]})}),(0,c.jsx)(`div`,{className:`min-h-0 overflow-auto pb-6 pl-0 pr-6`,children:(0,c.jsx)(`div`,{className:`grid w-full gap-5`,children:e.enabled?e.loading?(0,c.jsx)(p,{title:`Loading MCPs`,message:`Reading registered MCP metadata.`}):l.length===0?(0,c.jsx)(p,{title:`No MCPs`,message:`The selected agent has no registered MCP tools.`}):l.map(e=>(0,c.jsx)(u,{server:e},e.name)):(0,c.jsx)(p,{title:`MCPs unavailable`,message:`No registered Studio agent exposes MCP tools.`})})})]})}function u(e){return(0,c.jsxs)(`section`,{className:`overflow-hidden rounded-xl border border-border/80 bg-card/55 p-2 shadow-sm`,children:[(0,c.jsxs)(`header`,{className:`grid min-h-14 grid-cols-[minmax(0,1fr)_auto] items-center gap-4 rounded-lg border border-border/60 bg-muted/20 px-4`,children:[(0,c.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,c.jsx)(`h2`,{className:`m-0 truncate font-mono text-[15px] font-semibold text-foreground`,children:e.server.name}),(0,c.jsx)(`span`,{className:`truncate font-mono text-[11px] font-medium text-muted-foreground`,children:e.server.agentId})]}),(0,c.jsxs)(o,{className:`border-border/80 bg-background/50 text-muted-foreground`,children:[e.server.toolCount,` tools`]})]}),(0,c.jsx)(`div`,{className:`mt-1 grid gap-1`,children:e.server.tools.map(e=>(0,c.jsx)(d,{tool:e},`${e.source}:${e.name}`))})]})}function d(e){return(0,c.jsxs)(`article`,{className:`grid grid-cols-[minmax(300px,0.75fr)_minmax(0,1fr)] gap-2 rounded-lg border border-transparent bg-background/25 p-2 transition duration-200 hover:border-border/70 hover:bg-background/35 max-lg:grid-cols-1`,children:[(0,c.jsxs)(`div`,{className:`grid content-start gap-4 rounded-lg bg-card/25 p-3`,children:[(0,c.jsxs)(`div`,{className:`grid gap-1`,children:[(0,c.jsx)(`h3`,{className:`m-0 truncate font-mono text-[15px] font-semibold text-foreground`,children:e.tool.name}),(0,c.jsx)(`span`,{className:`font-mono text-[11px] font-medium text-muted-foreground`,children:e.tool.source})]}),(0,c.jsx)(`p`,{className:`m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground`,children:e.tool.description}),(0,c.jsxs)(`div`,{className:`flex min-w-0 flex-wrap gap-2`,children:[(0,c.jsx)(o,{className:m(e.tool.source),children:e.tool.source}),(0,c.jsxs)(o,{className:`border-border/80 bg-transparent text-muted-foreground`,children:[g(e.tool.parameters),` fields`]})]})]}),(0,c.jsx)(f,{value:e.tool.parameters})]})}function f(e){return(0,c.jsxs)(`section`,{className:`grid min-w-0 content-start overflow-hidden rounded-lg bg-background/45`,children:[(0,c.jsxs)(`div`,{className:`flex min-h-9 items-center justify-between gap-3 bg-muted/20 px-4`,children:[(0,c.jsx)(`span`,{className:`font-mono text-[10px] font-semibold uppercase tracking-[0.2em] text-muted-foreground`,children:`Parameter schema`}),(0,c.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:h(e.value)})]}),(0,c.jsx)(`div`,{className:`min-w-0 overflow-x-auto`,children:(0,c.jsx)(`pre`,{className:`m-0 max-h-80 min-w-max p-4 font-mono text-[12px] leading-5 text-foreground`,children:(0,c.jsx)(`code`,{children:(0,c.jsx)(s,{text:_(e.value)})})})})]})}function p(e){return(0,c.jsx)(`div`,{className:`grid min-h-80 place-items-center rounded-xl border border-dashed border-border/80 bg-card/35 px-6 text-center`,children:(0,c.jsxs)(`div`,{className:`grid max-w-md gap-2`,children:[(0,c.jsx)(`h2`,{className:`m-0 text-base font-semibold text-foreground`,children:e.title}),(0,c.jsx)(`p`,{className:`m-0 text-sm leading-6 text-muted-foreground`,children:e.message})]})})}function m(e){return e===`dynamic`?`border-primary/35 bg-primary/10 text-primary`:`border-border/80 bg-muted/55 text-muted-foreground`}function h(e){if(typeof e!=`object`||!e||Array.isArray(e))return`value`;let t=e.type;return typeof t==`string`?t:`object`}function g(e){if(typeof e!=`object`||!e||Array.isArray(e))return 0;let t=e.properties;return typeof t==`object`&&t&&!Array.isArray(t)?Object.keys(t).length:0}function _(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}export{l as McpsPage};
2
- //# sourceMappingURL=mcps-page-Cg44hTqs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcps-page-Cg44hTqs.js","names":[],"sources":["../../../src/ui/app/modules/mcps/mcps-page.tsx"],"sourcesContent":["import type {\n StudioAgentMcpServerMetadata,\n StudioAgentMcpsSummary,\n StudioAgentMcpToolMetadata,\n StudioConfig,\n} from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { JsonSyntax } from \"../shared/renderers\";\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 = props.summary?.servers ?? [];\n const toolCount = servers.reduce((total, server) => total + server.toolCount, 0);\n\n return (\n <section\n className=\"grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background/55\"\n aria-label=\"MCPs\"\n >\n <header className=\"bg-background/70 pb-5 pl-0 pr-6 pt-0 backdrop-blur\">\n <div className=\"grid w-full grid-cols-[minmax(0,1fr)_auto] items-end gap-4 max-md:grid-cols-1\">\n <div className=\"grid min-w-0 gap-2\">\n <div className=\"font-mono text-[10px] font-semibold uppercase tracking-[0.24em] text-primary\">\n External context\n </div>\n <h1 className=\"m-0 text-2xl font-semibold leading-none tracking-tight text-foreground\">\n MCPs\n </h1>\n <p className=\"m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground\">\n MCP servers and remote tools registered on Studio agents, grouped by server.\n </p>\n </div>\n <div className=\"flex min-w-0 items-center gap-3 max-md:grid max-md:grid-cols-1\">\n <Badge className=\"h-9 justify-center border-border/80 bg-card/70 text-muted-foreground\">\n {servers.length} servers / {toolCount} tools\n </Badge>\n {props.agents.length > 1 ? (\n <Select value={selectedAgent?.id ?? \"\"} onValueChange={props.onSelectAgent}>\n <SelectTrigger className=\"h-9 min-h-9 w-64 rounded-lg border-border bg-card/80 font-mono text-xs max-md: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 </div>\n </header>\n\n <div className=\"min-h-0 overflow-auto pb-6 pl-0 pr-6\">\n <div className=\"grid w-full gap-5\">\n {!props.enabled ? (\n <EmptyState\n title=\"MCPs unavailable\"\n message=\"No registered Studio agent exposes MCP tools.\"\n />\n ) : props.loading ? (\n <EmptyState title=\"Loading MCPs\" message=\"Reading registered MCP metadata.\" />\n ) : servers.length === 0 ? (\n <EmptyState title=\"No MCPs\" message=\"The selected agent has no registered MCP tools.\" />\n ) : (\n servers.map((server) => <McpServerSection server={server} key={server.name} />)\n )}\n </div>\n </div>\n </section>\n );\n}\n\nfunction McpServerSection(props: { server: StudioAgentMcpServerMetadata }) {\n return (\n <section className=\"overflow-hidden rounded-xl border border-border/80 bg-card/55 p-2 shadow-sm\">\n <header className=\"grid min-h-14 grid-cols-[minmax(0,1fr)_auto] items-center gap-4 rounded-lg border border-border/60 bg-muted/20 px-4\">\n <div className=\"grid min-w-0 gap-1\">\n <h2 className=\"m-0 truncate font-mono text-[15px] font-semibold text-foreground\">\n {props.server.name}\n </h2>\n <span className=\"truncate font-mono text-[11px] font-medium text-muted-foreground\">\n {props.server.agentId}\n </span>\n </div>\n <Badge className=\"border-border/80 bg-background/50 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 tool={tool} key={`${tool.source}:${tool.name}`} />\n ))}\n </div>\n </section>\n );\n}\n\nfunction McpToolRow(props: { tool: StudioAgentMcpToolMetadata }) {\n return (\n <article className=\"grid grid-cols-[minmax(300px,0.75fr)_minmax(0,1fr)] gap-2 rounded-lg border border-transparent bg-background/25 p-2 transition duration-200 hover:border-border/70 hover:bg-background/35 max-lg:grid-cols-1\">\n <div className=\"grid content-start gap-4 rounded-lg bg-card/25 p-3\">\n <div className=\"grid gap-1\">\n <h3 className=\"m-0 truncate font-mono text-[15px] font-semibold text-foreground\">\n {props.tool.name}\n </h3>\n <span className=\"font-mono text-[11px] font-medium text-muted-foreground\">\n {props.tool.source}\n </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-border/80 bg-transparent text-muted-foreground\">\n {schemaPropertyCount(props.tool.parameters)} fields\n </Badge>\n </div>\n </div>\n <SchemaBlock value={props.tool.parameters} />\n </article>\n );\n}\n\nfunction SchemaBlock(props: { value: unknown }) {\n return (\n <section className=\"grid min-w-0 content-start overflow-hidden rounded-lg bg-background/45\">\n <div className=\"flex min-h-9 items-center justify-between gap-3 bg-muted/20 px-4\">\n <span className=\"font-mono text-[10px] font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n Parameter schema\n </span>\n <span className=\"font-mono text-[10px] text-muted-foreground\">\n {schemaType(props.value)}\n </span>\n </div>\n <div className=\"min-w-0 overflow-x-auto\">\n <pre className=\"m-0 max-h-80 min-w-max p-4 font-mono text-[12px] leading-5 text-foreground\">\n <code>\n <JsonSyntax text={formatSchema(props.value)} />\n </code>\n </pre>\n </div>\n </section>\n );\n}\n\nfunction EmptyState(props: { title: string; message: string }) {\n return (\n <div className=\"grid min-h-80 place-items-center rounded-xl border border-dashed border-border/80 bg-card/35 px-6 text-center\">\n <div className=\"grid max-w-md gap-2\">\n <h2 className=\"m-0 text-base font-semibold text-foreground\">{props.title}</h2>\n <p className=\"m-0 text-sm leading-6 text-muted-foreground\">{props.message}</p>\n </div>\n </div>\n );\n}\n\nfunction sourceBadgeClass(source: \"static\" | \"dynamic\"): string {\n return source === \"dynamic\"\n ? \"border-primary/35 bg-primary/10 text-primary\"\n : \"border-border/80 bg-muted/55 text-muted-foreground\";\n}\n\nfunction schemaType(value: unknown): string {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return \"value\";\n }\n const type = (value as { type?: unknown }).type;\n return typeof type === \"string\" ? type : \"object\";\n}\n\nfunction schemaPropertyCount(value: unknown): number {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return 0;\n }\n const properties = (value as { properties?: unknown }).properties;\n return typeof properties === \"object\" && properties !== null && !Array.isArray(properties)\n ? Object.keys(properties).length\n : 0;\n}\n\nfunction formatSchema(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{i as e,r as t,s as n}from"./utils-BN2yP0LH.js";import{R as r,w as i}from"./index-CISgSi9m.js";import{t as a}from"./badge-Bqf5Z3q8.js";import{t as o}from"./renderers-BsGl9Gjx.js";var s=n(e(),1),c=t();function l(e){let[t,n]=(0,s.useState)([]),[o,l]=(0,s.useState)([]),[g,_]=(0,s.useState)(``),[v,y]=(0,s.useState)(``),[b,x]=(0,s.useState)(),[S,C]=(0,s.useState)(),[w,T]=(0,s.useState)(!1),[E,D]=(0,s.useState)(!1),[O,k]=(0,s.useState)(``),A=(0,s.useCallback)(async()=>{if(!e.enabled){n([]),l([]),x(void 0),C(void 0);return}T(!0),k(``);try{let[e,t]=await Promise.all([fetch(`/memory/users?limit=50`),fetch(`/memory/conversations?limit=100`)]);if(!e.ok)throw Error(`Memory users failed with HTTP ${e.status}`);if(!t.ok)throw Error(`Memory conversations failed with HTTP ${t.status}`);let r=await e.json(),i=await t.json();n(r.users),l(i.conversations),y(e=>e||i.conversations[0]?.id||``)}catch(e){k(e instanceof Error?e.message:String(e))}finally{T(!1)}},[e.enabled]);(0,s.useEffect)(()=>{A()},[A]),(0,s.useEffect)(()=>{if(!e.enabled||v.length===0){x(void 0),C(void 0);return}let t=!1;async function n(){D(!0);try{let[e,n]=await Promise.all([fetch(`/memory/conversations/${encodeURIComponent(v)}/messages`),fetch(`/memory/conversations/${encodeURIComponent(v)}/steps`)]);if(!e.ok)throw Error(`Conversation messages failed with HTTP ${e.status}`);if(!n.ok)throw Error(`Conversation steps failed with HTTP ${n.status}`);t||(x(await e.json()),C(await n.json()))}catch(e){t||(k(e instanceof Error?e.message:String(e)),x(void 0),C(void 0))}finally{t||D(!1)}}return n(),()=>{t=!0}},[e.enabled,v]);let j=g.length===0?o:o.filter(e=>e.userId===g),M=o.find(e=>e.id===v)??j[0];return(0,c.jsxs)(`section`,{className:`grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background/55`,"aria-label":`Memory`,children:[(0,c.jsx)(`header`,{className:`bg-background/70 pb-5 pl-0 pr-6 pt-0 backdrop-blur`,children:(0,c.jsxs)(`div`,{className:`grid w-full grid-cols-[minmax(0,1fr)_auto] items-end gap-4 max-md:grid-cols-1`,children:[(0,c.jsxs)(`div`,{className:`grid min-w-0 gap-2`,children:[(0,c.jsx)(`div`,{className:`font-mono text-[10px] font-semibold uppercase tracking-[0.24em] text-primary`,children:`Conversation store`}),(0,c.jsx)(`h1`,{className:`m-0 text-2xl font-semibold leading-none tracking-tight text-foreground`,children:`Memory`}),(0,c.jsx)(`p`,{className:`m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground`,children:`Stored users, conversations, raw messages, and transcript steps from the Studio session store.`})]}),(0,c.jsx)(i,{className:`h-9 min-h-9 rounded-lg px-3 font-mono text-xs`,type:`button`,variant:`secondary`,disabled:w,onClick:()=>void A(),children:`Refresh`})]})}),(0,c.jsx)(`div`,{className:`min-h-0 overflow-auto pb-6 pl-0 pr-6`,children:e.enabled?w&&o.length===0?(0,c.jsx)(m,{title:`Loading memory`,text:`Reading users and conversations.`}):O.length>0&&o.length===0?(0,c.jsx)(m,{title:`Memory error`,text:O}):(0,c.jsxs)(`div`,{className:`grid min-h-0 gap-4 xl:grid-cols-[280px_minmax(320px,0.8fr)_minmax(0,1.2fr)]`,children:[(0,c.jsxs)(`section`,{className:`grid content-start gap-2 rounded-xl border border-border/80 bg-card/45 p-3`,children:[(0,c.jsx)(f,{title:`Users`,value:t.length}),(0,c.jsx)(i,{className:`h-auto min-h-9 justify-start rounded-lg px-3 py-2 text-left font-mono text-xs`,type:`button`,variant:g.length===0?`secondary`:`ghost`,onClick:()=>_(``),children:`All users`}),t.map(e=>(0,c.jsxs)(i,{className:`grid h-auto min-h-14 justify-start rounded-lg px-3 py-2 text-left`,type:`button`,variant:g===e.userId?`secondary`:`ghost`,onClick:()=>_(e.userId),children:[(0,c.jsx)(`span`,{className:`min-w-0 truncate font-mono text-xs font-semibold`,children:e.userId}),(0,c.jsxs)(`span`,{className:`min-w-0 truncate text-xs text-muted-foreground`,children:[e.conversationCount,` conversations ·`,` `,r(e.lastInteractionAt)]})]},e.userId))]}),(0,c.jsxs)(`section`,{className:`grid content-start gap-2 rounded-xl border border-border/80 bg-card/45 p-3`,children:[(0,c.jsx)(f,{title:`Conversations`,value:j.length}),j.length===0?(0,c.jsx)(`div`,{className:`rounded-lg border border-dashed border-border/80 bg-background/45 px-3 py-8 text-center text-sm text-muted-foreground`,children:`No conversations.`}):j.map(t=>(0,c.jsx)(u,{conversation:t,agentName:h(e.agents,t.agentId),active:t.id===v,onSelect:()=>y(t.id)},t.id))]}),(0,c.jsx)(`section`,{className:`grid min-h-0 content-start gap-4`,children:M===void 0?(0,c.jsx)(m,{title:`No conversation selected`,text:`Choose a conversation to inspect.`}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)(`article`,{className:`grid gap-3 rounded-xl border border-border/80 bg-card/45 p-5`,children:[(0,c.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-start justify-between gap-3`,children:[(0,c.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,c.jsx)(`h2`,{className:`m-0 min-w-0 truncate text-lg font-semibold text-foreground`,children:M.title??`Untitled conversation`}),(0,c.jsx)(`span`,{className:`min-w-0 break-all font-mono text-xs text-muted-foreground`,children:M.id})]}),(0,c.jsx)(a,{className:`border-primary/35 bg-primary/10 text-primary`,children:h(e.agents,M.agentId)})]}),(0,c.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-3`,children:[(0,c.jsx)(p,{label:`user`,value:M.userId}),(0,c.jsx)(p,{label:`messages`,value:M.messageCount}),(0,c.jsx)(p,{label:`updated`,value:r(M.updatedAt)})]})]}),E?(0,c.jsx)(m,{title:`Loading detail`,text:`Reading message and transcript data.`}):(0,c.jsxs)(`div`,{className:`grid gap-4`,children:[(0,c.jsx)(d,{title:`messages`,value:b?.messages??[]}),(0,c.jsx)(d,{title:`steps`,value:S?.steps??[]})]})]})})]}):(0,c.jsx)(m,{title:`Memory unavailable`,text:`This Studio runtime has no session store.`})})]})}function u(e){return(0,c.jsxs)(i,{className:`grid h-auto min-h-20 justify-start gap-2 rounded-lg px-3 py-3 text-left`,type:`button`,variant:e.active?`secondary`:`ghost`,onClick:e.onSelect,children:[(0,c.jsxs)(`div`,{className:`grid min-w-0 gap-1`,children:[(0,c.jsx)(`span`,{className:`min-w-0 truncate text-sm font-semibold text-foreground`,children:e.conversation.title??`Untitled conversation`}),(0,c.jsxs)(`span`,{className:`min-w-0 truncate font-mono text-[11px] text-muted-foreground`,children:[e.agentName,` · `,e.conversation.userId]})]}),(0,c.jsxs)(`span`,{className:`font-mono text-[11px] text-muted-foreground`,children:[e.conversation.messageCount,` messages ·`,` `,r(e.conversation.updatedAt)]})]})}function d(e){let t=Array.isArray(e.value)?e.value.length:void 0;return(0,c.jsxs)(`section`,{className:`grid min-w-0 overflow-hidden rounded-xl border border-border/80 bg-card/45`,children:[(0,c.jsx)(`div`,{className:`flex min-h-10 items-center justify-between gap-3 border-b border-border/80 bg-muted/20 px-4`,children:(0,c.jsx)(f,{title:e.title,...t===void 0?{}:{value:t}})}),(0,c.jsx)(`div`,{className:`min-w-0 overflow-x-auto`,children:(0,c.jsx)(`pre`,{className:`m-0 max-h-96 min-w-max p-4 font-mono text-[12px] leading-5 text-foreground`,children:(0,c.jsx)(`code`,{children:(0,c.jsx)(o,{text:JSON.stringify(e.value,null,2)})})})})]})}function f(e){return(0,c.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3`,children:[(0,c.jsx)(`h2`,{className:`m-0 font-mono text-[10px] font-semibold uppercase tracking-[0.2em] text-muted-foreground`,children:e.title}),e.value===void 0?null:(0,c.jsx)(`span`,{className:`font-mono text-[10px] font-semibold text-muted-foreground`,children:e.value})]})}function p(e){return(0,c.jsxs)(`div`,{className:`grid min-w-0 gap-1 rounded-lg bg-background/45 px-3 py-2`,children:[(0,c.jsx)(`span`,{className:`font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground`,children:e.label}),(0,c.jsx)(`span`,{className:`min-w-0 truncate font-mono text-xs text-foreground`,title:String(e.value),children:e.value})]})}function m(e){return(0,c.jsx)(`div`,{className:`grid min-h-80 place-items-center rounded-xl border border-dashed border-border/80 bg-card/35 px-6 text-center`,children:(0,c.jsxs)(`div`,{className:`grid max-w-md gap-2`,children:[(0,c.jsx)(`h2`,{className:`m-0 text-base font-semibold text-foreground`,children:e.title}),(0,c.jsx)(`p`,{className:`m-0 text-sm leading-6 text-muted-foreground`,children:e.text})]})})}function h(e,t){return e.find(e=>e.id===t)?.name??t}export{l as MemoryPage};
2
- //# sourceMappingURL=memory-page-CSfAtDIq.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-page-CSfAtDIq.js","names":[],"sources":["../../../src/ui/app/modules/memory/memory-page.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport type {\n StudioConfig,\n StudioMemoryConversationMessages,\n StudioMemoryConversationSteps,\n StudioMemoryConversationSummary,\n StudioMemoryConversationsPage,\n StudioMemoryUsersPage,\n} from \"../../../../types\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { formatRelativeTime } from \"../shared/format\";\nimport { JsonSyntax } from \"../shared/renderers\";\n\nexport function MemoryPage(props: { agents: StudioConfig[\"agents\"]; enabled: boolean }) {\n const [users, setUsers] = useState<StudioMemoryUsersPage[\"users\"]>([]);\n const [conversations, setConversations] = useState<StudioMemoryConversationSummary[]>([]);\n const [selectedUserId, setSelectedUserId] = useState(\"\");\n const [selectedConversationId, setSelectedConversationId] = useState(\"\");\n const [messages, setMessages] = useState<StudioMemoryConversationMessages | undefined>();\n const [steps, setSteps] = useState<StudioMemoryConversationSteps | undefined>();\n const [loading, setLoading] = useState(false);\n const [detailLoading, setDetailLoading] = useState(false);\n const [error, setError] = useState(\"\");\n\n const loadMemory = useCallback(async () => {\n if (!props.enabled) {\n setUsers([]);\n setConversations([]);\n setMessages(undefined);\n setSteps(undefined);\n return;\n }\n setLoading(true);\n setError(\"\");\n try {\n const [usersResponse, conversationsResponse] = await Promise.all([\n fetch(\"/memory/users?limit=50\"),\n fetch(\"/memory/conversations?limit=100\"),\n ]);\n if (!usersResponse.ok) {\n throw new Error(`Memory users failed with HTTP ${usersResponse.status}`);\n }\n if (!conversationsResponse.ok) {\n throw new Error(`Memory conversations failed with HTTP ${conversationsResponse.status}`);\n }\n const usersBody = (await usersResponse.json()) as StudioMemoryUsersPage;\n const conversationsBody =\n (await conversationsResponse.json()) as StudioMemoryConversationsPage;\n setUsers(usersBody.users);\n setConversations(conversationsBody.conversations);\n setSelectedConversationId(\n (current) => current || conversationsBody.conversations[0]?.id || \"\",\n );\n } catch (loadError) {\n setError(loadError instanceof Error ? loadError.message : String(loadError));\n } finally {\n setLoading(false);\n }\n }, [props.enabled]);\n\n useEffect(() => {\n void loadMemory();\n }, [loadMemory]);\n\n useEffect(() => {\n if (!props.enabled || selectedConversationId.length === 0) {\n setMessages(undefined);\n setSteps(undefined);\n return;\n }\n let cancelled = false;\n async function loadDetail() {\n setDetailLoading(true);\n try {\n const [messagesResponse, stepsResponse] = await Promise.all([\n fetch(`/memory/conversations/${encodeURIComponent(selectedConversationId)}/messages`),\n fetch(`/memory/conversations/${encodeURIComponent(selectedConversationId)}/steps`),\n ]);\n if (!messagesResponse.ok) {\n throw new Error(`Conversation messages failed with HTTP ${messagesResponse.status}`);\n }\n if (!stepsResponse.ok) {\n throw new Error(`Conversation steps failed with HTTP ${stepsResponse.status}`);\n }\n if (!cancelled) {\n setMessages((await messagesResponse.json()) as StudioMemoryConversationMessages);\n setSteps((await stepsResponse.json()) as StudioMemoryConversationSteps);\n }\n } catch (loadError) {\n if (!cancelled) {\n setError(loadError instanceof Error ? loadError.message : String(loadError));\n setMessages(undefined);\n setSteps(undefined);\n }\n } finally {\n if (!cancelled) {\n setDetailLoading(false);\n }\n }\n }\n void loadDetail();\n return () => {\n cancelled = true;\n };\n }, [props.enabled, selectedConversationId]);\n\n const visibleConversations =\n selectedUserId.length === 0\n ? conversations\n : conversations.filter((conversation) => conversation.userId === selectedUserId);\n const selectedConversation =\n conversations.find((conversation) => conversation.id === selectedConversationId) ??\n visibleConversations[0];\n\n return (\n <section\n className=\"grid min-h-0 grid-rows-[auto_minmax(0,1fr)] overflow-hidden bg-background/55\"\n aria-label=\"Memory\"\n >\n <header className=\"bg-background/70 pb-5 pl-0 pr-6 pt-0 backdrop-blur\">\n <div className=\"grid w-full grid-cols-[minmax(0,1fr)_auto] items-end gap-4 max-md:grid-cols-1\">\n <div className=\"grid min-w-0 gap-2\">\n <div className=\"font-mono text-[10px] font-semibold uppercase tracking-[0.24em] text-primary\">\n Conversation store\n </div>\n <h1 className=\"m-0 text-2xl font-semibold leading-none tracking-tight text-foreground\">\n Memory\n </h1>\n <p className=\"m-0 max-w-[62ch] text-sm leading-6 text-muted-foreground\">\n Stored users, conversations, raw messages, and transcript steps from the Studio\n session store.\n </p>\n </div>\n <Button\n className=\"h-9 min-h-9 rounded-lg px-3 font-mono text-xs\"\n type=\"button\"\n variant=\"secondary\"\n disabled={loading}\n onClick={() => void loadMemory()}\n >\n Refresh\n </Button>\n </div>\n </header>\n\n <div className=\"min-h-0 overflow-auto pb-6 pl-0 pr-6\">\n {!props.enabled ? (\n <EmptyState title=\"Memory unavailable\" text=\"This Studio runtime has no session store.\" />\n ) : loading && conversations.length === 0 ? (\n <EmptyState title=\"Loading memory\" text=\"Reading users and conversations.\" />\n ) : error.length > 0 && conversations.length === 0 ? (\n <EmptyState title=\"Memory error\" text={error} />\n ) : (\n <div className=\"grid min-h-0 gap-4 xl:grid-cols-[280px_minmax(320px,0.8fr)_minmax(0,1.2fr)]\">\n <section className=\"grid content-start gap-2 rounded-xl border border-border/80 bg-card/45 p-3\">\n <PanelHeader title=\"Users\" value={users.length} />\n <Button\n className=\"h-auto min-h-9 justify-start rounded-lg px-3 py-2 text-left font-mono text-xs\"\n type=\"button\"\n variant={selectedUserId.length === 0 ? \"secondary\" : \"ghost\"}\n onClick={() => setSelectedUserId(\"\")}\n >\n All users\n </Button>\n {users.map((user) => (\n <Button\n className=\"grid h-auto min-h-14 justify-start rounded-lg px-3 py-2 text-left\"\n type=\"button\"\n variant={selectedUserId === user.userId ? \"secondary\" : \"ghost\"}\n onClick={() => setSelectedUserId(user.userId)}\n key={user.userId}\n >\n <span className=\"min-w-0 truncate font-mono text-xs font-semibold\">\n {user.userId}\n </span>\n <span className=\"min-w-0 truncate text-xs text-muted-foreground\">\n {user.conversationCount} conversations ·{\" \"}\n {formatRelativeTime(user.lastInteractionAt)}\n </span>\n </Button>\n ))}\n </section>\n\n <section className=\"grid content-start gap-2 rounded-xl border border-border/80 bg-card/45 p-3\">\n <PanelHeader title=\"Conversations\" value={visibleConversations.length} />\n {visibleConversations.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-border/80 bg-background/45 px-3 py-8 text-center text-sm text-muted-foreground\">\n No conversations.\n </div>\n ) : (\n visibleConversations.map((conversation) => (\n <ConversationButton\n key={conversation.id}\n conversation={conversation}\n agentName={agentLabel(props.agents, conversation.agentId)}\n active={conversation.id === selectedConversationId}\n onSelect={() => setSelectedConversationId(conversation.id)}\n />\n ))\n )}\n </section>\n\n <section className=\"grid min-h-0 content-start gap-4\">\n {selectedConversation === undefined ? (\n <EmptyState\n title=\"No conversation selected\"\n text=\"Choose a conversation to inspect.\"\n />\n ) : (\n <>\n <article className=\"grid gap-3 rounded-xl border border-border/80 bg-card/45 p-5\">\n <div className=\"flex min-w-0 flex-wrap items-start justify-between gap-3\">\n <div className=\"grid min-w-0 gap-1\">\n <h2 className=\"m-0 min-w-0 truncate text-lg font-semibold text-foreground\">\n {selectedConversation.title ?? \"Untitled conversation\"}\n </h2>\n <span className=\"min-w-0 break-all font-mono text-xs text-muted-foreground\">\n {selectedConversation.id}\n </span>\n </div>\n <Badge className=\"border-primary/35 bg-primary/10 text-primary\">\n {agentLabel(props.agents, selectedConversation.agentId)}\n </Badge>\n </div>\n <div className=\"grid gap-2 sm:grid-cols-3\">\n <Fact label=\"user\" value={selectedConversation.userId} />\n <Fact label=\"messages\" value={selectedConversation.messageCount} />\n <Fact\n label=\"updated\"\n value={formatRelativeTime(selectedConversation.updatedAt)}\n />\n </div>\n </article>\n {detailLoading ? (\n <EmptyState\n title=\"Loading detail\"\n text=\"Reading message and transcript data.\"\n />\n ) : (\n <div className=\"grid gap-4\">\n <JsonPanel title=\"messages\" value={messages?.messages ?? []} />\n <JsonPanel title=\"steps\" value={steps?.steps ?? []} />\n </div>\n )}\n </>\n )}\n </section>\n </div>\n )}\n </div>\n </section>\n );\n}\n\nfunction ConversationButton(props: {\n conversation: StudioMemoryConversationSummary;\n agentName: string;\n active: boolean;\n onSelect: () => void;\n}) {\n return (\n <Button\n className=\"grid h-auto min-h-20 justify-start gap-2 rounded-lg px-3 py-3 text-left\"\n type=\"button\"\n variant={props.active ? \"secondary\" : \"ghost\"}\n onClick={props.onSelect}\n >\n <div className=\"grid min-w-0 gap-1\">\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">\n {props.conversation.title ?? \"Untitled conversation\"}\n </span>\n <span className=\"min-w-0 truncate font-mono text-[11px] text-muted-foreground\">\n {props.agentName} · {props.conversation.userId}\n </span>\n </div>\n <span className=\"font-mono text-[11px] text-muted-foreground\">\n {props.conversation.messageCount} messages ·{\" \"}\n {formatRelativeTime(props.conversation.updatedAt)}\n </span>\n </Button>\n );\n}\n\nfunction JsonPanel(props: { title: string; value: unknown }) {\n const count = Array.isArray(props.value) ? props.value.length : undefined;\n return (\n <section className=\"grid min-w-0 overflow-hidden rounded-xl border border-border/80 bg-card/45\">\n <div className=\"flex min-h-10 items-center justify-between gap-3 border-b border-border/80 bg-muted/20 px-4\">\n <PanelHeader title={props.title} {...(count === undefined ? {} : { value: count })} />\n </div>\n <div className=\"min-w-0 overflow-x-auto\">\n <pre className=\"m-0 max-h-96 min-w-max p-4 font-mono text-[12px] leading-5 text-foreground\">\n <code>\n <JsonSyntax text={JSON.stringify(props.value, null, 2)} />\n </code>\n </pre>\n </div>\n </section>\n );\n}\n\nfunction PanelHeader(props: { title: string; value?: number }) {\n return (\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <h2 className=\"m-0 font-mono text-[10px] font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n {props.title}\n </h2>\n {props.value === undefined ? null : (\n <span className=\"font-mono text-[10px] font-semibold text-muted-foreground\">\n {props.value}\n </span>\n )}\n </div>\n );\n}\n\nfunction Fact(props: { label: string; value: string | number }) {\n return (\n <div className=\"grid min-w-0 gap-1 rounded-lg bg-background/45 px-3 py-2\">\n <span className=\"font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {props.label}\n </span>\n <span\n className=\"min-w-0 truncate font-mono text-xs text-foreground\"\n title={String(props.value)}\n >\n {props.value}\n </span>\n </div>\n );\n}\n\nfunction EmptyState(props: { title: string; text: string }) {\n return (\n <div className=\"grid min-h-80 place-items-center rounded-xl border border-dashed border-border/80 bg-card/35 px-6 text-center\">\n <div className=\"grid max-w-md gap-2\">\n <h2 className=\"m-0 text-base font-semibold text-foreground\">{props.title}</h2>\n <p className=\"m-0 text-sm leading-6 text-muted-foreground\">{props.text}</p>\n </div>\n </div>\n );\n}\n\nfunction agentLabel(agents: StudioConfig[\"agents\"], agentId: string): string {\n return agents.find((agent) => agent.id === agentId)?.name ?? agentId;\n}\n"],"mappings":"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"}