diff --git a/webview-ui/src/components/chat/CodeIndexPopover.tsx b/webview-ui/src/components/chat/CodeIndexPopover.tsx index 84703bcae2..30219f4770 100644 --- a/webview-ui/src/components/chat/CodeIndexPopover.tsx +++ b/webview-ui/src/components/chat/CodeIndexPopover.tsx @@ -7,7 +7,6 @@ import { VSCodeDropdown, VSCodeOption, VSCodeLink, - VSCodeCheckbox, } from "@vscode/webview-ui-toolkit/react" import * as ProgressPrimitive from "@radix-ui/react-progress" import { vscode } from "@src/utils/vscode" @@ -513,20 +512,6 @@ export const CodeIndexPopover: React.FC = ({
- {/* Enable/Disable Toggle */} -
-
- updateSetting("codebaseIndexEnabled", e.target.checked)}> - {t("settings:codeIndex.enableLabel")} - - - - -
-
- {/* Status Section */}

{t("settings:codeIndex.statusTitle")}

diff --git a/webview-ui/src/components/chat/IndexingStatusBadge.tsx b/webview-ui/src/components/chat/IndexingStatusBadge.tsx index ff5a0171b5..3f47e22c1f 100644 --- a/webview-ui/src/components/chat/IndexingStatusBadge.tsx +++ b/webview-ui/src/components/chat/IndexingStatusBadge.tsx @@ -4,6 +4,7 @@ import { cn } from "@src/lib/utils" import { vscode } from "@src/utils/vscode" import { useAppTranslation } from "@/i18n/TranslationContext" import { useTooltip } from "@/hooks/useTooltip" +import { useExtensionState } from "@src/context/ExtensionStateContext" import { CodeIndexPopover } from "./CodeIndexPopover" import type { IndexingStatus, IndexingStatusUpdateMessage } from "@roo/ExtensionMessage" @@ -15,6 +16,7 @@ export const IndexingStatusBadge: React.FC = ({ classN const { t } = useAppTranslation() const { showTooltip, handleMouseEnter, handleMouseLeave, cleanup } = useTooltip({ delay: 300 }) const [isHovered, setIsHovered] = useState(false) + const { codebaseIndexConfig } = useExtensionState() const [indexingStatus, setIndexingStatus] = useState({ systemStatus: "Standby", @@ -52,6 +54,11 @@ export const IndexingStatusBadge: React.FC = ({ classN [indexingStatus.processedItems, indexingStatus.totalItems], ) + // Don't render if codebase indexing is disabled + if (!codebaseIndexConfig?.codebaseIndexEnabled) { + return null + } + // Get tooltip text with internationalization const getTooltipText = () => { switch (indexingStatus.systemStatus) { diff --git a/webview-ui/src/components/settings/GeneralSettings.tsx b/webview-ui/src/components/settings/GeneralSettings.tsx new file mode 100644 index 0000000000..559f8b3e70 --- /dev/null +++ b/webview-ui/src/components/settings/GeneralSettings.tsx @@ -0,0 +1,47 @@ +import React from "react" +import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react" +import { useExtensionState } from "@/context/ExtensionStateContext" +import { useAppTranslation } from "@/i18n/TranslationContext" +import { vscode } from "@/utils/vscode" + +export const GeneralSettings: React.FC = () => { + const { t } = useAppTranslation() + const { codebaseIndexConfig } = useExtensionState() + + const updateSetting = (key: string, value: any) => { + vscode.postMessage({ + type: "saveCodeIndexSettingsAtomic", + codeIndexSettings: { + codebaseIndexEnabled: codebaseIndexConfig?.codebaseIndexEnabled ?? true, + codebaseIndexQdrantUrl: codebaseIndexConfig?.codebaseIndexQdrantUrl ?? "", + codebaseIndexEmbedderProvider: codebaseIndexConfig?.codebaseIndexEmbedderProvider ?? "openai", + codebaseIndexEmbedderBaseUrl: codebaseIndexConfig?.codebaseIndexEmbedderBaseUrl, + codebaseIndexEmbedderModelId: codebaseIndexConfig?.codebaseIndexEmbedderModelId ?? "", + codebaseIndexEmbedderModelDimension: codebaseIndexConfig?.codebaseIndexEmbedderModelDimension, + codebaseIndexSearchMaxResults: codebaseIndexConfig?.codebaseIndexSearchMaxResults, + codebaseIndexSearchMinScore: codebaseIndexConfig?.codebaseIndexSearchMinScore, + codebaseIndexOpenAiCompatibleBaseUrl: codebaseIndexConfig?.codebaseIndexOpenAiCompatibleBaseUrl, + ...codebaseIndexConfig, + [key]: value, + }, + }) + } + + return ( +
+
+

+ {t("settings:general.codebaseIndexing.title")} +

+

+ {t("settings:general.codebaseIndexing.description")} +

+ updateSetting("codebaseIndexEnabled", e.target.checked)}> + {t("settings:general.codebaseIndexing.enabled")} + +
+
+ ) +} diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index cf9e779cbd..67dacbcadb 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -54,6 +54,7 @@ import { SetCachedStateField, SetExperimentEnabled } from "./types" import { SectionHeader } from "./SectionHeader" import ApiConfigManager from "./ApiConfigManager" import ApiOptions from "./ApiOptions" +import { GeneralSettings } from "./GeneralSettings" import { AutoApproveSettings } from "./AutoApproveSettings" import { BrowserSettings } from "./BrowserSettings" import { CheckpointSettings } from "./CheckpointSettings" @@ -79,6 +80,7 @@ export interface SettingsViewRef { } const sectionNames = [ + "general", "providers", "autoApprove", "browser", @@ -392,6 +394,7 @@ const SettingsView = forwardRef(({ onDone, t const sections: { id: SectionName; icon: LucideIcon }[] = useMemo( () => [ + { id: "general", icon: SquareMousePointer }, { id: "providers", icon: Webhook }, { id: "autoApprove", icon: CheckCheck }, { id: "browser", icon: SquareMousePointer }, @@ -539,6 +542,9 @@ const SettingsView = forwardRef(({ onDone, t {/* Content area */} + {/* General Section */} + {activeTab === "general" && } + {/* Providers Section */} {activeTab === "providers" && (
diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 25428cfb16..f1a10a9958 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -21,6 +21,7 @@ "discardButton": "Discard changes" }, "sections": { + "general": "General", "providers": "Providers", "autoApprove": "Auto-Approve", "browser": "Browser", @@ -33,6 +34,13 @@ "language": "Language", "about": "About Roo Code" }, + "general": { + "description": "Configure general application settings and features.", + "codebaseIndexing": { + "title": "Codebase Indexing", + "description": "Enable semantic search of your project codebase for improved context understanding and code assistance." + } + }, "prompts": { "description": "Configure support prompts that are used for quick actions like enhancing prompts, explaining code, and fixing issues. These prompts help Roo provide better assistance for common development tasks." },