diff --git a/CHANGELOG.md b/CHANGELOG.md index 5150b5954d..d88227af90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Changelog +## [v5.4.1] - 2026-02-13 + +### Added + +- Sticky user messages for better chat navigation +- Pro model info display in settings +- Custom icons utility for improved UI components + +### Changed + +- Updated profile page with usage data +- Streamlined model names and auto model selection +- Improved codebase indexing tool UI +- Enhanced task history list +- Updated notifications integration +- UI updates for code reviews + +### Fixed + +- Fixed file path bug in code reviews + +--- + ## [v5.4.0] - 2026-02-12 ### Added diff --git a/apps/storybook/.gitignore b/apps/storybook/.gitignore deleted file mode 100644 index d7375bc055..0000000000 --- a/apps/storybook/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Storybook build output -public -storybook-static/ -build-storybook.log - -# Turbo cache -.turbo/ - -# Generated stories from playwright -stories/generated/* \ No newline at end of file diff --git a/apps/storybook/.storybook/ChromaticDecorator.tsx b/apps/storybook/.storybook/ChromaticDecorator.tsx deleted file mode 100644 index 7770e49316..0000000000 --- a/apps/storybook/.storybook/ChromaticDecorator.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { ReactNode } from "react" -import type { Decorator } from "@storybook/react-vite" -import { cn } from "@/lib/utils" -import isChromatic from "chromatic/isChromatic" - -type LayoutMode = "row" | "column" - -// Decorator that renders both the light and dark theme of children for Chromatic screenshot testing -export const withChromaticDecorator: Decorator = (Story, context) => { - const theme = context.globals.theme || "dark" - const layout = context.parameters?.chromaticLayout || "row" - const disableChromaticDualThemeSnapshot = context.parameters?.disableChromaticDualThemeSnapshot || false - return ( - - - - ) -} - -const baseStyles = cn("flex flex-col items-stretch justify-stretch") -const chromaticStyles = cn("absolute size-full top-0 left-0 right-0 bottom-0") - -/** - * When rendering screenshots in Chromatic, we capture both the light/dark mode themed Stories at the same time. - * Story components are rendered on the page twice- each wrapped in their own StorybookThemeProvider. - */ -function ChromaticDecorator({ - children, - theme, - layout = "row", - disableChromaticDualThemeSnapshot = false, -}: { - children: ReactNode - theme: string - layout?: LayoutMode - disableChromaticDualThemeSnapshot?: boolean -}) { - const styles = cn(baseStyles, isChromatic() && chromaticStyles) - const themeContainerStyles = cn("flex w-full", layout === "column" ? "flex-col" : "flex-row") - - // If disableChromaticDualThemeSnapshot is set, render only the current theme - const shouldRenderBothThemes = (isChromatic() && !disableChromaticDualThemeSnapshot) || theme === "both" - - return ( -
- {shouldRenderBothThemes ? ( -
- {children} - {children} -
- ) : ( - {children} - )} -
- ) -} - -function ThemeModeContainer({ children, theme }: { children: ReactNode; theme: string }) { - return ( -
-
-
- {theme} -
- - {children} -
-
- ) -} diff --git a/apps/storybook/.storybook/main.ts b/apps/storybook/.storybook/main.ts deleted file mode 100644 index 72c3a8416e..0000000000 --- a/apps/storybook/.storybook/main.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { createRequire } from "node:module" -import type { StorybookConfig } from "@storybook/react-vite" -import { resolve, dirname, join } from "path" -import { readFileSync } from "fs" -import { fileURLToPath } from "url" - -const require = createRequire(import.meta.url) - -// Read and parse the webview-ui tsconfig.json to get path mappings -const currentDirname = dirname(fileURLToPath(import.meta.url)) -const webviewTsConfigPath = resolve(currentDirname, "../../../webview-ui/tsconfig.json") -const webviewTsConfig = JSON.parse(readFileSync(webviewTsConfigPath, "utf-8")) -const webviewPaths = webviewTsConfig.compilerOptions?.paths || {} - -// Convert webview-ui tsconfig paths to Vite aliases -const createAliasesFromTsConfig = () => { - const aliases: Record = {} - - for (const [alias, paths] of Object.entries(webviewPaths)) { - if (Array.isArray(paths) && paths.length > 0) { - // Remove the /* suffix from alias and path - const cleanAlias = alias.replace(/\/\*$/, "") - const cleanPath = paths[0].replace(/\/\*$/, "") - // Resolve path relative to webview-ui directory - aliases[cleanAlias] = resolve(currentDirname, "../../../webview-ui", cleanPath) - } - } - - return aliases -} - -function getAbsolutePath(value: string): any { - return dirname(require.resolve(join(value, "package.json"))) -} - -const config: StorybookConfig = { - stories: ["../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)"], - addons: [getAbsolutePath("@storybook/addon-links"), getAbsolutePath("@storybook/addon-docs")], - framework: { - name: getAbsolutePath("@storybook/react-vite"), - options: {}, - }, - viteFinal: async (config) => { - // Automatically generate aliases from webview-ui tsconfig.json - const tsConfigAliases = createAliasesFromTsConfig() - - // Add specific mock overrides for Storybook - config.resolve = config.resolve || {} - config.resolve.alias = { - ...config.resolve.alias, - // Add automatically generated aliases from tsconfig - ...tsConfigAliases, - // Mock overrides for Storybook (these override the tsconfig paths) - jsdom: resolve(currentDirname, "../src/mocks/jsdom"), - vscode: resolve(currentDirname, "../src/mocks/vscode"), - "@src/utils/clipboard": resolve(currentDirname, "../src/mocks/utils"), - "@src/utils/highlighter": resolve(currentDirname, "../src/mocks/utils"), - "@src/i18n/TranslationContext": resolve(currentDirname, "../src/mocks/utils"), - "@roo/ProfileValidator": resolve(currentDirname, "../src/mocks/ProfileValidator"), - } - - config.define = { - ...config.define, - "process.env": {}, // Inject a dummy `process.env` - } - - // Add Tailwind CSS plugin to process the webview-ui's CSS - const { default: tailwindcss } = await import("@tailwindcss/vite") - config.plugins = config.plugins || [] - config.plugins.push(tailwindcss()) - - return config - }, - typescript: { - reactDocgen: "react-docgen-typescript", - reactDocgenTypescriptOptions: { - shouldExtractLiteralValuesFromEnum: true, - propFilter: (prop) => (prop.parent ? !/node_modules/.test(prop.parent.fileName) : true), - }, - }, -} - -export default config diff --git a/apps/storybook/.storybook/preview.ts b/apps/storybook/.storybook/preview.ts deleted file mode 100644 index c9dad7af64..0000000000 --- a/apps/storybook/.storybook/preview.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { Preview } from "@storybook/react-vite" - -import { withExtensionState } from "../src/decorators/withExtensionState" -import { withQueryClient } from "../src/decorators/withQueryClient" -import { withTheme } from "../src/decorators/withTheme" -import { withI18n } from "../src/decorators/withI18n" -import { withTooltipProvider } from "../src/decorators/withTooltipProvider" -import { withFixedContainment } from "../src/decorators/withFixedContainment" -import { withChromaticDecorator } from "./ChromaticDecorator" - -import "./storybook.css" - -const preview: Preview = { - parameters: { - layout: "fullscreen", - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/i, - }, - }, - backgrounds: { - default: "dark", - values: [ - { - name: "dark", - value: "var(--vscode-editor-background, #1e1e1e)", - }, - { - name: "light", - value: "var(--vscode-editor-background, #ffffff)", - }, - ], - }, - }, - globalTypes: { - theme: { - description: "Global Theme", - defaultValue: "dark", - toolbar: { - title: "Theme", - icon: "paintbrush", - items: ["light", "dark", "both"], - dynamicTitle: true, - }, - }, - }, - decorators: [ - withI18n, - withQueryClient, - withExtensionState, - withTheme, - withTooltipProvider, - withFixedContainment, - withChromaticDecorator, - ], -} - -export default preview diff --git a/apps/storybook/.storybook/storybook.css b/apps/storybook/.storybook/storybook.css deleted file mode 100644 index e73f7d4355..0000000000 --- a/apps/storybook/.storybook/storybook.css +++ /dev/null @@ -1,26 +0,0 @@ -/* Content scanning for Tailwind v4 - this scans both webview-ui and storybook files */ -@source "../**/*.{js,ts,jsx,tsx}"; -@source "../../../webview-ui/src/**/*.{js,ts,jsx,tsx}"; - -/* Import the webview-ui CSS first */ -@import "../../../webview-ui/src/index.css"; -@import "../../../webview-ui/src/codicon-custom.css"; -@import "@vscode/codicons/dist/codicon.css"; - -:root { - /* These are normally set by VSCode directly. Set them here so Storybook looks like VSCode! */ - font-family: - -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", system-ui, "Ubuntu", "Droid Sans", sans-serif; - font-weight: normal; - font-size: 13px; - - [data-theme="dark"] { - @import "../generated-theme-styles/dark-modern.css"; - @import "./theme-variables.css"; - } - - [data-theme="light"] { - @import "../generated-theme-styles/light-modern.css"; - @import "./theme-variables.css"; - } -} diff --git a/apps/storybook/.storybook/theme-variables.css b/apps/storybook/.storybook/theme-variables.css deleted file mode 100644 index d3da607603..0000000000 --- a/apps/storybook/.storybook/theme-variables.css +++ /dev/null @@ -1,276 +0,0 @@ -/* Theme Variables - Color delegations and semantic mappings */ - -/* We have to redefine these color variables in order to allow dynamic -theme switching in Storybook due to the way tailwind builds its utility -classes at build time based on the @theme */ - -/* Non-prefixed variable delegations - point to VS Code variables */ ---background: var(--vscode-background); ---foreground: var(--vscode-foreground); ---editor-foreground: var(--vscode-editor-foreground); ---editor-background: var(--vscode-editor-background); ---editorGroup-border: var(--vscode-editorGroup-border); ---editorWarning-foreground: var(--vscode-editorWarning-foreground); ---editorWarning-background: var(--vscode-editorWarning-background); ---button-foreground: var(--vscode-button-foreground); ---button-background: var(--vscode-button-background); ---button-secondaryForeground: var(--vscode-button-secondaryForeground); ---button-secondaryBackground: var(--vscode-button-secondaryBackground); ---button-hoverBackground: var(--vscode-button-hoverBackground); ---button-secondaryHoverBackground: var(--vscode-button-secondaryHoverBackground); ---dropdown-foreground: var(--vscode-dropdown-foreground); ---dropdown-background: var(--vscode-dropdown-background); ---dropdown-border: var(--vscode-dropdown-border); ---input-foreground: var(--vscode-input-foreground); ---input-background: var(--vscode-input-background); ---input-border: var(--vscode-input-border); ---focusBorder: var(--vscode-focusBorder); ---badge-foreground: var(--vscode-badge-foreground); ---badge-background: var(--vscode-badge-background); ---notifications-foreground: var(--vscode-notifications-foreground); ---notifications-background: var(--vscode-notifications-background); ---notifications-border: var(--vscode-notifications-border); ---descriptionForeground: var(--vscode-descriptionForeground); ---errorForeground: var(--vscode-errorForeground); ---list-hoverForeground: var(--vscode-list-hoverForeground); ---list-hoverBackground: var(--vscode-list-hoverBackground); ---list-focusBackground: var(--vscode-list-focusBackground); ---list-activeSelectionBackground: var(--vscode-list-activeSelectionBackground); ---list-activeSelectionForeground: var(--vscode-list-activeSelectionForeground); ---toolbar-hoverBackground: var(--vscode-toolbar-hoverBackground); ---panel-border: var(--vscode-panel-border); ---sideBar-foreground: var(--vscode-sideBar-foreground); ---sideBar-background: var(--vscode-sideBar-background); ---sideBar-border: var(--vscode-sideBar-border); ---sideBarSectionHeader-foreground: var(--vscode-sideBarSectionHeader-foreground); ---sideBarSectionHeader-background: var(--vscode-sideBarSectionHeader-background); ---sideBarSectionHeader-border: var(--vscode-sideBarSectionHeader-border); ---charts-green: var(--vscode-charts-green); ---charts-yellow: var(--color-matterai-yellow); ---charts-red: var(--vscode-charts-red); ---charts-blue: var(--vscode-charts-blue); ---charts-orange: var(--vscode-charts-orange); ---inputValidation-infoForeground: var(--vscode-inputValidation-infoForeground); ---inputValidation-infoBackground: var(--vscode-inputValidation-infoBackground); ---inputValidation-infoBorder: var(--vscode-inputValidation-infoBorder); ---widget-border: var(--vscode-widget-border); ---textLink-foreground: var(--vscode-textLink-foreground); ---textCodeBlock-background: var(--vscode-textCodeBlock-background); ---menu-background: var(--vscode-menu-background); ---menu-foreground: var(--vscode-menu-foreground); ---disabledForeground: var(--vscode-disabledForeground); ---checkbox-background: var(--vscode-checkbox-background); ---checkbox-foreground: var(--vscode-checkbox-foreground); ---checkbox-border: var(--vscode-checkbox-border); - -/* Semantic color mappings to VSCode variables */ ---background: var(--vscode-editor-background); ---foreground: var(--vscode-editor-foreground); ---card: var(--vscode-editor-background); ---card-foreground: var(--vscode-editor-foreground); ---popover: var(--vscode-menu-background, var(--vscode-editor-background)); ---popover-foreground: var(--vscode-menu-foreground, var(--vscode-editor-foreground)); ---primary: var(--color-matterai-green-dark); ---primary-foreground: var(--vscode-button-foreground); ---secondary: var(--vscode-button-secondaryBackground); ---secondary-foreground: var(--vscode-button-secondaryForeground); ---muted: var(--vscode-disabledForeground); ---muted-foreground: var(--vscode-descriptionForeground); ---accent: var(--vscode-list-hoverBackground); ---accent-foreground: var(--vscode-list-hoverForeground); ---destructive: var(--vscode-errorForeground); ---destructive-foreground: var(--vscode-button-foreground); ---border: var(--vscode-input-border, transparent); ---input: var(--vscode-input-background); ---ring: var(--vscode-input-border); ---chart-1: var(--vscode-charts-red); ---chart-2: var(--vscode-charts-blue); ---chart-3: var(--color-matterai-yellow); ---chart-4: var(--vscode-charts-orange); ---chart-5: var(--vscode-charts-green); - -/* Layout and Sizing Variables (theme-agnostic) */ ---border-width: 1; ---corner-radius: 0; ---corner-radius-round: 2; ---design-unit: 4; ---disabled-opacity: 0.4; ---font-family: - -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, - Segoe UI Emoji, Segoe UI Symbol; ---font-weight: 400; ---input-height: 26; ---input-min-width: 100px; ---type-ramp-base-font-size: 13px; ---type-ramp-base-line-height: normal; ---type-ramp-minus1-font-size: 11px; ---type-ramp-minus1-line-height: 16px; ---type-ramp-minus2-font-size: 9px; ---type-ramp-minus2-line-height: 16px; ---type-ramp-plus1-font-size: 16px; ---type-ramp-plus1-line-height: 24px; ---scrollbarWidth: 10px; ---scrollbarHeight: 10px; - -/* Component Layout Variables (theme-agnostic) */ ---button-icon-corner-radius: 5px; ---button-icon-outline-offset: 0; ---button-icon-padding: 3px; ---button-padding-horizontal: 11px; ---button-padding-vertical: 4px; ---checkbox-corner-radius: 3; ---dropdown-list-max-height: 200px; ---tag-corner-radius: 2px; - ---text-xs: calc(var(--vscode-font-size) * 0.85); ---text-sm: calc(var(--vscode-font-size) * 0.9); ---text-base: var(--vscode-font-size); ---text-lg: calc(var(--vscode-font-size) * 1.1); - -/* Border radius variables */ ---radius: 0.5rem; ---radius-lg: var(--radius); ---radius-md: calc(var(--radius) - 2px); ---radius-sm: calc(var(--radius) - 4px); - -/* Tailwind color delegations for semantic colors */ ---color-background: var(--background); ---color-foreground: var(--foreground); ---color-card: var(--card); ---color-card-foreground: var(--card-foreground); ---color-popover: var(--popover); ---color-popover-foreground: var(--popover-foreground); ---color-primary: var(--primary); ---color-primary-foreground: var(--primary-foreground); ---color-secondary: var(--secondary); ---color-secondary-foreground: var(--secondary-foreground); ---color-muted: var(--muted); ---color-muted-foreground: var(--muted-foreground); ---color-accent: var(--accent); ---color-accent-foreground: var(--accent-foreground); ---color-destructive: var(--destructive); ---color-destructive-foreground: var(--destructive-foreground); ---color-border: var(--border); ---color-input: var(--input); ---color-ring: var(--ring); ---color-chart-1: var(--chart-1); ---color-chart-2: var(--chart-2); ---color-chart-3: var(--chart-3); ---color-chart-4: var(--chart-4); ---color-chart-5: var(--chart-5); - -/* Tailwind color delegations for VS Code variables */ ---color-vscode-background: var(--vscode-background); ---color-vscode-foreground: var(--vscode-foreground); ---color-vscode-editor-foreground: var(--vscode-editor-foreground); ---color-vscode-editor-background: var(--vscode-editor-background); ---color-vscode-editorGroup-border: var(--vscode-editorGroup-border); ---color-vscode-editorWarning-foreground: var(--vscode-editorWarning-foreground); ---color-vscode-editorWarning-background: var(--vscode-editorWarning-background); ---color-vscode-button-foreground: var(--vscode-button-foreground); ---color-vscode-button-background: var(--vscode-button-background); ---color-vscode-button-secondaryForeground: var(--vscode-button-secondaryForeground); ---color-vscode-button-secondaryBackground: var(--vscode-button-secondaryBackground); ---color-vscode-button-hoverBackground: var(--vscode-button-hoverBackground); ---color-vscode-button-secondaryHoverBackground: var(--vscode-button-secondaryHoverBackground); ---color-vscode-dropdown-foreground: var(--vscode-dropdown-foreground); ---color-vscode-dropdown-background: var(--vscode-dropdown-background); ---color-vscode-dropdown-border: var(--vscode-dropdown-border); ---color-vscode-input-foreground: var(--vscode-input-foreground); ---color-vscode-input-background: var(--vscode-input-background); ---color-vscode-input-border: var(--vscode-input-border, transparent); ---color-vscode-focusBorder: var(--vscode-focusBorder); ---color-vscode-badge-foreground: var(--vscode-badge-foreground); ---color-vscode-badge-background: var(--vscode-badge-background); ---color-vscode-notifications-foreground: var(--vscode-notifications-foreground); ---color-vscode-notifications-background: var(--vscode-notifications-background); ---color-vscode-notifications-border: var(--vscode-notifications-border); ---color-vscode-descriptionForeground: var(--vscode-descriptionForeground); ---color-vscode-errorForeground: var(--vscode-errorForeground); ---color-vscode-list-hoverForeground: var(--vscode-list-hoverForeground); ---color-vscode-list-hoverBackground: var(--vscode-list-hoverBackground); ---color-vscode-list-focusBackground: var(--vscode-list-focusBackground); ---color-vscode-list-activeSelectionBackground: var(--vscode-list-activeSelectionBackground); ---color-vscode-list-activeSelectionForeground: var(--vscode-list-activeSelectionForeground); ---color-vscode-toolbar-hoverBackground: var(--vscode-toolbar-hoverBackground); ---color-vscode-panel-border: var(--vscode-panel-border); ---color-vscode-sideBar-foreground: var(--vscode-sideBar-foreground); ---color-vscode-sideBar-background: var(--vscode-sideBar-background); ---color-vscode-sideBar-border: var(--vscode-sideBar-border); ---color-vscode-sideBarSectionHeader-foreground: var(--vscode-sideBarSectionHeader-foreground); ---color-vscode-sideBarSectionHeader-background: var(--vscode-sideBarSectionHeader-background); ---color-vscode-sideBarSectionHeader-border: var(--vscode-sideBarSectionHeader-border); ---color-vscode-charts-green: var(--vscode-charts-green); ---color-vscode-charts-yellow: var(--color-matterai-yellow); ---color-vscode-charts-red: var(--vscode-charts-red); ---color-vscode-charts-blue: var(--vscode-charts-blue); ---color-vscode-charts-orange: var(--vscode-charts-orange); ---color-vscode-inputValidation-infoForeground: var(--vscode-inputValidation-infoForeground); ---color-vscode-inputValidation-infoBackground: var(--vscode-inputValidation-infoBackground); ---color-vscode-inputValidation-infoBorder: var(--vscode-inputValidation-infoBorder); ---color-vscode-widget-border: var(--vscode-widget-border); ---color-vscode-textLink-foreground: var(--vscode-textLink-foreground); ---color-vscode-textCodeBlock-background: var(--vscode-textCodeBlock-background); ---color-vscode-menu-background: var(--vscode-menu-background); ---color-vscode-menu-foreground: var(--vscode-menu-foreground); ---color-vscode-disabledForeground: var(--vscode-disabledForeground); ---color-vscode-checkbox-background: var(--vscode-checkbox-background); - -/* Additional Tailwind color delegations for UI components */ ---color-vscode-border-width: var(--vscode-border-width); ---color-vscode-contrast-active-border: var(--vscode-contrast-active-border); ---color-vscode-contrast-border: var(--vscode-contrast-border); ---color-vscode-corner-radius: var(--vscode-corner-radius); ---color-vscode-corner-radius-round: var(--vscode-corner-radius-round); ---color-vscode-design-unit: var(--vscode-design-unit); ---color-vscode-disabled-opacity: var(--vscode-disabled-opacity); ---color-vscode-focus-border: var(--vscode-focus-border); ---color-vscode-font-family: var(--vscode-font-family); ---color-vscode-font-weight: var(--vscode-font-weight); ---color-vscode-input-height: var(--vscode-input-height); ---color-vscode-input-min-width: var(--vscode-input-min-width); ---color-vscode-type-ramp-base-font-size: var(--vscode-type-ramp-base-font-size); ---color-vscode-type-ramp-base-line-height: var(--vscode-type-ramp-base-line-height); ---color-vscode-type-ramp-minus1-font-size: var(--vscode-type-ramp-minus1-font-size); ---color-vscode-type-ramp-minus1-line-height: var(--vscode-type-ramp-minus1-line-height); ---color-vscode-type-ramp-minus2-font-size: var(--vscode-type-ramp-minus2-font-size); ---color-vscode-type-ramp-minus2-line-height: var(--vscode-type-ramp-minus2-line-height); ---color-vscode-type-ramp-plus1-font-size: var(--vscode-type-ramp-plus1-font-size); ---color-vscode-type-ramp-plus1-line-height: var(--vscode-type-ramp-plus1-line-height); ---color-vscode-scrollbarWidth: var(--vscode-scrollbarWidth); ---color-vscode-scrollbarHeight: var(--vscode-scrollbarHeight); ---color-vscode-scrollbar-slider-background: var(--vscode-scrollbar-slider-background); ---color-vscode-scrollbar-slider-hover-background: var(--vscode-scrollbar-slider-hover-background); ---color-vscode-scrollbar-slider-active-background: var(--vscode-scrollbar-slider-active-background); ---color-vscode-button-border: var(--vscode-button-border); ---color-vscode-button-icon-background: var(--vscode-button-icon-background); ---color-vscode-button-icon-corner-radius: var(--vscode-button-icon-corner-radius); ---color-vscode-button-icon-outline-offset: var(--vscode-button-icon-outline-offset); ---color-vscode-button-icon-hover-background: var(--vscode-button-icon-hover-background); ---color-vscode-button-icon-padding: var(--vscode-button-icon-padding); ---color-vscode-button-primary-background: var(--vscode-button-primary-background); ---color-vscode-button-primary-foreground: var(--vscode-button-primary-foreground); ---color-vscode-button-primary-hover-background: var(--vscode-button-primary-hover-background); ---color-vscode-button-secondary-background: var(--vscode-button-secondary-background); ---color-vscode-button-secondary-foreground: var(--vscode-button-secondary-foreground); ---color-vscode-button-secondary-hover-background: var(--vscode-button-secondary-hover-background); ---color-vscode-button-padding-horizontal: var(--vscode-button-padding-horizontal); ---color-vscode-button-padding-vertical: var(--vscode-button-padding-vertical); ---color-vscode-checkbox-border: var(--vscode-checkbox-border); ---color-vscode-checkbox-corner-radius: var(--vscode-checkbox-corner-radius); ---color-vscode-checkbox-foreground: var(--vscode-checkbox-foreground); ---color-vscode-list-active-selection-background: var(--vscode-list-active-selection-background); ---color-vscode-list-active-selection-foreground: var(--vscode-list-active-selection-foreground); ---color-vscode-list-hover-background: var(--vscode-list-hover-background); ---color-vscode-divider-background: var(--vscode-divider-background); ---color-vscode-dropdown-list-max-height: var(--vscode-dropdown-list-max-height); ---color-vscode-input-placeholder-foreground: var(--vscode-input-placeholder-foreground); ---color-vscode-link-active-foreground: var(--vscode-link-active-foreground); ---color-vscode-link-foreground: var(--vscode-link-foreground); ---color-vscode-progress-background: var(--vscode-progress-background); ---color-vscode-panel-tab-active-border: var(--vscode-panel-tab-active-border); ---color-vscode-panel-tab-active-foreground: var(--vscode-panel-tab-active-foreground); ---color-vscode-panel-tab-foreground: var(--vscode-panel-tab-foreground); ---color-vscode-panel-view-background: var(--vscode-panel-view-background); ---color-vscode-panel-view-border: var(--vscode-panel-view-border); ---color-vscode-tag-corner-radius: var(--vscode-tag-corner-radius); diff --git a/apps/storybook/README.md b/apps/storybook/README.md deleted file mode 100644 index a1e65c4022..0000000000 --- a/apps/storybook/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# Storybook - -Component library and design system documentation for the VS Code extension. - -## Quick Start - -```bash -# Install dependencies -pnpm install - -# Run Storybook -pnpm storybook -``` - -Visit [http://localhost:6006](http://localhost:6006) to view the component library. - -## VS Code Themes - -This Storybook uses **automatically generated VS Code themes** to ensure our components match the official VS Code appearance exactly. The themes are generated from Microsoft's official VS Code theme files and converted to CSS variables. - -### Available Themes - -- **Dark Modern** - VS Code's default dark theme -- **Light Modern** - VS Code's default light theme - -Use the theme switcher in the Storybook toolbar to toggle between themes. - -### Theme Regeneration - -The theme CSS files are checked into the repository and rarely need updating. To regenerate themes (only needed when VS Code releases new theme updates): - -```bash -pnpm generate-theme-styles -``` - -This script: - -1. Fetches the latest theme JSON files from the VS Code repository -2. Resolves theme includes (e.g., `dark_modern` includes `dark_plus`) -3. Converts theme colors to CSS variables (e.g., `editor.background` → `--vscode-editor-background`) -4. Outputs CSS files to `.storybook/themes/` - -## Scripts - -- `pnpm storybook` - Start development server -- `pnpm build` - Build static Storybook -- `pnpm generate-theme-styles` - Regenerate VS Code theme CSS files -- `pnpm test` - Run component tests diff --git a/apps/storybook/generated-theme-styles/dark-modern.css b/apps/storybook/generated-theme-styles/dark-modern.css deleted file mode 100644 index 0cd980304f..0000000000 --- a/apps/storybook/generated-theme-styles/dark-modern.css +++ /dev/null @@ -1,805 +0,0 @@ -/* All CSS Variables - Auto-extracted from VS Code via Playwright */ -/* Generated on 2025-08-06T16:48:14.810Z */ - ---chat-editing-last-edit-shift: 100%; ---dropdown-padding-bottom: 4px; ---dropdown-padding-top: 3px; ---guide-color: rgba(23, 159, 255, 0.3); ---guide-color-active: #179fff; ---indent-color: #404040; ---indent-color-active: #707070; ---inline-chat-frame-progress: 0%; ---monaco-editor-error-decoration: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%206%203'%20enable-background%3D'new%200%200%206%203'%20height%3D'3'%20width%3D'6'%3E%3Cg%20fill%3D'%23f14c4c'%3E%3Cpolygon%20points%3D'5.5%2C0%202.5%2C3%201.1%2C3%204.1%2C0'%2F%3E%3Cpolygon%20points%3D'4%2C0%206%2C2%206%2C0.6%205.4%2C0'%2F%3E%3Cpolygon%20points%3D'0%2C2%201%2C3%202.4%2C3%200%2C0.6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); ---monaco-editor-hint-decoration: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%223%22%20width%3D%2212%22%3E%3Cg%20fill%3D%22rgba(238%2C%20238%2C%20238%2C%200.7)%22%3E%3Ccircle%20cx%3D%221%22%20cy%3D%221%22%20r%3D%221%22%2F%3E%3Ccircle%20cx%3D%225%22%20cy%3D%221%22%20r%3D%221%22%2F%3E%3Ccircle%20cx%3D%229%22%20cy%3D%221%22%20r%3D%221%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); ---monaco-editor-info-decoration: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%206%203'%20enable-background%3D'new%200%200%206%203'%20height%3D'3'%20width%3D'6'%3E%3Cg%20fill%3D'%233794ff'%3E%3Cpolygon%20points%3D'5.5%2C0%202.5%2C3%201.1%2C3%204.1%2C0'%2F%3E%3Cpolygon%20points%3D'4%2C0%206%2C2%206%2C0.6%205.4%2C0'%2F%3E%3Cpolygon%20points%3D'0%2C2%201%2C3%202.4%2C3%200%2C0.6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); ---monaco-editor-unnecessary-decoration-opacity: 0.667; ---monaco-editor-warning-decoration: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%206%203'%20enable-background%3D'new%200%200%206%203'%20height%3D'3'%20width%3D'6'%3E%3Cg%20fill%3D'%23cca700'%3E%3Cpolygon%20points%3D'5.5%2C0%202.5%2C3%201.1%2C3%204.1%2C0'%2F%3E%3Cpolygon%20points%3D'4%2C0%206%2C2%206%2C0.6%205.4%2C0'%2F%3E%3Cpolygon%20points%3D'0%2C2%201%2C3%202.4%2C3%200%2C0.6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); ---monaco-monospace-font: "Ubuntu Mono", "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace; ---notebook-find-horizontal-padding: 4px; ---notebook-find-width: 419px; ---text-link-decoration: underline; ---vscode-actionBar-toggledBackground: #383a49; ---vscode-activityBar-activeBorder: #ffffff; ---vscode-activityBar-background: #333333; ---vscode-activityBar-dropBorder: #ffffff; ---vscode-activityBar-foreground: #ffffff; ---vscode-activityBar-inactiveForeground: rgba(255, 255, 255, 0.4); ---vscode-activityBarBadge-background: #007acc; ---vscode-activityBarBadge-foreground: #ffffff; ---vscode-activityBarTop-activeBorder: #e7e7e7; ---vscode-activityBarTop-dropBorder: #e7e7e7; ---vscode-activityBarTop-foreground: #e7e7e7; ---vscode-activityBarTop-inactiveForeground: rgba(231, 231, 231, 0.6); ---vscode-activityErrorBadge-background: #f14c4c; ---vscode-activityErrorBadge-foreground: #000000; ---vscode-activityWarningBadge-background: #cca700; ---vscode-activityWarningBadge-foreground: #000000; ---vscode-badge-background: #4d4d4d; ---vscode-badge-foreground: #ffffff; ---vscode-banner-background: #04395e; ---vscode-banner-foreground: #ffffff; ---vscode-banner-iconForeground: #3794ff; ---vscode-breadcrumb-activeSelectionForeground: #e0e0e0; ---vscode-breadcrumb-background: #1e1e1e; ---vscode-breadcrumb-focusForeground: #e0e0e0; ---vscode-breadcrumb-foreground: rgba(204, 204, 204, 0.8); ---vscode-breadcrumbPicker-background: #252526; ---vscode-button-background: #0e639c; ---vscode-button-foreground: #ffffff; ---vscode-button-hoverBackground: #1177bb; ---vscode-button-secondaryBackground: #3a3d41; ---vscode-button-secondaryForeground: #ffffff; ---vscode-button-secondaryHoverBackground: #45494e; ---vscode-button-separator: rgba(255, 255, 255, 0.4); ---vscode-chart-axis: rgba(191, 191, 191, 0.4); ---vscode-chart-guide: rgba(191, 191, 191, 0.2); ---vscode-chart-line: #236b8e; ---vscode-charts-blue: #3794ff; ---vscode-charts-foreground: #cccccc; ---vscode-charts-green: #3affa3; ---vscode-charts-lines: rgba(204, 204, 204, 0.5); ---vscode-charts-orange: #d18616; ---vscode-charts-purple: #b180d7; ---vscode-charts-red: #f14c4c; ---vscode-charts-yellow: #cca700; ---vscode-chat-avatarBackground: #1f1f1f; ---vscode-chat-avatarForeground: #cccccc; ---vscode-chat-editedFileForeground: #e2c08d; ---vscode-chat-linesAddedForeground: #54b054; ---vscode-chat-linesRemovedForeground: #fc6a6a; ---vscode-chat-requestBackground: rgba(30, 30, 30, 0.62); ---vscode-chat-requestBorder: rgba(255, 255, 255, 0.1); ---vscode-chat-requestBubbleBackground: rgba(38, 79, 120, 0.3); ---vscode-chat-requestBubbleHoverBackground: #264f78; ---vscode-chat-requestCodeBorder: rgba(0, 73, 114, 0.72); ---vscode-chat-slashCommandBackground: rgba(38, 71, 120, 0.4); ---vscode-chat-slashCommandForeground: #85b6ff; ---vscode-checkbox-background: #3c3c3c; ---vscode-checkbox-border: #6b6b6b; ---vscode-checkbox-disabled-background: #777777; ---vscode-checkbox-disabled-foreground: #b4b4b4; ---vscode-checkbox-foreground: #f0f0f0; ---vscode-checkbox-selectBackground: #252526; ---vscode-checkbox-selectBorder: #c5c5c5; ---vscode-commandCenter-activeBackground: rgba(255, 255, 255, 0.08); ---vscode-commandCenter-activeBorder: rgba(204, 204, 204, 0.3); ---vscode-commandCenter-activeForeground: #cccccc; ---vscode-commandCenter-background: rgba(255, 255, 255, 0.05); ---vscode-commandCenter-border: rgba(204, 204, 204, 0.2); ---vscode-commandCenter-debuggingBackground: rgba(204, 102, 51, 0.26); ---vscode-commandCenter-foreground: #cccccc; ---vscode-commandCenter-inactiveBorder: rgba(204, 204, 204, 0.15); ---vscode-commandCenter-inactiveForeground: rgba(204, 204, 204, 0.6); ---vscode-commentsView-resolvedIcon: rgba(204, 204, 204, 0.5); ---vscode-commentsView-unresolvedIcon: #007fd4; ---vscode-debug-ansi-terminal-ansiBlack: #878787; ---vscode-debug-ansi-terminal-ansiBlue: #4e8ed3; ---vscode-debug-ansi-terminal-ansiBrightBlack: #848484; ---vscode-debug-ansi-terminal-ansiBrightBlue: #3b8eea; ---vscode-debug-ansi-terminal-ansiBrightCyan: #29b8db; ---vscode-debug-ansi-terminal-ansiBrightGreen: #23d18b; ---vscode-debug-ansi-terminal-ansiBrightMagenta: #d670d6; ---vscode-debug-ansi-terminal-ansiBrightRed: #f14c4c; ---vscode-debug-ansi-terminal-ansiBrightWhite: #e5e5e5; ---vscode-debug-ansi-terminal-ansiBrightYellow: #f5f543; ---vscode-debug-ansi-terminal-ansiCyan: #11a8cd; ---vscode-debug-ansi-terminal-ansiGreen: #0dbc79; ---vscode-debug-ansi-terminal-ansiMagenta: #c965c9; ---vscode-debug-ansi-terminal-ansiRed: #db6a6a; ---vscode-debug-ansi-terminal-ansiWhite: #e5e5e5; ---vscode-debug-ansi-terminal-ansiYellow: #e5e510; ---vscode-debugConsole-errorForeground: #f48771; ---vscode-debugConsole-infoForeground: #3794ff; ---vscode-debugConsole-sourceForeground: #cccccc; ---vscode-debugConsole-warningForeground: #cca700; ---vscode-debugConsoleInputIcon-foreground: #cccccc; ---vscode-debugExceptionWidget-background: #420b0d; ---vscode-debugExceptionWidget-border: #a31515; ---vscode-debugIcon-breakpointCurrentStackframeForeground: #ffcc00; ---vscode-debugIcon-breakpointDisabledForeground: #848484; ---vscode-debugIcon-breakpointForeground: #e51400; ---vscode-debugIcon-breakpointStackframeForeground: #3affa3; ---vscode-debugIcon-breakpointUnverifiedForeground: #848484; ---vscode-debugIcon-continueForeground: #75beff; ---vscode-debugIcon-disconnectForeground: #f48771; ---vscode-debugIcon-pauseForeground: #75beff; ---vscode-debugIcon-restartForeground: #3affa3; ---vscode-debugIcon-startForeground: #3affa3; ---vscode-debugIcon-stepBackForeground: #75beff; ---vscode-debugIcon-stepIntoForeground: #75beff; ---vscode-debugIcon-stepOutForeground: #75beff; ---vscode-debugIcon-stepOverForeground: #75beff; ---vscode-debugIcon-stopForeground: #f48771; ---vscode-debugTokenExpression-boolean: #4e94ce; ---vscode-debugTokenExpression-error: #f48771; ---vscode-debugTokenExpression-name: #c586c0; ---vscode-debugTokenExpression-number: #b5cea8; ---vscode-debugTokenExpression-string: #ce9178; ---vscode-debugTokenExpression-type: #4a90e2; ---vscode-debugTokenExpression-value: rgba(204, 204, 204, 0.6); ---vscode-debugToolBar-background: #333333; ---vscode-debugView-exceptionLabelBackground: #6c2022; ---vscode-debugView-exceptionLabelForeground: #cccccc; ---vscode-debugView-stateLabelBackground: rgba(136, 136, 136, 0.27); ---vscode-debugView-stateLabelForeground: #cccccc; ---vscode-debugView-valueChangedHighlight: #569cd6; ---vscode-descriptionForeground: rgba(204, 204, 204, 0.7); ---vscode-diffEditor-diagonalFill: rgba(204, 204, 204, 0.2); ---vscode-diffEditor-insertedLineBackground: rgba(155, 185, 85, 0.2); ---vscode-diffEditor-insertedTextBackground: rgba(156, 204, 44, 0.2); ---vscode-diffEditor-move-border: rgba(139, 139, 139, 0.61); ---vscode-diffEditor-moveActive-border: #ffa500; ---vscode-diffEditor-removedLineBackground: rgba(255, 0, 0, 0.2); ---vscode-diffEditor-removedTextBackground: rgba(255, 0, 0, 0.2); ---vscode-diffEditor-unchangedCodeBackground: rgba(116, 116, 116, 0.16); ---vscode-diffEditor-unchangedRegionBackground: #252526; ---vscode-diffEditor-unchangedRegionForeground: #cccccc; ---vscode-diffEditor-unchangedRegionShadow: #000000; ---vscode-disabledForeground: rgba(204, 204, 204, 0.5); ---vscode-dropdown-background: #3c3c3c; ---vscode-dropdown-border: #3c3c3c; ---vscode-dropdown-foreground: #f0f0f0; ---vscode-editor-background: #1e1e1e; ---vscode-editor-compositionBorder: #ffffff; ---vscode-editor-findMatchBackground: #515c6a; ---vscode-editor-findMatchHighlightBackground: rgba(234, 92, 0, 0.33); ---vscode-editor-findRangeHighlightBackground: rgba(58, 61, 65, 0.4); ---vscode-editor-focusedStackFrameHighlightBackground: rgba(122, 189, 122, 0.3); ---vscode-editor-foldBackground: rgba(38, 79, 120, 0.3); ---vscode-editor-foldPlaceholderForeground: #808080; ---vscode-editor-foreground: #d4d4d4; ---vscode-editor-hoverHighlightBackground: rgba(38, 79, 120, 0.25); ---vscode-editor-inactiveSelectionBackground: #3a3d41; ---vscode-editor-inlineValuesBackground: rgba(255, 200, 0, 0.2); ---vscode-editor-inlineValuesForeground: rgba(255, 255, 255, 0.5); ---vscode-editor-lineHighlightBorder: #282828; ---vscode-editor-linkedEditingBackground: rgba(255, 0, 0, 0.3); ---vscode-editor-placeholder-foreground: rgba(255, 255, 255, 0.34); ---vscode-editor-rangeHighlightBackground: rgba(255, 255, 255, 0.04); ---vscode-editor-selectionBackground: #264f78; ---vscode-editor-selectionHighlightBackground: rgba(173, 214, 255, 0.15); ---vscode-editor-snippetFinalTabstopHighlightBorder: #525252; ---vscode-editor-snippetTabstopHighlightBackground: rgba(124, 124, 124, 0.3); ---vscode-editor-stackFrameHighlightBackground: rgba(255, 255, 0, 0.2); ---vscode-editor-symbolHighlightBackground: rgba(234, 92, 0, 0.33); ---vscode-editor-wordHighlightBackground: rgba(87, 87, 87, 0.72); ---vscode-editor-wordHighlightStrongBackground: rgba(0, 73, 114, 0.72); ---vscode-editor-wordHighlightTextBackground: rgba(87, 87, 87, 0.72); ---vscode-editorActionList-background: #252526; ---vscode-editorActionList-focusBackground: #04395e; ---vscode-editorActionList-focusForeground: #ffffff; ---vscode-editorActionList-foreground: #cccccc; ---vscode-editorActiveLineNumber-foreground: #c6c6c6; ---vscode-editorBracketHighlight-foreground1: #ffd700; ---vscode-editorBracketHighlight-foreground2: #da70d6; ---vscode-editorBracketHighlight-foreground3: #179fff; ---vscode-editorBracketHighlight-foreground4: rgba(0, 0, 0, 0); ---vscode-editorBracketHighlight-foreground5: rgba(0, 0, 0, 0); ---vscode-editorBracketHighlight-foreground6: rgba(0, 0, 0, 0); ---vscode-editorBracketHighlight-unexpectedBracket-foreground: rgba(255, 18, 18, 0.8); ---vscode-editorBracketMatch-background: rgba(0, 100, 0, 0.1); ---vscode-editorBracketMatch-border: #888888; ---vscode-editorBracketPairGuide-activeBackground1: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-activeBackground2: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-activeBackground3: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-activeBackground4: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-activeBackground5: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-activeBackground6: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background1: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background2: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background3: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background4: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background5: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background6: rgba(0, 0, 0, 0); ---vscode-editorCodeLens-foreground: #999999; ---vscode-editorCommentsWidget-rangeActiveBackground: rgba(0, 127, 212, 0.1); ---vscode-editorCommentsWidget-rangeBackground: rgba(0, 127, 212, 0.1); ---vscode-editorCommentsWidget-replyInputBackground: #252526; ---vscode-editorCommentsWidget-resolvedBorder: rgba(204, 204, 204, 0.5); ---vscode-editorCommentsWidget-unresolvedBorder: #007fd4; ---vscode-editorCursor-foreground: #aeafad; ---vscode-editorError-foreground: #f14c4c; ---vscode-editorGhostText-foreground: rgba(255, 255, 255, 0.34); ---vscode-editorGroup-border: #444444; ---vscode-editorGroup-dropBackground: rgba(83, 89, 93, 0.5); ---vscode-editorGroup-dropIntoPromptBackground: #252526; ---vscode-editorGroup-dropIntoPromptForeground: #cccccc; ---vscode-editorGroupHeader-noTabsBackground: #1e1e1e; ---vscode-editorGroupHeader-tabsBackground: #252526; ---vscode-editorGutter-addedBackground: #487e02; ---vscode-editorGutter-addedSecondaryBackground: #243f01; ---vscode-editorGutter-background: #1e1e1e; ---vscode-editorGutter-commentGlyphForeground: #d4d4d4; ---vscode-editorGutter-commentRangeForeground: #37373d; ---vscode-editorGutter-commentUnresolvedGlyphForeground: #d4d4d4; ---vscode-editorGutter-deletedBackground: #f14c4c; ---vscode-editorGutter-deletedSecondaryBackground: #b00e0e; ---vscode-editorGutter-foldingControlForeground: #c5c5c5; ---vscode-editorGutter-itemBackground: #37373d; ---vscode-editorGutter-itemGlyphForeground: #d4d4d4; ---vscode-editorGutter-modifiedBackground: #1b81a8; ---vscode-editorGutter-modifiedSecondaryBackground: #0d4054; ---vscode-editorHint-foreground: rgba(238, 238, 238, 0.7); ---vscode-editorHoverWidget-background: #252526; ---vscode-editorHoverWidget-border: #454545; ---vscode-editorHoverWidget-foreground: #cccccc; ---vscode-editorHoverWidget-highlightForeground: #2aaaff; ---vscode-editorHoverWidget-statusBarBackground: #2c2c2d; ---vscode-editorIndentGuide-activeBackground: rgba(227, 228, 226, 0.16); ---vscode-editorIndentGuide-activeBackground1: #707070; ---vscode-editorIndentGuide-activeBackground2: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-activeBackground3: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-activeBackground4: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-activeBackground5: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-activeBackground6: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-background: rgba(227, 228, 226, 0.16); ---vscode-editorIndentGuide-background1: #404040; ---vscode-editorIndentGuide-background2: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-background3: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-background4: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-background5: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-background6: rgba(0, 0, 0, 0); ---vscode-editorInfo-foreground: #3794ff; ---vscode-editorInlayHint-background: rgba(77, 77, 77, 0.1); ---vscode-editorInlayHint-foreground: #969696; ---vscode-editorInlayHint-parameterBackground: rgba(77, 77, 77, 0.1); ---vscode-editorInlayHint-parameterForeground: #969696; ---vscode-editorInlayHint-typeBackground: rgba(77, 77, 77, 0.1); ---vscode-editorInlayHint-typeForeground: #969696; ---vscode-editorLightBulb-foreground: #ffcc00; ---vscode-editorLightBulbAi-foreground: #ffcc00; ---vscode-editorLightBulbAutoFix-foreground: #75beff; ---vscode-editorLineNumber-activeForeground: #c6c6c6; ---vscode-editorLineNumber-foreground: #858585; ---vscode-editorLink-activeForeground: #4e94ce; ---vscode-editorMarkerNavigation-background: #1e1e1e; ---vscode-editorMarkerNavigationError-background: #f14c4c; ---vscode-editorMarkerNavigationError-headerBackground: rgba(241, 76, 76, 0.1); ---vscode-editorMarkerNavigationInfo-background: #3794ff; ---vscode-editorMarkerNavigationInfo-headerBackground: rgba(55, 148, 255, 0.1); ---vscode-editorMarkerNavigationWarning-background: #cca700; ---vscode-editorMarkerNavigationWarning-headerBackground: rgba(204, 167, 0, 0.1); ---vscode-editorMinimap-inlineChatInserted: rgba(156, 204, 44, 0.12); ---vscode-editorMultiCursor-primary-foreground: #aeafad; ---vscode-editorMultiCursor-secondary-foreground: #aeafad; ---vscode-editorOverviewRuler-addedForeground: rgba(72, 126, 2, 0.6); ---vscode-editorOverviewRuler-border: rgba(127, 127, 127, 0.3); ---vscode-editorOverviewRuler-bracketMatchForeground: #a0a0a0; ---vscode-editorOverviewRuler-commentForeground: #37373d; ---vscode-editorOverviewRuler-commentUnresolvedForeground: #37373d; ---vscode-editorOverviewRuler-commonContentForeground: rgba(96, 96, 96, 0.4); ---vscode-editorOverviewRuler-currentContentForeground: rgba(64, 200, 174, 0.5); ---vscode-editorOverviewRuler-deletedForeground: rgba(241, 76, 76, 0.6); ---vscode-editorOverviewRuler-errorForeground: rgba(255, 18, 18, 0.7); ---vscode-editorOverviewRuler-findMatchForeground: rgba(209, 134, 22, 0.49); ---vscode-editorOverviewRuler-incomingContentForeground: rgba(64, 166, 255, 0.5); ---vscode-editorOverviewRuler-infoForeground: #3794ff; ---vscode-editorOverviewRuler-inlineChatInserted: rgba(156, 204, 44, 0.12); ---vscode-editorOverviewRuler-inlineChatRemoved: rgba(255, 0, 0, 0.12); ---vscode-editorOverviewRuler-modifiedForeground: rgba(27, 129, 168, 0.6); ---vscode-editorOverviewRuler-rangeHighlightForeground: rgba(0, 122, 204, 0.6); ---vscode-editorOverviewRuler-selectionHighlightForeground: rgba(160, 160, 160, 0.8); ---vscode-editorOverviewRuler-warningForeground: #cca700; ---vscode-editorOverviewRuler-wordHighlightForeground: rgba(160, 160, 160, 0.8); ---vscode-editorOverviewRuler-wordHighlightStrongForeground: rgba(192, 160, 192, 0.8); ---vscode-editorOverviewRuler-wordHighlightTextForeground: rgba(160, 160, 160, 0.8); ---vscode-editorPane-background: #1e1e1e; ---vscode-editorRuler-foreground: #5a5a5a; ---vscode-editorStickyScroll-background: #1e1e1e; ---vscode-editorStickyScroll-shadow: #000000; ---vscode-editorStickyScrollGutter-background: #1e1e1e; ---vscode-editorStickyScrollHover-background: #2a2d2e; ---vscode-editorSuggestWidget-background: #252526; ---vscode-editorSuggestWidget-border: #454545; ---vscode-editorSuggestWidget-focusHighlightForeground: #2aaaff; ---vscode-editorSuggestWidget-foreground: #d4d4d4; ---vscode-editorSuggestWidget-highlightForeground: #2aaaff; ---vscode-editorSuggestWidget-selectedBackground: #04395e; ---vscode-editorSuggestWidget-selectedForeground: #ffffff; ---vscode-editorSuggestWidget-selectedIconForeground: #ffffff; ---vscode-editorSuggestWidgetStatus-foreground: rgba(212, 212, 212, 0.5); ---vscode-editorUnicodeHighlight-border: #cca700; ---vscode-editorUnnecessaryCode-opacity: rgba(0, 0, 0, 0.67); ---vscode-editorWarning-foreground: #cca700; ---vscode-editorWatermark-foreground: rgba(212, 212, 212, 0.6); ---vscode-editorWhitespace-foreground: rgba(227, 228, 226, 0.16); ---vscode-editorWidget-background: #252526; ---vscode-editorWidget-border: #454545; ---vscode-editorWidget-foreground: #cccccc; ---vscode-errorForeground: #f48771; ---vscode-extensionBadge-remoteBackground: #007acc; ---vscode-extensionBadge-remoteForeground: #ffffff; ---vscode-extensionButton-background: #0e639c; ---vscode-extensionButton-foreground: #ffffff; ---vscode-extensionButton-hoverBackground: #1177bb; ---vscode-extensionButton-prominentBackground: #0e639c; ---vscode-extensionButton-prominentForeground: #ffffff; ---vscode-extensionButton-prominentHoverBackground: #1177bb; ---vscode-extensionButton-separator: rgba(255, 255, 255, 0.4); ---vscode-extensionIcon-preReleaseForeground: #1d9271; ---vscode-extensionIcon-privateForeground: rgba(255, 255, 255, 0.38); ---vscode-extensionIcon-sponsorForeground: #d758b3; ---vscode-extensionIcon-starForeground: #ff8e00; ---vscode-extensionIcon-verifiedForeground: #3794ff; ---vscode-focusBorder: #007fd4; ---vscode-foreground: #cccccc; ---vscode-gauge-background: #007acc; ---vscode-gauge-errorBackground: #be1100; ---vscode-gauge-errorForeground: rgba(190, 17, 0, 0.3); ---vscode-gauge-foreground: rgba(0, 122, 204, 0.3); ---vscode-gauge-warningBackground: #b89500; ---vscode-gauge-warningForeground: rgba(184, 149, 0, 0.3); ---vscode-git-blame-editorDecorationForeground: #969696; ---vscode-gitDecoration-addedResourceForeground: #81b88b; ---vscode-gitDecoration-conflictingResourceForeground: #e4676b; ---vscode-gitDecoration-deletedResourceForeground: #c74e39; ---vscode-gitDecoration-ignoredResourceForeground: #8c8c8c; ---vscode-gitDecoration-modifiedResourceForeground: #e2c08d; ---vscode-gitDecoration-renamedResourceForeground: #73c991; ---vscode-gitDecoration-stageDeletedResourceForeground: #c74e39; ---vscode-gitDecoration-stageModifiedResourceForeground: #e2c08d; ---vscode-gitDecoration-submoduleResourceForeground: #8db9e2; ---vscode-gitDecoration-untrackedResourceForeground: #73c991; ---vscode-icon-foreground: #c5c5c5; ---vscode-inlineChat-background: #252526; ---vscode-inlineChat-border: #454545; ---vscode-inlineChat-foreground: #cccccc; ---vscode-inlineChat-shadow: rgba(0, 0, 0, 0.36); ---vscode-inlineChatDiff-inserted: rgba(156, 204, 44, 0.1); ---vscode-inlineChatDiff-removed: rgba(255, 0, 0, 0.1); ---vscode-inlineChatInput-background: #3c3c3c; ---vscode-inlineChatInput-border: #454545; ---vscode-inlineChatInput-focusBorder: #007fd4; ---vscode-inlineChatInput-placeholderForeground: #a6a6a6; ---vscode-inlineEdit-gutterIndicator-background: rgba(45, 45, 45, 0.5); ---vscode-inlineEdit-gutterIndicator-primaryBackground: rgba(14, 99, 156, 0.4); ---vscode-inlineEdit-gutterIndicator-primaryBorder: #0e639c; ---vscode-inlineEdit-gutterIndicator-primaryForeground: #ffffff; ---vscode-inlineEdit-gutterIndicator-secondaryBackground: #3a3d41; ---vscode-inlineEdit-gutterIndicator-secondaryBorder: #3a3d41; ---vscode-inlineEdit-gutterIndicator-secondaryForeground: #ffffff; ---vscode-inlineEdit-gutterIndicator-successfulBackground: #0e639c; ---vscode-inlineEdit-gutterIndicator-successfulBorder: #0e639c; ---vscode-inlineEdit-gutterIndicator-successfulForeground: #ffffff; ---vscode-inlineEdit-modifiedBackground: rgba(156, 204, 44, 0.06); ---vscode-inlineEdit-modifiedBorder: rgba(156, 204, 44, 0.2); ---vscode-inlineEdit-modifiedChangedLineBackground: rgba(155, 185, 85, 0.14); ---vscode-inlineEdit-modifiedChangedTextBackground: rgba(156, 204, 44, 0.14); ---vscode-inlineEdit-originalBackground: rgba(255, 0, 0, 0.04); ---vscode-inlineEdit-originalBorder: rgba(255, 0, 0, 0.2); ---vscode-inlineEdit-originalChangedLineBackground: rgba(255, 0, 0, 0.16); ---vscode-inlineEdit-originalChangedTextBackground: rgba(255, 0, 0, 0.16); ---vscode-inlineEdit-tabWillAcceptModifiedBorder: rgba(156, 204, 44, 0.2); ---vscode-inlineEdit-tabWillAcceptOriginalBorder: rgba(255, 0, 0, 0.2); ---vscode-input-background: #3c3c3c; ---vscode-input-foreground: #cccccc; ---vscode-input-placeholderForeground: #a6a6a6; ---vscode-inputOption-activeBackground: rgba(0, 127, 212, 0.4); ---vscode-inputOption-activeBorder: #007acc; ---vscode-inputOption-activeForeground: #ffffff; ---vscode-inputOption-hoverBackground: rgba(90, 93, 94, 0.5); ---vscode-inputValidation-errorBackground: #5a1d1d; ---vscode-inputValidation-errorBorder: #be1100; ---vscode-inputValidation-infoBackground: #063b49; ---vscode-inputValidation-infoBorder: #007acc; ---vscode-inputValidation-warningBackground: #352a05; ---vscode-inputValidation-warningBorder: #b89500; ---vscode-interactive-activeCodeBorder: #007acc; ---vscode-interactive-inactiveCodeBorder: #37373d; ---vscode-keybindingLabel-background: rgba(128, 128, 128, 0.17); ---vscode-keybindingLabel-border: rgba(51, 51, 51, 0.6); ---vscode-keybindingLabel-bottomBorder: rgba(68, 68, 68, 0.6); ---vscode-keybindingLabel-foreground: #cccccc; ---vscode-keybindingTable-headerBackground: rgba(204, 204, 204, 0.04); ---vscode-keybindingTable-rowsBackground: rgba(204, 204, 204, 0.04); ---vscode-list-activeSelectionBackground: #04395e; ---vscode-list-activeSelectionForeground: #ffffff; ---vscode-list-activeSelectionIconForeground: #ffffff; ---vscode-list-deemphasizedForeground: #8c8c8c; ---vscode-list-dropBackground: #383b3d; ---vscode-list-dropBetweenBackground: #c5c5c5; ---vscode-list-errorForeground: #f88070; ---vscode-list-filterMatchBackground: rgba(234, 92, 0, 0.33); ---vscode-list-focusHighlightForeground: #2aaaff; ---vscode-list-focusOutline: #007fd4; ---vscode-list-highlightForeground: #2aaaff; ---vscode-list-hoverBackground: #2a2d2e; ---vscode-list-inactiveSelectionBackground: #37373d; ---vscode-list-invalidItemForeground: #b89500; ---vscode-list-warningForeground: #cca700; ---vscode-listFilterWidget-background: #252526; ---vscode-listFilterWidget-noMatchesOutline: #be1100; ---vscode-listFilterWidget-outline: rgba(0, 0, 0, 0); ---vscode-listFilterWidget-shadow: rgba(0, 0, 0, 0.36); ---vscode-menu-background: #252526; ---vscode-menu-border: #454545; ---vscode-menu-foreground: #cccccc; ---vscode-menu-selectionBackground: #0078d4; ---vscode-menu-selectionForeground: #ffffff; ---vscode-menu-separatorBackground: #454545; ---vscode-menubar-selectionBackground: rgba(90, 93, 94, 0.31); ---vscode-menubar-selectionForeground: #cccccc; ---vscode-merge-commonContentBackground: rgba(96, 96, 96, 0.16); ---vscode-merge-commonHeaderBackground: rgba(96, 96, 96, 0.4); ---vscode-merge-currentContentBackground: rgba(64, 200, 174, 0.2); ---vscode-merge-currentHeaderBackground: rgba(64, 200, 174, 0.5); ---vscode-merge-incomingContentBackground: rgba(64, 166, 255, 0.2); ---vscode-merge-incomingHeaderBackground: rgba(64, 166, 255, 0.5); ---vscode-mergeEditor-change-background: rgba(155, 185, 85, 0.2); ---vscode-mergeEditor-change-word-background: rgba(156, 204, 44, 0.2); ---vscode-mergeEditor-changeBase-background: #4b1818; ---vscode-mergeEditor-changeBase-word-background: #6f1313; ---vscode-mergeEditor-conflict-handled-minimapOverViewRuler: rgba(173, 172, 168, 0.93); ---vscode-mergeEditor-conflict-handledFocused-border: rgba(193, 193, 193, 0.8); ---vscode-mergeEditor-conflict-handledUnfocused-border: rgba(134, 134, 134, 0.29); ---vscode-mergeEditor-conflict-input1-background: rgba(64, 200, 174, 0.2); ---vscode-mergeEditor-conflict-input2-background: rgba(64, 166, 255, 0.2); ---vscode-mergeEditor-conflict-unhandled-minimapOverViewRuler: #fcba03; ---vscode-mergeEditor-conflict-unhandledFocused-border: #ffa600; ---vscode-mergeEditor-conflict-unhandledUnfocused-border: rgba(255, 166, 0, 0.48); ---vscode-mergeEditor-conflictingLines-background: rgba(255, 234, 0, 0.28); ---vscode-minimap-chatEditHighlight: rgba(30, 30, 30, 0.6); ---vscode-minimap-errorHighlight: rgba(255, 18, 18, 0.7); ---vscode-minimap-findMatchHighlight: #d18616; ---vscode-minimap-foregroundOpacity: #000000; ---vscode-minimap-infoHighlight: #3794ff; ---vscode-minimap-selectionHighlight: #264f78; ---vscode-minimap-selectionOccurrenceHighlight: #676767; ---vscode-minimap-warningHighlight: #cca700; ---vscode-minimapGutter-addedBackground: #487e02; ---vscode-minimapGutter-deletedBackground: #f14c4c; ---vscode-minimapGutter-modifiedBackground: #1b81a8; ---vscode-minimapSlider-activeBackground: rgba(191, 191, 191, 0.2); ---vscode-minimapSlider-background: rgba(121, 121, 121, 0.2); ---vscode-minimapSlider-hoverBackground: rgba(100, 100, 100, 0.35); ---vscode-multiDiffEditor-background: #1e1e1e; ---vscode-multiDiffEditor-border: rgba(204, 204, 204, 0.2); ---vscode-multiDiffEditor-headerBackground: #262626; ---vscode-notebook-cellBorderColor: #37373d; ---vscode-notebook-cellEditorBackground: #252526; ---vscode-notebook-cellInsertionIndicator: #007fd4; ---vscode-notebook-cellStatusBarItemHoverBackground: rgba(255, 255, 255, 0.15); ---vscode-notebook-cellToolbarSeparator: rgba(128, 128, 128, 0.35); ---vscode-notebook-editorBackground: #1e1e1e; ---vscode-notebook-focusedCellBorder: #007fd4; ---vscode-notebook-focusedEditorBorder: #007fd4; ---vscode-notebook-inactiveFocusedCellBorder: #37373d; ---vscode-notebook-selectedCellBackground: #37373d; ---vscode-notebook-selectedCellBorder: #37373d; ---vscode-notebook-symbolHighlightBackground: rgba(255, 255, 255, 0.04); ---vscode-notebookEditorOverviewRuler-runningCellForeground: #3affa3; ---vscode-notebookScrollbarSlider-activeBackground: rgba(191, 191, 191, 0.4); ---vscode-notebookScrollbarSlider-background: rgba(121, 121, 121, 0.4); ---vscode-notebookScrollbarSlider-hoverBackground: rgba(100, 100, 100, 0.7); ---vscode-notebookStatusErrorIcon-foreground: #f48771; ---vscode-notebookStatusRunningIcon-foreground: #cccccc; ---vscode-notebookStatusSuccessIcon-foreground: #3affa3; ---vscode-notificationCenter-border: #303031; ---vscode-notificationCenterHeader-background: #303031; ---vscode-notificationLink-foreground: #3794ff; ---vscode-notifications-background: #252526; ---vscode-notifications-border: #303031; ---vscode-notifications-foreground: #cccccc; ---vscode-notificationsErrorIcon-foreground: #f14c4c; ---vscode-notificationsInfoIcon-foreground: #3794ff; ---vscode-notificationsWarningIcon-foreground: #cca700; ---vscode-notificationToast-border: #303031; ---vscode-panel-background: #1e1e1e; ---vscode-panel-border: rgba(128, 128, 128, 0.35); ---vscode-panel-dropBorder: #e7e7e7; ---vscode-panelSection-border: rgba(128, 128, 128, 0.35); ---vscode-panelSection-dropBackground: rgba(83, 89, 93, 0.5); ---vscode-panelSectionHeader-background: rgba(128, 128, 128, 0.2); ---vscode-panelStickyScroll-background: #1e1e1e; ---vscode-panelStickyScroll-shadow: #000000; ---vscode-panelTitle-activeBorder: #e7e7e7; ---vscode-panelTitle-activeForeground: #e7e7e7; ---vscode-panelTitle-inactiveForeground: rgba(231, 231, 231, 0.6); ---vscode-panelTitleBadge-background: #007acc; ---vscode-panelTitleBadge-foreground: #ffffff; ---vscode-peekView-border: #3794ff; ---vscode-peekViewEditor-background: #001f33; ---vscode-peekViewEditor-matchHighlightBackground: rgba(255, 143, 0, 0.6); ---vscode-peekViewEditorGutter-background: #001f33; ---vscode-peekViewEditorStickyScroll-background: #001f33; ---vscode-peekViewEditorStickyScrollGutter-background: #001f33; ---vscode-peekViewResult-background: #252526; ---vscode-peekViewResult-fileForeground: #ffffff; ---vscode-peekViewResult-lineForeground: #bbbbbb; ---vscode-peekViewResult-matchHighlightBackground: rgba(234, 92, 0, 0.3); ---vscode-peekViewResult-selectionBackground: rgba(51, 153, 255, 0.2); ---vscode-peekViewResult-selectionForeground: #ffffff; ---vscode-peekViewTitle-background: #252526; ---vscode-peekViewTitleDescription-foreground: rgba(204, 204, 204, 0.7); ---vscode-peekViewTitleLabel-foreground: #ffffff; ---vscode-pickerGroup-border: #3f3f46; ---vscode-pickerGroup-foreground: #3794ff; ---vscode-ports-iconRunningProcessForeground: #369432; ---vscode-problemsErrorIcon-foreground: #f14c4c; ---vscode-problemsInfoIcon-foreground: #3794ff; ---vscode-problemsWarningIcon-foreground: #cca700; ---vscode-profileBadge-background: #4d4d4d; ---vscode-profileBadge-foreground: #ffffff; ---vscode-profiles-sashBorder: rgba(128, 128, 128, 0.35); ---vscode-progressBar-background: #0e70c0; ---vscode-quickInput-background: #252526; ---vscode-quickInput-foreground: #cccccc; ---vscode-quickInputList-focusBackground: #04395e; ---vscode-quickInputList-focusForeground: #ffffff; ---vscode-quickInputList-focusIconForeground: #ffffff; ---vscode-quickInputTitle-background: rgba(255, 255, 255, 0.1); ---vscode-radio-activeBackground: rgba(0, 127, 212, 0.4); ---vscode-radio-activeBorder: #007acc; ---vscode-radio-activeForeground: #ffffff; ---vscode-radio-inactiveBorder: rgba(255, 255, 255, 0.2); ---vscode-radio-inactiveHoverBackground: rgba(90, 93, 94, 0.5); ---vscode-sash-hover-size: 4px; ---vscode-sash-hoverBorder: #007fd4; ---vscode-sash-size: 4px; ---vscode-scmGraph-foreground1: #ffb000; ---vscode-scmGraph-foreground2: #dc267f; ---vscode-scmGraph-foreground3: #994f00; ---vscode-scmGraph-foreground4: #40b0a6; ---vscode-scmGraph-foreground5: #b66dff; ---vscode-scmGraph-historyItemBaseRefColor: #ea5c00; ---vscode-scmGraph-historyItemHoverAdditionsForeground: #81b88b; ---vscode-scmGraph-historyItemHoverDefaultLabelBackground: #4d4d4d; ---vscode-scmGraph-historyItemHoverDefaultLabelForeground: #cccccc; ---vscode-scmGraph-historyItemHoverDeletionsForeground: #c74e39; ---vscode-scmGraph-historyItemHoverLabelForeground: #ffffff; ---vscode-scmGraph-historyItemRefColor: #3794ff; ---vscode-scmGraph-historyItemRemoteRefColor: #b180d7; ---vscode-scrollbar-shadow: #000000; ---vscode-scrollbarSlider-activeBackground: rgba(191, 191, 191, 0.4); ---vscode-scrollbarSlider-background: rgba(121, 121, 121, 0.4); ---vscode-scrollbarSlider-hoverBackground: rgba(100, 100, 100, 0.7); ---vscode-search-resultsInfoForeground: rgba(204, 204, 204, 0.65); ---vscode-searchEditor-findMatchBackground: rgba(234, 92, 0, 0.22); ---vscode-settings-checkboxBackground: #3c3c3c; ---vscode-settings-checkboxBorder: #6b6b6b; ---vscode-settings-checkboxForeground: #f0f0f0; ---vscode-settings-dropdownBackground: #3c3c3c; ---vscode-settings-dropdownBorder: #3c3c3c; ---vscode-settings-dropdownForeground: #f0f0f0; ---vscode-settings-dropdownListBorder: #454545; ---vscode-settings-focusedRowBackground: rgba(42, 45, 46, 0.6); ---vscode-settings-focusedRowBorder: #007fd4; ---vscode-settings-headerBorder: rgba(128, 128, 128, 0.35); ---vscode-settings-headerForeground: #e7e7e7; ---vscode-settings-modifiedItemIndicator: #0c7d9d; ---vscode-settings-numberInputBackground: #3c3c3c; ---vscode-settings-numberInputForeground: #cccccc; ---vscode-settings-rowHoverBackground: rgba(42, 45, 46, 0.3); ---vscode-settings-sashBorder: rgba(128, 128, 128, 0.35); ---vscode-settings-settingsHeaderHoverForeground: rgba(231, 231, 231, 0.7); ---vscode-settings-textInputBackground: #3c3c3c; ---vscode-settings-textInputForeground: #cccccc; ---vscode-sideBar-background: #252526; ---vscode-sideBar-dropBackground: rgba(83, 89, 93, 0.5); ---vscode-sideBarActivityBarTop-border: rgba(204, 204, 204, 0.2); ---vscode-sideBarSectionHeader-background: rgba(0, 0, 0, 0); ---vscode-sideBarSectionHeader-border: rgba(204, 204, 204, 0.2); ---vscode-sideBarStickyScroll-background: #252526; ---vscode-sideBarStickyScroll-shadow: #000000; ---vscode-sideBarTitle-background: #252526; ---vscode-sideBarTitle-foreground: #bbbbbb; ---vscode-sideBySideEditor-horizontalBorder: #444444; ---vscode-sideBySideEditor-verticalBorder: #444444; ---vscode-simpleFindWidget-sashBorder: #454545; ---vscode-statusBar-background: #007acc; ---vscode-statusBar-debuggingBackground: #cc6633; ---vscode-statusBar-debuggingForeground: #ffffff; ---vscode-statusBar-focusBorder: #ffffff; ---vscode-statusBar-foreground: #ffffff; ---vscode-statusBar-noFolderBackground: #68217a; ---vscode-statusBar-noFolderForeground: #ffffff; ---vscode-statusBarItem-activeBackground: rgba(255, 255, 255, 0.18); ---vscode-statusBarItem-compactHoverBackground: rgba(255, 255, 255, 0.2); ---vscode-statusBarItem-errorBackground: #c72e0f; ---vscode-statusBarItem-errorForeground: #ffffff; ---vscode-statusBarItem-errorHoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-errorHoverForeground: #ffffff; ---vscode-statusBarItem-focusBorder: #ffffff; ---vscode-statusBarItem-hoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-hoverForeground: #ffffff; ---vscode-statusBarItem-offlineBackground: #6c1717; ---vscode-statusBarItem-offlineForeground: #ffffff; ---vscode-statusBarItem-offlineHoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-offlineHoverForeground: #ffffff; ---vscode-statusBarItem-prominentBackground: rgba(0, 0, 0, 0.5); ---vscode-statusBarItem-prominentForeground: #ffffff; ---vscode-statusBarItem-prominentHoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-prominentHoverForeground: #ffffff; ---vscode-statusBarItem-remoteBackground: #16825d; ---vscode-statusBarItem-remoteForeground: #ffffff; ---vscode-statusBarItem-remoteHoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-remoteHoverForeground: #ffffff; ---vscode-statusBarItem-warningBackground: #7a6400; ---vscode-statusBarItem-warningForeground: #ffffff; ---vscode-statusBarItem-warningHoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-warningHoverForeground: #ffffff; ---vscode-symbolIcon-arrayForeground: #cccccc; ---vscode-symbolIcon-booleanForeground: #cccccc; ---vscode-symbolIcon-classForeground: #ee9d28; ---vscode-symbolIcon-colorForeground: #cccccc; ---vscode-symbolIcon-constantForeground: #cccccc; ---vscode-symbolIcon-constructorForeground: #b180d7; ---vscode-symbolIcon-enumeratorForeground: #ee9d28; ---vscode-symbolIcon-enumeratorMemberForeground: #75beff; ---vscode-symbolIcon-eventForeground: #ee9d28; ---vscode-symbolIcon-fieldForeground: #75beff; ---vscode-symbolIcon-fileForeground: #cccccc; ---vscode-symbolIcon-folderForeground: #cccccc; ---vscode-symbolIcon-functionForeground: #b180d7; ---vscode-symbolIcon-interfaceForeground: #75beff; ---vscode-symbolIcon-keyForeground: #cccccc; ---vscode-symbolIcon-keywordForeground: #cccccc; ---vscode-symbolIcon-methodForeground: #b180d7; ---vscode-symbolIcon-moduleForeground: #cccccc; ---vscode-symbolIcon-namespaceForeground: #cccccc; ---vscode-symbolIcon-nullForeground: #cccccc; ---vscode-symbolIcon-numberForeground: #cccccc; ---vscode-symbolIcon-objectForeground: #cccccc; ---vscode-symbolIcon-operatorForeground: #cccccc; ---vscode-symbolIcon-packageForeground: #cccccc; ---vscode-symbolIcon-propertyForeground: #cccccc; ---vscode-symbolIcon-referenceForeground: #cccccc; ---vscode-symbolIcon-snippetForeground: #cccccc; ---vscode-symbolIcon-stringForeground: #cccccc; ---vscode-symbolIcon-structForeground: #cccccc; ---vscode-symbolIcon-textForeground: #cccccc; ---vscode-symbolIcon-typeParameterForeground: #cccccc; ---vscode-symbolIcon-unitForeground: #cccccc; ---vscode-symbolIcon-variableForeground: #75beff; ---vscode-tab-activeBackground: #1e1e1e; ---vscode-tab-activeForeground: #ffffff; ---vscode-tab-activeModifiedBorder: #3399cc; ---vscode-tab-border: #252526; ---vscode-tab-dragAndDropBorder: #ffffff; ---vscode-tab-inactiveBackground: #2d2d2d; ---vscode-tab-inactiveForeground: rgba(255, 255, 255, 0.5); ---vscode-tab-inactiveModifiedBorder: rgba(51, 153, 204, 0.5); ---vscode-tab-lastPinnedBorder: rgba(204, 204, 204, 0.2); ---vscode-tab-selectedBackground: #222222; ---vscode-tab-selectedForeground: rgba(255, 255, 255, 0.63); ---vscode-tab-unfocusedActiveBackground: #1e1e1e; ---vscode-tab-unfocusedActiveForeground: rgba(255, 255, 255, 0.5); ---vscode-tab-unfocusedActiveModifiedBorder: rgba(51, 153, 204, 0.5); ---vscode-tab-unfocusedInactiveBackground: #2d2d2d; ---vscode-tab-unfocusedInactiveForeground: rgba(255, 255, 255, 0.25); ---vscode-tab-unfocusedInactiveModifiedBorder: rgba(51, 153, 204, 0.25); ---vscode-terminal-ansiBlack: #000000; ---vscode-terminal-ansiBlue: #2472c8; ---vscode-terminal-ansiBrightBlack: #666666; ---vscode-terminal-ansiBrightBlue: #3b8eea; ---vscode-terminal-ansiBrightCyan: #29b8db; ---vscode-terminal-ansiBrightGreen: #23d18b; ---vscode-terminal-ansiBrightMagenta: #d670d6; ---vscode-terminal-ansiBrightRed: #f14c4c; ---vscode-terminal-ansiBrightWhite: #e5e5e5; ---vscode-terminal-ansiBrightYellow: #f5f543; ---vscode-terminal-ansiCyan: #11a8cd; ---vscode-terminal-ansiGreen: #0dbc79; ---vscode-terminal-ansiMagenta: #bc3fbc; ---vscode-terminal-ansiRed: #cd3131; ---vscode-terminal-ansiWhite: #e5e5e5; ---vscode-terminal-ansiYellow: #e5e510; ---vscode-terminal-border: rgba(128, 128, 128, 0.35); ---vscode-terminal-dropBackground: rgba(83, 89, 93, 0.5); ---vscode-terminal-findMatchBackground: #515c6a; ---vscode-terminal-findMatchHighlightBackground: rgba(234, 92, 0, 0.33); ---vscode-terminal-foreground: #cccccc; ---vscode-terminal-hoverHighlightBackground: rgba(38, 79, 120, 0.13); ---vscode-terminal-inactiveSelectionBackground: #3a3d41; ---vscode-terminal-initialHintForeground: rgba(255, 255, 255, 0.34); ---vscode-terminal-selectionBackground: #264f78; ---vscode-terminalCommandDecoration-defaultBackground: rgba(255, 255, 255, 0.25); ---vscode-terminalCommandDecoration-errorBackground: #f14c4c; ---vscode-terminalCommandDecoration-successBackground: #1b81a8; ---vscode-terminalCommandGuide-foreground: #37373d; ---vscode-terminalOverviewRuler-border: rgba(127, 127, 127, 0.3); ---vscode-terminalOverviewRuler-cursorForeground: rgba(160, 160, 160, 0.8); ---vscode-terminalOverviewRuler-findMatchForeground: rgba(209, 134, 22, 0.49); ---vscode-terminalStickyScrollHover-background: #2a2d2e; ---vscode-terminalSymbolIcon-aliasForeground: #b180d7; ---vscode-terminalSymbolIcon-argumentForeground: #75beff; ---vscode-terminalSymbolIcon-fileForeground: #cccccc; ---vscode-terminalSymbolIcon-flagForeground: #ee9d28; ---vscode-terminalSymbolIcon-folderForeground: #cccccc; ---vscode-terminalSymbolIcon-methodForeground: #b180d7; ---vscode-terminalSymbolIcon-optionForeground: #ee9d28; ---vscode-terminalSymbolIcon-optionValueForeground: #75beff; ---vscode-terminalSymbolIcon-symbolicLinkFileForeground: #cccccc; ---vscode-terminalSymbolIcon-symbolicLinkFolderForeground: #cccccc; ---vscode-testing-coverCountBadgeBackground: #4d4d4d; ---vscode-testing-coverCountBadgeForeground: #ffffff; ---vscode-testing-coveredBackground: rgba(156, 204, 44, 0.2); ---vscode-testing-coveredBorder: rgba(156, 204, 44, 0.15); ---vscode-testing-coveredGutterBackground: rgba(156, 204, 44, 0.12); ---vscode-testing-iconErrored: #f14c4c; ---vscode-testing-iconErrored-retired: rgba(241, 76, 76, 0.7); ---vscode-testing-iconFailed: #f14c4c; ---vscode-testing-iconFailed-retired: rgba(241, 76, 76, 0.7); ---vscode-testing-iconPassed: #73c991; ---vscode-testing-iconPassed-retired: rgba(115, 201, 145, 0.7); ---vscode-testing-iconQueued: #cca700; ---vscode-testing-iconQueued-retired: rgba(204, 167, 0, 0.7); ---vscode-testing-iconSkipped: #848484; ---vscode-testing-iconSkipped-retired: rgba(132, 132, 132, 0.7); ---vscode-testing-iconUnset: #848484; ---vscode-testing-iconUnset-retired: rgba(132, 132, 132, 0.7); ---vscode-testing-message-error-badgeBackground: #f14c4c; ---vscode-testing-message-error-badgeBorder: #f14c4c; ---vscode-testing-message-error-badgeForeground: #000000; ---vscode-testing-message-info-decorationForeground: rgba(212, 212, 212, 0.5); ---vscode-testing-messagePeekBorder: #3794ff; ---vscode-testing-messagePeekHeaderBackground: rgba(55, 148, 255, 0.1); ---vscode-testing-peekBorder: #f14c4c; ---vscode-testing-peekHeaderBackground: rgba(241, 76, 76, 0.1); ---vscode-testing-runAction: #73c991; ---vscode-testing-uncoveredBackground: rgba(255, 0, 0, 0.2); ---vscode-testing-uncoveredBorder: rgba(255, 0, 0, 0.15); ---vscode-testing-uncoveredBranchBackground: #781212; ---vscode-testing-uncoveredGutterBackground: rgba(255, 0, 0, 0.3); ---vscode-textBlockQuote-background: #222222; ---vscode-textBlockQuote-border: rgba(0, 122, 204, 0.5); ---vscode-textCodeBlock-background: rgba(10, 10, 10, 0.4); ---vscode-textLink-activeForeground: #3794ff; ---vscode-textLink-foreground: #3794ff; ---vscode-textPreformat-background: rgba(255, 255, 255, 0.1); ---vscode-textPreformat-foreground: #d7ba7d; ---vscode-textSeparator-foreground: rgba(255, 255, 255, 0.18); ---vscode-titleBar-activeBackground: #3c3c3c; ---vscode-titleBar-activeForeground: #cccccc; ---vscode-titleBar-inactiveBackground: rgba(60, 60, 60, 0.6); ---vscode-titleBar-inactiveForeground: rgba(204, 204, 204, 0.6); ---vscode-toolbar-activeBackground: rgba(99, 102, 103, 0.31); ---vscode-toolbar-hoverBackground: rgba(90, 93, 94, 0.31); ---vscode-tree-inactiveIndentGuidesStroke: rgba(88, 88, 88, 0.4); ---vscode-tree-indentGuidesStroke: #585858; ---vscode-tree-tableColumnsBorder: rgba(204, 204, 204, 0.13); ---vscode-tree-tableOddRowsBackground: rgba(204, 204, 204, 0.04); ---vscode-walkThrough-embeddedEditorBackground: rgba(0, 0, 0, 0.4); ---vscode-walkthrough-stepTitle-foreground: #ffffff; ---vscode-welcomePage-progress-background: #3c3c3c; ---vscode-welcomePage-progress-foreground: #3794ff; ---vscode-welcomePage-tileBackground: #252526; ---vscode-welcomePage-tileBorder: rgba(255, 255, 255, 0.1); ---vscode-welcomePage-tileHoverBackground: #2c2c2d; ---vscode-widget-border: #303031; ---vscode-widget-shadow: rgba(0, 0, 0, 0.36); ---z-index-notebook-cell-bottom-toolbar-container: 28; ---z-index-notebook-cell-editor-outline: 20; ---z-index-notebook-cell-expand-part-button: 36; ---z-index-notebook-cell-output-toolbar: 30; ---z-index-notebook-cell-status: 26; ---z-index-notebook-cell-toolbar: 37; ---z-index-notebook-cell-toolbar-dropdown-active: 38; ---z-index-notebook-diff-view-viewport-slider: 10; ---z-index-notebook-folding-indicator: 26; ---z-index-notebook-input-collapse-condicon: 29; ---z-index-notebook-list-insertion-indicator: 10; ---z-index-notebook-output: 27; ---z-index-notebook-progress-bar: 5; ---z-index-notebook-run-button-container: 29; ---z-index-notebook-scrollbar: 25; diff --git a/apps/storybook/generated-theme-styles/light-modern.css b/apps/storybook/generated-theme-styles/light-modern.css deleted file mode 100644 index 4bd7a6b5e0..0000000000 --- a/apps/storybook/generated-theme-styles/light-modern.css +++ /dev/null @@ -1,810 +0,0 @@ -/* All CSS Variables - Auto-extracted from VS Code via Playwright */ -/* Generated on 2025-08-06T16:48:15.326Z */ - ---chat-editing-last-edit-shift: 100%; ---dropdown-padding-bottom: 4px; ---dropdown-padding-top: 3px; ---guide-color: rgba(123, 56, 20, 0.3); ---guide-color-active: #7b3814; ---indent-color: #d3d3d3; ---indent-color-active: #939393; ---inline-chat-frame-progress: 0%; ---monaco-editor-error-decoration: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%206%203'%20enable-background%3D'new%200%200%206%203'%20height%3D'3'%20width%3D'6'%3E%3Cg%20fill%3D'%23e51400'%3E%3Cpolygon%20points%3D'5.5%2C0%202.5%2C3%201.1%2C3%204.1%2C0'%2F%3E%3Cpolygon%20points%3D'4%2C0%206%2C2%206%2C0.6%205.4%2C0'%2F%3E%3Cpolygon%20points%3D'0%2C2%201%2C3%202.4%2C3%200%2C0.6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); ---monaco-editor-hint-decoration: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%223%22%20width%3D%2212%22%3E%3Cg%20fill%3D%22%236c6c6c%22%3E%3Ccircle%20cx%3D%221%22%20cy%3D%221%22%20r%3D%221%22%2F%3E%3Ccircle%20cx%3D%225%22%20cy%3D%221%22%20r%3D%221%22%2F%3E%3Ccircle%20cx%3D%229%22%20cy%3D%221%22%20r%3D%221%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); ---monaco-editor-info-decoration: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%206%203'%20enable-background%3D'new%200%200%206%203'%20height%3D'3'%20width%3D'6'%3E%3Cg%20fill%3D'%231a85ff'%3E%3Cpolygon%20points%3D'5.5%2C0%202.5%2C3%201.1%2C3%204.1%2C0'%2F%3E%3Cpolygon%20points%3D'4%2C0%206%2C2%206%2C0.6%205.4%2C0'%2F%3E%3Cpolygon%20points%3D'0%2C2%201%2C3%202.4%2C3%200%2C0.6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); ---monaco-editor-unnecessary-decoration-opacity: 0.467; ---monaco-editor-warning-decoration: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%206%203'%20enable-background%3D'new%200%200%206%203'%20height%3D'3'%20width%3D'6'%3E%3Cg%20fill%3D'%23bf8803'%3E%3Cpolygon%20points%3D'5.5%2C0%202.5%2C3%201.1%2C3%204.1%2C0'%2F%3E%3Cpolygon%20points%3D'4%2C0%206%2C2%206%2C0.6%205.4%2C0'%2F%3E%3Cpolygon%20points%3D'0%2C2%201%2C3%202.4%2C3%200%2C0.6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); ---monaco-monospace-font: "Ubuntu Mono", "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace; ---notebook-find-horizontal-padding: 4px; ---notebook-find-width: 419px; ---text-link-decoration: underline; ---vscode-actionBar-toggledBackground: #dddddd; ---vscode-activityBar-activeBorder: #ffffff; ---vscode-activityBar-background: #2c2c2c; ---vscode-activityBar-dropBorder: #ffffff; ---vscode-activityBar-foreground: #ffffff; ---vscode-activityBar-inactiveForeground: rgba(255, 255, 255, 0.4); ---vscode-activityBarBadge-background: #007acc; ---vscode-activityBarBadge-foreground: #ffffff; ---vscode-activityBarTop-activeBorder: #424242; ---vscode-activityBarTop-dropBorder: #424242; ---vscode-activityBarTop-foreground: #424242; ---vscode-activityBarTop-inactiveForeground: rgba(66, 66, 66, 0.75); ---vscode-activityErrorBadge-background: #e51400; ---vscode-activityErrorBadge-foreground: #ffffff; ---vscode-activityWarningBadge-background: #bf8803; ---vscode-activityWarningBadge-foreground: #ffffff; ---vscode-badge-background: #c4c4c4; ---vscode-badge-foreground: #333333; ---vscode-banner-background: #004386; ---vscode-banner-foreground: #ffffff; ---vscode-banner-iconForeground: #1a85ff; ---vscode-breadcrumb-activeSelectionForeground: #4e4e4e; ---vscode-breadcrumb-background: #ffffff; ---vscode-breadcrumb-focusForeground: #4e4e4e; ---vscode-breadcrumb-foreground: rgba(97, 97, 97, 0.8); ---vscode-breadcrumbPicker-background: #f3f3f3; ---vscode-button-background: #007acc; ---vscode-button-foreground: #ffffff; ---vscode-button-hoverBackground: #0062a3; ---vscode-button-secondaryBackground: #5f6a79; ---vscode-button-secondaryForeground: #ffffff; ---vscode-button-secondaryHoverBackground: #4c5561; ---vscode-button-separator: rgba(255, 255, 255, 0.4); ---vscode-chart-axis: rgba(0, 0, 0, 0.6); ---vscode-chart-guide: rgba(0, 0, 0, 0.2); ---vscode-chart-line: #236b8e; ---vscode-charts-blue: #1a85ff; ---vscode-charts-foreground: #616161; ---vscode-charts-green: #388a34; ---vscode-charts-lines: rgba(97, 97, 97, 0.5); ---vscode-charts-orange: #d18616; ---vscode-charts-purple: #652d90; ---vscode-charts-red: #e51400; ---vscode-charts-yellow: #bf8803; ---vscode-chat-avatarBackground: #f2f2f2; ---vscode-chat-avatarForeground: #616161; ---vscode-chat-editedFileForeground: #895503; ---vscode-chat-linesAddedForeground: #107c10; ---vscode-chat-linesRemovedForeground: #bc2f32; ---vscode-chat-requestBackground: rgba(255, 255, 255, 0.62); ---vscode-chat-requestBorder: rgba(0, 0, 0, 0.1); ---vscode-chat-requestBubbleBackground: rgba(173, 214, 255, 0.3); ---vscode-chat-requestBubbleHoverBackground: #add6ff; ---vscode-chat-requestCodeBorder: rgba(14, 99, 156, 0.25); ---vscode-chat-slashCommandBackground: rgba(173, 206, 255, 0.48); ---vscode-chat-slashCommandForeground: #26569e; ---vscode-checkbox-background: #ffffff; ---vscode-checkbox-border: #919191; ---vscode-checkbox-disabled-background: #cacaca; ---vscode-checkbox-disabled-foreground: #959595; ---vscode-checkbox-foreground: #616161; ---vscode-checkbox-selectBackground: #f3f3f3; ---vscode-checkbox-selectBorder: #424242; ---vscode-commandCenter-activeBackground: rgba(0, 0, 0, 0.08); ---vscode-commandCenter-activeBorder: rgba(51, 51, 51, 0.3); ---vscode-commandCenter-activeForeground: #333333; ---vscode-commandCenter-background: rgba(0, 0, 0, 0.05); ---vscode-commandCenter-border: rgba(51, 51, 51, 0.2); ---vscode-commandCenter-debuggingBackground: rgba(204, 102, 51, 0.26); ---vscode-commandCenter-foreground: #333333; ---vscode-commandCenter-inactiveBorder: rgba(51, 51, 51, 0.15); ---vscode-commandCenter-inactiveForeground: rgba(51, 51, 51, 0.6); ---vscode-commentsView-resolvedIcon: rgba(97, 97, 97, 0.5); ---vscode-commentsView-unresolvedIcon: #0090f1; ---vscode-debug-ansi-terminal-ansiBlack: #000000; ---vscode-debug-ansi-terminal-ansiBlue: #0451a5; ---vscode-debug-ansi-terminal-ansiBrightBlack: #666666; ---vscode-debug-ansi-terminal-ansiBrightBlue: #0451a5; ---vscode-debug-ansi-terminal-ansiBrightCyan: #037a98; ---vscode-debug-ansi-terminal-ansiBrightGreen: #0c860c; ---vscode-debug-ansi-terminal-ansiBrightMagenta: #bc05bc; ---vscode-debug-ansi-terminal-ansiBrightRed: #cd3131; ---vscode-debug-ansi-terminal-ansiBrightWhite: #777777; ---vscode-debug-ansi-terminal-ansiBrightYellow: #757900; ---vscode-debug-ansi-terminal-ansiCyan: #037a98; ---vscode-debug-ansi-terminal-ansiGreen: #107c10; ---vscode-debug-ansi-terminal-ansiMagenta: #bc05bc; ---vscode-debug-ansi-terminal-ansiRed: #cd3131; ---vscode-debug-ansi-terminal-ansiWhite: #555555; ---vscode-debug-ansi-terminal-ansiYellow: #777a00; ---vscode-debugConsole-errorForeground: #a1260d; ---vscode-debugConsole-infoForeground: #1a85ff; ---vscode-debugConsole-sourceForeground: #616161; ---vscode-debugConsole-warningForeground: #bf8803; ---vscode-debugConsoleInputIcon-foreground: #616161; ---vscode-debugExceptionWidget-background: #f1dfde; ---vscode-debugExceptionWidget-border: #a31515; ---vscode-debugIcon-breakpointCurrentStackframeForeground: #be8700; ---vscode-debugIcon-breakpointDisabledForeground: #848484; ---vscode-debugIcon-breakpointForeground: #e51400; ---vscode-debugIcon-breakpointStackframeForeground: #3affa3; ---vscode-debugIcon-breakpointUnverifiedForeground: #848484; ---vscode-debugIcon-continueForeground: #007acc; ---vscode-debugIcon-disconnectForeground: #a1260d; ---vscode-debugIcon-pauseForeground: #007acc; ---vscode-debugIcon-restartForeground: #388a34; ---vscode-debugIcon-startForeground: #388a34; ---vscode-debugIcon-stepBackForeground: #007acc; ---vscode-debugIcon-stepIntoForeground: #007acc; ---vscode-debugIcon-stepOutForeground: #007acc; ---vscode-debugIcon-stepOverForeground: #007acc; ---vscode-debugIcon-stopForeground: #a1260d; ---vscode-debugTokenExpression-boolean: #0000ff; ---vscode-debugTokenExpression-error: #e51400; ---vscode-debugTokenExpression-name: #9b46b0; ---vscode-debugTokenExpression-number: #098658; ---vscode-debugTokenExpression-string: #a31515; ---vscode-debugTokenExpression-type: #4a90e2; ---vscode-debugTokenExpression-value: rgba(108, 108, 108, 0.8); ---vscode-debugToolBar-background: #f3f3f3; ---vscode-debugView-exceptionLabelBackground: #a31515; ---vscode-debugView-exceptionLabelForeground: #ffffff; ---vscode-debugView-stateLabelBackground: rgba(136, 136, 136, 0.27); ---vscode-debugView-stateLabelForeground: #616161; ---vscode-debugView-valueChangedHighlight: #569cd6; ---vscode-descriptionForeground: #717171; ---vscode-diffEditor-diagonalFill: rgba(34, 34, 34, 0.2); ---vscode-diffEditor-insertedLineBackground: rgba(155, 185, 85, 0.2); ---vscode-diffEditor-insertedTextBackground: rgba(156, 204, 44, 0.25); ---vscode-diffEditor-move-border: rgba(139, 139, 139, 0.61); ---vscode-diffEditor-moveActive-border: #ffa500; ---vscode-diffEditor-removedLineBackground: rgba(255, 0, 0, 0.2); ---vscode-diffEditor-removedTextBackground: rgba(255, 0, 0, 0.2); ---vscode-diffEditor-unchangedCodeBackground: rgba(184, 184, 184, 0.16); ---vscode-diffEditor-unchangedRegionBackground: #f8f8f8; ---vscode-diffEditor-unchangedRegionForeground: #616161; ---vscode-diffEditor-unchangedRegionShadow: rgba(115, 115, 115, 0.75); ---vscode-disabledForeground: rgba(97, 97, 97, 0.5); ---vscode-dropdown-background: #ffffff; ---vscode-dropdown-border: #cecece; ---vscode-dropdown-foreground: #616161; ---vscode-editor-background: #ffffff; ---vscode-editor-compositionBorder: #000000; ---vscode-editor-findMatchBackground: #a8ac94; ---vscode-editor-findMatchHighlightBackground: rgba(234, 92, 0, 0.33); ---vscode-editor-findRangeHighlightBackground: rgba(180, 180, 180, 0.3); ---vscode-editor-focusedStackFrameHighlightBackground: rgba(206, 231, 206, 0.45); ---vscode-editor-foldBackground: rgba(173, 214, 255, 0.3); ---vscode-editor-foldPlaceholderForeground: #808080; ---vscode-editor-foreground: #000000; ---vscode-editor-hoverHighlightBackground: rgba(173, 214, 255, 0.15); ---vscode-editor-inactiveSelectionBackground: #e5ebf1; ---vscode-editor-inlineValuesBackground: rgba(255, 200, 0, 0.2); ---vscode-editor-inlineValuesForeground: rgba(0, 0, 0, 0.5); ---vscode-editor-lineHighlightBorder: #eeeeee; ---vscode-editor-linkedEditingBackground: rgba(255, 0, 0, 0.3); ---vscode-editor-placeholder-foreground: rgba(0, 0, 0, 0.47); ---vscode-editor-rangeHighlightBackground: rgba(253, 255, 0, 0.2); ---vscode-editor-selectionBackground: #add6ff; ---vscode-editor-selectionHighlightBackground: rgba(173, 214, 255, 0.5); ---vscode-editor-snippetFinalTabstopHighlightBorder: rgba(10, 50, 100, 0.5); ---vscode-editor-snippetTabstopHighlightBackground: rgba(10, 50, 100, 0.2); ---vscode-editor-stackFrameHighlightBackground: rgba(255, 255, 102, 0.45); ---vscode-editor-symbolHighlightBackground: rgba(234, 92, 0, 0.33); ---vscode-editor-wordHighlightBackground: rgba(87, 87, 87, 0.25); ---vscode-editor-wordHighlightStrongBackground: rgba(14, 99, 156, 0.25); ---vscode-editor-wordHighlightTextBackground: rgba(87, 87, 87, 0.25); ---vscode-editorActionList-background: #f3f3f3; ---vscode-editorActionList-focusBackground: #0060c0; ---vscode-editorActionList-focusForeground: #ffffff; ---vscode-editorActionList-foreground: #616161; ---vscode-editorActiveLineNumber-foreground: #0b216f; ---vscode-editorBracketHighlight-foreground1: #0431fa; ---vscode-editorBracketHighlight-foreground2: #319331; ---vscode-editorBracketHighlight-foreground3: #7b3814; ---vscode-editorBracketHighlight-foreground4: rgba(0, 0, 0, 0); ---vscode-editorBracketHighlight-foreground5: rgba(0, 0, 0, 0); ---vscode-editorBracketHighlight-foreground6: rgba(0, 0, 0, 0); ---vscode-editorBracketHighlight-unexpectedBracket-foreground: rgba(255, 18, 18, 0.8); ---vscode-editorBracketMatch-background: rgba(0, 100, 0, 0.1); ---vscode-editorBracketMatch-border: #b9b9b9; ---vscode-editorBracketPairGuide-activeBackground1: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-activeBackground2: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-activeBackground3: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-activeBackground4: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-activeBackground5: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-activeBackground6: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background1: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background2: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background3: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background4: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background5: rgba(0, 0, 0, 0); ---vscode-editorBracketPairGuide-background6: rgba(0, 0, 0, 0); ---vscode-editorCodeLens-foreground: #919191; ---vscode-editorCommentsWidget-rangeActiveBackground: rgba(0, 144, 241, 0.1); ---vscode-editorCommentsWidget-rangeBackground: rgba(0, 144, 241, 0.1); ---vscode-editorCommentsWidget-replyInputBackground: #f3f3f3; ---vscode-editorCommentsWidget-resolvedBorder: rgba(97, 97, 97, 0.5); ---vscode-editorCommentsWidget-unresolvedBorder: #0090f1; ---vscode-editorCursor-foreground: #000000; ---vscode-editorError-foreground: #e51400; ---vscode-editorGhostText-foreground: rgba(0, 0, 0, 0.47); ---vscode-editorGroup-border: #e7e7e7; ---vscode-editorGroup-dropBackground: rgba(38, 119, 203, 0.18); ---vscode-editorGroup-dropIntoPromptBackground: #f3f3f3; ---vscode-editorGroup-dropIntoPromptForeground: #616161; ---vscode-editorGroupHeader-noTabsBackground: #ffffff; ---vscode-editorGroupHeader-tabsBackground: #f3f3f3; ---vscode-editorGutter-addedBackground: #48985d; ---vscode-editorGutter-addedSecondaryBackground: #a7d5b3; ---vscode-editorGutter-background: #ffffff; ---vscode-editorGutter-commentGlyphForeground: #000000; ---vscode-editorGutter-commentRangeForeground: #d5d8e9; ---vscode-editorGutter-commentUnresolvedGlyphForeground: #000000; ---vscode-editorGutter-deletedBackground: #e51400; ---vscode-editorGutter-deletedSecondaryBackground: #ff3d2b; ---vscode-editorGutter-foldingControlForeground: #424242; ---vscode-editorGutter-itemBackground: #d5d8e9; ---vscode-editorGutter-itemGlyphForeground: #000000; ---vscode-editorGutter-modifiedBackground: #2090d3; ---vscode-editorGutter-modifiedSecondaryBackground: #aad8f2; ---vscode-editorHint-foreground: #6c6c6c; ---vscode-editorHoverWidget-background: #f3f3f3; ---vscode-editorHoverWidget-border: #c8c8c8; ---vscode-editorHoverWidget-foreground: #616161; ---vscode-editorHoverWidget-highlightForeground: #0066bf; ---vscode-editorHoverWidget-statusBarBackground: #e7e7e7; ---vscode-editorIndentGuide-activeBackground: rgba(51, 51, 51, 0.2); ---vscode-editorIndentGuide-activeBackground1: #939393; ---vscode-editorIndentGuide-activeBackground2: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-activeBackground3: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-activeBackground4: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-activeBackground5: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-activeBackground6: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-background: rgba(51, 51, 51, 0.2); ---vscode-editorIndentGuide-background1: #d3d3d3; ---vscode-editorIndentGuide-background2: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-background3: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-background4: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-background5: rgba(0, 0, 0, 0); ---vscode-editorIndentGuide-background6: rgba(0, 0, 0, 0); ---vscode-editorInfo-foreground: #1a85ff; ---vscode-editorInlayHint-background: rgba(196, 196, 196, 0.1); ---vscode-editorInlayHint-foreground: #969696; ---vscode-editorInlayHint-parameterBackground: rgba(196, 196, 196, 0.1); ---vscode-editorInlayHint-parameterForeground: #969696; ---vscode-editorInlayHint-typeBackground: rgba(196, 196, 196, 0.1); ---vscode-editorInlayHint-typeForeground: #969696; ---vscode-editorLightBulb-foreground: #ddb100; ---vscode-editorLightBulbAi-foreground: #ddb100; ---vscode-editorLightBulbAutoFix-foreground: #007acc; ---vscode-editorLineNumber-activeForeground: #0b216f; ---vscode-editorLineNumber-foreground: #237893; ---vscode-editorLink-activeForeground: #0000ff; ---vscode-editorMarkerNavigation-background: #ffffff; ---vscode-editorMarkerNavigationError-background: #e51400; ---vscode-editorMarkerNavigationError-headerBackground: rgba(229, 20, 0, 0.1); ---vscode-editorMarkerNavigationInfo-background: #1a85ff; ---vscode-editorMarkerNavigationInfo-headerBackground: rgba(26, 133, 255, 0.1); ---vscode-editorMarkerNavigationWarning-background: #bf8803; ---vscode-editorMarkerNavigationWarning-headerBackground: rgba(191, 136, 3, 0.1); ---vscode-editorMinimap-inlineChatInserted: rgba(156, 204, 44, 0.2); ---vscode-editorMultiCursor-primary-foreground: #000000; ---vscode-editorMultiCursor-secondary-foreground: #000000; ---vscode-editorOverviewRuler-addedForeground: rgba(72, 152, 93, 0.6); ---vscode-editorOverviewRuler-border: rgba(127, 127, 127, 0.3); ---vscode-editorOverviewRuler-bracketMatchForeground: #a0a0a0; ---vscode-editorOverviewRuler-commentForeground: #d5d8e9; ---vscode-editorOverviewRuler-commentUnresolvedForeground: #d5d8e9; ---vscode-editorOverviewRuler-commonContentForeground: rgba(96, 96, 96, 0.4); ---vscode-editorOverviewRuler-currentContentForeground: rgba(64, 200, 174, 0.5); ---vscode-editorOverviewRuler-deletedForeground: rgba(229, 20, 0, 0.6); ---vscode-editorOverviewRuler-errorForeground: rgba(255, 18, 18, 0.7); ---vscode-editorOverviewRuler-findMatchForeground: rgba(209, 134, 22, 0.49); ---vscode-editorOverviewRuler-incomingContentForeground: rgba(64, 166, 255, 0.5); ---vscode-editorOverviewRuler-infoForeground: #1a85ff; ---vscode-editorOverviewRuler-inlineChatInserted: rgba(156, 204, 44, 0.2); ---vscode-editorOverviewRuler-inlineChatRemoved: rgba(255, 0, 0, 0.16); ---vscode-editorOverviewRuler-modifiedForeground: rgba(32, 144, 211, 0.6); ---vscode-editorOverviewRuler-rangeHighlightForeground: rgba(0, 122, 204, 0.6); ---vscode-editorOverviewRuler-selectionHighlightForeground: rgba(160, 160, 160, 0.8); ---vscode-editorOverviewRuler-warningForeground: #bf8803; ---vscode-editorOverviewRuler-wordHighlightForeground: rgba(160, 160, 160, 0.8); ---vscode-editorOverviewRuler-wordHighlightStrongForeground: rgba(192, 160, 192, 0.8); ---vscode-editorOverviewRuler-wordHighlightTextForeground: rgba(160, 160, 160, 0.8); ---vscode-editorPane-background: #ffffff; ---vscode-editorRuler-foreground: #d3d3d3; ---vscode-editorStickyScroll-background: #ffffff; ---vscode-editorStickyScroll-shadow: #dddddd; ---vscode-editorStickyScrollGutter-background: #ffffff; ---vscode-editorStickyScrollHover-background: #f0f0f0; ---vscode-editorSuggestWidget-background: #f3f3f3; ---vscode-editorSuggestWidget-border: #c8c8c8; ---vscode-editorSuggestWidget-focusHighlightForeground: #bbe7ff; ---vscode-editorSuggestWidget-foreground: #000000; ---vscode-editorSuggestWidget-highlightForeground: #0066bf; ---vscode-editorSuggestWidget-selectedBackground: #0060c0; ---vscode-editorSuggestWidget-selectedForeground: #ffffff; ---vscode-editorSuggestWidget-selectedIconForeground: #ffffff; ---vscode-editorSuggestWidgetStatus-foreground: rgba(0, 0, 0, 0.5); ---vscode-editorUnicodeHighlight-border: #bf8803; ---vscode-editorUnnecessaryCode-opacity: rgba(0, 0, 0, 0.47); ---vscode-editorWarning-foreground: #bf8803; ---vscode-editorWatermark-foreground: rgba(0, 0, 0, 0.68); ---vscode-editorWhitespace-foreground: rgba(51, 51, 51, 0.2); ---vscode-editorWidget-background: #f3f3f3; ---vscode-editorWidget-border: #c8c8c8; ---vscode-editorWidget-foreground: #616161; ---vscode-errorForeground: #a1260d; ---vscode-extensionBadge-remoteBackground: #007acc; ---vscode-extensionBadge-remoteForeground: #ffffff; ---vscode-extensionButton-background: #007acc; ---vscode-extensionButton-foreground: #ffffff; ---vscode-extensionButton-hoverBackground: #0062a3; ---vscode-extensionButton-prominentBackground: #007acc; ---vscode-extensionButton-prominentForeground: #ffffff; ---vscode-extensionButton-prominentHoverBackground: #0062a3; ---vscode-extensionButton-separator: rgba(255, 255, 255, 0.4); ---vscode-extensionIcon-preReleaseForeground: #1d9271; ---vscode-extensionIcon-privateForeground: rgba(0, 0, 0, 0.38); ---vscode-extensionIcon-sponsorForeground: #b51e78; ---vscode-extensionIcon-starForeground: #df6100; ---vscode-extensionIcon-verifiedForeground: #006ab1; ---vscode-focusBorder: #0090f1; ---vscode-foreground: #616161; ---vscode-gauge-background: #007acc; ---vscode-gauge-errorBackground: #be1100; ---vscode-gauge-errorForeground: rgba(190, 17, 0, 0.3); ---vscode-gauge-foreground: rgba(0, 122, 204, 0.3); ---vscode-gauge-warningBackground: #b89500; ---vscode-gauge-warningForeground: rgba(184, 149, 0, 0.3); ---vscode-git-blame-editorDecorationForeground: #969696; ---vscode-gitDecoration-addedResourceForeground: #587c0c; ---vscode-gitDecoration-conflictingResourceForeground: #ad0707; ---vscode-gitDecoration-deletedResourceForeground: #ad0707; ---vscode-gitDecoration-ignoredResourceForeground: #8e8e90; ---vscode-gitDecoration-modifiedResourceForeground: #895503; ---vscode-gitDecoration-renamedResourceForeground: #007100; ---vscode-gitDecoration-stageDeletedResourceForeground: #ad0707; ---vscode-gitDecoration-stageModifiedResourceForeground: #895503; ---vscode-gitDecoration-submoduleResourceForeground: #1258a7; ---vscode-gitDecoration-untrackedResourceForeground: #007100; ---vscode-icon-foreground: #424242; ---vscode-inlineChat-background: #f3f3f3; ---vscode-inlineChat-border: #c8c8c8; ---vscode-inlineChat-foreground: #616161; ---vscode-inlineChat-shadow: rgba(0, 0, 0, 0.16); ---vscode-inlineChatDiff-inserted: rgba(156, 204, 44, 0.13); ---vscode-inlineChatDiff-removed: rgba(255, 0, 0, 0.1); ---vscode-inlineChatInput-background: #ffffff; ---vscode-inlineChatInput-border: #c8c8c8; ---vscode-inlineChatInput-focusBorder: #0090f1; ---vscode-inlineChatInput-placeholderForeground: #767676; ---vscode-inlineEdit-gutterIndicator-background: rgba(95, 95, 95, 0.09); ---vscode-inlineEdit-gutterIndicator-primaryBackground: rgba(0, 122, 204, 0.5); ---vscode-inlineEdit-gutterIndicator-primaryBorder: #007acc; ---vscode-inlineEdit-gutterIndicator-primaryForeground: #ffffff; ---vscode-inlineEdit-gutterIndicator-secondaryBackground: #5f6a79; ---vscode-inlineEdit-gutterIndicator-secondaryBorder: #5f6a79; ---vscode-inlineEdit-gutterIndicator-secondaryForeground: #ffffff; ---vscode-inlineEdit-gutterIndicator-successfulBackground: #007acc; ---vscode-inlineEdit-gutterIndicator-successfulBorder: #007acc; ---vscode-inlineEdit-gutterIndicator-successfulForeground: #ffffff; ---vscode-inlineEdit-modifiedBackground: rgba(156, 204, 44, 0.07); ---vscode-inlineEdit-modifiedBorder: rgba(62, 81, 18, 0.25); ---vscode-inlineEdit-modifiedChangedLineBackground: rgba(155, 185, 85, 0.14); ---vscode-inlineEdit-modifiedChangedTextBackground: rgba(156, 204, 44, 0.18); ---vscode-inlineEdit-originalBackground: rgba(255, 0, 0, 0.04); ---vscode-inlineEdit-originalBorder: rgba(255, 0, 0, 0.2); ---vscode-inlineEdit-originalChangedLineBackground: rgba(255, 0, 0, 0.16); ---vscode-inlineEdit-originalChangedTextBackground: rgba(255, 0, 0, 0.16); ---vscode-inlineEdit-tabWillAcceptModifiedBorder: rgba(62, 81, 18, 0.25); ---vscode-inlineEdit-tabWillAcceptOriginalBorder: rgba(255, 0, 0, 0.2); ---vscode-input-background: #ffffff; ---vscode-input-foreground: #616161; ---vscode-input-placeholderForeground: #767676; ---vscode-inputOption-activeBackground: rgba(0, 144, 241, 0.2); ---vscode-inputOption-activeBorder: #007acc; ---vscode-inputOption-activeForeground: #000000; ---vscode-inputOption-hoverBackground: rgba(184, 184, 184, 0.31); ---vscode-inputValidation-errorBackground: #f2dede; ---vscode-inputValidation-errorBorder: #be1100; ---vscode-inputValidation-infoBackground: #d6ecf2; ---vscode-inputValidation-infoBorder: #007acc; ---vscode-inputValidation-warningBackground: #f6f5d2; ---vscode-inputValidation-warningBorder: #b89500; ---vscode-interactive-activeCodeBorder: #007acc; ---vscode-interactive-inactiveCodeBorder: #e4e6f1; ---vscode-keybindingLabel-background: rgba(221, 221, 221, 0.4); ---vscode-keybindingLabel-border: rgba(204, 204, 204, 0.4); ---vscode-keybindingLabel-bottomBorder: rgba(187, 187, 187, 0.4); ---vscode-keybindingLabel-foreground: #555555; ---vscode-keybindingTable-headerBackground: rgba(97, 97, 97, 0.04); ---vscode-keybindingTable-rowsBackground: rgba(97, 97, 97, 0.04); ---vscode-list-activeSelectionBackground: #0060c0; ---vscode-list-activeSelectionForeground: #ffffff; ---vscode-list-activeSelectionIconForeground: #ffffff; ---vscode-list-deemphasizedForeground: #8e8e90; ---vscode-list-dropBackground: #d6ebff; ---vscode-list-dropBetweenBackground: #424242; ---vscode-list-errorForeground: #b01011; ---vscode-list-filterMatchBackground: rgba(234, 92, 0, 0.33); ---vscode-list-focusAndSelectionOutline: #90c2f9; ---vscode-list-focusHighlightForeground: #bbe7ff; ---vscode-list-focusOutline: #0090f1; ---vscode-list-highlightForeground: #0066bf; ---vscode-list-hoverBackground: #e8e8e8; ---vscode-list-inactiveSelectionBackground: #e4e6f1; ---vscode-list-invalidItemForeground: #b89500; ---vscode-list-warningForeground: #855f00; ---vscode-listFilterWidget-background: #f3f3f3; ---vscode-listFilterWidget-noMatchesOutline: #be1100; ---vscode-listFilterWidget-outline: rgba(0, 0, 0, 0); ---vscode-listFilterWidget-shadow: rgba(0, 0, 0, 0.16); ---vscode-menu-background: #ffffff; ---vscode-menu-border: #d4d4d4; ---vscode-menu-foreground: #616161; ---vscode-menu-selectionBackground: #0060c0; ---vscode-menu-selectionForeground: #ffffff; ---vscode-menu-separatorBackground: #d4d4d4; ---vscode-menubar-selectionBackground: rgba(184, 184, 184, 0.31); ---vscode-menubar-selectionForeground: #333333; ---vscode-merge-commonContentBackground: rgba(96, 96, 96, 0.16); ---vscode-merge-commonHeaderBackground: rgba(96, 96, 96, 0.4); ---vscode-merge-currentContentBackground: rgba(64, 200, 174, 0.2); ---vscode-merge-currentHeaderBackground: rgba(64, 200, 174, 0.5); ---vscode-merge-incomingContentBackground: rgba(64, 166, 255, 0.2); ---vscode-merge-incomingHeaderBackground: rgba(64, 166, 255, 0.5); ---vscode-mergeEditor-change-background: rgba(155, 185, 85, 0.2); ---vscode-mergeEditor-change-word-background: rgba(156, 204, 44, 0.4); ---vscode-mergeEditor-changeBase-background: #ffcccc; ---vscode-mergeEditor-changeBase-word-background: #ffa3a3; ---vscode-mergeEditor-conflict-handled-minimapOverViewRuler: rgba(173, 172, 168, 0.93); ---vscode-mergeEditor-conflict-handledFocused-border: rgba(193, 193, 193, 0.8); ---vscode-mergeEditor-conflict-handledUnfocused-border: rgba(134, 134, 134, 0.29); ---vscode-mergeEditor-conflict-input1-background: rgba(64, 200, 174, 0.2); ---vscode-mergeEditor-conflict-input2-background: rgba(64, 166, 255, 0.2); ---vscode-mergeEditor-conflict-unhandled-minimapOverViewRuler: #fcba03; ---vscode-mergeEditor-conflict-unhandledFocused-border: #ffa600; ---vscode-mergeEditor-conflict-unhandledUnfocused-border: #ffa600; ---vscode-mergeEditor-conflictingLines-background: rgba(255, 234, 0, 0.28); ---vscode-minimap-chatEditHighlight: rgba(255, 255, 255, 0.6); ---vscode-minimap-errorHighlight: rgba(255, 18, 18, 0.7); ---vscode-minimap-findMatchHighlight: #d18616; ---vscode-minimap-foregroundOpacity: #000000; ---vscode-minimap-infoHighlight: #1a85ff; ---vscode-minimap-selectionHighlight: #add6ff; ---vscode-minimap-selectionOccurrenceHighlight: #c9c9c9; ---vscode-minimap-warningHighlight: #bf8803; ---vscode-minimapGutter-addedBackground: #48985d; ---vscode-minimapGutter-deletedBackground: #e51400; ---vscode-minimapGutter-modifiedBackground: #2090d3; ---vscode-minimapSlider-activeBackground: rgba(0, 0, 0, 0.3); ---vscode-minimapSlider-background: rgba(100, 100, 100, 0.2); ---vscode-minimapSlider-hoverBackground: rgba(100, 100, 100, 0.35); ---vscode-multiDiffEditor-background: #ffffff; ---vscode-multiDiffEditor-border: #cccccc; ---vscode-multiDiffEditor-headerBackground: #ececec; ---vscode-notebook-cellBorderColor: #e8e8e8; ---vscode-notebook-cellEditorBackground: #f3f3f3; ---vscode-notebook-cellInsertionIndicator: #0090f1; ---vscode-notebook-cellStatusBarItemHoverBackground: rgba(0, 0, 0, 0.08); ---vscode-notebook-cellToolbarSeparator: rgba(128, 128, 128, 0.35); ---vscode-notebook-editorBackground: #ffffff; ---vscode-notebook-focusedCellBorder: #0090f1; ---vscode-notebook-focusedEditorBorder: #0090f1; ---vscode-notebook-inactiveFocusedCellBorder: #e8e8e8; ---vscode-notebook-selectedCellBackground: rgba(200, 221, 241, 0.31); ---vscode-notebook-selectedCellBorder: #e8e8e8; ---vscode-notebook-symbolHighlightBackground: rgba(253, 255, 0, 0.2); ---vscode-notebookEditorOverviewRuler-runningCellForeground: #388a34; ---vscode-notebookScrollbarSlider-activeBackground: rgba(0, 0, 0, 0.6); ---vscode-notebookScrollbarSlider-background: rgba(100, 100, 100, 0.4); ---vscode-notebookScrollbarSlider-hoverBackground: rgba(100, 100, 100, 0.7); ---vscode-notebookStatusErrorIcon-foreground: #a1260d; ---vscode-notebookStatusRunningIcon-foreground: #616161; ---vscode-notebookStatusSuccessIcon-foreground: #388a34; ---vscode-notificationCenter-border: #d4d4d4; ---vscode-notificationCenterHeader-background: #e7e7e7; ---vscode-notificationLink-foreground: #006ab1; ---vscode-notifications-background: #f3f3f3; ---vscode-notifications-border: #e7e7e7; ---vscode-notifications-foreground: #616161; ---vscode-notificationsErrorIcon-foreground: #e51400; ---vscode-notificationsInfoIcon-foreground: #1a85ff; ---vscode-notificationsWarningIcon-foreground: #bf8803; ---vscode-notificationToast-border: #d4d4d4; ---vscode-panel-background: #ffffff; ---vscode-panel-border: rgba(128, 128, 128, 0.35); ---vscode-panel-dropBorder: #424242; ---vscode-panelInput-border: #dddddd; ---vscode-panelSection-border: rgba(128, 128, 128, 0.35); ---vscode-panelSection-dropBackground: rgba(38, 119, 203, 0.18); ---vscode-panelSectionHeader-background: rgba(128, 128, 128, 0.2); ---vscode-panelStickyScroll-background: #ffffff; ---vscode-panelStickyScroll-shadow: #dddddd; ---vscode-panelTitle-activeBorder: #424242; ---vscode-panelTitle-activeForeground: #424242; ---vscode-panelTitle-inactiveForeground: rgba(66, 66, 66, 0.75); ---vscode-panelTitleBadge-background: #007acc; ---vscode-panelTitleBadge-foreground: #ffffff; ---vscode-peekView-border: #1a85ff; ---vscode-peekViewEditor-background: #f2f8fc; ---vscode-peekViewEditor-matchHighlightBackground: rgba(245, 216, 2, 0.87); ---vscode-peekViewEditorGutter-background: #f2f8fc; ---vscode-peekViewEditorStickyScroll-background: #f2f8fc; ---vscode-peekViewEditorStickyScrollGutter-background: #f2f8fc; ---vscode-peekViewResult-background: #f3f3f3; ---vscode-peekViewResult-fileForeground: #1e1e1e; ---vscode-peekViewResult-lineForeground: #646465; ---vscode-peekViewResult-matchHighlightBackground: rgba(234, 92, 0, 0.3); ---vscode-peekViewResult-selectionBackground: rgba(51, 153, 255, 0.2); ---vscode-peekViewResult-selectionForeground: #6c6c6c; ---vscode-peekViewTitle-background: #f3f3f3; ---vscode-peekViewTitleDescription-foreground: #616161; ---vscode-peekViewTitleLabel-foreground: #000000; ---vscode-pickerGroup-border: #cccedb; ---vscode-pickerGroup-foreground: #0066bf; ---vscode-ports-iconRunningProcessForeground: #369432; ---vscode-problemsErrorIcon-foreground: #e51400; ---vscode-problemsInfoIcon-foreground: #1a85ff; ---vscode-problemsWarningIcon-foreground: #bf8803; ---vscode-profileBadge-background: #c4c4c4; ---vscode-profileBadge-foreground: #333333; ---vscode-profiles-sashBorder: rgba(128, 128, 128, 0.35); ---vscode-progressBar-background: #0e70c0; ---vscode-quickInput-background: #f3f3f3; ---vscode-quickInput-foreground: #616161; ---vscode-quickInputList-focusBackground: #0060c0; ---vscode-quickInputList-focusForeground: #ffffff; ---vscode-quickInputList-focusIconForeground: #ffffff; ---vscode-quickInputTitle-background: rgba(0, 0, 0, 0.06); ---vscode-radio-activeBackground: rgba(0, 144, 241, 0.2); ---vscode-radio-activeBorder: #007acc; ---vscode-radio-activeForeground: #000000; ---vscode-radio-inactiveBorder: rgba(0, 0, 0, 0.2); ---vscode-radio-inactiveHoverBackground: rgba(184, 184, 184, 0.31); ---vscode-sash-hover-size: 4px; ---vscode-sash-hoverBorder: #0090f1; ---vscode-sash-size: 4px; ---vscode-scmGraph-foreground1: #ffb000; ---vscode-scmGraph-foreground2: #dc267f; ---vscode-scmGraph-foreground3: #994f00; ---vscode-scmGraph-foreground4: #40b0a6; ---vscode-scmGraph-foreground5: #b66dff; ---vscode-scmGraph-historyItemBaseRefColor: #ea5c00; ---vscode-scmGraph-historyItemHoverAdditionsForeground: #587c0c; ---vscode-scmGraph-historyItemHoverDefaultLabelBackground: #c4c4c4; ---vscode-scmGraph-historyItemHoverDefaultLabelForeground: #616161; ---vscode-scmGraph-historyItemHoverDeletionsForeground: #ad0707; ---vscode-scmGraph-historyItemHoverLabelForeground: #ffffff; ---vscode-scmGraph-historyItemRefColor: #1a85ff; ---vscode-scmGraph-historyItemRemoteRefColor: #652d90; ---vscode-scrollbar-shadow: #dddddd; ---vscode-scrollbarSlider-activeBackground: rgba(0, 0, 0, 0.6); ---vscode-scrollbarSlider-background: rgba(100, 100, 100, 0.4); ---vscode-scrollbarSlider-hoverBackground: rgba(100, 100, 100, 0.7); ---vscode-search-resultsInfoForeground: #616161; ---vscode-searchEditor-findMatchBackground: rgba(234, 92, 0, 0.22); ---vscode-searchEditor-textInputBorder: #cecece; ---vscode-settings-checkboxBackground: #ffffff; ---vscode-settings-checkboxBorder: #919191; ---vscode-settings-checkboxForeground: #616161; ---vscode-settings-dropdownBackground: #ffffff; ---vscode-settings-dropdownBorder: #cecece; ---vscode-settings-dropdownForeground: #616161; ---vscode-settings-dropdownListBorder: #c8c8c8; ---vscode-settings-focusedRowBackground: rgba(232, 232, 232, 0.6); ---vscode-settings-focusedRowBorder: #0090f1; ---vscode-settings-headerBorder: rgba(128, 128, 128, 0.35); ---vscode-settings-headerForeground: #444444; ---vscode-settings-modifiedItemIndicator: #66afe0; ---vscode-settings-numberInputBackground: #ffffff; ---vscode-settings-numberInputBorder: #cecece; ---vscode-settings-numberInputForeground: #616161; ---vscode-settings-rowHoverBackground: rgba(232, 232, 232, 0.3); ---vscode-settings-sashBorder: rgba(128, 128, 128, 0.35); ---vscode-settings-settingsHeaderHoverForeground: rgba(68, 68, 68, 0.7); ---vscode-settings-textInputBackground: #ffffff; ---vscode-settings-textInputBorder: #cecece; ---vscode-settings-textInputForeground: #616161; ---vscode-sideBar-background: #f3f3f3; ---vscode-sideBar-dropBackground: rgba(38, 119, 203, 0.18); ---vscode-sideBarActivityBarTop-border: rgba(97, 97, 97, 0.19); ---vscode-sideBarSectionHeader-background: rgba(0, 0, 0, 0); ---vscode-sideBarSectionHeader-border: rgba(97, 97, 97, 0.19); ---vscode-sideBarStickyScroll-background: #f3f3f3; ---vscode-sideBarStickyScroll-shadow: #dddddd; ---vscode-sideBarTitle-background: #f3f3f3; ---vscode-sideBarTitle-foreground: #6f6f6f; ---vscode-sideBySideEditor-horizontalBorder: #e7e7e7; ---vscode-sideBySideEditor-verticalBorder: #e7e7e7; ---vscode-simpleFindWidget-sashBorder: #c8c8c8; ---vscode-statusBar-background: #007acc; ---vscode-statusBar-debuggingBackground: #cc6633; ---vscode-statusBar-debuggingForeground: #ffffff; ---vscode-statusBar-focusBorder: #ffffff; ---vscode-statusBar-foreground: #ffffff; ---vscode-statusBar-noFolderBackground: #68217a; ---vscode-statusBar-noFolderForeground: #ffffff; ---vscode-statusBarItem-activeBackground: rgba(255, 255, 255, 0.18); ---vscode-statusBarItem-compactHoverBackground: rgba(255, 255, 255, 0.2); ---vscode-statusBarItem-errorBackground: #c72e0f; ---vscode-statusBarItem-errorForeground: #ffffff; ---vscode-statusBarItem-errorHoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-errorHoverForeground: #ffffff; ---vscode-statusBarItem-focusBorder: #ffffff; ---vscode-statusBarItem-hoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-hoverForeground: #ffffff; ---vscode-statusBarItem-offlineBackground: #6c1717; ---vscode-statusBarItem-offlineForeground: #ffffff; ---vscode-statusBarItem-offlineHoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-offlineHoverForeground: #ffffff; ---vscode-statusBarItem-prominentBackground: rgba(0, 0, 0, 0.5); ---vscode-statusBarItem-prominentForeground: #ffffff; ---vscode-statusBarItem-prominentHoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-prominentHoverForeground: #ffffff; ---vscode-statusBarItem-remoteBackground: #16825d; ---vscode-statusBarItem-remoteForeground: #ffffff; ---vscode-statusBarItem-remoteHoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-remoteHoverForeground: #ffffff; ---vscode-statusBarItem-warningBackground: #725102; ---vscode-statusBarItem-warningForeground: #ffffff; ---vscode-statusBarItem-warningHoverBackground: rgba(255, 255, 255, 0.12); ---vscode-statusBarItem-warningHoverForeground: #ffffff; ---vscode-symbolIcon-arrayForeground: #616161; ---vscode-symbolIcon-booleanForeground: #616161; ---vscode-symbolIcon-classForeground: #d67e00; ---vscode-symbolIcon-colorForeground: #616161; ---vscode-symbolIcon-constantForeground: #616161; ---vscode-symbolIcon-constructorForeground: #652d90; ---vscode-symbolIcon-enumeratorForeground: #d67e00; ---vscode-symbolIcon-enumeratorMemberForeground: #007acc; ---vscode-symbolIcon-eventForeground: #d67e00; ---vscode-symbolIcon-fieldForeground: #007acc; ---vscode-symbolIcon-fileForeground: #616161; ---vscode-symbolIcon-folderForeground: #616161; ---vscode-symbolIcon-functionForeground: #652d90; ---vscode-symbolIcon-interfaceForeground: #007acc; ---vscode-symbolIcon-keyForeground: #616161; ---vscode-symbolIcon-keywordForeground: #616161; ---vscode-symbolIcon-methodForeground: #652d90; ---vscode-symbolIcon-moduleForeground: #616161; ---vscode-symbolIcon-namespaceForeground: #616161; ---vscode-symbolIcon-nullForeground: #616161; ---vscode-symbolIcon-numberForeground: #616161; ---vscode-symbolIcon-objectForeground: #616161; ---vscode-symbolIcon-operatorForeground: #616161; ---vscode-symbolIcon-packageForeground: #616161; ---vscode-symbolIcon-propertyForeground: #616161; ---vscode-symbolIcon-referenceForeground: #616161; ---vscode-symbolIcon-snippetForeground: #616161; ---vscode-symbolIcon-stringForeground: #616161; ---vscode-symbolIcon-structForeground: #616161; ---vscode-symbolIcon-textForeground: #616161; ---vscode-symbolIcon-typeParameterForeground: #616161; ---vscode-symbolIcon-unitForeground: #616161; ---vscode-symbolIcon-variableForeground: #007acc; ---vscode-tab-activeBackground: #ffffff; ---vscode-tab-activeForeground: #333333; ---vscode-tab-activeModifiedBorder: #33aaee; ---vscode-tab-border: #f3f3f3; ---vscode-tab-dragAndDropBorder: #333333; ---vscode-tab-inactiveBackground: #ececec; ---vscode-tab-inactiveForeground: rgba(51, 51, 51, 0.7); ---vscode-tab-inactiveModifiedBorder: rgba(51, 170, 238, 0.5); ---vscode-tab-lastPinnedBorder: rgba(97, 97, 97, 0.19); ---vscode-tab-selectedBackground: rgba(255, 255, 255, 0.65); ---vscode-tab-selectedForeground: rgba(51, 51, 51, 0.7); ---vscode-tab-unfocusedActiveBackground: #ffffff; ---vscode-tab-unfocusedActiveForeground: rgba(51, 51, 51, 0.7); ---vscode-tab-unfocusedActiveModifiedBorder: rgba(51, 170, 238, 0.7); ---vscode-tab-unfocusedInactiveBackground: #ececec; ---vscode-tab-unfocusedInactiveForeground: rgba(51, 51, 51, 0.35); ---vscode-tab-unfocusedInactiveModifiedBorder: rgba(51, 170, 238, 0.25); ---vscode-terminal-ansiBlack: #000000; ---vscode-terminal-ansiBlue: #0451a5; ---vscode-terminal-ansiBrightBlack: #666666; ---vscode-terminal-ansiBrightBlue: #0451a5; ---vscode-terminal-ansiBrightCyan: #0598bc; ---vscode-terminal-ansiBrightGreen: #14ce14; ---vscode-terminal-ansiBrightMagenta: #bc05bc; ---vscode-terminal-ansiBrightRed: #cd3131; ---vscode-terminal-ansiBrightWhite: #a5a5a5; ---vscode-terminal-ansiBrightYellow: #b5ba00; ---vscode-terminal-ansiCyan: #0598bc; ---vscode-terminal-ansiGreen: #107c10; ---vscode-terminal-ansiMagenta: #bc05bc; ---vscode-terminal-ansiRed: #cd3131; ---vscode-terminal-ansiWhite: #555555; ---vscode-terminal-ansiYellow: #949800; ---vscode-terminal-border: rgba(128, 128, 128, 0.35); ---vscode-terminal-dropBackground: rgba(38, 119, 203, 0.18); ---vscode-terminal-findMatchBackground: #a8ac94; ---vscode-terminal-findMatchHighlightBackground: rgba(234, 92, 0, 0.33); ---vscode-terminal-foreground: #333333; ---vscode-terminal-hoverHighlightBackground: rgba(173, 214, 255, 0.07); ---vscode-terminal-inactiveSelectionBackground: #e5ebf1; ---vscode-terminal-initialHintForeground: rgba(0, 0, 0, 0.47); ---vscode-terminal-selectionBackground: #add6ff; ---vscode-terminalCommandDecoration-defaultBackground: rgba(0, 0, 0, 0.25); ---vscode-terminalCommandDecoration-errorBackground: #e51400; ---vscode-terminalCommandDecoration-successBackground: #2090d3; ---vscode-terminalCommandGuide-foreground: #e4e6f1; ---vscode-terminalOverviewRuler-border: rgba(127, 127, 127, 0.3); ---vscode-terminalOverviewRuler-cursorForeground: rgba(160, 160, 160, 0.8); ---vscode-terminalOverviewRuler-findMatchForeground: rgba(209, 134, 22, 0.49); ---vscode-terminalStickyScrollHover-background: #f0f0f0; ---vscode-terminalSymbolIcon-aliasForeground: #652d90; ---vscode-terminalSymbolIcon-argumentForeground: #007acc; ---vscode-terminalSymbolIcon-fileForeground: #616161; ---vscode-terminalSymbolIcon-flagForeground: #d67e00; ---vscode-terminalSymbolIcon-folderForeground: #616161; ---vscode-terminalSymbolIcon-methodForeground: #652d90; ---vscode-terminalSymbolIcon-optionForeground: #d67e00; ---vscode-terminalSymbolIcon-optionValueForeground: #007acc; ---vscode-terminalSymbolIcon-symbolicLinkFileForeground: #616161; ---vscode-terminalSymbolIcon-symbolicLinkFolderForeground: #616161; ---vscode-testing-coverCountBadgeBackground: #c4c4c4; ---vscode-testing-coverCountBadgeForeground: #333333; ---vscode-testing-coveredBackground: rgba(156, 204, 44, 0.25); ---vscode-testing-coveredBorder: rgba(156, 204, 44, 0.19); ---vscode-testing-coveredGutterBackground: rgba(156, 204, 44, 0.15); ---vscode-testing-iconErrored: #f14c4c; ---vscode-testing-iconErrored-retired: rgba(241, 76, 76, 0.7); ---vscode-testing-iconFailed: #f14c4c; ---vscode-testing-iconFailed-retired: rgba(241, 76, 76, 0.7); ---vscode-testing-iconPassed: #73c991; ---vscode-testing-iconPassed-retired: rgba(115, 201, 145, 0.7); ---vscode-testing-iconQueued: #cca700; ---vscode-testing-iconQueued-retired: rgba(204, 167, 0, 0.7); ---vscode-testing-iconSkipped: #848484; ---vscode-testing-iconSkipped-retired: rgba(132, 132, 132, 0.7); ---vscode-testing-iconUnset: #848484; ---vscode-testing-iconUnset-retired: rgba(132, 132, 132, 0.7); ---vscode-testing-message-error-badgeBackground: #e51400; ---vscode-testing-message-error-badgeBorder: #e51400; ---vscode-testing-message-error-badgeForeground: #ffffff; ---vscode-testing-message-info-decorationForeground: rgba(0, 0, 0, 0.5); ---vscode-testing-messagePeekBorder: #1a85ff; ---vscode-testing-messagePeekHeaderBackground: rgba(26, 133, 255, 0.1); ---vscode-testing-peekBorder: #e51400; ---vscode-testing-peekHeaderBackground: rgba(229, 20, 0, 0.1); ---vscode-testing-runAction: #73c991; ---vscode-testing-uncoveredBackground: rgba(255, 0, 0, 0.2); ---vscode-testing-uncoveredBorder: rgba(255, 0, 0, 0.15); ---vscode-testing-uncoveredBranchBackground: #ff9999; ---vscode-testing-uncoveredGutterBackground: rgba(255, 0, 0, 0.3); ---vscode-textBlockQuote-background: #f2f2f2; ---vscode-textBlockQuote-border: rgba(0, 122, 204, 0.5); ---vscode-textCodeBlock-background: rgba(220, 220, 220, 0.4); ---vscode-textLink-activeForeground: #006ab1; ---vscode-textLink-foreground: #006ab1; ---vscode-textPreformat-background: rgba(0, 0, 0, 0.1); ---vscode-textPreformat-foreground: #a31515; ---vscode-textSeparator-foreground: rgba(0, 0, 0, 0.18); ---vscode-titleBar-activeBackground: #dddddd; ---vscode-titleBar-activeForeground: #333333; ---vscode-titleBar-inactiveBackground: rgba(221, 221, 221, 0.6); ---vscode-titleBar-inactiveForeground: rgba(51, 51, 51, 0.6); ---vscode-toolbar-activeBackground: rgba(166, 166, 166, 0.31); ---vscode-toolbar-hoverBackground: rgba(184, 184, 184, 0.31); ---vscode-tree-inactiveIndentGuidesStroke: rgba(169, 169, 169, 0.4); ---vscode-tree-indentGuidesStroke: #a9a9a9; ---vscode-tree-tableColumnsBorder: rgba(97, 97, 97, 0.13); ---vscode-tree-tableOddRowsBackground: rgba(97, 97, 97, 0.04); ---vscode-walkThrough-embeddedEditorBackground: #f4f4f4; ---vscode-walkthrough-stepTitle-foreground: #000000; ---vscode-welcomePage-progress-background: #ffffff; ---vscode-welcomePage-progress-foreground: #006ab1; ---vscode-welcomePage-tileBackground: #f3f3f3; ---vscode-welcomePage-tileBorder: rgba(0, 0, 0, 0.1); ---vscode-welcomePage-tileHoverBackground: #dbdbdb; ---vscode-widget-border: #d4d4d4; ---vscode-widget-shadow: rgba(0, 0, 0, 0.16); ---z-index-notebook-cell-bottom-toolbar-container: 28; ---z-index-notebook-cell-editor-outline: 20; ---z-index-notebook-cell-expand-part-button: 36; ---z-index-notebook-cell-output-toolbar: 30; ---z-index-notebook-cell-status: 26; ---z-index-notebook-cell-toolbar: 37; ---z-index-notebook-cell-toolbar-dropdown-active: 38; ---z-index-notebook-diff-view-viewport-slider: 10; ---z-index-notebook-folding-indicator: 26; ---z-index-notebook-input-collapse-condicon: 29; ---z-index-notebook-list-insertion-indicator: 10; ---z-index-notebook-output: 27; ---z-index-notebook-progress-bar: 5; ---z-index-notebook-run-button-container: 29; ---z-index-notebook-scrollbar: 25; diff --git a/apps/storybook/package.json b/apps/storybook/package.json deleted file mode 100644 index 6fdfe085df..0000000000 --- a/apps/storybook/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "@roo-code/storybook", - "private": true, - "type": "module", - "scripts": { - "generate-theme-styles": "node ../playwright-e2e/scripts/extract-vscode-variables.js", - "generate-screenshot-stories": "node scripts/generate-playwright-screenshot-stories.js", - "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build --webpack-stats-json", - "preview": "storybook preview", - "chromatic": "chromatic --exit-zero-on-changes --storybook-base-dir=apps/storybook", - "clean": "rimraf storybook-static .turbo stories/generated public/screenshots" - }, - "dependencies": { - "@roo-code/types": "workspace:^", - "@radix-ui/react-slot": "^1.1.2", - "@vscode/codicons": "^0.0.36", - "change-case": "^5.4.4", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "lucide-react": "^0.513.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "seedrandom": "^3.0.5", - "shiki": "^3.2.1", - "styled-components": "^6.1.13", - "tailwind-merge": "^2.6.0", - "tailwindcss": "^4.0.0" - }, - "devDependencies": { - "@chromatic-com/storybook": "^4.0.1", - "@storybook/addon-links": "^9.0.18", - "@storybook/react-vite": "^9.0.18", - "@storybook/test-runner": "^0.23.0", - "@tailwindcss/vite": "^4.0.0", - "@types/react": "^18.3.23", - "@types/react-dom": "^18.3.5", - "@types/seedrandom": "^3.0.8", - "@types/styled-components": "^5.1.34", - "@vitejs/plugin-react": "^4.3.4", - "chromatic": "^13.0.0", - "jsonc-parser": "^3.3.1", - "node-fetch": "2", - "rimraf": "^6.0.1", - "storybook": "^9.0.18", - "tailwindcss-animate": "^1.0.7", - "typescript": "^5.4.5", - "vite": "6.3.5", - "@storybook/addon-docs": "^9.0.18" - } -} diff --git a/apps/storybook/scripts/generate-playwright-screenshot-stories.js b/apps/storybook/scripts/generate-playwright-screenshot-stories.js deleted file mode 100644 index 328b2fdce0..0000000000 --- a/apps/storybook/scripts/generate-playwright-screenshot-stories.js +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/env node - -import { readdir, writeFile, mkdir, copyFile } from "fs/promises" -import { join, basename } from "path" -import { fileURLToPath } from "url" -import { camelCase } from "change-case" - -const __dirname = fileURLToPath(new URL(".", import.meta.url)) -const playwrightDir = join(__dirname, "../../playwright-e2e") -const storiesDir = join(__dirname, "../stories/generated") -const testResultsDir = join(playwrightDir, "test-results") - -const cleanTestName = (name) => camelCase(name) -const isScreenshotFile = (filename) => filename.endsWith(".png") - -const parseScreenshotName = (filename) => { - const name = basename(filename, ".png") - - if (name.includes("__")) { - const parts = name.split("__") - if (parts.length >= 3) { - return { - testSuite: camelCase(parts[0]), - testName: cleanTestName(parts[1]), - screenshotName: camelCase(parts.slice(2).join("__")), - hierarchical: true, - } - } - } - - return { - testSuite: "Playwright Screenshots", - testName: "Snapshot Test", - screenshotName: camelCase(name), - hierarchical: false, - } -} - -const findPlaywrightScreenshots = async () => { - console.log("🔍 Finding Playwright screenshots in test results...") - - try { - const testDirs = await readdir(testResultsDir) - const screenshots = [] - - await Promise.all( - testDirs.map(async (testDir) => { - try { - const files = await readdir(join(testResultsDir, testDir)) - files.filter(isScreenshotFile).forEach((file) => { - screenshots.push({ - path: join(testResultsDir, testDir, file), - fileName: file, - ...parseScreenshotName(file), - }) - }) - } catch { - // Skip directories that can't be read - } - }), - ) - - console.log(`📸 Found ${screenshots.length} Playwright screenshots`) - return screenshots - } catch (error) { - console.error("❌ Error finding screenshots:", error) - return [] - } -} - -const createStoryContent = (testSuite, screenshots) => { - const groupedByTest = screenshots.reduce((acc, screenshot) => { - const key = cleanTestName(screenshot.testName) - if (!acc[key]) acc[key] = [] - acc[key].push(screenshot) - return acc - }, {}) - - let storyIndex = 1 - const storyExports = [] - - Object.entries(groupedByTest).forEach(([testName, testScreenshots]) => { - testScreenshots.forEach((screenshot) => { - const storyName = `${testName} - ${screenshot.screenshotName}` - storyExports.push(`export const Story${storyIndex} = { - name: '${storyName}', - render: () => ( -
- ${storyName} -
- ), -}`) - storyIndex++ - }) - }) - - return `import type { Meta, StoryObj } from '@storybook/react' - -const meta: Meta = { - title: 'Playwight Screenshots/${testSuite}', - parameters: { - layout: 'fullscreen', - disableChromaticDualThemeSnapshot: true, - }, -} - -export default meta -type Story = StoryObj - -${storyExports.join("\n\n")} -` -} - -const sanitizeFileName = (name) => - name - .replace(/[^a-zA-Z0-9\s]/g, "") - .replace(/\s+/g, "") - .replace(/^./, (str) => str.toLowerCase()) - -const generateScreenshotStories = async (screenshots) => { - console.log(`📝 Generating stories for ${screenshots.length} screenshots...`) - await mkdir(storiesDir, { recursive: true }) - - const groupedByTestSuite = screenshots.reduce((acc, screenshot) => { - if (!acc[screenshot.testSuite]) acc[screenshot.testSuite] = [] - acc[screenshot.testSuite].push(screenshot) - return acc - }, {}) - - await Promise.all( - Object.entries(groupedByTestSuite).map(async ([testSuite, suiteScreenshots]) => { - console.log(`📁 Processing ${testSuite}: ${suiteScreenshots.length} screenshots...`) - - const storyContent = createStoryContent(testSuite, suiteScreenshots) - const storyFileName = `${sanitizeFileName(testSuite)}.stories.tsx` - - await writeFile(join(storiesDir, storyFileName), storyContent) - console.log(`✅ Generated: ${storyFileName}`) - }), - ) -} - -const copyScreenshotsToStorybook = async (screenshots) => { - console.log("📋 Copying screenshots to Storybook...") - const staticDir = join(__dirname, "../public/screenshots") - await mkdir(staticDir, { recursive: true }) - - await Promise.all( - screenshots.map(async (screenshot) => { - await copyFile(screenshot.path, join(staticDir, screenshot.fileName)) - }), - ) - console.log(`✅ Copied ${screenshots.length} screenshots`) -} - -const main = async () => { - try { - console.log("🚀 Starting Playwright screenshot-to-story generation...") - const screenshots = await findPlaywrightScreenshots() - - if (screenshots.length === 0) { - console.log("⚠️ No screenshots found. Run Playwright tests first.") - return - } - - await Promise.all([copyScreenshotsToStorybook(screenshots), generateScreenshotStories(screenshots)]) - - const suites = [...new Set(screenshots.map((s) => s.testSuite))] - console.log(`✅ Generated stories for ${suites.length} test suite(s): ${suites.join(", ")}`) - } catch (error) { - console.error("❌ Error:", error) - process.exit(1) - } -} - -if (import.meta.url === `file://${process.argv[1]}`) { - main() -} diff --git a/apps/storybook/src/decorators/withExtensionState.tsx b/apps/storybook/src/decorators/withExtensionState.tsx deleted file mode 100644 index 65f180bad3..0000000000 --- a/apps/storybook/src/decorators/withExtensionState.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import type { Decorator } from "@storybook/react-vite" -import { ExtensionStateContext } from "../../../../webview-ui/src/context/ExtensionStateContext" -import { createExtensionStateMock } from "../utils/createExtensionStateMock" - -const mockExtensionState = createExtensionStateMock() - -// Decorator to provide ExtensionStateContext for all stories -// -// To override specific properties in a story, use the parameters: -// export const MyStory = { -// parameters: { -// extensionState: { -// showTaskTimeline: false, -// clineMessages: [/* custom messages */] -// } -// } -// } -export const withExtensionState: Decorator = (Story, context) => { - const storyOverrides = context.parameters?.extensionState || {} - const contextValue = { ...mockExtensionState, ...storyOverrides } - - return ( - - - - ) -} diff --git a/apps/storybook/src/decorators/withFixedContainment.tsx b/apps/storybook/src/decorators/withFixedContainment.tsx deleted file mode 100644 index 37b3719a60..0000000000 --- a/apps/storybook/src/decorators/withFixedContainment.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import type { Decorator } from "@storybook/react-vite" - -// Wraps stories with an element that will "contain" any `position: fixed` elements -// the `translate-0` is a noop, but causes any children to be contained in this element. -export const withFixedContainment: Decorator = (Story) => { - return ( -
- -
- ) -} diff --git a/apps/storybook/src/decorators/withI18n.tsx b/apps/storybook/src/decorators/withI18n.tsx deleted file mode 100644 index d0b8fd7a41..0000000000 --- a/apps/storybook/src/decorators/withI18n.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { useEffect } from "react" -import type { Decorator } from "@storybook/react-vite" -import i18n from "../../../../webview-ui/src/i18n/setup" -import { loadTranslations } from "../../../../webview-ui/src/i18n/setup" -import TranslationProvider from "@/i18n/TranslationContext" - -/** - * Storybook decorator that sets up i18n for all stories - * This eliminates the need for individual wrapper components in each story file - */ -export const withI18n: Decorator = (Story) => { - useEffect(() => { - loadTranslations() - i18n.changeLanguage("en") // English - }, []) - - return ( - - - - ) -} diff --git a/apps/storybook/src/decorators/withLimitedWidth.tsx b/apps/storybook/src/decorators/withLimitedWidth.tsx deleted file mode 100644 index 8099faed4e..0000000000 --- a/apps/storybook/src/decorators/withLimitedWidth.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import type { Decorator } from "@storybook/react-vite" - -// Function that creates a decorator with a limited width container -// Provides consistent centering and configurable max-width constraint -export const withLimitedWidth = (maxWidth: number = 600): Decorator => { - return (Story) => ( -
- -
- ) -} diff --git a/apps/storybook/src/decorators/withQueryClient.tsx b/apps/storybook/src/decorators/withQueryClient.tsx deleted file mode 100644 index 82996c5202..0000000000 --- a/apps/storybook/src/decorators/withQueryClient.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import type { Decorator } from "@storybook/react-vite" -import { QueryClientProvider, QueryClient } from "../../../../webview-ui/src/exports" - -const queryClient = new QueryClient() - -// Decorator to provide QueryClient for all stories using the shared provider from webview-ui -export const withQueryClient: Decorator = (Story) => { - return ( - - - - ) -} diff --git a/apps/storybook/src/decorators/withSidebarContainer.tsx b/apps/storybook/src/decorators/withSidebarContainer.tsx deleted file mode 100644 index b839bd56a5..0000000000 --- a/apps/storybook/src/decorators/withSidebarContainer.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import type { Decorator } from "@storybook/react-vite" - -// Mimics the VSCode sidebar appearance: background, width, -// and uses scale-100 to "contain" position:fixed elements -export const withSidebarContainer = (width: number = 400): Decorator => { - return (Story) => ( -
- -
- ) -} diff --git a/apps/storybook/src/decorators/withTheme.tsx b/apps/storybook/src/decorators/withTheme.tsx deleted file mode 100644 index e6c1a27fe0..0000000000 --- a/apps/storybook/src/decorators/withTheme.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import type { Decorator } from "@storybook/react-vite" -import { useEffect } from "react" - -// Decorator to handle theme switching by applying the data-theme attribute to the body -export const withTheme: Decorator = (Story, context) => { - const theme = context.globals.theme || "dark" - - useEffect(() => { - document.body.setAttribute("data-theme", theme) - return () => { - document.body.removeAttribute("data-theme") - } - }, [theme]) - - return -} diff --git a/apps/storybook/src/decorators/withTooltipProvider.tsx b/apps/storybook/src/decorators/withTooltipProvider.tsx deleted file mode 100644 index aeb6f69130..0000000000 --- a/apps/storybook/src/decorators/withTooltipProvider.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import type { Decorator } from "@storybook/react-vite" -import { TooltipProvider } from "@/components/ui/tooltip" - -export const withTooltipProvider: Decorator = (Story) => { - return ( - - - - ) -} diff --git a/apps/storybook/src/lib/utils.ts b/apps/storybook/src/lib/utils.ts deleted file mode 100644 index 5e1abdf42c..0000000000 --- a/apps/storybook/src/lib/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { type ClassValue, clsx } from "clsx" -import { twMerge } from "tailwind-merge" - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)) -} diff --git a/apps/storybook/src/mockData/clineMessages.ts b/apps/storybook/src/mockData/clineMessages.ts deleted file mode 100644 index 5a517956c3..0000000000 --- a/apps/storybook/src/mockData/clineMessages.ts +++ /dev/null @@ -1,685 +0,0 @@ -import { ClineMessage } from "@roo-code/types" -import { randomInterval } from "../utils/randomUtils" - -// Fixed base timestamp for consistent snapshots (January 1, 2024, 12:00:00 UTC) -export const BASE_TIMESTAMP = 1704110400000 - -/** - * Create mock messages for a typical component creation task - * Shows realistic timing patterns for development workflows - */ -export const createComponentCreationMessages = (): ClineMessage[] => { - let currentTime = BASE_TIMESTAMP - - const messages: ClineMessage[] = [ - { - ts: currentTime, - type: "ask", - ask: "command", - text: "Create a new React component with TypeScript support", - }, - ] - - // Quick initial response (1-3 seconds) - currentTime += randomInterval(1000, 3000) - messages.push({ - ts: currentTime, - type: "say", - say: "text", - text: "I'll help you create a new React component with proper TypeScript typing. Let me analyze the requirements and create a well-structured component for you.", - }) - - // Thinking time before tool use (5-12 seconds) - currentTime += randomInterval(5000, 12000) - messages.push({ - ts: currentTime, - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "write_to_file", - path: "Component.tsx", - content: - "import React from 'react'\n\ninterface ComponentProps {\n title: string\n children?: React.ReactNode\n}\n\nexport const Component: React.FC = ({ title, children }) => {\n return (\n
\n

{title}

\n {children}\n
\n )\n}", - }), - }) - - // Quick tool execution (800ms - 2 seconds) - currentTime += randomInterval(800, 2000) - messages.push({ - ts: currentTime, - type: "say", - say: "command_output", - text: "File created successfully", - }) - - // Immediate checkpoint (200-800ms) - currentTime += randomInterval(200, 800) - // messages.push({ - // ts: currentTime, - // type: "say", - // say: "checkpoint_saved", - // text: "Checkpoint saved", - // }) - - // Long completion summary (10-20 seconds) - currentTime += randomInterval(10000, 20000) - messages.push({ - ts: currentTime, - type: "ask", - ask: "completion_result", - text: "Task completed successfully! I've created a new React component with proper TypeScript typing, including an interface for props and exported it for use in your application. The component follows React best practices and is ready to be imported and used.", - }) - - return messages -} - -/** - * Create mock messages for a debugging workflow - * Shows error handling and recovery patterns - */ -export const createDebuggingMessages = (): ClineMessage[] => { - let currentTime = BASE_TIMESTAMP - - const messages: ClineMessage[] = [ - { - ts: currentTime, - type: "ask", - ask: "command", - text: "Debug the application and fix any critical issues found in the codebase", - }, - ] - - // Initial analysis response (2-4 seconds) - currentTime += randomInterval(2000, 4000) - messages.push({ - ts: currentTime, - type: "say", - say: "text", - text: "I'll analyze the code for issues. Let me start by examining the main application files to identify potential problems.", - }) - - // Quick file read (1-2 seconds) - currentTime += randomInterval(1000, 2000) - messages.push({ - ts: currentTime, - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "read_file", - path: "app.ts", - }), - }) - - // Analysis time (6-10 seconds) - currentTime += randomInterval(6000, 10000) - messages.push({ - ts: currentTime, - type: "say", - say: "text", - text: "Found several issues in the code including memory leaks, unhandled promise rejections, and type safety problems. Let me fix these systematically.", - }) - - // First fix attempt (3-5 seconds) - currentTime += randomInterval(3000, 5000) - messages.push({ - ts: currentTime, - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "apply_diff", - path: "app.ts", - diff: "Fix memory leak and add proper error handling", - }), - }) - - // Error occurs quickly (500-1500ms) - currentTime += randomInterval(500, 1500) - messages.push({ - ts: currentTime, - type: "say", - say: "error", - text: "Error applying the fix: merge conflict detected. Let me try a different approach.", - }) - - // Recovery attempt (2-4 seconds) - currentTime += randomInterval(2000, 4000) - messages.push({ - ts: currentTime, - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "write_to_file", - path: "app.ts", - content: "// Fixed code with proper error handling and memory management", - }), - }) - - // Success (1-2 seconds) - currentTime += randomInterval(1000, 2000) - messages.push({ - ts: currentTime, - type: "say", - say: "command_output", - text: "File updated successfully. All critical issues have been resolved.", - }) - - return messages -} - -/** - * Create mock messages for a complex full-stack development task - * Shows extended workflow with many varied operations - */ -export const createFullStackMessages = (): ClineMessage[] => { - let currentTime = BASE_TIMESTAMP - - const messages: ClineMessage[] = [ - { - ts: currentTime, - type: "ask", - ask: "command", - text: "Build a complete full-stack application with authentication, database, and API", - }, - ] - - // Generate 15-20 messages with varied timing - const messageCount = 15 + randomInterval(0, 5) // 15-20 messages - - const messageTypes = [ - { type: "say", say: "text", baseText: "Analyzing requirements and planning architecture" }, - { type: "ask", ask: "tool", baseText: "Creating database schema" }, - { type: "say", say: "command_output", baseText: "Database created successfully" }, - { type: "ask", ask: "tool", baseText: "Setting up authentication middleware" }, - { type: "say", say: "text", baseText: "Implementing user registration and login" }, - { type: "ask", ask: "tool", baseText: "Creating API endpoints" }, - { type: "say", say: "checkpoint_saved", baseText: "Checkpoint saved" }, - { type: "ask", ask: "tool", baseText: "Building frontend components" }, - { type: "say", say: "text", baseText: "Adding responsive design and styling" }, - { type: "ask", ask: "tool", baseText: "Implementing state management" }, - { type: "say", say: "error", baseText: "Build error: dependency conflict" }, - { type: "ask", ask: "tool", baseText: "Fixing dependency issues" }, - { type: "say", say: "command_output", baseText: "Build successful" }, - { type: "ask", ask: "tool", baseText: "Running tests and deployment" }, - { type: "say", say: "text", baseText: "Application deployed successfully" }, - ] - - for (let i = 1; i < messageCount && i < messageTypes.length + 1; i++) { - // Vary timing based on message type - let interval: number - const msgType = messageTypes[(i - 1) % messageTypes.length] - - if (msgType.ask === "tool") { - // Tool operations: 2-8 seconds - interval = randomInterval(2000, 8000) - } else if (msgType.say === "command_output") { - // Command outputs: quick 500ms-2s - interval = randomInterval(500, 2000) - } else if (msgType.say === "checkpoint_saved") { - // Checkpoints: very quick 200-600ms - interval = randomInterval(200, 600) - } else if (msgType.say === "error") { - // Errors: quick 800-2s - interval = randomInterval(800, 2000) - } else { - // Text responses: 3-15 seconds (thinking time) - interval = randomInterval(3000, 15000) - } - - currentTime += interval - - messages.push({ - ts: currentTime, - type: msgType.type as "ask" | "say", - ...(msgType.ask && { ask: msgType.ask as any }), - ...(msgType.say && { say: msgType.say as any }), - text: - msgType.baseText + (msgType.ask === "tool" ? JSON.stringify({ tool: "example", path: "file.ts" }) : ""), - }) - } - - return messages -} - -/** - * Create mock messages for TaskHeader stories - * Shows a realistic agent workflow with proper read/write ratios - */ -export const createTaskHeaderMessages = (): ClineMessage[] => { - let currentTime = BASE_TIMESTAMP - const messages: ClineMessage[] = [] - - // Helper to add message with realistic timing - const addMessage = (message: Omit, timingRange: [number, number] = [800, 1200]) => { - messages.push({ ...message, ts: currentTime }) - currentTime += randomInterval(timingRange[0], timingRange[1]) - } - - // Initial user request - addMessage( - { - type: "ask", - ask: "command", - text: "Create a React component with TypeScript that displays user profiles. Include proper prop types, error handling, and responsive design.", - }, - [0, 0], - ) // No delay for first message - - // Agent response and API request - addMessage( - { - type: "say", - say: "text", - text: "I'll help you create a React component with TypeScript for displaying user profiles. Let me start by examining the project structure.", - }, - [2000, 4000], - ) - - addMessage( - { - type: "say", - say: "api_req_started", - text: JSON.stringify({ - cost: undefined, // API request in progress - provider: "anthropic", - model: "claude-3-sonnet-20240229", - }), - }, - [500, 1000], - ) - - // Realistic workflow: Read files to understand context (happens 2-3x more than writes) - const filesToRead = [ - "package.json", - "src/types/User.ts", - "src/components/common/Card.tsx", - "src/styles/globals.css", - "src/utils/api.ts", - "src/hooks/useUsers.ts", - ] - - filesToRead.forEach((file) => { - addMessage( - { - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "read_file", - path: file, - }), - }, - [1000, 2000], - ) - - addMessage( - { - type: "say", - say: "text", - text: `Reading ${file} to understand the project structure...`, - }, - [800, 1500], - ) - }) - - // First checkpoint after analysis - addMessage( - { - type: "say", - say: "checkpoint_saved", - text: "Checkpoint saved after analyzing project structure", - }, - [200, 600], - ) - - // Write main component - addMessage( - { - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "write_to_file", - path: "src/components/UserProfile.tsx", - content: - 'export interface UserProfileProps {\n user: User\n onEdit?: () => void\n}\n\nexport const UserProfile: React.FC = ({ user, onEdit }) => {\n return (\n \n {user.name}\n

{user.name}

\n

{user.email}

\n
\n )\n}', - }), - }, - [3000, 6000], - ) - - addMessage( - { - type: "say", - say: "text", - text: "Created UserProfile component with TypeScript interfaces and proper prop types.", - }, - [1000, 2000], - ) - - // Read more files for styling context - addMessage( - { - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "read_file", - path: "src/components/UserProfile.tsx", - }), - }, - [1000, 2000], - ) - - // Write styles - addMessage( - { - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "write_to_file", - path: "src/components/UserProfile.module.css", - content: - ".user-profile {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 1rem;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}", - }), - }, - [2000, 4000], - ) - - // Write tests - addMessage( - { - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "write_to_file", - path: "src/components/__tests__/UserProfile.test.tsx", - content: - "import { render, screen } from '@testing-library/react'\nimport { UserProfile } from '../UserProfile'\n\ntest('renders user profile', () => {\n const mockUser = { name: 'John Doe', email: 'john@example.com' }\n render()\n expect(screen.getByText('John Doe')).toBeInTheDocument()\n})", - }), - }, - [2000, 5000], - ) - - // Second checkpoint after implementation - addMessage( - { - type: "say", - say: "checkpoint_saved", - text: "Checkpoint saved after implementing UserProfile component", - }, - [200, 600], - ) - - // Read package.json to check dependencies - addMessage( - { - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "read_file", - path: "package.json", - }), - }, - [1000, 2000], - ) - - // Final summary - addMessage( - { - type: "say", - say: "text", - text: "I've successfully created a UserProfile component with TypeScript, proper prop types, responsive design, and comprehensive tests. The component includes error handling and follows React best practices.", - }, - [5000, 10000], - ) - - // Task completion - addMessage( - { - type: "say", - say: "completion_result", - text: "Task completed successfully. Created UserProfile component with TypeScript interfaces, responsive CSS, and unit tests.", - }, - [2000, 4000], - ) - - return messages -} - -/** - * Create a mock task message for TaskHeader stories - */ -export const createMockTask = (): ClineMessage => ({ - ts: BASE_TIMESTAMP, - type: "ask", - ask: "command", - text: "Create a React component with TypeScript that displays user profiles. Include proper prop types, error handling, and responsive design. The component should fetch data from an API and handle loading states gracefully.", - images: [ - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==", - ], -}) - -/** - * Create mock messages for a very quick task - * Shows minimum timing constraints and fast operations - */ -export const createQuickTaskMessages = (): ClineMessage[] => [ - { - ts: BASE_TIMESTAMP, - type: "ask", - ask: "command", - text: "Quick fix", - }, - { - ts: BASE_TIMESTAMP + 500, // Very quick response - type: "say", - say: "text", - text: "Done!", - }, - { - ts: BASE_TIMESTAMP + 800, // Quick tool use - type: "ask", - ask: "tool", - text: JSON.stringify({ tool: "apply_diff", path: "fix.ts" }), - }, - { - ts: BASE_TIMESTAMP + 1000, // Immediate result - type: "say", - say: "command_output", - text: "Fixed", - }, -] - -/** - * Create mock messages for testing different message types - * Includes examples of all message types supported by the timeline registry - */ -export const createMessageTypeVarietyMessages = (): ClineMessage[] => { - let currentTime = BASE_TIMESTAMP - const messages: ClineMessage[] = [] - - // Helper to add message with timing - const addMessage = (message: Omit, timingRange: [number, number] = [1000, 3000]) => { - messages.push({ ...message, ts: currentTime }) - currentTime += randomInterval(timingRange[0], timingRange[1]) - } - - // All supported ASK message types from registry - addMessage( - { - type: "ask", - ask: "command", - text: "Create a new React component with TypeScript support", - }, - [0, 0], - ) // First message has no delay - - addMessage( - { - type: "ask", - ask: "followup", - text: "Please review the implementation and provide feedback", - }, - [2000, 4000], - ) - - addMessage( - { - type: "ask", - ask: "followup", - text: "Would you like me to add error handling to this component?", - }, - [1000, 2000], - ) - - addMessage( - { - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "read_file", - path: "src/components/UserProfile.tsx", - }), - }, - [1000, 3000], - ) - - addMessage( - { - type: "ask", - ask: "tool", - text: JSON.stringify({ - tool: "write_to_file", - path: "src/components/NewComponent.tsx", - content: "export const NewComponent = () =>
Hello World
", - }), - }, - [2000, 4000], - ) - - addMessage( - { - type: "ask", - ask: "browser_action_launch", - text: "Launching browser to test the component", - }, - [1000, 2000], - ) - - addMessage( - { - type: "ask", - ask: "use_mcp_server", - text: "Using MCP server to fetch additional data", - }, - [1500, 3000], - ) - - addMessage( - { - type: "ask", - ask: "completion_result", - text: "Task completed successfully! Created a new React component with proper TypeScript typing and error handling.", - }, - [3000, 5000], - ) - - // All supported SAY message types from registry - addMessage( - { - type: "say", - say: "text", - text: "I'll help you create a new React component. Let me analyze the requirements first.", - }, - [2000, 4000], - ) - - addMessage( - { - type: "say", - say: "reasoning", - text: "Based on the project structure, I should use functional components with hooks for better performance and maintainability.", - }, - [3000, 6000], - ) - - addMessage( - { - type: "say", - say: "command_output", - text: "File created successfully: src/components/NewComponent.tsx", - }, - [500, 1500], - ) - - addMessage( - { - type: "say", - say: "mcp_server_response", - text: "MCP server returned user data successfully", - }, - [1000, 2000], - ) - - addMessage( - { - type: "say", - say: "browser_action", - text: "Clicking on the submit button to test form functionality", - }, - [800, 1500], - ) - - addMessage( - { - type: "say", - say: "browser_action_result", - text: "Button click successful - form submitted correctly", - }, - [500, 1000], - ) - - addMessage( - { - type: "say", - say: "checkpoint_saved", - text: "Checkpoint saved after component creation", - }, - [200, 600], - ) - - addMessage( - { - type: "say", - say: "completion_result", - text: "All components have been successfully created and tested", - }, - [2000, 4000], - ) - - addMessage( - { - type: "say", - say: "error", - text: "Error: TypeScript compilation failed. Missing import statement for React.", - }, - [800, 2000], - ) - - addMessage( - { - type: "say", - say: "condense_context", - text: "Condensing conversation to save context space", - }, - [1000, 2000], - ) - - addMessage( - { - type: "say", - say: "text", - text: "Context condensed - removed redundant information while preserving key details", - }, - [1500, 3000], - ) - - return messages -} diff --git a/apps/storybook/src/mockData/index.ts b/apps/storybook/src/mockData/index.ts deleted file mode 100644 index bb0b05c212..0000000000 --- a/apps/storybook/src/mockData/index.ts +++ /dev/null @@ -1,91 +0,0 @@ -// kilocode_change - new file -export * from "./clineMessages" - -export const mockMarketplaceItems = [ - { - id: "filesystem-mcp", - name: "File System MCP", - description: "Provides tools for reading, writing, and managing files and directories on the local filesystem.", - author: "Anthropic", - tags: ["files", "filesystem", "core"], - type: "mcp" as const, - url: "https://github.com/anthropics/mcp-filesystem", - content: "npm install @anthropic-ai/mcp-filesystem", - }, - { - id: "database-mcp", - name: "Database MCP", - description: "Connect to and query various databases including PostgreSQL, MySQL, and SQLite.", - author: "Community", - tags: ["database", "sql", "data"], - type: "mcp" as const, - url: "https://github.com/community/mcp-database", - content: "npm install mcp-database", - }, - { - id: "architect-mode", - name: "Architect Mode", - description: "Plan and design system architecture before implementation. Perfect for complex projects.", - author: "Kilocode", - tags: ["planning", "design", "architecture"], - type: "mode" as const, - content: - "slug: architect\nname: Architect\nmodel: anthropic/claude-sonnet-4\nprompt: |\n You are an experienced software architect.", - }, - { - id: "debug-mode", - name: "Debug Mode", - description: "Advanced debugging capabilities with step-by-step analysis and error tracking.", - author: "Kilocode", - tags: ["debugging", "analysis", "troubleshooting"], - type: "mode" as const, - content: - "slug: debug\nname: Debug\nmodel: anthropic/claude-sonnet-4\nprompt: |\n You are a debugging specialist.", - }, -] - -export const mockModes = [ - { - slug: "code", - name: "Code", - description: - "Write, modify, or refactor code. Ideal for implementing features, fixing bugs, creating new files, or making code improvements across any programming language or framework.", - roleDefinition: - "You are Axon Code, a highly skilled software engineer with extensive knowledge in many programming languages, frameworks, design patterns, and best practices.", - whenToUse: "Use this mode when you need to write, modify, or refactor code.", - groups: ["edit", "read", "command"], - source: "builtin" as const, - }, - { - slug: "architect", - name: "Architect", - description: - "Plan, design, or strategize before implementation. Perfect for breaking down complex problems, creating technical specifications, designing system architecture.", - roleDefinition: "You are an experienced software architect specializing in system design and planning.", - whenToUse: "Use this mode when you need to plan, design, or strategize before implementation.", - groups: ["edit", "read"], - source: "builtin" as const, - }, -] - -export const createMockMarketplaceStateManager = (activeTab: "mcp" | "mode" = "mcp") => ({ - getState: () => ({ - allItems: mockMarketplaceItems, - organizationMcps: [], - displayItems: mockMarketplaceItems, - displayOrganizationMcps: [], - isFetching: false, - activeTab, - filters: { - type: "", - search: "", - tags: [], - installed: "all" as const, - }, - installedMetadata: { global: {}, project: {} }, - }), - transition: () => Promise.resolve(), - onStateChange: () => () => {}, - cleanup: () => {}, - handleMessage: () => Promise.resolve(), -}) diff --git a/apps/storybook/src/mocks/ProfileValidator.ts b/apps/storybook/src/mocks/ProfileValidator.ts deleted file mode 100644 index 74cef22cf0..0000000000 --- a/apps/storybook/src/mocks/ProfileValidator.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class ProfileValidator { - static isProfileAllowed(apiConfiguration: any, organizationAllowList: any): boolean { - // Mock implementation for Storybook - always return true - return true - } -} diff --git a/apps/storybook/src/mocks/vscode.ts b/apps/storybook/src/mocks/vscode.ts deleted file mode 100644 index 7fbb7fb967..0000000000 --- a/apps/storybook/src/mocks/vscode.ts +++ /dev/null @@ -1,59 +0,0 @@ -// Minimal VSCode API mock for browser environments (Storybook) - -const ColorThemeKind = { - Light: 1, - Dark: 2, - HighContrast: 3, - HighContrastLight: 4, -} as const - -const window = { - get activeColorTheme() { - try { - // In browser/Storybook environment, detect theme from DOM - const themeContainer = document.querySelector("[data-theme]") - const currentTheme = themeContainer?.getAttribute("data-theme") - - if (currentTheme === "light") { - return { kind: ColorThemeKind.Light } - } - } catch { - // Fallback on any DOM errors - } - - // Default to dark theme - return { kind: ColorThemeKind.Dark } - }, -} - -const workspace = { - getConfiguration: () => ({ - get: (key: string) => { - if (key === "workbench.colorTheme") { - try { - const themeContainer = document.querySelector("[data-theme]") - const currentTheme = themeContainer?.getAttribute("data-theme") - - if (currentTheme === "light") { - return "Light+ (default light)" - } - } catch { - // Fallback on any DOM errors - } - - return "Dark+ (default dark)" - } - return undefined - }, - }), -} - -// Export everything for both namespace and named imports -export { ColorThemeKind, window, workspace } - -// Export everything as default for compatibility -export default { - ColorThemeKind, - window, - workspace, -} diff --git a/apps/storybook/src/utils/StoryTable.tsx b/apps/storybook/src/utils/StoryTable.tsx deleted file mode 100644 index 42fc3d7089..0000000000 --- a/apps/storybook/src/utils/StoryTable.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { cn } from "@/lib/utils" -import type { ReactNode } from "react" - -export interface StoryTableCellProps { - label?: string - props: Props -} - -export interface StoryTableProps { - rows?: StoryTableCellProps[] - columns?: StoryTableCellProps[] - renderCellFn?: (props: ColumnProps & RowProps) => ReactNode - cellClassName?: string -} - -/** - * StoryTable - A utility component for rendering component variations in a table format - * - * Enables comprehensive visual testing by displaying all combinations of component. - * - * Example usage: - * ```tsx - * const variantRows = buildSimpleTableProps({ variant: ["default", "destructive", "outline"] }) - * const sizeColumns = buildSimpleTableProps({ size: ["sm", "default", "lg"] }) - * - * } - * cellClassName="p-4" - * /> - * ``` - */ -export function StoryTable(props: StoryTableProps) { - const { - rows = [{ label: "", props: {} as RowProps }], - columns = [{ label: "", props: {} as ColumnProps }], - renderCellFn, - cellClassName, - } = props - - const rowsWithDefault = rows.length > 0 ? rows : [{ label: "", props: {} as RowProps }] - const columnsWithDefault = columns.length > 0 ? columns : [{ label: "", props: {} as ColumnProps }] - - const rowLabelStyle = cn("flex justify-end items-center p-2 min-w-16") - const colLabelStyle = cn(rowLabelStyle, "justify-start") - const cellStyle = cn(rowLabelStyle, "justify-center", cellClassName) - - return ( - - - - - ))} - - - - {rowsWithDefault.map((row) => ( - - - - {columnsWithDefault.map((col) => ( - - ))} - - ))} - -
- {columnsWithDefault.map((col) => ( - -
{col.label}
-
-
{row.label}
-
-
{renderCellFn?.({ ...col.props, ...row.props })}
-
- ) -} diff --git a/apps/storybook/src/utils/createExtensionStateMock.ts b/apps/storybook/src/utils/createExtensionStateMock.ts deleted file mode 100644 index 5ade755b05..0000000000 --- a/apps/storybook/src/utils/createExtensionStateMock.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { ExtensionStateContextType } from "../../../../webview-ui/src/context/ExtensionStateContext" - -/** - * Zero-maintenance mock for ExtensionState in Storybook - * - * Uses a Proxy to automatically return sensible defaults for any property. - * No need to maintain a list of properties - it just works. - */ -export const createExtensionStateMock = ( - overrides: Partial = {}, -): ExtensionStateContextType => { - return new Proxy(overrides, { - get(target: any, prop: string | symbol) { - const propName = String(prop) - - // Return override if provided - if (propName in target) { - return target[propName] - } - - // Functions return no-ops - if (propName.startsWith("set") || propName.startsWith("toggle")) { - return () => {} - } - - // Booleans default to false - if ( - propName.startsWith("is") || - propName.startsWith("has") || - propName.startsWith("show") || - propName.endsWith("Enabled") - ) { - return false - } - - // Arrays default to empty - if (propName.endsWith("s") || propName.includes("List") || propName.includes("Array")) { - return [] - } - - // Objects default to empty - if (propName.includes("Config") || propName.includes("Settings") || propName === "theme") { - return {} - } - - // Strings default to empty - if ( - propName.endsWith("Id") || - propName.endsWith("Name") || - propName.endsWith("Url") || - propName === "language" - ) { - return "" - } - - // Numbers default to 0 - if (propName.endsWith("Count") || propName.endsWith("Limit")) { - return 0 - } - - // Everything else is undefined (which is fine for optional properties) - return undefined - }, - }) as ExtensionStateContextType -} diff --git a/apps/storybook/src/utils/createTableStory.tsx b/apps/storybook/src/utils/createTableStory.tsx deleted file mode 100644 index e821c9a69f..0000000000 --- a/apps/storybook/src/utils/createTableStory.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from "react" -import { StoryTable } from "./StoryTable" - -/** - * Creates a story object that makes rendering a matrix of properties quick and easy - * - * The rows and columns are properly typed based on the component's props, ensuring type safety. - * - * Example usage: - * ```tsx - * export const Variants = createTableStory({ - * component: Button, - * rows: { variant: ["default", "destructive", "outline"] }, - * columns: { size: ["sm", "default", "lg"] }, - * defaultProps: { children: "Button", onClick: fn() } - * }) - * ``` - */ -export function createTableStory>(props: { - component: React.ComponentType - rows?: { - [K in keyof T]?: readonly T[K][] - } - columns?: { - [K in keyof T]?: readonly T[K][] - } - defaultProps?: Partial - cellClassName?: string - storyParameters?: Record -}) { - const { - component: Component, - rows = {}, - columns = {}, - defaultProps = {} as Partial, - cellClassName, - storyParameters, - } = props - - const rowProps = buildLabledProps(rows as Record) - const columnProps = buildLabledProps(columns as Record) - - // If no rows or columns specified, create a simple single-cell table - const finalRows = rowProps.length > 0 ? rowProps : [{ label: "", props: {} }] - const finalColumns = columnProps.length > 0 ? columnProps : [{ label: "", props: {} }] - - return { - render: () => ( - } - cellClassName={cellClassName} - /> - ), - parameters: storyParameters, - } -} - -function buildLabledProps(props: Record) { - return Object.keys(props) - .map((propName) => { - const propValues = props[propName] - return propValues.map((option) => ({ - label: `${propName} = ${String(option)}`, - props: { [propName]: option }, - })) - }) - .flat() -} diff --git a/apps/storybook/src/utils/randomUtils.ts b/apps/storybook/src/utils/randomUtils.ts deleted file mode 100644 index 807c8495dd..0000000000 --- a/apps/storybook/src/utils/randomUtils.ts +++ /dev/null @@ -1,11 +0,0 @@ -import seedrandom from "seedrandom" - -/** - * Seeded random number generator for reproducible but varied timing - * Used across storybook mock data to ensure consistent but realistic variations - */ -const rng = seedrandom("cline-messages-mock-data") - -export const randomInterval = (min: number, max: number): number => { - return Math.floor(rng() * (max - min + 1)) + min -} diff --git a/apps/storybook/stories/Badge.stories.tsx b/apps/storybook/stories/Badge.stories.tsx deleted file mode 100644 index a6fbac23d7..0000000000 --- a/apps/storybook/stories/Badge.stories.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite" -import { Badge } from "@/components/ui/badge" -import { createTableStory } from "../src/utils/createTableStory" - -const BADGE_VARIANTS = ["default", "secondary", "destructive", "outline"] as const - -const meta = { - title: "Components/Badge", - component: Badge, - parameters: { - layout: "centered", - }, - tags: ["autodocs"], - argTypes: { - variant: { - control: { type: "select" }, - options: BADGE_VARIANTS, - }, - }, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Default: Story = { - args: { - children: "Badge", - }, -} - -export const Variants = createTableStory({ - component: Badge, - rows: { variant: BADGE_VARIANTS }, - columns: { children: ["Badge", "42", "This is a longer badge text"] }, - cellClassName: "p-4", -}) diff --git a/apps/storybook/stories/Button.stories.tsx b/apps/storybook/stories/Button.stories.tsx deleted file mode 100644 index dd6be449ac..0000000000 --- a/apps/storybook/stories/Button.stories.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite" -import { fn } from "storybook/test" -import { Button } from "@/components/ui/button" -import { createTableStory } from "../src/utils/createTableStory" - -const BUTTON_VARIANTS = ["default", "destructive", "outline", "secondary", "ghost", "link"] as const -const BUTTON_SIZES = ["default", "sm", "lg", "icon"] as const -const STORY_TABLE_SIZES = ["default", "sm", "lg"] as const - -const meta = { - title: "Components/Button", - component: Button, - parameters: { - layout: "centered", - }, - tags: ["autodocs"], - argTypes: { - variant: { - control: { type: "select" }, - options: BUTTON_VARIANTS, - }, - size: { - control: { type: "select" }, - options: BUTTON_SIZES, - }, - }, - args: { onClick: fn() }, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Default: Story = { - args: { - children: "Button", - }, -} - -export const Variants = createTableStory({ - component: Button, - rows: { variant: BUTTON_VARIANTS }, - columns: { size: STORY_TABLE_SIZES }, - defaultProps: { children: "Button", onClick: fn() }, -}) - -export const States = createTableStory({ - component: Button, - rows: { variant: BUTTON_VARIANTS }, - columns: { disabled: [false, true] }, - defaultProps: { children: "Button", onClick: fn() }, -}) diff --git a/apps/storybook/stories/ChatView.stories.tsx b/apps/storybook/stories/ChatView.stories.tsx deleted file mode 100644 index 241e93dbc2..0000000000 --- a/apps/storybook/stories/ChatView.stories.tsx +++ /dev/null @@ -1,225 +0,0 @@ -// kilocode_change - new file -import React from "react" -import type { Meta, StoryObj } from "@storybook/react-vite" -import { fn } from "storybook/test" - -import ChatView from "../../../webview-ui/src/components/chat/ChatView" -import { createTaskHeaderMessages, createMockTask, BASE_TIMESTAMP } from "../src/mockData/clineMessages" - -const meta = { - title: "Chat/ChatView", - component: ChatView, - tags: ["autodocs"], - argTypes: { - isHidden: { - control: "boolean", - description: "Whether the chat view is hidden", - }, - showAnnouncement: { - control: "boolean", - description: "Whether to show the announcement banner", - }, - hideAnnouncement: { - action: "hideAnnouncement", - description: "Function to hide the announcement", - }, - }, - args: { - isHidden: false, - showAnnouncement: false, - hideAnnouncement: fn(), - }, - decorators: [ - (Story) => ( -
- -
- ), - ], -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Default: Story = { - args: { - isHidden: false, - showAnnouncement: false, - hideAnnouncement: fn(), - }, - parameters: { - extensionState: { - clineMessages: [createMockTask(), ...createTaskHeaderMessages()], - organizationAllowList: { - allowAll: true, - providers: {}, - }, - dismissedNotificationIds: [], // Add this for consistency - currentTaskItem: { - id: "task-1", - ts: BASE_TIMESTAMP, - task: "Create a React component with TypeScript", - tokensIn: 1250, - tokensOut: 850, - cacheWrites: 45, - cacheReads: 120, - totalCost: 0.15, - conversationStats: { - messagesTotal: 12, - messagesEnvironment: 3, - messagesUser: 2, - messagesAssistant: 7, - }, - }, - taskHistory: [ - { - id: "task-1", - ts: BASE_TIMESTAMP - 3600000, // 1 hour ago - task: "Previous completed task", - tokensIn: 800, - tokensOut: 600, - cacheWrites: 20, - cacheReads: 80, - totalCost: 0.08, - conversationStats: { - messagesTotal: 8, - messagesEnvironment: 2, - messagesUser: 1, - messagesAssistant: 5, - }, - }, - ], - apiConfiguration: { - apiProvider: "anthropic", - apiModelId: "claude-3-5-sonnet-20241022", - apiKey: "mock-key", - }, - mcpServers: [], - allowedCommands: [], - mode: "code", - customModes: [], - gitCommits: [], - openedTabs: [{ path: "src/components/ChatView.tsx", isDirty: false }], - filePaths: ["src/components/ChatView.tsx", "package.json", "README.md"], - }, - }, -} - -export const EmptyWithNotificationsAndHistory: Story = { - args: { - isHidden: false, - showAnnouncement: false, - hideAnnouncement: fn(), - }, - decorators: [ - (Story) => { - // Mock notifications for KilocodeNotifications component - React.useEffect(() => { - const mockNotifications = [ - { - id: "notification-1", - title: "New Feature Available", - message: "Try our new AI-powered code analysis feature to improve your development workflow.", - action: { - actionText: "Learn More", - actionURL: "https://kilocode.com/features/code-analysis", - }, - }, - { - id: "notification-2", - title: "System Maintenance", - message: - "Scheduled maintenance will occur on Sunday, 2:00 AM UTC. Services may be temporarily unavailable.", - }, - ] - - // Simulate the message event that KilocodeNotifications listens for - const mockEvent = new MessageEvent("message", { - data: { - type: "kilocodeNotificationsResponse", - notifications: mockNotifications, - }, - }) - - // Dispatch the mock event after a short delay to ensure component is mounted - const timer = setTimeout(() => { - window.dispatchEvent(mockEvent) - }, 100) - - return () => clearTimeout(timer) - }, []) - - return ( -
-
- -
-
- ) - }, - ], - parameters: { - extensionState: { - clineMessages: [], // Empty messages for empty chat view - organizationAllowList: { - allowAll: true, - providers: {}, - }, - dismissedNotificationIds: [], // Add this to fix the undefined error - currentTaskItem: null, // No current task - taskHistory: [ - { - id: "task-1", - ts: BASE_TIMESTAMP - 7200000, // 2 hours ago - task: "Create a responsive navigation component with TypeScript", - tokensIn: 1850, - tokensOut: 1200, - cacheWrites: 65, - cacheReads: 180, - totalCost: 0.22, - conversationStats: { - messagesTotal: 18, - messagesEnvironment: 4, - messagesUser: 3, - messagesAssistant: 11, - }, - }, - { - id: "task-2", - ts: BASE_TIMESTAMP - 3600000, // 1 hour ago - task: "Debug authentication flow and fix login issues", - tokensIn: 950, - tokensOut: 720, - cacheWrites: 30, - cacheReads: 95, - totalCost: 0.12, - conversationStats: { - messagesTotal: 10, - messagesEnvironment: 2, - messagesUser: 2, - messagesAssistant: 6, - }, - }, - ], - apiConfiguration: { - apiProvider: "kilocode", // Set to kilocode to show notifications - apiModelId: "claude-3-5-sonnet-20241022", - apiKey: "mock-key", - }, - mcpServers: [], - allowedCommands: [], - mode: "code", - customModes: [], - gitCommits: [], - openedTabs: [{ path: "src/components/Navigation.tsx", isDirty: false }], - filePaths: ["src/components/Navigation.tsx", "src/auth/login.ts", "package.json", "README.md"], - telemetrySetting: "enabled", // Set to enabled to show notifications instead of telemetry banner - }, - }, -} diff --git a/apps/storybook/stories/Colors.stories.tsx b/apps/storybook/stories/Colors.stories.tsx deleted file mode 100644 index fe21f9186d..0000000000 --- a/apps/storybook/stories/Colors.stories.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite" - -interface ColorSampleProps { - variable: string -} - -const ColorSample = ({ variable }: ColorSampleProps) => ( - - -
-
- {variable} -
- - -) - -const ColorPreviewTable = () => { - const colorVariables = [ - "--vscode-editor-background", - "--vscode-button-background", - "--vscode-activityBar-background", - "--vscode-statusBar-background", - "--vscode-errorForeground", - "--vscode-focusBorder", - ] - - return ( -
-

VS Code Theme Colors

- - - - - - - - {colorVariables.map((variable, index) => ( - - ))} - -
- Color Variable -
-
- ) -} - -const meta: Meta = { - title: "System/Theme", - component: ColorPreviewTable, - parameters: { - layout: "fullscreen", - docs: { - description: { - component: - "A preview of VS Code theme colors that change between light and dark modes. Used for snapshot testing to verify theme switching functionality.", - }, - }, - }, -} - -export default meta -type Story = StoryObj - -export const ColorPreview: Story = { - name: "Colors", - parameters: { - docs: { - description: { - story: "Displays VS Code color variables with their visual representation. The colors automatically adapt based on the current theme (light/dark mode).", - }, - }, - }, -} diff --git a/apps/storybook/stories/ContextWindowProgress.stories.tsx b/apps/storybook/stories/ContextWindowProgress.stories.tsx deleted file mode 100644 index df63c0b742..0000000000 --- a/apps/storybook/stories/ContextWindowProgress.stories.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite" - -import { ContextWindowProgress } from "../../../webview-ui/src/components/chat/ContextWindowProgress" -import { TooltipProvider } from "../../../webview-ui/src/components/ui/tooltip" - -const meta = { - title: "Chat/ContextWindowProgress", - component: ContextWindowProgress, - decorators: [ - (Story) => ( - - - - ), - ], - parameters: { - layout: "padded", - }, - tags: ["autodocs"], - argTypes: { - contextWindow: { - control: { type: "number" }, - description: "Total context window size in tokens", - }, - contextTokens: { - control: { type: "number" }, - description: "Current tokens used in context", - }, - maxTokens: { - control: { type: "number" }, - description: "Maximum tokens reserved for model output", - }, - }, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const UnderLimit: Story = { - args: { - contextWindow: 128000, - contextTokens: 45000, // ~35% usage - maxTokens: 4096, - }, -} - -export const OverLimit: Story = { - args: { - contextWindow: 128000, - contextTokens: 75000, // ~59% usage - maxTokens: 4096, - }, -} diff --git a/apps/storybook/stories/DisplaySettings.stories.tsx b/apps/storybook/stories/DisplaySettings.stories.tsx deleted file mode 100644 index 806f750fe5..0000000000 --- a/apps/storybook/stories/DisplaySettings.stories.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite" -import { fn } from "storybook/test" -import { DisplaySettings } from "../../../webview-ui/src/components/settings/DisplaySettings" - -const meta = { - title: "Settings/DisplaySettings", - component: DisplaySettings, - parameters: { - layout: "padded", - }, - tags: ["autodocs"], - argTypes: { - showTaskTimeline: { - control: { type: "boolean" }, - description: "Whether the task timeline is enabled", - }, - }, - args: { - setCachedStateField: fn(), - }, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Default: Story = {} diff --git a/apps/storybook/stories/ImageWarningBanner.stories.tsx b/apps/storybook/stories/ImageWarningBanner.stories.tsx deleted file mode 100644 index 8a8e2a8fb1..0000000000 --- a/apps/storybook/stories/ImageWarningBanner.stories.tsx +++ /dev/null @@ -1,28 +0,0 @@ -// kilocode_change new file - Storybook stories for ImageWarningBanner component -import type { Meta, StoryObj } from "@storybook/react-vite" -import { ImageWarningBanner } from "../../../webview-ui/src/components/chat/ImageWarningBanner" - -const meta = { - title: "Chat/ImageWarningBanner", - component: ImageWarningBanner, - tags: ["autodocs"], - args: { - isVisible: true, - onDismiss: () => {}, - }, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const ModelNoImageSupport: Story = { - args: { - messageKey: "kilocode:imageWarnings.modelNoImageSupport", - }, -} - -export const MaxImagesReached: Story = { - args: { - messageKey: "kilocode:imageWarnings.maxImagesReached", - }, -} diff --git a/apps/storybook/stories/KiloModeSelector.stories.tsx b/apps/storybook/stories/KiloModeSelector.stories.tsx deleted file mode 100644 index 6f2b49e589..0000000000 --- a/apps/storybook/stories/KiloModeSelector.stories.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import React, { useState } from "react" -import type { Meta, StoryObj } from "@storybook/react-vite" -import KiloModeSelector from "../../../webview-ui/src/components/kilocode/KiloModeSelector" -import { Mode } from "@roo/modes" -import { DEFAULT_MODES } from "@roo-code/types" -import { withI18n } from "../src/decorators/withI18n" -import { withTheme } from "../src/decorators/withTheme" -import { withTooltipProvider } from "../src/decorators/withTooltipProvider" - -interface WrapperProps { - value?: Mode - customModes?: any - modeShortcutText?: string - title?: string - disabled?: boolean - initiallyOpen?: boolean -} - -const KiloModeSelectorWrapper = (props: WrapperProps) => { - const [selectedMode, setSelectedMode] = useState(props.value || "code") - - return ( -
- -
- ) -} - -const meta: Meta = { - title: "Chat/KiloModeSelector", - component: KiloModeSelectorWrapper, - decorators: [withI18n, withTheme, withTooltipProvider], -} - -export default meta -type Story = StoryObj - -const defaultArgs = { - customModes: DEFAULT_MODES, - modeShortcutText: "⌘ + . for next mode, ⌘ + Shift + . for previous mode", - title: "Select Mode", -} - -export const Default: Story = { - args: { - ...defaultArgs, - value: "code" as Mode, - }, -} - -export const Architect: Story = { - args: { - ...defaultArgs, - value: "architect" as Mode, - }, -} - -export const Disabled: Story = { - args: { - ...defaultArgs, - value: "debug" as Mode, - disabled: true, - }, -} - -export const Open: Story = { - args: { - ...defaultArgs, - value: "ask" as Mode, - initiallyOpen: true, - }, -} diff --git a/apps/storybook/stories/KiloProfileSelector.stories.tsx b/apps/storybook/stories/KiloProfileSelector.stories.tsx deleted file mode 100644 index ba272c4f2c..0000000000 --- a/apps/storybook/stories/KiloProfileSelector.stories.tsx +++ /dev/null @@ -1,67 +0,0 @@ -// kilocode_change - new file -import React, { useState } from "react" -import type { Meta, StoryObj } from "@storybook/react-vite" -import { KiloProfileSelector } from "../../../webview-ui/src/components/kilocode/chat/KiloProfileSelector" -import { withI18n } from "../src/decorators/withI18n" -import { withTheme } from "../src/decorators/withTheme" -import { withTooltipProvider } from "../src/decorators/withTooltipProvider" -import { withLimitedWidth } from "../src/decorators/withLimitedWidth" - -interface KiloProfileSelectorStoryProps { - initiallyOpen?: boolean -} - -const KiloProfileSelectorStory = ({ initiallyOpen }: KiloProfileSelectorStoryProps) => { - const [pinnedConfigs, setPinnedConfigs] = useState>({ - "anthropic-1": true, - "openai-2": false, - }) - - const mockApiConfigs = [ - { id: "anthropic-1", name: "Anthropic Claude" }, - { id: "gemini-3", name: "Google Gemini" }, - { id: "local-4", name: "Local Ollama" }, - ] - - const togglePinnedApiConfig = (configId: string) => { - setPinnedConfigs((prev) => ({ - ...prev, - [configId]: !prev[configId], - })) - console.log("Toggled pin for config:", configId) - } - - return ( -
- -
- ) -} - -const meta: Meta = { - title: "Chat/KiloProfileSelector", - component: KiloProfileSelectorStory, - decorators: [withI18n, withTheme, withTooltipProvider, withLimitedWidth(400)], -} - -export default meta -type Story = StoryObj - -export const Default: Story = { - args: {}, -} - -export const Open: Story = { - args: { - initiallyOpen: true, - }, -} diff --git a/apps/storybook/stories/KiloTaskHeader.stories.tsx b/apps/storybook/stories/KiloTaskHeader.stories.tsx deleted file mode 100644 index 1acbf3e41a..0000000000 --- a/apps/storybook/stories/KiloTaskHeader.stories.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite" -import { fn } from "storybook/test" - -import KiloTaskHeader from "../../../webview-ui/src/components/kilocode/KiloTaskHeader" -import { createTaskHeaderMessages, createMockTask } from "../src/mockData/clineMessages" -import { withTooltipProvider } from "../src/decorators/withTooltipProvider" -import { withExtensionState } from "../src/decorators/withExtensionState" - -const meta = { - title: "Chat/KiloTaskHeader", - component: KiloTaskHeader, - decorators: [withTooltipProvider, withExtensionState], - argTypes: {}, - args: { - handleCondenseContext: fn(), - onClose: fn(), - onMessageClick: fn(), - }, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Default: Story = { - args: { - task: createMockTask(), - tokensIn: 1250, - tokensOut: 850, - cacheWrites: 45, - cacheReads: 120, - totalCost: 0.15, - contextTokens: 15000, - buttonsDisabled: false, - handleCondenseContext: fn(), - onClose: fn(), - groupedMessages: createTaskHeaderMessages(), - onMessageClick: fn(), - isTaskActive: true, - }, - parameters: { - extensionState: { - showTaskTimeline: true, - }, - }, -} - -export const WithoutTimeline: Story = { - args: { - ...Default.args, - groupedMessages: [], - }, - parameters: { - extensionState: { - showTaskTimeline: false, - }, - }, -} - -export const NearContextLimit: Story = { - args: { - ...Default.args, - contextTokens: 95000, - }, - parameters: { - extensionState: { - showTaskTimeline: true, - }, - }, -} diff --git a/apps/storybook/stories/LabeledProgress.stories.tsx b/apps/storybook/stories/LabeledProgress.stories.tsx deleted file mode 100644 index 7d7a773272..0000000000 --- a/apps/storybook/stories/LabeledProgress.stories.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite" -import { LabeledProgress } from "@/components/ui/labeled-progress" -import { createTableStory } from "../src/utils/createTableStory" - -const meta = { - title: "Components/LabeledProgress", - component: LabeledProgress, - parameters: { - layout: "centered", - }, - tags: ["autodocs"], - argTypes: { - label: { - control: { type: "text" }, - }, - currentValue: { - control: { type: "number", min: 0 }, - }, - limitValue: { - control: { type: "number", min: 1 }, - }, - className: { - control: { type: "text" }, - }, - }, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Default: Story = { - args: { - label: "Storage Used", - currentValue: 75, - limitValue: 100, - }, -} - -export const Empty: Story = { - args: { - label: "No Usage", - currentValue: 0, - limitValue: 100, - }, -} - -export const ProgressStates = createTableStory({ - component: LabeledProgress, - rows: { - currentValue: [0, 50, 100, 120] as const, - }, - columns: { - limitValue: [100] as const, - }, - defaultProps: { - label: "Progress", - currentValue: 50, - limitValue: 100, - }, - cellClassName: "w-64", -}) diff --git a/apps/storybook/stories/MarketplaceView.stories.tsx b/apps/storybook/stories/MarketplaceView.stories.tsx deleted file mode 100644 index 410e3f4f69..0000000000 --- a/apps/storybook/stories/MarketplaceView.stories.tsx +++ /dev/null @@ -1,68 +0,0 @@ -// kilocode_change - new file -import type { Meta, StoryObj } from "@storybook/react-vite" -import { MarketplaceView } from "../../../webview-ui/src/components/marketplace/MarketplaceView" -import { createMockMarketplaceStateManager } from "../src/mockData" -import { createExtensionStateMock } from "../src/utils/createExtensionStateMock" -import { withSidebarContainer } from "../src/decorators/withSidebarContainer" - -const meta = { - title: "Views/MarketplaceView", - component: MarketplaceView, - argTypes: { - targetTab: { - control: { type: "select" }, - options: ["mcp", "mode"], - description: "Which tab should be active initially", - }, - hideHeader: { - control: "boolean", - description: "Whether to hide the header", - }, - onDone: { - action: "onDone", - description: "Callback when done button is clicked", - }, - }, - args: { - hideHeader: false, - onDone: () => {}, - }, - decorators: [withSidebarContainer()], - parameters: { - extensionState: createExtensionStateMock({ - organizationAllowList: { - allowAll: true, - providers: {}, - }, - apiConfiguration: { - apiProvider: "anthropic", - apiModelId: "claude-3-5-sonnet-20241022", - apiKey: "mock-key", - }, - marketplaceInstalledMetadata: { - global: {}, - project: {}, - }, - mcpServers: [], - mode: "code", - customModes: [], - }), - }, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const MCPTab: Story = { - args: { - stateManager: createMockMarketplaceStateManager("mcp") as any, - targetTab: "mcp", - }, -} - -export const ModeTab: Story = { - args: { - stateManager: createMockMarketplaceStateManager("mode") as any, - targetTab: "mode", - }, -} diff --git a/apps/storybook/stories/McpExecution.stories.tsx b/apps/storybook/stories/McpExecution.stories.tsx deleted file mode 100644 index 6976d5c5f1..0000000000 --- a/apps/storybook/stories/McpExecution.stories.tsx +++ /dev/null @@ -1,172 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite" -import { fn } from "storybook/test" - -import { McpExecution } from "../../../webview-ui/src/components/chat/McpExecution" -import { withTooltipProvider } from "../src/decorators/withTooltipProvider" - -const meta = { - title: "Chat/McpExecution", - component: McpExecution, - parameters: { layout: "padded" }, -} satisfies Meta - -export default meta -type Story = StoryObj - -// Mock server configuration -const mockServer = { - tools: [ - { - name: "get_weather", - description: "Get current weather information for a location", - alwaysAllow: false, - }, - { - name: "search_files", - description: "Search for files in the project directory", - alwaysAllow: true, - }, - ], - source: "global" as const, -} - -// Sample JSON arguments -const jsonArguments = JSON.stringify( - { - location: "San Francisco, CA", - units: "metric", - include_forecast: true, - }, - null, - 2, -) - -// Sample JSON response -const jsonResponse = JSON.stringify( - { - location: "San Francisco, CA", - temperature: 18, - humidity: 65, - conditions: "Partly cloudy", - forecast: [ - { day: "Tomorrow", high: 20, low: 15, conditions: "Sunny" }, - { day: "Tuesday", high: 19, low: 14, conditions: "Cloudy" }, - ], - }, - null, - 2, -) - -export const CompletedWithJsonResponse: Story = { - name: "Completed - JSON Response", - args: { - executionId: "exec-003", - text: jsonArguments, - serverName: "weather-server", - useMcpServer: { - type: "use_mcp_tool", - serverName: "weather-server", - toolName: "get_weather", - arguments: jsonArguments, - response: jsonResponse, - }, - server: mockServer, - alwaysAllowMcp: false, - initiallyExpanded: true, - }, -} - -export const CompletedWithMarkdownResponse: Story = { - name: "Completed - Markdown Response", - args: { - executionId: "exec-004", - text: jsonArguments, - serverName: "weather-server", - useMcpServer: { - type: "use_mcp_tool", - serverName: "weather-server", - toolName: "get_weather", - arguments: jsonArguments, - response: `# Weather Report - -**Location:** San Francisco, CA -**Temperature:** 18°C -**Humidity:** 65% -**Conditions:** Partly cloudy - -## 3-Day Forecast - -- **Tomorrow:** Sunny, High: 20°C, Low: 15°C -- **Tuesday:** Cloudy, High: 19°C, Low: 14°C -- **Wednesday:** Rain, High: 17°C, Low: 12°C`, - }, - server: mockServer, - alwaysAllowMcp: false, - initiallyExpanded: true, - }, -} - -export const RunningState: Story = { - name: "Running State", - args: { - executionId: "exec-005", - text: jsonArguments, - serverName: "weather-server", - useMcpServer: { - type: "use_mcp_tool", - serverName: "weather-server", - toolName: "get_weather", - arguments: jsonArguments, - }, - server: mockServer, - alwaysAllowMcp: false, - }, - play: async ({ canvasElement }) => { - // Simulate a running execution by dispatching a status message - window.dispatchEvent( - new MessageEvent("message", { - data: { - type: "mcpExecutionStatus", - text: JSON.stringify({ - executionId: "exec-005", - status: "started", - serverName: "weather-server", - toolName: "get_weather", - }), - }, - }), - ) - }, -} - -export const ErrorState: Story = { - name: "Error State", - args: { - executionId: "exec-006", - text: jsonArguments, - serverName: "weather-server", - useMcpServer: { - type: "use_mcp_tool", - serverName: "weather-server", - toolName: "get_weather", - arguments: jsonArguments, - }, - server: mockServer, - alwaysAllowMcp: false, - }, - play: async ({ canvasElement }) => { - // Simulate an error state - window.dispatchEvent( - new MessageEvent("message", { - data: { - type: "mcpExecutionStatus", - text: JSON.stringify({ - executionId: "exec-006", - status: "error", - error: "Connection timeout to weather service", - }), - }, - }), - ) - }, -} diff --git a/apps/storybook/stories/ModesView.stories.tsx b/apps/storybook/stories/ModesView.stories.tsx deleted file mode 100644 index e98f448e04..0000000000 --- a/apps/storybook/stories/ModesView.stories.tsx +++ /dev/null @@ -1,39 +0,0 @@ -// kilocode_change - new file -import type { Meta, StoryObj } from "@storybook/react-vite" - -import ModesView from "../../../webview-ui/src/components/modes/ModesView" -import { mockModes } from "../src/mockData" -import { createExtensionStateMock } from "../src/utils/createExtensionStateMock" -import { withSidebarContainer } from "../src/decorators/withSidebarContainer" - -const meta = { - title: "Views/ModesView", - component: ModesView, - argTypes: { - onDone: { - action: "onDone", - description: "Callback when done button is clicked", - }, - }, - decorators: [withSidebarContainer(400)], // ModesView needs more width for its content - parameters: { - extensionState: createExtensionStateMock({ - customModePrompts: {}, - listApiConfigMeta: [], - currentApiConfigName: "anthropic", - mode: "code", - customInstructions: "", - setCustomInstructions: () => {}, - customModes: mockModes as any, // Cast to bypass complex type requirements for Storybook - }), - }, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Default: Story = { - args: { - onDone: () => {}, - }, -} diff --git a/apps/storybook/stories/TaskHeader.stories.tsx b/apps/storybook/stories/TaskHeader.stories.tsx deleted file mode 100644 index ceb094e326..0000000000 --- a/apps/storybook/stories/TaskHeader.stories.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite" -import { fn } from "storybook/test" - -import TaskHeader from "../../../webview-ui/src/components/chat/TaskHeader" -import { createMockTask } from "../src/mockData/clineMessages" -import { withTooltipProvider } from "../src/decorators/withTooltipProvider" - -const meta = { - title: "Roo/TaskHeader", - component: TaskHeader, - decorators: [withTooltipProvider], - args: { - handleCondenseContext: fn(), - }, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Default: Story = { - args: { - task: createMockTask(), - tokensIn: 1250, - tokensOut: 850, - cacheWrites: 45, - cacheReads: 120, - totalCost: 0.15, - contextTokens: 15000, - buttonsDisabled: false, - handleCondenseContext: fn(), - }, -} diff --git a/apps/storybook/stories/TaskTimeline.stories.tsx b/apps/storybook/stories/TaskTimeline.stories.tsx deleted file mode 100644 index 88545eae90..0000000000 --- a/apps/storybook/stories/TaskTimeline.stories.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite" -import { fn } from "storybook/test" -import { TaskTimeline } from "../../../webview-ui/src/components/chat/TaskTimeline" -import { - createComponentCreationMessages, - createDebuggingMessages, - createFullStackMessages, - createMessageTypeVarietyMessages, -} from "../src/mockData/clineMessages" - -const meta = { - title: "Chat/TaskTimeline", - component: TaskTimeline, - parameters: { - layout: "padded", - }, - tags: ["autodocs"], - argTypes: {}, - args: { - onMessageClick: fn(), - }, -} satisfies Meta - -export default meta -type Story = StoryObj - -export const CompletedTask: Story = { - args: { - groupedMessages: createComponentCreationMessages(), - onMessageClick: fn(), - isTaskActive: false, - }, -} - -export const ActiveTask: Story = { - args: { - groupedMessages: createDebuggingMessages(), - onMessageClick: fn(), - isTaskActive: true, - }, -} - -export const LongTask: Story = { - args: { - groupedMessages: createFullStackMessages(), - onMessageClick: fn(), - isTaskActive: false, - }, -} - -export const AllMessageTypes: Story = { - name: "All Supported Message Types", - args: { - groupedMessages: createMessageTypeVarietyMessages(), - onMessageClick: fn(), - isTaskActive: false, - }, - parameters: { - docs: { - description: { - story: "Displays examples of all message types supported by the timeline registry, including ask types (command, followup, tool, browser_action_launch, use_mcp_server, completion_result) and say types (text, reasoning, command_output, mcp_server_response, browser_action, browser_action_result, checkpoint_saved, completion_result, error, condense_context). Each message type has its own color and translation.", - }, - }, - }, -} - -export const NarrowWindow: Story = { - name: "Narrow Window", - args: { - groupedMessages: createMessageTypeVarietyMessages(), - onMessageClick: fn(), - isTaskActive: false, - }, - decorators: [ - (Story) => ( -
- -
- ), - ], -} diff --git a/apps/storybook/stories/TelemetryBanner.stories.tsx b/apps/storybook/stories/TelemetryBanner.stories.tsx deleted file mode 100644 index bc84f25023..0000000000 --- a/apps/storybook/stories/TelemetryBanner.stories.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite" -import TelemetryBanner from "../../../webview-ui/src/components/common/TelemetryBanner" - -const meta = { - title: "System/TelemetryBanner", - component: TelemetryBanner, - tags: ["autodocs"], -} satisfies Meta - -export default meta -type Story = StoryObj - -export const Default: Story = {} diff --git a/apps/storybook/stories/VirtualQuotaFallbackProvider.stories.tsx b/apps/storybook/stories/VirtualQuotaFallbackProvider.stories.tsx deleted file mode 100644 index 7a653fe9d2..0000000000 --- a/apps/storybook/stories/VirtualQuotaFallbackProvider.stories.tsx +++ /dev/null @@ -1,83 +0,0 @@ -// kilocode_change - new file -import type { Meta, StoryObj } from "@storybook/react-vite" -import { fn } from "storybook/test" -import { VirtualLimitInputsPresentation } from "../../../webview-ui/src/components/settings/providers/VirtualQuotaFallbackProviderPresentation" -import { withExtensionState } from "../src/decorators/withExtensionState" - -const meta = { - title: "Settings/Providers/VirtualQuotaFallbackProvider", - component: VirtualLimitInputsPresentation, - decorators: [withExtensionState], - tags: ["autodocs"], -} satisfies Meta - -export default meta -type Story = StoryObj - -export const WithQuotas: Story = { - args: { - profile: { - profileId: "anthropic-1", - profileName: "Anthropic Claude", - profileLimits: { - tokensPerMinute: 1000, - tokensPerHour: 50000, - tokensPerDay: 200000, - requestsPerMinute: 5, - requestsPerHour: 100, - requestsPerDay: 1000, - }, - }, - usage: { - minute: { tokens: 45, requests: 1 }, - hour: { tokens: 2300, requests: 23 }, - day: { tokens: 12000, requests: 120 }, - }, - index: 0, - onProfileChange: fn(), - }, -} - -export const HighUsage: Story = { - args: { - profile: { - profileId: "openai-1", - profileName: "OpenAI GPT-4", - profileLimits: { - tokensPerMinute: 2000, - tokensPerHour: 80000, - tokensPerDay: 500000, - requestsPerMinute: 10, - requestsPerHour: 200, - requestsPerDay: 2000, - }, - }, - usage: { - minute: { tokens: 1800, requests: 9 }, - hour: { tokens: 75000, requests: 180 }, - day: { tokens: 450000, requests: 1800 }, - }, - index: 0, - onProfileChange: fn(), - }, -} - -export const NoUsageData: Story = { - args: { - profile: { - profileId: "test-provider", - profileName: "Test Provider", - profileLimits: { - tokensPerMinute: 500, - tokensPerHour: 10000, - tokensPerDay: 50000, - requestsPerMinute: 3, - requestsPerHour: 50, - requestsPerDay: 500, - }, - }, - usage: null, - index: 0, - onProfileChange: fn(), - }, -} diff --git a/apps/storybook/tsconfig.json b/apps/storybook/tsconfig.json deleted file mode 100644 index 9130417426..0000000000 --- a/apps/storybook/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": "../../webview-ui/tsconfig.json", - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@/*": ["../../webview-ui/src/*"], - "@src/*": ["../../webview-ui/src/*"], - "@roo/*": ["../../src/shared/*"] - }, - "types": ["react", "react-dom"], - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "strict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noFallthroughCasesInSwitch": true, - "skipLibCheck": true - }, - "include": ["stories/**/*", "src/**/*", ".storybook/**/*", "../webview-ui/src/**/*"], - "exclude": ["node_modules", "storybook-static"] -} diff --git a/packages/types/src/vscode.ts b/packages/types/src/vscode.ts index 8161070f62..b6f1c1bcda 100644 --- a/packages/types/src/vscode.ts +++ b/packages/types/src/vscode.ts @@ -44,7 +44,6 @@ export const commandIds = [ "historyButtonClicked", "marketplaceButtonClicked", - "popoutButtonClicked", "cloudButtonClicked", "settingsButtonClicked", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d82111683b..911bf2b234 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -181,109 +181,6 @@ importers: specifier: 5.8.3 version: 5.8.3 - apps/storybook: - dependencies: - '@radix-ui/react-slot': - specifier: ^1.1.2 - version: 1.2.3(@types/react@18.3.23)(react@18.3.1) - '@roo-code/types': - specifier: workspace:^ - version: link:../../packages/types - '@vscode/codicons': - specifier: ^0.0.36 - version: 0.0.36 - change-case: - specifier: ^5.4.4 - version: 5.4.4 - class-variance-authority: - specifier: ^0.7.1 - version: 0.7.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - lucide-react: - specifier: ^0.513.0 - version: 0.513.0(react@18.3.1) - react: - specifier: ^18.3.1 - version: 18.3.1 - react-dom: - specifier: ^18.3.1 - version: 18.3.1(react@18.3.1) - seedrandom: - specifier: ^3.0.5 - version: 3.0.5 - shiki: - specifier: ^3.2.1 - version: 3.4.1 - styled-components: - specifier: ^6.1.13 - version: 6.1.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - tailwind-merge: - specifier: ^2.6.0 - version: 2.6.0 - tailwindcss: - specifier: ^4.0.0 - version: 4.1.8 - devDependencies: - '@chromatic-com/storybook': - specifier: ^4.0.1 - version: 4.1.1(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))) - '@storybook/addon-docs': - specifier: ^9.0.18 - version: 9.1.3(@types/react@18.3.23)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))) - '@storybook/addon-links': - specifier: ^9.0.18 - version: 9.1.3(react@18.3.1)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))) - '@storybook/react-vite': - specifier: ^9.0.18 - version: 9.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.40.2)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))(typescript@5.8.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - '@storybook/test-runner': - specifier: ^0.23.0 - version: 0.23.0(@types/node@24.2.1)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))) - '@tailwindcss/vite': - specifier: ^4.0.0 - version: 4.1.6(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - '@types/react': - specifier: ^18.3.23 - version: 18.3.23 - '@types/react-dom': - specifier: ^18.3.5 - version: 18.3.7(@types/react@18.3.23) - '@types/seedrandom': - specifier: ^3.0.8 - version: 3.0.8 - '@types/styled-components': - specifier: ^5.1.34 - version: 5.1.34 - '@vitejs/plugin-react': - specifier: ^4.3.4 - version: 4.4.1(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - chromatic: - specifier: ^13.0.0 - version: 13.1.3 - jsonc-parser: - specifier: ^3.3.1 - version: 3.3.1 - node-fetch: - specifier: '2' - version: 2.7.0(encoding@0.1.13) - rimraf: - specifier: ^6.0.1 - version: 6.0.1 - storybook: - specifier: ^9.0.18 - version: 9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@4.1.8) - typescript: - specifier: ^5.4.5 - version: 5.8.3 - vite: - specifier: 6.3.5 - version: 6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0) - apps/vscode-e2e: devDependencies: '@roo-code/config-eslint': @@ -3447,12 +3344,6 @@ packages: '@chevrotain/utils@11.0.3': resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} - '@chromatic-com/storybook@4.1.1': - resolution: {integrity: sha512-+Ib4cHtEjKl/Do+4LyU0U1FhLPbIU2Q/zgbOKHBCV+dTC4T3/vGzPqiGsgkdnZyTsK/zXg96LMPSPC4jjOiapg==} - engines: {node: '>=20.0.0', yarn: '>=1.22.18'} - peerDependencies: - storybook: ^0.0.0-0 || ^9.0.0 || ^9.1.0-0 || ^9.2.0-0 || ^10.0.0-0 - '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -4573,10 +4464,6 @@ packages: node-notifier: optional: true - '@jest/create-cache-key-function@30.0.5': - resolution: {integrity: sha512-W1kmkwPq/WTMQWgvbzWSCbXSqvjI6rkqBQCxuvYmd+g6o4b5gHP98ikfh/Ei0SKzHvWdI84TOXp0hRcbpr8Q0w==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/environment@29.7.0': resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4651,15 +4538,6 @@ packages: typescript: optional: true - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1': - resolution: {integrity: sha512-J4BaTocTOYFkMHIra1JDWrMWpNmBl4EkplIwHEsV8aeUOtdWjwSnln9U7twjMFTAEB7mptNtSKyVi1Y2W9sDJw==} - peerDependencies: - typescript: '>= 4.3.x' - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - peerDependenciesMeta: - typescript: - optional: true - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -4853,9 +4731,6 @@ packages: '@napi-rs/wasm-runtime@0.2.11': resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} - '@neoconfetti/react@1.0.0': - resolution: {integrity: sha512-klcSooChXXOzIm+SE5IISIAn3bYzYfPjbX7D7HoqZL84oAfgREeSg5vSIaSFH+DaGzzvImTyWe1OyrJ67vik4A==} - '@neon-rs/load@0.0.4': resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} @@ -6613,11 +6488,6 @@ packages: peerDependencies: storybook: ^8.6.14 - '@storybook/addon-docs@9.1.3': - resolution: {integrity: sha512-iCzuHRyUgir2+ExqPO4ouxm90zW+6dkNuB4lyyFwNU10slJhVT8yGPk8PVOT6LhXMIii+7Hqc4dB0tj+kLOW/A==} - peerDependencies: - storybook: ^9.1.3 - '@storybook/addon-essentials@8.6.14': resolution: {integrity: sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==} peerDependencies: @@ -6633,15 +6503,6 @@ packages: peerDependencies: storybook: ^8.6.14 - '@storybook/addon-links@9.1.3': - resolution: {integrity: sha512-zLpOf9UYtxEaCQgbpOqOAW0f/puumwzTNA/AHDkqwe/BAOtBXyS/bocQIO6Oxj8z4kp+bYqxW6c2OA0/EyII0Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.3 - peerDependenciesMeta: - react: - optional: true - '@storybook/addon-measure@8.6.14': resolution: {integrity: sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==} peerDependencies: @@ -6680,12 +6541,6 @@ packages: storybook: ^8.6.14 vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - '@storybook/builder-vite@9.1.3': - resolution: {integrity: sha512-bstS/GsVJ5zVkRKAJociocA2omxU4CaNAP58fxS280JiRYgcrRaydDd7vwk6iGJ3xWbzwV0wH8SP54LVNyRY6Q==} - peerDependencies: - storybook: ^9.1.3 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@storybook/components@8.6.14': resolution: {integrity: sha512-HNR2mC5I4Z5ek8kTrVZlIY/B8gJGs5b3XdZPBPBopTIN6U/YHXiDyOjY3JlaS4fSG1fVhp/Qp1TpMn1w/9m1pw==} peerDependencies: @@ -6704,11 +6559,6 @@ packages: peerDependencies: storybook: ^8.6.14 - '@storybook/csf-plugin@9.1.3': - resolution: {integrity: sha512-wqh+tTCX2WZqVDVjhk/a6upsyYj/Kc85Wf6ywPx4pcFYxQZxiKF/wtuM9yzEpZC6fZHNvlKkzXWvP4wJOnm+zg==} - peerDependencies: - storybook: ^9.1.3 - '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} @@ -6741,13 +6591,6 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta storybook: ^8.6.14 - '@storybook/react-dom-shim@9.1.3': - resolution: {integrity: sha512-zIgFwZqV8cvE+lzJDcD13rItxoWyYNUWu7eJQAnHz5RnyHhpu6rFgQej7i6J3rPmy9xVe+Rq6XsXgDNs6pIekQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.3 - '@storybook/react-vite@8.6.14': resolution: {integrity: sha512-FZU0xMPxa4/TO87FgcWwappOxLBHZV5HSRK5K+2bJD7rFJAoNorbHvB4Q1zvIAk7eCMjkr2GPCPHx9PRB9vJFg==} engines: {node: '>=18.0.0'} @@ -6761,15 +6604,6 @@ packages: '@storybook/test': optional: true - '@storybook/react-vite@9.1.3': - resolution: {integrity: sha512-iNRRxA5G9Yaw5etbRdCMnJtjI1VkzA7juc+/caVhKKut25sI8cOF4GRPLCbotLz9xmitQR2X7beZMPPVIYk86A==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.3 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - '@storybook/react@8.6.14': resolution: {integrity: sha512-BOepx5bBFwl/CPI+F+LnmMmsG1wQYmrX/UQXgUbHQUU9Tj7E2ndTnNbpIuSLc8IrM03ru+DfwSg1Co3cxWtT+g==} engines: {node: '>=18.0.0'} @@ -6785,25 +6619,6 @@ packages: typescript: optional: true - '@storybook/react@9.1.3': - resolution: {integrity: sha512-CgJMk4Y8EfoFxWiTB53QxnN+nQbAkw+NBaNjsaaeDNOE1R0ximP/fn5b2jcLvM+b5ojjJiJL1QCzFyoPWImHIQ==} - engines: {node: '>=20.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.1.3 - typescript: '>= 4.9.x' - peerDependenciesMeta: - typescript: - optional: true - - '@storybook/test-runner@0.23.0': - resolution: {integrity: sha512-AVA6mSotfHAqsKjvWMNR7wcXIoCNQidU9P5GIGEdn+gArzkzTsLXZr6qNjH4XQRg8pSR+IUOuB1MMWZIHxhgoQ==} - engines: {node: '>=20.0.0'} - hasBin: true - peerDependencies: - storybook: ^0.0.0-0 || ^8.2.0 || ^9.0.0 || ^9.1.0-0 - '@storybook/test@8.6.14': resolution: {integrity: sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==} peerDependencies: @@ -6971,12 +6786,6 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@swc/jest@0.2.39': - resolution: {integrity: sha512-eyokjOwYd0Q8RnMHri+8/FS1HIrIUKK/sRrFp8c1dThUOfNeCWbLmBP1P5VsKdvmkd25JaH+OKYwEYiAYg9YAA==} - engines: {npm: '>= 7.0.0'} - peerDependencies: - '@swc/core': '*' - '@swc/types@0.1.24': resolution: {integrity: sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==} @@ -7475,11 +7284,6 @@ packages: '@types/history@4.7.11': resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} - '@types/hoist-non-react-statics@3.3.7': - resolution: {integrity: sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==} - peerDependencies: - '@types/react': '*' - '@types/html-minifier-terser@6.1.0': resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} @@ -7710,9 +7514,6 @@ packages: '@types/string-similarity@4.0.2': resolution: {integrity: sha512-LkJQ/jsXtCVMK+sKYAmX/8zEq+/46f1PTQw7YtmQwb74jemS1SlNLmARM2Zml9DgdDTWKAtc5L13WorpHPDjDA==} - '@types/styled-components@5.1.34': - resolution: {integrity: sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==} - '@types/stylis@4.2.5': resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==} @@ -7758,9 +7559,6 @@ packages: '@types/vscode@1.103.0': resolution: {integrity: sha512-o4hanZAQdNfsKecexq9L3eHICd0AAvdbLk6hA60UzGXbGH/q8b/9xv2RgR7vV3ZcHuyKVq7b37IGd/+gM4Tu+Q==} - '@types/wait-on@5.3.4': - resolution: {integrity: sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw==} - '@types/webpack@5.28.5': resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} @@ -8407,10 +8205,6 @@ packages: resolution: {integrity: sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==} engines: {node: '>=0.10.0'} - append-transform@2.0.0: - resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} - engines: {node: '>=8'} - aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} @@ -8971,10 +8765,6 @@ packages: resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} - caching-transform@4.0.0: - resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} - engines: {node: '>=8'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -9071,10 +8861,6 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - char-regex@2.0.2: - resolution: {integrity: sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==} - engines: {node: '>=12.20'} - character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -9144,30 +8930,6 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - chromatic@12.2.0: - resolution: {integrity: sha512-GswmBW9ZptAoTns1BMyjbm55Z7EsIJnUvYKdQqXIBZIKbGErmpA+p4c0BYA+nzw5B0M+rb3Iqp1IaH8TFwIQew==} - hasBin: true - peerDependencies: - '@chromatic-com/cypress': ^0.*.* || ^1.0.0 - '@chromatic-com/playwright': ^0.*.* || ^1.0.0 - peerDependenciesMeta: - '@chromatic-com/cypress': - optional: true - '@chromatic-com/playwright': - optional: true - - chromatic@13.1.3: - resolution: {integrity: sha512-aOZDwg1PsDe9/UhiXqS6EJPoCGK91hYbj3HaunV/0Ij492eWLkXIzku/e5cF1t7Ma7cAuGpCQDo0vGHg0UO91w==} - hasBin: true - peerDependencies: - '@chromatic-com/cypress': ^0.*.* || ^1.0.0 - '@chromatic-com/playwright': ^0.*.* || ^1.0.0 - peerDependenciesMeta: - '@chromatic-com/cypress': - optional: true - '@chromatic-com/playwright': - optional: true - chrome-remote-interface@0.33.3: resolution: {integrity: sha512-zNnn0prUL86Teru6UCAZ1yU1XeXljHl3gj7OrfPcarEfU62OUU4IujDPdTDW3dAWwRqN3ZMG/Chhkh2gPL/wiw==} hasBin: true @@ -9435,9 +9197,6 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@3.0.2: - resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} - commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -9465,9 +9224,6 @@ packages: common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} @@ -9827,10 +9583,6 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - cwd@0.10.0: - resolution: {integrity: sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==} - engines: {node: '>=0.8'} - cytoscape-cose-bilkent@4.1.0: resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: @@ -10169,10 +9921,6 @@ packages: resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} engines: {node: '>= 10'} - default-require-extensions@3.0.1: - resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} - engines: {node: '>=8'} - default-resolution@2.0.0: resolution: {integrity: sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==} engines: {node: '>= 0.10'} @@ -10338,9 +10086,6 @@ packages: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} - diffable-html@4.1.0: - resolution: {integrity: sha512-++kyNek+YBLH8cLXS+iTj/Hiy2s5qkRJEJ8kgu/WHbFrVY2vz9xPFUT+fii2zGF0m1CaojDlQJjkfrCt7YWM1g==} - dijkstrajs@1.0.3: resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} @@ -10378,18 +10123,12 @@ packages: dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dom-serializer@0.2.2: - resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} - dom-serializer@1.4.1: resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - domelementtype@1.3.1: - resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} @@ -10398,9 +10137,6 @@ packages: engines: {node: '>=12'} deprecated: Use your platform's native DOMException instead - domhandler@2.4.2: - resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} - domhandler@4.3.1: resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} engines: {node: '>= 4'} @@ -10412,9 +10148,6 @@ packages: dompurify@3.2.6: resolution: {integrity: sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==} - domutils@1.7.0: - resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} - domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} @@ -10669,9 +10402,6 @@ packages: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} - entities@1.1.2: - resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} - entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} @@ -11034,17 +10764,10 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - expand-tilde@1.2.2: - resolution: {integrity: sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==} - engines: {node: '>=0.10.0'} - expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} - expect-playwright@0.8.0: - resolution: {integrity: sha512-+kn8561vHAY+dt+0gMqqj1oY+g5xWrsuGMk4QGxotT2WS545nVqqjs37z6hrYfIuucwqthzwJfCJUEYqixyljg==} - expect-type@1.2.1: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} @@ -11225,10 +10948,6 @@ packages: file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - filesize@10.1.6: - resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} - engines: {node: '>= 10.4.0'} - fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} @@ -11245,29 +10964,13 @@ packages: resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} engines: {node: '>= 0.8'} - find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - find-cache-dir@4.0.0: resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} engines: {node: '>=14.16'} - find-file-up@0.1.3: - resolution: {integrity: sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==} - engines: {node: '>=0.10.0'} - find-parent-dir@0.3.1: resolution: {integrity: sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A==} - find-pkg@0.1.2: - resolution: {integrity: sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==} - engines: {node: '>=0.10.0'} - - find-process@1.4.11: - resolution: {integrity: sha512-mAOh9gGk9WZ4ip5UjV0o6Vb4SrfnAmtsFNzkMRH9HQiFXVQnDyQFrSHTK5UoG6E+KV+s+cIznbtwpfN41l2nFA==} - hasBin: true - find-replace@5.0.2: resolution: {integrity: sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==} engines: {node: '>=14'} @@ -11297,10 +11000,6 @@ packages: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} - findup-sync@2.0.0: resolution: {integrity: sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==} engines: {node: '>= 0.10'} @@ -11363,10 +11062,6 @@ packages: resolution: {integrity: sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==} engines: {node: '>=0.10.0'} - foreground-child@2.0.0: - resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} - engines: {node: '>=8.0.0'} - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -11439,16 +11134,9 @@ packages: from@0.1.7: resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - fromentries@1.3.2: - resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} - fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-exists-sync@0.1.0: - resolution: {integrity: sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==} - engines: {node: '>=0.10.0'} - fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -11678,18 +11366,10 @@ packages: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} - global-modules@0.2.3: - resolution: {integrity: sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==} - engines: {node: '>=0.10.0'} - global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} - global-prefix@0.1.5: - resolution: {integrity: sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==} - engines: {node: '>=0.10.0'} - global-prefix@1.0.2: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} @@ -11933,10 +11613,6 @@ packages: resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasha@5.2.2: - resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} - engines: {node: '>=8'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -12069,9 +11745,6 @@ packages: webpack: optional: true - htmlparser2@3.10.1: - resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} - htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} @@ -12776,10 +12449,6 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} - is-windows@0.2.0: - resolution: {integrity: sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==} - engines: {node: '>=0.10.0'} - is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -12828,14 +12497,6 @@ packages: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} - istanbul-lib-hook@3.0.0: - resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} - engines: {node: '>=8'} - - istanbul-lib-instrument@4.0.3: - resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} - engines: {node: '>=8'} - istanbul-lib-instrument@5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} @@ -12844,10 +12505,6 @@ packages: resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} - istanbul-lib-processinfo@2.0.3: - resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} - engines: {node: '>=8'} - istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} @@ -12938,10 +12595,6 @@ packages: resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-junit@16.0.0: - resolution: {integrity: sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==} - engines: {node: '>=10.12.0'} - jest-leak-detector@29.7.0: resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -12958,14 +12611,6 @@ packages: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-playwright-preset@4.0.0: - resolution: {integrity: sha512-+dGZ1X2KqtwXaabVjTGxy0a3VzYfvYsWaRcuO8vMhyclHSOpGSI1+5cmlqzzCwQ3+fv0EjkTc7I5aV9lo08dYw==} - peerDependencies: - jest: ^29.3.1 - jest-circus: ^29.3.1 - jest-environment-node: ^29.3.1 - jest-runner: ^29.3.1 - jest-pnp-resolver@1.2.3: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} @@ -12975,9 +12620,6 @@ packages: jest-resolve: optional: true - jest-process-manager@0.4.0: - resolution: {integrity: sha512-80Y6snDyb0p8GG83pDxGI/kQzwVTkCxc7ep5FPe/F6JYdvRDhwr6RzRmPSP7SEwuLhxo80lBS/NqOdUIbHIfhw==} - jest-regex-util@29.6.3: resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13002,9 +12644,6 @@ packages: resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-serializer-html@7.1.0: - resolution: {integrity: sha512-xYL2qC7kmoYHJo8MYqJkzrl/Fdlx+fat4U1AqYg+kafqwcKPiMkOcjWHPKhueuNEgr+uemhGc+jqXYiwCyRyLA==} - jest-simple-dot-reporter@1.0.5: resolution: {integrity: sha512-cZLFG/C7k0+WYoIGGuGXKm0vmJiXlWG/m3uCZ4RaMPYxt8lxjdXMLHYkxXaQ7gVWaSPe7uAPCEUcRxthC5xskg==} @@ -13020,12 +12659,6 @@ packages: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-watch-typeahead@2.2.2: - resolution: {integrity: sha512-+QgOFW4o5Xlgd6jGS5X37i08tuuXNW8X0CV9WNFi+3n8ExCIP+E1melYhvYLjv5fE6D0yyzk74vsSO8I6GqtvQ==} - engines: {node: ^14.17.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - jest: ^27.0.0 || ^28.0.0 || ^29.0.0 - jest-watcher@29.7.0: resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -13615,9 +13248,6 @@ packages: lodash.flatten@4.4.0: resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} - lodash.flattendeep@4.4.0: - resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} - lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. @@ -13698,10 +13328,6 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} - loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} - engines: {node: '>= 0.6.0'} - longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -13757,11 +13383,6 @@ packages: lru-queue@0.1.0: resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} - lucide-react@0.513.0: - resolution: {integrity: sha512-CJZKq2g8Y8yN4Aq002GahSXbG2JpFv9kXwyiOAMvUBv7pxeOFHUWKB0mO7MiY4ZVFCV4aNjv2BJFq/z3DgKPQg==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - lucide-react@0.518.0: resolution: {integrity: sha512-kFg34uQqnVl/7HwAiigxPSpj//43VIVHQbMygQPtS1yT4btMXHCWUipHcgcXHD2pm1Z2nUBA/M+Vnh/YmWXQUw==} peerDependencies: @@ -13788,10 +13409,6 @@ packages: magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -14594,10 +14211,6 @@ packages: resolution: {integrity: sha512-QHJ2gAJiqA3cM7cQiRjLsfCOBRB0TwQ6axYD4FSllQWipEbP6i7Se1dP8EzPKk5J1nCe27W69eqPmCoKyQ61Vg==} engines: {node: '>=14'} - node-preload@0.2.1: - resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} - engines: {node: '>=8'} - node-pty@1.1.0-beta9: resolution: {integrity: sha512-/Ue38pvXJdgRZ3+me1FgfglLd301GhJN0NStiotdt61tm43N5htUyR/IXOUzOKuNaFmCwIhy6nwb77Ky41LMbw==} @@ -14702,11 +14315,6 @@ packages: nwsapi@2.2.20: resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} - nyc@15.1.0: - resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} - engines: {node: '>=8.9'} - hasBin: true - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -14872,10 +14480,6 @@ packages: os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - os-homedir@1.0.2: - resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} - engines: {node: '>=0.10.0'} - os-locale@1.4.0: resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==} engines: {node: '>=0.10.0'} @@ -14978,10 +14582,6 @@ packages: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} - p-map@3.0.0: - resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} - engines: {node: '>=8'} - p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -15042,10 +14642,6 @@ packages: resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} engines: {node: '>= 14'} - package-hash@4.0.0: - resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} - engines: {node: '>=8'} - package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -15942,10 +15538,6 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - process-on-spawn@1.1.0: - resolution: {integrity: sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==} - engines: {node: '>=8'} - process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -16163,10 +15755,6 @@ packages: resolution: {integrity: sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg==} engines: {node: '>=16.14.0'} - react-docgen@8.0.1: - resolution: {integrity: sha512-kQKsqPLplY3Hx4jGnM3jpQcG3FQDt7ySz32uTHt3C9HAe45kNXG+3o16Eqn3Fw1GtMfHoN3b4J/z2e6cZJCmqQ==} - engines: {node: ^20.9.0 || >=22} - react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -16536,10 +16124,6 @@ packages: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} - release-zalgo@1.0.0: - resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} - engines: {node: '>=4'} - remark-directive@3.0.1: resolution: {integrity: sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==} @@ -16648,10 +16232,6 @@ packages: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} - resolve-dir@0.1.1: - resolution: {integrity: sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==} - engines: {node: '>=0.10.0'} - resolve-dir@1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} @@ -17102,10 +16682,6 @@ packages: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -17229,13 +16805,6 @@ packages: resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==} engines: {node: '>= 0.10'} - spawn-wrap@2.0.0: - resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} - engines: {node: '>=8'} - - spawnd@5.0.0: - resolution: {integrity: sha512-28+AJr82moMVWolQvlAIv3JcYDkjkFTEmfDc503wxrF5l2rQ3dFz6DpbXp3kD4zmgGGldfM4xM4v1sFj/ZaIOA==} - spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} @@ -17346,15 +16915,6 @@ packages: prettier: optional: true - storybook@9.1.3: - resolution: {integrity: sha512-Sm+qP3iGb/QKx/jTYdfE0mIeTmA2HF+5k9fD70S9oOJq3F9UdW8MLgs+5PE+E/xAfDjZU4OWAKEOyA6EYIvQHg==} - hasBin: true - peerDependencies: - prettier: ^2 || ^3 - peerDependenciesMeta: - prettier: - optional: true - stream-chain@2.2.5: resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} @@ -17398,10 +16958,6 @@ packages: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} - string-length@5.0.1: - resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} - engines: {node: '>=12.20'} - string-similarity@4.0.4: resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -17650,9 +17206,6 @@ packages: tabbable@5.3.3: resolution: {integrity: sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==} - tailwind-merge@2.6.0: - resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} - tailwind-merge@3.3.0: resolution: {integrity: sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ==} @@ -18249,10 +17802,6 @@ packages: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -18733,16 +18282,6 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - wait-on@7.2.0: - resolution: {integrity: sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==} - engines: {node: '>=12.0.0'} - hasBin: true - - wait-port@0.2.14: - resolution: {integrity: sha512-kIzjWcr6ykl7WFbZd0TMae8xovwqcqbx6FM9l+7agOgUByhzdjfzZBPK2CPufldTOMxbUivss//Sh9MFawmPRQ==} - engines: {node: '>=8'} - hasBin: true - walk-up-path@4.0.0: resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} engines: {node: 20 || >=22} @@ -21198,18 +20737,6 @@ snapshots: '@chevrotain/utils@11.0.3': {} - '@chromatic-com/storybook@4.1.1(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))': - dependencies: - '@neoconfetti/react': 1.0.0 - chromatic: 12.2.0 - filesize: 10.1.6 - jsonfile: 6.2.0 - storybook: 9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - strip-ansi: 7.1.0 - transitivePeerDependencies: - - '@chromatic-com/cypress' - - '@chromatic-com/playwright' - '@colors/colors@1.5.0': optional: true @@ -22974,10 +22501,6 @@ snapshots: - supports-color - ts-node - '@jest/create-cache-key-function@30.0.5': - dependencies: - '@jest/types': 30.0.5 - '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 @@ -23018,6 +22541,7 @@ snapshots: dependencies: '@types/node': 24.2.1 jest-regex-util: 30.0.1 + optional: true '@jest/reporters@29.7.0': dependencies: @@ -23055,6 +22579,7 @@ snapshots: '@jest/schemas@30.0.5': dependencies: '@sinclair/typebox': 0.34.40 + optional: true '@jest/source-map@29.6.3': dependencies: @@ -23114,6 +22639,7 @@ snapshots: '@types/node': 24.2.1 '@types/yargs': 17.0.33 chalk: 4.1.2 + optional: true '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.8.3)(vite@6.3.6(@types/node@20.17.57)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: @@ -23124,15 +22650,6 @@ snapshots: optionalDependencies: typescript: 5.8.3 - '@joshwooding/vite-plugin-react-docgen-typescript@0.6.1(typescript@5.8.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))': - dependencies: - glob: 10.4.5 - magic-string: 0.30.17 - react-docgen-typescript: 2.4.0(typescript@5.8.3) - vite: 6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0) - optionalDependencies: - typescript: 5.8.3 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -23438,8 +22955,6 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true - '@neoconfetti/react@1.0.0': {} - '@neon-rs/load@0.0.4': optional: true @@ -24716,7 +24231,8 @@ snapshots: '@sinclair/typebox@0.27.8': {} - '@sinclair/typebox@0.34.40': {} + '@sinclair/typebox@0.34.40': + optional: true '@sindresorhus/is@4.6.0': {} @@ -25292,19 +24808,6 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@storybook/addon-docs@9.1.3(@types/react@18.3.23)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))': - dependencies: - '@mdx-js/react': 3.1.0(@types/react@18.3.23)(react@19.1.1) - '@storybook/csf-plugin': 9.1.3(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))) - '@storybook/icons': 1.4.0(react-dom@18.3.1(react@18.3.1))(react@19.1.1) - '@storybook/react-dom-shim': 9.1.3(react-dom@18.3.1(react@18.3.1))(react@19.1.1)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))) - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - storybook: 9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - ts-dedent: 2.2.0 - transitivePeerDependencies: - - '@types/react' - '@storybook/addon-essentials@8.6.14(@types/react@18.3.23)(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/addon-actions': 8.6.14(storybook@8.6.14(prettier@3.5.3)) @@ -25335,13 +24838,6 @@ snapshots: storybook: 8.6.14(prettier@3.5.3) ts-dedent: 2.2.0 - '@storybook/addon-links@9.1.3(react@18.3.1)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))': - dependencies: - '@storybook/global': 5.0.0 - storybook: 9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - optionalDependencies: - react: 18.3.1 - '@storybook/addon-measure@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 @@ -25380,13 +24876,6 @@ snapshots: ts-dedent: 2.2.0 vite: 6.3.6(@types/node@20.17.57)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0) - '@storybook/builder-vite@9.1.3(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))': - dependencies: - '@storybook/csf-plugin': 9.1.3(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))) - storybook: 9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - ts-dedent: 2.2.0 - vite: 6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0) - '@storybook/components@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: storybook: 8.6.14(prettier@3.5.3) @@ -25417,11 +24906,6 @@ snapshots: storybook: 8.6.14(prettier@3.5.3) unplugin: 1.16.1 - '@storybook/csf-plugin@9.1.3(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))': - dependencies: - storybook: 9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - unplugin: 1.16.1 - '@storybook/global@5.0.0': {} '@storybook/icons@1.4.0(react-dom@18.3.1(react@18.3.1))(react@19.1.1)': @@ -25455,18 +24939,6 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 8.6.14(prettier@3.5.3) - '@storybook/react-dom-shim@9.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))': - dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - - '@storybook/react-dom-shim@9.1.3(react-dom@18.3.1(react@18.3.1))(react@19.1.1)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))': - dependencies: - react: 19.1.1 - react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - '@storybook/react-vite@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.40.2)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)(vite@6.3.6(@types/node@20.17.57)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.8.3)(vite@6.3.6(@types/node@20.17.57)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) @@ -25489,26 +24961,6 @@ snapshots: - supports-color - typescript - '@storybook/react-vite@9.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.40.2)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))(typescript@5.8.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))': - dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.8.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - '@rollup/pluginutils': 5.2.0(rollup@4.40.2) - '@storybook/builder-vite': 9.1.3(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - '@storybook/react': 9.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))(typescript@5.8.3) - find-up: 7.0.0 - magic-string: 0.30.17 - react: 18.3.1 - react-docgen: 8.0.1 - react-dom: 18.3.1(react@18.3.1) - resolve: 1.22.10 - storybook: 9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - tsconfig-paths: 4.2.0 - vite: 6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0) - transitivePeerDependencies: - - rollup - - supports-color - - typescript - '@storybook/react@8.6.14(@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.14(prettier@3.5.3))(typescript@5.8.3)': dependencies: '@storybook/components': 8.6.14(storybook@8.6.14(prettier@3.5.3)) @@ -25524,46 +24976,6 @@ snapshots: '@storybook/test': 8.6.14(storybook@8.6.14(prettier@3.5.3)) typescript: 5.8.3 - '@storybook/react@9.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))(typescript@5.8.3)': - dependencies: - '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 9.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - storybook: 9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - optionalDependencies: - typescript: 5.8.3 - - '@storybook/test-runner@0.23.0(@types/node@24.2.1)(storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)))': - dependencies: - '@babel/core': 7.27.1 - '@babel/generator': 7.27.1 - '@babel/template': 7.27.2 - '@babel/types': 7.27.1 - '@jest/types': 29.6.3 - '@swc/core': 1.13.5 - '@swc/jest': 0.2.39(@swc/core@1.13.5) - expect-playwright: 0.8.0 - jest: 29.7.0(@types/node@24.2.1) - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-junit: 16.0.0 - jest-playwright-preset: 4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@24.2.1)) - jest-runner: 29.7.0 - jest-serializer-html: 7.1.0 - jest-watch-typeahead: 2.2.2(jest@29.7.0(@types/node@24.2.1)) - nyc: 15.1.0 - playwright: 1.55.0 - storybook: 9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - transitivePeerDependencies: - - '@swc/helpers' - - '@types/node' - - babel-plugin-macros - - debug - - node-notifier - - supports-color - - ts-node - '@storybook/test@8.6.14(storybook@8.6.14(prettier@3.5.3))': dependencies: '@storybook/global': 5.0.0 @@ -25723,6 +25135,7 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.13.5 '@swc/core-win32-ia32-msvc': 1.13.5 '@swc/core-win32-x64-msvc': 1.13.5 + optional: true '@swc/counter@0.1.3': {} @@ -25730,16 +25143,10 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/jest@0.2.39(@swc/core@1.13.5)': - dependencies: - '@jest/create-cache-key-function': 30.0.5 - '@swc/core': 1.13.5 - '@swc/counter': 0.1.3 - jsonc-parser: 3.3.1 - '@swc/types@0.1.24': dependencies: '@swc/counter': 0.1.3 + optional: true '@szmarczak/http-timer@4.0.6': dependencies: @@ -25893,13 +25300,6 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@20.17.57)(typescript@5.8.3)) - '@tailwindcss/vite@4.1.6(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))': - dependencies: - '@tailwindcss/node': 4.1.6 - '@tailwindcss/oxide': 4.1.6 - tailwindcss: 4.1.6 - vite: 6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0) - '@tailwindcss/vite@4.1.6(vite@6.3.6(@types/node@20.17.57)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@tailwindcss/node': 4.1.6 @@ -25977,10 +25377,6 @@ snapshots: dependencies: '@testing-library/dom': 10.4.0 - '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': - dependencies: - '@testing-library/dom': 10.4.0 - '@testing-library/user-event@14.6.1(@testing-library/dom@9.3.4)': dependencies: '@testing-library/dom': 9.3.4 @@ -26283,11 +25679,6 @@ snapshots: '@types/history@4.7.11': {} - '@types/hoist-non-react-statics@3.3.7(@types/react@18.3.23)': - dependencies: - '@types/react': 18.3.23 - hoist-non-react-statics: 3.3.2 - '@types/html-minifier-terser@6.1.0': {} '@types/http-cache-semantics@4.0.4': {} @@ -26539,12 +25930,6 @@ snapshots: '@types/string-similarity@4.0.2': {} - '@types/styled-components@5.1.34': - dependencies: - '@types/hoist-non-react-statics': 3.3.7(@types/react@18.3.23) - '@types/react': 18.3.23 - csstype: 3.1.3 - '@types/stylis@4.2.5': {} '@types/svgo@1.3.6': {} @@ -26579,10 +25964,6 @@ snapshots: '@types/vscode@1.103.0': {} - '@types/wait-on@5.3.4': - dependencies: - '@types/node': 24.2.1 - '@types/webpack@5.28.5(@swc/core@1.13.5)(esbuild@0.25.9)(webpack-cli@5.1.4)': dependencies: '@types/node': 24.2.1 @@ -26722,17 +26103,6 @@ snapshots: '@use-gesture/core': 10.3.1 react: 18.3.1 - '@vitejs/plugin-react@4.4.1(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))': - dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.1) - '@types/babel__core': 7.20.5 - react-refresh: 0.17.0 - vite: 6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0) - transitivePeerDependencies: - - supports-color - '@vitejs/plugin-react@4.4.1(vite@6.3.6(@types/node@20.17.57)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@babel/core': 7.27.1 @@ -27446,10 +26816,6 @@ snapshots: dependencies: buffer-equal: 1.0.1 - append-transform@2.0.0: - dependencies: - default-require-extensions: 3.0.1 - aproba@2.0.0: {} archiver-utils@2.1.0: @@ -28163,13 +27529,6 @@ snapshots: normalize-url: 6.1.0 responselike: 2.0.1 - caching-transform@4.0.0: - dependencies: - hasha: 5.2.2 - make-dir: 3.1.0 - package-hash: 4.0.0 - write-file-atomic: 3.0.3 - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -28270,8 +27629,6 @@ snapshots: char-regex@1.0.2: {} - char-regex@2.0.2: {} - character-entities-html4@2.1.0: {} character-entities-legacy@1.1.4: {} @@ -28377,10 +27734,6 @@ snapshots: chownr@3.0.0: {} - chromatic@12.2.0: {} - - chromatic@13.1.3: {} - chrome-remote-interface@0.33.3: dependencies: commander: 2.11.0 @@ -28643,8 +27996,6 @@ snapshots: commander@2.20.3: {} - commander@3.0.2: {} - commander@4.1.1: {} commander@5.1.0: {} @@ -28659,8 +28010,6 @@ snapshots: common-path-prefix@3.0.0: {} - commondir@1.0.1: {} - component-emitter@1.3.1: {} compress-commons@4.1.2: @@ -28868,21 +28217,6 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@24.2.1): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@24.2.1)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@20.17.57)(typescript@5.8.3)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - create-require@1.1.1: {} cross-env@10.0.0: @@ -29116,11 +28450,6 @@ snapshots: csstype@3.1.3: {} - cwd@0.10.0: - dependencies: - find-pkg: 0.1.2 - fs-exists-sync: 0.1.0 - cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1): dependencies: cose-base: 1.0.3 @@ -29464,10 +28793,6 @@ snapshots: dependencies: execa: 5.1.1 - default-require-extensions@3.0.1: - dependencies: - strip-bom: 4.0.0 - default-resolution@2.0.0: {} default-shell@2.2.0: {} @@ -29595,10 +28920,6 @@ snapshots: diff@7.0.0: {} - diffable-html@4.1.0: - dependencies: - htmlparser2: 3.10.1 - dijkstrajs@1.0.3: {} dingbat-to-unicode@1.0.1: {} @@ -29634,11 +28955,6 @@ snapshots: '@babel/runtime': 7.28.4 csstype: 3.1.3 - dom-serializer@0.2.2: - dependencies: - domelementtype: 2.3.0 - entities: 2.2.0 - dom-serializer@1.4.1: dependencies: domelementtype: 2.3.0 @@ -29651,18 +28967,12 @@ snapshots: domhandler: 5.0.3 entities: 4.5.0 - domelementtype@1.3.1: {} - domelementtype@2.3.0: {} domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 - domhandler@2.4.2: - dependencies: - domelementtype: 1.3.1 - domhandler@4.3.1: dependencies: domelementtype: 2.3.0 @@ -29675,11 +28985,6 @@ snapshots: optionalDependencies: '@types/trusted-types': 2.0.7 - domutils@1.7.0: - dependencies: - dom-serializer: 0.2.2 - domelementtype: 1.3.1 - domutils@2.8.0: dependencies: dom-serializer: 1.4.1 @@ -29866,8 +29171,6 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - entities@1.1.2: {} - entities@2.2.0: {} entities@4.5.0: {} @@ -30018,7 +29321,8 @@ snapshots: esniff: 2.0.1 next-tick: 1.1.0 - es6-error@4.1.1: {} + es6-error@4.1.1: + optional: true es6-iterator@2.0.3: dependencies: @@ -30454,16 +29758,10 @@ snapshots: expand-template@2.0.3: {} - expand-tilde@1.2.2: - dependencies: - os-homedir: 1.0.2 - expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 - expect-playwright@0.8.0: {} - expect-type@1.2.1: {} expect@29.7.0: @@ -30722,8 +30020,6 @@ snapshots: file-uri-to-path@1.0.0: {} - filesize@10.1.6: {} - fill-range@4.0.0: dependencies: extend-shallow: 2.0.1 @@ -30758,34 +30054,13 @@ snapshots: transitivePeerDependencies: - supports-color - find-cache-dir@3.3.2: - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - find-cache-dir@4.0.0: dependencies: common-path-prefix: 3.0.0 pkg-dir: 7.0.0 - find-file-up@0.1.3: - dependencies: - fs-exists-sync: 0.1.0 - resolve-dir: 0.1.1 - find-parent-dir@0.3.1: {} - find-pkg@0.1.2: - dependencies: - find-file-up: 0.1.3 - - find-process@1.4.11: - dependencies: - chalk: 4.1.2 - commander: 12.1.0 - loglevel: 1.9.2 - find-replace@5.0.2: {} find-up@1.1.2: @@ -30812,12 +30087,6 @@ snapshots: locate-path: 7.2.0 path-exists: 5.0.0 - find-up@7.0.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - unicorn-magic: 0.1.0 - findup-sync@2.0.0: dependencies: detect-file: 1.0.0 @@ -30891,11 +30160,6 @@ snapshots: dependencies: for-in: 1.0.2 - foreground-child@2.0.0: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 3.0.7 - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -30955,12 +30219,8 @@ snapshots: from@0.1.7: {} - fromentries@1.3.2: {} - fs-constants@1.0.0: {} - fs-exists-sync@0.1.0: {} - fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 @@ -31259,24 +30519,12 @@ snapshots: dependencies: ini: 2.0.0 - global-modules@0.2.3: - dependencies: - global-prefix: 0.1.5 - is-windows: 0.2.0 - global-modules@1.0.0: dependencies: global-prefix: 1.0.2 is-windows: 1.0.2 resolve-dir: 1.0.1 - global-prefix@0.1.5: - dependencies: - homedir-polyfill: 1.0.3 - ini: 1.3.8 - is-windows: 0.2.0 - which: 1.3.1 - global-prefix@1.0.2: dependencies: expand-tilde: 2.0.2 @@ -31636,11 +30884,6 @@ snapshots: has-yarn@3.0.0: {} - hasha@5.2.2: - dependencies: - is-stream: 2.0.1 - type-fest: 2.19.0 - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -31886,15 +31129,6 @@ snapshots: optionalDependencies: webpack: 5.101.3(esbuild@0.25.9) - htmlparser2@3.10.1: - dependencies: - domelementtype: 1.3.1 - domhandler: 2.4.2 - domutils: 1.7.0 - entities: 1.1.2 - inherits: 2.0.4 - readable-stream: 3.6.2 - htmlparser2@6.1.0: dependencies: domelementtype: 2.3.0 @@ -32570,8 +31804,6 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - is-windows@0.2.0: {} - is-windows@1.0.2: {} is-wsl@2.2.0: @@ -32604,19 +31836,6 @@ snapshots: istanbul-lib-coverage@3.2.2: {} - istanbul-lib-hook@3.0.0: - dependencies: - append-transform: 2.0.0 - - istanbul-lib-instrument@4.0.3: - dependencies: - '@babel/core': 7.28.3 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.28.3 @@ -32637,15 +31856,6 @@ snapshots: transitivePeerDependencies: - supports-color - istanbul-lib-processinfo@2.0.3: - dependencies: - archy: 1.0.0 - cross-spawn: 7.0.6 - istanbul-lib-coverage: 3.2.2 - p-map: 3.0.0 - rimraf: 3.0.2 - uuid: 8.3.2 - istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 @@ -32740,25 +31950,6 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@24.2.1): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@20.17.57)(typescript@5.8.3)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@24.2.1) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@24.2.1)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@20.17.57)(typescript@5.8.3)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jest-config@29.7.0(@types/node@20.17.57)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@20.17.57)(typescript@5.8.3)): dependencies: '@babel/core': 7.28.3 @@ -32882,13 +32073,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - jest-junit@16.0.0: - dependencies: - mkdirp: 1.0.4 - strip-ansi: 6.0.1 - uuid: 8.3.2 - xml: 1.0.1 - jest-leak-detector@29.7.0: dependencies: jest-get-type: 29.6.3 @@ -32919,45 +32103,14 @@ snapshots: '@types/node': 24.2.1 jest-util: 29.7.0 - jest-playwright-preset@4.0.0(jest-circus@29.7.0)(jest-environment-node@29.7.0)(jest-runner@29.7.0)(jest@29.7.0(@types/node@24.2.1)): - dependencies: - expect-playwright: 0.8.0 - jest: 29.7.0(@types/node@24.2.1) - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-process-manager: 0.4.0 - jest-runner: 29.7.0 - nyc: 15.1.0 - playwright-core: 1.55.0 - rimraf: 3.0.2 - uuid: 8.3.2 - transitivePeerDependencies: - - debug - - supports-color - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): optionalDependencies: jest-resolve: 29.7.0 - jest-process-manager@0.4.0: - dependencies: - '@types/wait-on': 5.3.4 - chalk: 4.1.2 - cwd: 0.10.0 - exit: 0.1.2 - find-process: 1.4.11 - prompts: 2.4.2 - signal-exit: 3.0.7 - spawnd: 5.0.0 - tree-kill: 1.2.2 - wait-on: 7.2.0 - transitivePeerDependencies: - - debug - - supports-color - jest-regex-util@29.6.3: {} - jest-regex-util@30.0.1: {} + jest-regex-util@30.0.1: + optional: true jest-resolve-dependencies@29.7.0: dependencies: @@ -33031,10 +32184,6 @@ snapshots: transitivePeerDependencies: - supports-color - jest-serializer-html@7.1.0: - dependencies: - diffable-html: 4.1.0 - jest-simple-dot-reporter@1.0.5: {} jest-snapshot@29.7.0: @@ -33080,17 +32229,6 @@ snapshots: leven: 3.1.0 pretty-format: 29.7.0 - jest-watch-typeahead@2.2.2(jest@29.7.0(@types/node@24.2.1)): - dependencies: - ansi-escapes: 6.2.1 - chalk: 5.6.2 - jest: 29.7.0(@types/node@24.2.1) - jest-regex-util: 29.6.3 - jest-watcher: 29.7.0 - slash: 5.1.0 - string-length: 5.0.1 - strip-ansi: 7.1.2 - jest-watcher@29.7.0: dependencies: '@jest/test-result': 29.7.0 @@ -33127,18 +32265,6 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@24.2.1): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@20.17.57)(typescript@5.8.3)) - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@24.2.1) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jiti@1.21.7: {} jiti@2.4.2: {} @@ -33773,8 +32899,6 @@ snapshots: lodash.flatten@4.4.0: {} - lodash.flattendeep@4.4.0: {} - lodash.get@4.4.2: {} lodash.groupby@4.6.0: {} @@ -33837,8 +32961,6 @@ snapshots: strip-ansi: 7.1.2 wrap-ansi: 9.0.0 - loglevel@1.9.2: {} - longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -33889,10 +33011,6 @@ snapshots: dependencies: es5-ext: 0.10.64 - lucide-react@0.513.0(react@18.3.1): - dependencies: - react: 18.3.1 - lucide-react@0.518.0(react@18.3.1): dependencies: react: 18.3.1 @@ -33913,10 +33031,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - make-dir@3.1.0: - dependencies: - semver: 6.3.1 - make-dir@4.0.0: dependencies: semver: 7.7.3 @@ -35161,10 +34275,6 @@ snapshots: js-queue: 2.0.2 strong-type: 1.1.0 - node-preload@0.2.1: - dependencies: - process-on-spawn: 1.1.0 - node-pty@1.1.0-beta9: dependencies: node-addon-api: 7.1.1 @@ -35279,38 +34389,6 @@ snapshots: nwsapi@2.2.20: {} - nyc@15.1.0: - dependencies: - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - caching-transform: 4.0.0 - convert-source-map: 1.9.0 - decamelize: 1.2.0 - find-cache-dir: 3.3.2 - find-up: 4.1.0 - foreground-child: 2.0.0 - get-package-type: 0.1.0 - glob: 7.2.3 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-hook: 3.0.0 - istanbul-lib-instrument: 4.0.3 - istanbul-lib-processinfo: 2.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 - make-dir: 3.1.0 - node-preload: 0.2.1 - p-map: 3.0.0 - process-on-spawn: 1.1.0 - resolve-from: 5.0.0 - rimraf: 3.0.2 - signal-exit: 3.0.7 - spawn-wrap: 2.0.0 - test-exclude: 6.0.0 - yargs: 15.4.1 - transitivePeerDependencies: - - supports-color - object-assign@4.1.1: {} object-copy@0.1.0: @@ -35497,8 +34575,6 @@ snapshots: os-browserify@0.3.0: {} - os-homedir@1.0.2: {} - os-locale@1.4.0: dependencies: lcid: 1.0.0 @@ -35613,10 +34689,6 @@ snapshots: p-map@2.1.0: {} - p-map@3.0.0: - dependencies: - aggregate-error: 3.1.0 - p-map@4.0.0: dependencies: aggregate-error: 3.1.0 @@ -35678,13 +34750,6 @@ snapshots: degenerator: 5.0.1 netmask: 2.0.2 - package-hash@4.0.0: - dependencies: - graceful-fs: 4.2.11 - hasha: 5.2.2 - lodash.flattendeep: 4.4.0 - release-zalgo: 1.0.0 - package-json-from-dist@1.0.1: {} package-json@10.0.1: @@ -36592,10 +35657,6 @@ snapshots: process-nextick-args@2.0.1: {} - process-on-spawn@1.1.0: - dependencies: - fromentries: 1.3.2 - process@0.11.10: {} progress@1.1.8: {} @@ -36884,21 +35945,6 @@ snapshots: transitivePeerDependencies: - supports-color - react-docgen@8.0.1: - dependencies: - '@babel/core': 7.28.3 - '@babel/traverse': 7.28.3 - '@babel/types': 7.28.2 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.7 - '@types/doctrine': 0.0.9 - '@types/resolve': 1.20.6 - doctrine: 3.0.0 - resolve: 1.22.10 - strip-indent: 4.0.0 - transitivePeerDependencies: - - supports-color - react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -37394,10 +36440,6 @@ snapshots: relateurl@0.2.7: {} - release-zalgo@1.0.0: - dependencies: - es6-error: 4.1.1 - remark-directive@3.0.1: dependencies: '@types/mdast': 4.0.4 @@ -37549,11 +36591,6 @@ snapshots: dependencies: resolve-from: 5.0.0 - resolve-dir@0.1.1: - dependencies: - expand-tilde: 1.2.2 - global-modules: 0.2.3 - resolve-dir@1.0.1: dependencies: expand-tilde: 2.0.2 @@ -38132,8 +37169,6 @@ snapshots: slash@4.0.0: {} - slash@5.1.0: {} - slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.3 @@ -38282,24 +37317,6 @@ snapshots: sparkles@1.0.1: {} - spawn-wrap@2.0.0: - dependencies: - foreground-child: 2.0.0 - is-windows: 1.0.2 - make-dir: 3.1.0 - rimraf: 3.0.2 - signal-exit: 3.0.7 - which: 2.0.2 - - spawnd@5.0.0: - dependencies: - exit: 0.1.2 - signal-exit: 3.0.7 - tree-kill: 1.2.2 - wait-port: 0.2.14 - transitivePeerDependencies: - - supports-color - spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 @@ -38431,30 +37448,6 @@ snapshots: - supports-color - utf-8-validate - storybook@9.1.3(@testing-library/dom@10.4.0)(prettier@3.5.3)(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)): - dependencies: - '@storybook/global': 5.0.0 - '@testing-library/jest-dom': 6.6.3 - '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.2.1)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.19.4)(yaml@2.8.0)) - '@vitest/spy': 3.2.4 - better-opn: 3.0.2 - esbuild: 0.25.9 - esbuild-register: 3.6.0(esbuild@0.25.9) - recast: 0.23.11 - semver: 7.7.2 - ws: 8.18.3 - optionalDependencies: - prettier: 3.5.3 - transitivePeerDependencies: - - '@testing-library/dom' - - bufferutil - - msw - - supports-color - - utf-8-validate - - vite - stream-chain@2.2.5: {} stream-combiner@0.0.4: @@ -38497,11 +37490,6 @@ snapshots: char-regex: 1.0.2 strip-ansi: 6.0.1 - string-length@5.0.1: - dependencies: - char-regex: 2.0.2 - strip-ansi: 7.1.2 - string-similarity@4.0.4: {} string-width@1.0.2: @@ -38774,8 +37762,6 @@ snapshots: tabbable@5.3.3: {} - tailwind-merge@2.6.0: {} - tailwind-merge@3.3.0: {} tailwindcss-animate@1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@20.17.57)(typescript@5.8.3))): @@ -38786,10 +37772,6 @@ snapshots: dependencies: tailwindcss: 4.1.6 - tailwindcss-animate@1.0.7(tailwindcss@4.1.8): - dependencies: - tailwindcss: 4.1.8 - tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@20.17.57)(typescript@5.8.3)): dependencies: '@alloc/quick-lru': 5.2.0 @@ -39429,8 +38411,6 @@ snapshots: unicode-property-aliases-ecmascript@2.1.0: {} - unicorn-magic@0.1.0: {} - unicorn-magic@0.3.0: {} unified@11.0.5: @@ -40184,24 +39164,6 @@ snapshots: dependencies: xml-name-validator: 5.0.0 - wait-on@7.2.0: - dependencies: - axios: 1.12.2 - joi: 17.13.3 - lodash: 4.17.21 - minimist: 1.2.8 - rxjs: 7.8.2 - transitivePeerDependencies: - - debug - - wait-port@0.2.14: - dependencies: - chalk: 2.4.2 - commander: 3.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - walk-up-path@4.0.0: {} walker@1.0.8: diff --git a/src/activate/registerCommands.ts b/src/activate/registerCommands.ts index 6e74eb36e1..214ba9deee 100644 --- a/src/activate/registerCommands.ts +++ b/src/activate/registerCommands.ts @@ -130,11 +130,6 @@ const getCommandsMap = ({ context, outputChannel }: RegisterCommandOptions): Rec visibleProvider.postMessageToWebview({ type: "action", action: "promptsButtonClicked" }) }, - popoutButtonClicked: () => { - TelemetryService.instance.captureTitleButtonClicked("popout") - - return openClineInNewTab({ context, outputChannel }) - }, openInNewTab: () => openClineInNewTab({ context, outputChannel }), settingsButtonClicked: () => { const visibleProvider = getVisibleProviderOrLog(outputChannel) diff --git a/src/api/providers/kilocode-openrouter.ts b/src/api/providers/kilocode-openrouter.ts index 3c2b550d3a..d9bd6004ae 100644 --- a/src/api/providers/kilocode-openrouter.ts +++ b/src/api/providers/kilocode-openrouter.ts @@ -105,7 +105,7 @@ export class KilocodeOpenrouterHandler extends OpenRouterHandler { public override async fetchModel() { if (!this.options.kilocodeToken) { - throw new Error("KiloCode token + baseUrl is required to fetch models") + throw new Error("Your authentication token is expired, please login again") } const [models, defaultModel] = await Promise.all([ diff --git a/src/api/providers/openrouter.ts b/src/api/providers/openrouter.ts index e7dd17d0cd..e07e335ecc 100644 --- a/src/api/providers/openrouter.ts +++ b/src/api/providers/openrouter.ts @@ -219,14 +219,9 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH addNativeToolCallsToParams(requestOptions, this.options, metadata) - // kilocode_change: logs removed - let stream try { - stream = await this.client.chat.completions.create( - requestOptions, - this.customRequestOptions(metadata), // kilocode_change - ) + stream = await this.client.chat.completions.create(requestOptions, this.customRequestOptions(metadata)) } catch (error) { if (this.providerName == "KiloCode" && isAnyRecognizedKiloCodeError(error)) { throw error @@ -431,7 +426,7 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH if ("error" in response) { const error = response.error as { message?: string; code?: number } - const err = new Error(`OpenRouter API Error ${error?.code}: ${error?.message}`) as any + const err = new Error(`MatterAI API Error ${error?.code}: ${error?.message}`) as any err.status = error?.code throw err } @@ -458,7 +453,7 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH if (!apiKey) { return { success: false, - error: "OpenRouter API key is required for image generation", + error: "MatterAI API key is required for image generation", } } diff --git a/src/core/config/ContextProxy.ts b/src/core/config/ContextProxy.ts index 58a0304c94..1bf8e1fc02 100644 --- a/src/core/config/ContextProxy.ts +++ b/src/core/config/ContextProxy.ts @@ -263,6 +263,23 @@ export class ContextProxy { await Promise.all(promises) } + /** + * Refresh global state from storage and update cache + * This is useful when you need to ensure the cache has the latest values + * across multiple windows (e.g., for enterprise settings like codeReviewSettings) + */ + async refreshGlobalState(): Promise { + for (const key of GLOBAL_STATE_KEYS) { + try { + this.stateCache[key] = this.originalContext.globalState.get(key) + } catch (error) { + logger.error( + `Error refreshing global state ${key}: ${error instanceof Error ? error.message : String(error)}`, + ) + } + } + } + private getAllSecretState(): SecretState { return Object.fromEntries([ ...SECRET_STATE_KEYS.map((key) => [key, this.getSecret(key as SecretStateKey)]), diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 3fee89dc0f..1dbf9d5f1a 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -301,10 +301,11 @@ export class ClineProvider this.log("CloudService not ready, deferring cloud profile sync") } - // Multi-window synchronization: refresh secrets when window gains focus + // Multi-window synchronization: refresh secrets and global state when window gains focus const windowStateDisposable = vscode.window.onDidChangeWindowState(async (e) => { if (e.focused && this.contextProxy.isInitialized) { await this.contextProxy.refreshSecrets() + await this.contextProxy.refreshGlobalState() await this.postStateToWebview() } }) diff --git a/src/extension.ts b/src/extension.ts index 5c333993c3..c42f5cdea1 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -45,7 +45,6 @@ import { initializeI18n } from "./i18n" import { registerGhostProvider } from "./services/ghost" // kilocode_change import { registerMainThreadForwardingLogger } from "./utils/fowardingLogger" // kilocode_change import { getKiloCodeWrapperProperties } from "./core/kilocode/wrapper" // kilocode_change -import { registerAutocompleteProvider } from "./services/autocomplete" // kilocode_change /** * Built using https://github.com/microsoft/vscode-webview-ui-toolkit @@ -320,10 +319,8 @@ export async function activate(context: vscode.ExtensionContext) { // kilocode_change start - Axon Code specific registrations const { kiloCodeWrapped } = getKiloCodeWrapperProperties() if (!kiloCodeWrapped) { - // Only use autocomplete in VS Code + // Only use ghost provider in VS Code registerGhostProvider(context, provider) - // Experimental - // registerAutocompleteProvider(context, provider) } else { // Only foward logs in Jetbrains registerMainThreadForwardingLogger(context) diff --git a/src/integrations/theme/default-themes/theme-variables.css b/src/integrations/theme/default-themes/theme-variables.css index d3da607603..9d39f1ccfb 100644 --- a/src/integrations/theme/default-themes/theme-variables.css +++ b/src/integrations/theme/default-themes/theme-variables.css @@ -243,7 +243,7 @@ classes at build time based on the @theme */ --color-vscode-scrollbar-slider-hover-background: var(--vscode-scrollbar-slider-hover-background); --color-vscode-scrollbar-slider-active-background: var(--vscode-scrollbar-slider-active-background); --color-vscode-button-border: var(--vscode-button-border); ---color-vscode-button-icon-background: var(--vscode-button-icon-background); +--color-vscode-button-icon-background: var(--vscode-button-secondary-background); --color-vscode-button-icon-corner-radius: var(--vscode-button-icon-corner-radius); --color-vscode-button-icon-outline-offset: var(--vscode-button-icon-outline-offset); --color-vscode-button-icon-hover-background: var(--vscode-button-icon-hover-background); diff --git a/src/package.json b/src/package.json index 95a03fef31..cfc4573d46 100644 --- a/src/package.json +++ b/src/package.json @@ -3,7 +3,7 @@ "displayName": "%extension.displayName%", "description": "%extension.description%", "publisher": "matterai", - "version": "5.4.1", + "version": "5.4.2", "icon": "assets/icons/matterai-ic.png", "galleryBanner": { "color": "#FFFFFF", @@ -152,11 +152,6 @@ "title": "%command.memories.title%", "icon": "$(book)" }, - { - "command": "axon-code.popoutButtonClicked", - "title": "%command.openInEditor.title%", - "icon": "$(link-external)" - }, { "command": "axon-code.settingsButtonClicked", "title": "%command.settings.title%", @@ -252,36 +247,6 @@ }, "category": "%configuration.title%" }, - { - "command": "axon-code.ghost.generateSuggestions", - "title": "%ghost.commands.generateSuggestions%", - "category": "%configuration.title%" - }, - { - "command": "axon-code.ghost.cancelSuggestions", - "title": "%ghost.commands.cancelSuggestions%", - "category": "%configuration.title%" - }, - { - "command": "axon-code.ghost.applyCurrentSuggestions", - "title": "%ghost.commands.applyCurrentSuggestion%", - "category": "%configuration.title%" - }, - { - "command": "axon-code.ghost.applyAllSuggestions", - "title": "%ghost.commands.applyAllSuggestions%", - "category": "%configuration.title%" - }, - { - "command": "axon-code.ghost.goToNextSuggestion", - "title": "%ghost.commands.goToNextSuggestion%", - "category": "%configuration.title%" - }, - { - "command": "axon-code.ghost.goToPreviousSuggestion", - "title": "%ghost.commands.goToPreviousSuggestion%", - "category": "%configuration.title%" - }, { "command": "axon-code.fileEdit.accept", "title": "Accept", @@ -369,11 +334,6 @@ "group": "navigation@7", "when": "view == axon-code.SidebarProvider" }, - { - "command": "axon-code.popoutButtonClicked", - "group": "navigation@8", - "when": "view == axon-code.SidebarProvider" - }, { "command": "axon-code.helpButtonClicked", "group": "navigation@9", @@ -401,11 +361,6 @@ "group": "navigation@4", "when": "activeWebviewPanelId == axon-code.TabPanelProvider" }, - { - "command": "axon-code.popoutButtonClicked", - "group": "navigation@5", - "when": "activeWebviewPanelId == axon-code.TabPanelProvider" - }, { "command": "axon-code.settingsButtonClicked", "group": "navigation@6", @@ -450,28 +405,6 @@ "mac": "cmd+shift+a", "when": "true" }, - { - "command": "axon-code.ghost.cancelRequest", - "key": "escape", - "when": "editorTextFocus && !editorTabMovesFocus && !inSnippetMode && axoncode.ghost.isProcessing" - }, - { - "command": "axon-code.ghost.cancelSuggestions", - "key": "escape", - "when": "editorTextFocus && !editorTabMovesFocus && !inSnippetMode && axoncode.ghost.hasSuggestions" - }, - { - "command": "axon-code.ghost.generateSuggestions", - "key": "ctrl+l", - "mac": "cmd+l", - "when": "editorTextFocus && !editorTabMovesFocus && !inSnippetMode && axoncode.ghost.enableSmartInlineTaskKeybinding && !github.copilot.completions.enabled" - }, - { - "command": "axon-code.ghost.showIncompatibilityExtensionPopup", - "key": "ctrl+l", - "mac": "cmd+l", - "when": "editorTextFocus && !editorTabMovesFocus && !inSnippetMode && axoncode.ghost.enableSmartInlineTaskKeybinding && github.copilot.completions.enabled" - }, { "command": "axon-code.generateTerminalCommand", "key": "ctrl+shift+g", @@ -485,20 +418,6 @@ "linux": "ctrl+y", "when": "editorTextFocus && editorHasSelection" }, - { - "command": "axon-code.addToContextAndFocus", - "key": "ctrl+i", - "mac": "cmd+i", - "win": "ctrl+i", - "linux": "ctrl+i", - "when": "editorTextFocus && !github.copilot.completions.enabled && axoncode.ghost.enableQuickInlineTaskKeybinding" - }, - { - "command": "axon-code.ghost.showIncompatibilityExtensionPopup", - "key": "ctrl+i", - "mac": "cmd+i", - "when": "editorTextFocus && github.copilot.completions.enabled && axoncode.ghost.enableQuickInlineTaskKeybinding" - }, { "command": "axon-code.toggleAutoApprove", "key": "cmd+alt+a", diff --git a/src/package.nls.ar.json b/src/package.nls.ar.json index 8545235203..3e8f812d9b 100644 --- a/src/package.nls.ar.json +++ b/src/package.nls.ar.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "الحد الأقصى للوقت بالثواني لانتظار استجابات API (0 = بدون مهلة، 1-86400 ثانية، افتراضي: 600 ثانية). القيم الأعلى موصى بها لمقدمي الخدمة المحليين مثل LM Studio و Ollama الذين قد يحتاجون وقت معالجة أكثر.", "settings.newTaskRequireTodos.description": "مطالبة بمعامل todos عند إنشاء مهام جديدة باستخدام أداة new_task", "settings.codeIndex.embeddingBatchSize.description": "حجم الدفعة لعمليات التضمين أثناء فهرسة الكود. اضبط هذا حسب حدود مقدم API الخاص بك. القيمة الافتراضية هي 60.", - "ghost.input.title": "اضغط 'Enter' للتأكيد أو 'Escape' للإلغاء", - "ghost.input.placeholder": "صف ما تريد فعله...", - "ghost.commands.generateSuggestions": "Axon Code: إنشاء التعديلات المقترحة", - "ghost.commands.displaySuggestions": "عرض التعديلات المقترحة", - "ghost.commands.cancelSuggestions": "إلغاء التعديلات المقترحة", - "ghost.commands.applyCurrentSuggestion": "تطبيق التعديل المقترح الحالي", - "ghost.commands.applyAllSuggestions": "تطبيق جميع التعديلات المقترحة", - "ghost.commands.goToNextSuggestion": "انتقل إلى الاقتراح التالي", - "ghost.commands.goToPreviousSuggestion": "انتقل إلى الاقتراح السابق", "command.memories.title": "الذكريات" } diff --git a/src/package.nls.ca.json b/src/package.nls.ca.json index 258e5f2063..39a2032969 100644 --- a/src/package.nls.ca.json +++ b/src/package.nls.ca.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Temps màxim en segons per esperar les respostes de l'API (0 = sense temps d'espera, 1-86400s, per defecte: 600s). Es recomanen valors més alts per a proveïdors locals com LM Studio i Ollama que poden necessitar més temps de processament.", "settings.newTaskRequireTodos.description": "Requerir el paràmetre de tasques pendents quan es creïn noves tasques amb l'eina new_task", "settings.codeIndex.embeddingBatchSize.description": "La mida del lot per a operacions d'incrustació durant la indexació de codi. Ajusta això segons els límits del teu proveïdor d'API. Per defecte és 60.", - "ghost.input.title": "Premeu 'Enter' per confirmar o 'Escape' per cancel·lar", - "ghost.input.placeholder": "Descriviu què voleu fer...", - "ghost.commands.generateSuggestions": "Axon Code: Generar Edicions Suggerides", - "ghost.commands.displaySuggestions": "Mostrar Edicions Suggerides", - "ghost.commands.cancelSuggestions": "Cancel·lar Edicions Suggerides", - "ghost.commands.applyCurrentSuggestion": "Aplicar Edició Suggerida Actual", - "ghost.commands.applyAllSuggestions": "Aplicar Totes les Edicions Suggerides", - "ghost.commands.goToNextSuggestion": "Anar al Suggeriment Següent", - "ghost.commands.goToPreviousSuggestion": "Anar al Suggeriment Anterior", "command.memories.title": "Memòries" } diff --git a/src/package.nls.cs.json b/src/package.nls.cs.json index e195bc97ea..9d6387617b 100644 --- a/src/package.nls.cs.json +++ b/src/package.nls.cs.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Maximální doba v sekundách čekání na odpovědi API (0 = bez časového limitu, 1-86400s, výchozí: 600s). Vyšší hodnoty se doporučují pro lokální poskytovatele jako LM Studio a Ollama, kteří mohou potřebovat více času na zpracování.", "settings.newTaskRequireTodos.description": "Vyžadovat parametr todos při vytváření nových úkolů pomocí nástroje new_task", "settings.codeIndex.embeddingBatchSize.description": "Velikost dávky pro operace vkládání během indexování kódu. Upravte toto podle limitů vašeho poskytovatele API. Výchozí je 60.", - "ghost.input.title": "Stiskněte 'Enter' pro potvrzení nebo 'Escape' pro zrušení", - "ghost.input.placeholder": "Popište, co chcete udělat...", - "ghost.commands.generateSuggestions": "Axon Code: Generovat Navrhované Úpravy", - "ghost.commands.displaySuggestions": "Zobrazit Navrhované Úpravy", - "ghost.commands.cancelSuggestions": "Zrušit Navrhované Úpravy", - "ghost.commands.applyCurrentSuggestion": "Použít Aktuální Navrženou Úpravu", - "ghost.commands.applyAllSuggestions": "Použít Všechny Navrhované Úpravy", - "ghost.commands.goToNextSuggestion": "Přejít na Další Návrh", - "ghost.commands.goToPreviousSuggestion": "Přejít na Předchozí Návrh", "command.memories.title": "Paměti" } diff --git a/src/package.nls.de.json b/src/package.nls.de.json index 6a30625078..77de7f314e 100644 --- a/src/package.nls.de.json +++ b/src/package.nls.de.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Maximale Wartezeit in Sekunden auf API-Antworten (0 = kein Timeout, 1-86400s, Standard: 600s). Höhere Werte werden für lokale Anbieter wie LM Studio und Ollama empfohlen, die möglicherweise mehr Verarbeitungszeit benötigen.", "settings.newTaskRequireTodos.description": "Todos-Parameter beim Erstellen neuer Aufgaben mit dem new_task-Tool erfordern", "settings.codeIndex.embeddingBatchSize.description": "Die Batch-Größe für Embedding-Operationen während der Code-Indexierung. Passe dies an die Limits deines API-Anbieters an. Standard ist 60.", - "ghost.input.title": "Axon Code Geisterschreiber", - "ghost.input.placeholder": "Beschreiben Sie, was Sie programmieren möchten...", - "ghost.commands.generateSuggestions": "Axon Code: Vorgeschlagene Bearbeitungen Generieren", - "ghost.commands.displaySuggestions": "Vorgeschlagene Bearbeitungen Anzeigen", - "ghost.commands.cancelSuggestions": "Vorgeschlagene Bearbeitungen Abbrechen", - "ghost.commands.applyCurrentSuggestion": "Aktuelle Vorgeschlagene Bearbeitung Anwenden", - "ghost.commands.applyAllSuggestions": "Alle Vorgeschlagenen Bearbeitungen Anwenden", - "ghost.commands.goToNextSuggestion": "Zur Nächsten Vorgeschlagenen Bearbeitung", - "ghost.commands.goToPreviousSuggestion": "Zur Vorherigen Vorgeschlagenen Bearbeitung", "command.memories.title": "Erinnerungen" } diff --git a/src/package.nls.es.json b/src/package.nls.es.json index ec7ba0eaf6..126b46187b 100644 --- a/src/package.nls.es.json +++ b/src/package.nls.es.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Tiempo máximo en segundos de espera para las respuestas de la API (0 = sin tiempo de espera, 1-86400s, por defecto: 600s). Se recomiendan valores más altos para proveedores locales como LM Studio y Ollama que puedan necesitar más tiempo de procesamiento.", "settings.newTaskRequireTodos.description": "Requerir el parámetro todos al crear nuevas tareas con la herramienta new_task", "settings.codeIndex.embeddingBatchSize.description": "El tamaño del lote para operaciones de embedding durante la indexación de código. Ajusta esto según los límites de tu proveedor de API. Por defecto es 60.", - "ghost.input.title": "Presiona 'Enter' para confirmar o 'Escape' para cancelar", - "ghost.input.placeholder": "Describe lo que quieres hacer...", - "ghost.commands.generateSuggestions": "Axon Code: Generar Ediciones Sugeridas", - "ghost.commands.displaySuggestions": "Mostrar Ediciones Sugeridas", - "ghost.commands.cancelSuggestions": "Cancelar Ediciones Sugeridas", - "ghost.commands.applyCurrentSuggestion": "Aplicar Edición Sugerida Actual", - "ghost.commands.applyAllSuggestions": "Aplicar Todas las Ediciones Sugeridas", - "ghost.commands.goToNextSuggestion": "Ir a la Siguiente Sugerencia", - "ghost.commands.goToPreviousSuggestion": "Ir a la Sugerencia Anterior", "command.memories.title": "Memorias" } diff --git a/src/package.nls.fr.json b/src/package.nls.fr.json index e95dcc3a2d..798f07cbbb 100644 --- a/src/package.nls.fr.json +++ b/src/package.nls.fr.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Temps maximum en secondes d'attente pour les réponses de l'API (0 = pas de timeout, 1-86400s, par défaut : 600s). Des valeurs plus élevées sont recommandées pour les fournisseurs locaux comme LM Studio et Ollama qui peuvent nécessiter plus de temps de traitement.", "settings.newTaskRequireTodos.description": "Exiger le paramètre todos lors de la création de nouvelles tâches avec l'outil new_task", "settings.codeIndex.embeddingBatchSize.description": "La taille du lot pour les opérations d'embedding lors de l'indexation du code. Ajustez ceci selon les limites de votre fournisseur d'API. Par défaut, c'est 60.", - "ghost.input.title": "Écrivain fantôme Axon Code", - "ghost.input.placeholder": "Décrivez ce que vous voulez coder...", - "ghost.commands.generateSuggestions": "Axon Code : Générer des Modifications Suggérées", - "ghost.commands.displaySuggestions": "Afficher les Modifications Suggérées", - "ghost.commands.cancelSuggestions": "Annuler les Modifications Suggérées", - "ghost.commands.applyCurrentSuggestion": "Appliquer la Modification Suggérée Actuelle", - "ghost.commands.applyAllSuggestions": "Appliquer Toutes les Modifications Suggérées", - "ghost.commands.goToNextSuggestion": "Aller à la Suggestion Suivante", - "ghost.commands.goToPreviousSuggestion": "Aller à la Suggestion Précédente", "command.memories.title": "Mémoires" } diff --git a/src/package.nls.hi.json b/src/package.nls.hi.json index 5132a3791d..4344622720 100644 --- a/src/package.nls.hi.json +++ b/src/package.nls.hi.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "एपीआई प्रतिक्रियाओं की प्रतीक्षा करने के लिए सेकंड में अधिकतम समय (0 = कोई टाइमआउट नहीं, 1-86400s, डिफ़ॉल्ट: 600s)। एलएम स्टूडियो और ओलामा जैसे स्थानीय प्रदाताओं के लिए उच्च मानों की सिफारिश की जाती है जिन्हें अधिक प्रसंस्करण समय की आवश्यकता हो सकती है।", "settings.newTaskRequireTodos.description": "new_task टूल के साथ नए कार्य बनाते समय टूडू पैरामीटर की आवश्यकता होती है", "settings.codeIndex.embeddingBatchSize.description": "कोड इंडेक्सिंग के दौरान एम्बेडिंग ऑपरेशन के लिए बैच साइज़। इसे अपने API प्रदाता की सीमाओं के अनुसार समायोजित करें। डिफ़ॉल्ट 60 है।", - "ghost.input.title": "पुष्टि के लिए 'Enter' दबाएं या रद्द करने के लिए 'Escape' दबाएं", - "ghost.input.placeholder": "वर्णन करें कि आप क्या करना चाहते हैं...", - "ghost.commands.generateSuggestions": "Axon Code: सुझाए गए संपादन जेनरेट करें", - "ghost.commands.displaySuggestions": "सुझाए गए संपादन दिखाएं", - "ghost.commands.cancelSuggestions": "सुझाए गए संपादन रद्द करें", - "ghost.commands.applyCurrentSuggestion": "वर्तमान सुझाया गया संपादन लागू करें", - "ghost.commands.applyAllSuggestions": "सभी सुझाए गए संपादन लागू करें", - "ghost.commands.goToNextSuggestion": "अगले सुझाव पर जाएं", - "ghost.commands.goToPreviousSuggestion": "पिछले सुझाव पर जाएं", "command.memories.title": "यादें" } diff --git a/src/package.nls.id.json b/src/package.nls.id.json index 16a8e7f49e..fcf665f18d 100644 --- a/src/package.nls.id.json +++ b/src/package.nls.id.json @@ -46,14 +46,5 @@ "settings.codeIndex.embeddingBatchSize.description": "Ukuran batch untuk operasi embedding selama pengindeksan kode. Sesuaikan ini berdasarkan batas penyedia API kamu. Default adalah 60.", "command.generateCommitMessage.title": "Buat Pesan Commit dengan Kilo", "command.profile.title": "Profil", - "ghost.input.title": "Tekan 'Enter' untuk konfirmasi atau 'Escape' untuk membatalkan", - "ghost.input.placeholder": "Jelaskan apa yang ingin Anda lakukan...", - "ghost.commands.generateSuggestions": "Axon Code: Buat Saran Pengeditan", - "ghost.commands.displaySuggestions": "Tampilkan Saran Pengeditan", - "ghost.commands.cancelSuggestions": "Batalkan Saran Pengeditan", - "ghost.commands.applyCurrentSuggestion": "Terapkan Saran Pengeditan Saat Ini", - "ghost.commands.applyAllSuggestions": "Terapkan Semua Saran Pengeditan", - "ghost.commands.goToNextSuggestion": "Pergi ke Saran Berikutnya", - "ghost.commands.goToPreviousSuggestion": "Pergi ke Saran Sebelumnya", "command.memories.title": "Memori" } diff --git a/src/package.nls.it.json b/src/package.nls.it.json index 954711b6c6..fca3d0ae97 100644 --- a/src/package.nls.it.json +++ b/src/package.nls.it.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Tempo massimo in secondi di attesa per le risposte API (0 = nessun timeout, 1-86400s, predefinito: 600s). Valori più alti sono consigliati per provider locali come LM Studio e Ollama che potrebbero richiedere più tempo di elaborazione.", "settings.newTaskRequireTodos.description": "Richiedere il parametro todos quando si creano nuove attività con lo strumento new_task", "settings.codeIndex.embeddingBatchSize.description": "La dimensione del batch per le operazioni di embedding durante l'indicizzazione del codice. Regola questo in base ai limiti del tuo provider API. Il valore predefinito è 60.", - "ghost.input.title": "Scrittore Fantasma Axon Code", - "ghost.input.placeholder": "Descrivi cosa vuoi programmare...", - "ghost.commands.generateSuggestions": "Axon Code: Genera Modifiche Suggerite", - "ghost.commands.displaySuggestions": "Visualizza Modifiche Suggerite", - "ghost.commands.cancelSuggestions": "Annulla Modifiche Suggerite", - "ghost.commands.applyCurrentSuggestion": "Applica Modifica Suggerita Corrente", - "ghost.commands.applyAllSuggestions": "Applica Tutte le Modifiche Suggerite", - "ghost.commands.goToNextSuggestion": "Vai alla Prossima Suggerimento", - "ghost.commands.goToPreviousSuggestion": "Vai al Suggerimento Precedente", "command.memories.title": "Memorie" } diff --git a/src/package.nls.ja.json b/src/package.nls.ja.json index 702babb4d4..bed6a62039 100644 --- a/src/package.nls.ja.json +++ b/src/package.nls.ja.json @@ -31,15 +31,6 @@ "command.generateCommitMessage.title": "Kiloでコミットメッセージを生成", "command.profile.title": "プロフィール", "configuration.title": "Axon Code", - "ghost.input.title": "Axon Code ゴーストライター", - "ghost.input.placeholder": "コーディングしたい内容を説明してください...", - "ghost.commands.generateSuggestions": "Axon Code: 提案された編集を生成", - "ghost.commands.displaySuggestions": "提案された編集を表示", - "ghost.commands.cancelSuggestions": "提案された編集をキャンセル", - "ghost.commands.applyCurrentSuggestion": "現在の提案された編集を適用", - "ghost.commands.applyAllSuggestions": "すべての提案された編集を適用", - "ghost.commands.goToNextSuggestion": "次の提案に移動", - "ghost.commands.goToPreviousSuggestion": "前の提案に移動", "commands.allowedCommands.description": "'常に実行操作を承認する'が有効な場合に自動実行できるコマンド", "commands.deniedCommands.description": "承認を求めずに自動的に拒否されるコマンドプレフィックス。許可されたコマンドとの競合がある場合、最長プレフィックスマッチが優先されます。すべてのコマンドを拒否するには * を追加してください。", "commands.commandExecutionTimeout.description": "コマンド実行の完了を待つ最大時間(秒)、タイムアウトまで(0 = タイムアウトなし、1-600秒、デフォルト: 0秒)", diff --git a/src/package.nls.json b/src/package.nls.json index 2ab89e72b5..d8f51ea46c 100644 --- a/src/package.nls.json +++ b/src/package.nls.json @@ -46,14 +46,5 @@ "settings.useAgentRules.description": "Enable loading of AGENTS.md files for agent-specific rules (see https://agent-rules.org/)", "settings.apiRequestTimeout.description": "Maximum time in seconds to wait for API responses (0 = no timeout, 1-86400s, default: 600s). Higher values are recommended for local providers like LM Studio and Ollama that may need more processing time.", "settings.newTaskRequireTodos.description": "Require todos parameter when creating new tasks with the new_task tool", - "settings.codeIndex.embeddingBatchSize.description": "The batch size for embedding operations during code indexing. Adjust this based on your API provider's limits. Default is 60.", - "ghost.input.title": "Press 'Enter' to confirm or 'Escape' to cancel", - "ghost.input.placeholder": "Describe what you want to do...", - "ghost.commands.generateSuggestions": "Generate Suggested Edits", - "ghost.commands.displaySuggestions": "Display Suggested Edits", - "ghost.commands.cancelSuggestions": "Cancel Suggested Edits", - "ghost.commands.applyCurrentSuggestion": "Apply Current Suggested Edit", - "ghost.commands.applyAllSuggestions": "Apply All Suggested Edits", - "ghost.commands.goToNextSuggestion": "Go To Next Suggestion", - "ghost.commands.goToPreviousSuggestion": "Go To Previous Suggestion" + "settings.codeIndex.embeddingBatchSize.description": "The batch size for embedding operations during code indexing. Adjust this based on your API provider's limits. Default is 60." } diff --git a/src/package.nls.ko.json b/src/package.nls.ko.json index 7177cfb148..44ca888c6d 100644 --- a/src/package.nls.ko.json +++ b/src/package.nls.ko.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "API 응답을 기다리는 최대 시간(초) (0 = 시간 초과 없음, 1-86400초, 기본값: 600초). 더 많은 처리 시간이 필요할 수 있는 LM Studio 및 Ollama와 같은 로컬 공급자에게는 더 높은 값을 사용하는 것이 좋습니다.", "settings.newTaskRequireTodos.description": "new_task 도구로 새 작업을 생성할 때 todos 매개변수 필요", "settings.codeIndex.embeddingBatchSize.description": "코드 인덱싱 중 임베딩 작업의 배치 크기입니다. API 공급자의 제한에 따라 이를 조정하세요. 기본값은 60입니다.", - "ghost.input.title": "'Enter'를 눌러 확인하거나 'Escape'를 눌러 취소하세요", - "ghost.input.placeholder": "무엇을 하고 싶은지 설명해주세요...", - "ghost.commands.generateSuggestions": "Axon Code: 편집 제안 생성", - "ghost.commands.displaySuggestions": "편집 제안 표시", - "ghost.commands.cancelSuggestions": "편집 제안 취소", - "ghost.commands.applyCurrentSuggestion": "현재 편집 제안 적용", - "ghost.commands.applyAllSuggestions": "모든 편집 제안 적용", - "ghost.commands.goToNextSuggestion": "다음 제안으로 이동", - "ghost.commands.goToPreviousSuggestion": "이전 제안으로 이동", "command.memories.title": "메모리" } diff --git a/src/package.nls.nl.json b/src/package.nls.nl.json index 3935f68441..8f6b51b094 100644 --- a/src/package.nls.nl.json +++ b/src/package.nls.nl.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Maximale tijd in seconden om te wachten op API-reacties (0 = geen time-out, 1-86400s, standaard: 600s). Hogere waarden worden aanbevolen voor lokale providers zoals LM Studio en Ollama die mogelijk meer verwerkingstijd nodig hebben.", "settings.newTaskRequireTodos.description": "Todos-parameter vereisen bij het maken van nieuwe taken met de new_task tool", "settings.codeIndex.embeddingBatchSize.description": "De batchgrootte voor embedding-operaties tijdens code-indexering. Pas dit aan op basis van de limieten van je API-provider. Standaard is 60.", - "ghost.input.title": "Druk op 'Enter' om te bevestigen of 'Escape' om te annuleren", - "ghost.input.placeholder": "Beschrijf wat je wilt doen...", - "ghost.commands.generateSuggestions": "Axon Code: Bewerkingssuggesties Genereren", - "ghost.commands.displaySuggestions": "Bewerkingssuggesties Weergeven", - "ghost.commands.cancelSuggestions": "Bewerkingssuggesties Annuleren", - "ghost.commands.applyCurrentSuggestion": "Huidige Bewerkingssuggestie Toepassen", - "ghost.commands.applyAllSuggestions": "Alle Bewerkingssuggesties Toepassen", - "ghost.commands.goToNextSuggestion": "Ga Naar Volgende Suggestie", - "ghost.commands.goToPreviousSuggestion": "Ga Naar Vorige Suggestie", "command.memories.title": "Herinneringen" } diff --git a/src/package.nls.pl.json b/src/package.nls.pl.json index 8f2dad5428..368e7b2e8e 100644 --- a/src/package.nls.pl.json +++ b/src/package.nls.pl.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Maksymalny czas w sekundach oczekiwania na odpowiedzi API (0 = brak limitu czasu, 1-86400s, domyślnie: 600s). Wyższe wartości są zalecane dla lokalnych dostawców, takich jak LM Studio i Ollama, którzy mogą potrzebować więcej czasu na przetwarzanie.", "settings.newTaskRequireTodos.description": "Wymagaj parametru todos podczas tworzenia nowych zadań za pomocą narzędzia new_task", "settings.codeIndex.embeddingBatchSize.description": "Rozmiar partii dla operacji osadzania podczas indeksowania kodu. Dostosuj to w oparciu o limity twojego dostawcy API. Domyślnie to 60.", - "ghost.input.title": "Naciśnij 'Enter' aby potwierdzić lub 'Escape' aby anulować", - "ghost.input.placeholder": "Opisz co chcesz zrobić...", - "ghost.commands.generateSuggestions": "Axon Code: Generuj Sugestie Edycji", - "ghost.commands.displaySuggestions": "Wyświetl Sugestie Edycji", - "ghost.commands.cancelSuggestions": "Anuluj Sugestie Edycji", - "ghost.commands.applyCurrentSuggestion": "Zastosuj Bieżącą Sugestię Edycji", - "ghost.commands.applyAllSuggestions": "Zastosuj Wszystkie Sugestie Edycji", - "ghost.commands.goToNextSuggestion": "Przejdź do Następnej Sugestii", - "ghost.commands.goToPreviousSuggestion": "Przejdź do Poprzedniej Sugestii", "command.memories.title": "Pamięci" } diff --git a/src/package.nls.pt-BR.json b/src/package.nls.pt-BR.json index 8e0539c506..75ab2534a0 100644 --- a/src/package.nls.pt-BR.json +++ b/src/package.nls.pt-BR.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Tempo máximo em segundos de espera pelas respostas da API (0 = sem tempo limite, 1-86400s, padrão: 600s). Valores mais altos são recomendados para provedores locais como LM Studio e Ollama que podem precisar de mais tempo de processamento.", "settings.newTaskRequireTodos.description": "Exigir parâmetro todos ao criar novas tarefas com a ferramenta new_task", "settings.codeIndex.embeddingBatchSize.description": "O tamanho do lote para operações de embedding durante a indexação de código. Ajuste isso com base nos limites do seu provedor de API. O padrão é 60.", - "ghost.input.title": "Pressione 'Enter' para confirmar ou 'Escape' para cancelar", - "ghost.input.placeholder": "Descreva o que você quer fazer...", - "ghost.commands.generateSuggestions": "Axon Code: Gerar Sugestões de Edição", - "ghost.commands.displaySuggestions": "Exibir Sugestões de Edição", - "ghost.commands.cancelSuggestions": "Cancelar Sugestões de Edição", - "ghost.commands.applyCurrentSuggestion": "Aplicar Sugestão de Edição Atual", - "ghost.commands.applyAllSuggestions": "Aplicar Todas as Sugestões de Edição", - "ghost.commands.goToNextSuggestion": "Ir Para a Próxima Sugestão", - "ghost.commands.goToPreviousSuggestion": "Ir Para a Sugestão Anterior", "command.memories.title": "Memórias" } diff --git a/src/package.nls.ru.json b/src/package.nls.ru.json index ac8a3436a2..34d8580c3a 100644 --- a/src/package.nls.ru.json +++ b/src/package.nls.ru.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Максимальное время в секундах для ожидания ответов API (0 = нет тайм-аута, 1-86400 с, по умолчанию: 600 с). Рекомендуются более высокие значения для локальных провайдеров, таких как LM Studio и Ollama, которым может потребоваться больше времени на обработку.", "settings.newTaskRequireTodos.description": "Требовать параметр todos при создании новых задач с помощью инструмента new_task", "settings.codeIndex.embeddingBatchSize.description": "Размер пакета для операций встраивания во время индексации кода. Настройте это в соответствии с ограничениями вашего API-провайдера. По умолчанию 60.", - "ghost.input.title": "Нажмите 'Enter' для подтверждения или 'Escape' для отмены", - "ghost.input.placeholder": "Опишите, что вы хотите сделать...", - "ghost.commands.generateSuggestions": "Axon Code: Генерировать Предлагаемые Правки", - "ghost.commands.displaySuggestions": "Показать Предлагаемые Правки", - "ghost.commands.cancelSuggestions": "Отменить Предлагаемые Правки", - "ghost.commands.applyCurrentSuggestion": "Применить Текущую Предлагаемую Правку", - "ghost.commands.applyAllSuggestions": "Применить Все Предлагаемые Правки", - "ghost.commands.goToNextSuggestion": "Перейти к Следующему Предложению", - "ghost.commands.goToPreviousSuggestion": "Перейти к Предыдущему Предложению", "command.memories.title": "Воспоминания" } diff --git a/src/package.nls.th.json b/src/package.nls.th.json index d70044b1f2..10bc498ee0 100644 --- a/src/package.nls.th.json +++ b/src/package.nls.th.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "เวลาสูงสุดเป็นวินาทีที่จะรอการตอบสนอง API (0 = ไม่มีการหมดเวลา, 1-86400 วินาที, ค่าเริ่มต้น: 600 วินาที) แนะนำค่าที่สูงขึ้นสำหรับผู้ให้บริการในเครื่องเช่น LM Studio และ Ollama ที่อาจต้องการเวลาในการประมวลผลมากขึ้น", "settings.newTaskRequireTodos.description": "ต้องการพารามิเตอร์ todos เมื่อสร้างงานใหม่ด้วยเครื่องมือ new_task", "settings.codeIndex.embeddingBatchSize.description": "ขนาดแบตช์สำหรับการดำเนินการฝังตัวระหว่างการสร้างดัชนีโค้ด ปรับค่านี้ตามขีดจำกัดของผู้ให้บริการ API ของคุณ ค่าเริ่มต้นคือ 60", - "ghost.input.title": "กด 'Enter' เพื่อยืนยันหรือ 'Escape' เพื่อยกเลิก", - "ghost.input.placeholder": "อธิบายสิ่งที่คุณต้องการทำ...", - "ghost.commands.generateSuggestions": "Axon Code: สร้างข้อเสนอแนะการแก้ไข", - "ghost.commands.displaySuggestions": "แสดงข้อเสนอแนะการแก้ไข", - "ghost.commands.cancelSuggestions": "ยกเลิกข้อเสนอแนะการแก้ไข", - "ghost.commands.applyCurrentSuggestion": "ใช้ข้อเสนอแนะการแก้ไขปัจจุบัน", - "ghost.commands.applyAllSuggestions": "ใช้ข้อเสนอแนะการแก้ไขทั้งหมด", - "ghost.commands.goToNextSuggestion": "ไปยังข้อเสนอแนะถัดไป", - "ghost.commands.goToPreviousSuggestion": "ไปยังข้อเสนอแนะก่อนหน้า", "command.memories.title": "ความทรงจำ" } diff --git a/src/package.nls.tr.json b/src/package.nls.tr.json index cf022b99c1..c12f0e276a 100644 --- a/src/package.nls.tr.json +++ b/src/package.nls.tr.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "API yanıtları için beklenecek maksimum süre (saniye cinsinden) (0 = zaman aşımı yok, 1-86400s, varsayılan: 600s). LM Studio ve Ollama gibi daha fazla işlem süresi gerektirebilecek yerel sağlayıcılar için daha yüksek değerler önerilir.", "settings.codeIndex.embeddingBatchSize.description": "Kod indeksleme sırasında gömme işlemleri için toplu iş boyutu. Bunu API sağlayıcınızın sınırlarına göre ayarlayın. Varsayılan 60'tır.", "settings.newTaskRequireTodos.description": "new_task aracıyla yeni görevler oluştururken todos parametresini gerekli kıl", - "ghost.input.title": "Onaylamak için 'Enter'a, iptal etmek için 'Escape'e basın", - "ghost.input.placeholder": "Ne yapmak istediğinizi açıklayın...", - "ghost.commands.generateSuggestions": "Axon Code: Düzenleme Önerileri Oluştur", - "ghost.commands.displaySuggestions": "Düzenleme Önerilerini Göster", - "ghost.commands.cancelSuggestions": "Düzenleme Önerilerini İptal Et", - "ghost.commands.applyCurrentSuggestion": "Mevcut Düzenleme Önerisini Uygula", - "ghost.commands.applyAllSuggestions": "Tüm Düzenleme Önerilerini Uygula", - "ghost.commands.goToNextSuggestion": "Sonraki Öneriye Git", - "ghost.commands.goToPreviousSuggestion": "Önceki Öneriye Git", "command.memories.title": "Hafızalar" } diff --git a/src/package.nls.uk.json b/src/package.nls.uk.json index 07f8bbc37e..f1878ce828 100644 --- a/src/package.nls.uk.json +++ b/src/package.nls.uk.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Максимальний час у секундах очікування відповідей API (0 = без тайм-ауту, 1-86400с, за замовчуванням: 600с). Вищі значення рекомендуються для локальних провайдерів, таких як LM Studio та Ollama, яким може знадобитися більше часу для обробки.", "settings.newTaskRequireTodos.description": "Вимагати параметр todos при створенні нових завдань за допомогою інструменту new_task", "settings.codeIndex.embeddingBatchSize.description": "Розмір пакету для операцій вбудовування під час індексації коду. Налаштуйте це відповідно до лімітів вашого провайдера API. За замовчуванням 60.", - "ghost.input.title": "Натисніть 'Enter' для підтвердження або 'Escape' для скасування", - "ghost.input.placeholder": "Опишіть, що ви хочете зробити...", - "ghost.commands.generateSuggestions": "Axon Code: Генерувати Пропозиції Редагування", - "ghost.commands.displaySuggestions": "Показати Пропозиції Редагування", - "ghost.commands.cancelSuggestions": "Скасувати Пропозиції Редагування", - "ghost.commands.applyCurrentSuggestion": "Застосувати Поточну Пропозицію Редагування", - "ghost.commands.applyAllSuggestions": "Застосувати Всі Пропозиції Редагування", - "ghost.commands.goToNextSuggestion": "Перейти до Наступної Пропозиції", - "ghost.commands.goToPreviousSuggestion": "Перейти до Попередньої Пропозиції", "command.memories.title": "Спогади" } diff --git a/src/package.nls.vi.json b/src/package.nls.vi.json index 378b37571b..38ab99a9bb 100644 --- a/src/package.nls.vi.json +++ b/src/package.nls.vi.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "Thời gian tối đa tính bằng giây để đợi phản hồi API (0 = không có thời gian chờ, 1-86400 giây, mặc định: 600 giây). Nên sử dụng các giá trị cao hơn cho các nhà cung cấp cục bộ như LM Studio và Ollama có thể cần thêm thời gian xử lý.", "settings.newTaskRequireTodos.description": "Yêu cầu tham số todos khi tạo nhiệm vụ mới với công cụ new_task", "settings.codeIndex.embeddingBatchSize.description": "Kích thước lô cho các hoạt động nhúng trong quá trình lập chỉ mục mã. Điều chỉnh điều này dựa trên giới hạn của nhà cung cấp API của bạn. Mặc định là 60.", - "ghost.input.title": "Nhấn 'Enter' để xác nhận hoặc 'Escape' để hủy", - "ghost.input.placeholder": "Mô tả những gì bạn muốn làm...", - "ghost.commands.generateSuggestions": "Axon Code: Tạo Gợi Ý Chỉnh Sửa", - "ghost.commands.displaySuggestions": "Hiển Thị Gợi Ý Chỉnh Sửa", - "ghost.commands.cancelSuggestions": "Hủy Gợi Ý Chỉnh Sửa", - "ghost.commands.applyCurrentSuggestion": "Áp Dụng Gợi Ý Chỉnh Sửa Hiện Tại", - "ghost.commands.applyAllSuggestions": "Áp Dụng Tất Cả Gợi Ý Chỉnh Sửa", - "ghost.commands.goToNextSuggestion": "Đi Đến Gợi Ý Tiếp Theo", - "ghost.commands.goToPreviousSuggestion": "Đi Đến Gợi Ý Trước Đó", "command.memories.title": "Ký ức" } diff --git a/src/package.nls.zh-CN.json b/src/package.nls.zh-CN.json index a80994b21b..2c62cf3bfc 100644 --- a/src/package.nls.zh-CN.json +++ b/src/package.nls.zh-CN.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "等待 API 响应的最长时间(秒)(0 = 无超时,1-86400秒,默认值:600秒)。对于像 LM Studio 和 Ollama 这样可能需要更多处理时间的本地提供商,建议使用更高的值。", "settings.newTaskRequireTodos.description": "使用 new_task 工具创建新任务时需要 todos 参数", "settings.codeIndex.embeddingBatchSize.description": "代码索引期间嵌入操作的批处理大小。根据 API 提供商的限制调整此设置。默认值为 60。", - "ghost.input.title": "Axon Code 幽灵写手", - "ghost.input.placeholder": "描述您想要编程的内容...", - "ghost.commands.generateSuggestions": "Axon Code:生成建议编辑", - "ghost.commands.displaySuggestions": "显示建议编辑", - "ghost.commands.cancelSuggestions": "取消建议编辑", - "ghost.commands.applyCurrentSuggestion": "应用当前建议编辑", - "ghost.commands.applyAllSuggestions": "应用所有建议编辑", - "ghost.commands.goToNextSuggestion": "转到下一个建议", - "ghost.commands.goToPreviousSuggestion": "转到上一个建议", "command.memories.title": "记忆" } diff --git a/src/package.nls.zh-TW.json b/src/package.nls.zh-TW.json index 845c3ab030..fedab7f43f 100644 --- a/src/package.nls.zh-TW.json +++ b/src/package.nls.zh-TW.json @@ -46,14 +46,5 @@ "settings.apiRequestTimeout.description": "等待 API 回應的最長時間(秒)(0 = 無超時,1-86400秒,預設值:600秒)。對於像 LM Studio 和 Ollama 這樣可能需要更多處理時間的本地提供商,建議使用更高的值。", "settings.newTaskRequireTodos.description": "使用 new_task 工具建立新工作時需要 todos 參數", "settings.codeIndex.embeddingBatchSize.description": "程式碼索引期間嵌入操作的批次大小。根據 API 提供商的限制調整此設定。預設值為 60。", - "ghost.input.title": "按 'Enter' 確認或按 'Escape' 取消", - "ghost.input.placeholder": "描述您想要做什麼...", - "ghost.commands.generateSuggestions": "Axon Code: 產生編輯建議", - "ghost.commands.displaySuggestions": "顯示編輯建議", - "ghost.commands.cancelSuggestions": "取消編輯建議", - "ghost.commands.applyCurrentSuggestion": "套用目前編輯建議", - "ghost.commands.applyAllSuggestions": "套用所有編輯建議", - "ghost.commands.goToNextSuggestion": "前往下一個建議", - "ghost.commands.goToPreviousSuggestion": "前往上一個建議", "command.memories.title": "記憶" } diff --git a/src/services/autocomplete/AutocompleteModel.ts b/src/services/autocomplete/AutocompleteModel.ts deleted file mode 100644 index 2d3877cbe8..0000000000 --- a/src/services/autocomplete/AutocompleteModel.ts +++ /dev/null @@ -1,289 +0,0 @@ -import { - AUTOCOMPLETE_PROVIDER_MODELS, - AutocompleteProviderKey, - defaultProviderUsabilityChecker, - getKiloBaseUriFromToken, - modelIdKeysByProvider, - ProviderSettings, - ProviderSettingsEntry, -} from "@roo-code/types" -import { ApiHandler, buildApiHandler } from "../../api" -import { ProviderSettingsManager } from "../../core/config/ProviderSettingsManager" -import { OpenRouterHandler } from "../../api/providers" -import { ApiStreamChunk } from "../../api/transform/stream" -import { ILLM, LLMOptions } from "../continuedev/core/index.js" -import { DEFAULT_AUTOCOMPLETE_OPTS } from "../continuedev/core/util/parameters.js" -import Mistral from "../continuedev/core/llm/llms/Mistral" -import { OpenAI } from "../continuedev/core/llm/llms/OpenAI" - -export class AutocompleteModel { - private apiHandler: ApiHandler | null = null - private profile: ProviderSettings | null = null - public loaded = false - - constructor(apiHandler: ApiHandler | null = null) { - if (apiHandler) { - this.apiHandler = apiHandler - this.loaded = true - } - } - private cleanup(): void { - this.apiHandler = null - this.profile = null - this.loaded = false - } - - public async reload(providerSettingsManager: ProviderSettingsManager): Promise { - const profiles = await providerSettingsManager.listConfig() - const supportedProviders = Object.keys(AUTOCOMPLETE_PROVIDER_MODELS) as Array< - keyof typeof AUTOCOMPLETE_PROVIDER_MODELS - > - - this.cleanup() - - // Check providers in order, but skip unusable ones (e.g., kilocode with zero balance) - for (const provider of supportedProviders) { - const selectedProfile = profiles.find( - (x): x is typeof x & { apiProvider: string } => x?.apiProvider === provider, - ) - if (selectedProfile) { - const isUsable = await defaultProviderUsabilityChecker(provider, providerSettingsManager) - if (!isUsable) continue - - this.loadProfile(providerSettingsManager, selectedProfile, provider) - this.loaded = true - return true - } - } - - this.loaded = true // we loaded, and found nothing, but we do not wish to reload - return false - } - - public async loadProfile( - providerSettingsManager: ProviderSettingsManager, - selectedProfile: ProviderSettingsEntry, - provider: keyof typeof AUTOCOMPLETE_PROVIDER_MODELS, - ): Promise { - this.profile = await providerSettingsManager.getProfile({ - id: selectedProfile.id, - }) - - this.apiHandler = buildApiHandler({ - ...this.profile, - [modelIdKeysByProvider[provider]]: AUTOCOMPLETE_PROVIDER_MODELS[provider], - }) - - if (this.apiHandler instanceof OpenRouterHandler) { - await this.apiHandler.fetchModel() - } - } - - /** - * Creates an ILLM-compatible instance from provider settings for autocomplete. - * Supports mistral, kilocode, openrouter, and bedrock providers. - * Uses the current profile loaded in this.profile. - * - * @returns ILLM instance or null if configuration is invalid - */ - public getILLM(): ILLM | null { - if (!this.profile?.apiProvider) { - console.warn("[AutocompleteModel] No profile loaded") - return null - } - - const provider = this.profile.apiProvider as AutocompleteProviderKey - - try { - // Extract provider-specific configuration - const config = this.extractProviderConfig() - if (!config) { - console.warn(`[AutocompleteModel] Failed to extract config for provider: ${provider}`) - return null - } - - // Build LLM options - const llmOptions: LLMOptions = { - model: config.model, - apiKey: config.apiKey, - apiBase: config.apiBase, - contextLength: 32000, // Default for Codestral models - completionOptions: { - model: config.model, - temperature: 0.2, // Lower temperature for more deterministic autocomplete - maxTokens: 256, // Reasonable limit for code completions - }, - autocompleteOptions: { - ...DEFAULT_AUTOCOMPLETE_OPTS, - useCache: false, // Disable caching for autocomplete - }, - uniqueId: `autocomplete-${provider}-${Date.now()}`, - } - - // Create appropriate LLM instance based on provider - return this.createLLMInstance(provider, llmOptions) - } catch (error) { - console.error(`[AutocompleteModel] Error creating ILLM for provider ${provider}:`, error) - return null - } - } - - /** - * Extracts provider-specific configuration (API key, base URL, model) from this.profile - */ - private extractProviderConfig(): { apiKey: string; apiBase: string; model: string } | null { - if (!this.profile?.apiProvider) { - return null - } - - const provider = this.profile.apiProvider as AutocompleteProviderKey - const model = AUTOCOMPLETE_PROVIDER_MODELS[provider] - - switch (provider) { - case "mistral": - if (!this.profile.mistralApiKey) { - console.warn("[AutocompleteModel] Missing Mistral API key") - return null - } - return { - apiKey: this.profile.mistralApiKey, - apiBase: this.profile.mistralCodestralUrl || "https://codestral.mistral.ai/v1/", - model, - } - - case "kilocode": - if (!this.profile.kilocodeToken) { - console.warn("[AutocompleteModel] Missing Kilocode token") - return null - } - return { - apiKey: this.profile.kilocodeToken, - apiBase: `${getKiloBaseUriFromToken(this.profile.kilocodeToken)}/openrouter/api/v1`, - model, - } - - case "openrouter": - if (!this.profile.openRouterApiKey) { - console.warn("[AutocompleteModel] Missing OpenRouter API key") - return null - } - return { - apiKey: this.profile.openRouterApiKey, - apiBase: this.profile.openRouterBaseUrl || "https://openrouter.ai/api/v1", - model, - } - - case "bedrock": - // Bedrock uses AWS credentials, not a simple API key - // For now, return null as it requires more complex setup - console.warn("[AutocompleteModel] Bedrock provider not yet supported for autocomplete") - return null - - default: - console.warn(`[AutocompleteModel] Unsupported provider: ${provider}`) - return null - } - } - - /** - * Creates the appropriate LLM instance based on provider type - */ - private createLLMInstance(provider: AutocompleteProviderKey, options: LLMOptions): ILLM | null { - switch (provider) { - case "mistral": - return new Mistral(options) - - case "kilocode": - case "openrouter": - // Both use OpenAI-compatible API - return new OpenAI(options) - - case "bedrock": - // Bedrock would need a custom implementation - return null - - default: - return null - } - } - - /** - * Generate response with streaming callback support - */ - public async generateResponse( - systemPrompt: string, - userPrompt: string, - onChunk: (chunk: ApiStreamChunk) => void, - ): Promise<{ - cost: number - inputTokens: number - outputTokens: number - cacheWriteTokens: number - cacheReadTokens: number - }> { - if (!this.apiHandler) { - console.error("API handler is not initialized") - throw new Error("API handler is not initialized. Please check your configuration.") - } - - console.log("USED MODEL", this.apiHandler.getModel()) - - const stream = this.apiHandler.createMessage(systemPrompt, [ - { role: "user", content: [{ type: "text", text: userPrompt }] }, - ]) - - let cost = 0 - let inputTokens = 0 - let outputTokens = 0 - let cacheReadTokens = 0 - let cacheWriteTokens = 0 - - try { - for await (const chunk of stream) { - // Call the callback with each chunk - onChunk(chunk) - - // Track usage information - if (chunk.type === "usage") { - cost = chunk.totalCost ?? 0 - cacheReadTokens = chunk.cacheReadTokens ?? 0 - cacheWriteTokens = chunk.cacheWriteTokens ?? 0 - inputTokens = chunk.inputTokens ?? 0 - outputTokens = chunk.outputTokens ?? 0 - } - } - } catch (error) { - console.error("Error streaming completion:", error) - throw error - } - - return { - cost, - inputTokens, - outputTokens, - cacheWriteTokens, - cacheReadTokens, - } - } - - public getModelName(): string | null { - if (!this.apiHandler) return null - - return this.apiHandler.getModel().id ?? "unknown" - } - - public getProviderDisplayName(): string | null { - if (!this.apiHandler) return null - - const handler = this.apiHandler as any - if (handler.providerName && typeof handler.providerName === "string") { - return handler.providerName - } else { - return "unknown" - } - } - - public hasValidCredentials(): boolean { - return this.apiHandler !== null && this.loaded - } -} diff --git a/src/services/autocomplete/AutocompleteProvider.ts b/src/services/autocomplete/AutocompleteProvider.ts deleted file mode 100644 index 8fdab2d23b..0000000000 --- a/src/services/autocomplete/AutocompleteProvider.ts +++ /dev/null @@ -1,157 +0,0 @@ -import * as vscode from "vscode" -import { AutocompleteModel } from "./AutocompleteModel" -import { - AUTOCOMPLETE_PROVIDER_MODELS, - AutocompleteProviderKey, - GhostServiceSettings, - modelIdKeysByProvider, - ProviderSettingsEntry, -} from "@roo-code/types" -import { ContextProxy } from "../../core/config/ContextProxy" -import { ProviderSettingsManager } from "../../core/config/ProviderSettingsManager" -import { ClineProvider } from "../../core/webview/ClineProvider" -import { MinimalConfigProvider } from "../continuedev/core/autocomplete/MinimalConfig" -import { VsCodeIde } from "../continuedev/core/vscode-test-harness/src/VSCodeIde" -import { ContinueCompletionProvider } from "../continuedev/core/vscode-test-harness/src/autocomplete/completionProvider" - -export class AutocompleteProvider { - private static instance: AutocompleteProvider | null = null - private model: AutocompleteModel - private providerSettingsManager: ProviderSettingsManager - private settings: GhostServiceSettings | null = null - - private enabled: boolean = true - private taskId: string | null = null - private isProcessing: boolean = false - private isRequestCancelled: boolean = false - - // VSCode Providers - public inlineCompletionProvider: any - - private constructor( - private context: vscode.ExtensionContext, - private cline: ClineProvider, - ) { - // Register Internal Components - this.providerSettingsManager = new ProviderSettingsManager(context) - this.model = new AutocompleteModel() - - void this.load() - } - - // Singleton Management - public static initialize(context: vscode.ExtensionContext, cline: ClineProvider): AutocompleteProvider { - if (AutocompleteProvider.instance) { - throw new Error("AutocompleteProvider is already initialized. Use getInstance() instead.") - } - AutocompleteProvider.instance = new AutocompleteProvider(context, cline) - return AutocompleteProvider.instance - } - - public static getInstance(): AutocompleteProvider { - if (!AutocompleteProvider.instance) { - throw new Error("AutocompleteProvider is not initialized. Call initialize() first.") - } - return AutocompleteProvider.instance - } - - // Settings Management - private loadSettings() { - const state = ContextProxy.instance?.getValues?.() - return state.ghostServiceSettings - } - - private async saveSettings() { - if (!this.settings) { - return - } - const settingsWithModelInfo = { - ...this.settings, - provider: this.getCurrentProviderName(), - model: this.getCurrentModelName(), - } - await ContextProxy.instance?.setValues?.({ ghostServiceSettings: settingsWithModelInfo }) - await this.cline.postStateToWebview() - } - - private async loadCodeCompletion() { - try { - // The model.reload() has already loaded the profile, so we can get the ILLM - const llm = this.model.getILLM() - - if (!llm) { - console.warn("[AutocompleteProvider] No valid autocomplete provider found") - return - } - - // Register the Continue completion provider with the selected LLM - const minimalConfigProvider = new MinimalConfigProvider({ - selectedModelByRole: { - autocomplete: llm, - }, - }) - const ide = new VsCodeIde(this.context) - const usingFullFileDiff = false - const continueProvider = new ContinueCompletionProvider(minimalConfigProvider, ide, usingFullFileDiff) - this.context.subscriptions.push( - vscode.languages.registerInlineCompletionItemProvider([{ pattern: "**" }], continueProvider), - ) - - console.log("[AutocompleteProvider] Successfully registered autocomplete") - } catch (error) { - console.error("[AutocompleteProvider] Error loading code completion:", error) - } - } - - public async load() { - this.settings = this.loadSettings() - await this.model.reload(this.providerSettingsManager) - await this.saveSettings() - this.loadCodeCompletion() - } - - public async disable() { - this.settings = { - ...this.settings, - enableAutoTrigger: false, - enableSmartInlineTaskKeybinding: false, - enableQuickInlineTaskKeybinding: false, - showGutterAnimation: true, - } - await this.saveSettings() - await this.load() - } - - public async enable() { - this.settings = { - ...this.settings, - enableAutoTrigger: true, - enableSmartInlineTaskKeybinding: true, - enableQuickInlineTaskKeybinding: true, - showGutterAnimation: true, - } - await this.saveSettings() - await this.load() - } - - private getCurrentModelName(): string { - if (!this.model.loaded) { - return "loading..." - } - return this.model.getModelName() ?? "unknown" - } - - private getCurrentProviderName(): string { - if (!this.model.loaded) { - return "loading..." - } - return this.model.getProviderDisplayName() ?? "unknown" - } - - /** - * Dispose of all resources used by the GhostProvider - */ - public dispose(): void { - AutocompleteProvider.instance = null // Reset singleton - } -} diff --git a/src/services/autocomplete/__tests__/AutocompleteModel.spec.ts b/src/services/autocomplete/__tests__/AutocompleteModel.spec.ts deleted file mode 100644 index 2045e289b3..0000000000 --- a/src/services/autocomplete/__tests__/AutocompleteModel.spec.ts +++ /dev/null @@ -1,240 +0,0 @@ -import { describe, it, expect, beforeEach, vi } from "vitest" -import { AutocompleteModel } from "../AutocompleteModel" -import { ProviderSettings } from "@roo-code/types" -import Mistral from "../../continuedev/core/llm/llms/Mistral" -import { OpenAI } from "../../continuedev/core/llm/llms/OpenAI" - -// Mock the LLM classes -vi.mock("../../continuedev/core/llm/llms/Mistral") -vi.mock("../../continuedev/core/llm/llms/OpenAI") - -describe("AutocompleteModel", () => { - let model: AutocompleteModel - - beforeEach(() => { - model = new AutocompleteModel() - vi.clearAllMocks() - }) - - describe("getILLM", () => { - describe("Mistral provider", () => { - it("should create Mistral instance with valid configuration", () => { - // Set the profile on the model - ;(model as any).profile = { - apiProvider: "mistral", - mistralApiKey: "test-mistral-key", - mistralCodestralUrl: "https://custom.mistral.ai/v1/", - } - - const result = model.getILLM() - - expect(result).toBeDefined() - expect(Mistral).toHaveBeenCalledWith( - expect.objectContaining({ - model: "codestral-latest", - apiKey: "test-mistral-key", - apiBase: "https://custom.mistral.ai/v1/", - contextLength: 32000, - }), - ) - }) - - it("should use default Mistral URL when not provided", () => { - ;(model as any).profile = { - apiProvider: "mistral", - mistralApiKey: "test-mistral-key", - } - - model.getILLM() - - expect(Mistral).toHaveBeenCalledWith( - expect.objectContaining({ - apiBase: "https://codestral.mistral.ai/v1/", - }), - ) - }) - - it("should return null when API key is missing", () => { - ;(model as any).profile = { - apiProvider: "mistral", - } - - const result = model.getILLM() - - expect(result).toBeNull() - expect(Mistral).not.toHaveBeenCalled() - }) - }) - - describe("Kilocode provider", () => { - it("should create OpenAI instance with valid Kilocode configuration", () => { - ;(model as any).profile = { - apiProvider: "kilocode", - kilocodeToken: "test-kilocode-token", - } - - const result = model.getILLM() - - expect(result).toBeDefined() - expect(OpenAI).toHaveBeenCalledWith( - expect.objectContaining({ - model: "mistralai/codestral-2508", - apiKey: "test-kilocode-token", - }), - ) - }) - - it("should return null when Kilocode token is missing", () => { - ;(model as any).profile = { - apiProvider: "kilocode", - } - - const result = model.getILLM() - - expect(result).toBeNull() - expect(OpenAI).not.toHaveBeenCalled() - }) - }) - - describe("OpenRouter provider", () => { - it("should create OpenAI instance with valid OpenRouter configuration", () => { - ;(model as any).profile = { - apiProvider: "openrouter", - openRouterApiKey: "test-openrouter-key", - openRouterBaseUrl: "https://custom.openrouter.ai/api/v1", - } - - const result = model.getILLM() - - expect(result).toBeDefined() - expect(OpenAI).toHaveBeenCalledWith( - expect.objectContaining({ - model: "mistralai/codestral-2508", - apiKey: "test-openrouter-key", - apiBase: "https://custom.openrouter.ai/api/v1", - }), - ) - }) - - it("should use default OpenRouter URL when not provided", () => { - ;(model as any).profile = { - apiProvider: "openrouter", - openRouterApiKey: "test-openrouter-key", - } - - model.getILLM() - - expect(OpenAI).toHaveBeenCalledWith( - expect.objectContaining({ - apiBase: "https://openrouter.ai/api/v1", - }), - ) - }) - - it("should return null when API key is missing", () => { - ;(model as any).profile = { - apiProvider: "openrouter", - } - - const result = model.getILLM() - - expect(result).toBeNull() - expect(OpenAI).not.toHaveBeenCalled() - }) - }) - - describe("Bedrock provider", () => { - it("should return null as Bedrock is not yet supported", () => { - ;(model as any).profile = { - apiProvider: "bedrock", - awsAccessKey: "test-access-key", - awsSecretKey: "test-secret-key", - awsRegion: "us-east-1", - } - - const result = model.getILLM() - - expect(result).toBeNull() - }) - }) - - describe("LLM options", () => { - it("should set correct completion options for autocomplete", () => { - ;(model as any).profile = { - apiProvider: "mistral", - mistralApiKey: "test-key", - } - - model.getILLM() - - expect(Mistral).toHaveBeenCalledWith( - expect.objectContaining({ - completionOptions: expect.objectContaining({ - temperature: 0.2, - maxTokens: 256, - }), - }), - ) - }) - - it("should set autocomplete options with cache disabled", () => { - ;(model as any).profile = { - apiProvider: "mistral", - mistralApiKey: "test-key", - } - - model.getILLM() - - expect(Mistral).toHaveBeenCalledWith( - expect.objectContaining({ - autocompleteOptions: expect.objectContaining({ - useCache: false, - }), - }), - ) - }) - - it("should generate unique ID with correct format", () => { - ;(model as any).profile = { - apiProvider: "mistral", - mistralApiKey: "test-key", - } - - model.getILLM() - const call = vi.mocked(Mistral).mock.calls[0][0] - - expect(call.uniqueId).toMatch(/^autocomplete-mistral-\d+$/) - expect(call.uniqueId).toContain("autocomplete-mistral-") - }) - }) - - describe("Error handling", () => { - it("should return null and log error when LLM instantiation fails", () => { - const consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => {}) - vi.mocked(Mistral).mockImplementationOnce(() => { - throw new Error("Instantiation failed") - }) - ;(model as any).profile = { - apiProvider: "mistral", - mistralApiKey: "test-key", - } - - const result = model.getILLM() - - expect(result).toBeNull() - expect(consoleErrorSpy).toHaveBeenCalledWith( - expect.stringContaining("Error creating ILLM"), - expect.any(Error), - ) - - consoleErrorSpy.mockRestore() - }) - - it("should return null when no profile is loaded", () => { - const result = model.getILLM() - - expect(result).toBeNull() - }) - }) - }) -}) diff --git a/src/services/autocomplete/index.ts b/src/services/autocomplete/index.ts deleted file mode 100644 index acc3d54c3a..0000000000 --- a/src/services/autocomplete/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -// kilocode_change - new file -import * as vscode from "vscode" -import { AutocompleteProvider } from "./AutocompleteProvider" -import { ClineProvider } from "../../core/webview/ClineProvider" - -export const registerAutocompleteProvider = (context: vscode.ExtensionContext, cline: ClineProvider) => { - const ghost = AutocompleteProvider.initialize(context, cline) - context.subscriptions.push(ghost) - - context.subscriptions.push( - vscode.commands.registerCommand("axon-code.ghost.enable", async () => { - await ghost.enable() - }), - ) - context.subscriptions.push( - vscode.commands.registerCommand("axon-code.ghost.disable", async () => { - await ghost.disable() - }), - ) - - // Register GhostProvider Inline Completion Provider - // context.subscriptions.push( - // vscode.languages.registerInlineCompletionItemProvider("*", ghost.inlineCompletionProvider), - // ) -} diff --git a/webview-ui/src/components/chat/ChatRow.tsx b/webview-ui/src/components/chat/ChatRow.tsx index 5c023ad7d7..f9d3443425 100644 --- a/webview-ui/src/components/chat/ChatRow.tsx +++ b/webview-ui/src/components/chat/ChatRow.tsx @@ -1434,10 +1434,6 @@ export const ChatRowContent = ({ type: "openInBrowser", url: "https://app.matterai.so/billing?tab=axon-code", }) - }} - style={{ - width: "100%", - maxWidth: "200px", }}> Purchase / Upgrade Plan diff --git a/webview-ui/src/components/chat/ChatView.tsx b/webview-ui/src/components/chat/ChatView.tsx index ff71dcc755..b0cff2b0a3 100644 --- a/webview-ui/src/components/chat/ChatView.tsx +++ b/webview-ui/src/components/chat/ChatView.tsx @@ -2361,25 +2361,15 @@ const ChatViewComponent: React.ForwardRefRenderFunction
+ appearance="primary" + href="https://app.matterai.so/get-started"> Get Started for free
+ appearance="secondary" + href="https://docs.matterai.so/quickstart-ai-code-review-agent"> View Demo
@@ -2502,13 +2492,10 @@ const ChatViewComponent: React.ForwardRefRenderFunction +
{ setShowSourceControl(true) // If there's an error, automatically retry when opening diff --git a/webview-ui/src/components/chat/CodeIndexPopover.tsx b/webview-ui/src/components/chat/CodeIndexPopover.tsx index 53e587b582..1260d8a6e5 100644 --- a/webview-ui/src/components/chat/CodeIndexPopover.tsx +++ b/webview-ui/src/components/chat/CodeIndexPopover.tsx @@ -624,7 +624,7 @@ export const CodeIndexPopover: React.FC = ({ {/* kilocode_change start */} {currentSettings.codebaseIndexEnabled && indexingStatus.systemStatus === "Indexing" && ( {t("settings:codeIndex.cancelIndexingButton")} @@ -635,6 +635,7 @@ export const CodeIndexPopover: React.FC = ({ (indexingStatus.systemStatus === "Error" || indexingStatus.systemStatus === "Standby") && ( vscode.postMessage({ type: "startIndexing" })} disabled={saveStatus === "saving" || hasUnsavedChanges}> {t("settings:codeIndex.startIndexingButton")} @@ -675,6 +676,7 @@ export const CodeIndexPopover: React.FC = ({ {saveStatus === "saving" ? t("settings:codeIndex.saving") diff --git a/webview-ui/src/components/chat/CodebaseSearchResultsDisplay.tsx b/webview-ui/src/components/chat/CodebaseSearchResultsDisplay.tsx index c14e8dc291..5ca394e4a0 100644 --- a/webview-ui/src/components/chat/CodebaseSearchResultsDisplay.tsx +++ b/webview-ui/src/components/chat/CodebaseSearchResultsDisplay.tsx @@ -16,7 +16,7 @@ const CodebaseSearchResultsDisplay: React.FC const [codebaseSearchResultsExpanded, setCodebaseSearchResultsExpanded] = useState(false) return ( -
+
setCodebaseSearchResultsExpanded(!codebaseSearchResultsExpanded)} className="cursor-pointer flex items-center justify-between px-2 py-1.5 bg-[var(--vscode-editor-background)] rounded-lg"> diff --git a/webview-ui/src/components/chat/CommandExecution.tsx b/webview-ui/src/components/chat/CommandExecution.tsx index 53ea6161d7..aeefd5a426 100644 --- a/webview-ui/src/components/chat/CommandExecution.tsx +++ b/webview-ui/src/components/chat/CommandExecution.tsx @@ -18,6 +18,7 @@ import { extractPatternsFromCommand } from "../../utils/command-parser" import { parseCommand } from "../../utils/command-validation" import CodeBlock from "../kilocode/common/CodeBlock" // kilocode_change import { CommandPatternSelector } from "./CommandPatternSelector" +import { VSCodeButton } from "@vscode/webview-ui-toolkit/react" interface CommandPattern { pattern: string @@ -197,22 +198,20 @@ export const CommandExecution = ({ {onPrimaryButtonClick && onSecondaryButtonClick && enableButtons && (
- + - +
)} diff --git a/webview-ui/src/components/common/MarkdownBlock.tsx b/webview-ui/src/components/common/MarkdownBlock.tsx index 4c51af19d6..2e0073ee80 100644 --- a/webview-ui/src/components/common/MarkdownBlock.tsx +++ b/webview-ui/src/components/common/MarkdownBlock.tsx @@ -77,7 +77,7 @@ const StyledMarkdown = styled.div` padding: 0.5em; overflow-x: auto; overflow-y: hidden; - background-color: var(--vscode-textCodeBlock-background); + background-color: bg-vscode-editor-background; border-radius: 3px; } diff --git a/webview-ui/src/components/history/HistoryView.tsx b/webview-ui/src/components/history/HistoryView.tsx index d0515bfebc..ebe47194a4 100644 --- a/webview-ui/src/components/history/HistoryView.tsx +++ b/webview-ui/src/components/history/HistoryView.tsx @@ -4,7 +4,7 @@ import { DeleteTaskDialog } from "./DeleteTaskDialog" import { BatchDeleteTaskDialog } from "./BatchDeleteTaskDialog" import { Virtuoso } from "react-virtuoso" -import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react" +import { VSCodeButton, VSCodeTextField } from "@vscode/webview-ui-toolkit/react" import { Button, @@ -102,17 +102,19 @@ const HistoryView = ({ onDone }: HistoryViewProps) => { ? `${t("history:exitSelectionMode")}` : `${t("history:enterSelectionMode")}` }> - + - + + {t("history:done")} +
diff --git a/webview-ui/src/components/kilocode/common/ButtonPrimary.tsx b/webview-ui/src/components/kilocode/common/ButtonPrimary.tsx index 5311f61379..9e0d622757 100644 --- a/webview-ui/src/components/kilocode/common/ButtonPrimary.tsx +++ b/webview-ui/src/components/kilocode/common/ButtonPrimary.tsx @@ -10,7 +10,7 @@ const StyledButton = styled.button` text-decoration: none; font-weight: 600; font-size: 12px; - border-radius: 4px; + border-radius: 6px; padding: 14px; transition: all 0.2s; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); diff --git a/webview-ui/src/components/kilocode/common/CodeBlock.tsx b/webview-ui/src/components/kilocode/common/CodeBlock.tsx index b12ac5fee4..a3d7a8fcd3 100644 --- a/webview-ui/src/components/kilocode/common/CodeBlock.tsx +++ b/webview-ui/src/components/kilocode/common/CodeBlock.tsx @@ -123,7 +123,7 @@ export const StyledPre = styled.div<{ pre, code { /* Undefined wordwrap defaults to true (pre-wrap) behavior. */ - background-color: var(--vscode-textCodeBlock-background) !important; + background-color: bg-vscode-editor-background !important; white-space: ${({ wordwrap }) => (wordwrap === "false" ? "pre" : "pre-wrap")}; word-break: ${({ wordwrap }) => (wordwrap === "false" ? "normal" : "normal")}; overflow-wrap: ${({ wordwrap }) => (wordwrap === "false" ? "normal" : "break-word")}; diff --git a/webview-ui/src/components/kilocode/common/KiloCodeAuth.tsx b/webview-ui/src/components/kilocode/common/KiloCodeAuth.tsx index 761d64e671..c4f51a774f 100644 --- a/webview-ui/src/components/kilocode/common/KiloCodeAuth.tsx +++ b/webview-ui/src/components/kilocode/common/KiloCodeAuth.tsx @@ -1,10 +1,10 @@ import React from "react" -import { ButtonLink } from "./ButtonLink" // import { ButtonSecondary } from "./ButtonSecondary" -import Logo from "./Logo" +import { VSCodeButtonLink } from "@/components/common/VSCodeButtonLink" +import { useExtensionState } from "@/context/ExtensionStateContext" import { useAppTranslation } from "@/i18n/TranslationContext" import { getKiloCodeBackendSignUpUrl } from "../helpers" -import { useExtensionState } from "@/context/ExtensionStateContext" +import Logo from "./Logo" interface KiloCodeAuthProps { onManualConfigClick?: () => void @@ -33,8 +33,9 @@ const KiloCodeAuth: React.FC = ({ onManualConfigClick, classN {t("kilocode:welcome.introText2")}

-
- + { if (uiKind === "Web" && onManualConfigClick) { @@ -42,9 +43,11 @@ const KiloCodeAuth: React.FC = ({ onManualConfigClick, classN } }}> {t("kilocode:welcome.ctaButton")} - + - {t("kilocode:welcome.exploreMatterAI")} + + {t("kilocode:welcome.exploreMatterAI")} + {/* {!!onManualConfigClick && ( onManualConfigClick && onManualConfigClick()}> diff --git a/webview-ui/src/components/kilocode/rules/RuleRow.tsx b/webview-ui/src/components/kilocode/rules/RuleRow.tsx index 115ff4c84a..e3e58fbc18 100644 --- a/webview-ui/src/components/kilocode/rules/RuleRow.tsx +++ b/webview-ui/src/components/kilocode/rules/RuleRow.tsx @@ -24,7 +24,7 @@ const RuleRow: React.FC<{ return (
& { - ghostServiceSettings: GhostServiceSettings - setCachedStateField: SetCachedStateField<"ghostServiceSettings"> -} - -export const GhostServiceSettingsView = ({ - ghostServiceSettings, - setCachedStateField, - className, - ...props -}: GhostServiceSettingsViewProps) => { - const { t } = useAppTranslation() - const { enableAutoTrigger, enableQuickInlineTaskKeybinding, enableSmartInlineTaskKeybinding } = - ghostServiceSettings || {} - const keybindings = useKeybindings(["axon-code.addToContextAndFocus", "axon-code.ghost.generateSuggestions"]) - - const onEnableAutoTriggerChange = (newValue: boolean) => { - setCachedStateField("ghostServiceSettings", { - ...ghostServiceSettings, - enableAutoTrigger: newValue, - }) - } - - const onEnableQuickInlineTaskKeybindingChange = (newValue: boolean) => { - setCachedStateField("ghostServiceSettings", { - ...ghostServiceSettings, - enableQuickInlineTaskKeybinding: newValue, - }) - } - - const onEnableSmartInlineTaskKeybindingChange = (newValue: boolean) => { - setCachedStateField("ghostServiceSettings", { - ...ghostServiceSettings, - enableSmartInlineTaskKeybinding: newValue, - }) - } - - const openGlobalKeybindings = (filter?: string) => { - vscode.postMessage({ type: "openGlobalKeybindings", text: filter }) - } - - return ( -
- -
- -
{t("kilocode:ghost.title")}
-
-
- -
-
-
-
- -
{t("kilocode:ghost.settings.triggers")}
-
-
- -
- - {t("kilocode:ghost.settings.enableAutoTrigger.label")} - -
- -
-
- -
- - - {t("kilocode:ghost.settings.enableQuickInlineTaskKeybinding.label", { - keybinding: keybindings["axon-code.addToContextAndFocus"], - })} - - -
- openGlobalKeybindings("axon-code.addToContextAndFocus")} - className="text-[var(--vscode-list-highlightForeground)] hover:underline cursor-pointer"> - ), - }} - /> -
-
-
- - - {t("kilocode:ghost.settings.enableSmartInlineTaskKeybinding.label", { - keybinding: keybindings["axon-code.ghost.generateSuggestions"], - })} - - -
- openGlobalKeybindings("axon-code.ghost.generateSuggestions")} - className="text-[var(--vscode-list-highlightForeground)] hover:underline cursor-pointer"> - ), - }} - /> -
-
- {/* -
-
- -
{t("kilocode:ghost.settings.model")}
-
-
*/} - - {/*
-
- {provider && model ? ( - <> -
- {t("kilocode:ghost.settings.provider")}:{" "} - {provider} -
-
- {t("kilocode:ghost.settings.model")}:{" "} - {model} -
- - ) : ( -
- {t("kilocode:ghost.settings.noModelConfigured")} -
- )} -
-
*/} -
-
-
- ) -} diff --git a/webview-ui/src/components/kilocode/settings/__tests__/GhostServiceSettings.spec.tsx b/webview-ui/src/components/kilocode/settings/__tests__/GhostServiceSettings.spec.tsx deleted file mode 100644 index 5036b32d25..0000000000 --- a/webview-ui/src/components/kilocode/settings/__tests__/GhostServiceSettings.spec.tsx +++ /dev/null @@ -1,247 +0,0 @@ -import { render, screen, fireEvent } from "@testing-library/react" -import { describe, expect, it, vi, beforeEach } from "vitest" -import { GhostServiceSettingsView } from "../GhostServiceSettings" -import { GhostServiceSettings } from "@roo-code/types" -import React from "react" - -// Mock react-i18next -vi.mock("react-i18next", () => ({ - Trans: ({ i18nKey, children }: any) => {i18nKey || children}, - useTranslation: () => ({ - t: (key: string) => key, - }), - initReactI18next: { - type: "3rdParty", - init: () => {}, - }, -})) - -vi.mock("@/i18n/TranslationContext", () => ({ - useAppTranslation: () => ({ - t: (key: string) => key, - }), - TranslationProvider: ({ children }: any) =>
{children}
, -})) - -// Mock lucide-react icons -vi.mock("lucide-react", () => ({ - Bot: ({ className }: any) => Bot Icon, - Zap: ({ className }: any) => Zap Icon, -})) - -// Mock cn utility -vi.mock("@/lib/utils", () => ({ - cn: (...classes: any[]) => classes.filter(Boolean).join(" "), -})) - -// Mock the vscode module -vi.mock("@/utils/vscode", () => ({ - vscode: { - postMessage: vi.fn(), - }, -})) - -// Mock ControlledCheckbox -vi.mock("../../common/ControlledCheckbox", () => ({ - ControlledCheckbox: ({ children, checked, onChange }: any) => ( - - ), -})) - -// Mock the UI components -vi.mock("@src/components/ui", () => ({ - Slider: ({ value, onValueChange, disabled }: any) => ( - onValueChange?.([parseInt(e.target.value)])} - disabled={disabled} - /> - ), -})) - -// Mock the settings components -vi.mock("../../settings/SectionHeader", () => ({ - SectionHeader: ({ children }: any) =>
{children}
, -})) - -vi.mock("../../settings/Section", () => ({ - Section: ({ children }: any) =>
{children}
, -})) - -const defaultGhostServiceSettings: GhostServiceSettings = { - enableAutoTrigger: false, - enableQuickInlineTaskKeybinding: false, - enableSmartInlineTaskKeybinding: false, - provider: "openrouter", - model: "openai/gpt-4o-mini", -} - -const renderComponent = (props = {}) => { - const defaultProps = { - ghostServiceSettings: defaultGhostServiceSettings, - setCachedStateField: vi.fn(), - ...props, - } - - return render() -} - -describe("GhostServiceSettingsView", () => { - beforeEach(() => { - vi.clearAllMocks() - }) - - it("renders the component without errors", () => { - expect(() => renderComponent()).not.toThrow() - }) - - it("renders basic component structure", () => { - renderComponent() - - // Verify basic structure is present - expect(document.querySelector(".flex.flex-col")).toBeInTheDocument() - - // Verify checkboxes are rendered - const checkboxes = screen.getAllByRole("checkbox") - expect(checkboxes.length).toBeGreaterThan(0) - }) - - it("renders basic trigger settings", () => { - renderComponent() - - // Check that trigger settings are visible - expect(screen.getByText(/kilocode:ghost.settings.triggers/)).toBeInTheDocument() - expect(screen.getByText(/kilocode:ghost.settings.enableAutoTrigger.label/)).toBeInTheDocument() - }) - - it("toggles auto trigger checkbox correctly", () => { - const setCachedStateField = vi.fn() - renderComponent({ setCachedStateField }) - - // Find and click the auto trigger checkbox - const checkbox = screen - .getByText(/kilocode:ghost.settings.enableAutoTrigger.label/) - .closest("label") - ?.querySelector("input[type='checkbox']") - - if (checkbox) { - fireEvent.click(checkbox) - } - - expect(setCachedStateField).toHaveBeenCalledWith( - "ghostServiceSettings", - expect.objectContaining({ - enableAutoTrigger: true, - }), - ) - }) - - it("toggles quick inline task keybinding checkbox correctly", () => { - const setCachedStateField = vi.fn() - renderComponent({ setCachedStateField }) - - // Find and click the quick inline task keybinding checkbox - const checkbox = screen - .getByText(/kilocode:ghost.settings.enableQuickInlineTaskKeybinding.label/) - .closest("label") - ?.querySelector("input[type='checkbox']") - - if (checkbox) { - fireEvent.click(checkbox) - } - - expect(setCachedStateField).toHaveBeenCalledWith( - "ghostServiceSettings", - expect.objectContaining({ - enableQuickInlineTaskKeybinding: true, - }), - ) - }) - - it("toggles smart inline task keybinding checkbox correctly", () => { - const setCachedStateField = vi.fn() - renderComponent({ setCachedStateField }) - - // Find and click the smart inline task keybinding checkbox - const checkbox = screen - .getByText(/kilocode:ghost.settings.enableSmartInlineTaskKeybinding.label/) - .closest("label") - ?.querySelector("input[type='checkbox']") - - if (checkbox) { - fireEvent.click(checkbox) - } - - expect(setCachedStateField).toHaveBeenCalledWith( - "ghostServiceSettings", - expect.objectContaining({ - enableSmartInlineTaskKeybinding: true, - }), - ) - }) - - it("renders Trans components with proper structure", () => { - renderComponent() - - // Look for the description divs that should contain the Trans components - const descriptionDivs = document.querySelectorAll(".text-vscode-descriptionForeground.text-sm") - - // We should have multiple description divs for the different settings - expect(descriptionDivs.length).toBeGreaterThan(2) - }) - - it("displays provider and model information when available", () => { - renderComponent({ - ghostServiceSettings: { - ...defaultGhostServiceSettings, - provider: "openrouter", - model: "openai/gpt-4o-mini", - }, - }) - - expect(screen.getByText(/kilocode:ghost.settings.provider/)).toBeInTheDocument() - expect(screen.getByText(/openrouter/)).toBeInTheDocument() - expect(screen.getAllByText(/kilocode:ghost.settings.model/).length).toBeGreaterThan(0) - expect(screen.getByText(/openai\/gpt-4o-mini/)).toBeInTheDocument() - }) - - it("displays error message when provider and model are not configured", () => { - renderComponent({ - ghostServiceSettings: { - ...defaultGhostServiceSettings, - provider: undefined, - model: undefined, - }, - }) - - expect(screen.getByText(/kilocode:ghost.settings.noModelConfigured/)).toBeInTheDocument() - }) - - it("displays error message when only provider is missing", () => { - renderComponent({ - ghostServiceSettings: { - ...defaultGhostServiceSettings, - provider: undefined, - model: "openai/gpt-4o-mini", - }, - }) - - expect(screen.getByText(/kilocode:ghost.settings.noModelConfigured/)).toBeInTheDocument() - }) - - it("displays error message when only model is missing", () => { - renderComponent({ - ghostServiceSettings: { - ...defaultGhostServiceSettings, - provider: "openrouter", - model: undefined, - }, - }) - - expect(screen.getByText(/kilocode:ghost.settings.noModelConfigured/)).toBeInTheDocument() - }) -}) diff --git a/webview-ui/src/components/kilocode/settings/providers/KiloCode.tsx b/webview-ui/src/components/kilocode/settings/providers/KiloCode.tsx index 88c7fef0c4..ffacabc5c1 100644 --- a/webview-ui/src/components/kilocode/settings/providers/KiloCode.tsx +++ b/webview-ui/src/components/kilocode/settings/providers/KiloCode.tsx @@ -182,9 +182,7 @@ export const KiloCode = ({ )} {/* Manage plan button */} - + Manage/Upgrade plan
diff --git a/webview-ui/src/components/mcp/McpView.tsx b/webview-ui/src/components/mcp/McpView.tsx index 37fe0c27e7..b5c21a5dbc 100644 --- a/webview-ui/src/components/mcp/McpView.tsx +++ b/webview-ui/src/components/mcp/McpView.tsx @@ -1,5 +1,3 @@ -import React, { useState } from "react" -import { Trans } from "react-i18next" import { VSCodeButton, VSCodeCheckbox, @@ -8,29 +6,29 @@ import { VSCodePanelTab, VSCodePanelView, } from "@vscode/webview-ui-toolkit/react" +import React, { useState } from "react" +import { Trans } from "react-i18next" import { McpServer } from "@roo/mcp" -import { vscode } from "@src/utils/vscode" -import { useExtensionState } from "@src/context/ExtensionStateContext" -import { useAppTranslation } from "@src/i18n/TranslationContext" import { - Button, Dialog, DialogContent, - DialogHeader, - DialogTitle, DialogDescription, DialogFooter, + DialogHeader, + DialogTitle, ToggleSwitch, - // StandardTooltip, // kilocode_change: not used } from "@src/components/ui" +import { useExtensionState } from "@src/context/ExtensionStateContext" +import { useAppTranslation } from "@src/i18n/TranslationContext" import { buildDocLink } from "@src/utils/docLinks" +import { vscode } from "@src/utils/vscode" import { Tab, TabContent, TabHeader } from "../common/Tab" -import McpToolRow from "./McpToolRow" import McpResourceRow from "./McpResourceRow" +import McpToolRow from "./McpToolRow" // import McpEnabledToggle from "./McpEnabledToggle" // kilocode_change not used import { McpErrorRow } from "./McpErrorRow" @@ -56,7 +54,9 @@ const McpView = ({ onDone, hideHeader = false }: McpViewProps) => { {/* kilocode_change: display header conditionally */}

{t("mcp:title")}

- + + {t("mcp:done")} +
@@ -133,33 +133,33 @@ const McpView = ({ onDone, hideHeader = false }: McpViewProps) => { gridTemplateColumns: "repeat(auto-fit, minmax(200px, 1fr))", gap: "10px", }}> - - - + {/* kilocode_change - +
@@ -562,12 +560,12 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM - - + diff --git a/webview-ui/src/components/memories/MemoriesView.tsx b/webview-ui/src/components/memories/MemoriesView.tsx index db2b9b02c2..15ee9db392 100644 --- a/webview-ui/src/components/memories/MemoriesView.tsx +++ b/webview-ui/src/components/memories/MemoriesView.tsx @@ -1,5 +1,5 @@ import React, { memo, useState, useEffect } from "react" -import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react" +import { VSCodeButton, VSCodeTextField } from "@vscode/webview-ui-toolkit/react" import { Button } from "@/components/ui" import { useAppTranslation } from "@/i18n/TranslationContext" import { Tab, TabHeader, TabContent } from "../common/Tab" @@ -86,7 +86,9 @@ const MemoriesView = ({ onDone }: MemoriesViewProps) => { {t("memories:title")} - + + {t("memories:done")} +
(({ onDone, t currentApiConfigName, // listApiConfigMeta, uriScheme, - kiloCodeWrapperProperties, // kilocode_change settingsImportedAt, } = extensionState @@ -587,7 +584,6 @@ const SettingsView = forwardRef(({ onDone, t { id: "browser", icon: SquareMousePointer }, // { id: "checkpoints", icon: MapPinCheck }, // { id: "display", icon: Monitor }, // kilocode_change - ...(kiloCodeWrapperProperties?.kiloCodeWrapped ? [] : [{ id: "ghost" as const, icon: Bot }]), // kilocode_change { id: "notifications", icon: Bell }, // { id: "contextManagement", icon: Database }, { id: "terminal", icon: SquareTerminal }, @@ -598,7 +594,7 @@ const SettingsView = forwardRef(({ onDone, t { id: "mcp", icon: Server }, { id: "about", icon: Info }, ], - [kiloCodeWrapperProperties?.kiloCodeWrapped], // kilocode_change + [], // kilocode_change ) // Update target section logic to set active tab useEffect(() => { @@ -655,14 +651,14 @@ const SettingsView = forwardRef(({ onDone, t ? t("settings:header.saveButtonTooltip") : t("settings:header.nothingChangedTooltip") }> - +
@@ -726,9 +720,7 @@ const SettingsView = forwardRef(({ onDone, t

{id === "mcp" ? t(`kilocode:settings.sections.mcp`) - : id === "ghost" - ? t(`kilocode:ghost.title`) - : t(`settings:sections.${id}`)} + : t(`settings:sections.${id}`)}

@@ -854,12 +846,6 @@ const SettingsView = forwardRef(({ onDone, t setCachedStateField={setCachedStateField} /> )} */} - {activeTab === "ghost" && ( - - )} {/* kilocode_change end display section */} {/* Notifications Section */} diff --git a/webview-ui/src/components/ui/button.tsx b/webview-ui/src/components/ui/button.tsx index 6cdc61b491..36b0f10523 100644 --- a/webview-ui/src/components/ui/button.tsx +++ b/webview-ui/src/components/ui/button.tsx @@ -5,7 +5,7 @@ import * as React from "react" import { cn } from "@/lib/utils" const buttonVariants = cva( - "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-xs text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer active:opacity-80 border border-[var(--color-matterai-border)] outline-none rounded-md", + "inline-flex items-center justify-center gap-2 whitespace-nowrap text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer active:opacity-80 border border-[var(--color-matterai-border)] outline-none rounded-md", { variants: { variant: { @@ -14,7 +14,7 @@ const buttonVariants = cva( outline: "border border-vscode-input-border bg-transparent hover:bg-accent hover:text-accent-foreground", secondary: - "border border-vscode-input-border bg-secondary text-secondary-foreground hover:bg-secondary/80", + "border border-vscode-input-border bg-secondary text-secondary-foreground hover:bg-secondary/80 rounded-md", ghost: "hover:bg-accent hover:text-accent-foreground border-none", link: "text-primary underline-offset-4 hover:underline", combobox: diff --git a/webview-ui/src/index.css b/webview-ui/src/index.css index 78f5b0388c..273133e137 100644 --- a/webview-ui/src/index.css +++ b/webview-ui/src/index.css @@ -23,6 +23,36 @@ @plugin "tailwindcss-animate"; +@layer components { + /* VSCodeButton Global Overrides */ + vscode-button[appearance="primary"], + vscode-button[appearance="primary"]::part(control), + vscode-button[appearance="primary"]:hover, + vscode-button[appearance="primary"]:hover::part(control) { + color: var(--vscode-button-foreground) !important; + border-radius: 6px !important; + border: none !important; + background: var(--vscode-button-background) !important; + } + + vscode-button[appearance="icon"]::part(control) { + color: var(--vscode-button-secondaryForeground) !important; + background: var(--vscode-button-secondaryBackground) !important; + } + + vscode-button[appearance="secondary"], + vscode-button[appearance="secondary"]::part(control) { + border-radius: 6px !important; + color: var(--vscode-button-secondaryForeground) !important; + border: 0.5px solid var(--vscode-button-border) !important; + background: var(--vscode-button-secondaryBackground) !important; + } + + vscode-button[appearance="secondary"]:hover::part(control) { + background: var(--vscode-button-secondaryHoverBackground) !important; + } +} + @theme { --font-display: var(--vscode-font-family); @@ -133,7 +163,7 @@ --color-vscode-widget-border: var(--vscode-widget-border); --color-vscode-widget-shadow: var(--vscode-widget-shadow); - --color-vscode-textLink-foreground: var(--vscode-textLink-foreground); + --color-vscode-textLink-foreground: var(--vscode-tfextLink-foreground); --color-vscode-textCodeBlock-background: var(--vscode-textCodeBlock-background); @@ -215,7 +245,7 @@ /* Code Block Styles */ pre, code { - background-color: var(--vscode-input-background) !important; + background-color: var(--vscode-editor-background) !important; padding-left: 0.1rem; padding-right: 0.1rem; } @@ -498,28 +528,6 @@ vscode-text-field::part(input) { min-height: 16px; } -vscode-button { - border-radius: 0.5rem; - border: 1px solid var(--vscode-input-border); - background-color: var(--vscode-input-background); - max-width: fit-content; -} - -/** - * VSCodeButton Global Overrides - * - * To override default classes for all VSCodeButton components globally, - * add CSS rules here targeting the vscode-button web component. - * - * Example: - - * - * Or use CSS custom properties to override specific parts: - * vscode-button::part(control) { - * /* your styles here *\/ - * } - */ - /** * @shadcn/ui Overrides / Hacks */