Skip to content

fix: handle codebase search indexing state properly (#5662) #6118

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 29 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
efaaed9
feat: add Issue Fixer Orchestrator mode
MuriloFP Jul 3, 2025
57d3fbe
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 3, 2025
ef61905
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 4, 2025
f5a51c4
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 4, 2025
bcbf329
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 5, 2025
80413c0
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 5, 2025
ab10140
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 7, 2025
39c5cf7
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 7, 2025
00a0b63
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 8, 2025
080b61b
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 8, 2025
7a5ad14
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 8, 2025
2c73ff2
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 9, 2025
05ccf57
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 10, 2025
fdb1f35
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 11, 2025
10ce509
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 14, 2025
ab1f9fc
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 15, 2025
74fd8b4
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 15, 2025
6745c8f
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 16, 2025
faf2ee5
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 17, 2025
b2dadf9
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 17, 2025
f648e4c
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 17, 2025
a6d1e60
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 21, 2025
be90907
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 21, 2025
ed3a077
Merge branch 'RooCodeInc:main' into main
MuriloFP Jul 22, 2025
616cafc
fix: handle codebase search indexing state properly (#5662)
MuriloFP Jul 23, 2025
5ce9ea5
fix: keep tool hidden when disabled/not configured
MuriloFP Jul 23, 2025
7a68182
feat: implement Daniel's feedback on PR #6118
MuriloFP Jul 23, 2025
f1f3234
fix: add missing translations for code index error message
MuriloFP Jul 23, 2025
114dc76
fix: hide codebase_search tool when indexing is not complete
MuriloFP Jul 25, 2025
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
185 changes: 185 additions & 0 deletions src/core/prompts/tools/__tests__/index.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
import { describe, it, expect, vi, beforeEach } from "vitest"
import { getToolDescriptionsForMode } from "../index"
import { CodeIndexManager } from "../../../../services/code-index/manager"

// Mock dependencies
vi.mock("../../../../services/code-index/manager")
vi.mock("../../../../services/mcp/McpHub")
vi.mock("../../../config/ContextProxy", () => ({
ContextProxy: {
instance: {
getSettings: vi.fn(() => ({ todoListEnabled: true })),
},
},
}))

describe("getToolDescriptionsForMode", () => {
let mockCodeIndexManager: any

beforeEach(() => {
vi.clearAllMocks()

// Setup mock CodeIndexManager
mockCodeIndexManager = {
isFeatureEnabled: true,
isFeatureConfigured: true,
isInitialized: true,
state: "Indexed",
}

vi.mocked(CodeIndexManager).getInstance = vi.fn((_context: any) => mockCodeIndexManager as any)
})

describe("codebase_search tool availability", () => {
it("should include codebase_search when feature is enabled, configured, and indexing is complete", () => {
mockCodeIndexManager.isFeatureEnabled = true
mockCodeIndexManager.isFeatureConfigured = true
mockCodeIndexManager.state = "Indexed"

const result = getToolDescriptionsForMode(
"code",
"/test/path",
false,
mockCodeIndexManager,
undefined,
undefined,
undefined,
[],
{},
false,
{ todoListEnabled: true },
)

expect(result).toContain("codebase_search")
expect(result).toContain("Find files most relevant to the search query")
})

it("should exclude codebase_search when feature is disabled", () => {
mockCodeIndexManager.isFeatureEnabled = false
mockCodeIndexManager.isFeatureConfigured = true
mockCodeIndexManager.state = "Indexed"

const result = getToolDescriptionsForMode(
"code",
"/test/path",
false,
mockCodeIndexManager,
undefined,
undefined,
undefined,
[],
{},
false,
{ todoListEnabled: true },
)

expect(result).not.toContain("codebase_search")
})

it("should exclude codebase_search when feature is not configured", () => {
mockCodeIndexManager.isFeatureEnabled = true
mockCodeIndexManager.isFeatureConfigured = false
mockCodeIndexManager.state = "Indexed"

const result = getToolDescriptionsForMode(
"code",
"/test/path",
false,
mockCodeIndexManager,
undefined,
undefined,
undefined,
[],
{},
false,
{ todoListEnabled: true },
)

expect(result).not.toContain("codebase_search")
})

it("should exclude codebase_search when indexing is in Standby state", () => {
mockCodeIndexManager.isFeatureEnabled = true
mockCodeIndexManager.isFeatureConfigured = true
mockCodeIndexManager.state = "Standby"

const result = getToolDescriptionsForMode(
"code",
"/test/path",
false,
mockCodeIndexManager,
undefined,
undefined,
undefined,
[],
{},
false,
{ todoListEnabled: true },
)

expect(result).not.toContain("codebase_search")
})

it("should exclude codebase_search when indexing is in progress", () => {
mockCodeIndexManager.isFeatureEnabled = true
mockCodeIndexManager.isFeatureConfigured = true
mockCodeIndexManager.state = "Indexing"

const result = getToolDescriptionsForMode(
"code",
"/test/path",
false,
mockCodeIndexManager,
undefined,
undefined,
undefined,
[],
{},
false,
{ todoListEnabled: true },
)

expect(result).not.toContain("codebase_search")
})

it("should exclude codebase_search when indexing is in Error state", () => {
mockCodeIndexManager.isFeatureEnabled = true
mockCodeIndexManager.isFeatureConfigured = true
mockCodeIndexManager.state = "Error"

const result = getToolDescriptionsForMode(
"code",
"/test/path",
false,
mockCodeIndexManager,
undefined,
undefined,
undefined,
[],
{},
false,
{ todoListEnabled: true },
)

expect(result).not.toContain("codebase_search")
})

it("should exclude codebase_search when codeIndexManager is undefined", () => {
const result = getToolDescriptionsForMode(
"code",
"/test/path",
false,
undefined,
undefined,
undefined,
undefined,
[],
{},
false,
{ todoListEnabled: true },
)

expect(result).not.toContain("codebase_search")
})
})
})
6 changes: 4 additions & 2 deletions src/core/prompts/tools/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,12 @@ export function getToolDescriptionsForMode(
// Add always available tools
ALWAYS_AVAILABLE_TOOLS.forEach((tool) => tools.add(tool))

// Conditionally exclude codebase_search if feature is disabled or not configured
// Conditionally exclude codebase_search if feature is disabled, not configured, or indexing is not complete
if (
!codeIndexManager ||
!(codeIndexManager.isFeatureEnabled && codeIndexManager.isFeatureConfigured && codeIndexManager.isInitialized)
!codeIndexManager.isFeatureEnabled ||
!codeIndexManager.isFeatureConfigured ||
codeIndexManager.state !== "Indexed"
) {
tools.delete("codebase_search")
}
Expand Down
Loading