package main import ( "fmt" "os" "github.com/spf13/cobra" "atcr.io/pkg/labeler" ) var configFile string var rootCmd = &cobra.Command{ Use: "atcr-labeler", Short: "ATCR Labeler Service - ATProto content moderation", } var serveCmd = &cobra.Command{ Use: "serve", Short: "Start the labeler service", Long: `Start the ATCR labeler service with admin UI and subscribeLabels endpoint. Configuration is loaded from the appview config YAML (labeler section). Use --config to specify the config file path.`, Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { cfg, err := labeler.LoadConfig(configFile) if err != nil { return fmt.Errorf("failed to load config: %w", err) } server, err := labeler.NewServer(cfg) if err != nil { return fmt.Errorf("failed to initialize labeler: %w", err) } return server.Serve() }, } var configCmd = &cobra.Command{ Use: "config", Short: "Configuration management commands", } var configInitCmd = &cobra.Command{ Use: "init [path]", Short: "Generate an example configuration file", Long: `Generate an example YAML configuration file with all available options.`, Args: cobra.MaximumNArgs(1), RunE: func(cmd *cobra.Command, args []string) error { yamlBytes, err := labeler.ExampleYAML() if err != nil { return fmt.Errorf("failed to generate example config: %w", err) } if len(args) == 1 { if err := os.WriteFile(args[0], yamlBytes, 0644); err != nil { return fmt.Errorf("failed to write config file: %w", err) } fmt.Fprintf(os.Stderr, "Wrote example config to %s\n", args[0]) return nil } fmt.Print(string(yamlBytes)) return nil }, } func init() { serveCmd.Flags().StringVarP(&configFile, "config", "c", "", "path to YAML configuration file") configCmd.AddCommand(configInitCmd) rootCmd.AddCommand(serveCmd) rootCmd.AddCommand(configCmd) rootCmd.AddCommand(plcCmd) } func main() { if err := rootCmd.Execute(); err != nil { os.Exit(1) } }