11
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
package cc
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// ClaudeProfile represents a Claude settings profile discovered on disk.
|
||||
type ClaudeProfile struct {
|
||||
Name string
|
||||
Path string
|
||||
}
|
||||
|
||||
// ListClaudeProfiles scans dir for *.json files and returns them sorted by Name.
|
||||
// A missing or unreadable dir returns an empty slice without error.
|
||||
func ListClaudeProfiles(dir string) ([]ClaudeProfile, error) {
|
||||
entries, err := os.ReadDir(dir)
|
||||
if err != nil {
|
||||
return []ClaudeProfile{}, nil
|
||||
}
|
||||
var profiles []ClaudeProfile
|
||||
for _, e := range entries {
|
||||
if e.IsDir() || !strings.HasSuffix(e.Name(), ".json") {
|
||||
continue
|
||||
}
|
||||
name := strings.TrimSuffix(e.Name(), ".json")
|
||||
profiles = append(profiles, ClaudeProfile{
|
||||
Name: name,
|
||||
Path: filepath.Join(dir, e.Name()),
|
||||
})
|
||||
}
|
||||
sort.Slice(profiles, func(i, j int) bool {
|
||||
return profiles[i].Name < profiles[j].Name
|
||||
})
|
||||
return profiles, nil
|
||||
}
|
||||
Reference in New Issue
Block a user