summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEd Zynda <[email protected]>2025-05-16 18:56:39 +0300
committerGitHub <[email protected]>2025-05-16 10:56:39 -0500
commitc92f7c6630c5a4d010ea0c80380f2dbb6dd7e3e1 (patch)
treecbfa8e2770a653d9a3e29963e99f79bd430e9e4e
parent4a444e9c9b7674c6b07a1a012a6467e45c3af1ec (diff)
downloadopencode-c92f7c6630c5a4d010ea0c80380f2dbb6dd7e3e1.tar.gz
opencode-c92f7c6630c5a4d010ea0c80380f2dbb6dd7e3e1.zip
fix: Show correct file paths in permission window (#25)
* Fix paths in permission window to show relative paths * Fix paths in permission window to show actual file paths
-rw-r--r--internal/llm/tools/edit.go21
-rw-r--r--internal/llm/tools/write.go8
-rw-r--r--internal/tui/components/dialog/permission.go13
3 files changed, 16 insertions, 26 deletions
diff --git a/internal/llm/tools/edit.go b/internal/llm/tools/edit.go
index 5516db5d7..9837c018d 100644
--- a/internal/llm/tools/edit.go
+++ b/internal/llm/tools/edit.go
@@ -196,16 +196,11 @@ func (e *editTool) createNewFile(ctx context.Context, filePath, content string)
content,
filePath,
)
- rootDir := config.WorkingDirectory()
- permissionPath := filepath.Dir(filePath)
- if strings.HasPrefix(filePath, rootDir) {
- permissionPath = rootDir
- }
p := e.permissions.Request(
ctx,
permission.CreatePermissionRequest{
SessionID: sessionID,
- Path: permissionPath,
+ Path: filePath,
ToolName: EditToolName,
Action: "write",
Description: fmt.Sprintf("Create file %s", filePath),
@@ -308,16 +303,11 @@ func (e *editTool) deleteContent(ctx context.Context, filePath, oldString string
filePath,
)
- rootDir := config.WorkingDirectory()
- permissionPath := filepath.Dir(filePath)
- if strings.HasPrefix(filePath, rootDir) {
- permissionPath = rootDir
- }
p := e.permissions.Request(
ctx,
permission.CreatePermissionRequest{
SessionID: sessionID,
- Path: permissionPath,
+ Path: filePath,
ToolName: EditToolName,
Action: "write",
Description: fmt.Sprintf("Delete content from file %s", filePath),
@@ -429,16 +419,11 @@ func (e *editTool) replaceContent(ctx context.Context, filePath, oldString, newS
newContent,
filePath,
)
- rootDir := config.WorkingDirectory()
- permissionPath := filepath.Dir(filePath)
- if strings.HasPrefix(filePath, rootDir) {
- permissionPath = rootDir
- }
p := e.permissions.Request(
ctx,
permission.CreatePermissionRequest{
SessionID: sessionID,
- Path: permissionPath,
+ Path: filePath,
ToolName: EditToolName,
Action: "write",
Description: fmt.Sprintf("Replace content in file %s", filePath),
diff --git a/internal/llm/tools/write.go b/internal/llm/tools/write.go
index f99b3b789..caefc556f 100644
--- a/internal/llm/tools/write.go
+++ b/internal/llm/tools/write.go
@@ -6,7 +6,6 @@ import (
"fmt"
"os"
"path/filepath"
- "strings"
"time"
"github.com/sst/opencode/internal/config"
@@ -161,16 +160,11 @@ func (w *writeTool) Run(ctx context.Context, call ToolCall) (ToolResponse, error
filePath,
)
- rootDir := config.WorkingDirectory()
- permissionPath := filepath.Dir(filePath)
- if strings.HasPrefix(filePath, rootDir) {
- permissionPath = rootDir
- }
p := w.permissions.Request(
ctx,
permission.CreatePermissionRequest{
SessionID: sessionID,
- Path: permissionPath,
+ Path: filePath,
ToolName: WriteToolName,
Action: "write",
Description: fmt.Sprintf("Create file %s", filePath),
diff --git a/internal/tui/components/dialog/permission.go b/internal/tui/components/dialog/permission.go
index d0468d307..5e5b09e1b 100644
--- a/internal/tui/components/dialog/permission.go
+++ b/internal/tui/components/dialog/permission.go
@@ -6,6 +6,7 @@ import (
"github.com/charmbracelet/bubbles/viewport"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
+ "github.com/sst/opencode/internal/config"
"github.com/sst/opencode/internal/diff"
"github.com/sst/opencode/internal/llm/tools"
"github.com/sst/opencode/internal/permission"
@@ -13,6 +14,7 @@ import (
"github.com/sst/opencode/internal/tui/styles"
"github.com/sst/opencode/internal/tui/theme"
"github.com/sst/opencode/internal/tui/util"
+ "path/filepath"
"strings"
)
@@ -204,10 +206,19 @@ func (p *permissionDialogCmp) renderHeader() string {
Render(fmt.Sprintf(": %s", p.permission.ToolName))
pathKey := baseStyle.Foreground(t.TextMuted()).Bold(true).Render("Path")
+
+ // Get the current working directory to display relative path
+ relativePath := p.permission.Path
+ if filepath.IsAbs(relativePath) {
+ if cwd, err := filepath.Rel(config.WorkingDirectory(), relativePath); err == nil {
+ relativePath = cwd
+ }
+ }
+
pathValue := baseStyle.
Foreground(t.Text()).
Width(p.width - lipgloss.Width(pathKey)).
- Render(fmt.Sprintf(": %s", p.permission.Path))
+ Render(fmt.Sprintf(": %s", relativePath))
headerParts := []string{
lipgloss.JoinHorizontal(