mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-09 22:31:08 +00:00
fix: allow disabling codebase indexing without workspace
- Modified saveCodeIndexSettingsAtomic handler to allow saving settings when disabling the feature without a workspace - Updated requestIndexingStatus, startIndexing, and clearIndexData handlers to only show workspace errors when the feature is enabled - Clear error status when disabling the feature to prevent persistent error messages Fixes #6664
This commit is contained in:
parent
4e8b17486b
commit
4aad732358
1 changed files with 124 additions and 67 deletions
|
|
@ -2057,62 +2057,37 @@ export const webviewMessageHandler = async (
|
|||
// Update webview state
|
||||
await provider.postStateToWebview()
|
||||
|
||||
// Then handle validation and initialization
|
||||
if (provider.codeIndexManager) {
|
||||
// If embedder provider changed, perform proactive validation
|
||||
if (embedderProviderChanged) {
|
||||
try {
|
||||
// Force handleSettingsChange which will trigger validation
|
||||
await provider.codeIndexManager.handleSettingsChange()
|
||||
} catch (error) {
|
||||
// Validation failed - the error state is already set by handleSettingsChange
|
||||
provider.log(
|
||||
`Embedder validation failed after provider change: ${error instanceof Error ? error.message : String(error)}`,
|
||||
)
|
||||
// Send validation error to webview
|
||||
await provider.postMessageToWebview({
|
||||
type: "indexingStatusUpdate",
|
||||
values: provider.codeIndexManager.getCurrentStatus(),
|
||||
})
|
||||
// Exit early - don't try to start indexing with invalid configuration
|
||||
break
|
||||
}
|
||||
} else {
|
||||
// No provider change, just handle settings normally
|
||||
// If the feature is being disabled, we don't need to validate or show workspace errors
|
||||
if (!settings.codebaseIndexEnabled) {
|
||||
// If there's a code index manager, let it handle the disable
|
||||
if (provider.codeIndexManager) {
|
||||
try {
|
||||
await provider.codeIndexManager.handleSettingsChange()
|
||||
} catch (error) {
|
||||
// Log but don't fail - settings are saved
|
||||
// Log but don't fail - settings are saved and feature is disabled
|
||||
provider.log(
|
||||
`Settings change handling error: ${error instanceof Error ? error.message : String(error)}`,
|
||||
`Settings change handling error while disabling: ${error instanceof Error ? error.message : String(error)}`,
|
||||
)
|
||||
}
|
||||
}
|
||||
// Clear any error status when disabling
|
||||
await provider.postMessageToWebview({
|
||||
type: "indexingStatusUpdate",
|
||||
values: {
|
||||
systemStatus: "Standby",
|
||||
message: "",
|
||||
processedItems: 0,
|
||||
totalItems: 0,
|
||||
currentItemUnit: "items",
|
||||
},
|
||||
})
|
||||
break
|
||||
}
|
||||
|
||||
// Wait a bit more to ensure everything is ready
|
||||
await new Promise((resolve) => setTimeout(resolve, 200))
|
||||
|
||||
// Auto-start indexing if now enabled and configured
|
||||
if (provider.codeIndexManager.isFeatureEnabled && provider.codeIndexManager.isFeatureConfigured) {
|
||||
if (!provider.codeIndexManager.isInitialized) {
|
||||
try {
|
||||
await provider.codeIndexManager.initialize(provider.contextProxy)
|
||||
provider.log(`Code index manager initialized after settings save`)
|
||||
} catch (error) {
|
||||
provider.log(
|
||||
`Code index initialization failed: ${error instanceof Error ? error.message : String(error)}`,
|
||||
)
|
||||
// Send error status to webview
|
||||
await provider.postMessageToWebview({
|
||||
type: "indexingStatusUpdate",
|
||||
values: provider.codeIndexManager.getCurrentStatus(),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// No workspace open - send error status
|
||||
provider.log("Cannot save code index settings: No workspace folder open")
|
||||
// Feature is being enabled - check if we have a workspace
|
||||
if (!provider.codeIndexManager) {
|
||||
// No workspace open - send error status only when trying to enable
|
||||
provider.log("Cannot enable code indexing: No workspace folder open")
|
||||
await provider.postMessageToWebview({
|
||||
type: "indexingStatusUpdate",
|
||||
values: {
|
||||
|
|
@ -2123,6 +2098,60 @@ export const webviewMessageHandler = async (
|
|||
currentItemUnit: "items",
|
||||
},
|
||||
})
|
||||
break
|
||||
}
|
||||
|
||||
// We have a workspace and feature is enabled - proceed with validation and initialization
|
||||
// If embedder provider changed, perform proactive validation
|
||||
if (embedderProviderChanged) {
|
||||
try {
|
||||
// Force handleSettingsChange which will trigger validation
|
||||
await provider.codeIndexManager.handleSettingsChange()
|
||||
} catch (error) {
|
||||
// Validation failed - the error state is already set by handleSettingsChange
|
||||
provider.log(
|
||||
`Embedder validation failed after provider change: ${error instanceof Error ? error.message : String(error)}`,
|
||||
)
|
||||
// Send validation error to webview
|
||||
await provider.postMessageToWebview({
|
||||
type: "indexingStatusUpdate",
|
||||
values: provider.codeIndexManager.getCurrentStatus(),
|
||||
})
|
||||
// Exit early - don't try to start indexing with invalid configuration
|
||||
break
|
||||
}
|
||||
} else {
|
||||
// No provider change, just handle settings normally
|
||||
try {
|
||||
await provider.codeIndexManager.handleSettingsChange()
|
||||
} catch (error) {
|
||||
// Log but don't fail - settings are saved
|
||||
provider.log(
|
||||
`Settings change handling error: ${error instanceof Error ? error.message : String(error)}`,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Wait a bit more to ensure everything is ready
|
||||
await new Promise((resolve) => setTimeout(resolve, 200))
|
||||
|
||||
// Auto-start indexing if now enabled and configured
|
||||
if (provider.codeIndexManager.isFeatureEnabled && provider.codeIndexManager.isFeatureConfigured) {
|
||||
if (!provider.codeIndexManager.isInitialized) {
|
||||
try {
|
||||
await provider.codeIndexManager.initialize(provider.contextProxy)
|
||||
provider.log(`Code index manager initialized after settings save`)
|
||||
} catch (error) {
|
||||
provider.log(
|
||||
`Code index initialization failed: ${error instanceof Error ? error.message : String(error)}`,
|
||||
)
|
||||
// Send error status to webview
|
||||
await provider.postMessageToWebview({
|
||||
type: "indexingStatusUpdate",
|
||||
values: provider.codeIndexManager.getCurrentStatus(),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
provider.log(`Error saving code index settings: ${error.message || error}`)
|
||||
|
|
@ -2138,17 +2167,35 @@ export const webviewMessageHandler = async (
|
|||
case "requestIndexingStatus": {
|
||||
const manager = provider.codeIndexManager
|
||||
if (!manager) {
|
||||
// No workspace open - send error status
|
||||
provider.postMessageToWebview({
|
||||
type: "indexingStatusUpdate",
|
||||
values: {
|
||||
systemStatus: "Error",
|
||||
message: t("embeddings:orchestrator.indexingRequiresWorkspace"),
|
||||
processedItems: 0,
|
||||
totalItems: 0,
|
||||
currentItemUnit: "items",
|
||||
},
|
||||
})
|
||||
// No workspace open - check if feature is enabled
|
||||
const codebaseIndexConfig = getGlobalState("codebaseIndexConfig") || {}
|
||||
const isEnabled = codebaseIndexConfig.codebaseIndexEnabled ?? true
|
||||
|
||||
if (isEnabled) {
|
||||
// Feature is enabled but no workspace - show error
|
||||
provider.postMessageToWebview({
|
||||
type: "indexingStatusUpdate",
|
||||
values: {
|
||||
systemStatus: "Error",
|
||||
message: t("embeddings:orchestrator.indexingRequiresWorkspace"),
|
||||
processedItems: 0,
|
||||
totalItems: 0,
|
||||
currentItemUnit: "items",
|
||||
},
|
||||
})
|
||||
} else {
|
||||
// Feature is disabled - show standby status
|
||||
provider.postMessageToWebview({
|
||||
type: "indexingStatusUpdate",
|
||||
values: {
|
||||
systemStatus: "Standby",
|
||||
message: "",
|
||||
processedItems: 0,
|
||||
totalItems: 0,
|
||||
currentItemUnit: "items",
|
||||
},
|
||||
})
|
||||
}
|
||||
return
|
||||
}
|
||||
const status = manager.getCurrentStatus()
|
||||
|
|
@ -2214,14 +2261,24 @@ export const webviewMessageHandler = async (
|
|||
try {
|
||||
const manager = provider.codeIndexManager
|
||||
if (!manager) {
|
||||
provider.log("Cannot clear index data: No workspace folder open")
|
||||
provider.postMessageToWebview({
|
||||
type: "indexCleared",
|
||||
values: {
|
||||
success: false,
|
||||
error: t("embeddings:orchestrator.indexingRequiresWorkspace"),
|
||||
},
|
||||
})
|
||||
// No workspace open - check if feature is enabled
|
||||
const codebaseIndexConfig = getGlobalState("codebaseIndexConfig") || {}
|
||||
const isEnabled = codebaseIndexConfig.codebaseIndexEnabled ?? true
|
||||
|
||||
if (isEnabled) {
|
||||
// Only show error if feature is enabled
|
||||
provider.log("Cannot clear index data: No workspace folder open")
|
||||
provider.postMessageToWebview({
|
||||
type: "indexCleared",
|
||||
values: {
|
||||
success: false,
|
||||
error: t("embeddings:orchestrator.indexingRequiresWorkspace"),
|
||||
},
|
||||
})
|
||||
} else {
|
||||
// Feature is disabled, just return success
|
||||
provider.postMessageToWebview({ type: "indexCleared", values: { success: true } })
|
||||
}
|
||||
return
|
||||
}
|
||||
await manager.clearIndexData()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue