rivet-design 0.10.8 → 0.11.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.
- package/dist/index.d.ts +47 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +277 -123
- package/dist/index.js.map +1 -1
- package/dist/mcp/agent-variants/SessionStore.d.ts +28 -4
- package/dist/mcp/agent-variants/SessionStore.d.ts.map +1 -1
- package/dist/mcp/agent-variants/SessionStore.js +356 -123
- package/dist/mcp/agent-variants/SessionStore.js.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts +84 -4
- package/dist/mcp/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.js +744 -145
- package/dist/mcp/agent-variants/WorktreeOrchestrator.js.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts +8 -3
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.d.ts.map +1 -1
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js +8 -3
- package/dist/mcp/agent-variants/WorktreeOrchestrator.testHelpers.js.map +1 -1
- package/dist/mcp/agent-variants/contracts.d.ts +7984 -1625
- package/dist/mcp/agent-variants/contracts.d.ts.map +1 -1
- package/dist/mcp/agent-variants/contracts.js +312 -154
- package/dist/mcp/agent-variants/contracts.js.map +1 -1
- package/dist/mcp/agent-variants/createZeroToOneTool.d.ts +2 -3
- package/dist/mcp/agent-variants/createZeroToOneTool.d.ts.map +1 -1
- package/dist/mcp/agent-variants/createZeroToOneTool.js +49 -39
- package/dist/mcp/agent-variants/createZeroToOneTool.js.map +1 -1
- package/dist/mcp/agent-variants/designCritique.d.ts +167 -0
- package/dist/mcp/agent-variants/designCritique.d.ts.map +1 -0
- package/dist/mcp/agent-variants/designCritique.js +717 -0
- package/dist/mcp/agent-variants/designCritique.js.map +1 -0
- package/dist/mcp/agent-variants/diffQa.d.ts +7 -0
- package/dist/mcp/agent-variants/diffQa.d.ts.map +1 -0
- package/dist/mcp/agent-variants/diffQa.js +67 -0
- package/dist/mcp/agent-variants/diffQa.js.map +1 -0
- package/dist/mcp/agent-variants/index.d.ts +3 -3
- package/dist/mcp/agent-variants/index.d.ts.map +1 -1
- package/dist/mcp/agent-variants/index.js +2 -1
- package/dist/mcp/agent-variants/index.js.map +1 -1
- package/dist/mcp/agent-variants/pinterestSourceContext.d.ts +4 -2
- package/dist/mcp/agent-variants/pinterestSourceContext.d.ts.map +1 -1
- package/dist/mcp/agent-variants/pinterestSourceContext.js +7 -6
- package/dist/mcp/agent-variants/pinterestSourceContext.js.map +1 -1
- package/dist/mcp/agent-variants/previewQa.d.ts +6 -4
- package/dist/mcp/agent-variants/previewQa.d.ts.map +1 -1
- package/dist/mcp/agent-variants/previewQa.js +140 -13
- package/dist/mcp/agent-variants/previewQa.js.map +1 -1
- package/dist/mcp/agent-variants/sourceContext.d.ts +20 -5
- package/dist/mcp/agent-variants/sourceContext.d.ts.map +1 -1
- package/dist/mcp/agent-variants/sourceContext.js +99 -115
- package/dist/mcp/agent-variants/sourceContext.js.map +1 -1
- package/dist/mcp/agent-variants/tools.d.ts +7 -0
- package/dist/mcp/agent-variants/tools.d.ts.map +1 -1
- package/dist/mcp/agent-variants/tools.js +216 -15
- package/dist/mcp/agent-variants/tools.js.map +1 -1
- package/dist/mcp/agent-variants/variantContext.d.ts +19 -0
- package/dist/mcp/agent-variants/variantContext.d.ts.map +1 -0
- package/dist/mcp/agent-variants/variantContext.js +355 -0
- package/dist/mcp/agent-variants/variantContext.js.map +1 -0
- package/dist/mcp/auth/httpOAuthProvider.d.ts +103 -0
- package/dist/mcp/auth/httpOAuthProvider.d.ts.map +1 -0
- package/dist/mcp/auth/httpOAuthProvider.js +454 -0
- package/dist/mcp/auth/httpOAuthProvider.js.map +1 -0
- package/dist/mcp/auth/tools.d.ts +2 -0
- package/dist/mcp/auth/tools.d.ts.map +1 -1
- package/dist/mcp/auth/tools.js +12 -5
- package/dist/mcp/auth/tools.js.map +1 -1
- package/dist/mcp/httpServer.d.ts +36 -0
- package/dist/mcp/httpServer.d.ts.map +1 -0
- package/dist/mcp/httpServer.js +307 -0
- package/dist/mcp/httpServer.js.map +1 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +41 -19
- package/dist/mcp/server.js.map +1 -1
- package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
- package/dist/proxy-middleware/proxy-config.js +5 -2
- package/dist/proxy-middleware/proxy-config.js.map +1 -1
- package/dist/routes/agentVariants.d.ts.map +1 -1
- package/dist/routes/agentVariants.js +6 -4
- package/dist/routes/agentVariants.js.map +1 -1
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +2 -1
- package/dist/routes/mcp.js.map +1 -1
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +13 -5
- package/dist/server.js.map +1 -1
- package/dist/services/AuthService.d.ts +1 -0
- package/dist/services/AuthService.d.ts.map +1 -1
- package/dist/services/AuthService.js +11 -1
- package/dist/services/AuthService.js.map +1 -1
- package/dist/services/BrowserAgentClient.d.ts +54 -0
- package/dist/services/BrowserAgentClient.d.ts.map +1 -0
- package/dist/services/BrowserAgentClient.js +126 -0
- package/dist/services/BrowserAgentClient.js.map +1 -0
- package/dist/services/ConfigManager.d.ts +5 -0
- package/dist/services/ConfigManager.d.ts.map +1 -1
- package/dist/services/ConfigManager.js +25 -3
- package/dist/services/ConfigManager.js.map +1 -1
- package/dist/services/DevServerRuntimeService.d.ts +119 -0
- package/dist/services/DevServerRuntimeService.d.ts.map +1 -0
- package/dist/services/DevServerRuntimeService.js +657 -0
- package/dist/services/DevServerRuntimeService.js.map +1 -0
- package/dist/services/GatewayClient.d.ts +25 -0
- package/dist/services/GatewayClient.d.ts.map +1 -1
- package/dist/services/GatewayClient.js +70 -11
- package/dist/services/GatewayClient.js.map +1 -1
- package/dist/services/InlineVariantGenerationService.d.ts +2 -0
- package/dist/services/InlineVariantGenerationService.d.ts.map +1 -1
- package/dist/services/InlineVariantGenerationService.js +70 -3
- package/dist/services/InlineVariantGenerationService.js.map +1 -1
- package/dist/services/RequestAuthContext.d.ts +7 -1
- package/dist/services/RequestAuthContext.d.ts.map +1 -1
- package/dist/services/RequestAuthContext.js +15 -2
- package/dist/services/RequestAuthContext.js.map +1 -1
- package/dist/services/SessionBridgeService.d.ts +1 -0
- package/dist/services/SessionBridgeService.d.ts.map +1 -1
- package/dist/services/SessionBridgeService.js +16 -1
- package/dist/services/SessionBridgeService.js.map +1 -1
- package/dist/services/VariantRunService.d.ts +1 -0
- package/dist/services/VariantRunService.d.ts.map +1 -1
- package/dist/services/VariantRunService.js +1 -0
- package/dist/services/VariantRunService.js.map +1 -1
- package/dist/services/VariantsRuntime.d.ts.map +1 -1
- package/dist/services/VariantsRuntime.js +1 -0
- package/dist/services/VariantsRuntime.js.map +1 -1
- package/dist/services/WorktreeManager.d.ts +1 -8
- package/dist/services/WorktreeManager.d.ts.map +1 -1
- package/dist/services/WorktreeManager.js +1 -28
- package/dist/services/WorktreeManager.js.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.d.ts.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.js +7 -0
- package/dist/services/createAgentVariantsOrchestrator.js.map +1 -1
- package/dist/utils/skills/describe-motion-protocol.d.ts +2 -3
- package/dist/utils/skills/describe-motion-protocol.d.ts.map +1 -1
- package/dist/utils/skills/describe-motion-protocol.js +50 -35
- package/dist/utils/skills/describe-motion-protocol.js.map +1 -1
- package/dist/utils/skills/shared-variants-protocol.d.ts +1 -1
- package/dist/utils/skills/shared-variants-protocol.d.ts.map +1 -1
- package/dist/utils/skills/shared-variants-protocol.js +21 -15
- package/dist/utils/skills/shared-variants-protocol.js.map +1 -1
- package/dist/utils/variantSessionStart.d.ts +3 -0
- package/dist/utils/variantSessionStart.d.ts.map +1 -0
- package/dist/utils/variantSessionStart.js +7 -0
- package/dist/utils/variantSessionStart.js.map +1 -0
- package/package.json +2 -1
- package/src/ui/dist/assets/{main-WqlDU4Ou.js → main-Cw6Pd8ye.js} +204 -204
- package/src/ui/dist/assets/main-DkCj7b2K.css +1 -0
- package/src/ui/dist/index.html +2 -2
- package/dist/mcp/agent-variants/designContextStore.d.ts +0 -160
- package/dist/mcp/agent-variants/designContextStore.d.ts.map +0 -1
- package/dist/mcp/agent-variants/designContextStore.js +0 -295
- package/dist/mcp/agent-variants/designContextStore.js.map +0 -1
- package/dist/mcp/agent-variants/inspirationDesignContext.d.ts +0 -440
- package/dist/mcp/agent-variants/inspirationDesignContext.d.ts.map +0 -1
- package/dist/mcp/agent-variants/inspirationDesignContext.js +0 -2467
- package/dist/mcp/agent-variants/inspirationDesignContext.js.map +0 -1
- package/src/ui/dist/assets/main-auZA25j4.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */@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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-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-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, 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-200:oklch(88.5% .062 18.334);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-green-400:oklch(79.2% .209 151.711);--color-emerald-500:oklch(69.6% .17 162.48);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-900:oklch(21% .034 264.665);--color-neutral-900:oklch(20.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-3xl:48rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--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 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*,:after,:before{border-color:var(--color-main-border,#232328)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.-top-0\.5{top:calc(var(--spacing) * -.5)}.-top-1{top:calc(var(--spacing) * -1)}.top-0{top:0}.top-1{top:var(--spacing)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-2\.5{top:calc(var(--spacing) * 2.5)}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.-right-0\.5{right:calc(var(--spacing) * -.5)}.-right-1{right:calc(var(--spacing) * -1)}.right-0{right:0}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-6{right:calc(var(--spacing) * 6)}.bottom-6{bottom:calc(var(--spacing) * 6)}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.isolate{isolation:isolate}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-comment-preview{z-index:55}.z-max{z-index:999999}.z-tooltip{z-index:70}.z-ui-primary{z-index:50}.order-1{order:1}.order-2{order:2}.col-start-1{grid-column-start:1}.row-start-1{grid-row-start:1}.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-1{margin-inline:var(--spacing)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-\[1px\]{margin-top:1px}.-mr-0\.5{margin-right:calc(var(--spacing) * -.5)}.mr-1{margin-right:var(--spacing)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.-ml-2\.5{margin-left:calc(var(--spacing) * -2.5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-square{aspect-ratio:1}.h-0{height:0}.h-1{height:var(--spacing)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-16{height:calc(var(--spacing) * 16)}.h-44{height:calc(var(--spacing) * 44)}.h-52{height:calc(var(--spacing) * 52)}.h-80{height:calc(var(--spacing) * 80)}.h-96{height:calc(var(--spacing) * 96)}.h-\[450px\]{height:450px}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-10{max-height:calc(var(--spacing) * 10)}.max-h-20{max-height:calc(var(--spacing) * 20)}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-28{max-height:calc(var(--spacing) * 28)}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-36{max-height:calc(var(--spacing) * 36)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90\%\]{max-height:90%}.min-h-0{min-height:0}.min-h-\[2\.5rem\]{min-height:2.5rem}.min-h-screen{min-height:100vh}.w-0{width:0}.w-1{width:var(--spacing)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-\[1px\]{width:1px}.w-\[280px\]{width:280px}.w-\[380px\]{width:380px}.w-\[420px\]{width:420px}.w-\[480px\]{width:480px}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[8rem\]{max-width:8rem}.max-w-\[80\%\]{max-width:80%}.max-w-\[90\%\]{max-width:90%}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[300px\]{max-width:300px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-4{min-width:calc(var(--spacing) * 4)}.min-w-\[140px\]{min-width:140px}.min-w-\[180px\]{min-width:180px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.animate-token-highlight{animation:1.5s ease-in-out token-highlight}.cursor-auto{cursor:auto}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[80px_1fr\]{grid-template-columns:80px 1fr}.grid-cols-\[80px_1fr_auto\]{grid-template-columns:80px 1fr auto}.grid-cols-\[minmax\(140px\,1fr\)_minmax\(110px\,auto\)_minmax\(220px\,2fr\)\]{grid-template-columns:minmax(140px,1fr) minmax(110px,auto) minmax(220px,2fr)}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(var(--spacing) * var(--tw-space-x-reverse));margin-inline-end:calc(var(--spacing) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--border)}:where(.divide-main-border>:not(:last-child)){border-color:#232328}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[10px\]{border-radius:10px}.rounded-\[20px\]{border-radius:20px}.rounded-\[22px\]{border-radius:22px}.rounded-\[64px\]{border-radius:64px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-l-lg{border-top-left-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1px\]{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-\[6px\]{border-top-style:var(--tw-border-style);border-top-width:6px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-r-\[4px\]{border-right-style:var(--tw-border-style);border-right-width:4px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-b-\[1px\]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-\[4px\]{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-\[\#6B97FF\]{border-color:#6b97ff}.border-accent-success\/40{border-color:#10b98166}.border-accent-warning\/40{border-color:#f59e0b66}.border-accent\/40{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.border-accent\/40{border-color:color-mix(in oklab,var(--accent) 40%,transparent)}}.border-border{border-color:var(--border)}.border-content-muted\/30{border-color:#d1d5db4d}.border-content-muted\/40{border-color:#d1d5db66}.border-divider{border-color:#4b5563}.border-gray-300{border-color:var(--color-gray-300)}.border-hover{border-color:var(--hover)}.border-main-border{border-color:#232328}.border-primary{border-color:#f30}.border-primary\/30{border-color:#ff33004d}.border-primary\/40{border-color:#f306}.border-transparent{border-color:#0000}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.border-t-content{border-top-color:#fff}.border-t-transparent{border-top-color:#0000}.border-r-transparent{border-right-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\[\#1c1c20\]{background-color:#1c1c20}.bg-\[\#f3ede3\]{background-color:#f3ede3}.bg-accent{background-color:var(--accent)}.bg-accent-error{background-color:#ef4444}.bg-accent-success{background-color:#10b981}.bg-accent-success\/10{background-color:#10b9811a}.bg-accent-warning{background-color:#f59e0b}.bg-accent-warning\/10{background-color:#f59e0b1a}.bg-accent\/10{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-accent\/10{background-color:color-mix(in oklab,var(--accent) 10%,transparent)}}.bg-accent\/20{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-accent\/20{background-color:color-mix(in oklab,var(--accent) 20%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab,red,red)){.bg-black\/45{background-color:color-mix(in oklab,var(--color-black) 45%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-divider{background-color:#4b5563}.bg-divider\/20{background-color:#4b556333}.bg-foreground{background-color:var(--foreground)}.bg-hover{background-color:var(--hover)}.bg-input{background-color:var(--input)}.bg-main{background-color:#1c1c20}.bg-main-border{background-color:#232328}.bg-main-hover{background-color:#404040}.bg-main-hover\/50{background-color:#40404080}.bg-main-input{background-color:#2e2e2e}.bg-main-input\/40{background-color:#2e2e2e66}.bg-main-input\/80{background-color:#2e2e2ecc}.bg-main-light{background-color:#1e1e22}.bg-main\/90{background-color:#1c1c20e6}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/15{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/15{background-color:color-mix(in oklab,var(--muted-foreground) 15%,transparent)}}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-primary{background-color:#f30}.bg-primary\/10{background-color:#ff33001a}.bg-primary\/15{background-color:#ff330026}.bg-primary\/20{background-color:#f303}.bg-readOnly{background-color:#232323}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/80{background-color:#fb2c36cc}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/80{background-color:color-mix(in oklab,var(--color-red-500) 80%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-selected{background-color:var(--selected)}.bg-surface-1{background-color:var(--surface-1)}.bg-surface-2{background-color:var(--surface-2)}.bg-surface-3{background-color:var(--surface-3)}.bg-surface-4{background-color:var(--surface-4)}.bg-surface-5{background-color:var(--surface-5)}.bg-surface-6{background-color:var(--surface-6)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/8{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.bg-white\/8{background-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.bg-white\/15{background-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.bg-white\/15{background-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.fill-main{fill:#1c1c20}.fill-main-input{fill:#2e2e2e}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-14{padding-block:calc(var(--spacing) * 14)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-1{padding-right:var(--spacing)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-0{padding-bottom:0}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-7{padding-left:calc(var(--spacing) * 7)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-main{font-family:Satoshi,Inter,system-ui,-apple-system,Segoe UI,sans-serif}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.22em\]{--tw-tracking:.22em;letter-spacing:.22em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent{color:var(--accent)}.text-accent-success{color:#10b981}.text-accent-warning{color:#f59e0b}.text-content{color:#fff}.text-content-muted{color:#d1d5db}.text-content-subtle{color:#9ca3af}.text-emerald-500{color:var(--color-emerald-500)}.text-foreground{color:var(--foreground)}.text-gray-300{color:var(--color-gray-300)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-900{color:var(--color-gray-900)}.text-green-400{color:var(--color-green-400)}.text-muted-foreground{color:var(--muted-foreground)}.text-primary{color:#f30}.text-primary-foreground{color:var(--primary-foreground)}.text-red-200{color:var(--color-red-200)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.placeholder-content-subtle::placeholder{color:#9ca3af}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-surface-3{--tw-shadow:var(--shadow-surface-3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-surface-4{--tw-shadow:var(--shadow-surface-4);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--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)}.ring-content-muted\/40{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.4)}.ring-primary{--tw-ring-color:#f30}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.outline-transparent{outline-color:#0000}.blur{--tw-blur:blur(8px);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,)}.brightness-110{--tw-brightness:brightness(110%);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,)}.invert{--tw-invert:invert(100%);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,)}.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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,font-variation-settings\]{transition-property:color,font-variation-settings;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,stroke-width\]{transition-property:color,stroke-width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[filter\]{transition-property:filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[outline-color\]{transition-property:outline-color;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-opacity{transition-property:opacity;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))}.duration-80{--tw-duration:80ms;transition-duration:80ms}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.ring-inset{--tw-ring-inset:inset}@media(hover:hover){.group-hover\:pointer-events-auto:is(:where(.group):hover *){pointer-events:auto}.group-hover\:border-content-muted:is(:where(.group):hover *){border-color:#d1d5db}.group-hover\:text-content:is(:where(.group):hover *){color:#fff}.group-hover\:opacity-0:is(:where(.group):hover *){opacity:0}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\:brightness-75:is(:where(.group):hover *){--tw-brightness:brightness(75%);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,)}}.group-has-\[\:focus-visible\]\:opacity-0:is(:where(.group):has(:focus-visible) *){opacity:0}.placeholder\:text-content-muted::placeholder{color:#d1d5db}.placeholder\:text-content-subtle::placeholder{color:#9ca3af}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.focus-within\:outline-white\/20:focus-within{outline-color:#fff3}@supports (color:color-mix(in lab,red,red)){.focus-within\:outline-white\/20:focus-within{outline-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}@media(hover:hover){.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-main-border:hover{border-color:#232328}.hover\:border-primary-border:hover{border-color:#ff6b35}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-black\/70:hover{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/70:hover{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.hover\:bg-divider:hover{background-color:#4b5563}.hover\:bg-hover:hover{background-color:var(--hover)}.hover\:bg-main:hover{background-color:#1c1c20}.hover\:bg-main-border:hover{background-color:#232328}.hover\:bg-main-hover:hover{background-color:#404040}.hover\:bg-main-input:hover{background-color:#2e2e2e}.hover\:bg-main\/80:hover{background-color:#1c1c20cc}.hover\:bg-primary-hover:hover{background-color:#c2410c}.hover\:bg-primary\/90:hover{background-color:#ff3300e6}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-surface-5:hover{background-color:var(--surface-5)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.hover\:text-accent-error:hover{color:#ef4444}.hover\:text-content:hover{color:#fff}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-white:hover{color:var(--color-white)}}.focus\:border-primary:focus{border-color:#f30}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-content-muted\/40:focus{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.4)}.focus\:ring-content-muted\/50:focus{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.5)}.focus\:ring-primary\/30:focus{--tw-ring-color:oklab(64.6321% .202926 .129852/.3)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[\#6B97FF\]:focus-visible{--tw-ring-color:#6b97ff}.focus-visible\:ring-content-muted\/40:focus-visible{--tw-ring-color:oklab(87.1681% -.00188759 -.00914592/.4)}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-80:disabled{opacity:.8}.has-\[\:focus-visible\]\:pointer-events-auto:has(:focus-visible){pointer-events:auto}.has-\[\:focus-visible\]\:opacity-100:has(:focus-visible){opacity:1}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[highlighted\]\:border-primary-border[data-highlighted]{border-color:#ff6b35}.data-\[highlighted\]\:bg-main-hover[data-highlighted]{background-color:#404040}.data-\[highlighted\]\:bg-main-input[data-highlighted]{background-color:#2e2e2e}.data-\[highlighted\]\:text-content[data-highlighted]{color:#fff}.data-\[highlighted\]\:ring-1[data-highlighted]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[highlighted\]\:ring-primary-border[data-highlighted]{--tw-ring-color:#ff6b35}.data-\[state\=active\]\:border-primary[data-state=active]{border-color:#f30}.data-\[state\=active\]\:text-white[data-state=active]{color:var(--color-white)}.data-\[state\=checked\]\:bg-transparent[data-state=checked]{background-color:#0000}@media(min-width:40rem){.sm\:col-span-3{grid-column:span 3/span 3}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:48rem){.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-\[1fr_1fr\]{grid-template-columns:1fr 1fr}.lg\:flex-row{flex-direction:row}.lg\:items-end{align-items:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}}@media(prefers-color-scheme:dark){.dark\:bg-accent\/12{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-accent\/12{background-color:color-mix(in oklab,var(--accent) 12%,transparent)}}}}:root{--background:#1c1c20;--foreground:#fff;--card:#1e1e22;--card-foreground:#fff;--popover:#232328;--popover-foreground:#fff;--primary:#f30;--primary-foreground:#fff;--secondary:#2e2e2e;--secondary-foreground:#fff;--muted:#2e2e2e;--muted-foreground:#9ca3af;--accent:#333;--accent-foreground:#fff;--selected:#404040;--border:#ffffff1f;--input:#404040;--ring:#404040;--destructive:#ef4444;--destructive-foreground:#fff;--destructive-light:#450a0a;--hover:#ffffff0f;--active:#ffffff1a;--checker-a:#1f1f1f;--checker-b:#2a2a2a;--surface-1:#1c1c20;--surface-2:#232328;--surface-3:#2a2a30;--surface-4:#313138;--surface-5:#383840;--surface-6:#3f3f48;--surface-7:#464650;--surface-8:#4d4d58;--dm-hi-base:#ffffff03;--dm-hi-mid:#ffffff05;--dm-hi-high:#ffffff0a;--dm-hi-peak:#ffffff0f;--dm-ring-base:#ffffff05;--dm-ring-mid:#ffffff0a;--dm-ring-high:#ffffff0f;--dm-drop:#0000002e;--shadow-surface-1:inset 0 0 0 1px var(--dm-ring-base);--shadow-surface-2:inset 0 1px 0 0 var(--dm-hi-base), inset 0 0 0 1px var(--dm-ring-base), 0 1px 1px -.5px var(--dm-drop);--shadow-surface-3:inset 0 1px 0 0 var(--dm-hi-mid), inset 0 0 0 1px var(--dm-ring-base), 0 0 0 1px #0000001f, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop);--shadow-surface-4:inset 0 1px 0 0 var(--dm-hi-mid), inset 0 0 0 1px var(--dm-ring-mid), 0 0 0 1px #00000024, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop);--shadow-surface-5:inset 0 1px 0 0 var(--dm-hi-high), inset 0 0 0 1px var(--dm-ring-mid), 0 0 0 1px #00000029, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop);--shadow-surface-6:inset 0 1px 0 0 var(--dm-hi-high), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px #0000002e, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(--dm-drop);--shadow-surface-7:inset 0 1px 0 0 var(--dm-hi-peak), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px #0003, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(--dm-drop), 0 48px 48px -24px var(--dm-drop);--shadow-surface-8:inset 0 1px 0 0 var(--dm-hi-peak), inset 0 0 0 1px var(--dm-ring-high), 0 0 0 1px #00000038, 0 1px 1px -.5px var(--dm-drop), 0 3px 3px -1.5px var(--dm-drop), 0 6px 6px -3px var(--dm-drop), 0 12px 12px -6px var(--dm-drop), 0 24px 24px -12px var(--dm-drop), 0 48px 48px -24px var(--dm-drop), 0 96px 96px -48px var(--dm-drop)}html,body{background-color:var(--background);overflow:hidden}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-family:Satoshi,Inter,system-ui,sans-serif}@font-face{font-family:Satoshi;src:url(/fonts/Satoshi-Variable.woff2)format("woff2-variations");font-weight:300 900;font-style:normal;font-display:swap}@font-face{font-family:Satoshi;src:url(/fonts/Satoshi-VariableItalic.woff2)format("woff2-variations");font-weight:300 900;font-style:italic;font-display:swap}@font-face{font-family:Goldman;src:url(/fonts/Goldman-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Goldman;src:url(/fonts/Goldman-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@keyframes rivet-token-highlight{0%{transform:scale(1.05);box-shadow:0 0 0 2px #facc15,0 0 0 6px #facc1580}50%{transform:scale(1.02);box-shadow:0 0 0 2px #facc15,0 0 0 8px #facc1599}to{transform:scale(1);box-shadow:0 0 #facc1500,0 0 #facc1500}}*{scrollbar-width:thin;scrollbar-color:#404040 transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0;border-radius:4px}::-webkit-scrollbar-thumb{background:#3a3a3f padding-box padding-box;border:2px solid #0000;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#505058 padding-box padding-box;border:2px solid #0000}::-webkit-scrollbar-corner{background:0 0}.markdown-content{color:#fff;word-break:break-word;overflow-wrap:anywhere;min-width:0;font-size:.875rem;line-height:1.625}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4,.markdown-content h5,.markdown-content h6{color:#fff;margin-top:1rem;margin-bottom:.25rem;font-weight:600;line-height:1.3}.markdown-content h1{font-size:1.25rem}.markdown-content h2{font-size:1.125rem}.markdown-content h3{font-size:1rem}.markdown-content p{margin:.5rem 0}.markdown-content strong{color:#fff;font-weight:600}.markdown-content em{font-style:italic}.markdown-content a{color:#60a5fa;text-decoration:underline}.markdown-content a:hover{color:#93bbfd}.markdown-content ul,.markdown-content ol{margin:.5rem 0;padding-left:1.25rem}.markdown-content ul{list-style-type:disc}.markdown-content ol{list-style-type:decimal}.markdown-content li{margin:.25rem 0}.markdown-content li>ul,.markdown-content li>ol{margin:0}.markdown-inline-code{color:#e5e7eb;overflow-wrap:anywhere;background:#ffffff1a;border-radius:.25rem;padding:.125rem .375rem;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:.8125rem}.markdown-content blockquote{color:#9ca3af;border-left:3px solid #4b5563;margin:.5rem 0;padding-left:.75rem}.markdown-content table{border-collapse:collapse;width:100%;margin:.5rem 0;font-size:.8125rem}.markdown-content th,.markdown-content td{text-align:left;border:1px solid #4b5563;padding:.375rem .625rem}.markdown-content th{color:#fff;background:#ffffff0d;font-weight:600}.markdown-content hr{border:none;border-top:1px solid #4b5563;margin:.75rem 0}.markdown-content del{color:#9ca3af;text-decoration:line-through}.markdown-content>:first-child{margin-top:0}.markdown-content>:last-child{margin-bottom:0}@keyframes rivet-sparkle-scroll{0%{transform:translateY(0)}to{transform:translateY(-6em)}}.rivet-sparkle-strip{animation:.9s steps(6,end) infinite rivet-sparkle-scroll}@media(prefers-reduced-motion:reduce){.rivet-sparkle-strip{animation:none}}@keyframes shimmer{0%{background-position:0 0}to{background-position:100% 0}}.shimmer-text{-webkit-text-fill-color:transparent;color:#0000;background:linear-gradient(90deg,#a3a3a3,#a3a3a3 35%,#525252,#a3a3a3 65%,#a3a3a3) 0 0/300% 100%;-webkit-background-clip:text;background-clip:text;animation:1.5s ease-in-out infinite shimmer}.glass-panel{-webkit-backdrop-filter:blur(20px);background:#ffffff04;border:1px solid #ffffff08}.active-push:active{transition:transform .1s;transform:scale(.98)}:root{--variant-split-ease:cubic-bezier(.4, 0, .2, 1);--variant-split-accent:var(--color-primary,#f30);--variant-split-zone-bg:#26262aeb;--variant-split-zone-border:#ffffff0a;--variant-split-zone-shadow:0 30px 60px -20px #0000008c, 0 0 90px 10px #ffdca00d}.variant-preview-region{isolation:isolate}.variant-preview-primary{transition:filter .2s var(--variant-split-ease)}.variant-preview-region.is-dragging .variant-preview-primary{filter:brightness(.92)saturate(.92)}.variant-preview-region.is-dragging iframe{pointer-events:none}.variant-preview-atmosphere{pointer-events:none;opacity:0;z-index:30;transition:opacity .2s var(--variant-split-ease);background:radial-gradient(60% 50%,#0000,#00000059);position:absolute;top:0;right:0;bottom:0;left:0}.variant-preview-region.is-dragging .variant-preview-atmosphere{opacity:1}.variant-drop-zones{pointer-events:none;z-index:50;position:absolute;top:16px;right:16px;bottom:16px;left:16px}.variant-drop-zone{background:var(--variant-split-zone-bg);border:1px solid var(--variant-split-zone-border);pointer-events:auto;opacity:0;filter:blur(12px);width:14%;min-width:130px;max-width:180px;box-shadow:var(--variant-split-zone-shadow);transition:opacity .32s var(--variant-split-ease),transform .32s var(--variant-split-ease),filter .32s var(--variant-split-ease),box-shadow .24s var(--variant-split-ease);border-radius:14px;justify-content:center;align-items:center;display:flex;position:absolute;top:0;bottom:0;transform:scale(.94)}.variant-drop-zone.is-left{left:8px}.variant-drop-zone.is-right{right:8px}.variant-drop-zones.is-visible .variant-drop-zone{opacity:1;filter:blur();transform:scale(1)}.variant-drop-zones.is-exiting .variant-drop-zone{opacity:0;filter:blur(8px);transition:opacity .2s var(--variant-split-ease),transform .2s var(--variant-split-ease),filter .2s var(--variant-split-ease);transform:scale(.97)}.variant-drop-zone.is-disabled{opacity:.6;filter:blur(2px)saturate(.6)}.variant-drop-zone-inner{opacity:0;filter:blur(4px);transition:opacity .22s var(--variant-split-ease),transform .22s var(--variant-split-ease),filter .22s var(--variant-split-ease);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex;position:absolute;top:0;right:0;bottom:0;left:0;transform:translateY(6px)}.variant-drop-zones.is-visible .variant-drop-zone-inner{opacity:1;filter:blur();transition-delay:.18s;transform:translateY(0)}.variant-drop-zone.is-hover .variant-drop-zone-caption{color:var(--variant-split-accent)}.variant-drop-zone-icon{border:1.5px solid #ffffff73;border-radius:6px;width:36px;height:28px;position:relative;overflow:hidden}.variant-drop-zone-icon:after{content:"";background:#ffffff73;width:1.5px;position:absolute;top:0;bottom:0}.variant-drop-zone-icon.is-left:after{left:11px}.variant-drop-zone-icon.is-right:after{right:11px}.variant-drop-zone-icon.is-left:before{content:"";background:#ffffff14;width:11px;position:absolute;top:0;bottom:0;left:0}.variant-drop-zone-icon.is-right:before{content:"";background:#ffffff14;width:11px;position:absolute;top:0;bottom:0;right:0}.variant-drop-zone.is-hover .variant-drop-zone-icon{border-color:var(--variant-split-accent)}.variant-drop-zone.is-hover .variant-drop-zone-icon:after,.variant-drop-zone.is-hover .variant-drop-zone-icon.is-left:before,.variant-drop-zone.is-hover .variant-drop-zone-icon.is-right:before{background:var(--variant-split-accent)}@supports (color:color-mix(in lab,red,red)){.variant-drop-zone.is-hover .variant-drop-zone-icon.is-left:before,.variant-drop-zone.is-hover .variant-drop-zone-icon.is-right:before{background:color-mix(in srgb,var(--variant-split-accent) 22%,transparent)}}.variant-drop-zone-caption{letter-spacing:.02em;color:#fff9;text-align:center;max-width:80%;font-size:11.5px;line-height:1.35}.variant-drop-zone-border{border:2px dashed var(--variant-split-accent);opacity:0;transition:opacity .24s var(--variant-split-ease);pointer-events:none;border-radius:10px;position:absolute;top:4px;right:4px;bottom:4px;left:4px}.variant-drop-zone.is-hover .variant-drop-zone-border{opacity:1}.variant-drop-zone-preview{display:none}.variant-drag-ghost{pointer-events:none;z-index:60;background:#1f1f21f5;border:1px solid #ffffff0f;border-radius:10px;padding:8px 12px;position:fixed;top:0;left:0;box-shadow:inset 0 0 0 1px #ffffff05,0 24px 60px -10px #0009,0 0 80px 10px #ffdc8c0f}.variant-drag-ghost-body{flex-direction:column;min-width:0;display:flex}.variant-drag-ghost-row{align-items:center;gap:8px;min-width:0;display:flex}.variant-drag-ghost-title{color:#ffffffeb;white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-size:13px;font-weight:500;overflow:hidden}.variant-drag-ghost-tag{white-space:nowrap;border-radius:4px;flex-shrink:0;padding:1px 6px;font-size:10px;font-weight:500}.variant-drag-ghost-desc{color:#ffffff80;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-top:2px;font-size:12px;line-height:1.35;display:-webkit-box;overflow:hidden}.variant-split-secondary{border-left:1px solid var(--main-border,#ffffff0f);background:var(--bg-main,#0d0d0e);min-width:0;animation:variantSplitSecondaryEnter .42s var(--variant-split-ease) both;flex-direction:column;flex:1 1 0;display:flex;position:relative}.variant-preview-region.is-split>.variant-preview-row>.variant-preview-primary{border-right:1px solid var(--main-border,#ffffff0f)}@keyframes variantSplitSecondaryEnter{0%{opacity:0}to{opacity:1}}.variant-split-secondary-toolbar{color:#ffffffb3;background:#ffffff05;border-bottom:1px solid #ffffff0a;flex:0 0 32px;justify-content:space-between;align-items:center;height:32px;padding:0 10px;font-size:11.5px;display:flex}.variant-split-secondary-label{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.variant-split-secondary-close{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:#ffffff8c;cursor:pointer;transition:color .14s var(--variant-split-ease),background-color .14s var(--variant-split-ease);background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:4px;display:inline-flex}.variant-split-secondary-close:hover{color:#ffffffeb;background:#ffffff0f}.variant-split-secondary-iframe{background:#fff;border:0;flex:1;width:100%;height:100%}@media(prefers-reduced-motion:reduce){.variant-drop-zone,.variant-drop-zone-inner,.variant-drop-zone-preview,.variant-drop-zone-border,.variant-preview-primary,.variant-preview-atmosphere,.variant-split-secondary,.variant-split-secondary-close{filter:none!important;transition-duration:80ms!important;animation-duration:80ms!important;transform:none!important}.variant-drop-zones.is-visible .variant-drop-zone-inner{transition-delay:0s}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-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-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes token-highlight{0%{transform:scale(1.05);box-shadow:0 0 0 2px #facc15,0 0 0 6px #facc1580}50%{transform:scale(1.02);box-shadow:0 0 0 2px #facc15,0 0 0 8px #facc1599}to{transform:scale(1);box-shadow:0 0 #facc1500,0 0 #facc1500}}
|
package/src/ui/dist/index.html
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Rivet - The visual editor for design</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/main-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/main-
|
|
8
|
+
<script type="module" crossorigin src="/assets/main-Cw6Pd8ye.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/main-DkCj7b2K.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import type { InspirationDesignSignals } from './inspirationDesignContext';
|
|
2
|
-
/**
|
|
3
|
-
* Runtime user cache for inspiration-link design context. Persists generated
|
|
4
|
-
* designmd markdown plus safe metadata so future MCP
|
|
5
|
-
* `create_zero_to_one_project` requests with the same web link can reuse
|
|
6
|
-
* prior extraction by default. Treated as runtime user data — never mutates
|
|
7
|
-
* the bundled `src/services/templates/designmd` catalog.
|
|
8
|
-
*
|
|
9
|
-
* Path layout (local filesystem implementation):
|
|
10
|
-
* <directory>/<sha256(normalizedUrl)>.json
|
|
11
|
-
*
|
|
12
|
-
* The default <directory> is `~/.rivet/design-context-cache/`. The store
|
|
13
|
-
* abstraction is interface-first so future hosted/server deployments can
|
|
14
|
-
* provide a durable backend (HTTPS, KV, SQL) without changing the
|
|
15
|
-
* extraction or MCP orchestration logic.
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* Output/extractor schema version. Bump when the cache entry shape or the
|
|
19
|
-
* generated markdown structure changes incompatibly. Cached entries with a
|
|
20
|
-
* different schema version are not silently reused — they regenerate.
|
|
21
|
-
*/
|
|
22
|
-
export declare const DESIGN_CONTEXT_SCHEMA_VERSION = "2";
|
|
23
|
-
/**
|
|
24
|
-
* Default freshness window for a cached entry. Entries older than this are
|
|
25
|
-
* marked `stale` and trigger regeneration by default. Tunable per call so
|
|
26
|
-
* tests can exercise the stale branch without sleeping.
|
|
27
|
-
*/
|
|
28
|
-
export declare const DEFAULT_FRESHNESS_MS: number;
|
|
29
|
-
/**
|
|
30
|
-
* Default confidence threshold below which cached entries are considered
|
|
31
|
-
* low-confidence and trigger regeneration. Mirrors the in-extractor
|
|
32
|
-
* `LOW_SIGNAL_THRESHOLD` so cached and live signals stay aligned.
|
|
33
|
-
*/
|
|
34
|
-
export declare const DEFAULT_CONFIDENCE_THRESHOLD = 18;
|
|
35
|
-
export type FreshnessState = 'fresh' | 'stale';
|
|
36
|
-
export interface DesignContextCacheMetadata {
|
|
37
|
-
/** Stable cache key (sha256 hex of normalized URL). */
|
|
38
|
-
cacheKey: string;
|
|
39
|
-
/** Extractor/output schema version used to produce this entry. */
|
|
40
|
-
schemaVersion: string;
|
|
41
|
-
/** Wall-clock creation time (ms since epoch). */
|
|
42
|
-
createdAtMs: number;
|
|
43
|
-
/** Wall-clock last-used time (ms since epoch). */
|
|
44
|
-
lastUsedAtMs: number;
|
|
45
|
-
/** Signal density / confidence score (0-100). */
|
|
46
|
-
confidence: number;
|
|
47
|
-
/**
|
|
48
|
-
* Safe outcome metadata only — short non-sensitive warning codes such as
|
|
49
|
-
* `low_signal` or `partial_meta`. MUST NOT include fetched page content,
|
|
50
|
-
* full URLs, or extracted text snippets.
|
|
51
|
-
*/
|
|
52
|
-
warningCodes: string[];
|
|
53
|
-
}
|
|
54
|
-
export interface DesignContextCacheEntry {
|
|
55
|
-
metadata: DesignContextCacheMetadata;
|
|
56
|
-
/** Generated single-source designmd markdown (separate-flavor). */
|
|
57
|
-
markdown: string;
|
|
58
|
-
/** Short user-visible label (already truncated to fit downstream cap). */
|
|
59
|
-
label: string;
|
|
60
|
-
/**
|
|
61
|
-
* Structured design signals for the source URL. Storing the same derived
|
|
62
|
-
* design observations the markdown already encodes (palette, families,
|
|
63
|
-
* sections, components) so merge-strategy callers can re-summarise across
|
|
64
|
-
* multiple cached entries without re-fetching. Raw HTML, screenshots,
|
|
65
|
-
* DOM dumps, and full source text MUST NOT be persisted here.
|
|
66
|
-
*/
|
|
67
|
-
signals: InspirationDesignSignals;
|
|
68
|
-
}
|
|
69
|
-
export interface DesignContextStore {
|
|
70
|
-
get(cacheKey: string): Promise<DesignContextCacheEntry | undefined>;
|
|
71
|
-
put(entry: DesignContextCacheEntry): Promise<void>;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Normalize an HTTP/HTTPS URL for cache keying. Lowercases scheme and host,
|
|
75
|
-
* strips default ports and fragments, and preserves meaningful path/query
|
|
76
|
-
* so two pages with the same host but different paths or query strings
|
|
77
|
-
* keep separate cache entries. Returns `undefined` for inputs that are not
|
|
78
|
-
* parseable HTTP/HTTPS URLs.
|
|
79
|
-
*/
|
|
80
|
-
export declare const normalizeCacheUrl: (rawUrl: string) => string | undefined;
|
|
81
|
-
/**
|
|
82
|
-
* Compute a stable cache key from a normalized URL. SHA-256 hashed to hex
|
|
83
|
-
* so the resulting key is filesystem-safe and does not embed proprietary
|
|
84
|
-
* URL content in the filename layer.
|
|
85
|
-
*/
|
|
86
|
-
export declare const cacheKeyForUrl: (rawUrl: string) => string | undefined;
|
|
87
|
-
/**
|
|
88
|
-
* Coarse age bucket for safe telemetry. Maps a wall-clock age in
|
|
89
|
-
* milliseconds onto a small fixed bucket name so analytics never receive
|
|
90
|
-
* exact timestamps.
|
|
91
|
-
*/
|
|
92
|
-
export declare const ageBucketFor: (ageMs: number) => "lt_1h" | "1h_24h" | "1d_7d" | "7d_30d" | "gt_30d";
|
|
93
|
-
/**
|
|
94
|
-
* Coarse confidence bucket for safe telemetry. Three buckets keyed off the
|
|
95
|
-
* extractor signal density score so reuse outcomes can be aggregated
|
|
96
|
-
* without leaking specific confidence values.
|
|
97
|
-
*/
|
|
98
|
-
export declare const confidenceBucketFor: (confidence: number) => "low" | "medium" | "high";
|
|
99
|
-
/**
|
|
100
|
-
* Return true when the user prompt explicitly asks for fresh/latest/
|
|
101
|
-
* current design context. Used by the MCP flow to bypass cache reuse even
|
|
102
|
-
* when a compatible entry exists.
|
|
103
|
-
*/
|
|
104
|
-
export declare const promptRequestsFreshExtraction: (prompt: string) => boolean;
|
|
105
|
-
export type CacheReuseDecision = {
|
|
106
|
-
reuse: true;
|
|
107
|
-
freshness: FreshnessState;
|
|
108
|
-
ageMs: number;
|
|
109
|
-
} | {
|
|
110
|
-
reuse: false;
|
|
111
|
-
reason: 'version_mismatch' | 'stale' | 'low_confidence' | 'forced_refresh' | 'corrupt';
|
|
112
|
-
freshness: FreshnessState;
|
|
113
|
-
ageMs: number;
|
|
114
|
-
};
|
|
115
|
-
interface CanReuseOptions {
|
|
116
|
-
forceRefresh: boolean;
|
|
117
|
-
schemaVersion?: string;
|
|
118
|
-
confidenceThreshold?: number;
|
|
119
|
-
freshnessMs?: number;
|
|
120
|
-
now?: number;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Decide whether a cached entry is reusable for a request, factoring in
|
|
124
|
-
* extractor/schema version, freshness window, confidence threshold, and
|
|
125
|
-
* any explicit user request for fresh extraction. Callers MUST honour the
|
|
126
|
-
* decision — the store itself never silently reuses incompatible entries.
|
|
127
|
-
*/
|
|
128
|
-
export declare const canReuseCacheEntry: (entry: DesignContextCacheEntry, options: CanReuseOptions) => CacheReuseDecision;
|
|
129
|
-
interface FileDesignContextStoreOptions {
|
|
130
|
-
/**
|
|
131
|
-
* Override the cache directory. Defaults to `~/.rivet/design-context-cache`
|
|
132
|
-
* via `os.homedir()`. Tests use a tmpdir override so the suite never
|
|
133
|
-
* touches the real user cache.
|
|
134
|
-
*/
|
|
135
|
-
directory?: string;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Filesystem-backed `DesignContextStore`. One JSON file per cache key under
|
|
139
|
-
* a per-user cache directory. Safe to delete the entire directory without
|
|
140
|
-
* affecting bundled catalog data or compiled application code.
|
|
141
|
-
*
|
|
142
|
-
* Read/write failures degrade gracefully — get returns undefined on any
|
|
143
|
-
* parse/IO error so the MCP flow falls through to a fresh extraction
|
|
144
|
-
* instead of crashing the user request.
|
|
145
|
-
*/
|
|
146
|
-
export declare class FileDesignContextStore implements DesignContextStore {
|
|
147
|
-
private readonly directory;
|
|
148
|
-
private dirReady;
|
|
149
|
-
constructor(options?: FileDesignContextStoreOptions);
|
|
150
|
-
/**
|
|
151
|
-
* Resolve a cache key to its on-disk file path. Rejects keys that do not
|
|
152
|
-
* match the expected sha256 hex shape so a malformed key cannot escape
|
|
153
|
-
* the cache directory.
|
|
154
|
-
*/
|
|
155
|
-
resolvePath(cacheKey: string): string | undefined;
|
|
156
|
-
get(cacheKey: string): Promise<DesignContextCacheEntry | undefined>;
|
|
157
|
-
put(entry: DesignContextCacheEntry): Promise<void>;
|
|
158
|
-
}
|
|
159
|
-
export {};
|
|
160
|
-
//# sourceMappingURL=designContextStore.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"designContextStore.d.ts","sourceRoot":"","sources":["../../../src/mcp/agent-variants/designContextStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.FileDesignContextStore = exports.canReuseCacheEntry = exports.promptRequestsFreshExtraction = exports.confidenceBucketFor = exports.ageBucketFor = exports.cacheKeyForUrl = exports.normalizeCacheUrl = exports.DEFAULT_CONFIDENCE_THRESHOLD = exports.DEFAULT_FRESHNESS_MS = exports.DESIGN_CONTEXT_SCHEMA_VERSION = void 0;
|
|
7
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
-
const fs_1 = __importDefault(require("fs"));
|
|
9
|
-
const os_1 = __importDefault(require("os"));
|
|
10
|
-
const path_1 = __importDefault(require("path"));
|
|
11
|
-
const logger_1 = require("../../utils/logger");
|
|
12
|
-
const log = (0, logger_1.createLogger)('DesignContextStore');
|
|
13
|
-
/**
|
|
14
|
-
* Runtime user cache for inspiration-link design context. Persists generated
|
|
15
|
-
* designmd markdown plus safe metadata so future MCP
|
|
16
|
-
* `create_zero_to_one_project` requests with the same web link can reuse
|
|
17
|
-
* prior extraction by default. Treated as runtime user data — never mutates
|
|
18
|
-
* the bundled `src/services/templates/designmd` catalog.
|
|
19
|
-
*
|
|
20
|
-
* Path layout (local filesystem implementation):
|
|
21
|
-
* <directory>/<sha256(normalizedUrl)>.json
|
|
22
|
-
*
|
|
23
|
-
* The default <directory> is `~/.rivet/design-context-cache/`. The store
|
|
24
|
-
* abstraction is interface-first so future hosted/server deployments can
|
|
25
|
-
* provide a durable backend (HTTPS, KV, SQL) without changing the
|
|
26
|
-
* extraction or MCP orchestration logic.
|
|
27
|
-
*/
|
|
28
|
-
/**
|
|
29
|
-
* Output/extractor schema version. Bump when the cache entry shape or the
|
|
30
|
-
* generated markdown structure changes incompatibly. Cached entries with a
|
|
31
|
-
* different schema version are not silently reused — they regenerate.
|
|
32
|
-
*/
|
|
33
|
-
exports.DESIGN_CONTEXT_SCHEMA_VERSION = '2';
|
|
34
|
-
/**
|
|
35
|
-
* Default freshness window for a cached entry. Entries older than this are
|
|
36
|
-
* marked `stale` and trigger regeneration by default. Tunable per call so
|
|
37
|
-
* tests can exercise the stale branch without sleeping.
|
|
38
|
-
*/
|
|
39
|
-
exports.DEFAULT_FRESHNESS_MS = 14 * 24 * 60 * 60 * 1000;
|
|
40
|
-
/**
|
|
41
|
-
* Default confidence threshold below which cached entries are considered
|
|
42
|
-
* low-confidence and trigger regeneration. Mirrors the in-extractor
|
|
43
|
-
* `LOW_SIGNAL_THRESHOLD` so cached and live signals stay aligned.
|
|
44
|
-
*/
|
|
45
|
-
exports.DEFAULT_CONFIDENCE_THRESHOLD = 18;
|
|
46
|
-
/**
|
|
47
|
-
* Match prompts that explicitly request fresh/latest/current/regenerated
|
|
48
|
-
* design context for an inspiration link. Matches are evaluated against the
|
|
49
|
-
* raw user prompt — callers MUST keep the prompt out of telemetry payloads.
|
|
50
|
-
*
|
|
51
|
-
* The bare adjectives `fresh`/`latest`/`current` are intentionally NOT
|
|
52
|
-
* matched on their own because they collide with common project-description
|
|
53
|
-
* phrasing (e.g. "build a fresh landing page", "use the latest design
|
|
54
|
-
* patterns", "based on the current site") that does not actually request a
|
|
55
|
-
* cache bypass. They only match when paired with a cache- or
|
|
56
|
-
* extraction-bearing noun. Verbs like `re-extract`, `refresh`, and
|
|
57
|
-
* `bypass cache` are unambiguous on their own.
|
|
58
|
-
*/
|
|
59
|
-
const CACHE_BYPASS_NOUNS = 'extract(?:ion)?|fetch|context|data|copy|signals?|markdown|version|run|pull|scrape|grab|snapshot|content|html|cache|design\\s+context';
|
|
60
|
-
const FRESH_INTENT_PATTERNS = [
|
|
61
|
-
new RegExp(`\\bfresh(?:est)?\\s+(?:${CACHE_BYPASS_NOUNS})\\b`, 'i'),
|
|
62
|
-
new RegExp(`\\blatest\\s+(?:${CACHE_BYPASS_NOUNS})\\b`, 'i'),
|
|
63
|
-
new RegExp(`\\bcurrent\\s+(?:${CACHE_BYPASS_NOUNS})\\b`, 'i'),
|
|
64
|
-
/\bup[-\s]?to[-\s]?date\s+(?:extract(?:ion)?|fetch|context|data|copy|signals?|markdown|version|cache|design\s+context)\b/i,
|
|
65
|
-
/\bre[-\s]?extract\b/i,
|
|
66
|
-
/\bre[-\s]?fetch\b/i,
|
|
67
|
-
/\bre[-\s]?generate\b/i,
|
|
68
|
-
/\brefresh\b/i,
|
|
69
|
-
/\bbypass\s+cache\b/i,
|
|
70
|
-
/\bno[-\s]?cache\b/i,
|
|
71
|
-
];
|
|
72
|
-
/**
|
|
73
|
-
* Normalize an HTTP/HTTPS URL for cache keying. Lowercases scheme and host,
|
|
74
|
-
* strips default ports and fragments, and preserves meaningful path/query
|
|
75
|
-
* so two pages with the same host but different paths or query strings
|
|
76
|
-
* keep separate cache entries. Returns `undefined` for inputs that are not
|
|
77
|
-
* parseable HTTP/HTTPS URLs.
|
|
78
|
-
*/
|
|
79
|
-
const normalizeCacheUrl = (rawUrl) => {
|
|
80
|
-
const trimmed = rawUrl.trim();
|
|
81
|
-
if (!trimmed)
|
|
82
|
-
return undefined;
|
|
83
|
-
let parsed;
|
|
84
|
-
try {
|
|
85
|
-
parsed = new URL(trimmed);
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
return undefined;
|
|
89
|
-
}
|
|
90
|
-
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
91
|
-
return undefined;
|
|
92
|
-
}
|
|
93
|
-
parsed.hostname = parsed.hostname.toLowerCase();
|
|
94
|
-
if ((parsed.protocol === 'http:' && parsed.port === '80') ||
|
|
95
|
-
(parsed.protocol === 'https:' && parsed.port === '443')) {
|
|
96
|
-
parsed.port = '';
|
|
97
|
-
}
|
|
98
|
-
parsed.hash = '';
|
|
99
|
-
return parsed.toString();
|
|
100
|
-
};
|
|
101
|
-
exports.normalizeCacheUrl = normalizeCacheUrl;
|
|
102
|
-
/**
|
|
103
|
-
* Compute a stable cache key from a normalized URL. SHA-256 hashed to hex
|
|
104
|
-
* so the resulting key is filesystem-safe and does not embed proprietary
|
|
105
|
-
* URL content in the filename layer.
|
|
106
|
-
*/
|
|
107
|
-
const cacheKeyForUrl = (rawUrl) => {
|
|
108
|
-
const normalized = (0, exports.normalizeCacheUrl)(rawUrl);
|
|
109
|
-
if (!normalized)
|
|
110
|
-
return undefined;
|
|
111
|
-
return crypto_1.default.createHash('sha256').update(normalized).digest('hex');
|
|
112
|
-
};
|
|
113
|
-
exports.cacheKeyForUrl = cacheKeyForUrl;
|
|
114
|
-
/**
|
|
115
|
-
* Coarse age bucket for safe telemetry. Maps a wall-clock age in
|
|
116
|
-
* milliseconds onto a small fixed bucket name so analytics never receive
|
|
117
|
-
* exact timestamps.
|
|
118
|
-
*/
|
|
119
|
-
const ageBucketFor = (ageMs) => {
|
|
120
|
-
if (ageMs < 60 * 60 * 1000)
|
|
121
|
-
return 'lt_1h';
|
|
122
|
-
if (ageMs < 24 * 60 * 60 * 1000)
|
|
123
|
-
return '1h_24h';
|
|
124
|
-
if (ageMs < 7 * 24 * 60 * 60 * 1000)
|
|
125
|
-
return '1d_7d';
|
|
126
|
-
if (ageMs < 30 * 24 * 60 * 60 * 1000)
|
|
127
|
-
return '7d_30d';
|
|
128
|
-
return 'gt_30d';
|
|
129
|
-
};
|
|
130
|
-
exports.ageBucketFor = ageBucketFor;
|
|
131
|
-
/**
|
|
132
|
-
* Coarse confidence bucket for safe telemetry. Three buckets keyed off the
|
|
133
|
-
* extractor signal density score so reuse outcomes can be aggregated
|
|
134
|
-
* without leaking specific confidence values.
|
|
135
|
-
*/
|
|
136
|
-
const confidenceBucketFor = (confidence) => {
|
|
137
|
-
if (confidence < exports.DEFAULT_CONFIDENCE_THRESHOLD)
|
|
138
|
-
return 'low';
|
|
139
|
-
if (confidence < 60)
|
|
140
|
-
return 'medium';
|
|
141
|
-
return 'high';
|
|
142
|
-
};
|
|
143
|
-
exports.confidenceBucketFor = confidenceBucketFor;
|
|
144
|
-
/**
|
|
145
|
-
* Return true when the user prompt explicitly asks for fresh/latest/
|
|
146
|
-
* current design context. Used by the MCP flow to bypass cache reuse even
|
|
147
|
-
* when a compatible entry exists.
|
|
148
|
-
*/
|
|
149
|
-
const promptRequestsFreshExtraction = (prompt) => FRESH_INTENT_PATTERNS.some((pattern) => pattern.test(prompt));
|
|
150
|
-
exports.promptRequestsFreshExtraction = promptRequestsFreshExtraction;
|
|
151
|
-
/**
|
|
152
|
-
* Decide whether a cached entry is reusable for a request, factoring in
|
|
153
|
-
* extractor/schema version, freshness window, confidence threshold, and
|
|
154
|
-
* any explicit user request for fresh extraction. Callers MUST honour the
|
|
155
|
-
* decision — the store itself never silently reuses incompatible entries.
|
|
156
|
-
*/
|
|
157
|
-
const canReuseCacheEntry = (entry, options) => {
|
|
158
|
-
const now = options.now ?? Date.now();
|
|
159
|
-
const freshnessMs = options.freshnessMs ?? exports.DEFAULT_FRESHNESS_MS;
|
|
160
|
-
const schemaVersion = options.schemaVersion ?? exports.DESIGN_CONTEXT_SCHEMA_VERSION;
|
|
161
|
-
const confidenceThreshold = options.confidenceThreshold ?? exports.DEFAULT_CONFIDENCE_THRESHOLD;
|
|
162
|
-
const ageMs = Math.max(0, now - entry.metadata.createdAtMs);
|
|
163
|
-
const freshness = ageMs <= freshnessMs ? 'fresh' : 'stale';
|
|
164
|
-
if (options.forceRefresh) {
|
|
165
|
-
return { reuse: false, reason: 'forced_refresh', freshness, ageMs };
|
|
166
|
-
}
|
|
167
|
-
if (entry.metadata.schemaVersion !== schemaVersion) {
|
|
168
|
-
return { reuse: false, reason: 'version_mismatch', freshness, ageMs };
|
|
169
|
-
}
|
|
170
|
-
if (freshness === 'stale') {
|
|
171
|
-
return { reuse: false, reason: 'stale', freshness, ageMs };
|
|
172
|
-
}
|
|
173
|
-
if (entry.metadata.confidence < confidenceThreshold) {
|
|
174
|
-
return { reuse: false, reason: 'low_confidence', freshness, ageMs };
|
|
175
|
-
}
|
|
176
|
-
return { reuse: true, freshness, ageMs };
|
|
177
|
-
};
|
|
178
|
-
exports.canReuseCacheEntry = canReuseCacheEntry;
|
|
179
|
-
const ALLOWED_KEY_PATTERN = /^[a-f0-9]{64}$/;
|
|
180
|
-
/**
|
|
181
|
-
* Filesystem-backed `DesignContextStore`. One JSON file per cache key under
|
|
182
|
-
* a per-user cache directory. Safe to delete the entire directory without
|
|
183
|
-
* affecting bundled catalog data or compiled application code.
|
|
184
|
-
*
|
|
185
|
-
* Read/write failures degrade gracefully — get returns undefined on any
|
|
186
|
-
* parse/IO error so the MCP flow falls through to a fresh extraction
|
|
187
|
-
* instead of crashing the user request.
|
|
188
|
-
*/
|
|
189
|
-
class FileDesignContextStore {
|
|
190
|
-
directory;
|
|
191
|
-
dirReady = false;
|
|
192
|
-
constructor(options = {}) {
|
|
193
|
-
this.directory =
|
|
194
|
-
options.directory ?? path_1.default.join(os_1.default.homedir(), '.rivet', 'design-context-cache');
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Resolve a cache key to its on-disk file path. Rejects keys that do not
|
|
198
|
-
* match the expected sha256 hex shape so a malformed key cannot escape
|
|
199
|
-
* the cache directory.
|
|
200
|
-
*/
|
|
201
|
-
resolvePath(cacheKey) {
|
|
202
|
-
if (!ALLOWED_KEY_PATTERN.test(cacheKey))
|
|
203
|
-
return undefined;
|
|
204
|
-
return path_1.default.join(this.directory, `${cacheKey}.json`);
|
|
205
|
-
}
|
|
206
|
-
async get(cacheKey) {
|
|
207
|
-
const target = this.resolvePath(cacheKey);
|
|
208
|
-
if (!target)
|
|
209
|
-
return undefined;
|
|
210
|
-
try {
|
|
211
|
-
const raw = await fs_1.default.promises.readFile(target, 'utf8');
|
|
212
|
-
const parsed = JSON.parse(raw);
|
|
213
|
-
if (!isCacheEntry(parsed)) {
|
|
214
|
-
log.debug(`Discarding malformed cache entry at ${cacheKey}.`);
|
|
215
|
-
return undefined;
|
|
216
|
-
}
|
|
217
|
-
return parsed;
|
|
218
|
-
}
|
|
219
|
-
catch (error) {
|
|
220
|
-
if (error &&
|
|
221
|
-
typeof error === 'object' &&
|
|
222
|
-
'code' in error &&
|
|
223
|
-
error.code === 'ENOENT') {
|
|
224
|
-
return undefined;
|
|
225
|
-
}
|
|
226
|
-
log.debug(`Failed to read cache entry ${cacheKey}: ${String(error)}`);
|
|
227
|
-
return undefined;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
async put(entry) {
|
|
231
|
-
const target = this.resolvePath(entry.metadata.cacheKey);
|
|
232
|
-
if (!target) {
|
|
233
|
-
log.warn('Refusing to write cache entry with invalid cache key shape.');
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
const tmp = `${target}.${crypto_1.default.randomBytes(4).toString('hex')}.tmp`;
|
|
237
|
-
try {
|
|
238
|
-
if (!this.dirReady) {
|
|
239
|
-
await fs_1.default.promises.mkdir(this.directory, {
|
|
240
|
-
recursive: true,
|
|
241
|
-
mode: 0o700,
|
|
242
|
-
});
|
|
243
|
-
this.dirReady = true;
|
|
244
|
-
}
|
|
245
|
-
await fs_1.default.promises.writeFile(tmp, JSON.stringify(entry), {
|
|
246
|
-
encoding: 'utf8',
|
|
247
|
-
mode: 0o600,
|
|
248
|
-
});
|
|
249
|
-
await fs_1.default.promises.rename(tmp, target);
|
|
250
|
-
}
|
|
251
|
-
catch (error) {
|
|
252
|
-
log.debug(`Failed to write cache entry: ${String(error)}`);
|
|
253
|
-
try {
|
|
254
|
-
await fs_1.default.promises.unlink(tmp);
|
|
255
|
-
}
|
|
256
|
-
catch {
|
|
257
|
-
// best-effort cleanup
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
exports.FileDesignContextStore = FileDesignContextStore;
|
|
263
|
-
/**
|
|
264
|
-
* Runtime guard so corrupted or third-party-tampered cache files cannot
|
|
265
|
-
* inject arbitrary fields into the MCP flow.
|
|
266
|
-
*/
|
|
267
|
-
const isCacheEntry = (value) => {
|
|
268
|
-
if (!value || typeof value !== 'object')
|
|
269
|
-
return false;
|
|
270
|
-
const record = value;
|
|
271
|
-
const metadata = record.metadata;
|
|
272
|
-
if (!metadata || typeof metadata !== 'object')
|
|
273
|
-
return false;
|
|
274
|
-
if (typeof metadata.cacheKey !== 'string')
|
|
275
|
-
return false;
|
|
276
|
-
if (typeof metadata.schemaVersion !== 'string')
|
|
277
|
-
return false;
|
|
278
|
-
if (typeof metadata.createdAtMs !== 'number')
|
|
279
|
-
return false;
|
|
280
|
-
if (typeof metadata.lastUsedAtMs !== 'number')
|
|
281
|
-
return false;
|
|
282
|
-
if (typeof metadata.confidence !== 'number')
|
|
283
|
-
return false;
|
|
284
|
-
if (!Array.isArray(metadata.warningCodes))
|
|
285
|
-
return false;
|
|
286
|
-
if (typeof record.markdown !== 'string')
|
|
287
|
-
return false;
|
|
288
|
-
if (typeof record.label !== 'string')
|
|
289
|
-
return false;
|
|
290
|
-
const signals = record.signals;
|
|
291
|
-
if (!signals || typeof signals !== 'object')
|
|
292
|
-
return false;
|
|
293
|
-
return true;
|
|
294
|
-
};
|
|
295
|
-
//# sourceMappingURL=designContextStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"designContextStore.js","sourceRoot":"","sources":["../../../src/mcp/agent-variants/designContextStore.ts"],"names":[],"mappings":"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"}
|