fix: permissions path

Kujtim Hoxha created

Change summary

internal/llm/tools/edit.go      | 20 +++++++++++++++++---
internal/llm/tools/multiedit.go | 14 +++++++++++---
internal/llm/tools/write.go     |  7 ++++++-
3 files changed, 34 insertions(+), 7 deletions(-)

Detailed changes

internal/llm/tools/edit.go 🔗

@@ -215,10 +215,14 @@ func (e *editTool) createNewFile(ctx context.Context, filePath, content string,
 		content,
 		strings.TrimPrefix(filePath, e.workingDir),
 	)
+	permissionPath := filePath
+	if strings.HasPrefix(filePath, e.workingDir) {
+		permissionPath = e.workingDir
+	}
 	p := e.permissions.Request(
 		permission.CreatePermissionRequest{
 			SessionID:   sessionID,
-			Path:        filePath,
+			Path:        permissionPath,
 			ToolCallID:  call.ID,
 			ToolName:    EditToolName,
 			Action:      "write",
@@ -336,10 +340,15 @@ func (e *editTool) deleteContent(ctx context.Context, filePath, oldString string
 		strings.TrimPrefix(filePath, e.workingDir),
 	)
 
+	permissionPath := filePath
+	if strings.HasPrefix(filePath, e.workingDir) {
+		permissionPath = e.workingDir
+	}
+
 	p := e.permissions.Request(
 		permission.CreatePermissionRequest{
 			SessionID:   sessionID,
-			Path:        filePath,
+			Path:        permissionPath,
 			ToolCallID:  call.ID,
 			ToolName:    EditToolName,
 			Action:      "write",
@@ -466,10 +475,15 @@ func (e *editTool) replaceContent(ctx context.Context, filePath, oldString, newS
 		newContent,
 		strings.TrimPrefix(filePath, e.workingDir),
 	)
+
+	permissionPath := filePath
+	if strings.HasPrefix(filePath, e.workingDir) {
+		permissionPath = e.workingDir
+	}
 	p := e.permissions.Request(
 		permission.CreatePermissionRequest{
 			SessionID:   sessionID,
-			Path:        filePath,
+			Path:        permissionPath,
 			ToolCallID:  call.ID,
 			ToolName:    EditToolName,
 			Action:      "write",

internal/llm/tools/multiedit.go 🔗

@@ -250,9 +250,14 @@ func (m *multiEditTool) processMultiEditWithCreation(ctx context.Context, params
 	// Check permissions
 	_, additions, removals := diff.GenerateDiff("", currentContent, strings.TrimPrefix(params.FilePath, m.workingDir))
 
+	permissionPath := params.FilePath
+	if strings.HasPrefix(params.FilePath, m.workingDir) {
+		permissionPath = m.workingDir
+	}
+
 	p := m.permissions.Request(permission.CreatePermissionRequest{
 		SessionID:   sessionID,
-		Path:        params.FilePath,
+		Path:        permissionPath,
 		ToolCallID:  call.ID,
 		ToolName:    MultiEditToolName,
 		Action:      "write",
@@ -359,10 +364,13 @@ func (m *multiEditTool) processMultiEditExistingFile(ctx context.Context, params
 
 	// Generate diff and check permissions
 	_, additions, removals := diff.GenerateDiff(oldContent, currentContent, strings.TrimPrefix(params.FilePath, m.workingDir))
-
+	permissionPath := params.FilePath
+	if strings.HasPrefix(params.FilePath, m.workingDir) {
+		permissionPath = m.workingDir
+	}
 	p := m.permissions.Request(permission.CreatePermissionRequest{
 		SessionID:   sessionID,
-		Path:        params.FilePath,
+		Path:        permissionPath,
 		ToolCallID:  call.ID,
 		ToolName:    MultiEditToolName,
 		Action:      "write",

internal/llm/tools/write.go 🔗

@@ -172,10 +172,15 @@ func (w *writeTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error
 		strings.TrimPrefix(filePath, w.workingDir),
 	)
 
+	permissionPath := filePath
+	if strings.HasPrefix(filePath, w.workingDir) {
+		permissionPath = w.workingDir
+	}
+
 	p := w.permissions.Request(
 		permission.CreatePermissionRequest{
 			SessionID:   sessionID,
-			Path:        filePath,
+			Path:        permissionPath,
 			ToolCallID:  call.ID,
 			ToolName:    WriteToolName,
 			Action:      "write",