chore: make permissions config independent

Kujtim Hoxha created

Change summary

internal/app/app.go               | 6 +++---
internal/permission/permission.go | 7 ++++---
2 files changed, 7 insertions(+), 6 deletions(-)

Detailed changes

internal/app/app.go 🔗

@@ -45,19 +45,19 @@ func New(ctx context.Context, conn *sql.DB) (*App, error) {
 	messages := message.NewService(q)
 	files := history.NewService(q, conn)
 
+	cfg := config.Get()
+
 	app := &App{
 		Sessions:    sessions,
 		Messages:    messages,
 		History:     files,
-		Permissions: permission.NewPermissionService(),
+		Permissions: permission.NewPermissionService(cfg.WorkingDir()),
 		LSPClients:  make(map[string]*lsp.Client),
 	}
 
 	// Initialize LSP clients in the background
 	go app.initLSPClients(ctx)
 
-	cfg := config.Get()
-
 	// TODO: remove the concept of agent config most likely
 	coderAgentCfg := cfg.Agents["coder"]
 	if coderAgentCfg.ID == "" {

internal/permission/permission.go 🔗

@@ -6,7 +6,6 @@ import (
 	"slices"
 	"sync"
 
-	"github.com/charmbracelet/crush/internal/config"
 	"github.com/charmbracelet/crush/internal/pubsub"
 	"github.com/google/uuid"
 )
@@ -44,6 +43,7 @@ type Service interface {
 type permissionService struct {
 	*pubsub.Broker[PermissionRequest]
 
+	workingDir            string
 	sessionPermissions    []PermissionRequest
 	sessionPermissionsMu  sync.RWMutex
 	pendingRequests       sync.Map
@@ -87,7 +87,7 @@ func (s *permissionService) Request(opts CreatePermissionRequest) bool {
 
 	dir := filepath.Dir(opts.Path)
 	if dir == "." {
-		dir = config.Get().WorkingDir()
+		dir = s.workingDir
 	}
 	permission := PermissionRequest{
 		ID:          uuid.New().String(),
@@ -125,9 +125,10 @@ func (s *permissionService) AutoApproveSession(sessionID string) {
 	s.autoApproveSessionsMu.Unlock()
 }
 
-func NewPermissionService() Service {
+func NewPermissionService(workingDir string) Service {
 	return &permissionService{
 		Broker:             pubsub.NewBroker[PermissionRequest](),
+		workingDir:         workingDir,
 		sessionPermissions: make([]PermissionRequest, 0),
 	}
 }