export type SessionState = 'working' | 'waiting' | 'idle' | 'stopped'; export interface Session { id: string; name: string; cli: string; // Workspace-relative folder the agent runs in. Independent of `name` — // renaming never moves anything on disk. null = the workspace root (Files). path: string | null; createdAt: string; everStarted: boolean; running: boolean; state: SessionState; } export interface Cli { id: string; label: string; color: string; available: boolean; ready?: boolean; version?: string | null; setup?: string | null; // how to configure it (shown on the "needs setup" hint) } // Pane arrangement for a group's tiles. Absent/null = auto (grow with agents). export interface GridSpec { cols: number; rows: number } export interface Group { id: string; name: string; sessionIds: string[]; layout?: GridSpec | null; createdAt?: string; } export interface Tree { order: string[]; // refs: "g:" | "s:" groups: Group[]; sessions: Session[]; } export const STATE_LABEL: Record = { working: 'working', waiting: 'your turn', idle: 'idle', stopped: 'stopped', }; export type OverviewFilter = 'all' | 'waiting' | 'working' | 'quiet'; export type MoveTarget = | { kind: 'into'; groupId: string } | { kind: 'pair'; sessionId: string } | { kind: 'before' | 'after'; ref: string };