From d9f857fb29317f25d2af8f7104802d88b3417a5b Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Mon, 13 Apr 2026 11:04:49 -0400 Subject: [PATCH] fix(events): prevent early events from being dropped before init (#2611) --- internal/cmd/run.go | 5 ++++- internal/cmd/session.go | 26 +++++++++++++++++--------- internal/cmd/stats.go | 15 +++++++++------ 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/internal/cmd/run.go b/internal/cmd/run.go index 054965f5b72441c0fd56e7876963292e813bb135..77247f60a4aa15f467cbfd3e83a43a28d421d4eb 100644 --- a/internal/cmd/run.go +++ b/internal/cmd/run.go @@ -86,7 +86,6 @@ crush run --continue "Follow up on your last response" } event.SetNonInteractive(true) - event.AppInitialized() switch { case sessionID != "": @@ -102,6 +101,8 @@ crush run --continue "Follow up on your last response" } defer cleanup() + event.AppInitialized() + if sessionID != "" { sess, err := resolveSessionByID(ctx, c, ws.ID, sessionID) if err != nil { @@ -127,6 +128,8 @@ crush run --continue "Follow up on your last response" } defer cleanup() + event.AppInitialized() + if !ws.Config().IsConfigured() { return fmt.Errorf("no providers configured - please run 'crush' to set up a provider interactively") } diff --git a/internal/cmd/session.go b/internal/cmd/session.go index 0a1020f9daaac77b1ee32818c255265522c41f09..d9042f4298b67250168042752871fc4899256aaa 100644 --- a/internal/cmd/session.go +++ b/internal/cmd/session.go @@ -107,13 +107,16 @@ func sessionSetup(cmd *cobra.Command) (context.Context, *sessionServices, func() dataDir, _ := cmd.Flags().GetString("data-dir") ctx := cmd.Context() + cfg, err := config.Init("", dataDir, false) + if err != nil { + return nil, nil, nil, fmt.Errorf("failed to initialize config: %w", err) + } if dataDir == "" { - cfg, err := config.Init("", "", false) - if err != nil { - return nil, nil, nil, fmt.Errorf("failed to initialize config: %w", err) - } dataDir = cfg.Config().Options.DataDirectory } + if shouldEnableMetrics(cfg.Config()) { + event.Init() + } conn, err := db.Connect(ctx, dataDir) if err != nil { @@ -130,7 +133,6 @@ func sessionSetup(cmd *cobra.Command) (context.Context, *sessionServices, func() func runSessionList(cmd *cobra.Command, _ []string) error { event.SetNonInteractive(true) - event.SessionListed(sessionListJSON) ctx, svc, cleanup, err := sessionSetup(cmd) if err != nil { @@ -138,6 +140,8 @@ func runSessionList(cmd *cobra.Command, _ []string) error { } defer cleanup() + event.SessionListed(sessionListJSON) + list, err := svc.sessions.List(ctx) if err != nil { return fmt.Errorf("failed to list sessions: %w", err) @@ -253,7 +257,6 @@ func resolveSessionID(ctx context.Context, svc session.Service, id string) (sess func runSessionShow(cmd *cobra.Command, args []string) error { event.SetNonInteractive(true) - event.SessionShown(sessionShowJSON) ctx, svc, cleanup, err := sessionSetup(cmd) if err != nil { @@ -261,6 +264,8 @@ func runSessionShow(cmd *cobra.Command, args []string) error { } defer cleanup() + event.SessionShown(sessionShowJSON) + sess, err := resolveSessionID(ctx, svc.sessions, args[0]) if err != nil { return err @@ -280,7 +285,6 @@ func runSessionShow(cmd *cobra.Command, args []string) error { func runSessionDelete(cmd *cobra.Command, args []string) error { event.SetNonInteractive(true) - event.SessionDeletedCommand(sessionDeleteJSON) ctx, svc, cleanup, err := sessionSetup(cmd) if err != nil { @@ -288,6 +292,8 @@ func runSessionDelete(cmd *cobra.Command, args []string) error { } defer cleanup() + event.SessionDeletedCommand(sessionDeleteJSON) + sess, err := resolveSessionID(ctx, svc.sessions, args[0]) if err != nil { return err @@ -315,7 +321,6 @@ func runSessionDelete(cmd *cobra.Command, args []string) error { func runSessionRename(cmd *cobra.Command, args []string) error { event.SetNonInteractive(true) - event.SessionRenamed(sessionRenameJSON) ctx, svc, cleanup, err := sessionSetup(cmd) if err != nil { @@ -323,6 +328,8 @@ func runSessionRename(cmd *cobra.Command, args []string) error { } defer cleanup() + event.SessionRenamed(sessionRenameJSON) + sess, err := resolveSessionID(ctx, svc.sessions, args[0]) if err != nil { return err @@ -351,7 +358,6 @@ func runSessionRename(cmd *cobra.Command, args []string) error { func runSessionLast(cmd *cobra.Command, _ []string) error { event.SetNonInteractive(true) - event.SessionLastShown(sessionLastJSON) ctx, svc, cleanup, err := sessionSetup(cmd) if err != nil { @@ -359,6 +365,8 @@ func runSessionLast(cmd *cobra.Command, _ []string) error { } defer cleanup() + event.SessionLastShown(sessionLastJSON) + list, err := svc.sessions.List(ctx) if err != nil { return fmt.Errorf("failed to list sessions: %w", err) diff --git a/internal/cmd/stats.go b/internal/cmd/stats.go index 3900acadec059869b1896c8adeb49f93155f17fa..28ee4aafb21a687a6f1f01400aa464e03c3e0df8 100644 --- a/internal/cmd/stats.go +++ b/internal/cmd/stats.go @@ -121,18 +121,21 @@ type HourDayHeatmapPt struct { } func runStats(cmd *cobra.Command, _ []string) error { - event.StatsViewed() - dataDir, _ := cmd.Flags().GetString("data-dir") ctx := cmd.Context() + cfg, err := config.Init("", dataDir, false) + if err != nil { + return fmt.Errorf("failed to initialize config: %w", err) + } if dataDir == "" { - cfg, err := config.Init("", "", false) - if err != nil { - return fmt.Errorf("failed to initialize config: %w", err) - } dataDir = cfg.Config().Options.DataDirectory } + if shouldEnableMetrics(cfg.Config()) { + event.Init() + } + + event.StatsViewed() conn, err := db.Connect(ctx, dataDir) if err != nil {