//go:build !windows package infra // ClaudeFleet describes a single Claude Code session process on the local // machine, cross-joining the live process state (/proc) with the session and // goal metadata that Claude Code persists under ~/.claude. // // It is the data record consumed by the fleetview TUI. Every field is derived // from a single ~/.claude/sessions/.json entry plus its optional // ~/.claude/goals/.json sidecar and the process' own /proc entry. type ClaudeFleet struct { PID int `json:"pid"` KittyPID int `json:"kitty_pid"` // KITTY_PID from the process environ; 0 if not applicable (e.g. remote tmux) SessionID string `json:"session_id"` // Claude Code sessionId (UUID) Rename string `json:"rename"` // display name: short goal if present, else basename(cwd) Target string `json:"target"` // sessionId[:8] + "@" + basename(cwd) Goal string `json:"goal"` // from goals/.json .goal ("" if absent) Phase string `json:"phase"` // from goals/.json .phase ("" if absent) Emojis string `json:"emojis"` // 3 emojis representing the task (from goals .emojis; "" if absent) Name string `json:"name"` // manual rename of the terminal (from goals .rename; "" if none) Status string `json:"status"` // idle|busy|waiting (from sessions/.json) Cwd string `json:"cwd"` // working directory of the session TmuxWindow string `json:"tmux_window"` // "" for now (populated in a later phase) Alive bool `json:"alive"` // process alive AND procStart matches (guards against PID recycling) UpdatedAt int64 `json:"updated_at"` // from sessions/.json .updatedAt (epoch millis) CtxPct int `json:"ctx_pct"` // context window used %, from runtime/.json; -1 if unknown }