r.go

 1// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
 2//
 3// SPDX-License-Identifier: AGPL-3.0-or-later
 4
 5package cmd
 6
 7import (
 8	"fmt"
 9	"strings"
10
11	"git.secluded.site/np/cmd/shared"
12	"git.secluded.site/np/internal/task"
13	"github.com/spf13/cobra"
14)
15
16var rCmd = &cobra.Command{
17	Use:   "r",
18	Short: "Resume session",
19	Long:  `Resume an interrupted session in a new context window`,
20	RunE:  runResume,
21}
22
23func runResume(cmd *cobra.Command, args []string) error {
24	env, err := shared.Environment(cmd)
25	if err != nil {
26		return err
27	}
28
29	sessionDoc, found, err := shared.ActiveSession(cmd, env)
30	if err != nil {
31		return err
32	}
33	if !found {
34		return nil
35	}
36
37	state, err := shared.PrintPlan(cmd, env, sessionDoc.SID)
38	if err != nil {
39		return err
40	}
41
42	// Print instructions for resuming work
43	out := cmd.OutOrStdout()
44	_, _ = fmt.Fprintln(out, strings.Repeat("-", 80))
45	_, _ = fmt.Fprintln(out, env.Localizer.T("session.resume.header"))
46	_, _ = fmt.Fprintln(out, env.Localizer.T("session.resume.guidance"))
47
48	// Provide context about pending work
49	pendingCount := 0
50	inProgressCount := 0
51	for _, t := range state.Tasks {
52		switch t.Status {
53		case task.StatusPending:
54			pendingCount++
55		case task.StatusInProgress:
56			inProgressCount++
57		}
58	}
59
60	if inProgressCount > 0 {
61		_, _ = fmt.Fprintf(cmd.OutOrStdout(), env.Localizer.T("session.resume.in_progress_count"), inProgressCount)
62	}
63	if pendingCount > 0 {
64		_, _ = fmt.Fprintf(cmd.OutOrStdout(), env.Localizer.T("session.resume.pending_count"), pendingCount)
65	}
66
67	return nil
68}