runSubcommand handles the 'server' and 'connect' subcommands. These have their own initialization flow separate from the standard CLI.
(subcmd string, args []string)
| 233 | // runSubcommand handles the 'server' and 'connect' subcommands. |
| 234 | // These have their own initialization flow separate from the standard CLI. |
| 235 | func runSubcommand(subcmd string, args []string) { |
| 236 | i18n.Init() |
| 237 | |
| 238 | // Load .env |
| 239 | envFilePath := os.Getenv("CHATCLI_DOTENV") |
| 240 | if envFilePath == "" { |
| 241 | envFilePath = ".env" |
| 242 | } else { |
| 243 | expanded, err := utils.ExpandPath(envFilePath) |
| 244 | if err == nil { |
| 245 | envFilePath = expanded |
| 246 | } |
| 247 | } |
| 248 | _ = godotenv.Load(envFilePath) |
| 249 | theme.InitFromEnv() |
| 250 | |
| 251 | logger, err := utils.InitializeLogger() |
| 252 | if err != nil { |
| 253 | fmt.Fprintf(os.Stderr, "Failed to initialize logger: %v\n", err) |
| 254 | os.Exit(1) |
| 255 | } |
| 256 | |
| 257 | config.InitGlobal(logger) |
| 258 | config.Global.Load() |
| 259 | utils.ApplyGlobalTLSTrust(logger) |
| 260 | |
| 261 | defer func() { |
| 262 | if err := logger.Sync(); err != nil { |
| 263 | msg := err.Error() |
| 264 | if !strings.Contains(msg, "/dev/stdout") && |
| 265 | !strings.Contains(msg, "/dev/stderr") && |
| 266 | !strings.Contains(msg, "invalid argument") && |
| 267 | !strings.Contains(msg, "inappropriate ioctl") { |
| 268 | fmt.Fprintf(os.Stderr, "Error closing logger: %v\n", err) |
| 269 | } |
| 270 | } |
| 271 | }() |
| 272 | |
| 273 | llmMgr, err := manager.NewLLMManager(logger) |
| 274 | if err != nil { |
| 275 | logger.Fatal("Failed to initialize LLMManager", zap.Error(err)) |
| 276 | } |
| 277 | |
| 278 | ctx, cancel := context.WithCancel(context.Background()) |
| 279 | defer cancel() |
| 280 | |
| 281 | switch subcmd { |
| 282 | case "server", "serve": |
| 283 | if err := cmd.RunServer(args, llmMgr, logger); err != nil { |
| 284 | logger.Fatal("Server failed", zap.Error(err)) |
| 285 | } |
| 286 | case "connect": |
| 287 | if err := cmd.RunConnect(ctx, args, llmMgr, logger); err != nil { |
| 288 | fmt.Fprintf(os.Stderr, "Error: %v\n", err) |
| 289 | os.Exit(1) |
| 290 | } |
| 291 | case "watch": |
| 292 | if err := cmd.RunWatch(ctx, args, llmMgr, logger); err != nil { |
no test coverage detected