diff --git a/cmd/a.go b/cmd/a.go index 254306bf32ace3276faab7442b301410b8dc2ffe..f821188114bd80395d7c56da528d123312d2a480 100644 --- a/cmd/a.go +++ b/cmd/a.go @@ -6,6 +6,7 @@ package cmd import ( "fmt" + "os" "git.secluded.site/np/cmd/shared" "github.com/spf13/cobra" @@ -24,11 +25,33 @@ func runArchiveSession(cmd *cobra.Command, args []string) error { return err } - sessionDoc, found, err := shared.ActiveSession(cmd, env) + cwd, err := os.Getwd() + if err != nil { + return fmt.Errorf("determine working directory: %w", err) + } + + // Try to get active session (without printing error message) + sessionDoc, found, err := env.ActiveSession(cmd.Context(), cwd) if err != nil { return err } + if !found { + // Check if there's already an archived session (idempotency check) + archivedDoc, foundArchived, err := env.SessionStore.LatestArchivedByPath(cmd.Context(), cwd) + if err != nil { + return err + } + + if foundArchived { + // Session already archived, idempotent operation + out := cmd.OutOrStdout() + _, _ = fmt.Fprintf(out, "Session %s archived.\n", archivedDoc.SID) + return nil + } + + // No session at all (neither active nor archived) + _, _ = fmt.Fprintln(cmd.OutOrStdout(), "No active session. Start one with `np s`.") return nil } @@ -38,6 +61,6 @@ func runArchiveSession(cmd *cobra.Command, args []string) error { } out := cmd.OutOrStdout() - fmt.Fprintf(out, "Session %s archived.\n", archived.SID) + _, _ = fmt.Fprintf(out, "Session %s archived.\n", archived.SID) return nil }