Skip to content

Commit cd52c18

Browse files
committed
feat: move codebase indexing out of experimental
- Remove codebase indexing checkbox from experimental settings - Set codebase indexing enabled by default (true) - Update all default values and tests to reflect always-enabled state - Remove message handler for toggling codebase index setting
1 parent cb4652e commit cd52c18

File tree

9 files changed

+27
-95
lines changed

9 files changed

+27
-95
lines changed

src/core/webview/ClineProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,7 +1510,7 @@ export class ClineProvider
15101510
customCondensingPrompt,
15111511
codebaseIndexModels: codebaseIndexModels ?? EMBEDDING_MODEL_PROFILES,
15121512
codebaseIndexConfig: codebaseIndexConfig ?? {
1513-
codebaseIndexEnabled: false,
1513+
codebaseIndexEnabled: true,
15141514
codebaseIndexQdrantUrl: "http://localhost:6333",
15151515
codebaseIndexEmbedderProvider: "openai",
15161516
codebaseIndexEmbedderBaseUrl: "",
@@ -1668,7 +1668,7 @@ export class ClineProvider
16681668
customCondensingPrompt: stateValues.customCondensingPrompt,
16691669
codebaseIndexModels: stateValues.codebaseIndexModels ?? EMBEDDING_MODEL_PROFILES,
16701670
codebaseIndexConfig: stateValues.codebaseIndexConfig ?? {
1671-
codebaseIndexEnabled: false,
1671+
codebaseIndexEnabled: true,
16721672
codebaseIndexQdrantUrl: "http://localhost:6333",
16731673
codebaseIndexEmbedderProvider: "openai",
16741674
codebaseIndexEmbedderBaseUrl: "",

src/core/webview/__tests__/ClineProvider.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ describe("ClineProvider", () => {
501501
alwaysAllowReadOnlyOutsideWorkspace: false,
502502
alwaysAllowWrite: false,
503503
codebaseIndexConfig: {
504-
codebaseIndexEnabled: false,
504+
codebaseIndexEnabled: true,
505505
codebaseIndexQdrantUrl: "",
506506
codebaseIndexEmbedderProvider: "openai",
507507
codebaseIndexEmbedderBaseUrl: "",

src/core/webview/webviewMessageHandler.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1221,21 +1221,6 @@ export const webviewMessageHandler = async (
12211221
break
12221222
case "browserToolEnabled":
12231223
await updateGlobalState("browserToolEnabled", message.bool ?? true)
1224-
await provider.postStateToWebview()
1225-
break
1226-
case "codebaseIndexEnabled":
1227-
// Update the codebaseIndexConfig with the new enabled state
1228-
const currentCodebaseConfig = getGlobalState("codebaseIndexConfig") || {}
1229-
await updateGlobalState("codebaseIndexConfig", {
1230-
...currentCodebaseConfig,
1231-
codebaseIndexEnabled: message.bool ?? false,
1232-
})
1233-
1234-
// Notify the code index manager about the change
1235-
if (provider.codeIndexManager) {
1236-
await provider.codeIndexManager.handleSettingsChange()
1237-
}
1238-
12391224
await provider.postStateToWebview()
12401225
break
12411226
case "language":

src/services/code-index/__tests__/config-manager.spec.ts

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ describe("CodeIndexConfigManager", () => {
3232
describe("constructor", () => {
3333
it("should initialize with ContextProxy", () => {
3434
expect(configManager).toBeDefined()
35-
expect(configManager.isFeatureEnabled).toBe(false)
35+
expect(configManager.isFeatureEnabled).toBe(true)
3636
expect(configManager.currentEmbedderProvider).toBe("openai")
3737
})
3838
})
@@ -45,7 +45,7 @@ describe("CodeIndexConfigManager", () => {
4545
const result = await configManager.loadConfiguration()
4646

4747
expect(result.currentConfig).toEqual({
48-
isEnabled: false,
48+
isEnabled: true,
4949
isConfigured: false,
5050
embedderProvider: "openai",
5151
modelId: undefined,
@@ -326,14 +326,14 @@ describe("CodeIndexConfigManager", () => {
326326
})
327327

328328
it("should detect restart requirement when transitioning to enabled+configured", async () => {
329-
// Initial state - disabled
329+
// Initial state - enabled but not configured
330330
mockContextProxy.getGlobalState.mockReturnValue({
331-
codebaseIndexEnabled: false,
331+
codebaseIndexEnabled: true,
332332
})
333333

334334
await configManager.loadConfiguration()
335335

336-
// Enable and configure
336+
// Configure the feature
337337
mockContextProxy.getGlobalState.mockReturnValue({
338338
codebaseIndexEnabled: true,
339339
codebaseIndexQdrantUrl: "http://qdrant.local",
@@ -689,29 +689,28 @@ describe("CodeIndexConfigManager", () => {
689689
expect(result.requiresRestart).toBe(true)
690690
})
691691

692-
it("should not require restart when disabled remains disabled", async () => {
693-
// Initial state - disabled but configured
692+
it("should require restart when enabled and provider changes even if unconfigured", async () => {
693+
// Initial state - enabled but not configured (missing API key)
694694
mockContextProxy.getGlobalState.mockReturnValue({
695-
codebaseIndexEnabled: false,
695+
codebaseIndexEnabled: true,
696696
codebaseIndexQdrantUrl: "http://qdrant.local",
697697
codebaseIndexEmbedderProvider: "openai",
698698
})
699-
setupSecretMocks({
700-
codeIndexOpenAiKey: "test-key",
701-
})
699+
setupSecretMocks({})
702700

703701
await configManager.loadConfiguration()
704702

705-
// Still disabled but change other settings
703+
// Still enabled but change provider while remaining unconfigured
706704
mockContextProxy.getGlobalState.mockReturnValue({
707-
codebaseIndexEnabled: false,
708-
codebaseIndexQdrantUrl: "http://different-qdrant.local",
705+
codebaseIndexEnabled: true,
706+
codebaseIndexQdrantUrl: "http://qdrant.local",
709707
codebaseIndexEmbedderProvider: "ollama",
710708
codebaseIndexEmbedderBaseUrl: "http://ollama.local",
711709
})
712710

713711
const result = await configManager.loadConfiguration()
714-
expect(result.requiresRestart).toBe(false)
712+
// Should require restart because provider changed while enabled
713+
expect(result.requiresRestart).toBe(true)
715714
})
716715

717716
it("should not require restart when unconfigured remains unconfigured", async () => {
@@ -970,7 +969,7 @@ describe("CodeIndexConfigManager", () => {
970969
it("should not require restart when API keys transition from undefined to empty string", async () => {
971970
// Initial state with undefined API keys
972971
mockContextProxy.getGlobalState.mockReturnValue({
973-
codebaseIndexEnabled: false, // Start disabled to avoid restart due to enable+configure
972+
codebaseIndexEnabled: true, // Always enabled now
974973
codebaseIndexQdrantUrl: "http://qdrant.local",
975974
codebaseIndexEmbedderProvider: "openai",
976975
})
@@ -1267,7 +1266,7 @@ describe("CodeIndexConfigManager", () => {
12671266
it("should properly initialize with current config to prevent false restarts", async () => {
12681267
// Setup configuration
12691268
mockContextProxy.getGlobalState.mockReturnValue({
1270-
codebaseIndexEnabled: false, // Start disabled to avoid transition restart
1269+
codebaseIndexEnabled: true, // Always enabled now
12711270
codebaseIndexQdrantUrl: "http://qdrant.local",
12721271
codebaseIndexEmbedderProvider: "openai",
12731272
codebaseIndexEmbedderModelId: "text-embedding-3-small",

src/services/code-index/config-manager.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export class CodeIndexConfigManager {
4242
private _loadAndSetConfiguration(): void {
4343
// Load configuration from storage
4444
const codebaseIndexConfig = this.contextProxy?.getGlobalState("codebaseIndexConfig") ?? {
45-
codebaseIndexEnabled: false,
45+
codebaseIndexEnabled: true,
4646
codebaseIndexQdrantUrl: "http://localhost:6333",
4747
codebaseIndexEmbedderProvider: "openai",
4848
codebaseIndexEmbedderBaseUrl: "",
@@ -69,7 +69,7 @@ export class CodeIndexConfigManager {
6969
const geminiApiKey = this.contextProxy?.getSecret("codebaseIndexGeminiApiKey") ?? ""
7070

7171
// Update instance variables with configuration
72-
this.isEnabled = codebaseIndexEnabled || false
72+
this.isEnabled = codebaseIndexEnabled ?? true
7373
this.qdrantUrl = codebaseIndexQdrantUrl
7474
this.qdrantApiKey = qdrantApiKey ?? ""
7575
this.searchMinScore = codebaseIndexSearchMinScore
@@ -362,7 +362,7 @@ export class CodeIndexConfigManager {
362362
* Gets whether the code indexing feature is enabled
363363
*/
364364
public get isFeatureEnabled(): boolean {
365-
return this.isEnabled
365+
return true
366366
}
367367

368368
/**

webview-ui/src/components/chat/CodeIndexPopover.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
8181

8282
// Default settings template
8383
const getDefaultSettings = (): LocalCodeIndexSettings => ({
84-
codebaseIndexEnabled: false,
84+
codebaseIndexEnabled: true,
8585
codebaseIndexQdrantUrl: "",
8686
codebaseIndexEmbedderProvider: "openai",
8787
codebaseIndexEmbedderBaseUrl: "",
@@ -111,7 +111,7 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
111111
useEffect(() => {
112112
if (codebaseIndexConfig) {
113113
const settings = {
114-
codebaseIndexEnabled: codebaseIndexConfig.codebaseIndexEnabled || false,
114+
codebaseIndexEnabled: codebaseIndexConfig.codebaseIndexEnabled ?? true,
115115
codebaseIndexQdrantUrl: codebaseIndexConfig.codebaseIndexQdrantUrl || "",
116116
codebaseIndexEmbedderProvider: codebaseIndexConfig.codebaseIndexEmbedderProvider || "openai",
117117
codebaseIndexEmbedderBaseUrl: codebaseIndexConfig.codebaseIndexEmbedderBaseUrl || "",

webview-ui/src/components/settings/ExperimentalSettings.tsx

Lines changed: 1 addition & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,26 @@
11
import { HTMLAttributes } from "react"
22
import { FlaskConical } from "lucide-react"
3-
import { VSCodeCheckbox, VSCodeLink } from "@vscode/webview-ui-toolkit/react"
4-
import { Trans } from "react-i18next"
53

6-
import type { Experiments, CodebaseIndexConfig, CodebaseIndexModels } from "@roo-code/types"
4+
import type { Experiments } from "@roo-code/types"
75

86
import { EXPERIMENT_IDS, experimentConfigsMap } from "@roo/experiments"
97

108
import { useAppTranslation } from "@src/i18n/TranslationContext"
119
import { cn } from "@src/lib/utils"
12-
import { buildDocLink } from "@src/utils/docLinks"
1310

1411
import { SetExperimentEnabled } from "./types"
1512
import { SectionHeader } from "./SectionHeader"
1613
import { Section } from "./Section"
1714
import { ExperimentalFeature } from "./ExperimentalFeature"
18-
import { SetCachedStateField } from "./types"
1915

2016
type ExperimentalSettingsProps = HTMLAttributes<HTMLDivElement> & {
2117
experiments: Experiments
2218
setExperimentEnabled: SetExperimentEnabled
23-
// CodeIndexSettings props
24-
codebaseIndexModels: CodebaseIndexModels | undefined
25-
codebaseIndexConfig: CodebaseIndexConfig | undefined
26-
// For codebase index enabled toggle
27-
codebaseIndexEnabled?: boolean
28-
setCachedStateField?: SetCachedStateField<any>
2919
}
3020

3121
export const ExperimentalSettings = ({
3222
experiments,
3323
setExperimentEnabled,
34-
codebaseIndexModels,
35-
codebaseIndexConfig,
36-
codebaseIndexEnabled,
37-
setCachedStateField,
3824
className,
3925
...props
4026
}: ExperimentalSettingsProps) => {
@@ -79,32 +65,6 @@ export const ExperimentalSettings = ({
7965
/>
8066
)
8167
})}
82-
83-
{/* Codebase Indexing Enable/Disable Toggle */}
84-
<div className="mt-4">
85-
<div className="flex items-center gap-2">
86-
<VSCodeCheckbox
87-
checked={codebaseIndexEnabled || false}
88-
onChange={(e: any) => {
89-
const newEnabledState = e.target.checked
90-
if (setCachedStateField && codebaseIndexConfig) {
91-
setCachedStateField("codebaseIndexConfig", {
92-
...codebaseIndexConfig,
93-
codebaseIndexEnabled: newEnabledState,
94-
})
95-
}
96-
}}>
97-
<span className="font-medium">{t("settings:codeIndex.enableLabel")}</span>
98-
</VSCodeCheckbox>
99-
</div>
100-
<p className="text-vscode-descriptionForeground text-sm mt-1 ml-6">
101-
<Trans i18nKey="settings:codeIndex.enableDescription">
102-
<VSCodeLink
103-
href={buildDocLink("features/experimental/codebase-indexing", "settings")}
104-
style={{ display: "inline" }}></VSCodeLink>
105-
</Trans>
106-
</p>
107-
</div>
10868
</Section>
10969
</div>
11070
)

webview-ui/src/components/settings/SettingsView.tsx

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,6 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
170170
maxConcurrentFileReads,
171171
condensingApiConfigId,
172172
customCondensingPrompt,
173-
codebaseIndexConfig,
174-
codebaseIndexModels,
175173
customSupportPrompts,
176174
profileThresholds,
177175
alwaysAllowFollowupQuestions,
@@ -322,9 +320,6 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
322320
vscode.postMessage({ type: "updateSupportPrompt", values: customSupportPrompts || {} })
323321
vscode.postMessage({ type: "upsertApiConfiguration", text: currentApiConfigName, apiConfiguration })
324322
vscode.postMessage({ type: "telemetrySetting", text: telemetrySetting })
325-
if (codebaseIndexConfig) {
326-
vscode.postMessage({ type: "codebaseIndexEnabled", bool: codebaseIndexConfig.codebaseIndexEnabled })
327-
}
328323
vscode.postMessage({ type: "profileThresholds", values: profileThresholds })
329324
setChangeDetected(false)
330325
}
@@ -691,14 +686,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
691686

692687
{/* Experimental Section */}
693688
{activeTab === "experimental" && (
694-
<ExperimentalSettings
695-
setExperimentEnabled={setExperimentEnabled}
696-
experiments={experiments}
697-
codebaseIndexModels={codebaseIndexModels}
698-
codebaseIndexConfig={codebaseIndexConfig}
699-
codebaseIndexEnabled={codebaseIndexConfig?.codebaseIndexEnabled}
700-
setCachedStateField={setCachedStateField}
701-
/>
689+
<ExperimentalSettings setExperimentEnabled={setExperimentEnabled} experiments={experiments} />
702690
)}
703691

704692
{/* Language Section */}

webview-ui/src/context/ExtensionStateContext.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ export const ExtensionStateContextProvider: React.FC<{ children: React.ReactNode
214214
autoCondenseContextPercent: 100,
215215
profileThresholds: {},
216216
codebaseIndexConfig: {
217-
codebaseIndexEnabled: false,
217+
codebaseIndexEnabled: true,
218218
codebaseIndexQdrantUrl: "http://localhost:6333",
219219
codebaseIndexEmbedderProvider: "openai",
220220
codebaseIndexEmbedderBaseUrl: "",

0 commit comments

Comments
 (0)