From facef385f7270c0d5e30de414f378517bf8cb493 Mon Sep 17 00:00:00 2001 From: Steve Yegge Date: Sun, 21 Dec 2025 10:44:54 -0800 Subject: [PATCH] feat(mail): add gt mail archive command (alias for delete) --- internal/cmd/mail.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/internal/cmd/mail.go b/internal/cmd/mail.go index 39a927f2..33e561fa 100644 --- a/internal/cmd/mail.go +++ b/internal/cmd/mail.go @@ -120,6 +120,16 @@ This closes the message in beads.`, RunE: runMailDelete, } +var mailArchiveCmd = &cobra.Command{ + Use: "archive ", + Short: "Archive a message", + Long: `Archive a message (alias for delete). + +Removes the message from your inbox by closing it in beads.`, + Args: cobra.ExactArgs(1), + RunE: runMailArchive, +} + var mailCheckCmd = &cobra.Command{ Use: "check", Short: "Check for new mail (for hooks)", @@ -212,6 +222,7 @@ func init() { mailCmd.AddCommand(mailInboxCmd) mailCmd.AddCommand(mailReadCmd) mailCmd.AddCommand(mailDeleteCmd) + mailCmd.AddCommand(mailArchiveCmd) mailCmd.AddCommand(mailCheckCmd) mailCmd.AddCommand(mailThreadCmd) mailCmd.AddCommand(mailReplyCmd) @@ -464,6 +475,33 @@ func runMailDelete(cmd *cobra.Command, args []string) error { return nil } +func runMailArchive(cmd *cobra.Command, args []string) error { + msgID := args[0] + + // Determine which inbox + address := detectSender() + + // All mail uses town beads (two-level architecture) + workDir, err := findMailWorkDir() + if err != nil { + return fmt.Errorf("not in a Gas Town workspace: %w", err) + } + + // Get mailbox + router := mail.NewRouter(workDir) + mailbox, err := router.GetMailbox(address) + if err != nil { + return fmt.Errorf("getting mailbox: %w", err) + } + + if err := mailbox.Delete(msgID); err != nil { + return fmt.Errorf("archiving message: %w", err) + } + + fmt.Printf("%s Message archived\n", style.Bold.Render("✓")) + return nil +} + // findMailWorkDir returns the town root for all mail operations. // // Two-level beads architecture: