- Search result scrolling now centers correctly within scrollable preview container 🎯
- Search scrolling clamps to non-negative positions for safer navigation 🛡️
- Edit-mode search no longer steals focus while you type—huge UX win ✍️
- Edit-mode search now resets match counts cleanly when query clears 🧹
- Match selection triggers only during navigation (Enter/Shift+Enter) ⌨️
- Added tracking refs to detect match navigation versus query edits 🧠
- Git status widget is now memoized to avoid needless re-renders 🚀
- Session hover tooltip content is memoized for smoother session lists 🧊
- Installed React DevTools automatically for Electron development debugging bliss 🧩
- Fixed token aggregation: MAX across models to stop double-counting 🎯
- Corrected Claude context math by excluding cumulative cache-read tokens 📉
- Context usage now reflects latest value, not high-water mark history 🧠
- Preserved lifetime stats by archiving deleted sessions instead of purging 🗄️
- Filtered SSH shell-integration junk from stdout for cleaner logs 🧼
- Hardened terminal/ANSI stripping for iTerm2, VSCode, and OSC sequences 🧹
- Prevented UI freezes: truncate huge syntax-highlight previews and warn users ⚠️
- Skipped expensive token counting for >1MB files to keep previews snappy 🚀
- Mobile web now renders AI responses as rich Markdown with copyable code blocks 📱
- Persist Claude session context-usage percentage, surviving resumes and restarts 🧠
- New IPC/API: `claude:updateSessionContextUsage` to store live context stats 🔌
- Fix resumed sessions falsely showing 100% context from lifetime tokens 🧯
- Usage stats now preserve cost only; tokens intentionally zeroed 📉
- Resume now always fetches session origins to restore context usage 🧭
- Reconstruct context percent on resume by synthesizing equivalent input tokens 🧮
- Add `{{AGENT_HISTORY_PATH}}` template variable for prompts and commands 🧾
- System prompt gains Task Recall guidance using the history JSON file 🗂️
- Input processing now resolves history file path during prompt substitution 🧬
- Add Electron DevTools trace-export workarounds in performance docs 🛠️
- Right-click now selects the clicked file before opening menu 🖱️
- LogViewer shows agent name pill for toast project entries ✏️
- Autorun logs get an agent/session pill pulled from context 🏷️
- Context badges no longer show for toast and autorun logs 🚫
- Added `NOTHING_TO_REPORT` sentinel for “no meaningful work” responses 🧩
- Synopsis parsing now flags `nothingToReport` and skips history creation ⏭️
- New helper `isNothingToReport()` handles ANSI/box-drawing-wrapped tokens 🧼
- Autorun synopsis prompt now requires strict `NOTHING_TO_REPORT` output 📜
- File tree loading avoids redundant reloads after an empty initial load 🌲
- Delete confirmation button uses softer semi-transparent error styling 🎨
- Split monolithic CLAUDE.md into focused, indexed sub-docs for faster onboarding 📚
- Added deep Agent support guide: capabilities, flags, parsers, storage, and adding agents 🤖
- Documented full `window.maestro` IPC surface with clearer namespaces and History API 📡
- Captured core implementation patterns: processes, security, settings, modals, SSH, Auto Run 🧭
- Published performance playbook for React, IPC batching, caching, and debouncing 🚀
- Formalized Session interface docs, including multi-tab, queues, stats, and error fields 🧩
- Session-level custom agent path now overrides detected binary during spawn 🛠️
- New rendering settings: disable GPU acceleration (early startup) and disable confetti 🖥️
- Confetti effects now respect user preference across celebration overlays and wizard completion 🎊
- File explorer now distinguishes “loading” vs “no files found” empty states 🗂️
* MAESTRO: Add Bluesky social network support to leaderboard registration
- Add blueskyHandle field to LeaderboardRegistration interface
- Create BlueskySkyIcon component with official butterfly logo
- Add Bluesky input field to registration modal
- Update IPC handlers to accept and transmit blueskyHandle
- Support both username.bsky.social and custom domain formats
- Strip @ prefix from handles for consistency with other social fields
- Update main process to include blueskyHandle in API submission
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* MAESTRO: Add comprehensive test suite for Bluesky leaderboard integration
- Created LeaderboardRegistrationModal.test.tsx with 20 tests
- Tests cover Bluesky field rendering, @ prefix stripping, state persistence, and theme styling
- 16/20 tests passing (4 form submission tests have timing issues in test environment)
- Updated test setup to include leaderboard API mock
- All existing tests remain passing (9,893/9,898 pass)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: add blueskyHandle to MaestroAPI type and fix test setup
- Added blueskyHandle to global.d.ts MaestroAPI interface (was missing)
- Added missing leaderboard mock methods to test setup
- Fixed form submission tests to use existing registration
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: Pedram Amini <pedram.amini@gmail.com>
- Added `calculateContextTokens` to unify agent-specific context token semantics 🧮
- Codex context usage now counts output tokens for accurate combined-window math 🎯
- Claude context usage keeps excluding output tokens, matching real limits 🧠
- Refactored context percentage calculations across main process listeners 🔧
- Updated desktop UI panels to use shared context-token calculator 📊
- Tab switcher now computes context usage using each tab’s agent type 🗂️
- Context extraction/token estimation now respects agent-specific counting logic 🔍
- Mobile header and status banner now handle Codex combined context windows 📱
- Expanded test coverage for new token calculator, edge cases included ✅
- Adjusted Codex default-window tests to reflect new output-inclusive usage 🧪
Fixes#178 - OpenSpec "Check for Updates" was always showing version 0.1.0
regardless of the actual latest release (currently v0.19.0).
Root cause: sourceVersion was hardcoded in refreshOpenSpecPrompts().
Changes:
- Fetch latest release from GitHub API to get actual version tag
- Download AGENTS.md from release tag instead of main branch
- Use fetched version for both commitSha and sourceVersion metadata
- Update bundled metadata to v0.19.0
- Removed `remoteWorkingDir` SSH setting—remote sessions now start in `~` by default 🏠
- Simplified SSH command building: only `cwd` triggers remote `cd` injection 🧭
- Dropped remote-CWD integration assertions to reduce flaky SSH test failures 🧪
- Added `stripAnsi` utility to clean ANSI/OSC noise from SSH outputs 🧼
- Hardened remote agent detection against iTerm2 shell-integration escape sequences 🛰️
- Updated remote git execution to require explicit `remoteCwd` for correctness 🔧
- Streamlined SSH remote IPC payloads—no more working-directory field transmitted 📡
- Cleaned up SSH remote settings UI by removing the Remote Working Directory input 🧰
- Refined remote `cd` handling: `~` and bare `cd` map to session base dir 📁
- Tightened shared types and tests to match the new SSH remote config shape 🧩
- Launched Symphony Stats dashboard with summary cards and achievement milestones 🏆
- Embedded new Symphony screenshots to showcase History and Stats tabs 🖼️
- Added “Available Issues” card linking Maestro-ready GitHub issue list 🔗
- Introduced “Confirm and Erase” agent deletion flow that trashes working directory 🗑️
- Added new Delete Agent confirmation modal with strong accessibility and focus behavior ♿
- Implemented secure `shell:trashItem` IPC handler with validation and existence checks 🛡️
- Exposed `maestro.shell.trashItem()` in preload and renderer typings for use 🧩
- Wizard document prompts now respect configurable Auto Run folder paths 📁
- Prompt templates now forbid extra summary/recap files—only Phase docs allowed 🚫
- Added a live “Detecting agent on remote host” banner during SSH scans 🚧
- Introduced a themed, animated spinner to visualize ongoing detection work 🌀
- Conditioned the banner to hide once a real agent configuration is detected 🎯
- Smoothed tab switching by resizing textarea only when active tab changes 🚀
- Reduced costly layout reflows by dropping per-keystroke resize dependencies ⚡
- Prevented agent-config undefined states during slow SSH detection with fallbacks 🛡️
- Added placeholder agent configs from tiles to handle detection race conditions 🧩
- 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 🏷️
- Corrected Per-Agent Configuration to Per-Session Configuration
(SSH is session-level only, not per-agent with global defaults)
- Fixed dropdown options from incorrect "Use Global Default"/"Force
Local" to actual "Local Execution"/[Remote Name] options
- Removed incorrect "Resolution Order" section (5-level priority
algorithm doesn't exist in source code)
- Clarified global default is a visual indicator, not automatic
- Removed incorrect PTY limitation claim (PTY IS available via
RequestTTY: 'force' and -tt flags)
- Updated Limitations section with accurate shell initialization info
- Changed hyphens to em-dashes for consistency
- Updated theme count from 12 to 18 in description
- Added 4 missing light themes: Solarized, One Light, Gruvbox Light, Catppuccin Latte
- Fixed "GitHub Light" to "GitHub" to match actual theme name
- Fixed Settings path from "Appearance → Theme" to "Themes tab"
- Added Custom Theme section documenting the theme builder
- Fix "Global Access" → "Live Sessions" (only live sessions accessible)
- Rename "Static Port Configuration" → "Custom Port Configuration" to match UI
- Correct port range from 1024-65535 to 1-65535
- Fix "Use Custom Port" → "Custom Port" toggle label
- Add UUID clarification for security token
- Expand Mobile Web Interface with Core Features, Gestures, Input subsections
- Add Connection Handling section (auto-reconnect, offline mode, status)
- Add notes, tips, and related links section
- Use em-dashes for consistency with other documentation
Changes:
- Fixed Claude Code model selection: was incorrectly documented as supported
via --model flag, but source shows supportsModelSelection: false (configured
via Anthropic account)
- Changed "OpenAI Codex" to "Codex (OpenAI)" throughout for consistency
- Fixed Codex slash commands: changed from ⚠️ to ❌ since they don't work in
exec mode which Maestro uses
- Updated Codex slash commands link to official OpenAI docs
- Fixed OpenCode slash commands: changed from "Not investigated" to "Not
supported" per source code
- Enhanced OpenCode note to mention OPENCODE_CONFIG_CONTENT env var for YOLO
- Added "Context operations" row for all providers (merge/export/transfer)
- Added "Thinking display" row for all providers documenting streaming output
- Updated description frontmatter for consistent naming
- Added "OpenSpec CLI Commands" section with table of essential commands
(list, list --specs, show, validate, archive, spec list --long)
- Fixed Stage 1 workflow to document full process including project.md
review and openspec list commands
- Fixed validation command format to include required change-id parameter
- Added --yes and --skip-specs flags documentation for archive command
- Expanded /openspec.implement description with phase grouping details
- Updated "Viewing & Managing Commands" section to accurately describe UI
- Fixed Spec-Kit directory location from "Project root" to "specs/"
- Changed tips to use "verb-led IDs" terminology per AGENTS.md conventions
- Standardized to em-dashes for consistency with other docs
- Added mention that MCP server is hosted by Mintlify
- Added proactive search behavior explanation
- Added Cursor and VS Code configuration instructions
- Clarified transport type as HTTP/HTTPS (Streamable HTTP)
- Added note about page indexing limitations
- Verified all existing information is accurate
Major fixes:
- Toggle Sidebar was Cmd+B, actual shortcut is Opt+Cmd+Left (renamed to Toggle Left Panel)
- Toggle Right Panel was Cmd+\, actual shortcut is Opt+Cmd+Right
- Document Graph Tab cycling didn't exist in code, removed it
- Document Graph Enter key behavior was wrong: re-centers for docs, opens URL for external
- Keyboard Mastery levels were completely wrong (Novice/Apprentice/etc vs Beginner/Student/etc)
- Keyboard Mastery location was "status bar" but it's actually in Shortcuts Help panel
Added missing shortcuts:
- New Agent Wizard, New Group Chat, Navigate Back/Forward
- Toggle Input/Output Focus, Focus Left Panel, System Log Viewer, Process Monitor
- Toggle Bookmark, Maestro Symphony, Toggle Auto Run Expanded, View Git Diff
- Toggle Tab Star, Toggle Tab Unread, Filter Unread Tabs, Open Prompt Composer
- Go to Tab 1-9 and Go to Last Tab
- File Preview Go Back/Forward
- Context-sensitive filter shortcuts (Cmd+F in different contexts)
- Added performance best-practices guide for React and main process tuning 📘
- Introduced `buildFileTreeIndices` for fast, reusable markdown file lookups ⚡
- Updated `remarkFileLinks` to accept prebuilt indices with backward compatibility 🧩
- Memoized file-tree indices in AutoRun, FilePreview, and MarkdownRenderer for speed 🚀
- Expanded test suite to cover indices building and indexed link resolution 🧪
- Made temp-file cleanup asynchronous to keep the main thread snappy 🧹
- Cached shell path resolution to avoid repeated synchronous filesystem checks 🗄️
- Precompiled leading-emoji regex to speed up session name sorting 🔤
- Consolidated SessionList filtering/grouping/sorting into one efficient memo pass 🧠
- Memoized TabBar tabs, computed labels, and style objects to cut rerenders 🎛️
- NewInstanceModal now preserves SSH config during agent re-detection flows 🧭
- Tests now mock remote `fs.stat` to validate SSH working directory reliably 🧪
- NewInstanceModal tests wait for debounced remote path validation before creating ⏱️
- Leaderboard “Submit” button stays hidden after success to avoid resubmits 🚫
- Leaderboard “Sync from cloud” is now available even after successful submit 🔄
- Leaderboard “Opt Out” action remains accessible after a successful registration 🧾
- Autorun synopsis prompt bans session-context preambles for cleaner summaries ✍️
- SSH remote selection now works even before choosing an agent 🚀
- NewInstanceModal now reads pending SSH config for enablement/host display 🔧
- Agent detection reliably re-runs when switching between remote and local 🔁
- Wizard recovery test now programmatically toggles SSH to bypass JSDOM quirks 🧪
- Wizard tests use real timers to validate React effects correctly ⏱️
- NewInstanceModal tests verify detect() called with selected SSH remote ID 📡
- Agent selection test flow now waits for aria-selected state properly ✅
- Tests stop relying on remote path validation and fragile placeholder behavior 🧹
- SSH selector tests consistently target the combobox select element 🎛️
- Leaderboard stats layout upgraded from grid to flexible proportions 🏆
- Detect agents on SSH remotes via IPC `agents:detect(sshRemoteId)` 🌐
- Show friendly “Unable to Connect” UI when remote agent detection fails ⚠️
- Re-detect agents instantly when switching SSH remote selection in modals 🔁
- Wizard now persists SSH remote choice across step navigation 🧭
- Remote directory validation now checks existence via `fs.readDir` first 📁
- Git repo checks and Auto Run docs lookup now support SSH remote IDs 🛰️
- Directory screen hides Browse button for remote sessions, adds remote hints 📝
- Agent selection UI revamped: name + location dropdown, clearer header 🧩
- Add `showThinking` option to tabs and merged sessions, default false 🧠
- Export `AGENT_DEFINITIONS` for reuse in remote detection logic 📦
- Compaction now triggers earlier: 2k tokens or 8 exchanges 🎯
- Added extra compaction fallbacks when context gauge resets unexpectedly 🔁
- Read-only tabs now force “return plan in Markdown” instructions 🧾
- Auto Run without worktree automatically runs in read-only/plan mode 🛡️
- ThinkingStatusPill now accepts prefiltered thinkingSessions for speed ⚡
- InputArea precomputes thinking sessions and memoizes command filtering 🚀
- MainPanel memoizes active tab lookup to cut per-keystroke work 🧠
- TerminalOutput memoizes active logs and reduces scroll update frequency 🖥️
- Batched session updates track context high-water mark with explicit reset 🌊
- Wizard adds one-click debug log download right in the conversation UI 🧰
- Leaderboard registration now submits cumulative stats safely for multi-device sync 🏆
- AutoRun prompt now requires a concrete “what I did” synopsis first 🧭