- Adds Volume2 icon button next to copy button on non-user messages
- Only shows when audioFeedbackCommand is configured in settings
- Clicking speaks the message content using the configured TTS command
- Custom AI commands now display and send the actual prompt text instead of
showing "command: description" in the chat
- Left-align the Add Command button in settings
- Add copy content/image to clipboard button in FilePreview
- Increase search preview context from 30 to 60 characters
- Fix j/k navigation keys conflicting with search input in GitLogViewer
- Fix git tooltip click propagation and pointer events in MainPanel
- Convert globe tooltip to state-based with proper theme colors
- Add icons to settings modal tab buttons
- Reset AgentSessionsBrowser to list view on mount
- Add local web server per session with UUID authentication for browser access
- Add history entry deletion with confirmation modal
- Show git branch name in header pill, click to open git log
- Fix hover tooltips (Git, Tunnel, Context) to stay open when moving to content
- Widen settings modal to 800x600 for better AI Commands visibility
- Fix notification "never" dismissal by removing hardcoded durations
- Cycle all sessions with Cmd-Shift-[] when sidebar collapsed
- Update test audio text to Maestro introduction
- Added RefreshCw icon button next to expand/collapse buttons
- Created refreshFileTree function to reload file tree on demand
- Button positioned to the left of expand/collapse controls
- Added 'toast' log level for tracking toast notifications
- Toast notifications are now logged when created via ToastContext
- Added purple TOAST filter pill in LogViewer (next to ERROR)
- Toast logs include type, message, group, project, and task duration
Added a refresh button (circular arrow icon) to the left of the
expand/collapse buttons in the file explorer header. Clicking it
manually reloads the file tree from disk.
Toast notifications now show:
- Title: The user's original request (truncated to ~50 chars)
- Message: First sentence or 120 chars of the AI response
Previously showed generic "Task Complete" / "Task completed" which
wasn't helpful. Now users can see what was requested and a summary
of what was accomplished.
Added check to skip rendering stderr log entries that have no actual
content after processing. This prevents empty red STDERR cells from
appearing when git or other commands write nothing useful to stderr.
The context usage percentage was incorrectly including cache tokens:
- Was: inputTokens + outputTokens + cacheReadTokens + cacheCreationTokens
- Now: inputTokens + outputTokens (actual context footprint)
Cache tokens are about billing optimization, not context size:
- cacheReadInputTokens = tokens read from cache (still in context but cached)
- cacheCreationInputTokens = subset of input being written to cache
The actual context window usage is input + output tokens, which is what
matters for hitting the 200K limit.
Also renamed "Total Tokens" to "Context Tokens" in the UI to clarify
what's being measured.
The onSessionId handler was capturing Claude session IDs from batch
(AUTO) tasks and storing them in the interactive session's state.
This caused the main panel to show the batch session ID instead of
the interactive session's own ID.
Fix: Added check to ignore session IDs containing '-batch-' in the
onSessionId handler, matching the pattern already used in onData.
The issue was that the onData handler was setting state to 'idle' whenever
stdout data was received from Claude. This prematurely marked the session
as idle, so subsequent messages during the same AI task wouldn't queue.
Fix:
- Removed premature state='idle' in onData handler - let onExit manage state
- Explicitly set state='busy' when processing queued messages from exit handler
- Added hover state that highlights the bar and shows a tooltip
- Tooltip displays hours ago (e.g., "3h ago") and breakdown of Auto/User counts
- Fixed stacking order: Auto (warning color) on bottom, User (accent color) on top
- Bar scales up 1.5x on hover for better visibility
- Tooltip positions intelligently to avoid clipping at edges
History Panel Pagination:
- Keep max 500 entries in memory (MAX_HISTORY_IN_MEMORY)
- Initially render only 50 entries (INITIAL_DISPLAY_COUNT)
- Load 50 more entries when scrolling near bottom
- Show "Showing X of Y entries. Scroll for more..." indicator
- Reset display count when filters change
UI Cleanup:
- Removed redundant Stop button from thinking indicator
- The blinking red stop button in input area is sufficient
The stop button in the message panel is no longer needed since the
send button in the input area already transforms into a red blinking
stop button when the agent is busy.
The workflow was only triggering on semantic version tags (v*.*.*) but
releases were being created with date-based tags (e.g., 2025-11-27).
Added '20*' pattern to also trigger on date-based tags.
Enhanced the 24-hour activity bar graph with:
- Rounded border container to frame the graph
- Hour labels below (24h, 16h, 8h, 0h) showing time scale
- Labels positioned at start, middle markers, and end (now)
- Small monospace font for labels to keep them compact
Added a visual activity graph showing auto vs user activity hour-by-hour
for the past 24 hours at the top of the history panel. The graph:
- Displays 24 bars (one per hour) from oldest to newest
- Uses warning color for AUTO entries and accent color for USER entries
- Stacks both types within each bar
- Shows a tooltip with total counts on hover
- Left-justifies the AUTO/USER filter pills with the graph filling remaining space
- Add "Pedurple" theme featuring deep purple backgrounds with gold accents
- Add "Maestro's Choice" theme with a unique teal-gray base and terracotta accents
- Both themes added to new "Special themes" section after light themes
- Update ThemeId type to include new theme identifiers
- Add GitLogViewer component with split-pane design showing commit list on left, diff on right
- Support keyboard navigation (↑↓ j/k), search with /, and mouse selection
- Show branch/tag decorations, commit metadata, file stats, and syntax-highlighted diffs
- Add git:log and git:show IPC handlers in main process
- Wire up viewGitLog shortcut (Cmd+Shift+G) and add to Quick Actions menu
- Add GIT_LOG modal priority for proper layer stack ordering
Added a "Show All" checkbox to the search bar in the Claude Sessions Browser.
By default, sessions with IDs starting with "agent-" are hidden, showing
only UUID-style sessions. Checking "Show All" reveals all sessions including
agent sessions. Stats panel also updates to reflect only visible sessions.
Added live refresh of the history panel when AI synopsis entries are
added via /synopsis or /clear commands:
- Added refreshHistory() method to HistoryPanelHandle interface
- Exposed refreshHistoryPanel() from RightPanel via forwardRef
- Added refreshHistoryPanel prop to SlashCommandContext
- Call refreshHistoryPanel after addHistoryEntry in both commands
- Show red Stop button in input area when AI is busy (not just terminal)
- Add prominent Stop button directly in the "Claude is thinking" indicator
- Both buttons trigger SIGINT to interrupt Claude Code process gracefully
When a user expands a long AI response and scrolls within it, the view
would constantly jump back to the top. This was caused by the Virtuoso
followOutput behavior being too aggressive. Now we track when the user
has scrolled away from the bottom and respect their scroll position.
The TTS command field was only using the first word as the command,
ignoring any arguments. Now properly parses the full command string
to extract the command and its arguments (e.g., "11s --voice xyz").
- Remove duplicate GlobalStats interface from types (was causing conflicts)
- Only track scroll position when on Files tab (prevent unnecessary updates)
- Memoize activeSession to reduce re-render cascades
- Wrap HistoryPanel in React.memo to prevent unnecessary re-renders
- Add flash notification system for inline feedback (centered, auto-dismiss)
- Block slash commands when AI agent is busy with flash notification
- Use warning color for visibility (yellow/orange background)
- Add GlobalStats interface for persistent usage statistics
- Store cost, token counts in settings that persist across restarts
- Update About modal to display persistent stats (previously lost on restart)
- Track usage stats incrementally via updateGlobalStats helper
- Update About menu description to "Version, Credits, Stats"
- Replace command panel with hamburger menu in left sidebar header
- Move About button from main panel to hamburger menu
- Add keyboard shortcuts display in hamburger menu items
- Swap order of git change indicator and GIT pill in session list
- Change "Session Statistics" to "Global Statistics" in About modal
- Fix ReferenceError in AgentSessionsBrowser by hoisting useCallback definitions
- Add fail-fast: false so all platforms build even if one fails
- Install Linux build dependencies (libarchive-tools, rpm) for packaging
- Add Windows MSVC build tools setup for native module compilation
- Explicitly rebuild native modules (node-pty) before packaging
- Add DEBUG output for electron-builder troubleshooting
- Use --publish never to avoid auto-publishing issues
- Add artifact listing steps for debugging
- Update to softprops/action-gh-release@v2
- Add if-no-files-found: error to catch packaging failures early
Add user-configurable duration for toast notifications under
Settings > Notifications. Users can select preset durations
(5s, 10s, 20s, 30s) or "Never" which keeps toasts on screen
until manually dismissed via the X button. Default is 20 seconds.
When set to "Never", toasts stack without auto-dismissing and
the progress bar is hidden.
Added a small clipboard icon in the bottom-right corner of each message
cell in the AI terminal (both user messages and AI responses). When
clicked, the message content is copied to clipboard and a centered
"Copied to Clipboard" notification appears briefly.
- Icon appears on hover with subtle opacity transition
- Uses same notification style as session ID copy
- Only shows in AI mode (not terminal mode)
- Press / to open a search filter box below the AUTO/USER pills
- Filter searches through summary, full response, and prompt text
- Shows result count when filter is active
- Escape closes the filter and clears the search
- Arrow down moves focus from search input to the list
- Also fixed stale closure bug in processQueuedMessage (queued
messages now actually get sent to the agent)
- Added __maestroDebug.testToast() helper for console testing
Added a small pill indicator for each agent session in the left sidebar
showing "GIT" (styled with accent color) for sessions in git repositories
or "LOCAL" (styled with dim color) for sessions in non-git directories.
The indicator appears:
- In the expanded sidebar next to each session
- In the skinny mode tooltip popup
- Only for AI agent sessions (not terminal sessions)
- Added CustomAICommand type for user-configurable slash commands
- Created AICommandsPanel component for settings modal
- Added "AI Cmds" tab to SettingsModal for managing custom commands
- Integrated custom AI commands with slash command autocomplete
- Default /commit command examines git diff and pushes changes
- Built-in commands can be edited but not deleted
- Custom commands are persisted across app restarts
Add support for displaying Claude Code's custom slash commands in the
Maestro AI terminal autocomplete. Commands are fetched from user-defined
commands (~/.claude/commands/), project-level commands (.claude/commands/),
and enabled plugins' commands directories.
The commands are cached per Maestro session and fetched on first Claude
session establishment. This allows users to see and use Claude-specific
slash commands like /commit, /review-pr, etc. directly from the Maestro
AI terminal interface.
- Add new "Notify" tab to Settings modal with OS notifications and audio feedback options
- OS notifications enabled by default, persisted across app restarts
- Audio feedback option uses configurable TTS command (defaults to macOS 'say')
- Audio runs in background (non-blocking) via detached child process
- Add test buttons for both notification types
- IPC handlers for notification:show and notification:speak
- Full TypeScript types for notification API in preload.ts
Integrated the mermaid package to render diagrams in fenced code blocks
marked as `mermaid`. Both FilePreview and Scratchpad components now
support Mermaid diagrams with proper theme detection and DOMPurify
sanitization for security.
- Added new IPC handlers for git:branch, git:remote, and git:info
- git:info returns comprehensive data: branch, remote, ahead/behind counts, uncommitted changes
- Added hover overlay to Git pill showing:
- Current branch with ahead/behind indicators
- Remote origin URL with copy button
- Working tree status (clean or uncommitted changes count)
- Auto-refreshes git info every 10 seconds
- Filter empty stdout and stderr output so commands with no output show nothing
- Display red "STDERR" pill badge for stderr output entries
- Enhanced pill styling with solid background, bold text, and uppercase letters
Aggregate and display usage metrics from all active sessions including:
- Total sessions and messages count
- Input/output token usage with K/M formatting
- Cache read/creation tokens (when applicable)
- Cumulative active time
- Total cost across all sessions