@@ -2057,62 +2057,37 @@ export const webviewMessageHandler = async (
20572057 // Update webview state
20582058 await provider . postStateToWebview ( )
20592059
2060- // Then handle validation and initialization
2061- if ( provider . codeIndexManager ) {
2062- // If embedder provider changed, perform proactive validation
2063- if ( embedderProviderChanged ) {
2060+ // If the feature is being disabled, we don't need to validate or show workspace errors
2061+ if ( ! settings . codebaseIndexEnabled ) {
2062+ // If there's a code index manager, let it handle the disable
2063+ if ( provider . codeIndexManager ) {
20642064 try {
2065- // Force handleSettingsChange which will trigger validation
20662065 await provider . codeIndexManager . handleSettingsChange ( )
20672066 } catch ( error ) {
2068- // Validation failed - the error state is already set by handleSettingsChange
2067+ // Log but don't fail - settings are saved and feature is disabled
20692068 provider . log (
2070- `Embedder validation failed after provider change: ${ error instanceof Error ? error . message : String ( error ) } ` ,
2071- )
2072- // Send validation error to webview
2073- await provider . postMessageToWebview ( {
2074- type : "indexingStatusUpdate" ,
2075- values : provider . codeIndexManager . getCurrentStatus ( ) ,
2076- } )
2077- // Exit early - don't try to start indexing with invalid configuration
2078- break
2079- }
2080- } else {
2081- // No provider change, just handle settings normally
2082- try {
2083- await provider . codeIndexManager . handleSettingsChange ( )
2084- } catch ( error ) {
2085- // Log but don't fail - settings are saved
2086- provider . log (
2087- `Settings change handling error: ${ error instanceof Error ? error . message : String ( error ) } ` ,
2069+ `Settings change handling error while disabling: ${ error instanceof Error ? error . message : String ( error ) } ` ,
20882070 )
20892071 }
20902072 }
2073+ // Clear any error status when disabling
2074+ await provider . postMessageToWebview ( {
2075+ type : "indexingStatusUpdate" ,
2076+ values : {
2077+ systemStatus : "Standby" ,
2078+ message : "" ,
2079+ processedItems : 0 ,
2080+ totalItems : 0 ,
2081+ currentItemUnit : "items" ,
2082+ } ,
2083+ } )
2084+ break
2085+ }
20912086
2092- // Wait a bit more to ensure everything is ready
2093- await new Promise ( ( resolve ) => setTimeout ( resolve , 200 ) )
2094-
2095- // Auto-start indexing if now enabled and configured
2096- if ( provider . codeIndexManager . isFeatureEnabled && provider . codeIndexManager . isFeatureConfigured ) {
2097- if ( ! provider . codeIndexManager . isInitialized ) {
2098- try {
2099- await provider . codeIndexManager . initialize ( provider . contextProxy )
2100- provider . log ( `Code index manager initialized after settings save` )
2101- } catch ( error ) {
2102- provider . log (
2103- `Code index initialization failed: ${ error instanceof Error ? error . message : String ( error ) } ` ,
2104- )
2105- // Send error status to webview
2106- await provider . postMessageToWebview ( {
2107- type : "indexingStatusUpdate" ,
2108- values : provider . codeIndexManager . getCurrentStatus ( ) ,
2109- } )
2110- }
2111- }
2112- }
2113- } else {
2114- // No workspace open - send error status
2115- provider . log ( "Cannot save code index settings: No workspace folder open" )
2087+ // Feature is being enabled - check if we have a workspace
2088+ if ( ! provider . codeIndexManager ) {
2089+ // No workspace open - send error status only when trying to enable
2090+ provider . log ( "Cannot enable code indexing: No workspace folder open" )
21162091 await provider . postMessageToWebview ( {
21172092 type : "indexingStatusUpdate" ,
21182093 values : {
@@ -2123,6 +2098,60 @@ export const webviewMessageHandler = async (
21232098 currentItemUnit : "items" ,
21242099 } ,
21252100 } )
2101+ break
2102+ }
2103+
2104+ // We have a workspace and feature is enabled - proceed with validation and initialization
2105+ // If embedder provider changed, perform proactive validation
2106+ if ( embedderProviderChanged ) {
2107+ try {
2108+ // Force handleSettingsChange which will trigger validation
2109+ await provider . codeIndexManager . handleSettingsChange ( )
2110+ } catch ( error ) {
2111+ // Validation failed - the error state is already set by handleSettingsChange
2112+ provider . log (
2113+ `Embedder validation failed after provider change: ${ error instanceof Error ? error . message : String ( error ) } ` ,
2114+ )
2115+ // Send validation error to webview
2116+ await provider . postMessageToWebview ( {
2117+ type : "indexingStatusUpdate" ,
2118+ values : provider . codeIndexManager . getCurrentStatus ( ) ,
2119+ } )
2120+ // Exit early - don't try to start indexing with invalid configuration
2121+ break
2122+ }
2123+ } else {
2124+ // No provider change, just handle settings normally
2125+ try {
2126+ await provider . codeIndexManager . handleSettingsChange ( )
2127+ } catch ( error ) {
2128+ // Log but don't fail - settings are saved
2129+ provider . log (
2130+ `Settings change handling error: ${ error instanceof Error ? error . message : String ( error ) } ` ,
2131+ )
2132+ }
2133+ }
2134+
2135+ // Wait a bit more to ensure everything is ready
2136+ await new Promise ( ( resolve ) => setTimeout ( resolve , 200 ) )
2137+
2138+ // Auto-start indexing if now enabled and configured
2139+ if ( provider . codeIndexManager . isFeatureEnabled && provider . codeIndexManager . isFeatureConfigured ) {
2140+ if ( ! provider . codeIndexManager . isInitialized ) {
2141+ try {
2142+ await provider . codeIndexManager . initialize ( provider . contextProxy )
2143+ provider . log ( `Code index manager initialized after settings save` )
2144+ } catch ( error ) {
2145+ provider . log (
2146+ `Code index initialization failed: ${ error instanceof Error ? error . message : String ( error ) } ` ,
2147+ )
2148+ // Send error status to webview
2149+ await provider . postMessageToWebview ( {
2150+ type : "indexingStatusUpdate" ,
2151+ values : provider . codeIndexManager . getCurrentStatus ( ) ,
2152+ } )
2153+ }
2154+ }
21262155 }
21272156 } catch ( error ) {
21282157 provider . log ( `Error saving code index settings: ${ error . message || error } ` )
@@ -2138,17 +2167,35 @@ export const webviewMessageHandler = async (
21382167 case "requestIndexingStatus" : {
21392168 const manager = provider . codeIndexManager
21402169 if ( ! manager ) {
2141- // No workspace open - send error status
2142- provider . postMessageToWebview ( {
2143- type : "indexingStatusUpdate" ,
2144- values : {
2145- systemStatus : "Error" ,
2146- message : t ( "embeddings:orchestrator.indexingRequiresWorkspace" ) ,
2147- processedItems : 0 ,
2148- totalItems : 0 ,
2149- currentItemUnit : "items" ,
2150- } ,
2151- } )
2170+ // No workspace open - check if feature is enabled
2171+ const codebaseIndexConfig = getGlobalState ( "codebaseIndexConfig" ) || { }
2172+ const isEnabled = codebaseIndexConfig . codebaseIndexEnabled ?? true
2173+
2174+ if ( isEnabled ) {
2175+ // Feature is enabled but no workspace - show error
2176+ provider . postMessageToWebview ( {
2177+ type : "indexingStatusUpdate" ,
2178+ values : {
2179+ systemStatus : "Error" ,
2180+ message : t ( "embeddings:orchestrator.indexingRequiresWorkspace" ) ,
2181+ processedItems : 0 ,
2182+ totalItems : 0 ,
2183+ currentItemUnit : "items" ,
2184+ } ,
2185+ } )
2186+ } else {
2187+ // Feature is disabled - show standby status
2188+ provider . postMessageToWebview ( {
2189+ type : "indexingStatusUpdate" ,
2190+ values : {
2191+ systemStatus : "Standby" ,
2192+ message : "" ,
2193+ processedItems : 0 ,
2194+ totalItems : 0 ,
2195+ currentItemUnit : "items" ,
2196+ } ,
2197+ } )
2198+ }
21522199 return
21532200 }
21542201 const status = manager . getCurrentStatus ( )
@@ -2214,14 +2261,24 @@ export const webviewMessageHandler = async (
22142261 try {
22152262 const manager = provider . codeIndexManager
22162263 if ( ! manager ) {
2217- provider . log ( "Cannot clear index data: No workspace folder open" )
2218- provider . postMessageToWebview ( {
2219- type : "indexCleared" ,
2220- values : {
2221- success : false ,
2222- error : t ( "embeddings:orchestrator.indexingRequiresWorkspace" ) ,
2223- } ,
2224- } )
2264+ // No workspace open - check if feature is enabled
2265+ const codebaseIndexConfig = getGlobalState ( "codebaseIndexConfig" ) || { }
2266+ const isEnabled = codebaseIndexConfig . codebaseIndexEnabled ?? true
2267+
2268+ if ( isEnabled ) {
2269+ // Only show error if feature is enabled
2270+ provider . log ( "Cannot clear index data: No workspace folder open" )
2271+ provider . postMessageToWebview ( {
2272+ type : "indexCleared" ,
2273+ values : {
2274+ success : false ,
2275+ error : t ( "embeddings:orchestrator.indexingRequiresWorkspace" ) ,
2276+ } ,
2277+ } )
2278+ } else {
2279+ // Feature is disabled, just return success
2280+ provider . postMessageToWebview ( { type : "indexCleared" , values : { success : true } } )
2281+ }
22252282 return
22262283 }
22272284 await manager . clearIndexData ( )
0 commit comments