chore: remove list_code_definition_names tool (#10005)

Co-authored-by: cte <cestreich@gmail.com>
This commit is contained in:
Hannes Rudolph 2025-12-10 21:32:06 -07:00 committed by GitHub
parent 0cbaed7e7b
commit 6a30d9488e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
48 changed files with 18 additions and 1479 deletions

View file

@ -24,7 +24,6 @@ export const toolNames = [
"apply_patch",
"search_files",
"list_files",
"list_code_definition_names",
"browser_action",
"use_mcp_tool",
"access_mcp_resource",

View file

@ -437,14 +437,6 @@ export class NativeToolCallParser {
}
break
case "list_code_definition_names":
if (partialArgs.path !== undefined) {
nativeArgs = {
path: partialArgs.path,
}
}
break
case "run_slash_command":
if (partialArgs.command !== undefined) {
nativeArgs = {
@ -677,14 +669,6 @@ export class NativeToolCallParser {
}
break
case "list_code_definition_names":
if (args.path !== undefined) {
nativeArgs = {
path: args.path,
} as NativeArgsFor<TName>
}
break
case "run_slash_command":
if (args.command !== undefined) {
nativeArgs = {

View file

@ -21,7 +21,6 @@ import { applyDiffTool } from "../tools/MultiApplyDiffTool"
import { searchAndReplaceTool } from "../tools/SearchAndReplaceTool"
import { searchReplaceTool } from "../tools/SearchReplaceTool"
import { applyPatchTool } from "../tools/ApplyPatchTool"
import { listCodeDefinitionNamesTool } from "../tools/ListCodeDefinitionNamesTool"
import { searchFilesTool } from "../tools/SearchFilesTool"
import { browserActionTool } from "../tools/BrowserActionTool"
import { executeCommandTool } from "../tools/ExecuteCommandTool"
@ -396,8 +395,6 @@ export async function presentAssistantMessage(cline: Task) {
return `[${block.name}]`
case "list_files":
return `[${block.name} for '${block.params.path}']`
case "list_code_definition_names":
return `[${block.name} for '${block.params.path}']`
case "browser_action":
return `[${block.name} for '${block.params.action}']`
case "use_mcp_tool":
@ -919,15 +916,6 @@ export async function presentAssistantMessage(cline: Task) {
toolProtocol,
})
break
case "list_code_definition_names":
await listCodeDefinitionNamesTool.handle(cline, block as ToolUse<"list_code_definition_names">, {
askApproval,
handleError,
pushToolResult,
removeClosingTag,
toolProtocol,
})
break
case "search_files":
await searchFilesTool.handle(cline, block as ToolUse<"search_files">, {
askApproval,

View file

@ -10,7 +10,6 @@ export function isReadOnlyToolAction(tool: ClineSayTool): boolean {
"listFiles",
"listFilesTopLevel",
"listFilesRecursive",
"listCodeDefinitionNames",
"searchFiles",
"codebaseSearch",
"runSlashCommand",

View file

@ -149,27 +149,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## write_to_file
Description: Request to write content to a file. This tool is primarily used for **creating new files** or for scenarios where a **complete rewrite of an existing file is intentionally required**. If the file exists, it will be overwritten. If it doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.

View file

@ -149,27 +149,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## ask_followup_question
Description: Ask the user a question to gather additional information needed to complete the task. Use when you need clarification or more details to proceed effectively.

View file

@ -148,27 +148,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## write_to_file
Description: Request to write content to a file. This tool is primarily used for **creating new files** or for scenarios where a **complete rewrite of an existing file is intentionally required**. If the file exists, it will be overwritten. If it doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.

View file

@ -149,27 +149,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## write_to_file
Description: Request to write content to a file. This tool is primarily used for **creating new files** or for scenarios where a **complete rewrite of an existing file is intentionally required**. If the file exists, it will be overwritten. If it doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.

View file

@ -154,27 +154,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## write_to_file
Description: Request to write content to a file. This tool is primarily used for **creating new files** or for scenarios where a **complete rewrite of an existing file is intentionally required**. If the file exists, it will be overwritten. If it doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.

View file

@ -149,27 +149,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## write_to_file
Description: Request to write content to a file. This tool is primarily used for **creating new files** or for scenarios where a **complete rewrite of an existing file is intentionally required**. If the file exists, it will be overwritten. If it doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.

View file

@ -149,27 +149,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## write_to_file
Description: Request to write content to a file. This tool is primarily used for **creating new files** or for scenarios where a **complete rewrite of an existing file is intentionally required**. If the file exists, it will be overwritten. If it doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.

View file

@ -149,27 +149,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## write_to_file
Description: Request to write content to a file. This tool is primarily used for **creating new files** or for scenarios where a **complete rewrite of an existing file is intentionally required**. If the file exists, it will be overwritten. If it doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.

View file

@ -149,27 +149,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## apply_diff
Description: Request to apply PRECISE, TARGETED modifications to an existing file by searching for specific sections of content and replacing them. This tool is for SURGICAL EDITS ONLY - specific changes to existing code.
You can perform multiple distinct search and replace operations within a single `apply_diff` call by providing multiple SEARCH/REPLACE blocks in the `diff` parameter. This is the preferred way to make several targeted changes efficiently.

View file

@ -149,27 +149,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## write_to_file
Description: Request to write content to a file. This tool is primarily used for **creating new files** or for scenarios where a **complete rewrite of an existing file is intentionally required**. If the file exists, it will be overwritten. If it doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.

View file

@ -149,27 +149,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## write_to_file
Description: Request to write content to a file. This tool is primarily used for **creating new files** or for scenarios where a **complete rewrite of an existing file is intentionally required**. If the file exists, it will be overwritten. If it doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.

View file

@ -149,27 +149,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## write_to_file
Description: Request to write content to a file. This tool is primarily used for **creating new files** or for scenarios where a **complete rewrite of an existing file is intentionally required**. If the file exists, it will be overwritten. If it doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.

View file

@ -149,27 +149,6 @@ Example: Requesting to list all files in the current directory
<recursive>false</recursive>
</list_files>
## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory /test/path) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>
## write_to_file
Description: Request to write content to a file. This tool is primarily used for **creating new files** or for scenarios where a **complete rewrite of an existing file is intentionally required**. If the file exists, it will be overwritten. If it doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.

View file

@ -50,7 +50,7 @@ customModes:
or ensuring responsive web interfaces. This mode is especially effective with CSS,
HTML, and modern frontend frameworks. # Optional but recommended
groups: # Required: array of tool groups (can be empty)
- read # Read files group (read_file, fetch_instructions, search_files, list_files, list_code_definition_names)
- read # Read files group (read_file, fetch_instructions, search_files, list_files)
- edit # Edit files group (apply_diff, write_to_file) - allows editing any file
# Or with file restrictions:
# - - edit

View file

@ -13,7 +13,6 @@ import { shouldUseSingleFileRead } from "@roo-code/types"
import { getWriteToFileDescription } from "./write-to-file"
import { getSearchFilesDescription } from "./search-files"
import { getListFilesDescription } from "./list-files"
import { getListCodeDefinitionNamesDescription } from "./list-code-definition-names"
import { getBrowserActionDescription } from "./browser-action"
import { getAskFollowupQuestionDescription } from "./ask-followup-question"
import { getAttemptCompletionDescription } from "./attempt-completion"
@ -42,7 +41,6 @@ const toolDescriptionMap: Record<string, (args: ToolArgs) => string | undefined>
write_to_file: (args) => getWriteToFileDescription(args),
search_files: (args) => getSearchFilesDescription(args),
list_files: (args) => getListFilesDescription(args),
list_code_definition_names: (args) => getListCodeDefinitionNamesDescription(args),
browser_action: (args) => getBrowserActionDescription(args),
ask_followup_question: () => getAskFollowupQuestionDescription(),
attempt_completion: (args) => getAttemptCompletionDescription(args),
@ -166,7 +164,6 @@ export {
getWriteToFileDescription,
getSearchFilesDescription,
getListFilesDescription,
getListCodeDefinitionNamesDescription,
getBrowserActionDescription,
getAskFollowupQuestionDescription,
getAttemptCompletionDescription,

View file

@ -1,24 +0,0 @@
import { ToolArgs } from "./types"
export function getListCodeDefinitionNamesDescription(args: ToolArgs): string {
return `## list_code_definition_names
Description: Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory ${args.cwd}) to analyze. When given a directory, it lists definitions from all top-level source files.
Usage:
<list_code_definition_names>
<path>Directory path here</path>
</list_code_definition_names>
Examples:
1. List definitions from a specific file:
<list_code_definition_names>
<path>src/main.ts</path>
</list_code_definition_names>
2. List definitions from all files in a directory:
<list_code_definition_names>
<path>src/</path>
</list_code_definition_names>`
}

View file

@ -9,7 +9,6 @@ import codebaseSearch from "./codebase_search"
import executeCommand from "./execute_command"
import fetchInstructions from "./fetch_instructions"
import generateImage from "./generate_image"
import listCodeDefinitionNames from "./list_code_definition_names"
import listFiles from "./list_files"
import newTask from "./new_task"
import { createReadFileTool } from "./read_file"
@ -42,7 +41,6 @@ export function getNativeTools(partialReadsEnabled: boolean = true): OpenAI.Chat
executeCommand,
fetchInstructions,
generateImage,
listCodeDefinitionNames,
listFiles,
newTask,
createReadFileTool(partialReadsEnabled),

View file

@ -1,36 +0,0 @@
import type OpenAI from "openai"
const LIST_CODE_DEFINITION_NAMES_DESCRIPTION = `Request to list definition names (classes, functions, methods, etc.) from source code. This tool can analyze either a single file or all files at the top level of a specified directory. It provides insights into the codebase structure and important constructs, encapsulating high-level concepts and relationships that are crucial for understanding the overall architecture.
Parameters:
- path: (required) The path of the file or directory (relative to the current working directory) to analyze. When given a directory, it lists definitions from all top-level source files.
Examples:
1. List definitions from a specific file:
{ "path": "src/main.ts" }
2. List definitions from all files in a directory:
{ "path": "src/" }`
const PATH_PARAMETER_DESCRIPTION = `Path to the file or directory to analyze, relative to the workspace`
export default {
type: "function",
function: {
name: "list_code_definition_names",
description: LIST_CODE_DEFINITION_NAMES_DESCRIPTION,
strict: true,
parameters: {
type: "object",
properties: {
path: {
type: "string",
description: PATH_PARAMETER_DESCRIPTION,
},
},
required: ["path"],
additionalProperties: false,
},
},
} satisfies OpenAI.Chat.ChatCompletionTool

View file

@ -1,108 +0,0 @@
import path from "path"
import fs from "fs/promises"
import { Task } from "../task/Task"
import { ClineSayTool } from "../../shared/ExtensionMessage"
import { getReadablePath } from "../../utils/path"
import { isPathOutsideWorkspace } from "../../utils/pathUtils"
import { parseSourceCodeForDefinitionsTopLevel, parseSourceCodeDefinitionsForFile } from "../../services/tree-sitter"
import { RecordSource } from "../context-tracking/FileContextTrackerTypes"
import { truncateDefinitionsToLineLimit } from "./helpers/truncateDefinitions"
import { BaseTool, ToolCallbacks } from "./BaseTool"
import type { ToolUse } from "../../shared/tools"
interface ListCodeDefinitionNamesParams {
path: string
}
export class ListCodeDefinitionNamesTool extends BaseTool<"list_code_definition_names"> {
readonly name = "list_code_definition_names" as const
parseLegacy(params: Partial<Record<string, string>>): ListCodeDefinitionNamesParams {
return {
path: params.path || "",
}
}
async execute(params: ListCodeDefinitionNamesParams, task: Task, callbacks: ToolCallbacks): Promise<void> {
const { askApproval, handleError, pushToolResult } = callbacks
const { path: relPath } = params
if (!relPath) {
task.consecutiveMistakeCount++
task.recordToolError("list_code_definition_names")
task.didToolFailInCurrentTurn = true
pushToolResult(await task.sayAndCreateMissingParamError("list_code_definition_names", "path"))
return
}
task.consecutiveMistakeCount = 0
const absolutePath = path.resolve(task.cwd, relPath)
const isOutsideWorkspace = isPathOutsideWorkspace(absolutePath)
const sharedMessageProps: ClineSayTool = {
tool: "listCodeDefinitionNames",
path: getReadablePath(task.cwd, relPath),
isOutsideWorkspace,
}
try {
let result: string
try {
const stats = await fs.stat(absolutePath)
if (stats.isFile()) {
const fileResult = await parseSourceCodeDefinitionsForFile(absolutePath, task.rooIgnoreController)
if (fileResult) {
const { maxReadFileLine = -1 } = (await task.providerRef.deref()?.getState()) ?? {}
result = truncateDefinitionsToLineLimit(fileResult, maxReadFileLine)
} else {
result = "No source code definitions found in file."
}
} else if (stats.isDirectory()) {
result = await parseSourceCodeForDefinitionsTopLevel(absolutePath, task.rooIgnoreController)
} else {
result = "The specified path is neither a file nor a directory."
}
} catch {
result = `${absolutePath}: does not exist or cannot be accessed.`
}
const completeMessage = JSON.stringify({ ...sharedMessageProps, content: result } satisfies ClineSayTool)
const didApprove = await askApproval("tool", completeMessage)
if (!didApprove) {
return
}
if (relPath) {
await task.fileContextTracker.trackFileContext(relPath, "read_tool" as RecordSource)
}
pushToolResult(result)
} catch (error) {
await handleError("parsing source code definitions", error as Error)
}
}
override async handlePartial(task: Task, block: ToolUse<"list_code_definition_names">): Promise<void> {
const relPath: string | undefined = block.params.path
const absolutePath = relPath ? path.resolve(task.cwd, relPath) : task.cwd
const isOutsideWorkspace = isPathOutsideWorkspace(absolutePath)
const sharedMessageProps: ClineSayTool = {
tool: "listCodeDefinitionNames",
path: getReadablePath(task.cwd, relPath || ""),
isOutsideWorkspace,
}
const partialMessage = JSON.stringify({ ...sharedMessageProps, content: "" } satisfies ClineSayTool)
await task.ask("tool", partialMessage, block.partial).catch(() => {})
}
}
export const listCodeDefinitionNamesTool = new ListCodeDefinitionNamesTool()

View file

@ -1,343 +0,0 @@
// npx vitest src/core/tools/__tests__/listCodeDefinitionNamesTool.spec.ts
import { describe, it, expect, vi, beforeEach } from "vitest"
import { listCodeDefinitionNamesTool } from "../ListCodeDefinitionNamesTool"
import { Task } from "../../task/Task"
import { ToolUse } from "../../../shared/tools"
import * as treeSitter from "../../../services/tree-sitter"
import fs from "fs/promises"
// Mock the tree-sitter service
vi.mock("../../../services/tree-sitter", () => ({
parseSourceCodeDefinitionsForFile: vi.fn(),
parseSourceCodeForDefinitionsTopLevel: vi.fn(),
}))
// Mock fs module
vi.mock("fs/promises", () => ({
default: {
stat: vi.fn(),
},
}))
describe("listCodeDefinitionNamesTool", () => {
let mockTask: Partial<Task>
let mockAskApproval: any
let mockHandleError: any
let mockPushToolResult: any
let mockRemoveClosingTag: any
beforeEach(() => {
vi.clearAllMocks()
mockTask = {
cwd: "/test/path",
consecutiveMistakeCount: 0,
recordToolError: vi.fn(),
sayAndCreateMissingParamError: vi.fn(),
ask: vi.fn(),
fileContextTracker: {
trackFileContext: vi.fn(),
},
providerRef: {
deref: vi.fn(() => ({
getState: vi.fn(async () => ({ maxReadFileLine: -1 })),
})),
},
rooIgnoreController: undefined,
} as any
mockAskApproval = vi.fn(async () => true)
mockHandleError = vi.fn()
mockPushToolResult = vi.fn()
mockRemoveClosingTag = vi.fn((tag: string, value: string) => value)
})
describe("truncateDefinitionsToLineLimit", () => {
it("should not truncate when maxReadFileLine is -1 (no limit)", async () => {
const mockDefinitions = `# test.ts
10--20 | function foo() {
30--40 | function bar() {
50--60 | function baz() {`
vi.mocked(treeSitter.parseSourceCodeDefinitionsForFile).mockResolvedValue(mockDefinitions)
vi.mocked(fs.stat).mockResolvedValue({
isFile: () => true,
isDirectory: () => false,
} as any)
mockTask.providerRef = {
deref: vi.fn(() => ({
getState: vi.fn(async () => ({ maxReadFileLine: -1 })),
})),
} as any
const block: ToolUse = {
type: "tool_use",
name: "list_code_definition_names",
params: { path: "test.ts" },
partial: false,
}
await listCodeDefinitionNamesTool.handle(mockTask as Task, block as ToolUse<"list_code_definition_names">, {
askApproval: mockAskApproval,
handleError: mockHandleError,
pushToolResult: mockPushToolResult,
removeClosingTag: mockRemoveClosingTag,
toolProtocol: "xml",
})
expect(mockPushToolResult).toHaveBeenCalledWith(mockDefinitions)
})
it("should not truncate when maxReadFileLine is 0 (definitions only mode)", async () => {
const mockDefinitions = `# test.ts
10--20 | function foo() {
30--40 | function bar() {
50--60 | function baz() {`
vi.mocked(treeSitter.parseSourceCodeDefinitionsForFile).mockResolvedValue(mockDefinitions)
vi.mocked(fs.stat).mockResolvedValue({
isFile: () => true,
isDirectory: () => false,
} as any)
mockTask.providerRef = {
deref: vi.fn(() => ({
getState: vi.fn(async () => ({ maxReadFileLine: 0 })),
})),
} as any
const block: ToolUse = {
type: "tool_use",
name: "list_code_definition_names",
params: { path: "test.ts" },
partial: false,
}
await listCodeDefinitionNamesTool.handle(mockTask as Task, block as ToolUse<"list_code_definition_names">, {
askApproval: mockAskApproval,
handleError: mockHandleError,
pushToolResult: mockPushToolResult,
removeClosingTag: mockRemoveClosingTag,
toolProtocol: "xml",
})
expect(mockPushToolResult).toHaveBeenCalledWith(mockDefinitions)
})
it("should truncate definitions when maxReadFileLine is set", async () => {
const mockDefinitions = `# test.ts
10--20 | function foo() {
30--40 | function bar() {
50--60 | function baz() {`
vi.mocked(treeSitter.parseSourceCodeDefinitionsForFile).mockResolvedValue(mockDefinitions)
vi.mocked(fs.stat).mockResolvedValue({
isFile: () => true,
isDirectory: () => false,
} as any)
mockTask.providerRef = {
deref: vi.fn(() => ({
getState: vi.fn(async () => ({ maxReadFileLine: 25 })),
})),
} as any
const block: ToolUse = {
type: "tool_use",
name: "list_code_definition_names",
params: { path: "test.ts" },
partial: false,
}
await listCodeDefinitionNamesTool.handle(mockTask as Task, block as ToolUse<"list_code_definition_names">, {
askApproval: mockAskApproval,
handleError: mockHandleError,
pushToolResult: mockPushToolResult,
removeClosingTag: mockRemoveClosingTag,
toolProtocol: "xml",
})
// Should only include definitions starting at or before line 25
const expectedResult = `# test.ts
10--20 | function foo() {`
expect(mockPushToolResult).toHaveBeenCalledWith(expectedResult)
})
it("should include definitions that start within limit even if they end beyond it", async () => {
const mockDefinitions = `# test.ts
10--50 | function foo() {
60--80 | function bar() {`
vi.mocked(treeSitter.parseSourceCodeDefinitionsForFile).mockResolvedValue(mockDefinitions)
vi.mocked(fs.stat).mockResolvedValue({
isFile: () => true,
isDirectory: () => false,
} as any)
mockTask.providerRef = {
deref: vi.fn(() => ({
getState: vi.fn(async () => ({ maxReadFileLine: 30 })),
})),
} as any
const block: ToolUse = {
type: "tool_use",
name: "list_code_definition_names",
params: { path: "test.ts" },
partial: false,
}
await listCodeDefinitionNamesTool.handle(mockTask as Task, block as ToolUse<"list_code_definition_names">, {
askApproval: mockAskApproval,
handleError: mockHandleError,
pushToolResult: mockPushToolResult,
removeClosingTag: mockRemoveClosingTag,
toolProtocol: "xml",
})
// Should include foo (starts at 10) but not bar (starts at 60)
const expectedResult = `# test.ts
10--50 | function foo() {`
expect(mockPushToolResult).toHaveBeenCalledWith(expectedResult)
})
it("should handle single-line definitions", async () => {
const mockDefinitions = `# test.ts
10 | const foo = 1
20 | const bar = 2
30 | const baz = 3`
vi.mocked(treeSitter.parseSourceCodeDefinitionsForFile).mockResolvedValue(mockDefinitions)
vi.mocked(fs.stat).mockResolvedValue({
isFile: () => true,
isDirectory: () => false,
} as any)
mockTask.providerRef = {
deref: vi.fn(() => ({
getState: vi.fn(async () => ({ maxReadFileLine: 25 })),
})),
} as any
const block: ToolUse = {
type: "tool_use",
name: "list_code_definition_names",
params: { path: "test.ts" },
partial: false,
}
await listCodeDefinitionNamesTool.handle(mockTask as Task, block as ToolUse<"list_code_definition_names">, {
askApproval: mockAskApproval,
handleError: mockHandleError,
pushToolResult: mockPushToolResult,
removeClosingTag: mockRemoveClosingTag,
toolProtocol: "xml",
})
// Should include foo and bar but not baz
const expectedResult = `# test.ts
10 | const foo = 1
20 | const bar = 2`
expect(mockPushToolResult).toHaveBeenCalledWith(expectedResult)
})
it("should preserve header line when truncating", async () => {
const mockDefinitions = `# test.ts
100--200 | function foo() {`
vi.mocked(treeSitter.parseSourceCodeDefinitionsForFile).mockResolvedValue(mockDefinitions)
vi.mocked(fs.stat).mockResolvedValue({
isFile: () => true,
isDirectory: () => false,
} as any)
mockTask.providerRef = {
deref: vi.fn(() => ({
getState: vi.fn(async () => ({ maxReadFileLine: 50 })),
})),
} as any
const block: ToolUse = {
type: "tool_use",
name: "list_code_definition_names",
params: { path: "test.ts" },
partial: false,
}
await listCodeDefinitionNamesTool.handle(mockTask as Task, block as ToolUse<"list_code_definition_names">, {
askApproval: mockAskApproval,
handleError: mockHandleError,
pushToolResult: mockPushToolResult,
removeClosingTag: mockRemoveClosingTag,
toolProtocol: "xml",
})
// Should keep header but exclude all definitions beyond line 50
const expectedResult = `# test.ts`
expect(mockPushToolResult).toHaveBeenCalledWith(expectedResult)
})
})
it("should handle missing path parameter", async () => {
const block: ToolUse = {
type: "tool_use",
name: "list_code_definition_names",
params: {},
partial: false,
}
mockTask.sayAndCreateMissingParamError = vi.fn(async () => "Missing parameter: path")
await listCodeDefinitionNamesTool.handle(mockTask as Task, block as ToolUse<"list_code_definition_names">, {
askApproval: mockAskApproval,
handleError: mockHandleError,
pushToolResult: mockPushToolResult,
removeClosingTag: mockRemoveClosingTag,
toolProtocol: "xml",
})
expect(mockTask.consecutiveMistakeCount).toBe(1)
expect(mockTask.recordToolError).toHaveBeenCalledWith("list_code_definition_names")
expect(mockPushToolResult).toHaveBeenCalledWith("Missing parameter: path")
})
it("should handle directory path", async () => {
const mockDefinitions = "# Directory definitions"
vi.mocked(treeSitter.parseSourceCodeForDefinitionsTopLevel).mockResolvedValue(mockDefinitions)
vi.mocked(fs.stat).mockResolvedValue({
isFile: () => false,
isDirectory: () => true,
} as any)
const block: ToolUse = {
type: "tool_use",
name: "list_code_definition_names",
params: { path: "src" },
partial: false,
}
await listCodeDefinitionNamesTool.handle(mockTask as Task, block as ToolUse<"list_code_definition_names">, {
askApproval: mockAskApproval,
handleError: mockHandleError,
pushToolResult: mockPushToolResult,
removeClosingTag: mockRemoveClosingTag,
toolProtocol: "xml",
})
expect(mockPushToolResult).toHaveBeenCalledWith(mockDefinitions)
})
})

View file

@ -9,8 +9,6 @@ import { parseSourceCodeDefinitionsForFile } from "../../../services/tree-sitter
import { isBinaryFile } from "isbinaryfile"
import { ReadFileToolUse, ToolParamName, ToolResponse } from "../../../shared/tools"
import { readFileTool } from "../ReadFileTool"
import { formatResponse } from "../../prompts/responses"
import { DEFAULT_MAX_IMAGE_FILE_SIZE_MB, DEFAULT_MAX_TOTAL_IMAGE_SIZE_MB } from "../helpers/imageHelpers"
vi.mock("path", async () => {
const originalPath = await vi.importActual("path")

View file

@ -1,443 +0,0 @@
import * as fs from "fs/promises"
import type { Mock } from "vitest"
import { parseSourceCodeForDefinitionsTopLevel } from "../index"
import { listFiles } from "../../glob/list-files"
import { loadRequiredLanguageParsers } from "../languageParser"
import { fileExistsAtPath } from "../../../utils/fs"
// Mock dependencies
vi.mock("../../glob/list-files")
vi.mock("../languageParser")
vi.mock("../../../utils/fs")
vi.mock("fs/promises")
describe("Tree-sitter Service", () => {
beforeEach(() => {
vi.clearAllMocks()
;(fileExistsAtPath as Mock).mockResolvedValue(true)
})
describe("parseSourceCodeForDefinitionsTopLevel", () => {
it("should handle non-existent directory", async () => {
;(fileExistsAtPath as Mock).mockResolvedValue(false)
const result = await parseSourceCodeForDefinitionsTopLevel("/non/existent/path")
expect(result).toBe("This directory does not exist or you do not have permission to access it.")
})
it("should handle empty directory", async () => {
;(listFiles as Mock).mockResolvedValue([[], new Set()])
const result = await parseSourceCodeForDefinitionsTopLevel("/test/path")
expect(result).toBe("No source code definitions found.")
})
it("should parse TypeScript files correctly", async () => {
const mockFiles = ["/test/path/file1.ts", "/test/path/file2.tsx", "/test/path/readme.md"]
;(listFiles as Mock).mockResolvedValue([mockFiles, new Set()])
const mockParser = {
parse: vi.fn().mockReturnValue({
rootNode: "mockNode",
}),
}
const mockQuery = {
captures: vi.fn().mockReturnValue([
{
// Must span 4 lines to meet MIN_COMPONENT_LINES
node: {
startPosition: { row: 0 },
endPosition: { row: 3 },
parent: {
startPosition: { row: 0 },
endPosition: { row: 3 },
},
text: () => "export class TestClass",
},
name: "name.definition",
},
]),
}
;(loadRequiredLanguageParsers as Mock).mockResolvedValue({
ts: { parser: mockParser, query: mockQuery },
tsx: { parser: mockParser, query: mockQuery },
})
;(fs.readFile as Mock).mockResolvedValue("export class TestClass {\n constructor() {}\n}")
const result = await parseSourceCodeForDefinitionsTopLevel("/test/path")
expect(result).toContain("file1.ts")
expect(result).toContain("file2.tsx")
expect(result).not.toContain("readme.md")
expect(result).toContain("export class TestClass")
})
it("should handle multiple definition types", async () => {
const mockFiles = ["/test/path/file.ts"]
;(listFiles as Mock).mockResolvedValue([mockFiles, new Set()])
const mockParser = {
parse: vi.fn().mockReturnValue({
rootNode: "mockNode",
}),
}
const mockQuery = {
captures: vi.fn().mockReturnValue([
{
node: {
startPosition: { row: 0 },
endPosition: { row: 3 },
parent: {
startPosition: { row: 0 },
endPosition: { row: 3 },
},
text: () => "class TestClass",
},
name: "name.definition.class",
},
{
node: {
startPosition: { row: 2 },
endPosition: { row: 5 },
parent: {
startPosition: { row: 2 },
endPosition: { row: 5 },
},
text: () => "testMethod()",
},
name: "name.definition.function",
},
]),
}
;(loadRequiredLanguageParsers as Mock).mockResolvedValue({
ts: { parser: mockParser, query: mockQuery },
})
const fileContent = "class TestClass {\n" + " constructor() {}\n" + " testMethod() {}\n" + "}"
;(fs.readFile as Mock).mockResolvedValue(fileContent)
const result = await parseSourceCodeForDefinitionsTopLevel("/test/path")
expect(result).toContain("class TestClass")
expect(result).toContain("testMethod()")
})
it("should handle parsing errors gracefully", async () => {
const mockFiles = ["/test/path/file.ts"]
;(listFiles as Mock).mockResolvedValue([mockFiles, new Set()])
const mockParser = {
parse: vi.fn().mockImplementation(() => {
throw new Error("Parsing error")
}),
}
const mockQuery = {
captures: vi.fn(),
}
;(loadRequiredLanguageParsers as Mock).mockResolvedValue({
ts: { parser: mockParser, query: mockQuery },
})
;(fs.readFile as Mock).mockResolvedValue("invalid code")
const result = await parseSourceCodeForDefinitionsTopLevel("/test/path")
expect(result).toBe("No source code definitions found.")
})
it("should capture arrow functions in JSX attributes with 4+ lines", async () => {
const mockFiles = ["/test/path/jsx-arrow.tsx"]
;(listFiles as Mock).mockResolvedValue([mockFiles, new Set()])
// Embed the fixture content directly
const fixtureContent = `import React from 'react';
export const CheckboxExample = () => (
<VSCodeCheckbox
checked={isCustomTemperature}
onChange={(e: any) => {
const isChecked = e.target.checked
setIsCustomTemperature(isChecked)
if (!isChecked) {
setInputValue(null) // Unset the temperature
} else {
setInputValue(value ?? 0) // Use value from config
}
}}>
<label className="block font-medium mb-1">
{t("settings:temperature.useCustom")}
</label>
</VSCodeCheckbox>
);`
;(fs.readFile as Mock).mockResolvedValue(fixtureContent)
const lines = fixtureContent.split("\n")
// Define the node type for proper TypeScript support
interface TreeNode {
type?: string
toString?: () => string
text?: () => string
startPosition?: { row: number }
endPosition?: { row: number }
children?: TreeNode[]
fields?: () => Record<string, any>
printTree?: (depth?: number) => string
}
// Create a more detailed mock rootNode for debugging Tree-sitter structure
// Helper function to print tree nodes
const printTree = (node: TreeNode, depth = 0): string => {
let result = ""
const indent = " ".repeat(depth)
// Print node details
result += `${indent}Type: ${node.type || "ROOT"}\n`
result += `${indent}Text: "${node.text ? node.text() : "root"}"`
// Print fields if available
if (node.fields) {
result += "\n" + indent + "Fields: " + JSON.stringify(node.fields(), null, 2)
}
// Print children recursively
if (node.children && node.children.length > 0) {
result += "\n" + indent + "Children:"
for (const child of node.children) {
result += "\n" + printTree(child, depth + 1)
}
}
return result
}
const mockRootNode: TreeNode = {
toString: () => fixtureContent,
text: () => fixtureContent,
printTree: function (depth = 0) {
return printTree(this, depth)
},
children: [
{
type: "class_declaration",
text: () => "class TestComponent extends React.Component",
startPosition: { row: 0 },
endPosition: { row: 20 },
printTree: function (depth = 0) {
return printTree(this, depth)
},
children: [
{
type: "type_identifier",
text: () => "TestComponent",
printTree: function (depth = 0) {
return printTree(this, depth)
},
},
{
type: "extends_clause",
text: () => "extends React.Component",
printTree: function (depth = 0) {
return printTree(this, depth)
},
children: [
{
type: "generic_type",
text: () => "React.Component",
children: [{ type: "member_expression", text: () => "React.Component" }],
},
],
},
],
// Debug output to see field names
fields: () => {
return {
name: [{ type: "type_identifier", text: () => "TestComponent" }],
class_heritage: [{ type: "extends_clause", text: () => "extends React.Component" }],
}
},
},
],
}
const mockParser = {
parse: vi.fn().mockReturnValue({
rootNode: mockRootNode,
}),
}
const mockQuery = {
captures: vi.fn().mockImplementation(() => {
// Log tree structure for debugging
console.log("TREE STRUCTURE:")
if (mockRootNode.printTree) {
console.log(mockRootNode.printTree())
} else {
console.log("Tree structure:", JSON.stringify(mockRootNode, null, 2))
}
return [
{
node: {
startPosition: { row: 4 },
endPosition: { row: 14 },
text: () => lines[4],
parent: {
startPosition: { row: 4 },
endPosition: { row: 14 },
text: () => lines[4],
},
},
name: "definition.lambda",
},
]
}),
}
;(loadRequiredLanguageParsers as Mock).mockResolvedValue({
tsx: { parser: mockParser, query: mockQuery },
})
const result = await parseSourceCodeForDefinitionsTopLevel("/test/path")
// Verify function found and correctly parsed
expect(result).toContain("jsx-arrow.tsx")
expect(result).toContain("5--15 |")
// Verify line count
const capture = mockQuery.captures.mock.results[0].value[0]
expect(capture.node.endPosition.row - capture.node.startPosition.row).toBeGreaterThanOrEqual(4)
})
it("should respect file limit", async () => {
const mockFiles = Array(100)
.fill(0)
.map((_, i) => `/test/path/file${i}.ts`)
;(listFiles as Mock).mockResolvedValue([mockFiles, new Set()])
const mockParser = {
parse: vi.fn().mockReturnValue({
rootNode: "mockNode",
}),
}
const mockQuery = {
captures: vi.fn().mockReturnValue([]),
}
;(loadRequiredLanguageParsers as Mock).mockResolvedValue({
ts: { parser: mockParser, query: mockQuery },
})
await parseSourceCodeForDefinitionsTopLevel("/test/path")
// Should only process first 50 files
expect(mockParser.parse).toHaveBeenCalledTimes(50)
})
it("should handle various supported file extensions", async () => {
const mockFiles = [
"/test/path/script.js",
"/test/path/app.py",
"/test/path/main.rs",
"/test/path/program.cpp",
"/test/path/code.go",
"/test/path/app.kt",
"/test/path/script.kts",
]
;(listFiles as Mock).mockResolvedValue([mockFiles, new Set()])
const mockParser = {
parse: vi.fn().mockReturnValue({
rootNode: "mockNode",
}),
}
const mockQuery = {
captures: vi.fn().mockReturnValue([
{
node: {
startPosition: { row: 0 },
endPosition: { row: 3 },
parent: {
startPosition: { row: 0 },
endPosition: { row: 3 },
},
text: () => "function test() {}",
},
name: "name",
},
]),
}
;(loadRequiredLanguageParsers as Mock).mockResolvedValue({
js: { parser: mockParser, query: mockQuery },
py: { parser: mockParser, query: mockQuery },
rs: { parser: mockParser, query: mockQuery },
cpp: { parser: mockParser, query: mockQuery },
go: { parser: mockParser, query: mockQuery },
kt: { parser: mockParser, query: mockQuery },
kts: { parser: mockParser, query: mockQuery },
})
;(fs.readFile as Mock).mockResolvedValue("function test() {}")
const result = await parseSourceCodeForDefinitionsTopLevel("/test/path")
expect(result).toContain("script.js")
expect(result).toContain("app.py")
expect(result).toContain("main.rs")
expect(result).toContain("program.cpp")
expect(result).toContain("code.go")
expect(result).toContain("app.kt")
expect(result).toContain("script.kts")
})
it("should normalize paths in output", async () => {
const mockFiles = ["/test/path/dir\\file.ts"]
;(listFiles as Mock).mockResolvedValue([mockFiles, new Set()])
const mockParser = {
parse: vi.fn().mockReturnValue({
rootNode: "mockNode",
}),
}
const mockQuery = {
captures: vi.fn().mockReturnValue([
{
node: {
startPosition: { row: 0 },
endPosition: { row: 3 },
parent: {
startPosition: { row: 0 },
endPosition: { row: 3 },
},
text: () => "class Test {}",
},
name: "name",
},
]),
}
;(loadRequiredLanguageParsers as Mock).mockResolvedValue({
ts: { parser: mockParser, query: mockQuery },
})
;(fs.readFile as Mock).mockResolvedValue("class Test {}")
const result = await parseSourceCodeForDefinitionsTopLevel("/test/path")
// Should use forward slashes regardless of platform
expect(result).toContain("dir/file.ts")
expect(result).not.toContain("dir\\file.ts")
})
})
})

View file

@ -1,6 +1,5 @@
import * as fs from "fs/promises"
import * as path from "path"
import { listFiles } from "../glob/list-files"
import { LanguageParser, loadRequiredLanguageParsers } from "./languageParser"
import { fileExistsAtPath } from "../../utils/fs"
import { parseMarkdown } from "./markdownParser"
@ -149,89 +148,6 @@ export async function parseSourceCodeDefinitionsForFile(
return undefined
}
// TODO: implement caching behavior to avoid having to keep analyzing project for new tasks.
export async function parseSourceCodeForDefinitionsTopLevel(
dirPath: string,
rooIgnoreController?: RooIgnoreController,
): Promise<string> {
// check if the path exists
const dirExists = await fileExistsAtPath(path.resolve(dirPath))
if (!dirExists) {
return "This directory does not exist or you do not have permission to access it."
}
// Get all files at top level (not gitignored)
const [allFiles, _] = await listFiles(dirPath, false, 200)
let result = ""
// Separate files to parse and remaining files
const { filesToParse } = separateFiles(allFiles)
// Filter filepaths for access if controller is provided
const allowedFilesToParse = rooIgnoreController ? rooIgnoreController.filterPaths(filesToParse) : filesToParse
// Separate markdown files from other files
const markdownFiles: string[] = []
const otherFiles: string[] = []
for (const file of allowedFilesToParse) {
const ext = path.extname(file).toLowerCase()
if (ext === ".md" || ext === ".markdown") {
markdownFiles.push(file)
} else {
otherFiles.push(file)
}
}
// Load language parsers only for non-markdown files
const languageParsers = await loadRequiredLanguageParsers(otherFiles)
// Process markdown files
for (const file of markdownFiles) {
// Check if we have permission to access this file
if (rooIgnoreController && !rooIgnoreController.validateAccess(file)) {
continue
}
try {
// Read file content
const fileContent = await fs.readFile(file, "utf8")
// Split the file content into individual lines
const lines = fileContent.split("\n")
// Parse markdown content to get captures
const markdownCaptures = parseMarkdown(fileContent)
// Process the captures
const markdownDefinitions = processCaptures(markdownCaptures, lines, "markdown")
if (markdownDefinitions) {
result += `# ${path.relative(dirPath, file).toPosix()}\n${markdownDefinitions}\n`
}
} catch (error) {
console.log(`Error parsing markdown file: ${error}\n`)
}
}
// Process other files using tree-sitter
for (const file of otherFiles) {
const definitions = await parseFile(file, languageParsers, rooIgnoreController)
if (definitions) {
result += `# ${path.relative(dirPath, file).toPosix()}\n${definitions}\n`
}
}
return result ? result : "No source code definitions found."
}
function separateFiles(allFiles: string[]): { filesToParse: string[]; remainingFiles: string[] } {
const filesToParse = allFiles.filter((file) => extensions.includes(path.extname(file))).slice(0, 50) // 50 files max
const remainingFiles = allFiles.filter((file) => !filesToParse.includes(file))
return { filesToParse, remainingFiles }
}
/*
Parsing files using tree-sitter

View file

@ -371,7 +371,6 @@ export interface ClineSayTool {
| "fetchInstructions"
| "listFilesTopLevel"
| "listFilesRecursive"
| "listCodeDefinitionNames"
| "searchFiles"
| "switchMode"
| "newTask"

View file

@ -102,7 +102,6 @@ export type NativeToolArgs = {
codebase_search: { query: string; path?: string }
fetch_instructions: { task: string }
generate_image: GenerateImageParams
list_code_definition_names: { path: string }
run_slash_command: { command: string; args?: string }
search_files: { path: string; regex: string; file_pattern?: string | null }
switch_mode: { mode_slug: string; reason: string }
@ -184,11 +183,6 @@ export interface ListFilesToolUse extends ToolUse<"list_files"> {
params: Partial<Pick<Record<ToolParamName, string>, "path" | "recursive">>
}
export interface ListCodeDefinitionNamesToolUse extends ToolUse<"list_code_definition_names"> {
name: "list_code_definition_names"
params: Partial<Pick<Record<ToolParamName, string>, "path">>
}
export interface BrowserActionToolUse extends ToolUse<"browser_action"> {
name: "browser_action"
params: Partial<Pick<Record<ToolParamName, string>, "action" | "url" | "coordinate" | "text" | "size" | "path">>
@ -252,7 +246,6 @@ export const TOOL_DISPLAY_NAMES: Record<ToolName, string> = {
apply_patch: "apply patches using codex format",
search_files: "search files",
list_files: "list files",
list_code_definition_names: "list definitions",
browser_action: "use a browser",
use_mcp_tool: "use mcp tools",
access_mcp_resource: "access mcp resources",
@ -269,14 +262,7 @@ export const TOOL_DISPLAY_NAMES: Record<ToolName, string> = {
// Define available tool groups.
export const TOOL_GROUPS: Record<ToolGroup, ToolGroupConfig> = {
read: {
tools: [
"read_file",
"fetch_instructions",
"search_files",
"list_files",
"list_code_definition_names",
"codebase_search",
],
tools: ["read_file", "fetch_instructions", "search_files", "list_files", "codebase_search"],
},
edit: {
tools: ["apply_diff", "write_to_file", "generate_image"],

View file

@ -706,32 +706,6 @@ export const ChatRowContent = ({
</div>
</>
)
case "listCodeDefinitionNames":
return (
<>
<div style={headerStyle}>
{toolIcon("file-code")}
<span style={{ fontWeight: "bold" }}>
{message.type === "ask"
? tool.isOutsideWorkspace
? t("chat:directoryOperations.wantsToViewDefinitionsOutsideWorkspace")
: t("chat:directoryOperations.wantsToViewDefinitions")
: tool.isOutsideWorkspace
? t("chat:directoryOperations.didViewDefinitionsOutsideWorkspace")
: t("chat:directoryOperations.didViewDefinitions")}
</span>
</div>
<div className="pl-6">
<CodeAccordian
path={tool.path}
code={tool.content}
language="markdown"
isExpanded={isExpanded}
onToggleExpand={handleToggleExpand}
/>
</div>
</>
)
case "searchFiles":
return (
<>

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Roo ha vist els fitxers de nivell superior en aquest directori",
"wantsToViewRecursive": "Roo vol veure recursivament tots els fitxers en aquest directori",
"didViewRecursive": "Roo ha vist recursivament tots els fitxers en aquest directori",
"wantsToViewDefinitions": "Roo vol veure noms de definicions de codi font utilitzats en aquest directori",
"didViewDefinitions": "Roo ha vist noms de definicions de codi font utilitzats en aquest directori",
"wantsToSearch": "Roo vol cercar en aquest directori <code>{{regex}}</code>",
"didSearch": "Roo ha cercat en aquest directori <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo vol cercar en aquest directori (fora de l'espai de treball) <code>{{regex}}</code>",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo vol veure els fitxers de nivell superior en aquest directori (fora de l'espai de treball)",
"didViewTopLevelOutsideWorkspace": "Roo ha vist els fitxers de nivell superior en aquest directori (fora de l'espai de treball)",
"wantsToViewRecursiveOutsideWorkspace": "Roo vol veure recursivament tots els fitxers en aquest directori (fora de l'espai de treball)",
"didViewRecursiveOutsideWorkspace": "Roo ha vist recursivament tots els fitxers en aquest directori (fora de l'espai de treball)",
"wantsToViewDefinitionsOutsideWorkspace": "Roo vol veure noms de definicions de codi font utilitzats en aquest directori (fora de l'espai de treball)",
"didViewDefinitionsOutsideWorkspace": "Roo ha vist noms de definicions de codi font utilitzats en aquest directori (fora de l'espai de treball)"
"didViewRecursiveOutsideWorkspace": "Roo ha vist recursivament tots els fitxers en aquest directori (fora de l'espai de treball)"
},
"commandOutput": "Sortida de la comanda",
"commandExecution": {

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Roo hat die Dateien auf oberster Ebene in diesem Verzeichnis angezeigt",
"wantsToViewRecursive": "Roo möchte rekursiv alle Dateien in diesem Verzeichnis anzeigen",
"didViewRecursive": "Roo hat rekursiv alle Dateien in diesem Verzeichnis angezeigt",
"wantsToViewDefinitions": "Roo möchte Quellcode-Definitionsnamen in diesem Verzeichnis anzeigen",
"didViewDefinitions": "Roo hat Quellcode-Definitionsnamen in diesem Verzeichnis angezeigt",
"wantsToSearch": "Roo möchte dieses Verzeichnis nach <code>{{regex}}</code> durchsuchen",
"didSearch": "Roo hat dieses Verzeichnis nach <code>{{regex}}</code> durchsucht",
"wantsToSearchOutsideWorkspace": "Roo möchte dieses Verzeichnis (außerhalb des Arbeitsbereichs) nach <code>{{regex}}</code> durchsuchen",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo möchte die Dateien auf oberster Ebene in diesem Verzeichnis (außerhalb des Arbeitsbereichs) anzeigen",
"didViewTopLevelOutsideWorkspace": "Roo hat die Dateien auf oberster Ebene in diesem Verzeichnis (außerhalb des Arbeitsbereichs) angezeigt",
"wantsToViewRecursiveOutsideWorkspace": "Roo möchte rekursiv alle Dateien in diesem Verzeichnis (außerhalb des Arbeitsbereichs) anzeigen",
"didViewRecursiveOutsideWorkspace": "Roo hat rekursiv alle Dateien in diesem Verzeichnis (außerhalb des Arbeitsbereichs) angezeigt",
"wantsToViewDefinitionsOutsideWorkspace": "Roo möchte Quellcode-Definitionsnamen in diesem Verzeichnis (außerhalb des Arbeitsbereichs) anzeigen",
"didViewDefinitionsOutsideWorkspace": "Roo hat Quellcode-Definitionsnamen in diesem Verzeichnis (außerhalb des Arbeitsbereichs) angezeigt"
"didViewRecursiveOutsideWorkspace": "Roo hat rekursiv alle Dateien in diesem Verzeichnis (außerhalb des Arbeitsbereichs) angezeigt"
},
"commandOutput": "Befehlsausgabe",
"commandExecution": {

View file

@ -222,10 +222,6 @@
"didViewRecursive": "Roo recursively viewed all files in this directory",
"wantsToViewRecursiveOutsideWorkspace": "Roo wants to recursively view all files in this directory (outside workspace)",
"didViewRecursiveOutsideWorkspace": "Roo recursively viewed all files in this directory (outside workspace)",
"wantsToViewDefinitions": "Roo wants to view source code definition names used in this directory",
"didViewDefinitions": "Roo viewed source code definition names used in this directory",
"wantsToViewDefinitionsOutsideWorkspace": "Roo wants to view source code definition names used in this directory (outside workspace)",
"didViewDefinitionsOutsideWorkspace": "Roo viewed source code definition names used in this directory (outside workspace)",
"wantsToSearch": "Roo wants to search this directory for <code>{{regex}}</code>",
"didSearch": "Roo searched this directory for <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo wants to search this directory (outside workspace) for <code>{{regex}}</code>",

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Roo vio los archivos de nivel superior en este directorio",
"wantsToViewRecursive": "Roo quiere ver recursivamente todos los archivos en este directorio",
"didViewRecursive": "Roo vio recursivamente todos los archivos en este directorio",
"wantsToViewDefinitions": "Roo quiere ver nombres de definiciones de código fuente utilizados en este directorio",
"didViewDefinitions": "Roo vio nombres de definiciones de código fuente utilizados en este directorio",
"wantsToSearch": "Roo quiere buscar en este directorio <code>{{regex}}</code>",
"didSearch": "Roo buscó en este directorio <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo quiere buscar en este directorio (fuera del espacio de trabajo) <code>{{regex}}</code>",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo quiere ver los archivos de nivel superior en este directorio (fuera del espacio de trabajo)",
"didViewTopLevelOutsideWorkspace": "Roo vio los archivos de nivel superior en este directorio (fuera del espacio de trabajo)",
"wantsToViewRecursiveOutsideWorkspace": "Roo quiere ver recursivamente todos los archivos en este directorio (fuera del espacio de trabajo)",
"didViewRecursiveOutsideWorkspace": "Roo vio recursivamente todos los archivos en este directorio (fuera del espacio de trabajo)",
"wantsToViewDefinitionsOutsideWorkspace": "Roo quiere ver nombres de definiciones de código fuente utilizados en este directorio (fuera del espacio de trabajo)",
"didViewDefinitionsOutsideWorkspace": "Roo vio nombres de definiciones de código fuente utilizados en este directorio (fuera del espacio de trabajo)"
"didViewRecursiveOutsideWorkspace": "Roo vio recursivamente todos los archivos en este directorio (fuera del espacio de trabajo)"
},
"commandOutput": "Salida del comando",
"commandExecution": {

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Roo a vu les fichiers de premier niveau dans ce répertoire",
"wantsToViewRecursive": "Roo veut voir récursivement tous les fichiers dans ce répertoire",
"didViewRecursive": "Roo a vu récursivement tous les fichiers dans ce répertoire",
"wantsToViewDefinitions": "Roo veut voir les noms de définitions de code source utilisés dans ce répertoire",
"didViewDefinitions": "Roo a vu les noms de définitions de code source utilisés dans ce répertoire",
"wantsToSearch": "Roo veut rechercher dans ce répertoire <code>{{regex}}</code>",
"didSearch": "Roo a recherché dans ce répertoire <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo veut rechercher dans ce répertoire (hors espace de travail) <code>{{regex}}</code>",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo veut voir les fichiers de premier niveau dans ce répertoire (hors espace de travail)",
"didViewTopLevelOutsideWorkspace": "Roo a vu les fichiers de premier niveau dans ce répertoire (hors espace de travail)",
"wantsToViewRecursiveOutsideWorkspace": "Roo veut voir récursivement tous les fichiers dans ce répertoire (hors espace de travail)",
"didViewRecursiveOutsideWorkspace": "Roo a vu récursivement tous les fichiers dans ce répertoire (hors espace de travail)",
"wantsToViewDefinitionsOutsideWorkspace": "Roo veut voir les noms de définitions de code source utilisés dans ce répertoire (hors espace de travail)",
"didViewDefinitionsOutsideWorkspace": "Roo a vu les noms de définitions de code source utilisés dans ce répertoire (hors espace de travail)"
"didViewRecursiveOutsideWorkspace": "Roo a vu récursivement tous les fichiers dans ce répertoire (hors espace de travail)"
},
"commandOutput": "Sortie de la Commande",
"commandExecution": {

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Roo ने इस निर्देशिका में शीर्ष स्तर की फ़ाइलें देखीं",
"wantsToViewRecursive": "Roo इस निर्देशिका में सभी फ़ाइलों को पुनरावर्ती रूप से देखना चाहता है",
"didViewRecursive": "Roo ने इस निर्देशिका में सभी फ़ाइलों को पुनरावर्ती रूप से देखा",
"wantsToViewDefinitions": "Roo इस निर्देशिका में उपयोग किए गए सोर्स कोड परिभाषा नामों को देखना चाहता है",
"didViewDefinitions": "Roo ने इस निर्देशिका में उपयोग किए गए सोर्स कोड परिभाषा नामों को देखा",
"wantsToSearch": "Roo इस निर्देशिका में <code>{{regex}}</code> के लिए खोज करना चाहता है",
"didSearch": "Roo ने इस निर्देशिका में <code>{{regex}}</code> के लिए खोज की",
"wantsToSearchOutsideWorkspace": "Roo इस निर्देशिका (कार्यक्षेत्र के बाहर) में <code>{{regex}}</code> के लिए खोज करना चाहता है",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo इस निर्देशिका (कार्यक्षेत्र के बाहर) में शीर्ष स्तर की फ़ाइलें देखना चाहता है",
"didViewTopLevelOutsideWorkspace": "Roo ने इस निर्देशिका (कार्यक्षेत्र के बाहर) में शीर्ष स्तर की फ़ाइलें देखीं",
"wantsToViewRecursiveOutsideWorkspace": "Roo इस निर्देशिका (कार्यक्षेत्र के बाहर) में सभी फ़ाइलों को पुनरावर्ती रूप से देखना चाहता है",
"didViewRecursiveOutsideWorkspace": "Roo ने इस निर्देशिका (कार्यक्षेत्र के बाहर) में सभी फ़ाइलों को पुनरावर्ती रूप से देखा",
"wantsToViewDefinitionsOutsideWorkspace": "Roo इस निर्देशिका (कार्यक्षेत्र के बाहर) में उपयोग किए गए सोर्स कोड परिभाषा नामों को देखना चाहता है",
"didViewDefinitionsOutsideWorkspace": "Roo ने इस निर्देशिका (कार्यक्षेत्र के बाहर) में उपयोग किए गए सोर्स कोड परिभाषा नामों को देखा"
"didViewRecursiveOutsideWorkspace": "Roo ने इस निर्देशिका (कार्यक्षेत्र के बाहर) में सभी फ़ाइलों को पुनरावर्ती रूप से देखा"
},
"commandOutput": "कमांड आउटपुट",
"commandExecution": {

View file

@ -223,8 +223,6 @@
"didViewTopLevel": "Roo melihat file tingkat atas di direktori ini",
"wantsToViewRecursive": "Roo ingin melihat semua file secara rekursif di direktori ini",
"didViewRecursive": "Roo melihat semua file secara rekursif di direktori ini",
"wantsToViewDefinitions": "Roo ingin melihat nama definisi source code yang digunakan di direktori ini",
"didViewDefinitions": "Roo melihat nama definisi source code yang digunakan di direktori ini",
"wantsToSearch": "Roo ingin mencari direktori ini untuk <code>{{regex}}</code>",
"didSearch": "Roo mencari direktori ini untuk <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo ingin mencari direktori ini (di luar workspace) untuk <code>{{regex}}</code>",
@ -232,9 +230,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo ingin melihat file tingkat atas di direktori ini (di luar workspace)",
"didViewTopLevelOutsideWorkspace": "Roo melihat file tingkat atas di direktori ini (di luar workspace)",
"wantsToViewRecursiveOutsideWorkspace": "Roo ingin melihat semua file secara rekursif di direktori ini (di luar workspace)",
"didViewRecursiveOutsideWorkspace": "Roo melihat semua file secara rekursif di direktori ini (di luar workspace)",
"wantsToViewDefinitionsOutsideWorkspace": "Roo ingin melihat nama definisi source code yang digunakan di direktori ini (di luar workspace)",
"didViewDefinitionsOutsideWorkspace": "Roo melihat nama definisi source code yang digunakan di direktori ini (di luar workspace)"
"didViewRecursiveOutsideWorkspace": "Roo melihat semua file secara rekursif di direktori ini (di luar workspace)"
},
"codebaseSearch": {
"wantsToSearch": "Roo ingin mencari codebase untuk <code>{{query}}</code>",

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Roo ha visualizzato i file di primo livello in questa directory",
"wantsToViewRecursive": "Roo vuole visualizzare ricorsivamente tutti i file in questa directory",
"didViewRecursive": "Roo ha visualizzato ricorsivamente tutti i file in questa directory",
"wantsToViewDefinitions": "Roo vuole visualizzare i nomi delle definizioni di codice sorgente utilizzate in questa directory",
"didViewDefinitions": "Roo ha visualizzato i nomi delle definizioni di codice sorgente utilizzate in questa directory",
"wantsToSearch": "Roo vuole cercare in questa directory <code>{{regex}}</code>",
"didSearch": "Roo ha cercato in questa directory <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo vuole cercare in questa directory (fuori dall'area di lavoro) <code>{{regex}}</code>",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo vuole visualizzare i file di primo livello in questa directory (fuori dall'area di lavoro)",
"didViewTopLevelOutsideWorkspace": "Roo ha visualizzato i file di primo livello in questa directory (fuori dall'area di lavoro)",
"wantsToViewRecursiveOutsideWorkspace": "Roo vuole visualizzare ricorsivamente tutti i file in questa directory (fuori dall'area di lavoro)",
"didViewRecursiveOutsideWorkspace": "Roo ha visualizzato ricorsivamente tutti i file in questa directory (fuori dall'area di lavoro)",
"wantsToViewDefinitionsOutsideWorkspace": "Roo vuole visualizzare i nomi delle definizioni di codice sorgente utilizzate in questa directory (fuori dall'area di lavoro)",
"didViewDefinitionsOutsideWorkspace": "Roo ha visualizzato i nomi delle definizioni di codice sorgente utilizzate in questa directory (fuori dall'area di lavoro)"
"didViewRecursiveOutsideWorkspace": "Roo ha visualizzato ricorsivamente tutti i file in questa directory (fuori dall'area di lavoro)"
},
"commandOutput": "Output del Comando",
"commandExecution": {

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Rooはこのディレクトリのトップレベルファイルを表示しました",
"wantsToViewRecursive": "Rooはこのディレクトリのすべてのファイルを再帰的に表示したい",
"didViewRecursive": "Rooはこのディレクトリのすべてのファイルを再帰的に表示しました",
"wantsToViewDefinitions": "Rooはこのディレクトリで使用されているソースコード定義名を表示したい",
"didViewDefinitions": "Rooはこのディレクトリで使用されているソースコード定義名を表示しました",
"wantsToSearch": "Rooはこのディレクトリで <code>{{regex}}</code> を検索したい",
"didSearch": "Rooはこのディレクトリで <code>{{regex}}</code> を検索しました",
"wantsToSearchOutsideWorkspace": "Rooはこのディレクトリワークスペース外で <code>{{regex}}</code> を検索したい",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Rooはこのディレクトリワークスペース外のトップレベルファイルを表示したい",
"didViewTopLevelOutsideWorkspace": "Rooはこのディレクトリワークスペース外のトップレベルファイルを表示しました",
"wantsToViewRecursiveOutsideWorkspace": "Rooはこのディレクトリワークスペース外のすべてのファイルを再帰的に表示したい",
"didViewRecursiveOutsideWorkspace": "Rooはこのディレクトリワークスペース外のすべてのファイルを再帰的に表示しました",
"wantsToViewDefinitionsOutsideWorkspace": "Rooはこのディレクトリワークスペース外で使用されているソースコード定義名を表示したい",
"didViewDefinitionsOutsideWorkspace": "Rooはこのディレクトリワークスペース外で使用されているソースコード定義名を表示しました"
"didViewRecursiveOutsideWorkspace": "Rooはこのディレクトリワークスペース外のすべてのファイルを再帰的に表示しました"
},
"commandOutput": "コマンド出力",
"commandExecution": {

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Roo가 이 디렉토리의 최상위 파일을 보았습니다",
"wantsToViewRecursive": "Roo가 이 디렉토리의 모든 파일을 재귀적으로 보고 싶어합니다",
"didViewRecursive": "Roo가 이 디렉토리의 모든 파일을 재귀적으로 보았습니다",
"wantsToViewDefinitions": "Roo가 이 디렉토리에서 사용된 소스 코드 정의 이름을 보고 싶어합니다",
"didViewDefinitions": "Roo가 이 디렉토리에서 사용된 소스 코드 정의 이름을 보았습니다",
"wantsToSearch": "Roo가 이 디렉토리에서 <code>{{regex}}</code>을(를) 검색하고 싶어합니다",
"didSearch": "Roo가 이 디렉토리에서 <code>{{regex}}</code>을(를) 검색했습니다",
"wantsToSearchOutsideWorkspace": "Roo가 이 디렉토리(워크스페이스 외부)에서 <code>{{regex}}</code>을(를) 검색하고 싶어합니다",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo가 이 디렉토리(워크스페이스 외부)의 최상위 파일을 보고 싶어합니다",
"didViewTopLevelOutsideWorkspace": "Roo가 이 디렉토리(워크스페이스 외부)의 최상위 파일을 보았습니다",
"wantsToViewRecursiveOutsideWorkspace": "Roo가 이 디렉토리(워크스페이스 외부)의 모든 파일을 재귀적으로 보고 싶어합니다",
"didViewRecursiveOutsideWorkspace": "Roo가 이 디렉토리(워크스페이스 외부)의 모든 파일을 재귀적으로 보았습니다",
"wantsToViewDefinitionsOutsideWorkspace": "Roo가 이 디렉토리(워크스페이스 외부)에서 사용된 소스 코드 정의 이름을 보고 싶어합니다",
"didViewDefinitionsOutsideWorkspace": "Roo가 이 디렉토리(워크스페이스 외부)에서 사용된 소스 코드 정의 이름을 보았습니다"
"didViewRecursiveOutsideWorkspace": "Roo가 이 디렉토리(워크스페이스 외부)의 모든 파일을 재귀적으로 보았습니다"
},
"commandOutput": "명령 출력",
"commandExecution": {

View file

@ -194,8 +194,6 @@
"didViewTopLevel": "Roo heeft de bovenliggende bestanden in deze map bekeken",
"wantsToViewRecursive": "Roo wil alle bestanden in deze map recursief bekijken",
"didViewRecursive": "Roo heeft alle bestanden in deze map recursief bekeken",
"wantsToViewDefinitions": "Roo wil broncode-definitienamen bekijken die in deze map worden gebruikt",
"didViewDefinitions": "Roo heeft broncode-definitienamen bekeken die in deze map worden gebruikt",
"wantsToSearch": "Roo wil deze map doorzoeken op <code>{{regex}}</code>",
"didSearch": "Roo heeft deze map doorzocht op <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo wil deze map (buiten werkruimte) doorzoeken op <code>{{regex}}</code>",
@ -203,9 +201,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo wil de bovenliggende bestanden in deze map (buiten werkruimte) bekijken",
"didViewTopLevelOutsideWorkspace": "Roo heeft de bovenliggende bestanden in deze map (buiten werkruimte) bekeken",
"wantsToViewRecursiveOutsideWorkspace": "Roo wil alle bestanden in deze map (buiten werkruimte) recursief bekijken",
"didViewRecursiveOutsideWorkspace": "Roo heeft alle bestanden in deze map (buiten werkruimte) recursief bekeken",
"wantsToViewDefinitionsOutsideWorkspace": "Roo wil broncode-definitienamen bekijken die in deze map (buiten werkruimte) worden gebruikt",
"didViewDefinitionsOutsideWorkspace": "Roo heeft broncode-definitienamen bekeken die in deze map (buiten werkruimte) worden gebruikt"
"didViewRecursiveOutsideWorkspace": "Roo heeft alle bestanden in deze map (buiten werkruimte) recursief bekeken"
},
"commandOutput": "Commando-uitvoer",
"commandExecution": {

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Roo zobaczył pliki najwyższego poziomu w tym katalogu",
"wantsToViewRecursive": "Roo chce rekurencyjnie zobaczyć wszystkie pliki w tym katalogu",
"didViewRecursive": "Roo rekurencyjnie zobaczył wszystkie pliki w tym katalogu",
"wantsToViewDefinitions": "Roo chce zobaczyć nazwy definicji kodu źródłowego używane w tym katalogu",
"didViewDefinitions": "Roo zobaczył nazwy definicji kodu źródłowego używane w tym katalogu",
"wantsToSearch": "Roo chce przeszukać ten katalog w poszukiwaniu <code>{{regex}}</code>",
"didSearch": "Roo przeszukał ten katalog w poszukiwaniu <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo chce przeszukać ten katalog (poza obszarem roboczym) w poszukiwaniu <code>{{regex}}</code>",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo chce zobaczyć pliki najwyższego poziomu w tym katalogu (poza obszarem roboczym)",
"didViewTopLevelOutsideWorkspace": "Roo zobaczył pliki najwyższego poziomu w tym katalogu (poza obszarem roboczym)",
"wantsToViewRecursiveOutsideWorkspace": "Roo chce rekurencyjnie zobaczyć wszystkie pliki w tym katalogu (poza obszarem roboczym)",
"didViewRecursiveOutsideWorkspace": "Roo rekurencyjnie zobaczył wszystkie pliki w tym katalogu (poza obszarem roboczym)",
"wantsToViewDefinitionsOutsideWorkspace": "Roo chce zobaczyć nazwy definicji kodu źródłowego używane w tym katalogu (poza obszarem roboczym)",
"didViewDefinitionsOutsideWorkspace": "Roo zobaczył nazwy definicji kodu źródłowego używane w tym katalogu (poza obszarem roboczym)"
"didViewRecursiveOutsideWorkspace": "Roo rekurencyjnie zobaczył wszystkie pliki w tym katalogu (poza obszarem roboczym)"
},
"commandOutput": "Wyjście polecenia",
"commandExecution": {

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Roo visualizou os arquivos de nível superior neste diretório",
"wantsToViewRecursive": "Roo quer visualizar recursivamente todos os arquivos neste diretório",
"didViewRecursive": "Roo visualizou recursivamente todos os arquivos neste diretório",
"wantsToViewDefinitions": "Roo quer visualizar nomes de definição de código-fonte usados neste diretório",
"didViewDefinitions": "Roo visualizou nomes de definição de código-fonte usados neste diretório",
"wantsToSearch": "Roo quer pesquisar neste diretório por <code>{{regex}}</code>",
"didSearch": "Roo pesquisou neste diretório por <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo quer pesquisar neste diretório (fora do espaço de trabalho) por <code>{{regex}}</code>",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo quer visualizar os arquivos de nível superior neste diretório (fora do espaço de trabalho)",
"didViewTopLevelOutsideWorkspace": "Roo visualizou os arquivos de nível superior neste diretório (fora do espaço de trabalho)",
"wantsToViewRecursiveOutsideWorkspace": "Roo quer visualizar recursivamente todos os arquivos neste diretório (fora do espaço de trabalho)",
"didViewRecursiveOutsideWorkspace": "Roo visualizou recursivamente todos os arquivos neste diretório (fora do espaço de trabalho)",
"wantsToViewDefinitionsOutsideWorkspace": "Roo quer visualizar nomes de definição de código-fonte usados neste diretório (fora do espaço de trabalho)",
"didViewDefinitionsOutsideWorkspace": "Roo visualizou nomes de definição de código-fonte usados neste diretório (fora do espaço de trabalho)"
"didViewRecursiveOutsideWorkspace": "Roo visualizou recursivamente todos os arquivos neste diretório (fora do espaço de trabalho)"
},
"commandOutput": "Saída do comando",
"commandExecution": {

View file

@ -194,8 +194,6 @@
"didViewTopLevel": "Roo просмотрел файлы верхнего уровня в этой директории",
"wantsToViewRecursive": "Roo хочет рекурсивно просмотреть все файлы в этой директории",
"didViewRecursive": "Roo рекурсивно просмотрел все файлы в этой директории",
"wantsToViewDefinitions": "Roo хочет просмотреть имена определений исходного кода в этой директории",
"didViewDefinitions": "Roo просмотрел имена определений исходного кода в этой директории",
"wantsToSearch": "Roo хочет выполнить поиск в этой директории по <code>{{regex}}</code>",
"didSearch": "Roo выполнил поиск в этой директории по <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo хочет выполнить поиск в этой директории (вне рабочего пространства) по <code>{{regex}}</code>",
@ -203,9 +201,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo хочет просмотреть файлы верхнего уровня в этой директории (вне рабочего пространства)",
"didViewTopLevelOutsideWorkspace": "Roo просмотрел файлы верхнего уровня в этой директории (вне рабочего пространства)",
"wantsToViewRecursiveOutsideWorkspace": "Roo хочет рекурсивно просмотреть все файлы в этой директории (вне рабочего пространства)",
"didViewRecursiveOutsideWorkspace": "Roo рекурсивно просмотрел все файлы в этой директории (вне рабочего пространства)",
"wantsToViewDefinitionsOutsideWorkspace": "Roo хочет просмотреть имена определений исходного кода в этой директории (вне рабочего пространства)",
"didViewDefinitionsOutsideWorkspace": "Roo просмотрел имена определений исходного кода в этой директории (вне рабочего пространства)"
"didViewRecursiveOutsideWorkspace": "Roo рекурсивно просмотрел все файлы в этой директории (вне рабочего пространства)"
},
"commandOutput": "Вывод команды",
"commandExecution": {

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Roo bu dizindeki üst düzey dosyaları görüntüledi",
"wantsToViewRecursive": "Roo bu dizindeki tüm dosyaları özyinelemeli olarak görüntülemek istiyor",
"didViewRecursive": "Roo bu dizindeki tüm dosyaları özyinelemeli olarak görüntüledi",
"wantsToViewDefinitions": "Roo bu dizinde kullanılan kaynak kod tanımlama isimlerini görüntülemek istiyor",
"didViewDefinitions": "Roo bu dizinde kullanılan kaynak kod tanımlama isimlerini görüntüledi",
"wantsToSearch": "Roo bu dizinde <code>{{regex}}</code> için arama yapmak istiyor",
"didSearch": "Roo bu dizinde <code>{{regex}}</code> için arama yaptı",
"wantsToSearchOutsideWorkspace": "Roo bu dizinde (çalışma alanı dışında) <code>{{regex}}</code> için arama yapmak istiyor",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo bu dizindeki (çalışma alanı dışında) üst düzey dosyaları görüntülemek istiyor",
"didViewTopLevelOutsideWorkspace": "Roo bu dizindeki (çalışma alanı dışında) üst düzey dosyaları görüntüledi",
"wantsToViewRecursiveOutsideWorkspace": "Roo bu dizindeki (çalışma alanı dışında) tüm dosyaları özyinelemeli olarak görüntülemek istiyor",
"didViewRecursiveOutsideWorkspace": "Roo bu dizindeki (çalışma alanı dışında) tüm dosyaları özyinelemeli olarak görüntüledi",
"wantsToViewDefinitionsOutsideWorkspace": "Roo bu dizinde (çalışma alanı dışında) kullanılan kaynak kod tanımlama isimlerini görüntülemek istiyor",
"didViewDefinitionsOutsideWorkspace": "Roo bu dizinde (çalışma alanı dışında) kullanılan kaynak kod tanımlama isimlerini görüntüledi"
"didViewRecursiveOutsideWorkspace": "Roo bu dizindeki (çalışma alanı dışında) tüm dosyaları özyinelemeli olarak görüntüledi"
},
"commandOutput": "Komut Çıktısı",
"commandExecution": {

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "Roo đã xem các tệp cấp cao nhất trong thư mục này",
"wantsToViewRecursive": "Roo muốn xem đệ quy tất cả các tệp trong thư mục này",
"didViewRecursive": "Roo đã xem đệ quy tất cả các tệp trong thư mục này",
"wantsToViewDefinitions": "Roo muốn xem tên định nghĩa mã nguồn được sử dụng trong thư mục này",
"didViewDefinitions": "Roo đã xem tên định nghĩa mã nguồn được sử dụng trong thư mục này",
"wantsToSearch": "Roo muốn tìm kiếm trong thư mục này cho <code>{{regex}}</code>",
"didSearch": "Roo đã tìm kiếm trong thư mục này cho <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo muốn tìm kiếm trong thư mục này (ngoài không gian làm việc) cho <code>{{regex}}</code>",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "Roo muốn xem các tệp cấp cao nhất trong thư mục này (ngoài không gian làm việc)",
"didViewTopLevelOutsideWorkspace": "Roo đã xem các tệp cấp cao nhất trong thư mục này (ngoài không gian làm việc)",
"wantsToViewRecursiveOutsideWorkspace": "Roo muốn xem đệ quy tất cả các tệp trong thư mục này (ngoài không gian làm việc)",
"didViewRecursiveOutsideWorkspace": "Roo đã xem đệ quy tất cả các tệp trong thư mục này (ngoài không gian làm việc)",
"wantsToViewDefinitionsOutsideWorkspace": "Roo muốn xem tên định nghĩa mã nguồn được sử dụng trong thư mục này (ngoài không gian làm việc)",
"didViewDefinitionsOutsideWorkspace": "Roo đã xem tên định nghĩa mã nguồn được sử dụng trong thư mục này (ngoài không gian làm việc)"
"didViewRecursiveOutsideWorkspace": "Roo đã xem đệ quy tất cả các tệp trong thư mục này (ngoài không gian làm việc)"
},
"commandOutput": "Kết quả lệnh",
"commandExecution": {

View file

@ -199,8 +199,6 @@
"didViewTopLevel": "已查看目录文件列表",
"wantsToViewRecursive": "需要查看目录所有文件",
"didViewRecursive": "已查看目录所有文件",
"wantsToViewDefinitions": "Roo想查看此目录中使用的源代码定义名称",
"didViewDefinitions": "Roo已查看此目录中使用的源代码定义名称",
"wantsToSearch": "需要搜索内容: {{regex}}",
"didSearch": "已完成内容搜索: {{regex}}",
"wantsToSearchOutsideWorkspace": "需要搜索内容(工作区外): {{regex}}",
@ -208,9 +206,7 @@
"wantsToViewTopLevelOutsideWorkspace": "需要查看目录文件列表(工作区外)",
"didViewTopLevelOutsideWorkspace": "已查看目录文件列表(工作区外)",
"wantsToViewRecursiveOutsideWorkspace": "需要查看目录所有文件(工作区外)",
"didViewRecursiveOutsideWorkspace": "已查看目录所有文件(工作区外)",
"wantsToViewDefinitionsOutsideWorkspace": "Roo想查看此目录中使用的源代码定义名称工作区外",
"didViewDefinitionsOutsideWorkspace": "Roo已查看此目录中使用的源代码定义名称工作区外"
"didViewRecursiveOutsideWorkspace": "已查看目录所有文件(工作区外)"
},
"commandOutput": "命令输出",
"commandExecution": {

View file

@ -224,10 +224,6 @@
"didViewRecursive": "Roo 已遞迴檢視此目錄中的所有檔案",
"wantsToViewRecursiveOutsideWorkspace": "Roo 想要遞迴檢視此目錄(工作區外)中的所有檔案",
"didViewRecursiveOutsideWorkspace": "Roo 已遞迴檢視此目錄(工作區外)中的所有檔案",
"wantsToViewDefinitions": "Roo 想要檢視此目錄中使用的原始碼定義名稱",
"didViewDefinitions": "Roo 已檢視此目錄中使用的原始碼定義名稱",
"wantsToViewDefinitionsOutsideWorkspace": "Roo 想要檢視此目錄(工作區外)中使用的原始碼定義名稱",
"didViewDefinitionsOutsideWorkspace": "Roo 已檢視此目錄(工作區外)中使用的原始碼定義名稱",
"wantsToSearch": "Roo 想要在此目錄中搜尋 <code>{{regex}}</code>",
"didSearch": "Roo 已在此目錄中搜尋 <code>{{regex}}</code>",
"wantsToSearchOutsideWorkspace": "Roo 想要在此目錄(工作區外)中搜尋 <code>{{regex}}</code>",