From 1d34eb6f2b9423669148eac7b9407de38e6bf503 Mon Sep 17 00:00:00 2001 From: Pedram Amini Date: Sun, 11 Jan 2026 12:20:36 -0600 Subject: [PATCH] ## CHANGES MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added multi-document Auto Run progress fields across IPC and WebSocket state ๐Ÿ“š - Web clients now receive aggregated task totals and completions across documents ๐Ÿ“ˆ - Active tab UI docs expanded with screenshot and richer contribution details ๐Ÿ–ผ๏ธ - Canonical `activeTab` lookup is now memoized to kill repeated O(n) finds โšก - Staged images, logs, and prompt tab toggles now reuse memoized `activeTab` ๐Ÿง  - Tab-completion suggestions now debounce input only while menu is open โŒจ๏ธ - @mention suggestions now debounce filter only while menu is open ๐Ÿ”Ž - Disabling worktrees now removes all sub-agents and reports counts ๐Ÿงน - Added performance guidance: debounce, throttle, batching, virtualization, parallel IPC ๐Ÿš€ - Bumped version to 0.14.5 for this release tag ๐Ÿท๏ธ --- CLAUDE.md | 143 ++++++++++++++++++ docs/screenshots/symphony-active.png | Bin 0 -> 115320 bytes docs/symphony.md | 16 +- package.json | 2 +- src/main/index.ts | 5 + src/main/preload.ts | 5 + .../web-server/services/broadcastService.ts | 5 + src/renderer/App.tsx | 73 +++++---- src/renderer/global.d.ts | 5 + src/renderer/hooks/batch/useBatchProcessor.ts | 7 +- src/web/hooks/useWebSocket.ts | 5 + 11 files changed, 234 insertions(+), 32 deletions(-) create mode 100644 docs/screenshots/symphony-active.png diff --git a/CLAUDE.md b/CLAUDE.md index 0750722c..d2558bf6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -646,6 +646,20 @@ const Component = () => { }; ``` +**Memoize helper function results used in render body:** +```typescript +// BAD: O(n) lookup on every keystroke (runs on every render) +const activeTab = activeSession ? getActiveTab(activeSession) : undefined; +// Then used multiple times in JSX... + +// GOOD: Memoize once, use everywhere +const activeTab = useMemo( + () => activeSession ? getActiveTab(activeSession) : undefined, + [activeSession?.aiTabs, activeSession?.activeTabId] +); +// Use activeTab directly in JSX - no repeated lookups +``` + ### Data Structure Pre-computation **Build indices once, reuse in renders:** @@ -683,6 +697,135 @@ import * as fsPromises from 'fs/promises'; fsPromises.unlink(tempFile).catch(() => {}); ``` +### Debouncing and Throttling + +**Use debouncing for user input and persistence:** +```typescript +// Session persistence uses 2-second debounce to prevent excessive disk I/O +// See: src/renderer/hooks/utils/useDebouncedPersistence.ts +const { persist, isPending } = useDebouncedPersistence(session, 2000); + +// Always flush on visibility change and beforeunload to prevent data loss +useEffect(() => { + const handleVisibilityChange = () => { + if (document.hidden) flushPending(); + }; + document.addEventListener('visibilitychange', handleVisibilityChange); + window.addEventListener('beforeunload', flushPending); + return () => { /* cleanup */ }; +}, []); +``` + +**Debounce expensive search operations:** +```typescript +// BAD: Fuzzy matching all files on every keystroke +const suggestions = useMemo(() => { + return getAtMentionSuggestions(atMentionFilter); // Runs 2000+ fuzzy matches per keystroke +}, [atMentionFilter]); + +// GOOD: Debounce the filter value first (100ms is imperceptible) +const debouncedFilter = useDebouncedValue(atMentionFilter, 100); +const suggestions = useMemo(() => { + return getAtMentionSuggestions(debouncedFilter); // Only runs after user stops typing +}, [debouncedFilter]); +``` + +**Use throttling for high-frequency events:** +```typescript +// Scroll handlers should be throttled to ~4ms (240fps max) +const handleScroll = useThrottledCallback(() => { + // expensive scroll logic +}, 4); +``` + +### Update Batching + +**Batch rapid state updates during streaming:** +```typescript +// During AI streaming, IPC triggers 100+ updates/second +// Without batching: 100+ React re-renders/second +// With batching at 150ms: ~6 renders/second +// See: src/renderer/hooks/session/useBatchedSessionUpdates.ts + +// Update types that get batched: +// - appendLog (accumulated via string chunks) +// - setStatus (last wins) +// - updateUsage (accumulated) +// - updateContextUsage (high water mark - never decreases) +``` + +### Virtual Scrolling + +**Use virtual scrolling for large lists (100+ items):** +```typescript +// See: src/renderer/components/HistoryPanel.tsx +import { useVirtualizer } from '@tanstack/react-virtual'; + +const virtualizer = useVirtualizer({ + count: items.length, + getScrollElement: () => scrollRef.current, + estimateSize: () => 40, // estimated row height +}); +``` + +### IPC Parallelization + +**Parallelize independent async operations:** +```typescript +// BAD: Sequential awaits (4 ร— 50ms = 200ms) +const branches = await git.branch(cwd); +const remotes = await git.remote(cwd); +const status = await git.status(cwd); + +// GOOD: Parallel execution (max 50ms = 4x faster) +const [branches, remotes, status] = await Promise.all([ + git.branch(cwd), + git.remote(cwd), + git.status(cwd), +]); +``` + +### Visibility-Aware Operations + +**Pause background operations when app is hidden:** +```typescript +// See: src/renderer/hooks/git/useGitStatusPolling.ts +const handleVisibilityChange = () => { + if (document.hidden) { + stopPolling(); // Save battery/CPU when backgrounded + } else { + startPolling(); + } +}; +document.addEventListener('visibilitychange', handleVisibilityChange); +``` + +### Context Provider Memoization + +**Always memoize context values:** +```typescript +// BAD: New object on every render triggers all consumers to re-render +return {children}; + +// GOOD: Memoized value only changes when dependencies change +const contextValue = useMemo(() => ({ + sessions, + updateSession, +}), [sessions, updateSession]); +return {children}; +``` + +### Event Listener Cleanup + +**Always clean up event listeners:** +```typescript +useEffect(() => { + const handler = (e: Event) => { /* ... */ }; + document.addEventListener('click', handler); + return () => document.removeEventListener('click', handler); +}, []); +``` + ## Onboarding Wizard The wizard (`src/renderer/components/Wizard/`) guides new users through first-run setup, creating AI sessions with Auto Run documents. diff --git a/docs/screenshots/symphony-active.png b/docs/screenshots/symphony-active.png new file mode 100644 index 0000000000000000000000000000000000000000..54dea5ea6eb892030ef8c1afd7421f7dd298cd36 GIT binary patch literal 115320 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

gJDsM~*=Kr0N?oRu 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%0DWd)VBUQC*) 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 qBOztP>987qx?gR56ZZMsk^Li=e-(23UM_ { if (webServer) { // Always call broadcastAutoRunState - it stores the state for new clients diff --git a/src/main/preload.ts b/src/main/preload.ts index d475d492..128e6d20 100644 --- a/src/main/preload.ts +++ b/src/main/preload.ts @@ -343,6 +343,11 @@ contextBridge.exposeInMainWorld('maestro', { completedTasks: number; currentTaskIndex: number; isStopping?: boolean; + // Multi-document progress fields + totalDocuments?: number; + currentDocumentIndex?: number; + totalTasksAcrossAllDocs?: number; + completedTasksAcrossAllDocs?: number; } | null) => ipcRenderer.invoke('web:broadcastAutoRunState', sessionId, state), // Broadcast tab changes to web clients (for tab sync) diff --git a/src/main/web-server/services/broadcastService.ts b/src/main/web-server/services/broadcastService.ts index 689a9853..5af0610f 100644 --- a/src/main/web-server/services/broadcastService.ts +++ b/src/main/web-server/services/broadcastService.ts @@ -95,6 +95,11 @@ export interface AutoRunState { completedTasks: number; currentTaskIndex: number; isStopping?: boolean; + // Multi-document progress fields + totalDocuments?: number; // Total number of documents in the run + currentDocumentIndex?: number; // Current document being processed (0-based) + totalTasksAcrossAllDocs?: number; // Total tasks across all documents + completedTasksAcrossAllDocs?: number; // Completed tasks across all documents } /** diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index 1e4d6e9a..97987315 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -38,6 +38,7 @@ import { // Settings useSettings, useDebouncedPersistence, + useDebouncedValue, // Session management useActivityTracker, useHandsOnTimeTracker, @@ -2865,9 +2866,7 @@ function MaestroConsoleInner() { // Keyboard navigation state const [selectedSidebarIndex, setSelectedSidebarIndex] = useState(0); // Note: activeSession is now provided by SessionContext - const activeTabForError = useMemo(() => ( - activeSession ? getActiveTab(activeSession) : null - ), [activeSession]); + // Note: activeTab is memoized later at line ~3795 - use that for all tab operations // Discover slash commands when a session becomes active and doesn't have them yet // Fetches custom Claude commands from .claude/commands/ directories (fast, file system read) @@ -3790,7 +3789,12 @@ You are taking over this conversation. Based on the context above, provide a bri // For AI mode: use active tab's inputValue (stored per-tab) // For terminal mode: use local state (shared across tabs) const isAiMode = activeSession?.inputMode === 'ai'; - const activeTab = activeSession ? getActiveTab(activeSession) : undefined; + // PERF: Memoize activeTab lookup to avoid O(n) .find() on every keystroke + // This is THE canonical activeTab for the component - use this instead of calling getActiveTab() + const activeTab = useMemo( + () => activeSession ? getActiveTab(activeSession) : undefined, + [activeSession?.aiTabs, activeSession?.activeTabId] + ); const isResumingSession = !!activeTab?.agentSessionId; const canAttachImages = useMemo(() => { if (!activeSession || activeSession.inputMode !== 'ai') return false; @@ -3895,12 +3899,11 @@ You are taking over this conversation. Based on the context above, provide a bri // Images are stored per-tab and only used in AI mode // Get staged images from the active tab + // PERF: Use memoized activeTab instead of calling getActiveTab again const stagedImages = useMemo(() => { if (!activeSession || activeSession.inputMode !== 'ai') return []; - const activeTab = getActiveTab(activeSession); return activeTab?.stagedImages || []; - - }, [activeSession?.aiTabs, activeSession?.activeTabId, activeSession?.inputMode]); + }, [activeTab?.stagedImages, activeSession?.inputMode]); // Set staged images on the active tab const setStagedImages = useCallback((imagesOrUpdater: string[] | ((prev: string[]) => string[])) => { @@ -3975,22 +3978,25 @@ You are taking over this conversation. Based on the context above, provide a bri const activeSessionInputMode = activeSession?.inputMode; // Tab completion suggestions (must be after inputValue is defined) - // PERF: Depend on specific session properties, not the entire activeSession object + // PERF: Only debounce when menu is open to avoid unnecessary state updates during normal typing + const debouncedInputForTabCompletion = useDebouncedValue(tabCompletionOpen ? inputValue : '', 50); const tabCompletionSuggestions = useMemo(() => { if (!tabCompletionOpen || !activeSessionId || activeSessionInputMode !== 'terminal') { return []; } - return getTabCompletionSuggestions(inputValue, tabCompletionFilter); - }, [tabCompletionOpen, activeSessionId, activeSessionInputMode, inputValue, tabCompletionFilter, getTabCompletionSuggestions]); + return getTabCompletionSuggestions(debouncedInputForTabCompletion, tabCompletionFilter); + }, [tabCompletionOpen, activeSessionId, activeSessionInputMode, debouncedInputForTabCompletion, tabCompletionFilter, getTabCompletionSuggestions]); // @ mention suggestions for AI mode - // PERF: Depend on specific session properties, not the entire activeSession object + // PERF: Only debounce when menu is open to avoid unnecessary state updates during normal typing + // When menu is closed, pass empty string to skip debounce hook overhead entirely + const debouncedAtMentionFilter = useDebouncedValue(atMentionOpen ? atMentionFilter : '', 100); const atMentionSuggestions = useMemo(() => { if (!atMentionOpen || !activeSessionId || activeSessionInputMode !== 'ai') { return []; } - return getAtMentionSuggestions(atMentionFilter); - }, [atMentionOpen, activeSessionId, activeSessionInputMode, atMentionFilter, getAtMentionSuggestions]); + return getAtMentionSuggestions(debouncedAtMentionFilter); + }, [atMentionOpen, activeSessionId, activeSessionInputMode, debouncedAtMentionFilter, getAtMentionSuggestions]); // Sync file tree selection to match tab completion suggestion // This highlights the corresponding file/folder in the right panel when navigating tab completion @@ -6207,7 +6213,8 @@ You are taking over this conversation. Based on the context above, provide a bri }, [activeSession?.id, activeSession?.autoRunFolderPath, activeSession?.autoRunSelectedFile, activeSession?.sshRemoteId, activeSession?.sessionSshRemoteConfig?.remoteId, loadTaskCounts]); // Auto-scroll logs - const activeTabLogs = activeSession ? getActiveTab(activeSession)?.logs : undefined; + // PERF: Use memoized activeTab instead of calling getActiveTab() again + const activeTabLogs = activeTab?.logs; useEffect(() => { logsEndRef.current?.scrollIntoView({ behavior: 'instant' }); }, [activeTabLogs, activeSession?.shellLogs, activeSession?.inputMode]); @@ -8569,17 +8576,31 @@ You are taking over this conversation. Based on the context above, provide a bri const handleDisableWorktreeConfig = useCallback(() => { if (!activeSession) return; - setSessions(prev => prev.map(s => - s.id === activeSession.id - ? { ...s, worktreeConfig: undefined, worktreeParentPath: undefined } - : s - )); + + // Count worktree children that will be removed + const worktreeChildCount = sessions.filter(s => s.parentSessionId === activeSession.id).length; + + setSessions(prev => prev + // Remove all worktree children of this parent + .filter(s => s.parentSessionId !== activeSession.id) + // Clear worktree config on the parent + .map(s => + s.id === activeSession.id + ? { ...s, worktreeConfig: undefined, worktreeParentPath: undefined } + : s + ) + ); + + const childMessage = worktreeChildCount > 0 + ? ` Removed ${worktreeChildCount} worktree sub-agent${worktreeChildCount > 1 ? 's' : ''}.` + : ''; + addToast({ type: 'success', title: 'Worktrees Disabled', - message: 'Worktree configuration cleared for this agent.', + message: `Worktree configuration cleared for this agent.${childMessage}`, }); - }, [activeSession, addToast]); + }, [activeSession, sessions, addToast]); const handleCreateWorktreeFromConfig = useCallback(async (branchName: string, basePath: string) => { if (!activeSession || !basePath) { @@ -9716,11 +9737,11 @@ You are taking over this conversation. Based on the context above, provide a bri setPromptComposerStagedImages={activeGroupChatId ? setGroupChatStagedImages : (canAttachImages ? setStagedImages : undefined)} onPromptImageAttachBlocked={activeGroupChatId || !blockCodexResumeImages ? undefined : showImageAttachBlockedNotice} onPromptOpenLightbox={handleSetLightboxImage} - promptTabSaveToHistory={activeGroupChatId ? false : (activeSession ? getActiveTab(activeSession)?.saveToHistory ?? false : false)} + promptTabSaveToHistory={activeGroupChatId ? false : (activeTab?.saveToHistory ?? false)} onPromptToggleTabSaveToHistory={activeGroupChatId ? undefined : handlePromptToggleTabSaveToHistory} - promptTabReadOnlyMode={activeGroupChatId ? groupChatReadOnlyMode : (activeSession ? getActiveTab(activeSession)?.readOnlyMode ?? false : false)} + promptTabReadOnlyMode={activeGroupChatId ? groupChatReadOnlyMode : (activeTab?.readOnlyMode ?? false)} onPromptToggleTabReadOnlyMode={handlePromptToggleTabReadOnlyMode} - promptTabShowThinking={activeGroupChatId ? false : (activeSession ? getActiveTab(activeSession)?.showThinking ?? false : false)} + promptTabShowThinking={activeGroupChatId ? false : (activeTab?.showThinking ?? false)} onPromptToggleTabShowThinking={activeGroupChatId ? undefined : handlePromptToggleTabShowThinking} promptSupportsThinking={!activeGroupChatId && hasActiveSessionCapability('supportsThinkingDisplay')} promptEnterToSend={enterToSendAI} @@ -10629,8 +10650,8 @@ You are taking over this conversation. Based on the context above, provide a bri setPreviewFile(filePreviewHistory[index]); } }} - onClearAgentError={activeTabForError?.agentError && activeSession ? () => handleClearAgentError(activeSession.id, activeTabForError.id) : undefined} - onShowAgentErrorModal={activeTabForError?.agentError && activeSession ? () => setAgentErrorModalSessionId(activeSession.id) : undefined} + onClearAgentError={activeTab?.agentError && activeSession ? () => handleClearAgentError(activeSession.id, activeTab.id) : undefined} + onShowAgentErrorModal={activeTab?.agentError && activeSession ? () => setAgentErrorModalSessionId(activeSession.id) : undefined} showFlashNotification={(message: string) => { setSuccessFlashNotification(message); setTimeout(() => setSuccessFlashNotification(null), 2000); diff --git a/src/renderer/global.d.ts b/src/renderer/global.d.ts index 9ef7eee8..df5e7836 100644 --- a/src/renderer/global.d.ts +++ b/src/renderer/global.d.ts @@ -252,6 +252,11 @@ interface MaestroAPI { completedTasks: number; currentTaskIndex: number; isStopping?: boolean; + // Multi-document progress fields + totalDocuments?: number; + currentDocumentIndex?: number; + totalTasksAcrossAllDocs?: number; + completedTasksAcrossAllDocs?: number; } | null) => Promise; broadcastTabsChange: (sessionId: string, aiTabs: Array<{ id: string; diff --git a/src/renderer/hooks/batch/useBatchProcessor.ts b/src/renderer/hooks/batch/useBatchProcessor.ts index 19784919..c38777e8 100644 --- a/src/renderer/hooks/batch/useBatchProcessor.ts +++ b/src/renderer/hooks/batch/useBatchProcessor.ts @@ -259,13 +259,18 @@ export function useBatchProcessor({ * receive state updates without waiting for React's render cycle. */ const broadcastAutoRunState = useCallback((sessionId: string, state: BatchRunState | null) => { - if (state && (state.isRunning || state.completedTasks > 0)) { + if (state && (state.isRunning || state.completedTasks > 0 || state.completedTasksAcrossAllDocs > 0)) { window.maestro.web.broadcastAutoRunState(sessionId, { isRunning: state.isRunning, totalTasks: state.totalTasks, completedTasks: state.completedTasks, currentTaskIndex: state.currentTaskIndex, isStopping: state.isStopping, + // Multi-document progress fields + totalDocuments: state.documents?.length ?? 0, + currentDocumentIndex: state.currentDocumentIndex, + totalTasksAcrossAllDocs: state.totalTasksAcrossAllDocs, + completedTasksAcrossAllDocs: state.completedTasksAcrossAllDocs, }); } else { // When not running and no completed tasks, broadcast null to clear the state diff --git a/src/web/hooks/useWebSocket.ts b/src/web/hooks/useWebSocket.ts index 83321389..da196e81 100644 --- a/src/web/hooks/useWebSocket.ts +++ b/src/web/hooks/useWebSocket.ts @@ -91,6 +91,11 @@ export interface AutoRunState { completedTasks: number; currentTaskIndex: number; isStopping?: boolean; + // Multi-document progress fields + totalDocuments?: number; // Total number of documents in the run + currentDocumentIndex?: number; // Current document being processed (0-based) + totalTasksAcrossAllDocs?: number; // Total tasks across all documents + completedTasksAcrossAllDocs?: number; // Completed tasks across all documents } /**