Conversation
- Ensure prompts for remote SSH agents are sent via stdin as JSON in stream-json mode, fixing agent crashes with large prompts - Always run background synopsis (history tab) on the correct remote host by propagating SSH config from the main session - Improve wizard error handling: treat nonzero agent exit codes as success if output parses as a valid response, preventing false error states in confidence-building chat - General reliability improvements for remote agent session management and output parsing
… remote git IPC handlers - Ensure remoteCwd is set for all remote git operations (isRepo, status, diff, branch, remote, numstat, tags, branches, info) - Resolves warning about missing remote working directory - Enables correct git repo detection and status for remote directories in wizard and agent flows
# Conflicts: # docs/releases.md
- Remove unrelated husky and lint-staged dev dependencies - Fix Windows path encoding in session storage (handle backslashes) - Add debug logging to empty catch blocks for better diagnostics - Add type guard validation for JSON parsing in output parser
Implements #165 - adds a third "sticky" mode for the thinking toggle that keeps thinking content visible after the response completes. - Add ThinkingMode type ('off' | 'on' | 'sticky') to shared types - Update settings modal with three-position toggle button group - Update thinking pill UI to show pin icon for sticky mode - Update Cmd+Shift+K to cycle through all three states - Add visual differentiation: off (dim), on (accent), sticky (warning+pin) - Maintain backward compatibility for legacy boolean settings Closes #165
The automatic synopsis triggered on process exit was using a short hardcoded prompt that didn't include anti-caveat instructions. This caused the agent to add unhelpful preambles like "I don't have any record of previous work in this session" in toast notifications. Now uses autorunSynopsisPrompt which includes instructions to jump straight to the accomplishment without session context caveats.
When creating 3+ phase documents for a single effort, agents should now place them in a dedicated subdirectory for easier organization and batch addition.
- types.ts: ProcessListenerDependencies interface and type re-exports. - data-listener.ts: Process output streaming with group chat buffering. - exit-listener.ts: Process exit handling with routing, recovery, synthesis. - session-id-listener.ts: Agent session ID tracking for group chat. - usage-listener.ts: Token/cost statistics for participants and moderator. - error-listener.ts: Agent error logging and forwarding. - stats-listener.ts: Query-complete events for stats database. - forwarding-listeners.ts: Simple IPC forwarding (slash-commands, etc.). This reduces main/index.ts by ~600 lines (1270 → 670) and adds 15 new tests covering forwarding, error, and stats listeners.
PR Review Fixes: - Fix race condition in exit-listener by moving markAndMaybeSynthesize to explicit code paths instead of finally() block - Add buffer size limits (MAX_BUFFER_SIZE 10MB) with warning logs - Add REGEX_BATCH_SESSION and REGEX_SYNOPSIS_SESSION for proper filtering - Fix type safety using canonical ToolExecution and UsageStats imports - Fix usage-listener indentation bug where safeSend was inside wrong block Performance Optimizations: - Add GROUP_CHAT_PREFIX constant for fast string prefix checks - Skip expensive regex matching for non-group-chat sessions - Eliminate redundant loadGroupChat calls by using updateParticipant return value directly (DB caching) - Add MSG_ID_RANDOM_LENGTH constant for web broadcast deduplication Test Coverage: - Add 4 new test files (exit, data, usage, session-id listeners) - Total 93 tests covering edge cases, DB caching, and performance - Verify exact participants data flow from updateParticipant - Test optional emitter handling and empty participants arrays
- Extract agent:clearError and agent:retryAfterError handlers from main/index.ts to dedicated handlers/agent-error.ts module - Add comprehensive test coverage for agent error handlers (29 tests) - Centralize GROUP_CHAT_PREFIX constant in process-listeners/types.ts to eliminate duplication across 4 listener files - Remove unused ipcMain import from main/index.ts (all IPC handlers now registered through handlers module)
- Add retry logic with exponential backoff for stats DB insertions (100ms, 200ms, 400ms delays, max 3 attempts) - Fix import order in types.ts (move constant after imports) - Update stats-listener tests for async retry behavior - Add new test for retry success on transient failure Addresses review recommendations: - High: Stats database error handling with retry logic - Low: Import order consistency
… fixes - Move WebServer class to dedicated file and add module index - Extract shared types to centralized types.ts - Fix XSS vulnerability by sanitizing sessionId/tabId in URL parameters - Fix IPC listener memory leak with proper cleanup on timeout - Add autoRunStates cleanup when sessions go offline - Refactor message handlers with send() and sendError() helpers - Add XSS sanitization tests and e2e test configuration
- Extract LiveSessionManager (178 lines) for live session and AutoRun state tracking - Extract CallbackRegistry (208 lines) for centralized callback management - Reduce WebServer.ts from 778 to 582 lines (25% reduction) - Add managers/ directory with proper exports - Maintain consistent public API (no breaking changes)
Show complete command with all arguments instead of limiting to first 5 args. Full command visibility is essential for debugging SSH and other spawn issues.
…ities - Remove incorrect normalization for Claude Code (reports per-turn values directly) - Keep normalization only for Codex (reports cumulative session totals) - Create src/shared/contextUsage.ts as single source of truth - Consolidate duplicate code from renderer, main, and web/mobile - Add w-full to ContextWarningSash for full-width display - Update tests to reflect correct formula and behavior
When the wizard generates Auto Run documents, it now defaults to using
<agentPath>/Auto Run Docs for the {{AUTORUN_FOLDER}} template variable
instead of leaving it empty when not explicitly provided.
Adds a /skills slash command (Claude Code only) that reads skill files from .claude/skills/*/skill.md directories and displays them in chat with name, description, and approximate token count.
Rename "Audio Feedback" → "Custom Notification" and "TTS Command" → "Command Chain" to better reflect the flexible nature of this feature. Users can chain commands together with pipes to mix and match notification tools (TTS, logging, desktop notifications, etc.). Closes #168
Replace 'multi-document batch runs' and 'batch processing' terminology with 'Auto Run' (individual documents) and 'Playbook' (collections of Auto Run documents) across user-facing documentation. Preserves 'batch mode' references where they describe Claude Code's actual non-interactive operation mode.
- Add aider to AGENT_ARTIFACTS, AGENT_TARGET_NOTES, and display name mappings - Add aider to agentIcons.ts - Add aider to sessionValidation display names - Remove duplicate droid entries in agent-detector.ts (Windows and Unix probes) - Remove duplicate factory-droid entry in agentIcons.ts
- Add isWebContentsAvailable() helper function to safe-send.ts for checking if a BrowserWindow's webContents is available for IPC - Use new utility across all IPC handlers for consistent safety checks - Remove duplicate factory-droid entry from AGENT_DEFINITIONS - Fix StdoutHandler to use proper webContents availability checks - Add WelcomeContent and TourWelcome components for improved onboarding - Simplify HistoryHelpModal by removing file path display - Update EmptyStateView with enhanced welcome experience - Fix tests by adding webContents.isDestroyed() mocks to all mock windows - Add comprehensive tests for isWebContentsAvailable utility Claude ID: 7effd201-908e-4f8d-a5d1-fe5e9737e751 Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
- Fix dual border issue where both AI tab and file tab showed active styling when file tab was selected. AI tabs now only show border when activeFileTabId is null. - Update extension badge styling: remove leading dot, uppercase letters, smaller font (9px), reduced padding for minimal height impact. - Update tests to expect new uppercase extension badge format (e.g., 'TS' instead of '.ts').
- Fix new tab creation (Cmd+T) not appearing in unified tab bar by adding new AI tabs to unifiedTabOrder in createTab() - Fix new AI tab not being displayed when file tab was active by clearing activeFileTabId in createTab() - Fix AI tab isActive check to handle undefined activeFileTabId (use !activeFileTabId instead of === null) - Remove redundant filename/path header from file tab context menu (info already shown in tab and file preview subheading) - Use JavaScript toUpperCase() for extension badges instead of CSS text-transform to ensure DOM content matches displayed text - Update tests to use 'Copy File Path' selector instead of removed file-text-icon for identifying file tab overlays
Relocate the log level setting to be more appropriately placed in General settings, positioned above the GitHub CLI Path setting.
The issue was caused by legacy overlay behavior in FilePreview component: - useClickOutside hook was calling onClose when clicking outside the preview - Layer registration was blocking lower layers and capturing focus Added isTabMode prop to FilePreview to distinguish tab-based rendering: - When isTabMode=true: disable click-outside-to-close behavior - When isTabMode=true: don't block lower layers or aggressively capture focus - When isTabMode=true: set focusTrap to 'none' and allowClickOutside to true File preview tabs now persist until explicitly closed by: - Clicking the X button on the tab - Using Cmd+W keyboard shortcut - Middle-clicking the tab - Using context menu "Close Tab" Updated tests to verify click-outside is disabled in tab mode.
Use theme colors to create vibrant, readable diagrams instead of washed-out defaults. Nodes now have tinted backgrounds with prominent accent-colored borders, and different node types use distinct colors (accent, success, warning) for visual variety. - Add blendColors() and transparentize() helpers for color mixing - Use accent color for primary nodes, success for secondary, warning for tertiary - Connection lines use accent color instead of dim text - Enhanced styling for flowcharts, sequence diagrams, Gantt charts, pie charts, ER diagrams, git graphs, quadrant charts, and Sankey diagrams - Better edge label backgrounds for readability - Extended pie chart palette to 12 distinct colors
Tab management shortcuts (Cmd+T new tab, Cmd+W close tab) now work when viewing a file preview tab. Previously these shortcuts were blocked because file preview registers as an overlay in the layer stack. Added these to the allowlist of shortcuts that work when overlays (but not modals) are open.
…tration Tab behavior changes: - Escape key no longer closes file tabs (only closes internal UI like search and TOC overlay). Use Cmd+W or close button to close tabs. - File preview in tab mode skips layer stack registration entirely since tabs are main content, not overlays. This prevents tabs from intercepting keyboard shortcuts or participating in overlay logic. Updated tests to verify tab-mode Escape behavior.
Added isTabSwitcherShortcut to the overlay allowlist so users can open the tab switcher modal while viewing a file preview tab.
Add onWheel stopPropagation to TOC overlay container so mouse wheel events over the ToC scroll only the ToC, not the underlying file content. Also update tests to reflect the previous change where ToC stays open when clicking items (dismiss via click outside or Escape).
Extended isTabManagementShortcut to include Cmd+Shift+T for reopening closed tabs when overlays are open. The closeFileTab helper already adds file tabs to unifiedClosedTabHistory, and reopenUnifiedClosedTab handles restoring both AI and file tabs. This ensures Cmd+Shift+T works from file preview and other overlay contexts.
Added global image cache to MarkdownImage component to prevent re-fetching images on re-renders, which was causing scrollbar flickering. Key changes: - Global imageCache Map stores loaded images with TTL (10 min) - Images are cached by resolved path, including dimensions - Loading placeholder has min-height/min-width to reduce layout shift - Loaded images use aspectRatio from cached dimensions - onLoad handler captures and caches natural dimensions This eliminates the flickering/scrollbar jumping when viewing markdown files with embedded images.
Added overscrollBehavior: 'contain' to both the main content container and the TOC overlay's scrollable entries section. Also added onWheel stopPropagation to the TOC entries div to fully prevent scroll events from leaking between the ToC overlay and the main file preview content. This prevents scroll chaining that could cause scrollbar flickering.
Regular click on file links replaces current tab content, while Cmd/Ctrl+Click opens a new tab adjacent to the current tab.
Replace backdrop-based click-outside detection with useClickOutside hook. The previous fixed backdrop div intercepted all pointer events including wheel events, preventing file content from scrolling while ToC was open. Now wheel events over file content scroll the content, while wheel events over the ToC scroll the ToC list.
- Added FilePreviewHistoryEntry type to track navigation history per tab - Extended FilePreviewTab with navigationHistory and navigationIndex fields - Updated handleOpenFileTab to build navigation history when replacing content - Added handleFileTabNavigateBack/Forward/ToIndex handlers for per-tab nav - Wired navigation props through MainPanel to FilePreview component - Each file tab maintains its own independent navigation history
After saving a file in the file preview tab, the UI was reverting to the original content despite showing "Saved". This occurred because: - editContent was cleared to undefined after save - The base content field was never updated to the saved value - UI fell back to stale original content Added savedContent parameter to handleFileTabEditContentChange to update the tab's base content alongside clearing editContent after save.
In-Tab File Preview
All image references now consistently use relative ./screenshots/ paths instead of mixed formats (some were /screenshots/ or screenshots/).
…lickOutside hooks The tests were failing because FilePreview uses useClickOutside twice (once for container dismiss, once for TOC dismiss) and the mock was only capturing the last call. Updated the mock to track both calls separately and added proper act() wrapping for React state updates.
Key changes: - Accept main's fix for context usage calculation (returns null for accumulated multi-tool turn values instead of capping at 100%) - Adopt main's refactored structure: - agent-detector.ts → agents/detector.ts + definitions.ts + capabilities.ts - stats-db.ts → stats/*.ts modules - agent-session-storage types → agents/index.ts - Port factory-droid agent to new agents/definitions.ts structure - Remove obsolete shared/contextUsage.ts (logic now in renderer/utils) - Update all import paths to reference new module locations - Preserve all RC features: Symphony, File Preview Tabs, TabNaming, etc. The context window fix is critical: main's approach correctly handles when Claude Code reports accumulated token values from multi-tool turns by returning null, causing the UI to preserve the last valid percentage. RC's approach masked this by capping at 100%, hiding the issue.
…tab system - detector.test.ts: Update agent count from 7 to 8 (aider was added) - session-storage.test.ts: Fix import paths for factory-droid storage - agents.test.ts: Add AGENT_DEFINITIONS to mock for handler tests - stats.test.ts: Remove tests for non-existent initialization handlers - usage-aggregator.test.ts: Update DEFAULT_CONTEXT_WINDOWS test for actual ToolType values - MainPanel.test.tsx: Migrate from previewFile prop to activeFileTabId/activeFileTab system - contextUsage.test.ts: Update tests for current ToolType values (removed 'claude', 'aider') - SessionStatusBanner.test.tsx: Update test for null return when tokens exceed context - usage-listener.test.ts: Fix expected contextUsage (falls back to 200k default)
- App.tsx: Remove unused import (reopenClosedTab), legacy navigation variables (backHistory, forwardHistory, filePreviewHistory, filePreviewHistoryIndex), legacy callbacks (setFilePreviewHistory, setFilePreviewHistoryIndex), unused async handler (handleOpenFileTabAsync), and legacy navigation handlers (handleNavigateBack, handleNavigateForward, handleNavigateToIndex) - all superseded by per-tab navigation system - MainPanel.tsx: Prefix unused destructured props with underscore - contextUsage.ts: Remove unused UsageStats import This removes ~250 lines of dead code from the legacy session-level file preview navigation system, which has been replaced by the per-tab breadcrumb navigation in the unified tab system.
PR Review: 0.15.0 RCSummaryThis is a major release with 402 files changed (+65,528/-5,730 lines). The PR introduces Symphony (AI-powered open source contributions), SSH remote execution improvements, unified session storage abstraction, and history manager refactoring. Overall code quality is high with extensive test coverage, but there are security concerns that should be addressed before merging. ✅ Strengths1. Excellent Test Coverage
2. Strong Security PatternsThe implementation includes proper input validation:
3. Well-Documented Architecture
4. SSH Remote Execution Improvements
|
PR #282 Review - 0.15.0 RCOverall AssessmentThis is a massive release candidate PR with 402 files changed, 65K+ additions, and ~6K deletions. The code quality is excellent with professional engineering practices throughout. Rating: ✅ APPROVE with minor revisions
Key Improvements 🎉1. SSH Remote Execution (Major Enhancement)
2. Process Listener Refactoring (Architectural Win)
3. Context Usage Calculation Fixes (Critical Bug Fix)
4. Security Improvements
5. Factory Droid Integration
6. Windows Compatibility
Issues FoundMajor (Should Fix Before Release)
Minor (Nice to Have)
Test Coverage Assessment ✅Excellent - Outstanding coverage of new features:
Minor gaps (acceptable for RC):
Compliance with CLAUDE.md Patterns ✅
RecommendationsBefore Merge (Critical)
Post-Merge (Follow-up PRs)
ConclusionThis PR demonstrates professional engineering practices with:
The massive scope is well-managed through extensive testing, clear commits, and quality-first approach. Final Verdict: ✅ APPROVE after addressing the 3 major issues above. Great work on this release! 🚀 |
handleCloseCurrentTab was duplicating file tab close logic inline but not adding closed tabs to unifiedClosedTabHistory, causing Cmd+Shift+T to restore a different tab instead of the most recently closed one. Now uses closeFileTabHelper which properly tracks history.
The TabBar scroll-into-view effect only triggered for AI tabs. Added activeFileTabId to the useEffect dependencies so file preview tabs are also scrolled into view when opened.
Pull Request Review: 0.15.0 RCOverviewThis is a massive release candidate (65K additions, 5.7K deletions, 104 files) introducing the Symphony feature - a crowdsourced AI-powered contribution system for open source projects. The PR demonstrates excellent engineering practices with comprehensive test coverage and documentation. Key Features Added1. Symphony Contribution System
2. Major Infrastructure
StrengthsCode Quality✅ Excellent type safety - Comprehensive TypeScript types in Testing✅ Outstanding coverage - 22K+ lines of new tests Documentation✅ User-facing docs - SYMPHONY_ISSUES.md, SYMPHONY_REGISTRY.md Performance✅ Caching strategy - 2hr registry cache, 5min issue cache Issues & RecommendationsSecurity Concerns1. Path Traversal Protection
|
No description provided.