# CLAUDE-SESSION.md

Session interface and code conventions for the Maestro codebase. For the main guide, see [[CLAUDE.md]].

## Session Interface

Key fields on the Session object (abbreviated - see `src/renderer/types/index.ts` for full definition):

```typescript
interface Session {
  // Identity
  id: string;
  name: string;
  groupId?: string;             // Session grouping
  toolType: ToolType;           // 'claude-code' | 'codex' | 'opencode' | 'terminal'
  state: SessionState;          // 'idle' | 'busy' | 'error' | 'connecting'
  inputMode: 'ai' | 'terminal'; // Which process receives input
  bookmarked?: boolean;         // Pinned to top

  // Paths
  cwd: string;                  // Current working directory (can change via cd)
  projectRoot: string;          // Initial directory (never changes, used for session storage)
  fullPath: string;             // Full resolved path

  // Processes
  aiPid: number;                // AI process ID
  port: number;                 // Web server communication port

  // Multi-Tab Support (AI Tabs)
  aiTabs: AITab[];              // Multiple conversation tabs
  activeTabId: string;          // Currently active AI tab
  closedTabHistory: ClosedTab[]; // Undo stack for closed AI tabs

  // File Preview Tabs
  filePreviewTabs: FilePreviewTab[]; // Open file preview tabs
  activeFileTabId: string | null;    // Active file tab (null if AI tab active)
  unifiedTabOrder: UnifiedTabRef[];  // Visual order of all tabs (AI + file)
  closedUnifiedTabHistory: ClosedUnifiedTab[]; // Unified undo stack for Cmd+Shift+T

  // Logs (per-tab)
  shellLogs: LogEntry[];        // Terminal output history

  // Execution Queue
  executionQueue: QueuedItem[]; // Sequential execution queue

  // Usage & Stats
  usageStats?: UsageStats;      // Token usage and cost
  contextUsage: number;         // Context window usage percentage
  workLog: WorkLogItem[];       // Work tracking

  // Git Integration
  isGitRepo: boolean;           // Git features enabled
  changedFiles: FileArtifact[]; // Git change tracking
  gitBranches?: string[];       // Branch cache for completion
  gitTags?: string[];           // Tag cache for completion

  // File Explorer
  fileTree: any[];              // File tree structure
  fileExplorerExpanded: string[]; // Expanded folder paths
  fileExplorerScrollPos: number; // Scroll position

  // Web/Live Sessions
  isLive: boolean;              // Accessible via web interface
  liveUrl?: string;             // Live session URL

  // Auto Run
  autoRunFolderPath?: string;   // Auto Run document folder
  autoRunSelectedFile?: string; // Selected document
  autoRunMode?: 'edit' | 'preview'; // Current mode

  // Command History
  aiCommandHistory?: string[];  // AI input history
  shellCommandHistory?: string[]; // Terminal input history

  // Error Handling
  agentError?: AgentError;        // Current agent error (auth, tokens, rate limit, etc.)
  agentErrorPaused?: boolean;     // Input blocked while error modal shown
}

interface AITab {
  id: string;
  name: string;
  logs: LogEntry[];             // Tab-specific conversation history
  agentSessionId?: string;      // Agent session for this tab
  scrollTop?: number;
  draftInput?: string;
}

interface FilePreviewTab {
  id: string;                   // Unique tab ID (UUID)
  path: string;                 // Full file path
  name: string;                 // Filename without extension
  extension: string;            // File extension with dot (e.g., '.md')
  content: string;              // File content
  scrollTop: number;            // Preserved scroll position
  searchQuery: string;          // Preserved search query
  editMode: boolean;            // Whether tab was in edit mode
  editContent?: string;         // Unsaved edit content
  createdAt: number;            // Timestamp for ordering
  lastModified: number;         // File modification time
  sshRemoteId?: string;         // SSH remote ID for remote files
  isLoading?: boolean;          // True while loading remote content
}

// Unified tab references for ordering
type UnifiedTabRef = { type: 'ai' | 'file'; id: string };
```

---

## Code Conventions

### TypeScript
- Strict mode enabled
- Interface definitions for all data structures
- Types exported via `preload.ts` for renderer

### React Components
- Functional components with hooks
- Tailwind for layout, inline styles for theme colors
- `tabIndex={-1}` + `outline-none` for programmatic focus

### Commit Messages
```
feat: new feature
fix: bug fix
docs: documentation
refactor: code refactoring
```

**IMPORTANT**: Do NOT create a `CHANGELOG.md` file. This project does not use changelogs - all change documentation goes in commit messages and PR descriptions only.
