Skip to content

Commit 1a4c689

Browse files
authored
Make listing tools respect auto-approve settings for outside of the workspace (#4682)
1 parent d67b351 commit 1a4c689

File tree

21 files changed

+155
-25
lines changed

21 files changed

+155
-25
lines changed

src/core/tools/listCodeDefinitionNamesTool.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { ToolUse, AskApproval, HandleError, PushToolResult, RemoveClosingTag } f
55
import { Task } from "../task/Task"
66
import { ClineSayTool } from "../../shared/ExtensionMessage"
77
import { getReadablePath } from "../../utils/path"
8+
import { isPathOutsideWorkspace } from "../../utils/pathUtils"
89
import { parseSourceCodeForDefinitionsTopLevel, parseSourceCodeDefinitionsForFile } from "../../services/tree-sitter"
910
import { RecordSource } from "../context-tracking/FileContextTrackerTypes"
1011

@@ -18,9 +19,14 @@ export async function listCodeDefinitionNamesTool(
1819
) {
1920
const relPath: string | undefined = block.params.path
2021

22+
// Calculate if the path is outside workspace
23+
const absolutePath = relPath ? path.resolve(cline.cwd, relPath) : cline.cwd
24+
const isOutsideWorkspace = isPathOutsideWorkspace(absolutePath)
25+
2126
const sharedMessageProps: ClineSayTool = {
2227
tool: "listCodeDefinitionNames",
2328
path: getReadablePath(cline.cwd, removeClosingTag("path", relPath)),
29+
isOutsideWorkspace,
2430
}
2531

2632
try {
@@ -38,7 +44,6 @@ export async function listCodeDefinitionNamesTool(
3844

3945
cline.consecutiveMistakeCount = 0
4046

41-
const absolutePath = path.resolve(cline.cwd, relPath)
4247
let result: string
4348

4449
try {

src/core/tools/listFilesTool.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { ClineSayTool } from "../../shared/ExtensionMessage"
55
import { formatResponse } from "../prompts/responses"
66
import { listFiles } from "../../services/glob/list-files"
77
import { getReadablePath } from "../../utils/path"
8+
import { isPathOutsideWorkspace } from "../../utils/pathUtils"
89
import { ToolUse, AskApproval, HandleError, PushToolResult, RemoveClosingTag } from "../../shared/tools"
910

1011
/**
@@ -34,9 +35,14 @@ export async function listFilesTool(
3435
const recursiveRaw: string | undefined = block.params.recursive
3536
const recursive = recursiveRaw?.toLowerCase() === "true"
3637

38+
// Calculate if the path is outside workspace
39+
const absolutePath = relDirPath ? path.resolve(cline.cwd, relDirPath) : cline.cwd
40+
const isOutsideWorkspace = isPathOutsideWorkspace(absolutePath)
41+
3742
const sharedMessageProps: ClineSayTool = {
3843
tool: !recursive ? "listFilesTopLevel" : "listFilesRecursive",
3944
path: getReadablePath(cline.cwd, removeClosingTag("path", relDirPath)),
45+
isOutsideWorkspace,
4046
}
4147

4248
try {
@@ -54,7 +60,6 @@ export async function listFilesTool(
5460

5561
cline.consecutiveMistakeCount = 0
5662

57-
const absolutePath = path.resolve(cline.cwd, relDirPath)
5863
const [files, didHitLimit] = await listFiles(absolutePath, recursive, 200)
5964
const { showRooIgnoredFiles = true } = (await cline.providerRef.deref()?.getState()) ?? {}
6065

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

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -537,8 +537,12 @@ export const ChatRowContent = ({
537537
{toolIcon("folder-opened")}
538538
<span style={{ fontWeight: "bold" }}>
539539
{message.type === "ask"
540-
? t("chat:directoryOperations.wantsToViewTopLevel")
541-
: t("chat:directoryOperations.didViewTopLevel")}
540+
? tool.isOutsideWorkspace
541+
? t("chat:directoryOperations.wantsToViewTopLevelOutsideWorkspace")
542+
: t("chat:directoryOperations.wantsToViewTopLevel")
543+
: tool.isOutsideWorkspace
544+
? t("chat:directoryOperations.didViewTopLevelOutsideWorkspace")
545+
: t("chat:directoryOperations.didViewTopLevel")}
542546
</span>
543547
</div>
544548
<CodeAccordian
@@ -557,8 +561,12 @@ export const ChatRowContent = ({
557561
{toolIcon("folder-opened")}
558562
<span style={{ fontWeight: "bold" }}>
559563
{message.type === "ask"
560-
? t("chat:directoryOperations.wantsToViewRecursive")
561-
: t("chat:directoryOperations.didViewRecursive")}
564+
? tool.isOutsideWorkspace
565+
? t("chat:directoryOperations.wantsToViewRecursiveOutsideWorkspace")
566+
: t("chat:directoryOperations.wantsToViewRecursive")
567+
: tool.isOutsideWorkspace
568+
? t("chat:directoryOperations.didViewRecursiveOutsideWorkspace")
569+
: t("chat:directoryOperations.didViewRecursive")}
562570
</span>
563571
</div>
564572
<CodeAccordian
@@ -577,8 +585,12 @@ export const ChatRowContent = ({
577585
{toolIcon("file-code")}
578586
<span style={{ fontWeight: "bold" }}>
579587
{message.type === "ask"
580-
? t("chat:directoryOperations.wantsToViewDefinitions")
581-
: t("chat:directoryOperations.didViewDefinitions")}
588+
? tool.isOutsideWorkspace
589+
? t("chat:directoryOperations.wantsToViewDefinitionsOutsideWorkspace")
590+
: t("chat:directoryOperations.wantsToViewDefinitions")
591+
: tool.isOutsideWorkspace
592+
? t("chat:directoryOperations.didViewDefinitionsOutsideWorkspace")
593+
: t("chat:directoryOperations.didViewDefinitions")}
582594
</span>
583595
</div>
584596
<CodeAccordian

webview-ui/src/i18n/locales/ca/chat.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,13 @@
166166
"wantsToSearch": "Roo vol cercar en aquest directori <code>{{regex}}</code>:",
167167
"didSearch": "Roo ha cercat en aquest directori <code>{{regex}}</code>:",
168168
"wantsToSearchOutsideWorkspace": "Roo vol cercar en aquest directori (fora de l'espai de treball) <code>{{regex}}</code>:",
169-
"didSearchOutsideWorkspace": "Roo ha cercat en aquest directori (fora de l'espai de treball) <code>{{regex}}</code>:"
169+
"didSearchOutsideWorkspace": "Roo ha cercat en aquest directori (fora de l'espai de treball) <code>{{regex}}</code>:",
170+
"wantsToViewTopLevelOutsideWorkspace": "Roo vol veure els fitxers de nivell superior en aquest directori (fora de l'espai de treball):",
171+
"didViewTopLevelOutsideWorkspace": "Roo ha vist els fitxers de nivell superior en aquest directori (fora de l'espai de treball):",
172+
"wantsToViewRecursiveOutsideWorkspace": "Roo vol veure recursivament tots els fitxers en aquest directori (fora de l'espai de treball):",
173+
"didViewRecursiveOutsideWorkspace": "Roo ha vist recursivament tots els fitxers en aquest directori (fora de l'espai de treball):",
174+
"wantsToViewDefinitionsOutsideWorkspace": "Roo vol veure noms de definicions de codi font utilitzats en aquest directori (fora de l'espai de treball):",
175+
"didViewDefinitionsOutsideWorkspace": "Roo ha vist noms de definicions de codi font utilitzats en aquest directori (fora de l'espai de treball):"
170176
},
171177
"commandOutput": "Sortida de l'ordre",
172178
"response": "Resposta",

webview-ui/src/i18n/locales/de/chat.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,13 @@
166166
"wantsToSearch": "Roo möchte dieses Verzeichnis nach <code>{{regex}}</code> durchsuchen:",
167167
"didSearch": "Roo hat dieses Verzeichnis nach <code>{{regex}}</code> durchsucht:",
168168
"wantsToSearchOutsideWorkspace": "Roo möchte dieses Verzeichnis (außerhalb des Arbeitsbereichs) nach <code>{{regex}}</code> durchsuchen:",
169-
"didSearchOutsideWorkspace": "Roo hat dieses Verzeichnis (außerhalb des Arbeitsbereichs) nach <code>{{regex}}</code> durchsucht:"
169+
"didSearchOutsideWorkspace": "Roo hat dieses Verzeichnis (außerhalb des Arbeitsbereichs) nach <code>{{regex}}</code> durchsucht:",
170+
"wantsToViewTopLevelOutsideWorkspace": "Roo möchte die Dateien auf oberster Ebene in diesem Verzeichnis (außerhalb des Arbeitsbereichs) anzeigen:",
171+
"didViewTopLevelOutsideWorkspace": "Roo hat die Dateien auf oberster Ebene in diesem Verzeichnis (außerhalb des Arbeitsbereichs) angezeigt:",
172+
"wantsToViewRecursiveOutsideWorkspace": "Roo möchte rekursiv alle Dateien in diesem Verzeichnis (außerhalb des Arbeitsbereichs) anzeigen:",
173+
"didViewRecursiveOutsideWorkspace": "Roo hat rekursiv alle Dateien in diesem Verzeichnis (außerhalb des Arbeitsbereichs) angezeigt:",
174+
"wantsToViewDefinitionsOutsideWorkspace": "Roo möchte Quellcode-Definitionsnamen in diesem Verzeichnis (außerhalb des Arbeitsbereichs) anzeigen:",
175+
"didViewDefinitionsOutsideWorkspace": "Roo hat Quellcode-Definitionsnamen in diesem Verzeichnis (außerhalb des Arbeitsbereichs) angezeigt:"
170176
},
171177
"commandOutput": "Befehlsausgabe",
172178
"response": "Antwort",

webview-ui/src/i18n/locales/en/chat.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,16 @@
168168
"directoryOperations": {
169169
"wantsToViewTopLevel": "Roo wants to view the top level files in this directory:",
170170
"didViewTopLevel": "Roo viewed the top level files in this directory:",
171+
"wantsToViewTopLevelOutsideWorkspace": "Roo wants to view the top level files in this directory (outside workspace):",
172+
"didViewTopLevelOutsideWorkspace": "Roo viewed the top level files in this directory (outside workspace):",
171173
"wantsToViewRecursive": "Roo wants to recursively view all files in this directory:",
172174
"didViewRecursive": "Roo recursively viewed all files in this directory:",
175+
"wantsToViewRecursiveOutsideWorkspace": "Roo wants to recursively view all files in this directory (outside workspace):",
176+
"didViewRecursiveOutsideWorkspace": "Roo recursively viewed all files in this directory (outside workspace):",
173177
"wantsToViewDefinitions": "Roo wants to view source code definition names used in this directory:",
174178
"didViewDefinitions": "Roo viewed source code definition names used in this directory:",
179+
"wantsToViewDefinitionsOutsideWorkspace": "Roo wants to view source code definition names used in this directory (outside workspace):",
180+
"didViewDefinitionsOutsideWorkspace": "Roo viewed source code definition names used in this directory (outside workspace):",
175181
"wantsToSearch": "Roo wants to search this directory for <code>{{regex}}</code>:",
176182
"didSearch": "Roo searched this directory for <code>{{regex}}</code>:",
177183
"wantsToSearchOutsideWorkspace": "Roo wants to search this directory (outside workspace) for <code>{{regex}}</code>:",

webview-ui/src/i18n/locales/es/chat.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,13 @@
166166
"wantsToSearch": "Roo quiere buscar en este directorio <code>{{regex}}</code>:",
167167
"didSearch": "Roo buscó en este directorio <code>{{regex}}</code>:",
168168
"wantsToSearchOutsideWorkspace": "Roo quiere buscar en este directorio (fuera del espacio de trabajo) <code>{{regex}}</code>:",
169-
"didSearchOutsideWorkspace": "Roo buscó en este directorio (fuera del espacio de trabajo) <code>{{regex}}</code>:"
169+
"didSearchOutsideWorkspace": "Roo buscó en este directorio (fuera del espacio de trabajo) <code>{{regex}}</code>:",
170+
"wantsToViewTopLevelOutsideWorkspace": "Roo quiere ver los archivos de nivel superior en este directorio (fuera del espacio de trabajo):",
171+
"didViewTopLevelOutsideWorkspace": "Roo vio los archivos de nivel superior en este directorio (fuera del espacio de trabajo):",
172+
"wantsToViewRecursiveOutsideWorkspace": "Roo quiere ver recursivamente todos los archivos en este directorio (fuera del espacio de trabajo):",
173+
"didViewRecursiveOutsideWorkspace": "Roo vio recursivamente todos los archivos en este directorio (fuera del espacio de trabajo):",
174+
"wantsToViewDefinitionsOutsideWorkspace": "Roo quiere ver nombres de definiciones de código fuente utilizados en este directorio (fuera del espacio de trabajo):",
175+
"didViewDefinitionsOutsideWorkspace": "Roo vio nombres de definiciones de código fuente utilizados en este directorio (fuera del espacio de trabajo):"
170176
},
171177
"commandOutput": "Salida del comando",
172178
"response": "Respuesta",

webview-ui/src/i18n/locales/fr/chat.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,13 @@
166166
"wantsToSearch": "Roo veut rechercher dans ce répertoire <code>{{regex}}</code> :",
167167
"didSearch": "Roo a recherché dans ce répertoire <code>{{regex}}</code> :",
168168
"wantsToSearchOutsideWorkspace": "Roo veut rechercher dans ce répertoire (hors espace de travail) <code>{{regex}}</code> :",
169-
"didSearchOutsideWorkspace": "Roo a recherché dans ce répertoire (hors espace de travail) <code>{{regex}}</code> :"
169+
"didSearchOutsideWorkspace": "Roo a recherché dans ce répertoire (hors espace de travail) <code>{{regex}}</code> :",
170+
"wantsToViewTopLevelOutsideWorkspace": "Roo veut voir les fichiers de premier niveau dans ce répertoire (hors espace de travail) :",
171+
"didViewTopLevelOutsideWorkspace": "Roo a vu les fichiers de premier niveau dans ce répertoire (hors espace de travail) :",
172+
"wantsToViewRecursiveOutsideWorkspace": "Roo veut voir récursivement tous les fichiers dans ce répertoire (hors espace de travail) :",
173+
"didViewRecursiveOutsideWorkspace": "Roo a vu récursivement tous les fichiers dans ce répertoire (hors espace de travail) :",
174+
"wantsToViewDefinitionsOutsideWorkspace": "Roo veut voir les noms de définitions de code source utilisés dans ce répertoire (hors espace de travail) :",
175+
"didViewDefinitionsOutsideWorkspace": "Roo a vu les noms de définitions de code source utilisés dans ce répertoire (hors espace de travail) :"
170176
},
171177
"commandOutput": "Sortie de commande",
172178
"response": "Réponse",

webview-ui/src/i18n/locales/hi/chat.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,13 @@
166166
"wantsToSearch": "Roo इस निर्देशिका में <code>{{regex}}</code> के लिए खोज करना चाहता है:",
167167
"didSearch": "Roo ने इस निर्देशिका में <code>{{regex}}</code> के लिए खोज की:",
168168
"wantsToSearchOutsideWorkspace": "Roo इस निर्देशिका (कार्यक्षेत्र के बाहर) में <code>{{regex}}</code> के लिए खोज करना चाहता है:",
169-
"didSearchOutsideWorkspace": "Roo ने इस निर्देशिका (कार्यक्षेत्र के बाहर) में <code>{{regex}}</code> के लिए खोज की:"
169+
"didSearchOutsideWorkspace": "Roo ने इस निर्देशिका (कार्यक्षेत्र के बाहर) में <code>{{regex}}</code> के लिए खोज की:",
170+
"wantsToViewTopLevelOutsideWorkspace": "Roo इस निर्देशिका (कार्यक्षेत्र के बाहर) में शीर्ष स्तर की फ़ाइलें देखना चाहता है:",
171+
"didViewTopLevelOutsideWorkspace": "Roo ने इस निर्देशिका (कार्यक्षेत्र के बाहर) में शीर्ष स्तर की फ़ाइलें देखीं:",
172+
"wantsToViewRecursiveOutsideWorkspace": "Roo इस निर्देशिका (कार्यक्षेत्र के बाहर) में सभी फ़ाइलों को पुनरावर्ती रूप से देखना चाहता है:",
173+
"didViewRecursiveOutsideWorkspace": "Roo ने इस निर्देशिका (कार्यक्षेत्र के बाहर) में सभी फ़ाइलों को पुनरावर्ती रूप से देखा:",
174+
"wantsToViewDefinitionsOutsideWorkspace": "Roo इस निर्देशिका (कार्यक्षेत्र के बाहर) में उपयोग किए गए सोर्स कोड परिभाषा नामों को देखना चाहता है:",
175+
"didViewDefinitionsOutsideWorkspace": "Roo ने इस निर्देशिका (कार्यक्षेत्र के बाहर) में उपयोग किए गए सोर्स कोड परिभाषा नामों को देखा:"
170176
},
171177
"commandOutput": "कमांड आउटपुट",
172178
"response": "प्रतिक्रिया",

webview-ui/src/i18n/locales/id/chat.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,13 @@
181181
"wantsToSearch": "Roo ingin mencari direktori ini untuk <code>{{regex}}</code>:",
182182
"didSearch": "Roo mencari direktori ini untuk <code>{{regex}}</code>:",
183183
"wantsToSearchOutsideWorkspace": "Roo ingin mencari direktori ini (di luar workspace) untuk <code>{{regex}}</code>:",
184-
"didSearchOutsideWorkspace": "Roo mencari direktori ini (di luar workspace) untuk <code>{{regex}}</code>:"
184+
"didSearchOutsideWorkspace": "Roo mencari direktori ini (di luar workspace) untuk <code>{{regex}}</code>:",
185+
"wantsToViewTopLevelOutsideWorkspace": "Roo ingin melihat file tingkat atas di direktori ini (di luar workspace):",
186+
"didViewTopLevelOutsideWorkspace": "Roo melihat file tingkat atas di direktori ini (di luar workspace):",
187+
"wantsToViewRecursiveOutsideWorkspace": "Roo ingin melihat semua file secara rekursif di direktori ini (di luar workspace):",
188+
"didViewRecursiveOutsideWorkspace": "Roo melihat semua file secara rekursif di direktori ini (di luar workspace):",
189+
"wantsToViewDefinitionsOutsideWorkspace": "Roo ingin melihat nama definisi source code yang digunakan di direktori ini (di luar workspace):",
190+
"didViewDefinitionsOutsideWorkspace": "Roo melihat nama definisi source code yang digunakan di direktori ini (di luar workspace):"
185191
},
186192
"codebaseSearch": {
187193
"wantsToSearch": "Roo ingin mencari codebase untuk <code>{{query}}</code>:",

0 commit comments

Comments
 (0)