package main import ( "os" "path" "github.com/sirupsen/logrus" "github.com/spf13/cobra" "reichard.io/aethera/internal/server" "reichard.io/aethera/internal/store" ) var ( params = cliParams{ ListenAddr: getEnvOrDefault("LISTEN", "localhost"), ListenPort: getEnvIntOrDefault("PORT", 8080), DataDir: getEnvOrDefault("DATA_DIR", "./data"), StaticDir: getEnvOrDefault("STATIC_DIR", ""), LLMEndpoint: getEnvOrDefault("LLM_ENDPOINT", ""), LLMKey: getEnvOrDefault("LLM_KEY", ""), } rootCmd = &cobra.Command{Use: "aethera"} ) func init() { rootCmd.PersistentFlags().StringVar(¶ms.DataDir, "data-dir", params.DataDir, "Directory to store generated images (env: AETHERA_DATA_DIR)") rootCmd.PersistentFlags().StringVar(¶ms.StaticDir, "static-dir", params.StaticDir, "Directory to serve static frontend files from instead of embedded assets (env: AETHERA_STATIC_DIR)") rootCmd.PersistentFlags().StringVar(¶ms.ListenAddr, "listen", params.ListenAddr, "Address to listen on (env: AETHERA_LISTEN)") rootCmd.PersistentFlags().IntVar(¶ms.ListenPort, "port", params.ListenPort, "Port to listen on (env: AETHERA_PORT)") rootCmd.PersistentFlags().StringVar(¶ms.LLMEndpoint, "llm-endpoint", params.LLMEndpoint, "LLM API endpoint URL (env: AETHERA_LLM_ENDPOINT)") rootCmd.PersistentFlags().StringVar(¶ms.LLMKey, "llm-key", params.LLMKey, "LLM API key (env: AETHERA_LLM_KEY)") } func main() { // Validate Params if err := params.Validate(); err != nil { logrus.Fatalf("failed to validate parameters: %v", err) } // Initialize Store fileStore, err := store.NewFileStore(path.Join(params.DataDir, "settings.json")) if err != nil { logrus.Fatalf("failed to create store: %v", err) } // Start Server rootCmd.Run = func(cmd *cobra.Command, args []string) { server.StartServer(fileStore, params.DataDir, params.StaticDir, params.ListenAddr, params.ListenPort, params.LLMEndpoint, params.LLMKey) } if err := rootCmd.Execute(); err != nil { logrus.Fatal(err) os.Exit(1) } }