package session import ( "time" "github.com/fmartingr/ccrm/daemon/internal/claude" ) // Status represents the state of a session. type Status string const ( StatusStarting Status = "starting" StatusActive Status = "active" StatusIdle Status = "idle" StatusWaitingPermission Status = "waiting_permission" StatusStopped Status = "stopped" ) // Mode represents how a session is currently being operated. type Mode string const ( ModeSubprocess Mode = "subprocess" // daemon-controlled via subprocess protocol ModeInteractive Mode = "interactive" // user-attached via tmux ) // Session tracks a Claude Code session. type Session struct { Name string `json:"name"` TmuxSession string `json:"tmux_session"` // always set to real tmux session name ProjectPath string `json:"project_path"` ClaudeSessionID string `json:"claude_session_id"` TranscriptPath string `json:"transcript_path"` LogPath string `json:"log_path"` // path to session JSONL log Status Status `json:"status"` Mode Mode `json:"mode"` IsWorktree bool `json:"is_worktree"` WorktreeBranch string `json:"worktree_branch"` CreatedAt time.Time `json:"created_at"` LastEventAt time.Time `json:"last_event_at"` PendingPrompts []string `json:"-"` ClaudeArgs []string `json:"-"` // original claude args for respawning ExplicitStop bool `json:"-"` // true when user called Stop/Kill // Subprocess mode only — not serialized Process *claude.Process `json:"-"` }