Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 0 additions & 15 deletions webview-ui/src/components/chat/CodeIndexPopover.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -513,20 +512,6 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
</div>

<div className="p-4">
{/* Enable/Disable Toggle */}
<div className="mb-4">
<div className="flex items-center gap-2">
<VSCodeCheckbox
checked={currentSettings.codebaseIndexEnabled}
onChange={(e: any) => updateSetting("codebaseIndexEnabled", e.target.checked)}>
<span className="font-medium">{t("settings:codeIndex.enableLabel")}</span>
</VSCodeCheckbox>
<StandardTooltip content={t("settings:codeIndex.enableDescription")}>
<span className="codicon codicon-info text-xs text-vscode-descriptionForeground cursor-help" />
</StandardTooltip>
</div>
</div>

{/* Status Section */}
<div className="space-y-2">
<h4 className="text-sm font-medium">{t("settings:codeIndex.statusTitle")}</h4>
Expand Down
7 changes: 7 additions & 0 deletions webview-ui/src/components/chat/IndexingStatusBadge.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand All @@ -15,6 +16,7 @@ export const IndexingStatusBadge: React.FC<IndexingStatusBadgeProps> = ({ classN
const { t } = useAppTranslation()
const { showTooltip, handleMouseEnter, handleMouseLeave, cleanup } = useTooltip({ delay: 300 })
const [isHovered, setIsHovered] = useState(false)
const { codebaseIndexConfig } = useExtensionState()

const [indexingStatus, setIndexingStatus] = useState<IndexingStatus>({
systemStatus: "Standby",
Expand Down Expand Up @@ -52,6 +54,11 @@ export const IndexingStatusBadge: React.FC<IndexingStatusBadgeProps> = ({ 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) {
Expand Down
47 changes: 47 additions & 0 deletions webview-ui/src/components/settings/GeneralSettings.tsx
Original file line number Diff line number Diff line change
@@ -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,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In updateSetting, you list default values then spread codebaseIndexConfig before overriding [key]. This ordering may be fragile if any default is unintentionally overwritten. Consider reordering or add a comment justifying the order.

[key]: value,
},
})
}

return (
<div className="space-y-4">
<div className="space-y-2">
<h3 className="text-lg font-medium text-vscode-foreground">
{t("settings:general.codebaseIndexing.title")}
</h3>
<p className="text-sm text-vscode-descriptionForeground">
{t("settings:general.codebaseIndexing.description")}
</p>
<VSCodeCheckbox
checked={codebaseIndexConfig?.codebaseIndexEnabled ?? true}
onChange={(e: any) => updateSetting("codebaseIndexEnabled", e.target.checked)}>
{t("settings:general.codebaseIndexing.enabled")}
</VSCodeCheckbox>
</div>
</div>
)
}
6 changes: 6 additions & 0 deletions webview-ui/src/components/settings/SettingsView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -79,6 +80,7 @@ export interface SettingsViewRef {
}

const sectionNames = [
"general",
"providers",
"autoApprove",
"browser",
Expand Down Expand Up @@ -392,6 +394,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ 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 },
Expand Down Expand Up @@ -539,6 +542,9 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t

{/* Content area */}
<TabContent className="p-0 flex-1 overflow-auto">
{/* General Section */}
{activeTab === "general" && <GeneralSettings />}

{/* Providers Section */}
{activeTab === "providers" && (
<div>
Expand Down
8 changes: 8 additions & 0 deletions webview-ui/src/i18n/locales/en/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"discardButton": "Discard changes"
},
"sections": {
"general": "General",
"providers": "Providers",
"autoApprove": "Auto-Approve",
"browser": "Browser",
Expand All @@ -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."
},
Expand Down
Loading