Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/agent-deck/launch_cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ func handleLaunch(profile string, args []string) {
newInstance.PostStartSync(3 * time.Second)

// Save again with updated state (session ID, tmux name)
if err := saveSessionData(storage, instances); err != nil {
if err := saveSessionData(storage, instances, groups); err != nil {
out.Error(fmt.Sprintf("failed to save session state: %v", err), ErrCodeInvalidOperation)
os.Exit(1)
}
Expand Down
19 changes: 9 additions & 10 deletions cmd/agent-deck/session_cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ func handleSessionStart(profile string, args []string) {
initialMessage := mergeFlags(*message, *messageShort)

// Load sessions
storage, instances, _, err := loadSessionData(profile)
storage, instances, groups, err := loadSessionData(profile)
if err != nil {
out.Error(err.Error(), ErrCodeNotFound)
os.Exit(1)
Expand Down Expand Up @@ -196,7 +196,7 @@ func handleSessionStart(profile string, args []string) {
inst.PostStartSync(3 * time.Second)

// Save updated state
if err := saveSessionData(storage, instances); err != nil {
if err := saveSessionData(storage, instances, groups); err != nil {
out.Error(fmt.Sprintf("failed to save session state: %v", err), ErrCodeInvalidOperation)
os.Exit(1)
}
Expand Down Expand Up @@ -247,7 +247,7 @@ func handleSessionStop(profile string, args []string) {
out := NewCLIOutput(*jsonOutput, quietMode)

// Load sessions
storage, instances, _, err := loadSessionData(profile)
storage, instances, groups, err := loadSessionData(profile)
if err != nil {
out.Error(err.Error(), ErrCodeNotFound)
os.Exit(1)
Expand Down Expand Up @@ -283,7 +283,7 @@ func handleSessionStop(profile string, args []string) {
}

// Save updated state
if err := saveSessionData(storage, instances); err != nil {
if err := saveSessionData(storage, instances, groups); err != nil {
out.Error(fmt.Sprintf("failed to save session state: %v", err), ErrCodeInvalidOperation)
os.Exit(1)
}
Expand Down Expand Up @@ -321,7 +321,7 @@ func handleSessionRestart(profile string, args []string) {
out := NewCLIOutput(*jsonOutput, quietMode)

// Load sessions
storage, instances, _, err := loadSessionData(profile)
storage, instances, groups, err := loadSessionData(profile)
if err != nil {
out.Error(err.Error(), ErrCodeNotFound)
os.Exit(1)
Expand Down Expand Up @@ -354,7 +354,7 @@ func handleSessionRestart(profile string, args []string) {
}

// Save updated state
if err := saveSessionData(storage, instances); err != nil {
if err := saveSessionData(storage, instances, groups); err != nil {
out.Error(fmt.Sprintf("failed to save session state: %v", err), ErrCodeInvalidOperation)
os.Exit(1)
}
Expand Down Expand Up @@ -982,10 +982,9 @@ func loadSessionData(profile string) (*session.Storage, []*session.Instance, []*
return storage, instances, groupsData, nil
}

// saveSessionData saves session data with groups
func saveSessionData(storage *session.Storage, instances []*session.Instance) error {
// Rebuild group tree from instances
groupTree := session.NewGroupTree(instances)
// saveSessionData saves session data with groups, preserving stored group metadata (sort_order).
func saveSessionData(storage *session.Storage, instances []*session.Instance, groups []*session.GroupData) error {
groupTree := session.NewGroupTreeWithGroups(instances, groups)
return storage.SaveWithGroups(instances, groupTree)
}

Expand Down
8 changes: 4 additions & 4 deletions cmd/agent-deck/try_cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ func handleTry(profile string, args []string) {
}

// Create and start session
storage, instances, _, err := loadSessionData(profile)
storage, instances, groups, err := loadSessionData(profile)
if err != nil {
out.Error(err.Error(), ErrCodeInvalidOperation)
os.Exit(1)
Expand All @@ -127,7 +127,7 @@ func handleTry(profile string, args []string) {
}
inst.PostStartSync(3 * time.Second)
// Save updated state with session ID
_ = saveSessionData(storage, instances)
_ = saveSessionData(storage, instances, groups)
}
out.Print(
fmt.Sprintf("Session: %s (%s)\nPath: %s\n", inst.Title, inst.ID[:8], exp.Path),
Expand Down Expand Up @@ -156,7 +156,7 @@ func handleTry(profile string, args []string) {
instances = append(instances, newInst)

// Save using helper (rebuilds group tree including "experiments" group from instance)
if err := saveSessionData(storage, instances); err != nil {
if err := saveSessionData(storage, instances, groups); err != nil {
out.Error(err.Error(), ErrCodeInvalidOperation)
os.Exit(1)
}
Expand All @@ -169,7 +169,7 @@ func handleTry(profile string, args []string) {

// Capture session ID and re-save (first save at line above was before Start)
newInst.PostStartSync(3 * time.Second)
_ = saveSessionData(storage, instances)
_ = saveSessionData(storage, instances, groups)

action := "Created"
if !created {
Expand Down
10 changes: 5 additions & 5 deletions cmd/agent-deck/worktree_cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ func handleWorktreeCleanup(profile string, args []string) {
out := NewCLIOutput(*jsonOutput, false)

// Load sessions
storage, instances, _, err := loadSessionData(profile)
storage, instances, groups, err := loadSessionData(profile)
if err != nil {
out.Error(fmt.Sprintf("failed to load sessions: %v", err), ErrCodeNotFound)
os.Exit(1)
Expand Down Expand Up @@ -459,8 +459,8 @@ func handleWorktreeCleanup(profile string, args []string) {
}
}

// Save updated session data (uses existing saveSessionData which rebuilds GroupTree)
if err := saveSessionData(storage, remaining); err != nil {
// Save updated session data
if err := saveSessionData(storage, remaining, groups); err != nil {
out.Error(fmt.Sprintf("failed to save session data: %v", err), ErrCodeInvalidOperation)
os.Exit(1)
}
Expand Down Expand Up @@ -523,7 +523,7 @@ func handleWorktreeFinish(profile string, args []string) {
}

// Load sessions
storage, instances, _, err := loadSessionData(profile)
storage, instances, groups, err := loadSessionData(profile)
if err != nil {
out.Error(fmt.Sprintf("failed to load sessions: %v", err), ErrCodeInvalidOperation)
os.Exit(1)
Expand Down Expand Up @@ -668,7 +668,7 @@ func handleWorktreeFinish(profile string, args []string) {
remaining = append(remaining, i)
}
}
if err := saveSessionData(storage, remaining); err != nil {
if err := saveSessionData(storage, remaining, groups); err != nil {
out.Error(fmt.Sprintf("failed to save session data: %v", err), ErrCodeInvalidOperation)
os.Exit(1)
}
Expand Down