Skip to content

Project Structure

cli/
├── cmd/shoehorn/
│   ├── main.go                    # Entry point
│   └── commands/
│       ├── root.go                # Root command, global flags, --debug, signal context
│       ├── auth.go                # auth login/status/logout
│       ├── whoami.go              # whoami
│       ├── search.go              # search <query>
│       ├── forge.go               # forge run/molds/execute
│       ├── validate.go            # validate manifests
│       ├── convert.go             # convert between formats
│       ├── addon.go               # addon management
│       ├── addon_publish.go       # addon publish
│       ├── addon_init.go          # addon scaffolding
│       ├── addon_build.go         # addon build
│       ├── addon_dev.go           # addon dev mode
│       └── get/
│           ├── get.go             # get (parent command)
│           ├── entities.go        # get entities / get entity
│           ├── teams.go           # get teams / get team
│           ├── users.go           # get users / get user
│           ├── groups.go          # get groups / get group
│           ├── owned.go           # get owned
│           ├── scorecard.go       # get scorecard
│           └── k8s.go             # get k8s
├── pkg/
│   ├── api/
│   │   ├── client.go              # HTTP client, atomic token, debug logging
│   │   ├── auth.go                # Auth status types + methods
│   │   ├── catalog.go             # Catalog API: entities, teams, users, forge...
│   │   ├── addons.go              # Addon management API
│   │   ├── manifests.go           # Manifest validation + conversion API
│   │   └── errors.go              # Typed errors + sentinels (401-429-5xx)
│   ├── addon/
│   │   ├── scaffold.go            # Addon project scaffolding
│   │   └── builder.go             # Addon bundle building
│   ├── config/
│   │   └── config.go              # Config file, profiles, atomic save
│   ├── logging/
│   │   └── logger.go              # Zap logger factory (--debug / SHOEHORN_DEBUG)
│   ├── tui/
│   │   ├── styles.go              # Shared lipgloss styles
│   │   ├── spinner.go             # RunSpinner() helper
│   │   ├── table.go               # RunTable() interactive table
│   │   └── detail.go              # RenderDetail(), score bars, boxes
│   └── ui/
│       ├── detect.go              # Interactive vs plain mode detection
│       ├── output.go              # JSON/YAML/table rendering
│       └── exit_codes.go          # Typed exit codes (errors.Is based)
└── go.mod