koishi-plugin-chatluna-studio 1.0.0

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 (37) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/dist/index.js +45313 -0
  4. package/dist/style.css +1 -0
  5. package/lib/chatluna/error.d.ts +15 -0
  6. package/lib/chatluna/runtime.d.ts +25 -0
  7. package/lib/chatluna/session-tracker.d.ts +98 -0
  8. package/lib/chatluna/usage.d.ts +46 -0
  9. package/lib/console-contract.d.ts +61 -0
  10. package/lib/console.d.ts +39 -0
  11. package/lib/evidence-kind.d.ts +61 -0
  12. package/lib/evidence-preview-text.d.ts +13 -0
  13. package/lib/index.d.ts +42 -0
  14. package/lib/index.js +4579 -0
  15. package/lib/model-evidence/index.d.ts +15 -0
  16. package/lib/model-evidence/metrics.d.ts +11 -0
  17. package/lib/model-evidence/request.d.ts +7 -0
  18. package/lib/model-evidence/response.d.ts +7 -0
  19. package/lib/model-evidence/shared.d.ts +37 -0
  20. package/lib/model-evidence/transport.d.ts +13 -0
  21. package/lib/model-evidence/types.d.ts +104 -0
  22. package/lib/model-evidence/usage.d.ts +10 -0
  23. package/lib/model-request-collector.d.ts +32 -0
  24. package/lib/model-request-trajectory.d.ts +21 -0
  25. package/lib/model-request-variables.d.ts +16 -0
  26. package/lib/model-request.d.ts +158 -0
  27. package/lib/persistence.d.ts +85 -0
  28. package/lib/presets/evidence-match.d.ts +9 -0
  29. package/lib/presets/index.d.ts +6 -0
  30. package/lib/presets/repository.d.ts +86 -0
  31. package/lib/presets/runtime-correlation.d.ts +16 -0
  32. package/lib/presets/service.d.ts +69 -0
  33. package/lib/presets/source-document.d.ts +2 -0
  34. package/lib/presets/types.d.ts +63 -0
  35. package/lib/record-store.d.ts +85 -0
  36. package/lib/types.d.ts +270 -0
  37. package/package.json +110 -0
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ .studio-badge[data-v-5183b367]{display:inline-flex;flex-shrink:0;height:18px;align-items:center;justify-content:center;padding:0 6px;border:0;border-radius:5px;font-size:var(--chatluna-studio-font-2xs);font-weight:500;line-height:1;white-space:nowrap}.studio-badge[data-variant=secondary][data-v-5183b367]{color:#64748b;background:#e2e8f0}.dark{color:#cbd5e1;background:#334155}.studio-dialog-content[data-v-4235314f]{gap:var(--chatluna-studio-secondary-row-gap, 8px)}.studio-dialog-description[data-v-63dfe400]{margin:0}.studio-dialog-footer[data-v-0c23f63f]{display:flex;justify-content:flex-end;gap:var(--chatluna-studio-secondary-row-gap, 8px);padding-top:var(--chatluna-studio-secondary-row-gap, 8px)}.studio-dialog-header[data-v-e4afb6c3]{display:grid;gap:var(--chatluna-studio-secondary-title-gap, 4px);padding-right:32px}.studio-dialog-title[data-v-7f1fe426]{margin:0}/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-100: oklch(93.6% .032 17.717);--color-red-300: oklch(80.8% .114 19.571);--color-red-500: oklch(63.7% .237 25.331);--color-red-600: oklch(57.7% .245 27.325);--color-red-700: oklch(50.5% .213 27.518);--color-red-950: oklch(25.8% .092 26.042);--color-slate-100: oklch(96.8% .007 247.896);--color-slate-200: oklch(92.9% .013 255.508);--color-slate-300: oklch(86.9% .022 252.894);--color-slate-400: oklch(70.4% .04 256.788);--color-slate-500: oklch(55.4% .046 257.417);--color-slate-600: oklch(44.6% .043 257.281);--color-slate-700: oklch(37.2% .044 257.287);--color-slate-800: oklch(27.9% .041 260.031);--color-slate-900: oklch(20.8% .042 265.755);--color-slate-950: oklch(12.9% .042 264.695);--color-white: #fff;--spacing: .25rem;--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: 1.5 ;--font-weight-medium: 500;--font-weight-semibold: 600;--radius-2xl: 1rem;--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)}}@layer base{:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]),:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]):after,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *:after,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]):before,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *:before,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::file-selector-button,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) hr{height:0;color:inherit;border-top-width:1px}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) h1,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) h2,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) h3,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) h4,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) h5,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) h6{font-size:inherit;font-weight:inherit}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) b,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) strong{font-weight:bolder}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) code,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) kbd,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) samp,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) 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}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) small{font-size:80%}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) sub,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) sub{bottom:-.25em}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) sup{top:-.5em}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) table{text-indent:0;border-color:inherit;border-collapse:collapse}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) :-moz-focusring:where(:not(iframe)){outline:auto}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) progress{vertical-align:baseline}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) summary{display:list-item}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) ol,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) ul,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) menu{list-style:none}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) img,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) svg,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) video,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) canvas,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) audio,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) iframe,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) embed,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) object{display:block;vertical-align:middle}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) img,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) video{max-width:100%;height:auto}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) button,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) input,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) select,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) optgroup,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) textarea,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::file-selector-button,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) :where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) :where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::file-selector-button,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::file-selector-button{margin-inline-end:4px}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::placeholder,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::placeholder,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::placeholder{color:currentcolor}@supports (color: color-mix(in lab,red,red)){:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::placeholder,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) textarea{resize:vertical}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-search-decoration,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-search-decoration{-webkit-appearance:none}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-date-and-time-value,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-datetime-edit,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-datetime-edit{display:inline-flex}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-datetime-edit-fields-wrapper,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-datetime-edit-fields-wrapper{padding:0}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-datetime-edit,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-datetime-edit,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-datetime-edit-year-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-datetime-edit-year-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-datetime-edit-month-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-datetime-edit-month-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-datetime-edit-day-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-datetime-edit-day-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-datetime-edit-hour-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-datetime-edit-hour-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-datetime-edit-minute-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-datetime-edit-minute-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-datetime-edit-second-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-datetime-edit-second-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-datetime-edit-millisecond-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-datetime-edit-millisecond-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-datetime-edit-meridiem-field,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-datetime-edit-meridiem-field{padding-block:0}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-calendar-picker-indicator,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-calendar-picker-indicator{line-height:1}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) :-moz-ui-invalid{box-shadow:none}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) button,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) input:where([type=button],[type=reset],[type=submit]),:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::file-selector-button,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-inner-spin-button,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-inner-spin-button,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content])::-webkit-outer-spin-button,:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) *::-webkit-outer-spin-button{height:auto}:where(.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]) [hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{inset-inline:0px}.top-4{top:calc(var(--spacing) * 4)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.z-\[100\]{z-index:100}.z-\[120\]{z-index:120}.z-\[150\]{z-index:150}.z-\[151\]{z-index:151}.z-\[200\]{z-index:200}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.h-\(--reka-select-trigger-height\){height:var(--reka-select-trigger-height)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.max-h-\(--reka-select-content-available-height\){max-height:var(--reka-select-content-available-height)}.max-h-\[calc\(100vh-32px\)\]{max-height:calc(100vh - 32px)}.w-9{width:calc(var(--spacing) * 9)}.w-72{width:calc(var(--spacing) * 72)}.w-\[min\(520px\,calc\(100vw-24px\)\)\]{width:min(520px,calc(100vw - 24px))}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\[calc\(100vw-24px\)\]{max-width:calc(100vw - 24px)}.min-w-\(--reka-select-trigger-width\){min-width:var(--reka-select-trigger-width)}.min-w-0{min-width:0px}.min-w-\[8rem\]{min-width:8rem}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.cursor-default{cursor:default}.resize{resize:both}.scroll-my-1{scroll-margin-block:var(--spacing)}.place-content-center{place-content:center}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:calc(infinity * 1px)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-input{border-color:var(--input)}.border-slate-200{border-color:var(--color-slate-200)}.border-transparent{border-color:transparent}.bg-background{background-color:var(--background)}.bg-primary{background-color:var(--primary)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-secondary{background-color:var(--secondary)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-950\/35{background-color:color-mix(in srgb,oklch(12.9% .042 264.695) 35%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-slate-950\/35{background-color:color-mix(in oklab,var(--color-slate-950) 35%,transparent)}}.bg-transparent{background-color:transparent}.bg-white{background-color:var(--color-white)}.p-1{padding:var(--spacing)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pl-2{padding-left:calc(var(--spacing) * 2)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading, var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height))}.leading-5{--tw-leading: calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.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)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-current{color:currentcolor}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-700{color:var(--color-red-700)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-900{color:var(--color-slate-900)}.text-white{color:var(--color-white)}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:50%}.shadow-2xl{--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / .1));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: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / .05));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)}.outline-hidden{--tw-outline-style: none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline:2px solid transparent;outline-offset:2px}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[2px\]{--tw-backdrop-blur: blur(2px);-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-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.transition-none{transition-property:none}.outline-none{--tw-outline-style: none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing) * 7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media(hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.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-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color: color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.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-3:focus-visible{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[var\(--chatluna-studio-accent\)\]:focus-visible{--tw-ring-color: var(--chatluna-studio-accent)}.focus-visible\:ring-red-500\/20:focus-visible{--tw-ring-color: color-mix(in srgb, oklch(63.7% .237 25.331) 20%, transparent)}@supports (color: color-mix(in lab,red,red)){.focus-visible\:ring-red-500\/20:focus-visible{--tw-ring-color: color-mix(in oklab, var(--color-red-500) 20%, transparent)}}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color: var(--ring)}@supports (color: color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style: none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:50%}.has-\[\>svg\]\:px-1\.5:has(>svg){padding-inline:calc(var(--spacing) * 1.5)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing) * 3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing) * 4)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color: var(--destructive)}@supports (color: color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:50%}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing) * 9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing) * 8)}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing) * 2)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x: calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=unchecked\]\:translate-x-0\.5[data-state=unchecked]{--tw-translate-x: calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}@media(min-width:48rem){.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}}.dark\:border-input:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){border-color:var(--input)}.dark\:border-slate-700:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){border-color:var(--color-slate-700)}.dark\:bg-input\/30:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){background-color:var(--input)}@supports (color: color-mix(in lab,red,red)){.dark\:bg-input\/30:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){background-color:color-mix(in oklab,var(--input) 30%,transparent)}}.dark\:bg-red-600:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){background-color:var(--color-red-600)}.dark\:bg-red-950\/50:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){background-color:color-mix(in srgb,oklch(25.8% .092 26.042) 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:bg-red-950\/50:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){background-color:color-mix(in oklab,var(--color-red-950) 50%,transparent)}}.dark\:bg-slate-800:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){background-color:var(--color-slate-800)}.dark\:bg-slate-900:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){background-color:var(--color-slate-900)}.dark\:text-red-300:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){color:var(--color-red-300)}.dark\:text-slate-100:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){color:var(--color-slate-100)}.dark\:text-slate-300:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){color:var(--color-slate-300)}.dark\:text-slate-400:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *){color:var(--color-slate-400)}@media(hover:hover){.dark\:hover\:bg-accent\/50:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *):hover{background-color:var(--accent)}@supports (color: color-mix(in lab,red,red)){.dark\:hover\:bg-accent\/50:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *):hover{background-color:color-mix(in oklab,var(--accent) 50%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *):hover{background-color:var(--input)}@supports (color: color-mix(in lab,red,red)){.dark\:hover\:bg-input\/50:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *):hover{background-color:color-mix(in oklab,var(--input) 50%,transparent)}}.dark\:hover\:bg-red-500:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *):hover{background-color:var(--color-red-500)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *)[aria-invalid=true]{--tw-ring-color: var(--destructive)}@supports (color: color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *,[data-color-mode=dark] *,body[data-chatluna-studio-color-scheme=dark] *)[aria-invalid=true]{--tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent)}}.\[\&_\[data-reka-popper-content-wrapper\]\]\:pointer-events-auto [data-reka-popper-content-wrapper]{pointer-events:auto}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\:not\(\[class\*\=\\\'size-\\\'\]\)\]\:size-4 svg:not([class*="'size-'"]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\:not\(\[class\*\=\\\'text-\\\'\]\)\]\:text-muted-foreground svg:not([class*="'text-'"]){color:var(--muted-foreground)}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing) * 2)}}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-leading{syntax: "*"; inherits: false;}@property --tw-font-weight{syntax: "*"; inherits: false;}@property --tw-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: 0px;}@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-outline-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-blur{syntax: "*"; inherits: false;}@property --tw-brightness{syntax: "*"; inherits: false;}@property --tw-contrast{syntax: "*"; inherits: false;}@property --tw-grayscale{syntax: "*"; inherits: false;}@property --tw-hue-rotate{syntax: "*"; inherits: false;}@property --tw-invert{syntax: "*"; inherits: false;}@property --tw-opacity{syntax: "*"; inherits: false;}@property --tw-saturate{syntax: "*"; inherits: false;}@property --tw-sepia{syntax: "*"; inherits: false;}@property --tw-drop-shadow{syntax: "*"; inherits: false;}@property --tw-drop-shadow-color{syntax: "*"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: "*"; inherits: false;}@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-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;}@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-style: solid;--tw-leading: initial;--tw-font-weight: 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-outline-style: solid;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial;--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-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0}}}:root{--radius: .625rem;--background: oklch(1 0 0);--foreground: oklch(.145 0 0);--card: oklch(1 0 0);--card-foreground: oklch(.145 0 0);--popover: oklch(1 0 0);--popover-foreground: oklch(.145 0 0);--primary: oklch(.205 0 0);--primary-foreground: oklch(.985 0 0);--secondary: oklch(.97 0 0);--secondary-foreground: oklch(.205 0 0);--muted: oklch(.97 0 0);--muted-foreground: oklch(.556 0 0);--accent: oklch(.97 0 0);--accent-foreground: oklch(.205 0 0);--destructive: oklch(.577 .245 27.325);--destructive-foreground: oklch(.577 .245 27.325);--border: oklch(.922 0 0);--input: oklch(.922 0 0);--ring: oklch(.708 0 0)}:is([data-color-mode=dark],body[data-chatluna-studio-color-scheme=dark]){--background: oklch(.145 0 0);--foreground: oklch(.985 0 0);--card: oklch(.205 0 0);--card-foreground: oklch(.985 0 0);--popover: oklch(.205 0 0);--popover-foreground: oklch(.985 0 0);--primary: oklch(.922 0 0);--primary-foreground: oklch(.205 0 0);--secondary: oklch(.269 0 0);--secondary-foreground: oklch(.985 0 0);--muted: oklch(.269 0 0);--muted-foreground: oklch(.708 0 0);--accent: oklch(.269 0 0);--accent-foreground: oklch(.985 0 0);--destructive: oklch(.704 .191 22.216);--destructive-foreground: oklch(.637 .237 25.331);--border: oklch(1 0 0 / 10%);--input: oklch(1 0 0 / 15%);--ring: oklch(.556 0 0)}:is(.chatluna-studio-workspace,.studio-popover-content,.studio-dialog-content,.studio-select-content) .rounded-sm,:is(.studio-popover-content,.studio-dialog-content,.studio-select-content).rounded-sm{border-radius:calc(var(--radius) - 4px)}:is(.chatluna-studio-workspace,.studio-popover-content,.studio-dialog-content,.studio-select-content) .rounded-md,:is(.studio-popover-content,.studio-dialog-content,.studio-select-content).rounded-md{border-radius:calc(var(--radius) - 2px)}:is(.chatluna-studio-workspace,.studio-popover-content,.studio-dialog-content,.studio-select-content) .rounded-lg,:is(.studio-popover-content,.studio-dialog-content,.studio-select-content).rounded-lg{border-radius:var(--radius)}:is(.chatluna-studio-workspace,.studio-popover-content,.studio-dialog-content,.studio-select-content) :is(.shadow-2xs,.shadow-xs,.shadow-sm,.shadow-md,.shadow-lg,.shadow-xl,.shadow-2xl),:is(.studio-popover-content,.studio-dialog-content,.studio-select-content):is(.shadow-2xs,.shadow-xs,.shadow-sm,.shadow-md,.shadow-lg,.shadow-xl,.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)}.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]{--chatluna-studio-font-3xs: 9px;--chatluna-studio-font-2xs: 10px;--chatluna-studio-font-xs: 11px;--chatluna-studio-font-sm: 12px;--chatluna-studio-font-md: 13px;--chatluna-studio-font-lg: 14px;--chatluna-studio-font-xl: 16px;--chatluna-studio-font-2xl: 18px;--chatluna-studio-font-3xl: 24px;--chatluna-studio-font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}.chatluna-studio-workspace{--chatluna-studio-bg: #f8fafc;--chatluna-studio-surface: #f8fafc;--chatluna-studio-surface-muted: #f5f7fb;--chatluna-studio-border: #dfe5ee;--chatluna-studio-text: #202938;--chatluna-studio-muted: #7a8494;--chatluna-studio-hover: #edf2f8;--chatluna-studio-panel: #fff;--chatluna-studio-accent-shadow: color-mix(in srgb, var(--chatluna-studio-accent) 28%, transparent);--chatluna-studio-secondary-outline: color-mix(in srgb, var(--chatluna-studio-border) 72%, transparent);--chatluna-studio-secondary-shadow: 0 18px 42px rgb(15 23 42 / 18%)}.chatluna-studio-workspace[data-color-mode=dark]{--chatluna-studio-bg: #2c2c30;--chatluna-studio-surface: #2c2c30;--chatluna-studio-surface-muted: #323238;--chatluna-studio-border: #45454c;--chatluna-studio-text: #edf2f7;--chatluna-studio-muted: #a1a1aa;--chatluna-studio-hover: #39393f;--chatluna-studio-panel: #333338;--chatluna-studio-secondary-shadow: 0 18px 42px rgb(9 9 11 / 42%)}.studio-dialog-content,.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]{--chatluna-studio-accent: #2563eb;--chatluna-studio-bg: #fff;--chatluna-studio-surface: #f8fafc;--chatluna-studio-surface-muted: #f5f7fb;--chatluna-studio-border: #dfe5ee;--chatluna-studio-text: #202938;--chatluna-studio-muted: #7a8494;--chatluna-studio-hover: #edf2f8;--chatluna-studio-panel: #fff;--chatluna-studio-accent-shadow: color-mix(in srgb, var(--chatluna-studio-accent) 28%, transparent);--chatluna-studio-secondary-outline: color-mix(in srgb, var(--chatluna-studio-border) 72%, transparent);--chatluna-studio-secondary-shadow: 0 18px 42px rgb(15 23 42 / 18%)}body[data-chatluna-studio-color-scheme=dark] :is(.studio-dialog-content,.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]){--chatluna-studio-bg: #2c2c30;--chatluna-studio-surface: #2c2c30;--chatluna-studio-surface-muted: #323238;--chatluna-studio-border: #45454c;--chatluna-studio-text: #edf2f7;--chatluna-studio-muted: #a1a1aa;--chatluna-studio-hover: #39393f;--chatluna-studio-panel: #333338;--chatluna-studio-secondary-shadow: 0 18px 42px rgb(9 9 11 / 42%)}html,body,#app{min-height:100%}.chatluna-studio-layout{--footer-height: 0px}body:has(.chatluna-studio-layout)>#app>.layout-status{display:none}.chatluna-studio-layout .layout-header{display:none}.chatluna-studio-page{height:100vh;min-height:0;overflow:hidden;background:#f8fafc}body[data-chatluna-studio-color-scheme=dark] .chatluna-studio-page{background:#252529}.chatluna-studio-page .el-scrollbar,.chatluna-studio-page .el-scrollbar__wrap,.chatluna-studio-page .el-scrollbar__view,.chatluna-studio-page .k-content{height:100%;min-height:0}.chatluna-studio-page .k-content{width:100%;max-width:none;margin:0;padding:0}.chatluna-studio-workspace{--chatluna-studio-region-padding: 24px;--chatluna-studio-sidebar-icon: 44px;--chatluna-studio-sidebar-pad: 8px;--chatluna-studio-sidebar-inset: var(--chatluna-studio-region-padding);--chatluna-studio-sidebar-gap: 12px;--chatluna-studio-sidebar-rail: calc(var(--chatluna-studio-sidebar-icon) + var(--chatluna-studio-sidebar-pad) * 2 + 2px);--chatluna-studio-sidebar-rail-open: 144px;--chatluna-studio-sidebar-column: calc(var(--chatluna-studio-sidebar-rail) + var(--chatluna-studio-sidebar-inset));display:grid;grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,1fr) var(--chatluna-studio-sidebar-column);width:100%;height:100%;min-height:0;overflow:hidden;color:var(--chatluna-studio-text);background:var(--chatluna-studio-bg);font-size:var(--chatluna-studio-font-md);line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}.chatluna-studio-sidebar{position:relative;z-index:30;grid-column:2;grid-row:1}.chatluna-studio-sidebar-rail{position:absolute;inset-block:var(--chatluna-studio-sidebar-inset);right:var(--chatluna-studio-sidebar-inset);display:flex;flex-direction:column;gap:8px;width:var(--chatluna-studio-sidebar-rail);height:max-content;margin-block:auto;padding:var(--chatluna-studio-sidebar-pad);overflow:hidden;border:1px solid var(--chatluna-studio-border);border-radius:16px;background:var(--chatluna-studio-bg);box-shadow:0 4px 12px #0f172a14;transition:width .18s ease}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-sidebar-rail{box-shadow:0 4px 12px #09090b47}.chatluna-studio-sidebar-rail:hover,.chatluna-studio-sidebar-rail:has(:focus-visible){width:var(--chatluna-studio-sidebar-rail-open)}.chatluna-studio-sidebar-item{display:flex;flex-direction:row-reverse;align-items:center;gap:var(--chatluna-studio-sidebar-gap);width:100%;min-height:var(--chatluna-studio-sidebar-icon);margin:0;padding:0;overflow:hidden;border:0;border-radius:12px;background:transparent;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-lg);text-align:right;transition:color .14s ease,background .14s ease}.chatluna-studio-sidebar-icon{display:inline-flex;width:var(--chatluna-studio-sidebar-icon);flex:none;align-items:center;align-self:stretch;justify-content:center}.chatluna-studio-sidebar-label{width:calc(var(--chatluna-studio-sidebar-rail-open) - var(--chatluna-studio-sidebar-rail) - var(--chatluna-studio-sidebar-gap));flex:none;overflow:hidden;opacity:0;white-space:nowrap;text-overflow:ellipsis;transition:opacity .18s ease}.chatluna-studio-sidebar-rail:hover .chatluna-studio-sidebar-label,.chatluna-studio-sidebar-rail:has(:focus-visible) .chatluna-studio-sidebar-label{opacity:1}.chatluna-studio-sidebar-item:hover{color:var(--chatluna-studio-text);background:var(--chatluna-studio-hover)}.chatluna-studio-sidebar-item.is-active{color:var(--chatluna-studio-accent);background:color-mix(in srgb,var(--chatluna-studio-accent) 10%,transparent);font-weight:600}.chatluna-studio-sidebar-item:focus-visible{outline:2px solid var(--chatluna-studio-accent);outline-offset:-2px}.chatluna-studio-chat{display:grid;grid-column:1;grid-row:1;min-width:0;min-height:0}.chatluna-studio-workspace.is-frosted{background:#f4f6f8c7}.chatluna-studio-workspace.is-frosted .chatluna-studio-chat{background:#f8fafc57}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-chat{background:#2c2c30}.chatluna-studio-workspace.is-frosted[data-color-mode=dark]{background:#252529}.chatluna-studio-workspace.is-frosted[data-color-mode=dark] .chatluna-studio-chat{background:#2c2c30}.chatluna-studio-page .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}[data-chatluna-studio-scrollbar=true]{scrollbar-width:none;scrollbar-color:transparent transparent}[data-chatluna-studio-scrollbar=true]::-webkit-scrollbar{width:0;height:0}[data-chatluna-studio-scrollbar=true]::-webkit-scrollbar-button{display:none;width:0;height:0}.chatluna-studio-overlay-header{position:relative;isolation:isolate}.chatluna-studio-overlay-header:before{position:absolute;z-index:-1;top:0;right:0;bottom:0;left:0;background:var(--chatluna-studio-overlay-header-surface, var(--chatluna-studio-surface));content:"";pointer-events:none}.chatluna-studio-workspace.is-frosted .chatluna-studio-overlay-header:before{background:color-mix(in srgb,var(--chatluna-studio-overlay-header-surface, var(--chatluna-studio-surface)) 72%,transparent);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.chatluna-studio-scrollbar-overlay{position:fixed;z-index:100;width:10px;opacity:0;pointer-events:none;transition:opacity .14s ease}.chatluna-studio-scrollbar-overlay.is-visible{opacity:1}.chatluna-studio-scrollbar-thumb{position:absolute;top:var(--chatluna-studio-scrollbar-thumb-top);right:2px;width:4px;min-height:28px;height:var(--chatluna-studio-scrollbar-thumb-height);border-radius:999px;background:#94a3b8;pointer-events:auto;transition:width .14s ease,right .14s ease,background .14s ease}.chatluna-studio-scrollbar-overlay.is-accent .chatluna-studio-scrollbar-thumb{background:color-mix(in srgb,var(--chatluna-studio-accent) 78%,#60a5fa 22%)}.chatluna-studio-scrollbar-overlay.is-wide .chatluna-studio-scrollbar-thumb,.chatluna-studio-scrollbar-thumb:hover{right:2px;width:6px}.chatluna-studio-identity-avatar{--chatluna-studio-avatar-size: 38px;display:inline-flex;width:var(--chatluna-studio-avatar-size);height:var(--chatluna-studio-avatar-size);flex:none;align-items:center;justify-content:center;border-radius:50%;color:#fff;background:var(--chatluna-studio-accent);font-weight:700;-webkit-user-select:none;user-select:none}.chatluna-studio-identity-avatar{font-size:clamp(9px,calc(var(--chatluna-studio-avatar-size, 38px) / 3),32px)}.chatluna-studio-identity-avatar>img{width:100%;height:100%;border-radius:inherit;object-fit:cover}.chatluna-studio-identity-avatar.is-group{background:#0f766e}.chatluna-studio-identity-avatar.is-bot{position:relative;color:#fff;background:#475569}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-identity-avatar.is-bot{background:#64748b}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) :is([data-slot=button],[data-slot=popover-trigger][data-variant]){border:1px solid transparent}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) :is([data-slot=button],[data-slot=popover-trigger][data-variant]):disabled{opacity:.5}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) :is([data-slot=button]:not([data-variant]),[data-slot=button][data-variant=default]){color:#fff;background:var(--chatluna-studio-accent)}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) :is([data-slot=button]:not([data-variant]),[data-slot=button][data-variant=default]):hover:not(:disabled){background:color-mix(in srgb,var(--chatluna-studio-accent) 88%,#000)}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) :is([data-slot=button][data-variant=outline],[data-slot=popover-trigger][data-variant=outline]){border-color:var(--chatluna-studio-border);color:var(--chatluna-studio-text);background:var(--chatluna-studio-bg);box-shadow:none}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) :is([data-slot=button][data-variant=outline],[data-slot=popover-trigger][data-variant=outline]):hover:not(:disabled){color:var(--chatluna-studio-text);background:var(--chatluna-studio-hover)}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) [data-slot=button][data-variant=secondary]{color:var(--chatluna-studio-text);background:var(--chatluna-studio-hover)}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) [data-slot=button][data-variant=secondary]:hover:not(:disabled){background:color-mix(in srgb,var(--chatluna-studio-hover) 70%,var(--chatluna-studio-border))}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) [data-slot=button][data-variant=ghost]{color:var(--chatluna-studio-muted);background:transparent}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) [data-slot=button][data-variant=ghost]:hover:not(:disabled){color:var(--chatluna-studio-text);background:var(--chatluna-studio-hover)}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) [data-slot=button][data-variant=destructive]{color:#fff;background:#dc2626}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) [data-slot=button][data-variant=destructive]:hover:not(:disabled){background:#b91c1c}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) :is([data-slot=input],[data-slot=select-trigger]){border-color:var(--chatluna-studio-border);color:var(--chatluna-studio-text);background:var(--chatluna-studio-bg);box-shadow:none}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) :is([data-slot=input],[data-slot=select-trigger]){background:color-mix(in srgb,var(--chatluna-studio-bg) 72%,transparent);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) :is([data-slot=input],[data-slot=select-trigger])::placeholder{color:var(--chatluna-studio-muted)}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) :is([data-slot=input],[data-slot=select-trigger]):focus-visible{border-color:var(--chatluna-studio-accent);box-shadow:inset 0 0 0 2px var(--chatluna-studio-accent-shadow);outline:none}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) [data-slot=checkbox]{border-color:var(--chatluna-studio-border);background:var(--chatluna-studio-bg)}:is(.chatluna-studio-workspace,.studio-dialog-content,.studio-popover-content) [data-slot=checkbox][data-state=checked]{border-color:var(--chatluna-studio-accent);color:#fff;background:var(--chatluna-studio-accent)}.studio-dialog-content,.studio-popover-content{border-color:transparent;color:var(--chatluna-studio-text);background:var(--chatluna-studio-bg)}.chatluna-studio-page,.studio-dialog-content,[data-slot=dialog-overlay],.studio-popover-content,.studio-select-content,[data-slot=tooltip-content]{font-size:var(--chatluna-studio-font-md);line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}.chatluna-studio-solid-secondary-surface:not(.is-frosted){border-color:var(--chatluna-studio-secondary-outline);box-shadow:var(--chatluna-studio-secondary-shadow);-webkit-backdrop-filter:none;backdrop-filter:none}body[data-chatluna-studio-frosted] .studio-select-content{border-color:color-mix(in srgb,var(--chatluna-studio-secondary-outline) 64%,transparent);background:color-mix(in srgb,var(--chatluna-studio-panel) 72%,transparent);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}body[data-chatluna-studio-frosted] :is(.studio-dialog-content,.studio-popover-content){border-color:color-mix(in srgb,var(--chatluna-studio-secondary-outline) 64%,transparent);background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}body[data-chatluna-studio-frosted] :is(.studio-dialog-content,.studio-popover-content):before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;border-radius:inherit;background:color-mix(in srgb,var(--chatluna-studio-panel) 72%,transparent);content:"";pointer-events:none;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}body[data-chatluna-studio-frosted] [data-slot=dialog-overlay]{-webkit-backdrop-filter:none;backdrop-filter:none}.studio-dialog-close{color:var(--chatluna-studio-muted)}.studio-dialog-close:hover{color:var(--chatluna-studio-text);background:var(--chatluna-studio-hover)}.studio-select-content{width:var(--reka-select-trigger-width);min-width:var(--reka-select-trigger-width);border-radius:12px;color:var(--chatluna-studio-text);background:var(--chatluna-studio-bg)}.studio-select-content [data-slot=select-item]{border-radius:8px;color:var(--chatluna-studio-text)}.studio-select-content [data-slot=select-item][data-highlighted]{color:var(--chatluna-studio-text);background:var(--chatluna-studio-hover)}.studio-select-content [data-slot=select-item]:focus-visible{outline:none;box-shadow:none}.chatluna-studio-workspace [data-slot=badge][data-variant=default]{border-color:transparent;color:#fff;background:var(--chatluna-studio-accent)}.chatluna-studio-workspace [data-slot=badge][data-variant=secondary]{border-color:transparent;color:var(--chatluna-studio-muted);background:var(--chatluna-studio-hover)}.chatluna-studio-workspace [data-slot=badge][data-variant=outline]{border-color:var(--chatluna-studio-border);color:var(--chatluna-studio-muted);background:transparent}[data-slot=dialog-content],[data-slot=popover-content]{--chatluna-studio-secondary-title-gap: 4px;--chatluna-studio-secondary-row-gap: 8px}.chatluna-studio-chat.chatluna-studio-model-request-workspace{--chatluna-studio-role-system: #737985;--chatluna-studio-role-user: #2f76c9;--chatluna-studio-role-variable: #a13d76;--chatluna-studio-role-assistant: #a13d76;--chatluna-studio-role-response: #0f766e;--chatluna-studio-role-tool: #c46b00;--chatluna-studio-role-tool-interaction: #8f5aa8;grid-template-rows:auto auto minmax(0,1fr);gap:16px;min-width:0;overflow:hidden;padding:var(--chatluna-studio-region-padding);background:var(--chatluna-studio-bg)}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-chat.chatluna-studio-model-request-workspace{--chatluna-studio-role-system: #a3a8b2;--chatluna-studio-role-user: #6aa9ef;--chatluna-studio-role-variable: #dd79b2;--chatluna-studio-role-assistant: #dd79b2;--chatluna-studio-role-response: #5eead4;--chatluna-studio-role-tool: #bf812f;--chatluna-studio-role-tool-interaction: #a87bb8}.chatluna-studio-model-request-header,.chatluna-studio-model-request-item>header,.chatluna-studio-model-request-detail>header,.chatluna-studio-model-request-item-title,.chatluna-studio-model-request-bot,.chatluna-studio-model-request-bot-name,.chatluna-studio-model-request-actions,.chatluna-studio-model-request-live,.chatluna-studio-model-request-error-filter{display:flex;align-items:center}.chatluna-studio-model-request-header{justify-content:space-between;gap:24px}.chatluna-studio-model-request-header h1{margin:0 0 8px;font-size:var(--chatluna-studio-font-3xl);font-weight:700}.chatluna-studio-model-request-header p,.chatluna-studio-model-request-item p,.chatluna-studio-model-request-detail p{margin:0;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-md)}.chatluna-studio-model-request-actions{flex-direction:column;align-items:flex-end;gap:8px}.chatluna-studio-model-request-action-row,.chatluna-studio-model-request-item-title,.chatluna-studio-model-request-bot,.chatluna-studio-model-request-bot-name,.chatluna-studio-model-request-live,.chatluna-studio-model-request-error-filter{display:flex;align-items:center;gap:8px}.chatluna-studio-model-request-bot{--chatluna-studio-avatar-size: 36px;min-width:0}.chatluna-studio-model-request-bot-copy{display:grid;gap:2px;min-width:0}.chatluna-studio-model-request-bot-copy strong,.chatluna-studio-model-request-bot-copy time{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-request-timing,.chatluna-studio-model-request-timing>time,.chatluna-studio-model-request-timing>span{display:flex;align-items:center}.chatluna-studio-model-request-timing{flex-wrap:wrap;gap:4px 12px;color:var(--chatluna-studio-muted)}.chatluna-studio-model-request-timing>time,.chatluna-studio-model-request-timing>span{gap:4px;min-width:0}.chatluna-studio-model-request-timing svg{flex:0 0 auto}.chatluna-studio-model-request-bot-name{min-width:0;flex-wrap:wrap}.chatluna-studio-model-request-bot-name strong{min-width:0;font-size:var(--chatluna-studio-font-md)}.chatluna-studio-model-request-list-toolbar,.chatluna-studio-model-request-list-tools,.chatluna-studio-model-request-sort{display:flex}.chatluna-studio-model-request-filter-popover>label:not(.chatluna-studio-model-request-error-filter){display:grid}.chatluna-studio-model-request-list-toolbar{z-index:2;align-items:center;justify-content:space-between;gap:12px;min-height:56px;padding:12px 16px;border-bottom:1px solid var(--chatluna-studio-border);background:transparent;--chatluna-studio-overlay-header-surface: var(--chatluna-studio-surface)}.chatluna-studio-model-request-list-toolbar:before{border-radius:15px 15px 0 0}.chatluna-studio-model-request-list-toolbar h2{margin:0;color:var(--chatluna-studio-text);font-size:var(--chatluna-studio-font-xl);font-weight:600}.chatluna-studio-model-request-list-tools{align-items:center;gap:8px}.chatluna-studio-model-request-sort{align-items:center;gap:4px;padding:0;border:0;color:var(--chatluna-studio-muted);background:transparent;font-size:var(--chatluna-studio-font-md)}.chatluna-studio-model-request-filter-trigger{border-radius:8px}.chatluna-studio-model-request-filter-trigger.is-filtered{color:var(--chatluna-studio-accent);border-color:color-mix(in srgb,var(--chatluna-studio-accent) 34%,var(--chatluna-studio-border));background:color-mix(in srgb,var(--chatluna-studio-accent) 10%,var(--chatluna-studio-surface))}.chatluna-studio-model-request-filter-popover{display:grid;gap:12px;width:280px}.chatluna-studio-model-request-filter-popover>label:not(.chatluna-studio-model-request-error-filter){gap:8px;min-width:0;font-weight:600}.chatluna-studio-model-request-control{width:100%}.chatluna-studio-model-request-error-filter,.chatluna-studio-model-request-live{align-self:end;min-height:40px;white-space:nowrap}.chatluna-studio-model-request-live{gap:8px;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-lg)}.chatluna-studio-model-request-live [data-slot=switch]{width:36px;height:20px;background:#e5e7eb;box-shadow:none}.chatluna-studio-model-request-live [data-slot=switch][data-state=checked]{background:var(--chatluna-studio-accent)}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-request-live [data-slot=switch]:not([data-state=checked]){background:#3f3f46}.chatluna-studio-model-request-status{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:20px}.chatluna-studio-model-request-status .chatluna-studio-model-request-error{padding:0;text-align:left}.chatluna-studio-model-request-split{display:grid;grid-template-columns:minmax(280px,360px) minmax(0,1fr);grid-row:3;gap:16px;min-height:0}.chatluna-studio-model-request-list-pane,.chatluna-studio-model-request-detail-pane{display:grid;min-width:0;min-height:0;overflow:hidden;border:1px solid var(--chatluna-studio-border);border-radius:16px;background:var(--chatluna-studio-surface)}.chatluna-studio-model-request-list-pane{display:grid;grid-template-rows:auto minmax(0,1fr)}.chatluna-studio-model-request-list,.chatluna-studio-model-request-detail{display:grid;align-content:start;grid-auto-rows:max-content;gap:8px;height:100%;min-height:0;overflow:auto;padding:8px}.chatluna-studio-model-request-list{margin-top:-56px;padding-top:64px;scroll-padding-top:64px}.chatluna-studio-model-request-item{display:grid;gap:8px;width:100%;padding:12px 16px;border:1px solid transparent;border-radius:12px;color:inherit;background:transparent;text-align:left}.chatluna-studio-model-request-item:hover,.chatluna-studio-model-request-item.is-selected,.chatluna-studio-model-request-item[aria-current=true]{background:var(--chatluna-studio-hover)}.chatluna-studio-model-request-item:focus-visible{background:var(--chatluna-studio-hover);outline:2px solid var(--chatluna-studio-accent);outline-offset:2px}.chatluna-studio-model-request-item>header,.chatluna-studio-model-request-detail>header{justify-content:space-between;flex-wrap:wrap;gap:8px;width:100%}.chatluna-studio-model-request-detail{gap:12px;padding:16px}.chatluna-studio-model-request-detail.has-sticky-trajectory{padding-top:0}.chatluna-studio-model-request-detail.has-sticky-trajectory>header:first-child{padding-top:16px}.chatluna-studio-model-request-detail.is-trajectory-view{grid-template-rows:auto minmax(0,1fr);overflow:hidden}.chatluna-studio-model-request-detail.is-trajectory-view>.chatluna-studio-model-trajectory{position:relative;display:block;height:100%;min-height:0}.chatluna-studio-model-request-detail.is-trajectory-view .chatluna-studio-model-trajectory-header{position:absolute;z-index:4;inset:0 0 auto;overflow:clip;border-radius:7px 7px 0 0}.chatluna-studio-model-request-detail.is-trajectory-view .chatluna-studio-model-trajectory-header:before{z-index:0}.chatluna-studio-model-request-detail.is-trajectory-view .chatluna-studio-model-trajectory-header>*{position:relative;z-index:1}.chatluna-studio-model-request-detail.is-trajectory-view .chatluna-studio-model-trajectory-ledger{height:100%;min-height:0}.chatluna-studio-model-request-detail.is-trajectory-view .chatluna-studio-model-trajectory-table{scroll-padding-top:var(--chatluna-studio-model-trajectory-sticky-height, 0px)}.chatluna-studio-model-request-detail.is-trajectory-view .chatluna-studio-model-trajectory-table:before{display:block;height:var(--chatluna-studio-model-trajectory-sticky-height, 0px);content:""}.chatluna-studio-model-request-detail.is-trajectory-view .chatluna-studio-model-trajectory-inspector{padding-top:calc(12px + var(--chatluna-studio-model-trajectory-sticky-height, 0px))}.chatluna-studio-model-request-detail.is-trajectory-view :is(.chatluna-studio-model-trajectory-table,.chatluna-studio-model-trajectory-inspector){height:100%;max-height:none}.chatluna-studio-model-request-meta,.chatluna-studio-model-request-detail time,.chatluna-studio-model-request-item time,.chatluna-studio-model-request-timing{font-size:var(--chatluna-studio-font-md)}.chatluna-studio-model-request-overview,.chatluna-studio-model-request-usage{display:grid;gap:12px;padding:14px;border:1px solid var(--chatluna-studio-border);border-radius:12px;background:color-mix(in srgb,var(--chatluna-studio-surface-muted) 36%,transparent)}.chatluna-studio-model-request-section-heading,.chatluna-studio-model-request-section-heading>span{display:flex;align-items:center}.chatluna-studio-model-request-section-heading{justify-content:space-between;gap:12px}.chatluna-studio-model-request-section-heading>span{gap:7px;font-size:var(--chatluna-studio-font-xl)}.chatluna-studio-model-request-section-heading svg,.chatluna-studio-model-request-overview-grid article>svg{flex:0 0 auto;color:var(--chatluna-studio-accent)}.chatluna-studio-model-request-overview-grid,.chatluna-studio-model-request-usage-grid{display:grid;gap:8px}.chatluna-studio-model-request-overview-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.chatluna-studio-model-request-overview-grid article{display:grid;grid-template-columns:17px minmax(0,1fr) auto;align-items:center;gap:8px;min-width:0;min-height:44px;padding:9px 10px;border:1px solid var(--chatluna-studio-border);border-radius:9px;background:var(--chatluna-studio-surface)}.chatluna-studio-model-request-overview-grid article>span,.chatluna-studio-model-request-usage-grid article>span{color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-model-request-overview-grid article>strong{min-width:0;overflow-wrap:anywhere;color:var(--chatluna-studio-text);font-size:var(--chatluna-studio-font-md);text-align:right;-webkit-user-select:text;user-select:text}.chatluna-studio-model-request-usage-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.chatluna-studio-model-request-usage-grid article{display:grid;gap:5px;min-width:0;padding:10px 12px;border:1px solid var(--chatluna-studio-border);border-radius:9px;background:var(--chatluna-studio-surface)}.chatluna-studio-model-request-usage-grid article>strong{overflow:hidden;color:var(--chatluna-studio-text);font-size:var(--chatluna-studio-font-2xl);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-request-meta-list{display:grid;overflow:hidden;border:1px solid var(--chatluna-studio-border);border-radius:10px;background:color-mix(in srgb,var(--chatluna-studio-surface-muted) 52%,transparent)}.chatluna-studio-model-request-meta-list .chatluna-studio-model-request-meta{display:grid;grid-template-columns:17px minmax(64px,auto) minmax(0,1fr);align-items:start;gap:10px;min-width:0;padding:10px 12px}.chatluna-studio-model-request-meta-list .chatluna-studio-model-request-meta+.chatluna-studio-model-request-meta{border-top:1px solid var(--chatluna-studio-border)}.chatluna-studio-model-request-meta svg{flex:0 0 auto;margin-top:1px}.chatluna-studio-model-request-meta-label{color:var(--chatluna-studio-muted);font-weight:600;white-space:nowrap}.chatluna-studio-model-request-meta-value{min-width:0;overflow-wrap:anywhere;color:var(--chatluna-studio-text);-webkit-user-select:text;user-select:text}.chatluna-studio-model-request-header-value{display:grid;min-width:0;gap:6px}.chatluna-studio-model-request-header-toggle{justify-content:flex-start;gap:6px;min-width:0;padding:0;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-model-request-header-toggle svg{transition:transform .16s ease}.chatluna-studio-model-request-header-toggle svg.is-expanded{transform:rotate(180deg)}.chatluna-studio-model-request-header-json{min-width:0}.chatluna-studio-model-request-header-json .chatluna-studio-model-request-json-viewer{min-height:0;max-height:320px;padding:12px}.chatluna-studio-model-request-endpoint{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 8px;font-family:var(--chatluna-studio-font-mono)}.chatluna-studio-model-request-endpoint strong{color:var(--chatluna-studio-accent);font-size:var(--chatluna-studio-font-sm);letter-spacing:.03em}.chatluna-studio-model-request-entities{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 16px;font-family:var(--chatluna-studio-font-mono)}.chatluna-studio-model-request-entity{display:inline-flex;align-items:baseline;gap:6px;min-width:0}.chatluna-studio-model-request-entity strong{flex:0 0 auto;color:var(--chatluna-studio-accent);font-size:var(--chatluna-studio-font-sm);letter-spacing:.03em}.chatluna-studio-model-request-entity-value{min-width:0;overflow-wrap:anywhere;color:var(--chatluna-studio-text)}.chatluna-studio-model-request-error-diagnostic{display:grid;gap:12px;padding:14px;border:1px solid color-mix(in srgb,#b91c1c 28%,var(--chatluna-studio-border));border-radius:10px;background:color-mix(in srgb,#fee2e2 46%,var(--chatluna-studio-surface))}.chatluna-studio-model-request-error-diagnostic .chatluna-studio-model-request-section-heading a{color:#b91c1c;font-size:var(--chatluna-studio-font-md);text-decoration:underline;text-underline-offset:3px}.chatluna-studio-model-request-error-details{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 10px;margin:0}.chatluna-studio-model-request-error-details dt{align-self:start;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-md);font-weight:600;line-height:22px}.chatluna-studio-model-request-error-details dd{min-width:0;margin:0;color:var(--chatluna-studio-text);overflow-wrap:anywhere;white-space:pre-wrap}.chatluna-studio-model-request-capture-error{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px}.chatluna-studio-workspace .studio-badge.chatluna-studio-model-request-error-code{min-height:22px;padding:2px 8px;font-family:var(--chatluna-studio-font-mono);font-size:var(--chatluna-studio-font-sm);font-weight:600;line-height:1.2;white-space:nowrap}.chatluna-studio-model-request-error-trace{color:var(--chatluna-studio-muted);font-family:var(--chatluna-studio-font-mono);font-size:var(--chatluna-studio-font-sm);white-space:nowrap}.chatluna-studio-model-request-error-causes{display:grid;gap:4px;margin:0;padding-left:20px;color:var(--chatluna-studio-text)}.chatluna-studio-model-request-error-note{color:var(--chatluna-studio-muted)!important;font-size:var(--chatluna-studio-font-md)}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-request-error-diagnostic{border-color:color-mix(in srgb,#fca5a5 34%,var(--chatluna-studio-border));background:color-mix(in srgb,#7f1d1d 30%,var(--chatluna-studio-surface))}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-request-error-diagnostic .chatluna-studio-model-request-section-heading a{color:#fca5a5}.chatluna-studio-workspace .studio-badge.chatluna-studio-model-request-complete,.chatluna-studio-workspace .studio-badge.chatluna-studio-model-request-status-success{color:#047857;background:#d1fae5}.chatluna-studio-workspace[data-color-mode=dark] .studio-badge.chatluna-studio-model-request-complete,.chatluna-studio-workspace[data-color-mode=dark] .studio-badge.chatluna-studio-model-request-status-success{color:#a7f3d0;background:#064e3b}.chatluna-studio-workspace .studio-badge.chatluna-studio-model-request-status-pending{color:#b45309;background:#fef3c7}.chatluna-studio-model-request-error{color:#b91c1c}.chatluna-studio-workspace .studio-badge.chatluna-studio-model-request-status-error{color:#b91c1c;background:#fee2e2}.studio-badge.chatluna-studio-model-request-source{border-color:var(--chatluna-studio-border);color:var(--chatluna-studio-muted);background:var(--chatluna-studio-surface-muted)}.chatluna-studio-workspace[data-color-mode=dark] .studio-badge.chatluna-studio-model-request-provider{border-color:#6d28d9;color:#ddd6fe;background:#4c1d95}.chatluna-studio-model-trajectory{--chatluna-studio-trajectory-request: #2f76c9;--chatluna-studio-trajectory-layer: color-mix(in srgb, var(--chatluna-studio-surface-muted) 64%, var(--chatluna-studio-surface));display:grid;min-height:0;overflow:hidden;border:1px solid var(--chatluna-studio-border);border-radius:8px;background:var(--chatluna-studio-surface);container-type:inline-size}.chatluna-studio-workspace.is-frosted .chatluna-studio-model-trajectory{background:transparent}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-trajectory{--chatluna-studio-trajectory-request: #4d8ed3}.chatluna-studio-model-request-detail-nav{display:flex;align-items:center;gap:8px;margin-left:auto}.chatluna-studio-model-request-view-switch,.chatluna-studio-model-trajectory-mode{display:flex;align-items:center;gap:4px;width:max-content;padding:3px;border:1px solid var(--chatluna-studio-border);border-radius:8px;background:var(--chatluna-studio-surface-muted)}.chatluna-studio-model-trajectory-scope,.chatluna-studio-model-trajectory-summary,.chatluna-studio-model-trajectory-controls,.chatluna-studio-model-trajectory-control-actions,.chatluna-studio-model-trajectory-search,.chatluna-studio-model-trajectory-inspector>header,.chatluna-studio-model-trajectory-inspector>header>div,.chatluna-studio-model-trajectory-inspector-actions{display:flex;align-items:center}.chatluna-studio-model-trajectory-scope,.chatluna-studio-model-trajectory-controls,.chatluna-studio-model-trajectory-inspector>header{justify-content:space-between;gap:12px}.chatluna-studio-model-trajectory-inspector>header{position:relative;min-width:0;flex-wrap:wrap;padding-right:40px}.chatluna-studio-model-trajectory-inspector-close{position:absolute;top:0;right:0}.chatluna-studio-model-trajectory-inspector>header>div{min-width:0}.chatluna-studio-model-trajectory-inspector-actions{min-width:0;flex-wrap:wrap}.chatluna-studio-model-trajectory-scope{min-height:40px;padding:4px 8px;border-bottom:1px solid var(--chatluna-studio-border)}.chatluna-studio-model-trajectory-summary{gap:12px;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-model-trajectory-controls{min-height:32px;padding:4px 6px;border-bottom:1px solid var(--chatluna-studio-border);background:color-mix(in srgb,var(--chatluna-studio-surface-muted) 44%,var(--chatluna-studio-surface))}.chatluna-studio-model-trajectory-control-actions{gap:2px}.chatluna-studio-model-trajectory-controls{flex-wrap:wrap;justify-content:flex-start;row-gap:4px}.chatluna-studio-model-trajectory-control-filters{display:grid;grid-template-columns:1fr;flex:0 0 auto;min-width:0;overflow:hidden;transition:grid-template-columns .18s ease,opacity .18s ease,visibility .18s ease}.chatluna-studio-model-trajectory-control-filters.is-collapsed{grid-template-columns:0fr;opacity:0;visibility:hidden}.chatluna-studio-model-trajectory-control-filters-inner{display:flex;flex-wrap:nowrap;align-items:center;gap:2px;min-width:0;overflow:hidden}.chatluna-studio-model-trajectory-control-filters:not(.is-collapsed) .chatluna-studio-model-trajectory-control-filters-inner{min-width:min-content}.chatluna-studio-model-trajectory-controls [data-slot=button]{height:22px;padding-inline:6px;border-radius:4px;font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-model-trajectory-control-query{display:flex;align-items:center;flex:0 0 auto;gap:8px;margin-left:auto}.chatluna-studio-model-trajectory-search{position:relative;flex:0 1 164px;width:min(164px,32%)}.chatluna-studio-model-trajectory-search>svg{position:absolute;left:7px;width:13px;height:13px;color:var(--chatluna-studio-muted);pointer-events:none}.chatluna-studio-model-trajectory-search input{height:22px;padding-left:25px;border-radius:4px;background:var(--chatluna-studio-surface);font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-model-trajectory-composition-shell{position:relative;border-bottom:1px solid var(--chatluna-studio-border);background:color-mix(in srgb,var(--chatluna-studio-surface-muted) 64%,var(--chatluna-studio-surface))}.chatluna-studio-model-trajectory-composition-zoom{position:relative;z-index:2;display:flex;align-items:center;flex:0 0 auto;gap:1px}.chatluna-studio-model-trajectory-composition-zoom [data-slot=button]{height:20px;min-width:20px;padding-inline:4px}.chatluna-studio-model-trajectory-composition-zoom .chatluna-studio-model-trajectory-composition-zoom-value{min-width:40px;font-size:var(--chatluna-studio-font-3xs);font-variant-numeric:tabular-nums}.chatluna-studio-model-trajectory-composition{display:grid;grid-template-columns:56px minmax(0,1fr);min-height:50px;overflow:hidden}.chatluna-studio-model-trajectory-composition-labels,.chatluna-studio-model-trajectory-composition-tracks{display:grid;grid-auto-rows:14px;align-content:center}.chatluna-studio-model-trajectory-composition-labels{padding-right:6px;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-3xs);text-align:right}.chatluna-studio-model-trajectory-composition-labels span{line-height:14px}.chatluna-studio-model-trajectory-composition-viewport{min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;overscroll-behavior-x:contain;touch-action:pan-y;-webkit-user-select:none;user-select:none}.chatluna-studio-model-trajectory-composition-tracks{position:relative;box-sizing:border-box;min-width:100%;height:100%;padding-right:6px;border-left:1px solid var(--chatluna-studio-border)}.chatluna-studio-model-trajectory-composition-track{position:relative;min-width:0}.chatluna-studio-model-trajectory-composition-bar{position:absolute;top:3px;min-width:2px;height:8px;padding:0;border:0;border-radius:1px;background:var(--chatluna-studio-role-system)}.chatluna-studio-model-trajectory-composition-bar.is-user{background:var(--chatluna-studio-role-user)}.chatluna-studio-model-trajectory-composition-bar.is-variable{background:var(--chatluna-studio-role-variable)}.chatluna-studio-model-trajectory-composition-bar.is-assistant{background:var(--chatluna-studio-role-assistant)}.chatluna-studio-model-trajectory-composition-bar.is-tool-definition{background:var(--chatluna-studio-role-tool)}.chatluna-studio-model-trajectory-composition-bar.is-tool-interaction{background:var(--chatluna-studio-role-tool-interaction)}.chatluna-studio-model-trajectory-composition-bar.is-selected{z-index:1;box-shadow:0 0 0 1px var(--chatluna-studio-trajectory-layer),0 0 0 2px var(--chatluna-studio-accent)}.chatluna-studio-model-trajectory-composition-empty{min-height:50px;padding:18px 12px;border-bottom:1px solid var(--chatluna-studio-border);color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs);text-align:center}.chatluna-studio-model-trajectory-boundary{position:absolute;inset-block:0;width:1px;background:color-mix(in srgb,var(--chatluna-studio-muted) 28%,transparent)}.chatluna-studio-model-trajectory-row.is-search-muted{opacity:.16}.chatluna-studio-model-trajectory-request-dot.is-error{background:#cf3e45}.chatluna-studio-model-trajectory-timing-note{margin:0;padding:5px 8px 5px 56px;border-bottom:1px solid var(--chatluna-studio-border);color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-2xs)}.chatluna-studio-model-trajectory-filter-empty{padding:32px 16px;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm);text-align:center}.chatluna-studio-model-trajectory-ledger{display:grid;grid-template-columns:minmax(0,1fr);min-height:360px;overflow:hidden}.chatluna-studio-model-trajectory-ledger.has-inspector{grid-template-columns:minmax(0,1fr) minmax(480px,42%)}.chatluna-studio-model-trajectory-table,.chatluna-studio-model-trajectory-inspector{min-width:0;min-height:0;max-height:560px;overflow:auto}.chatluna-studio-model-trajectory-request-boundary{display:grid;grid-template-columns:86px minmax(0,1fr) auto;align-items:center;gap:8px;width:100%;min-height:24px;padding:0 10px 0 7px;border:0;border-top:2px solid var(--chatluna-studio-border);border-bottom:1px solid var(--chatluna-studio-border);color:var(--chatluna-studio-muted);background:color-mix(in srgb,var(--chatluna-studio-surface-muted) 62%,var(--chatluna-studio-surface));font:inherit;font-size:var(--chatluna-studio-font-2xs);text-align:left}.chatluna-studio-model-trajectory-request-boundary:first-child{border-top:0}.chatluna-studio-model-trajectory-request-boundary:hover{background:var(--chatluna-studio-hover)}.chatluna-studio-model-trajectory-request-boundary:focus-visible{outline:2px solid var(--chatluna-studio-accent);outline-offset:-2px}.chatluna-studio-model-trajectory-request-title{display:flex;align-items:center;gap:6px;min-width:0;font-weight:650}.chatluna-studio-model-trajectory-request-chevron{flex:0 0 auto;transition:transform .18s ease}.chatluna-studio-model-trajectory-request-chevron.is-collapsed{transform:rotate(-90deg)}.chatluna-studio-model-trajectory-request-boundary>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-trajectory-request-boundary time{font-variant-numeric:tabular-nums}.chatluna-studio-model-trajectory-request-dot{flex:0 0 auto;width:5px;height:5px;border-radius:50%;background:var(--chatluna-studio-trajectory-request)}.chatluna-studio-model-trajectory-request-dot.is-pending{background:#c98619}.chatluna-studio-model-trajectory-row{position:relative;display:grid;grid-template-columns:122px minmax(0,1fr);align-items:center;gap:8px;width:100%;min-height:30px;padding:5px 10px;border:0;border-bottom:1px solid var(--chatluna-studio-border);color:var(--chatluna-studio-text);background:transparent;font-size:var(--chatluna-studio-font-sm);text-align:left}.chatluna-studio-model-trajectory-row:hover,.chatluna-studio-model-trajectory-row.is-selected{background:var(--chatluna-studio-hover)}.chatluna-studio-model-trajectory-row.is-selected:before{position:absolute;inset-block:0;left:0;width:3px;background:var(--chatluna-studio-accent);content:""}.chatluna-studio-model-trajectory-row:focus-visible{outline:2px solid var(--chatluna-studio-accent);outline-offset:-2px}.chatluna-studio-model-trajectory-kind{width:max-content;min-width:54px;height:19px;padding:3px 6px;overflow:hidden;border-radius:4px;color:var(--chatluna-studio-muted);background:var(--chatluna-studio-surface-muted);font-size:var(--chatluna-studio-font-2xs);font-weight:650;line-height:13px;text-align:center}.chatluna-studio-model-trajectory-row.is-system .chatluna-studio-model-trajectory-kind{color:var(--chatluna-studio-role-system);background:color-mix(in srgb,var(--chatluna-studio-role-system) 12%,var(--chatluna-studio-surface))}.chatluna-studio-model-trajectory-row.is-user .chatluna-studio-model-trajectory-kind{color:var(--chatluna-studio-role-user);background:color-mix(in srgb,var(--chatluna-studio-role-user) 12%,var(--chatluna-studio-surface))}.chatluna-studio-model-trajectory-row.is-assistant .chatluna-studio-model-trajectory-kind{color:var(--chatluna-studio-role-assistant);background:color-mix(in srgb,var(--chatluna-studio-role-assistant) 12%,var(--chatluna-studio-surface))}.chatluna-studio-model-trajectory-row.is-response .chatluna-studio-model-trajectory-kind{color:var(--chatluna-studio-role-response);background:color-mix(in srgb,var(--chatluna-studio-role-response) 12%,var(--chatluna-studio-surface))}.chatluna-studio-model-trajectory-row.is-tool-call .chatluna-studio-model-trajectory-kind,.chatluna-studio-model-trajectory-row.is-tool-result .chatluna-studio-model-trajectory-kind{color:var(--chatluna-studio-role-tool-interaction);background:color-mix(in srgb,var(--chatluna-studio-role-tool-interaction) 13%,var(--chatluna-studio-surface))}.chatluna-studio-model-trajectory-row.is-tool-definition .chatluna-studio-model-trajectory-kind{color:var(--chatluna-studio-role-tool);background:color-mix(in srgb,var(--chatluna-studio-role-tool) 13%,var(--chatluna-studio-surface))}.chatluna-studio-model-trajectory-row.is-variable .chatluna-studio-model-trajectory-kind{color:var(--chatluna-studio-role-variable);background:color-mix(in srgb,var(--chatluna-studio-role-variable) 12%,var(--chatluna-studio-surface))}.chatluna-studio-model-trajectory-preview{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-trajectory-inspector{container-type:inline-size;container-name:chatluna-studio-trajectory-inspector;display:grid;grid-template-rows:auto minmax(0,1fr);align-content:start;gap:12px;overflow:hidden;padding:12px;border-left:1px solid var(--chatluna-studio-border);background:var(--chatluna-studio-surface)}.chatluna-studio-model-trajectory-inspector>header>div,.chatluna-studio-model-trajectory-inspector-actions{gap:8px}.chatluna-studio-model-trajectory-inspector-actions{flex:0 0 auto;justify-content:flex-end}.chatluna-studio-model-trajectory-inspector-body{min-width:0;min-height:0;overflow:auto}.chatluna-studio-model-trajectory [data-slot=tooltip-content]{display:grid;gap:2px;max-width:280px}.chatluna-studio-model-trajectory [data-slot=tooltip-content] span{color:color-mix(in srgb,currentColor 78%,transparent);font-size:var(--chatluna-studio-font-2xs)}@container (max-width: 620px){.chatluna-studio-model-trajectory-row{grid-template-columns:72px minmax(0,1fr)}.chatluna-studio-model-trajectory-kind{min-width:54px}}.chatluna-studio-model-request-more{width:100%}.chatluna-studio-model-request-body{display:grid;gap:8px;min-height:0}.chatluna-studio-model-request-analysis.chatluna-studio-model-trajectory{min-height:420px;overflow:visible;border-radius:8px}.chatluna-studio-model-request-analysis .chatluna-studio-model-trajectory-header{position:sticky;top:0;z-index:4;overflow:clip;border-radius:7px 7px 0 0}.chatluna-studio-model-trajectory-header:before{border-bottom:1px solid color-mix(in srgb,var(--chatluna-studio-border) 72%,transparent)}.chatluna-studio-workspace.is-frosted .chatluna-studio-model-trajectory-header :is(.chatluna-studio-model-trajectory-scope,.chatluna-studio-model-trajectory-controls,.chatluna-studio-model-trajectory-composition-shell,.chatluna-studio-model-trajectory-composition-empty){background:transparent}.chatluna-studio-model-request-analysis .chatluna-studio-model-analysis-main{overflow:visible}.chatluna-studio-model-request-analysis .chatluna-studio-model-analysis-content{max-height:none;overflow:visible}.chatluna-studio-model-request-analysis .chatluna-studio-model-analysis-nav{position:sticky;top:var(--chatluna-studio-model-trajectory-sticky-height, 0px);align-self:start;max-height:calc(var(--chatluna-studio-model-analysis-nav-height, 100vh) - var(--chatluna-studio-model-trajectory-sticky-height, 0px));overflow:auto;padding-bottom:44px}.chatluna-studio-model-request-body-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px}.chatluna-studio-model-request-body-tabs,.chatluna-studio-model-request-response-tabs,.chatluna-studio-model-request-body-actions{display:flex;align-items:center;gap:4px}.chatluna-studio-model-request-body-tabs,.chatluna-studio-model-request-response-tabs{padding:3px;border:1px solid var(--chatluna-studio-border);border-radius:8px;background:var(--chatluna-studio-surface-muted)}.chatluna-studio-model-request-body-actions{justify-content:flex-end;flex-wrap:wrap;gap:8px}.chatluna-studio-model-request-response-meta{margin:0;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-model-response-preview{display:grid;align-content:start;gap:12px;min-width:0;min-height:320px;padding:16px;overflow:auto;border:1px solid var(--chatluna-studio-border);border-radius:8px;background:color-mix(in srgb,var(--chatluna-studio-surface-muted) 52%,transparent)}.chatluna-studio-model-response-section{min-width:0;overflow:hidden;border:1px solid var(--chatluna-studio-border);border-left-width:3px;border-radius:8px;background:var(--chatluna-studio-panel)}.chatluna-studio-model-response-section.is-content,.chatluna-studio-model-response-section.is-reasoning{border-left-color:var(--chatluna-studio-role-response)}.chatluna-studio-model-response-section.is-tools{border-left-color:var(--chatluna-studio-role-tool-interaction)}.chatluna-studio-model-response-section>header{display:flex;align-items:center;gap:8px;min-height:40px;padding:8px 12px;border-bottom:1px solid var(--chatluna-studio-border);color:var(--chatluna-studio-text);background:var(--chatluna-studio-surface-muted)}.chatluna-studio-model-response-section>pre,.chatluna-studio-model-response-tool pre{margin:0;padding:12px;overflow-wrap:anywhere;color:var(--chatluna-studio-text);font-family:inherit;font-size:var(--chatluna-studio-font-md);line-height:1.7;white-space:pre-wrap;word-break:break-word;-webkit-user-select:text;user-select:text}.chatluna-studio-model-response-tool-list{display:grid;gap:8px;padding:12px}.chatluna-studio-model-response-tool{min-width:0;overflow:hidden;border:1px solid var(--chatluna-studio-border);border-radius:8px;background:var(--chatluna-studio-surface)}.chatluna-studio-model-response-tool>div{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:8px 12px;border-bottom:1px solid var(--chatluna-studio-border)}.chatluna-studio-model-response-tool small{overflow:hidden;color:var(--chatluna-studio-muted);text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-response-footer{display:flex;flex-wrap:wrap;gap:6px 16px;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-model-request-response-raw{min-width:0;min-height:320px;margin:0;padding:16px;overflow:auto;border:1px solid var(--chatluna-studio-border);border-radius:8px;color:var(--chatluna-studio-text);background:color-mix(in srgb,var(--chatluna-studio-surface-muted) 52%,transparent);font-family:var(--chatluna-studio-font-mono);font-size:var(--chatluna-studio-font-md);line-height:1.6;overflow-wrap:anywhere;-moz-tab-size:2;tab-size:2;white-space:pre-wrap;word-break:break-word;-webkit-user-select:text;user-select:text}.chatluna-studio-model-request-json-viewer{min-width:0;min-height:320px;padding:16px;overflow:auto;border:1px solid var(--chatluna-studio-border);border-radius:8px;background:color-mix(in srgb,var(--chatluna-studio-surface-muted) 52%,transparent);contain:inline-size;-webkit-user-select:text;user-select:text}.chatluna-studio-model-request-json-node{box-sizing:border-box;min-width:0;overflow:hidden;color:var(--chatluna-studio-text);font-family:var(--chatluna-studio-font-mono);font-size:var(--chatluna-studio-font-md);line-height:1.6}.chatluna-studio-model-request-json-row{position:relative;box-sizing:border-box;display:flex;align-items:flex-start;gap:4px;width:100%;min-width:0;min-height:24px;padding:2px 24px 2px 2px;border-radius:4px;color:inherit;background:transparent;text-align:left;-webkit-user-select:text;user-select:text}.chatluna-studio-model-request-json-row:hover{background:color-mix(in srgb,var(--chatluna-studio-hover) 56%,transparent)}.chatluna-studio-model-request-json-node.is-highlighted>.chatluna-studio-model-request-json-row,.chatluna-studio-model-request-json-node.is-highlighted>.chatluna-studio-model-request-json-image-node{outline:2px solid var(--chatluna-studio-accent);outline-offset:-2px;border-radius:5px;background:color-mix(in srgb,var(--chatluna-studio-accent) 15%,var(--chatluna-studio-surface))}.chatluna-studio-model-request-json-toggle{display:inline-flex;flex:0 0 14px;align-items:center;justify-content:center;width:14px;height:18px;padding:0;border:0;color:var(--chatluna-studio-muted);background:transparent;-webkit-user-select:none;user-select:none}.chatluna-studio-model-request-json-toggle:focus-visible{border-radius:3px;outline:2px solid var(--chatluna-studio-accent);outline-offset:1px}.chatluna-studio-model-request-json-string-toggle{position:absolute;top:3px;right:3px;opacity:.45}.chatluna-studio-model-request-json-row:hover .chatluna-studio-model-request-json-string-toggle,.chatluna-studio-model-request-json-string-toggle:focus-visible{opacity:1}.chatluna-studio-model-request-json-children{min-width:0;margin-left:7px;padding-left:8px;border-left:1px solid var(--chatluna-studio-border)}.chatluna-studio-model-request-json-closing{display:block;padding:2px 0 2px 17px;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-model-request-json-key{flex:0 0 auto;color:#2563eb}.chatluna-studio-model-request-json-sep,.chatluna-studio-model-request-json-preview,.chatluna-studio-model-request-json-bracket{flex:0 0 auto;color:var(--chatluna-studio-muted)}.chatluna-studio-model-request-json-preview{margin-left:4px;font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-model-request-json-value,.chatluna-studio-model-request-json-string{min-width:0;overflow-wrap:anywhere}.chatluna-studio-model-request-json-string{display:block;flex:1 1 auto;padding:0;overflow:hidden;border:0;color:#059669;background:transparent;font:inherit;text-align:left;text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-request-json-string.is-expanded{overflow:visible;text-overflow:clip;white-space:normal}.chatluna-studio-model-request-json-string-expanded{display:block;margin:0;overflow-wrap:anywhere;white-space:pre-wrap;word-break:break-word;-moz-tab-size:2;tab-size:2}.chatluna-studio-model-request-json-image-node{display:grid;gap:6px;min-width:0;padding:2px 2px 8px}.chatluna-studio-model-request-json-image-row{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px;min-width:0;min-height:24px}.chatluna-studio-model-request-json-image-summary{color:var(--chatluna-studio-muted);font-style:italic}.chatluna-studio-model-request-json-image-preview{display:grid;justify-items:start;min-width:0;max-width:min(100%,520px);margin:0 0 0 17px;padding:8px;overflow:hidden;border:1px solid var(--chatluna-studio-border);border-radius:8px;background:var(--chatluna-studio-surface)}.chatluna-studio-model-request-json-image{display:block;max-width:100%;max-height:360px;border-radius:6px;object-fit:contain}.chatluna-studio-model-request-json-image-mode{flex:0 0 auto;margin-left:auto;padding:0;border:0;color:var(--chatluna-studio-muted);background:transparent;font-family:inherit;font-size:var(--chatluna-studio-font-sm);line-height:18px;text-decoration:underline;text-underline-offset:2px}.chatluna-studio-model-request-json-image-mode:hover,.chatluna-studio-model-request-json-image-mode:focus-visible{color:var(--chatluna-studio-accent)}.chatluna-studio-model-request-json-node[data-value-kind=number] .chatluna-studio-model-request-json-value{color:#d97706}.chatluna-studio-model-request-json-node[data-value-kind=boolean] .chatluna-studio-model-request-json-value{color:#2563eb}.chatluna-studio-model-request-json-node[data-value-kind=null] .chatluna-studio-model-request-json-value{color:#e11d48}.chatluna-studio-model-request-json-node[data-value-kind=undefined] .chatluna-studio-model-request-json-value,.chatluna-studio-model-request-json-node[data-value-kind=other] .chatluna-studio-model-request-json-value{color:var(--chatluna-studio-muted)}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-request-json-key,.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-request-json-node[data-value-kind=boolean] .chatluna-studio-model-request-json-value{color:#60a5fa}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-request-json-string{color:#34d399}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-request-json-node[data-value-kind=number] .chatluna-studio-model-request-json-value{color:#fbbf24}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-request-json-node[data-value-kind=null] .chatluna-studio-model-request-json-value{color:#fb7185}.chatluna-studio-model-request-empty,.chatluna-studio-model-request-error{display:grid;place-items:center;min-height:0;padding:32px;text-align:center}.chatluna-studio-model-analysis{min-width:0}.chatluna-studio-model-analysis-main{container-type:inline-size;display:grid;grid-template-columns:260px minmax(0,1fr);min-height:420px;overflow:hidden}.chatluna-studio-model-analysis-nav{min-width:0;max-height:720px;overflow:auto;border-right:1px solid var(--chatluna-studio-border);background:color-mix(in srgb,var(--chatluna-studio-surface-muted) 52%,var(--chatluna-studio-surface))}.chatluna-studio-model-analysis-boundary{display:grid;gap:5px;width:100%;padding:10px 12px;border:0;border-bottom:1px solid var(--chatluna-studio-border);color:var(--chatluna-studio-text);background:color-mix(in srgb,var(--chatluna-studio-surface-muted) 72%,var(--chatluna-studio-surface));font:inherit;text-align:left}.chatluna-studio-model-analysis-boundary-title,.chatluna-studio-model-analysis-boundary-meta{display:flex;align-items:center;min-width:0}.chatluna-studio-model-analysis-boundary-title{gap:7px;font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-model-analysis-boundary-title small{margin-left:auto;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-2xs)}.chatluna-studio-model-analysis-boundary-meta{overflow:hidden;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-2xs);text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-analysis-boundary-dot{flex:0 0 auto;width:6px;height:6px;border-radius:50%;background:#16a34a}.chatluna-studio-model-analysis-boundary.is-pending .chatluna-studio-model-analysis-boundary-dot{background:#c98619}.chatluna-studio-model-analysis-boundary.is-error .chatluna-studio-model-analysis-boundary-dot{background:#cf3e45}.chatluna-studio-model-analysis-nav-group{display:grid;gap:2px;width:100%;padding:8px;border:0;border-bottom:1px solid var(--chatluna-studio-border);color:var(--chatluna-studio-text);background:transparent;text-align:left}.chatluna-studio-model-analysis-nav-heading,.chatluna-studio-model-analysis-nav-item,.chatluna-studio-model-analysis-heading,.chatluna-studio-model-analysis-card>header,.chatluna-studio-model-analysis-tool-summary,.chatluna-studio-model-analysis-tool-call>div,.chatluna-studio-model-analysis-response-meta{display:flex;align-items:center}.chatluna-studio-model-analysis-nav-group{--chatluna-studio-role: var(--chatluna-studio-role-system)}.chatluna-studio-model-analysis-nav-group.is-user{--chatluna-studio-role: var(--chatluna-studio-role-user)}.chatluna-studio-model-analysis-nav-group.is-assistant{--chatluna-studio-role: var(--chatluna-studio-role-assistant)}.chatluna-studio-model-analysis-nav-group.is-response{--chatluna-studio-role: var(--chatluna-studio-role-response)}.chatluna-studio-model-analysis-nav-group.is-tool{--chatluna-studio-role: var(--chatluna-studio-role-tool)}.chatluna-studio-model-analysis-nav-group.is-variable{--chatluna-studio-role: var(--chatluna-studio-role-variable)}.chatluna-studio-model-analysis-nav-heading{justify-content:flex-start;gap:6px;width:100%;padding:3px 4px;border:0;border-radius:5px;color:inherit;background:transparent;font:inherit;font-size:var(--chatluna-studio-font-sm);text-align:left}.chatluna-studio-model-analysis-nav-heading:hover,.chatluna-studio-model-analysis-nav-heading:focus-visible{background:var(--chatluna-studio-hover)}.chatluna-studio-model-analysis-nav-heading svg{flex:0 0 auto;color:var(--chatluna-studio-role)}.chatluna-studio-model-analysis-nav-heading small{margin-left:auto;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-model-analysis-nav-heading .chatluna-studio-model-analysis-nav-chevron{color:var(--chatluna-studio-muted);transition:transform .16s ease}.chatluna-studio-model-analysis-nav-group.is-active .chatluna-studio-model-analysis-nav-chevron{transform:rotate(180deg)}.chatluna-studio-model-analysis-nav-items{display:grid;gap:2px}.chatluna-studio-model-analysis-nav-item{gap:7px;width:100%;min-width:0;padding:5px 4px;border:0;border-radius:5px;color:var(--chatluna-studio-text);background:transparent;font:inherit;font-size:var(--chatluna-studio-font-xs);text-align:left}.chatluna-studio-model-analysis-nav-item:hover,.chatluna-studio-model-analysis-nav-item:focus-visible,.chatluna-studio-model-analysis-nav-item.is-current{background:color-mix(in srgb,var(--chatluna-studio-accent) 12%,var(--chatluna-studio-surface))}.chatluna-studio-model-analysis-nav-item.is-current{box-shadow:inset 3px 0 0 var(--chatluna-studio-accent)}.chatluna-studio-model-analysis-nav-index{flex:0 0 auto;color:var(--chatluna-studio-muted);font-variant-numeric:tabular-nums}.chatluna-studio-model-analysis-nav-preview{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-analysis-nav-kind{flex:0 0 auto;padding:3px 5px;border-radius:4px;color:var(--chatluna-studio-role);background:color-mix(in srgb,var(--chatluna-studio-role) 12%,var(--chatluna-studio-surface));font-weight:650}.chatluna-studio-model-analysis-nav-kind.is-tool-call,.chatluna-studio-model-analysis-nav-kind.is-tool-result{--chatluna-studio-role: var(--chatluna-studio-role-tool-interaction)}.chatluna-studio-model-analysis-nav-kind.is-tool-definition{--chatluna-studio-role: var(--chatluna-studio-role-tool)}.chatluna-studio-model-analysis-nav-kind.is-variable{--chatluna-studio-role: var(--chatluna-studio-role-variable)}.chatluna-studio-model-analysis-nav-kind.is-response{--chatluna-studio-role: var(--chatluna-studio-role-response)}.chatluna-studio-model-analysis-nav-group.is-muted,.chatluna-studio-model-analysis-nav-item.is-muted,.chatluna-studio-model-analysis-card.is-muted,.chatluna-studio-model-analysis-variable-card.is-muted{opacity:.2}.chatluna-studio-model-analysis-content,.chatluna-studio-model-analysis-conversation{display:grid;align-content:start;gap:12px;min-width:0}.chatluna-studio-model-analysis-content{max-height:720px;overflow:auto;padding:14px}.chatluna-studio-model-analysis.is-inspector,.chatluna-studio-model-analysis.is-inspector .chatluna-studio-model-analysis-main{min-height:0}.chatluna-studio-model-analysis.is-inspector .chatluna-studio-model-analysis-main{display:block;overflow:visible}.chatluna-studio-model-analysis.is-inspector .chatluna-studio-model-analysis-content{max-height:none;overflow:visible;padding:0}.chatluna-studio-model-trajectory-inspector-title{min-width:0;overflow:hidden;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs);text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-analysis-formatted{min-width:0}.chatluna-studio-model-analysis-heading{justify-content:space-between;gap:12px}.chatluna-studio-model-analysis-heading h3,.chatluna-studio-model-analysis-variables h3,.chatluna-studio-model-analysis-tools h3{margin:0;color:var(--chatluna-studio-text);font-size:var(--chatluna-studio-font-xl)}.chatluna-studio-model-analysis-heading h3 span,.chatluna-studio-model-analysis-variables h3 span,.chatluna-studio-model-analysis-tools h3 span{color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-md);font-weight:500}.chatluna-studio-model-analysis-card,.chatluna-studio-model-analysis-tool-card{--chatluna-studio-role: var(--chatluna-studio-role-system);overflow:hidden;border:1px solid var(--chatluna-studio-border);border-top:2px solid var(--chatluna-studio-role);border-radius:8px;background:var(--chatluna-studio-surface);scroll-margin-top:12px}.chatluna-studio-model-analysis-card.is-user{--chatluna-studio-role: var(--chatluna-studio-role-user)}.chatluna-studio-model-analysis-card.is-assistant{--chatluna-studio-role: var(--chatluna-studio-role-assistant)}.chatluna-studio-model-analysis-card.is-response{--chatluna-studio-role: var(--chatluna-studio-role-response)}.chatluna-studio-model-analysis-card.is-tool-result{--chatluna-studio-role: var(--chatluna-studio-role-tool-interaction)}.chatluna-studio-model-analysis-tool-card{--chatluna-studio-role: var(--chatluna-studio-role-tool)}.chatluna-studio-model-analysis-card.is-located,.chatluna-studio-model-analysis-tool-card.is-located,.chatluna-studio-model-analysis-tools.is-located,.chatluna-studio-model-analysis-tool-call.is-located{outline:2px solid var(--chatluna-studio-accent);outline-offset:-2px;background:color-mix(in srgb,var(--chatluna-studio-accent) 8%,var(--chatluna-studio-surface))}.chatluna-studio-model-analysis-card>header{gap:9px;min-width:0;min-height:44px;padding:8px 12px;border-bottom:1px solid var(--chatluna-studio-border)}.chatluna-studio-model-analysis-card.is-collapsed>header{border-bottom:0}.chatluna-studio-model-analysis-collapse svg{transition:transform .16s ease}.chatluna-studio-model-analysis-card:not(.is-collapsed) .chatluna-studio-model-analysis-collapse svg{transform:rotate(180deg)}.chatluna-studio-model-analysis-role{padding:4px 8px;border-radius:6px;color:var(--chatluna-studio-role);background:color-mix(in srgb,var(--chatluna-studio-role) 12%,var(--chatluna-studio-surface));font-size:var(--chatluna-studio-font-xs);font-weight:700;text-transform:lowercase}.chatluna-studio-model-analysis-index,.chatluna-studio-model-analysis-path,.chatluna-studio-model-analysis-chars{color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-model-analysis-path{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-analysis-chars{flex:0 0 auto;margin-left:auto;padding:4px 8px;border:1px solid var(--chatluna-studio-border);border-radius:999px;white-space:nowrap}.chatluna-studio-model-analysis-section{display:grid;gap:8px;padding:14px 16px}.chatluna-studio-model-analysis-section+.chatluna-studio-model-analysis-section{border-top:1px solid var(--chatluna-studio-border)}.chatluna-studio-model-analysis-section>strong{color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs);text-transform:uppercase}.chatluna-studio-model-analysis-section pre,.chatluna-studio-model-analysis-tool-call pre{margin:0;overflow-wrap:anywhere;color:var(--chatluna-studio-text);font-family:var(--chatluna-studio-font-mono);font-size:var(--chatluna-studio-font-md);line-height:1.7;white-space:pre-wrap;word-break:break-word;-webkit-user-select:text;user-select:text}.chatluna-studio-model-analysis-text-wrap{position:relative}.chatluna-studio-model-analysis-section.is-collapsed .chatluna-studio-model-analysis-text-wrap>pre{max-height:var(--chatluna-studio-model-analysis-collapse-height);overflow:hidden;-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 48px),transparent);mask-image:linear-gradient(to bottom,#000 calc(100% - 48px),transparent)}.chatluna-studio-model-analysis-expand{display:flex;width:100%;align-items:center;justify-content:center;gap:4px;padding:4px 0;border:0;color:var(--chatluna-studio-accent);background:transparent;font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-model-analysis-expand svg{flex-shrink:0;transition:transform .16s ease}.chatluna-studio-model-analysis-section:not(.is-collapsed) .chatluna-studio-model-analysis-expand svg{transform:rotate(180deg)}.chatluna-studio-model-analysis-tool-call{display:grid;gap:8px;padding:10px 12px;border:1px solid var(--chatluna-studio-border);border-radius:6px;background:var(--chatluna-studio-surface-muted)}.chatluna-studio-model-analysis-tool-call.is-call,.chatluna-studio-model-analysis-tool-call.is-result{--chatluna-studio-role: var(--chatluna-studio-role-tool-interaction);border-top-width:2px;border-top-color:var(--chatluna-studio-role)}.chatluna-studio-model-analysis-tool-call>div{justify-content:space-between;gap:12px}.chatluna-studio-model-analysis-tool-call.is-call>div>strong,.chatluna-studio-model-analysis-tool-call.is-result>div>strong{color:var(--chatluna-studio-role)}.chatluna-studio-model-analysis-tool-call span{color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-model-analysis-link{width:max-content;padding:0;border:0;color:var(--chatluna-studio-accent);background:transparent;font-size:var(--chatluna-studio-font-xs);text-decoration:underline}.chatluna-studio-model-analysis-response-meta{gap:16px;padding:10px 16px;border-top:1px solid var(--chatluna-studio-border);color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-model-analysis-json{min-height:180px;padding:12px}.chatluna-studio-model-analysis-json .chatluna-studio-model-request-json-viewer{min-height:160px}.chatluna-studio-model-analysis-empty{padding:28px 16px;color:var(--chatluna-studio-muted);text-align:center}.chatluna-studio-model-analysis-empty p{margin:0 0 12px}.chatluna-studio-model-analysis-parts{display:grid;min-width:0}.chatluna-studio-model-analysis-section.is-compact{padding:0}.chatluna-studio-model-analysis-section mark{padding:0 1px;border-radius:2px;color:inherit;background:color-mix(in srgb,#facc15 48%,transparent)}.chatluna-studio-model-analysis-section mark.chatluna-studio-model-analysis-occurrence{padding:1px 2px;outline:2px solid color-mix(in srgb,var(--chatluna-studio-accent) 72%,transparent);outline-offset:1px;background:color-mix(in srgb,#facc15 68%,transparent);scroll-margin-top:12px}.chatluna-studio-model-analysis-section mark.chatluna-studio-model-analysis-occurrence.is-caret{display:inline-block;width:2px;height:1.35em;margin:0 1px;padding:0;border-radius:1px;outline:0;background:var(--chatluna-studio-accent);vertical-align:-.28em}.chatluna-studio-model-analysis-image{display:grid;justify-items:start;gap:8px;max-width:min(100%,536px);margin:0;padding:14px 16px}.chatluna-studio-model-analysis-image+.chatluna-studio-model-analysis-section,.chatluna-studio-model-analysis-section+.chatluna-studio-model-analysis-image{border-top:1px solid var(--chatluna-studio-border)}.chatluna-studio-model-analysis-image img{display:block;max-width:100%;max-height:360px;border:1px solid var(--chatluna-studio-border);border-radius:8px;object-fit:contain}.chatluna-studio-model-analysis-image figcaption,.chatluna-studio-model-analysis-source-path{color:var(--chatluna-studio-muted);font-family:var(--chatluna-studio-font-mono);font-size:var(--chatluna-studio-font-2xs)}.chatluna-studio-model-analysis-source-path{padding:0 2px 8px;overflow-wrap:anywhere}.chatluna-studio-model-analysis-raw-text{min-height:160px;margin:0;padding:14px;overflow-wrap:anywhere;color:var(--chatluna-studio-text);background:var(--chatluna-studio-surface-muted);font-family:var(--chatluna-studio-font-mono);font-size:var(--chatluna-studio-font-sm);line-height:1.65;white-space:pre-wrap;word-break:break-word;-webkit-user-select:text;user-select:text}.chatluna-studio-model-analysis-response-heading{padding-top:4px}.chatluna-studio-model-analysis-response-heading h3{margin:0;color:var(--chatluna-studio-text);font-size:var(--chatluna-studio-font-xl)}.chatluna-studio-model-analysis-variables{display:grid;gap:10px;padding-top:4px}.chatluna-studio-model-analysis-variable-list{display:grid;gap:8px}.chatluna-studio-model-analysis-variable-card{--chatluna-studio-role: var(--chatluna-studio-role-variable);overflow:hidden;border:1px solid var(--chatluna-studio-border);border-top:2px solid var(--chatluna-studio-role);border-radius:8px;background:var(--chatluna-studio-surface);scroll-margin-top:12px}.chatluna-studio-model-analysis-variable-card.is-located{outline:2px solid var(--chatluna-studio-accent);outline-offset:-2px;background:color-mix(in srgb,var(--chatluna-studio-accent) 8%,var(--chatluna-studio-surface))}.chatluna-studio-model-analysis-variable-card>header{display:flex;align-items:center;gap:9px;min-height:44px;padding:8px 12px;border-bottom:1px solid var(--chatluna-studio-border)}.chatluna-studio-model-analysis-variable-card>header>strong{min-width:0;overflow-wrap:anywhere;color:var(--chatluna-studio-text);font-family:var(--chatluna-studio-font-mono);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-model-analysis-variable-preset{margin-left:auto;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-model-analysis-variable-card.is-collapsed>header{border-bottom:0}.chatluna-studio-model-analysis-variable-card:not(.is-collapsed) .chatluna-studio-model-analysis-collapse svg{transform:rotate(180deg)}.chatluna-studio-model-analysis-variable-body{min-width:0}.chatluna-studio-model-analysis-variable-body>.chatluna-studio-model-analysis-section{padding:14px 16px}.chatluna-studio-model-history-preview-wrap{position:relative;display:grid;min-width:0}.chatluna-studio-model-history-preview-wrap.is-collapsed .chatluna-studio-model-history-preview{max-height:var(--chatluna-studio-model-history-collapse-height);overflow:hidden;-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 72px),transparent);mask-image:linear-gradient(to bottom,#000 calc(100% - 72px),transparent)}.chatluna-studio-model-history-preview{display:grid;min-width:0;container-type:inline-size}.chatluna-studio-model-history-expand{padding:8px 0 10px}.chatluna-studio-model-history-preview-wrap:not(.is-collapsed) .chatluna-studio-model-history-expand svg{transform:rotate(180deg)}.chatluna-studio-model-history-message{display:grid;gap:7px;min-width:0;padding:11px 14px}.chatluna-studio-model-history-message+.chatluna-studio-model-history-message{padding-top:8px}.chatluna-studio-model-history-line{display:flex;align-items:flex-start;flex-direction:column;gap:6px;width:min(78%,760px);min-width:0}.chatluna-studio-model-history-message.is-bot{justify-items:end}.chatluna-studio-model-history-message.is-bot .chatluna-studio-model-history-line{align-items:flex-end}.chatluna-studio-model-history-message.is-bot .chatluna-studio-model-history-meta{justify-content:flex-end}.chatluna-studio-model-history-message.is-bot .chatluna-studio-model-history-content{text-align:right}.chatluna-studio-model-history-message.is-bot>.chatluna-studio-model-history-quote{border-right:3px solid rgb(148 163 184 / 70%);border-left:0;text-align:right}.chatluna-studio-model-history-meta{display:inline-flex;flex:0 0 auto;flex-wrap:wrap;gap:4px;max-width:100%}.chatluna-studio-model-history-meta .studio-badge{max-width:min(240px,38vw);overflow:hidden;text-overflow:ellipsis}.chatluna-studio-model-history-meta .studio-badge.is-name.is-user{color:#9d174d;background:#fce7f3}.chatluna-studio-model-history-meta .studio-badge.is-name.is-bot{color:#7e22ce;background:#f3e8ff}.chatluna-studio-model-history-meta .studio-badge.is-id{color:#1d4ed8;background:#dbeafe}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-history-meta .studio-badge.is-name.is-user{color:#fbcfe8;background:#831843}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-history-meta .studio-badge.is-name.is-bot{color:#e9d5ff;background:#581c87}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-model-history-meta .studio-badge.is-id{color:#bfdbfe;background:#1e3a8a}.chatluna-studio-model-history-content{display:flex;align-items:flex-start;flex-direction:column;width:fit-content;max-width:min(100%,var(--chatluna-studio-model-history-content-max-width, 100%));min-width:0;color:var(--chatluna-studio-text);font-size:var(--chatluna-studio-font-md);line-height:1.55}.chatluna-studio-model-history-content-line{display:block;max-width:100%;overflow-wrap:anywhere;white-space:pre-wrap}.chatluna-studio-model-history-content-line:empty:before{content:" "}.chatluna-studio-model-history-message.is-bot .chatluna-studio-model-history-content-line{align-self:flex-end;text-align:left}.chatluna-studio-model-history-message.is-bot .chatluna-studio-model-history-content-line.is-single-visual-line{text-align:right}.chatluna-studio-model-history-quote.chatluna-studio-message-quote{width:min(100%,620px);margin:0;color:var(--chatluna-studio-muted);background:var(--chatluna-studio-surface-muted)}.chatluna-studio-model-history-quote.chatluna-studio-message-quote>span{overflow:visible;text-overflow:clip;white-space:pre-wrap;overflow-wrap:anywhere}.chatluna-studio-model-history-quote .chatluna-studio-message-quote-title{color:var(--chatluna-studio-text)}.chatluna-studio-model-history-quote .chatluna-studio-model-history-quote{width:100%;margin:3px 0}.chatluna-studio-model-history-quote-id{color:var(--chatluna-studio-muted);font-weight:400}@container (max-width: 680px){.chatluna-studio-model-history-line{width:min(100%,560px)}}@container (max-width: 520px){.chatluna-studio-model-history-meta .studio-badge{max-width:min(100%,72vw)}}.chatluna-studio-model-analysis-variable-status,.chatluna-studio-model-analysis-variable-empty{margin:0;padding:14px 16px;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-model-analysis-variable-empty{display:flex;align-items:center;gap:8px}.chatluna-studio-model-analysis-variable-empty>span{flex:0 0 auto;padding:2px 6px;border:1px solid color-mix(in srgb,var(--chatluna-studio-role-variable) 35%,var(--chatluna-studio-border));border-radius:999px;color:var(--chatluna-studio-role-variable);background:color-mix(in srgb,var(--chatluna-studio-role-variable) 9%,transparent);font-size:var(--chatluna-studio-font-2xs);font-weight:700}.chatluna-studio-model-analysis-tools{display:grid;gap:10px;padding:8px;overflow:hidden;border-radius:8px;scroll-margin-top:12px}.chatluna-studio-model-analysis-tool-summary{display:grid;grid-template-columns:18px minmax(0,1fr) 18px;gap:8px;width:100%;min-height:44px;padding:8px 12px;border:0;color:var(--chatluna-studio-text);background:transparent;font:inherit;text-align:left;-webkit-user-select:text;user-select:text}.chatluna-studio-model-analysis-tool-summary:hover,.chatluna-studio-model-analysis-tool-summary:focus-visible{background:var(--chatluna-studio-hover)}.chatluna-studio-model-analysis-tool-summary>svg{flex:0 0 auto;width:18px;height:18px}.chatluna-studio-model-analysis-tool-summary>svg:first-child{color:var(--chatluna-studio-role)}.chatluna-studio-model-analysis-tool-copy{display:grid;grid-template-columns:max-content minmax(0,1fr) max-content;align-items:center;gap:8px;min-width:0;overflow:hidden}.chatluna-studio-model-analysis-tool-copy>strong{min-width:0;max-width:100%;overflow:hidden;color:var(--chatluna-studio-role);font-family:var(--chatluna-studio-font-mono);font-size:var(--chatluna-studio-font-md);text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-analysis-tool-copy>.chatluna-studio-model-analysis-tool-desc{min-width:0;overflow:hidden;container-type:inline-size}.chatluna-studio-model-analysis-tool-desc>span{display:block;overflow:hidden;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm);text-overflow:ellipsis;white-space:nowrap}@container (max-width: 3em){.chatluna-studio-model-analysis-tool-desc>span{display:none}}@container chatluna-studio-trajectory-inspector (max-width: 500px){.chatluna-studio-model-analysis-tool-desc>span{display:none}}.chatluna-studio-model-analysis-tool-copy>small{min-width:0;overflow:hidden;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs);text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-model-analysis-tool-summary>.chatluna-studio-model-analysis-tool-chevron{flex:0 0 18px;width:18px;height:18px;min-width:18px;min-height:18px;overflow:visible}.chatluna-studio-model-analysis-collapse{flex:0 0 auto}.chatluna-studio-model-analysis-collapse svg{flex:0 0 auto;width:16px;height:16px;min-width:16px;min-height:16px}.chatluna-studio-model-analysis-tool-card.is-expanded .chatluna-studio-model-analysis-tool-summary>.chatluna-studio-model-analysis-tool-chevron{transform:rotate(180deg)}.chatluna-studio-model-analysis-tool-detail{display:grid;gap:12px;padding:16px;border-top:1px solid var(--chatluna-studio-border)}.chatluna-studio-model-analysis-tool-detail p,.chatluna-studio-model-analysis-tool-detail h4{margin:0}.chatluna-studio-model-analysis-tool-detail h4{font-family:var(--chatluna-studio-font-mono);font-size:var(--chatluna-studio-font-sm);font-weight:500}.chatluna-studio-model-analysis-tool-detail h4 small{margin-left:8px;color:var(--chatluna-studio-muted)}.chatluna-studio-model-analysis-tool-schema.chatluna-studio-model-request-json-viewer{min-height:0;padding:12px}@container (max-width: 680px){.chatluna-studio-model-analysis-main{grid-template-columns:190px minmax(0,1fr)}}@container (max-width: 520px){.chatluna-studio-model-analysis-main{grid-template-columns:1fr}.chatluna-studio-model-analysis-nav{max-height:180px;border-right:0;border-bottom:1px solid var(--chatluna-studio-border)}}@media(max-width:960px){.chatluna-studio-model-request-workspace{padding:16px}.chatluna-studio-model-request-split{grid-template-columns:1fr;grid-template-rows:minmax(180px,36%) minmax(0,1fr)}.chatluna-studio-model-trajectory-ledger.has-inspector{grid-template-columns:1fr}.chatluna-studio-model-trajectory-inspector{border-top:1px solid var(--chatluna-studio-border);border-left:0}}@media(max-width:720px){.chatluna-studio-model-request-overview-grid,.chatluna-studio-model-request-usage-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.chatluna-studio-model-request-header{align-items:flex-start;flex-direction:column}.chatluna-studio-model-request-detail-nav{margin-left:0}.chatluna-studio-model-trajectory-table>header,.chatluna-studio-model-trajectory-row{grid-template-columns:38px 92px minmax(0,1fr)}}.chatluna-studio-chat.chatluna-studio-preset-workspace{display:grid;grid-template-rows:auto auto minmax(0,1fr);gap:16px;min-width:0;overflow:hidden;padding:var(--chatluna-studio-region-padding);background:var(--chatluna-studio-bg)}.chatluna-studio-preset-header,.chatluna-studio-preset-document-header,.chatluna-studio-preset-editor-footer{display:flex;align-items:center;justify-content:space-between;gap:16px}.chatluna-studio-preset-header h1{margin:0 0 8px;font-size:var(--chatluna-studio-font-3xl);font-weight:700}.chatluna-studio-preset-header p{margin:0;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-md)}.chatluna-studio-preset-document-header p{margin:4px 0 0;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-preset-header-actions,.chatluna-studio-preset-document-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.chatluna-studio-preset-error,.chatluna-studio-preset-diagnostics{margin:0;color:var(--chatluna-studio-danger, #b91c1c);background:color-mix(in srgb,var(--chatluna-studio-danger, #dc2626) 8%,transparent)}.chatluna-studio-preset-error{padding:0}.chatluna-studio-preset-layout{display:grid;grid-template-columns:minmax(280px,360px) minmax(0,1fr);grid-row:3;gap:16px;min-height:0}.chatluna-studio-preset-list-pane,.chatluna-studio-preset-editor-pane{display:grid;min-width:0;min-height:0;overflow:hidden;border:1px solid var(--chatluna-studio-border);border-radius:16px;background:var(--chatluna-studio-surface)}.chatluna-studio-preset-list-pane{display:grid;grid-template-rows:auto minmax(0,1fr)}.chatluna-studio-preset-search{z-index:2;display:flex;min-height:61px;align-items:center;gap:8px;padding:12px;border-bottom:1px solid var(--chatluna-studio-border);--chatluna-studio-overlay-header-surface: var(--chatluna-studio-surface)}.chatluna-studio-preset-search:before{border-radius:15px 15px 0 0}.chatluna-studio-preset-search>svg{flex:none;color:var(--chatluna-studio-muted)}.chatluna-studio-preset-groups{overflow:auto;margin-top:-61px;padding:69px 8px 8px;scroll-padding-top:69px}.chatluna-studio-preset-group{display:flex;flex-direction:column;gap:4px;margin-bottom:14px}.chatluna-studio-preset-group>header{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-preset-list-item{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;width:100%;padding:10px;border:0;border-radius:8px;color:inherit;background:transparent;text-align:left}.chatluna-studio-preset-list-item:hover,.chatluna-studio-preset-list-item.is-active{background:color-mix(in srgb,var(--chatluna-studio-accent) 10%,transparent)}.chatluna-studio-preset-list-item.is-active{box-shadow:inset 3px 0 var(--chatluna-studio-accent)}.chatluna-studio-preset-list-item span{display:grid;min-width:0}.chatluna-studio-preset-list-item strong,.chatluna-studio-preset-list-item small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chatluna-studio-preset-list-item strong{font-size:var(--chatluna-studio-font-md)}.chatluna-studio-preset-list-item small,.chatluna-studio-preset-list-item time{color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-preset-editor-pane{position:relative;display:grid;grid-template-rows:minmax(0,1fr) auto;overflow:hidden}.chatluna-studio-preset-document-header,.chatluna-studio-preset-editor-footer{padding:12px 16px;border-bottom:1px solid var(--chatluna-studio-border)}.chatluna-studio-preset-editor-overlay{position:absolute;z-index:2;inset:0 0 auto;overflow:clip;border-radius:15px 15px 0 0;--chatluna-studio-overlay-header-surface: var(--chatluna-studio-surface)}.chatluna-studio-preset-editor-overlay .chatluna-studio-preset-document-header,.chatluna-studio-preset-editor-overlay .chatluna-studio-preset-diagnostics{background:transparent}.chatluna-studio-preset-document-title{display:flex;align-items:center;gap:8px;font-size:var(--chatluna-studio-font-lg)}.chatluna-studio-preset-save-status{color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-preset-save-status[data-status=dirty],.chatluna-studio-preset-save-status[data-status=error]{color:var(--chatluna-studio-danger, #b91c1c)}.chatluna-studio-preset-diagnostics{display:flex;flex-direction:column;gap:4px;padding:10px 16px;border-bottom:1px solid var(--chatluna-studio-border)}.chatluna-studio-preset-diagnostics p{margin:0;font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-preset-source-editor{--chatluna-studio-preset-code-bg: color-mix(in srgb, var(--chatluna-studio-panel) 82%, var(--chatluna-studio-bg));--chatluna-studio-preset-code-gutter: color-mix(in srgb, var(--chatluna-studio-surface-muted) 84%, var(--chatluna-studio-panel));--chatluna-studio-preset-code-key: #1662a8;--chatluna-studio-preset-code-string: #26734d;--chatluna-studio-preset-code-literal: #8b4db2;--chatluna-studio-preset-code-keyword: #a34b1e;--chatluna-studio-preset-code-punctuation: #8a94a3;min-height:0;overflow:hidden;background:var(--chatluna-studio-preset-code-bg)}.chatluna-studio-workspace[data-color-mode=dark] .chatluna-studio-preset-source-editor{--chatluna-studio-preset-code-bg: #24262b;--chatluna-studio-preset-code-gutter: #292c32;--chatluna-studio-preset-code-key: #75b7f0;--chatluna-studio-preset-code-string: #81c995;--chatluna-studio-preset-code-literal: #cf9bea;--chatluna-studio-preset-code-keyword: #efad77;--chatluna-studio-preset-code-punctuation: #858d9b}.chatluna-studio-preset-source-editor .cm-editor{height:100%;color:var(--chatluna-studio-text);background:transparent}.chatluna-studio-preset-source-editor .cm-editor.cm-focused{outline:none}.chatluna-studio-preset-source-editor .cm-scroller{overflow:auto;padding-top:var(--chatluna-studio-preset-overlay-height, 57px);font-family:var(--chatluna-studio-font-mono);font-variant-ligatures:none;scroll-padding-top:var(--chatluna-studio-preset-overlay-height, 57px);scrollbar-gutter:stable}.chatluna-studio-preset-source-editor .cm-gutters{color:color-mix(in srgb,var(--chatluna-studio-muted) 78%,transparent);background:var(--chatluna-studio-preset-code-gutter);border-right:1px solid color-mix(in srgb,var(--chatluna-studio-border) 72%,transparent)}.chatluna-studio-preset-source-editor .cm-gutterElement{transition:color .12s ease,background-color .12s ease}.chatluna-studio-preset-source-editor .cm-foldGutter .cm-gutterElement{color:color-mix(in srgb,var(--chatluna-studio-muted) 68%,transparent);cursor:pointer}.chatluna-studio-preset-source-editor .cm-foldGutter .cm-gutterElement:hover{color:var(--chatluna-studio-accent)}.chatluna-studio-preset-source-editor .cm-tooltip{overflow:hidden;border:1px solid var(--chatluna-studio-border);border-radius:8px;color:var(--chatluna-studio-text);background:var(--chatluna-studio-panel);box-shadow:0 12px 32px #0f172a29}body[data-chatluna-studio-frosted] .chatluna-studio-preset-source-editor .cm-tooltip{border-color:color-mix(in srgb,var(--chatluna-studio-secondary-outline) 64%,transparent);background:color-mix(in srgb,var(--chatluna-studio-panel) 72%,transparent);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.chatluna-studio-preset-source-editor .cm-tooltip-autocomplete>ul>li[aria-selected]{color:var(--chatluna-studio-text);background:color-mix(in srgb,var(--chatluna-studio-accent) 12%,transparent)}.chatluna-studio-preset-source-editor .cm-tooltip .chatluna-studio-preset-expression-tooltip{display:grid;gap:6px;min-width:180px;max-width:min(420px,70vw);padding:10px 12px}.chatluna-studio-preset-expression-tooltip-label,.chatluna-studio-preset-expression-tooltip time{color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-xs)}.chatluna-studio-preset-expression-tooltip-value{overflow:auto;max-height:180px;margin:0;color:var(--chatluna-studio-text);font:inherit;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere;scrollbar-width:thin;scrollbar-color:#94a3b8 transparent}.chatluna-studio-preset-expression-tooltip-value::-webkit-scrollbar{width:6px}.chatluna-studio-preset-expression-tooltip-value::-webkit-scrollbar-track{background:transparent}.chatluna-studio-preset-expression-tooltip-value::-webkit-scrollbar-thumb{border-radius:999px;background:#94a3b8}.chatluna-studio-preset-expression-tooltip-header{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:24px}.chatluna-studio-preset-expression-tooltip-action{display:flex;flex:0 0 auto}.chatluna-studio-preset-expression-tooltip-action .chatluna-studio-preset-expression-tooltip-link{height:24px;padding-inline:8px;color:var(--chatluna-studio-accent);background:transparent}.chatluna-studio-preset-expression-tooltip-action .chatluna-studio-preset-expression-tooltip-link:hover{color:var(--chatluna-studio-accent);background:color-mix(in srgb,var(--chatluna-studio-accent) 10%,transparent)}.chatluna-studio-preset-expression-tooltip.is-error{color:var(--chatluna-studio-danger, #b91c1c);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-preset-token-comment{color:var(--chatluna-studio-muted);font-style:italic}.chatluna-studio-preset-token-key{color:var(--chatluna-studio-preset-code-key);font-weight:600}.chatluna-studio-preset-token-string{color:var(--chatluna-studio-preset-code-string)}.chatluna-studio-preset-token-literal{color:var(--chatluna-studio-preset-code-literal);font-weight:550}.chatluna-studio-preset-token-keyword{color:var(--chatluna-studio-preset-code-keyword)}.chatluna-studio-preset-token-punctuation{color:var(--chatluna-studio-preset-code-punctuation)}.chatluna-studio-preset-expression{border-radius:3px;padding:0 1px}.chatluna-studio-preset-expression.is-control,.chatluna-studio-preset-expression.is-control *{color:var(--chatluna-studio-muted)}.chatluna-studio-preset-expression.is-control{background:color-mix(in srgb,var(--chatluna-studio-muted) 12%,transparent);text-decoration:underline dotted}.chatluna-studio-preset-expression.is-value,.chatluna-studio-preset-expression.is-value *{color:var(--chatluna-studio-accent)}.chatluna-studio-preset-expression.is-value{background:color-mix(in srgb,var(--chatluna-studio-accent) 12%,transparent);text-decoration:underline}.chatluna-studio-preset-expression.is-value:hover{background:color-mix(in srgb,var(--chatluna-studio-accent) 20%,transparent)}.chatluna-studio-preset-editor-footer{border-top:1px solid var(--chatluna-studio-border);border-bottom:0}.chatluna-studio-preset-editor-footer p{margin:0;color:var(--chatluna-studio-muted);font-size:var(--chatluna-studio-font-sm)}.chatluna-studio-preset-editor-footer p.is-error{color:var(--chatluna-studio-danger, #b91c1c)}.chatluna-studio-preset-empty{display:grid;place-items:center;min-height:0;padding:32px;color:var(--chatluna-studio-muted);text-align:center}.chatluna-studio-preset-empty.is-editor{grid-row:1 / -1}.chatluna-studio-preset-dialog-fields{display:flex;flex-direction:column;gap:14px}.chatluna-studio-preset-dialog-fields label,label.chatluna-studio-preset-dialog-fields{display:flex;flex-direction:column;gap:6px;font-size:var(--chatluna-studio-font-md)}@media(max-width:960px){.chatluna-studio-preset-workspace{padding:16px}.chatluna-studio-preset-layout{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(180px,36%) minmax(0,1fr)}.chatluna-studio-preset-document-header{align-items:flex-start;flex-direction:column}}@media(max-width:720px){.chatluna-studio-preset-header{align-items:flex-start;flex-direction:column}.chatluna-studio-preset-document-actions{width:100%}}@media(max-width:768px){.chatluna-studio-page{margin-left:var(--activity-width, 3.5rem);width:calc(100% - var(--activity-width, 3.5rem))}}
@@ -0,0 +1,15 @@
1
+ import type { StudioModelRequestStore } from '../model-request';
2
+ import type { StudioChatLunaRequestError, StudioModelRequestRecord } from '../types';
3
+ export declare const CHATLUNA_ERROR_CODE_DOCUMENTATION_URL = "https://chatluna.chat/guide/faq/error_code.html";
4
+ export declare function readChatLunaRequestError(error: unknown): StudioChatLunaRequestError | undefined;
5
+ export declare function getChatLunaErrorPossibleCauses(error: Pick<StudioChatLunaRequestError, 'code'> | undefined): readonly string[];
6
+ export declare function findLatestFailedModelRequest(records: readonly StudioModelRequestRecord[], conversationId?: string): StudioModelRequestRecord | undefined;
7
+ /**
8
+ * 把一次 ChatLuna 上游错误回填到该会话最近一条失败记录上。
9
+ *
10
+ * 住在这里而不是记录库里:记录库不该认识 ChatLuna 的错误格式。它需要的两件事——解析上游错误、
11
+ * 找到「最近一条失败记录」——都已经在本 module 里,回填只是把两者接上记录库的单行更新。
12
+ */
13
+ export declare function archiveChatLunaModelRequestError(store: StudioModelRequestStore, error: unknown, target: {
14
+ readonly conversationId: string;
15
+ }): void;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 被测 ChatLuna 插件运行时的解析口。
3
+ *
4
+ * 沙盒要读的两件事——ChatLuna 主功能的对话配置、chatluna-character 的伪装配置与对话上下文——都挂在
5
+ * 各自插件的服务实例上。两个插件都可以随时重载,因此这里只提供「现取一次」的函数,不缓存实例。
6
+ *
7
+ * 两条形态是这个模块存在的理由,不是防御性写法:
8
+ *
9
+ * 1. 走 `get(name)` 而不是属性访问。本插件不把这两个服务写进 `inject`——声明了它们会让被测插件每次
10
+ * 重载都连带重建沙盒,内存模式下整份场景会跟着丢——而未声明的属性访问会被 Cordis 记一条注入告警。
11
+ * 2. 自己的上下文取不到时,遍历插件注册表用提供方自己的上下文再取一次。被测插件可能装在隔离了服务
12
+ * 映射的 loader group 里,此时只有提供方那份上下文能解析到实例;chatluna-usage 已经踩过同一个坑。
13
+ *
14
+ * 形状按运行时读:服务来自仓库外的包,类型不在编译期可见。因此解析口收一个「接受判定」而不是直接把
15
+ * 服务交出去——调用方各自只要服务上的一小块能力,判定不通过就当作没装,而不是等到真的调用那一小块
16
+ * 能力时才在调用点上炸掉。
17
+ */
18
+ export declare function readRecord(value: unknown): Record<string, unknown> | undefined;
19
+ /**
20
+ * 按服务名解析被测 ChatLuna 插件的服务,并收窄成调用方真正用到的那一小块。
21
+ *
22
+ * 先在自己的上下文里取;取不到再遍历插件注册表用提供方自己的上下文取一次。第二步不是保险措施,
23
+ * 理由见模块注释第 2 条。
24
+ */
25
+ export declare function findChatLunaRuntime<T>(host: unknown, serviceName: string, accept: (service: Record<string, unknown>) => T | undefined): T | undefined;
@@ -0,0 +1,98 @@
1
+ import { type Context } from 'koishi';
2
+ import type { StudioModelRequestEntities } from '../types';
3
+ /**
4
+ * 真实 OneBot 会话跟踪器:回答「现在是谁在请求模型」。
5
+ *
6
+ * 模型请求是在 ChatLuna 的 fetch 边界上被采集的,那一层看不到任何会话信息(ADR-0055 在沙盒里
7
+ * 已经是这个形状)。真实环境里唯一可靠的会话来源是 ChatLuna 自己发出的对话生命周期事件:它们
8
+ * 带着触发这轮对话的 Koishi session,而一轮对话里的全部模型请求都发生在 before-chat 与
9
+ * after-chat 之间。
10
+ *
11
+ * 跟踪器只在「当前恰好只有一轮对话在跑」时给出归属。群聊高峰期多轮并发时宁可记成未归属,
12
+ * 也不把请求挂到错误的会话上——错误的归属会让预设证据定位、轨迹聚合与会话筛选同时说谎。
13
+ *
14
+ * 虚拟机器人触发的对话轮是第三种结果:既不归属,也不该被记下来。模拟环境类插件(AI 测试空间、
15
+ * 开发者观察窗)会注册 hidden 的 OneBot 机器人并派发真实 Koishi session,ChatLuna 照常发出
16
+ * 生命周期事件,于是它们的模型请求和真实会话在 fetch 边界上完全一样。跟踪器因此额外报告
17
+ * 「在跑的对话轮是否全是虚拟的」,让采集器整条丢弃(ADR-0023)。
18
+ */
19
+ /** 一轮对话:会话实体 + 这一轮的交互标识,同一轮里的多次模型请求共享后者。 */
20
+ export interface ChatLunaTurn {
21
+ entities: StudioModelRequestEntities;
22
+ interactionId: string;
23
+ }
24
+ /**
25
+ * 「现在是谁在请求模型」的完整回答。
26
+ *
27
+ * 归属与「要不要记」是两件独立的事:判不出归属的请求照样要记成未归属,而确定由虚拟机器人触发的
28
+ * 请求根本不进记录库。两者由同一次解析一起给出,调用方因此不必分两次读同一份状态——那两次读之间
29
+ * 状态可能已经变了。
30
+ */
31
+ export interface ChatLunaTurnResolution {
32
+ /** 归属到的对话轮;判不出来时缺省。 */
33
+ turn?: ChatLunaTurn;
34
+ /** 当前在跑的对话轮非空、且全部来自虚拟机器人。 */
35
+ virtualOnly: boolean;
36
+ }
37
+ /**
38
+ * 从 Koishi session 快照出一条模型请求的会话实体。
39
+ *
40
+ * 机器人与会话标识缺一不可:少了任何一个,这条记录就无法在列表里被指认,也无法参与预设证据
41
+ * 定位,那种「知道是私聊但不知道是谁」的半条归属比明确的未归属更容易误导人。
42
+ */
43
+ export declare function readStudioSessionEntities(session: unknown): StudioModelRequestEntities | undefined;
44
+ /**
45
+ * 这轮对话是虚拟 OneBot 机器人发起的。
46
+ *
47
+ * 模拟环境类插件注册的机器人一律是同一个形状:`platform` 为 `onebot`、`hidden` 为真,OneBot
48
+ * action 通道由注册它的插件在自己的场景里实现。认这个通用形状而不是某个具体插件的包名或 selfId:
49
+ * 包名会随插件更换静默失效,selfId 则是用户可改的配置。
50
+ *
51
+ * 真实适配器不会把 `hidden` 置真——控制台需要在机器人列表里显示它们,因此这个判据不会误伤真实会话。
52
+ */
53
+ export declare function isVirtualOneBotSession(session: unknown): boolean;
54
+ export interface ChatLunaSessionTrackerOptions {
55
+ /**
56
+ * 一轮对话在上游报错时的回调。
57
+ *
58
+ * 由跟踪器发出而不是由调用方自己监听同一个事件:错误事件只带 ChatLuna 内部会话标识,能把它
59
+ * 还原成(机器人,会话)的映射住在跟踪器里,而收尾会紧接着删掉那份映射。两个监听器的执行
60
+ * 顺序不受控,因此「先解析再收尾」必须在同一处完成。
61
+ */
62
+ onTurnFailed?: (error: unknown, turn: ChatLunaTurn) => void;
63
+ }
64
+ export declare class ChatLunaSessionTracker {
65
+ private readonly options;
66
+ /** 正在进行的对话轮,按(机器人,会话)索引;同一会话重复开始时以后一次为准。 */
67
+ private readonly turns;
68
+ /**
69
+ * ChatLuna 内部会话标识到本地键的映射。
70
+ *
71
+ * 核心链路的结束事件只带内部会话标识,不带 session:出错时 `after-chat-error` 连 session
72
+ * 都没有,只有这张映射能把它还原成具体的(机器人,会话)。
73
+ */
74
+ private readonly coreKeys;
75
+ private readonly disposers;
76
+ constructor(ctx: Context, options?: ChatLunaSessionTrackerOptions);
77
+ /** 内部会话标识唯一对应一轮时才认;映射到多轮时这次错误归属不明。 */
78
+ private resolveCoreTurn;
79
+ /**
80
+ * 归属候选,外加「这次请求是否确定来自虚拟机器人」。
81
+ *
82
+ * 归属恰好一轮时才交出:多轮并发或没有任何一轮在跑时,这次模型请求归属不明。
83
+ *
84
+ * `virtualOnly` 只在「在跑的对话轮非空且全部虚拟」时为真。虚拟轮与真实轮并发时它为假:fetch
85
+ * 边界分不出这次请求是哪一边发的,把整对都丢掉会连真实会话的证据一起丢,只能记成未归属留给
86
+ * 人工按时间对照。反过来两轮都虚拟时不能只看「恰好一轮」,否则模拟环境里跑多轮就又漏进来了。
87
+ *
88
+ * 判定留在这里而不是采集器里:采集器只知道「拿到候选就写归属」,而「几轮算可判定」「哪种机器人
89
+ * 不该记」都是会话跟踪自己的规则,两个模块因此不必共享一份并发假设。
90
+ */
91
+ resolveActiveTurn(): ChatLunaTurnResolution;
92
+ /** 当前正在进行的对话轮数;诊断与测试用。 */
93
+ get activeTurnCount(): number;
94
+ dispose(): void;
95
+ private begin;
96
+ private finish;
97
+ private finishCore;
98
+ }
@@ -0,0 +1,46 @@
1
+ import type { StudioModelRequestRecord, StudioModelRequestUsage } from '../types';
2
+ interface ModelRequestStoreLike {
3
+ getRawRecords(input?: {
4
+ limit?: number;
5
+ }): Promise<StudioModelRequestRecord[]>;
6
+ update(recordId: string, input: {
7
+ chatlunaRequestId?: string;
8
+ }): unknown;
9
+ }
10
+ export interface ChatLunaUsageListRow {
11
+ inputTokens: number;
12
+ outputTokens: number;
13
+ totalTokens: number;
14
+ cachedTokens: number;
15
+ reasoningTokens: number;
16
+ estimated?: boolean;
17
+ model: string;
18
+ createdAt: Date | string;
19
+ ttftMs?: number | null;
20
+ totalMs?: number | null;
21
+ tps?: number | null;
22
+ requestId?: string | null;
23
+ }
24
+ export interface ChatLunaUsageLookup {
25
+ list(input?: {
26
+ start?: Date | string;
27
+ end?: Date | string;
28
+ model?: string;
29
+ pageSize?: number;
30
+ listSortBy?: 'createdAt';
31
+ listDesc?: boolean;
32
+ }): Promise<{
33
+ rows: ChatLunaUsageListRow[];
34
+ }>;
35
+ }
36
+ export interface ChatLunaModelUsageEvent {
37
+ model?: string;
38
+ createdAt?: Date | string;
39
+ context?: {
40
+ requestId?: string;
41
+ };
42
+ }
43
+ export declare function toStudioModelRequestUsage(row: ChatLunaUsageListRow): StudioModelRequestUsage;
44
+ export declare function linkChatLunaUsageRequest(stores: ModelRequestStoreLike[], payload: ChatLunaModelUsageEvent): Promise<string | undefined>;
45
+ export declare function lookupChatLunaUsage(service: ChatLunaUsageLookup | undefined, record: Pick<StudioModelRequestRecord, 'createdAt' | 'durationMs' | 'model' | 'chatlunaRequestId'>): Promise<StudioModelRequestUsage | undefined>;
46
+ export {};
@@ -0,0 +1,61 @@
1
+ import type { ClearStudioModelRequestRecordsResult, ListStudioModelRequestRecordsInput, ReadStudioModelRequestRecordInput, ReadStudioModelRequestTrajectoryInput, StudioAppearance, StudioModelRequestDetail, StudioModelRequestFacets, StudioModelRequestRecordsPage, StudioModelRequestTrajectory, StudioPersistenceStatus } from './types';
2
+ import type { CreatePresetInput, DeletePresetInput, LocateStudioPresetExpressionInput, LocateStudioPresetExpressionResult, PresetDocumentKind, ReadStudioPresetInput, RenamePresetInput, StudioPresetDocument, SavePresetInput } from './presets';
3
+ /**
4
+ * Console 契约:前后端之间端点名、入参、出参与广播载荷的唯一声明。
5
+ *
6
+ * 服务端的事件映射、对 `@koishijs/console` 的 `Events` 模块增强与客户端 `send` / `receive`
7
+ * 的签名全部从这里派生,加端点只改这一处。本模块只有类型,不 import 任何服务,因此客户端
8
+ * 引用它不会把服务端运行时拖进前端产物;入参与出参一律引用既有领域类型,不复制一份形状。
9
+ *
10
+ * 分组按客户端端口能力书写,分组只是给读的人用的;端点集合是全体分组的并集。
11
+ * 鉴权级别不进契约:它是注册时的策略,不是端点的形状。
12
+ */
13
+ /** 工作区:页面挂载时需要的全局事实,与具体记录无关。 */
14
+ export interface StudioWorkspaceConsoleEvents {
15
+ 'chatluna-studio/workspace': () => Promise<StudioWorkspaceState>;
16
+ }
17
+ /** 页面一次取齐的全局事实:外观由插件配置决定,持久化状态解释记录能不能活过重启。 */
18
+ export interface StudioWorkspaceState {
19
+ appearance: StudioAppearance;
20
+ persistence: StudioPersistenceStatus;
21
+ }
22
+ /** 模型请求:记录列表、详情、轨迹、筛选可选值与清理。 */
23
+ export interface StudioModelRequestConsoleEvents {
24
+ 'chatluna-studio/model-request-records': (input: ListStudioModelRequestRecordsInput) => Promise<StudioModelRequestRecordsPage>;
25
+ 'chatluna-studio/model-request-record': (input: ReadStudioModelRequestRecordInput) => Promise<StudioModelRequestDetail>;
26
+ 'chatluna-studio/model-request-trajectory': (input: ReadStudioModelRequestTrajectoryInput) => Promise<StudioModelRequestTrajectory>;
27
+ 'chatluna-studio/model-request-facets': () => Promise<StudioModelRequestFacets>;
28
+ 'chatluna-studio/clear-model-request-records': () => Promise<ClearStudioModelRequestRecordsResult>;
29
+ }
30
+ /** 预设:ChatLuna 预设文档的读取、编辑与表达式定位。 */
31
+ export interface StudioPresetConsoleEvents {
32
+ 'chatluna-studio/preset-catalog': (input?: {
33
+ kind?: PresetDocumentKind;
34
+ }) => Promise<StudioPresetDocument[]>;
35
+ 'chatluna-studio/preset-read': (input: ReadStudioPresetInput) => Promise<StudioPresetDocument>;
36
+ 'chatluna-studio/preset-create': (input: CreatePresetInput) => Promise<StudioPresetDocument>;
37
+ 'chatluna-studio/preset-save': (input: SavePresetInput) => Promise<StudioPresetDocument>;
38
+ 'chatluna-studio/preset-rename': (input: RenamePresetInput) => Promise<StudioPresetDocument>;
39
+ 'chatluna-studio/preset-delete': (input: DeletePresetInput) => Promise<{
40
+ deleted: true;
41
+ }>;
42
+ 'chatluna-studio/preset-locate-expression': (input: LocateStudioPresetExpressionInput) => Promise<LocateStudioPresetExpressionResult>;
43
+ }
44
+ /** 端点集合是全体分组的并集;服务端注册与客户端消费都以它为唯一名单。 */
45
+ export interface StudioConsoleEvents extends StudioWorkspaceConsoleEvents, StudioModelRequestConsoleEvents, StudioPresetConsoleEvents {
46
+ }
47
+ export type StudioConsoleEndpoint = keyof StudioConsoleEvents;
48
+ /**
49
+ * 有新模型请求落库的广播载荷。
50
+ *
51
+ * 只带序号不带记录:列表当前的筛选、排序与分页只有前端知道,推整条记录会让服务端替前端猜
52
+ * 「这条该插在哪」,而序号足够让前端判断自己是不是已经看过这一条。
53
+ */
54
+ export interface StudioModelRequestRecordedPayload {
55
+ sequence: number;
56
+ }
57
+ /** 广播频道名到载荷;服务端 `broadcast` 与客户端 `receive` 都从这里取类型。 */
58
+ export interface StudioConsoleBroadcasts {
59
+ 'chatluna-studio/model-request-recorded': StudioModelRequestRecordedPayload;
60
+ }
61
+ export type StudioConsoleBroadcastChannel = keyof StudioConsoleBroadcasts;
@@ -0,0 +1,39 @@
1
+ import { type ChatLunaUsageLookup } from './chatluna/usage';
2
+ import type { StudioConsoleBroadcasts, StudioConsoleEvents } from './console-contract';
3
+ import type { StudioModelRequestStore } from './model-request';
4
+ import type { StudioPresetService } from './presets';
5
+ import type { StudioAppearance, StudioPersistenceStatus } from './types';
6
+ /** 用量服务可能晚于本插件加载或被热重载;因此按需现取,不缓存实例。 */
7
+ type ChatLunaUsageSource = () => ChatLunaUsageLookup | undefined;
8
+ export declare function resolveConsoleEntry(workspace?: string): {
9
+ dev: string;
10
+ prod: string;
11
+ };
12
+ export interface StudioConsoleRegistrar {
13
+ addEntry(entry: {
14
+ dev: string;
15
+ prod: string;
16
+ }): unknown;
17
+ addListener<Event extends keyof StudioConsoleEvents>(event: Event, callback: StudioConsoleEvents[Event], options: {
18
+ authority: number;
19
+ }): unknown;
20
+ broadcast<Channel extends keyof StudioConsoleBroadcasts>(type: Channel, body: StudioConsoleBroadcasts[Channel]): unknown;
21
+ }
22
+ export interface RegisterStudioConsoleOptions {
23
+ modelRequests: StudioModelRequestStore;
24
+ presets: StudioPresetService;
25
+ appearance: StudioAppearance;
26
+ getPersistenceStatus: () => StudioPersistenceStatus;
27
+ chatlunaUsage?: ChatLunaUsageSource;
28
+ }
29
+ export declare function registerConsole(console: StudioConsoleRegistrar, options: RegisterStudioConsoleOptions): (sequence: number) => void;
30
+ /**
31
+ * 对 `@koishijs/console` 的模块增强从契约派生:`Events` 直接继承契约映射,
32
+ * 因此端点名与签名不在这里第二次出现。属性函数类型对方法签名位置可赋值,
33
+ * Koishi 的 `addListener` 与 `send` 因此照旧拿到逐端点的精确签名。
34
+ */
35
+ declare module '@koishijs/console' {
36
+ interface Events extends StudioConsoleEvents {
37
+ }
38
+ }
39
+ export {};