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 }