init command

This commit is contained in:
Kujtim Hoxha
2025-04-21 19:48:36 +02:00
parent d7569d79c6
commit 3a6a26981a
14 changed files with 753 additions and 35 deletions

View File

@@ -3,6 +3,7 @@ package permission
import (
"errors"
"path/filepath"
"slices"
"sync"
"time"
@@ -14,6 +15,7 @@ import (
var ErrorPermissionDenied = errors.New("permission denied")
type CreatePermissionRequest struct {
SessionID string `json:"session_id"`
ToolName string `json:"tool_name"`
Description string `json:"description"`
Action string `json:"action"`
@@ -37,13 +39,15 @@ type Service interface {
Grant(permission PermissionRequest)
Deny(permission PermissionRequest)
Request(opts CreatePermissionRequest) bool
AutoApproveSession(sessionID string)
}
type permissionService struct {
*pubsub.Broker[PermissionRequest]
sessionPermissions []PermissionRequest
pendingRequests sync.Map
sessionPermissions []PermissionRequest
pendingRequests sync.Map
autoApproveSessions []string
}
func (s *permissionService) GrantPersistant(permission PermissionRequest) {
@@ -69,6 +73,9 @@ func (s *permissionService) Deny(permission PermissionRequest) {
}
func (s *permissionService) Request(opts CreatePermissionRequest) bool {
if slices.Contains(s.autoApproveSessions, opts.SessionID) {
return true
}
dir := filepath.Dir(opts.Path)
if dir == "." {
dir = config.WorkingDirectory()
@@ -76,6 +83,7 @@ func (s *permissionService) Request(opts CreatePermissionRequest) bool {
permission := PermissionRequest{
ID: uuid.New().String(),
Path: dir,
SessionID: opts.SessionID,
ToolName: opts.ToolName,
Description: opts.Description,
Action: opts.Action,
@@ -104,6 +112,10 @@ func (s *permissionService) Request(opts CreatePermissionRequest) bool {
}
}
func (s *permissionService) AutoApproveSession(sessionID string) {
s.autoApproveSessions = append(s.autoApproveSessions, sessionID)
}
func NewPermissionService() Service {
return &permissionService{
Broker: pubsub.NewBroker[PermissionRequest](),