57 Commits

Author SHA1 Message Date
Pedram Amini
495ed0f60f MAESTRO: Update TabBar render loop to iterate over unified tabs
- Add displayedUnifiedTabs computed value with unread filter support
- Update render loop to conditionally render from unified tabs when provided
- Check unified tab type to render either Tab (AI) or FileTab (file)
- Update handleDrop, handleMoveToFirst, handleMoveToLast for unified tabs
- Update overflow check and empty state to consider unified tabs
- Maintain backwards compatibility with legacy AI-only tab rendering
2026-02-02 16:18:39 -06:00
Pedram Amini
b0ace1b753 Merge commit 'refs/pull/225/head' of https://github.com/pedramamini/Maestro into 0.15.0-rc 2026-01-27 13:33:14 -06:00
VVX7
43177df7bf Add support for Factory.ai droid agent.
See: https://factory.ai/product/cli
2026-01-22 14:04:40 -05:00
Raza Rauf
1c2a8101ee refactor: modularize preload.ts into domain-specific modules with tests 2026-01-22 20:33:55 +05:00
Raza Rauf
f90892115e added eslint-config-prettier along with necessary config files for streamlined formatting 2026-01-19 22:15:39 +05:00
Raza Rauf
9ecf57bf25 added .prettierrc config to ensure consistent formatting 2026-01-16 23:54:27 +05:00
Pedram Amini
181a7f436b ## CHANGES
- 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 📱
2026-01-15 23:32:09 -06:00
Raza Rauf
c27ec9ceff Initialized Refactoring Branch 2026-01-14 23:44:33 +05:00
julien Lengrand-Lambert
d7ddbab52c Adding Bluesky to the list of social networks on the client side (#186)
* 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>
2026-01-12 16:14:12 -06:00
Pedram Amini
34d4b7d23b windows build fixes 2026-01-01 22:20:28 -06:00
Pedram Amini
21b2bc4258 MAESTRO: Remove react-force-graph-2d dependency
- Removed react-force-graph-2d from package.json dependencies
- Updated DocumentGraphView.tsx header comment to reflect canvas-based MindMap
- Ran npm install to clean up package-lock.json (16 packages removed)
2025-12-30 13:37:34 -06:00
Pedram Amini
a0459410ab MAESTRO: Implement sleep prevention feature (Phase 1)
Add system sleep prevention when AI agents are busy using Electron's
powerSaveBlocker API with reference counting for multiple concurrent sessions.

Key changes:
- Created src/main/power-manager.ts with PowerManager class
- Added power IPC handlers to system.ts
- Exposed power API in preload bridge
- Added PowerStatus type to shared types
- Added preventSleepEnabled setting to useSettings hook
- Hooked process spawn/exit to add/remove power block reasons
- Terminal sessions excluded from power blocking

Platform support:
- macOS: Full (IOPMAssertionCreateWithName)
- Windows: Full (SetThreadExecutionState)
- Linux: Varies by desktop environment

The feature is disabled by default. When enabled, prevents system
sleep while any AI session is actively processing.
2025-12-30 09:12:36 -06:00
Pedram Amini
1629b327ff Merge pull request #119 from t1mmen/fix/detect-node-version-manager-paths
fix: detect Node version manager paths in process spawning
2025-12-30 03:43:08 -06:00
Pedram Amini
621f60c6cd OAuth enabled but no valid token found. Starting authentication...
Found expired OAuth token, attempting refresh...
Token refresh successful
## CHANGES

- Bumped app version to 0.14.0 with fresh dependency refresh 🚀
- Added <a href="https://www.npmjs.com/package/react-force-graph-2d">react-force-graph-2d</a> for richer graph visualization options 🧠
- DocumentGraph layouts now use two-phase positioning for cleaner clusters 🧭
- External link nodes now sit on periphery/runs below hierarchy, reducing chaos 🪐
- Force layout spacing tuned for better readability and fewer overlaps 📐
- Added fallback grid layout when only external nodes exist 🧩
- SSH remote configs now persist `useSshConfig` and `sshConfigHost` metadata 🔐
- SSH Config host picker now supports filtering + keyboard navigation ⌨️
- SSH remote validation relaxed: username/key optional, leverage ssh-agent defaults 🗝️
- File explorer shows RTL-ellipsized cwd and double-click copies path 🎯
2025-12-30 00:32:06 -06:00
Timm Stokke
5bac9c51fb fix: detect Node version manager paths in process spawning
GUI applications (like Electron) don't inherit shell PATH configuration,
causing 'env: node: No such file or directory' errors for users who install
Node via version managers (nvm, fnm, volta, mise, asdf, n).

This adds automatic detection of common Node version manager installations
and includes their bin paths when spawning AI agent and terminal processes.

Supported version managers:
- nvm (reads default version from ~/.nvm)
- fnm (Fast Node Manager)
- volta
- mise (formerly rtx)
- asdf
- n

The detection runs at process spawn time and only adds paths that exist
on the system. This ensures node/npm are available without requiring
users to set up wrapper scripts or launchctl environment variables.

Fixes the "Agent exited with code 127" error for nvm users.
2025-12-29 20:06:02 -08:00
Pedram Amini
558419a755 ## CHANGES
- Bumped Maestro version to 0.13.1 for the latest improvements 🚀
- Added Document Graph IPC handlers to enable live file watching 📈
- Introduced SSH Remote IPC handlers for managing saved SSH configurations 🛰️
- Added a dedicated SSH tab in Settings for cleaner navigation 🗂️
- Updated Settings keyboard tab-cycling to include the new SSH section ⌨️
- Refined Settings UI with a new Server icon for SSH tab branding 🖥️
- Moved SSH Remote hosts configuration into its own SSH Settings panel 🔐
2025-12-29 17:22:06 -06:00
Pedram Amini
b2aa5828dd ## CHANGES
- Marked `immer` as a peer dependency for cleaner installs and compatibility 🎯
2025-12-29 07:36:11 -06:00
Pedram Amini
51fc498420 MAESTRO: Add graph visualization dependencies for Document Graph View
Install reactflow@11.11.4, @dagrejs/dagre@1.1.8, d3-force@3.0.0, and
@types/d3-force@3.0.10 for the upcoming Document Graph visualization
feature in Phase 3 of the Global Stats & Graphing implementation.
2025-12-29 06:19:33 -06:00
Pedram Amini
79531d26a4 MAESTRO: Install recharts and date-fns dependencies for Usage Dashboard
Added recharts v3.6.0 for charting components and date-fns v4.1.0 for
date formatting and manipulation. These are required for the upcoming
Usage Dashboard modal with Recharts visualizations.
2025-12-29 06:19:31 -06:00
Pedram Amini
14db065d11 MAESTRO: Add better-sqlite3 native database module
- Install better-sqlite3@^12.5.0 for SQLite database support
- Add @types/better-sqlite3@^7.6.13 for TypeScript definitions
- Configure electron-rebuild to build both node-pty and better-sqlite3
- Add better-sqlite3 to asarUnpack for proper Electron packaging
- Foundation for upcoming global stats tracking system
2025-12-29 06:16:57 -06:00
Pedram Amini
2e599aa4c9 fix: Restore GistPublishModal component 2025-12-28 14:16:32 -06:00
Pedram Amini
becfc97f42 merge: resolve conflicts with main (gist publishing + openspec) 2025-12-28 12:50:19 -06:00
Pedram Amini
750ecd4743 ## CHANGES
- Bumped project version to 0.12.2 for this release rollout 🚀
- Added why-did-you-render to spotlight unnecessary React re-renders 🔍
- Initialized dev-only WDYR profiling with hooks and memo tracking 🧪
- Ensured WDYR loads before React for accurate render diagnostics ⏱️
- Refreshed About modal with cleaner creator + Austin side-by-side layout 🧩
- Inserted visual divider to better separate About modal sections 🧱
- Corrected About modal GitHub link targets between repo and profile 🔗
- Updated About modal tests to match the swapped GitHub link behavior 
- Stripped markdown from History list summaries for cleaner previews 🧹
2025-12-28 06:27:33 -06:00
Pedram Amini
272c825942 OAuth enabled but no valid token found. Starting authentication...
Found expired OAuth token, attempting refresh...
Token refresh successful
## CHANGES

- Share achievements as images with exclusive peak stats captured 🏆
- Track keyboard shortcut usage and level up mastery in status bar ⌨️
- Edit Auto Run docs fullscreen with expanded editor and progress footer 🖥️
- Right-click tabs for new context management menu actions 🧭
- Merge contexts via new modal, with token estimates and cleaning 🔀
- Send context to other agents with searchable modal and cleaning options 🛰️
- Export any tab conversation as self-contained themed HTML file 📄
- Added dedicated History panel with search, filters, graph view, resume 🕒
- Validate Auto Run completions in History with review workflow toggles 
- Support fixed remote-access ports with clear security guidance 🔒
2025-12-27 11:06:08 -06:00
Pedram Amini
b78f9523c4 OAuth enabled but no valid token found. Starting authentication...
Found expired OAuth token, attempting refresh...
Token refresh successful
## CHANGES

- Added `rehype-slug` for automatic heading IDs in markdown previews 🔗
- Enabled smooth in-page anchor link navigation across markdown renderers 🧭
- Improved worktree session detection by normalizing paths, avoiding duplicates 🧹
- Broadcast session updates when working directory changes, not just state 📣
- Added “stopping” batch-session tracking and surfaced it throughout the UI 🛑
- Refined Auto Run indicators: STOPPING label, red tint, no pulse 🎛️
- Prevented repeated stop clicks with stricter disabled button behavior 🚫
- Memoized batch-derived flags to cut rerenders from new array references 
- Fixed HMR stale-closure issues via ref-based batch state broadcaster 🧩
- Mermaid diagrams now fully theme-aware using app color variables 🎨
2025-12-26 02:23:05 -06:00
Pedram Amini
fa37074753 MAESTRO: Add keyboard mastery gamification backend
Implements the core gamification system for tracking keyboard shortcut usage:

- Add KeyboardMasteryStats interface and KeyboardMasteryLevel type to types
- Create keyboardMastery.ts constants with 5 mastery levels (Beginner to Maestro)
- Add settings persistence with recordShortcutUsage, acknowledgeKeyboardMasteryLevel
- Track all shortcut executions in useMainKeyboardHandler.ts via trackShortcut helper
- Wire up in App.tsx with pendingKeyboardMasteryLevel state and startup check
- Total of 56 trackable shortcuts (35 DEFAULT + 21 TAB_SHORTCUTS)

All 11,655 tests pass. UI components (progress bar, celebration modal) coming in next phase.
2025-12-24 19:57:16 -06:00
Pedram Amini
00f10dba41 Merge main into speckit-support and fix conflicts
- Resolved conflicts in package.json (kept both test:performance and refresh-speckit scripts)
- Resolved conflicts in agent-detector.test.ts (kept try/finally pattern for platform restoration)
- Fixed speckit-manager.ts to read prompts from disk instead of using Vite's ?raw imports
- Removed unused extractDescription function and added proper types for GitHub API response
2025-12-22 22:08:58 -06:00
Pedram Amini
a8edadbdcf feat: add ESLint with TypeScript/React plugins and fix all lint errors
- Add ESLint 9 configuration (eslint.config.mjs) with TypeScript and React hooks plugins
- Add npm run lint:eslint command for code quality checks
- Expand npm run lint to check all three TypeScript configs (renderer, main, cli)
- Update tsconfig.cli.json to include src/prompts and src/types directories

Fix 29 ESLint errors:
- Remove unused updateCliActivity import in batch-processor.ts
- Convert {false && <jsx>} patterns to comments in AutoRun components
- Wrap case block with const declarations in braces (AgentSelectionScreen)
- Fix unused expression pattern in PreparingPlanScreen
- Fix conditional hook calls in FilePreview, OfflineQueueBanner, RecentCommandChips, TerminalOutput
- Add windows-diagnostics.json to PackageContents interface

Update CLAUDE.md and CONTRIBUTING.md with new linting commands and documentation.

Claude ID: 029e8abe-5734-4967-9fb4-c85078c1973d
Maestro ID: 87ffa06e-0ecd-4eb8-b327-dad1ec24f7a9
2025-12-22 21:20:53 -06:00
Pedram Amini
ee54e4ff49 tests pass 2025-12-22 19:37:09 -06:00
Pedram Amini
427840c7f3 ## CHANGES
- Upgraded group chat exports to true GitHub-flavored Markdown rendering! 🚀
- Added `marked` dependency and configured GFM plus line-break handling! 
- Exported messages now support tables, blockquotes, rules, and strikethrough! 🔥
- Code formatting improved: inline code and fenced blocks render correctly! 🧠
- Image embedding revamped: replaces references with base64 before parsing! 🖼️
- New branded export header with Maestro icon, tagline, and links! 🎉
- Export title now reads “Maestro Group Chat Export” for clarity! 🏷️
- Footer attribution updated to <a href="https://runmaestro.ai" target="_blank">runmaestro.ai</a> for consistency! 🌐
- Markdown styling massively enhanced: headings, lists, tables, and code look great! 🎨
- AutoRunLightbox tests updated for portal backdrop and higher z-index! 
2025-12-21 20:32:10 -06:00
Pedram Amini
df472e36d5 MAESTRO: fix theme and layer type consistency
- Add accentForeground to web ThemeProvider defaults and CSS custom properties
- Fix invalid theme property references (yellow→warning, bgHover→accentDim, info→accentText)
- Convert ringColor to --tw-ring-color CSS custom property across components
- Add LayerInput type for proper discriminated union support
- Fix all modal registerLayer calls to include required blocksLowerLayers, capturesFocus, focusTrap
- Update tests to expect 14 CSS properties (added accentForeground)

Files changed:
- 14 component files with Layer type fixes
- 4 files with ringColor conversion
- 2 web files with accentForeground
- 1 type file with LayerInput type
- 1 hook file with proper typing
- 5 test files updated
2025-12-21 11:11:19 -06:00
Pedram Amini
ca836be798 OAuth enabled but no valid token found. Starting authentication...
Found expired OAuth token, attempting refresh...
Token refresh successful
POST "https://api.anthropic.com/v1/messages": 429 Too Many Requests {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your account's rate limit. Please try again later."},"request_id":"req_011CWH1uG2HcPbZAxcTH9eWX"}
2025-12-19 18:46:33 -06:00
Pedram Amini
31ce2bda71 # CHANGES
- Added chokidar for cross-platform file watching support 🔧
- Upgraded file watcher from native fs to chokidar library 📁
- Enhanced participant color generation with round-based variations 🎨
- Reserved blue color (index 0) exclusively for Moderator role 💙
- Added color palette size constant for better color management 🎯
- Improved color variation logic for overflow participant counts 🌈
- Fixed file watching to handle add/unlink events properly 👁️
- Removed platform-specific file watching limitations for better compatibility 🌍
- Enhanced color assignment to prevent non-moderators using blue 🛡️
- Bumped version from 0.9.1 to 0.10.0 for new features 🚀
2025-12-19 15:18:31 -06:00
Pedram Amini
416f373f63 ## CHANGES
- Added Sentry crash reporting for error tracking and debugging 🐛
- Implemented opt-out privacy setting for anonymous crash reports 🔒
- Enhanced agent spawning with generic config options for session continuity 🔧
- Fixed tab creation null safety checks across the codebase 🛡️
- Added Edit Agent action to Quick Actions modal for faster access 
- Enabled bookmark toggle directly from Quick Actions menu 📌
- Improved batch processing to run in read-only mode by default 📝
- Cleaned up queued items display by removing redundant tab indicators 🧹
- Strengthened null checks in tab helper functions for stability 💪
- Updated version to 0.9.1 with comprehensive bug fixes and improvements 🚀
2025-12-17 23:22:02 -06:00
Pedram Amini
7e412482a7 I'd be happy to help you create a clean update summary for your GitHub project! However, I don't see any input provided after "INPUT:" in your message.
Could you please share the changelog, commit history, pull request information, or any other details about what has changed in your project since the last release? This could include:

- Git commit messages
- Pull request descriptions
- Release notes
- Feature additions
- Bug fixes
- Performance improvements
- Breaking changes
- Dependency updates

Once you provide this information, I'll create an exciting CHANGES section with clean, 10-word bullets and relevant emojis as requested!
2025-12-15 23:56:58 -06:00
Pedram Amini
2685db7e6b I'm ready to analyze GitHub project changes and create an exciting update summary! However, I don't see any input provided after "INPUT:" in your message.
Please share the changelog, commit history, release notes, or any other information about what has changed in the GitHub project since the last release, and I'll create a clean, exciting CHANGES section with 10-word bullets and emojis as requested.
2025-12-15 23:20:11 -06:00
Pedram Amini
71c2d0dafe MAESTRO: add E2E test infrastructure and Auto Run setup wizard E2E test (Task 6.1)
- Install Playwright dependencies (@playwright/test, electron-playwright-helpers)
- Create playwright.config.ts for Electron E2E testing
- Add e2e/fixtures/electron-app.ts with Electron launch fixtures and helpers
- Create e2e/autorun-setup.spec.ts with 24 tests (13 active, 11 skipped pending dialog mocking):
  - Wizard Launch: keyboard shortcut, agent selection screen, Escape to close
  - Agent Selection Screen: Claude Code display, other agents, project name, keyboard navigation
  - Directory Selection Screen: (skipped - requires dialog mocking)
  - Document Creation Flow: (skipped - requires full wizard flow)
  - Wizard Navigation: step indicators, button states, Back navigation
  - Exit Confirmation: (skipped - requires dialog mocking)
  - Accessibility: keyboard-only navigation, focus management
- Add npm scripts: test:e2e, test:e2e:ui, test:e2e:headed
- Update .gitignore with e2e-results/, playwright-report/, test-results/
2025-12-14 05:01:19 -06:00
Pedram Amini
56ffd81b87 fix: Update RightPanel test assertions for task progress format
Changed format from "X / Y total tasks completed" to "X of Y tasks completed"
to match updated component text.
2025-12-13 22:18:32 -06:00
Pedram Amini
2dd52a9f7b OAuth enabled but no valid token found. Starting authentication...
Found expired OAuth token, attempting refresh...
Token refresh successful
## CHANGES

- Upgraded to version 0.8.1 with performance boost! 🚀
- Added @tanstack/react-virtual for blazing fast file trees 🌳
- Implemented virtualized rendering for massive file lists 
- Added show/hide dotfiles toggle with eye icon 👁️
- Enhanced date display showing full dates for older logs 📅
- Optimized file tree with flattened structure for speed 🏎️
- Added depth-based indent guides for better hierarchy 📏
- Improved memory usage with virtualized row rendering 💾
- Added showHiddenFiles setting that persists between sessions 💾
- Fixed performance issues when browsing large directories 🎯
2025-12-13 14:37:30 -06:00
Pedram Amini
b8d557e7c2 Apple signed binaries 2025-12-12 18:27:06 -06:00
Pedram Amini
ac67385047 feat: add custom GitHub CLI path setting for Auto Run worktree features
- Add ghPath setting to specify custom path to gh binary (e.g., /opt/homebrew/bin/gh)
- Update git:checkGhCli and git:createPR IPC handlers to accept optional ghPath
- Add UI in Settings > General for configuring the gh path
- Pass ghPath through BatchRunnerModal and useBatchProcessor for PR creation
- Include test infrastructure setup (vitest) and misc updates

Claude ID: 295a322c-974c-4b49-b31d-f7be18819332
Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
2025-12-07 13:13:44 -06:00
Pedram Amini
d2534e89d6 refactor(cli): Replace pkg with esbuild for smaller builds
Migrate from @yao-pkg/pkg (standalone binaries) to esbuild (bundled JS).
This removes ~46 packages from the dependency tree and produces a 174KB
bundle instead of ~50MB per-platform binaries.

Users of the CLI already have Node.js installed (required for Claude Code),
so standalone binaries are unnecessary overhead.

Changes:
- Remove @yao-pkg/pkg, add esbuild
- Add scripts/build-cli.mjs for esbuild bundling
- Update package.json build scripts and extraResources config
- Update README with new installation instructions
- Include batch-processor improvements from linter

Session: 472b48d8-4774-4955-8c98-2c5b6294beb5
2025-12-06 02:50:03 -06:00
Pedram Amini
42fbf067ad feat: Add CLI tool and Process Monitor improvements
CLI Tool (maestro-playbook):
- New standalone binary for running playbooks from command line
- Supports list groups, list agents, list playbooks, run playbook
- JSONL output format for easy parsing and piping
- Dry-run mode and no-history options
- Documentation added to README.md

Process Monitor Enhancements:
- Show only running processes (hide idle/inactive)
- Display human-readable runtime (e.g., "2m 30s", "1h 5m")
- Show Claude session ID with click-to-navigate
- Improved column layout with less spacing
- Default to expanded view
- Visual feedback on refresh (500ms spinner)
- Kill process functionality with confirmation

Process Tracking:
- Added startTime to ManagedProcess interface
- Expose startTime via getActiveProcesses IPC

Claude ID: c7e537b9-c2a7-4cc7-b49b-e7ea0ca1d4cb
Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
2025-12-06 02:50:02 -06:00
Pedram Amini
059f16a9e8 # CHANGES
• Added ZIP export/import functionality for playbooks sharing 🎁
• Implemented per-tab token accumulation for accurate context tracking 📊
• Added loop summary history entries with detailed metrics 🔄
• Fixed markdown paragraph rendering in nested list items 📝
• Added export/import buttons to playbook management UI 💾
• Enhanced batch processor with per-loop token tracking 📈
• Added human-readable duration formatting for loop summaries ⏱️
• Improved debug logging for document reset-on-completion flow 🐛
• Added "Save as New" option for modified playbooks 💫
• Fixed context window percentage calculation using accumulated tokens 🎯
2025-12-04 07:02:56 -06:00
Pedram Amini
aaf315adf6 feat: Update app branding with darker icons and README badge
- Add "Made with Maestro" SVG badge to README
- Update app icons with darker purple color scheme (#2d1f4e)
- Add canvas dev dependency for icon generation
- Fix AchievementCard badge visibility with consistent dark bg
- Move code block copy button to bottom-right for better UX
- Add vertical margin to pre blocks for better spacing
- Improve batch synopsis prompt to be more concise

Claude ID: 97a10f0d-145d-4352-babd-6d9caed0f9dc
Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
2025-12-02 17:02:29 -06:00
Pedram Amini
e14ec426a0 feat: Enhance achievement system with canvas-confetti and share functionality
- Replace custom CSS confetti with canvas-confetti library for massive
  Raycast-style explosions (850+ initial particles with continuous bursts)
- Add circular progress ring around Maestro icon showing 11 badge segments
- Add share button to AchievementCard with copy-to-clipboard and download
- Fire confetti immediately on Standing Ovation mount and on dismiss
- Fix infinite loop error in PlaygroundPanel layer registration
- Fix badge tooltip positioning and click-to-toggle behavior
- Improve empty badge cell visibility with dashed borders

Claude ID: 97a10f0d-145d-4352-babd-6d9caed0f9dc
Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
2025-12-02 11:59:00 -06:00
Pedram Amini
6574ab9fd8 feat: Token counts in file preview, unread-aware tab nav, and mobile improvements
- Add js-tiktoken for token counting in FilePreview stats bar
- Shell spawning now uses -l -i flags for proper login+interactive environment
- Tab navigation shortcuts (Cmd+[/]/1-9) now respect unread filter state
- TabBar scroll area properly separates filter button from scrollable tabs
- Alt+Meta shortcuts fixed on macOS (e.g., Alt+Meta+t for Tab Switcher)
- Tab Switcher added to Quick Actions modal
- Mobile app: improved WebSocket reconnection, status badges, message handling

Claude ID: 472a496d-f767-49dc-8074-a08d20d2b550
Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
2025-12-01 23:00:37 -06:00
Pedram Amini
0ecec1cc75 refactor: Web interface as true remote control with code deduplication
Major architectural improvement to ensure web interface operations go through
the same code paths as desktop, eliminating duplicate logic and race conditions.

Key changes:
- Fix AgentDetector running 20+ times at startup via promise deduplication
- Web commands now forward to renderer's processInput instead of spawning directly
- Mode switching forwards to desktop instead of just acknowledging requests
- Interrupt forwards to desktop to properly update session state to idle
- Add IPC channels: remote:executeCommand, remote:switchMode, remote:interrupt
- Add mobile MessageHistory component for viewing session AI/shell logs

Architecture now ensures single source of truth:
  Web → IPC → Renderer (same code path as desktop)
2025-11-28 00:53:01 -06:00
Pedram Amini
bbf6612f35 feat: Mobile-first remote access with QR codes and live sessions
Redesign the web server architecture for simplified mobile remote control:

- Replace per-session web servers with single server using random port and
  auto-generated security token for secure access
- Add "Live Session" toggle to enable/disable individual sessions for remote access
- Add QR code component for easy mobile connection scanning
- Remove tunnel settings and complex authentication management
- Add network utilities for IP address detection

Mobile web interface improvements:
- Device color scheme preference support (light/dark mode)
- Connection status indicator with automatic reconnection
- Offline queue for commands typed while disconnected
- Swipe gestures for common actions
- Quick actions menu for the send button

Update documentation to reflect new mobile-first remote access approach.

Claude ID: 3dd3573f-bed1-4a0e-984c-10081124092a
Maestro ID: 5a166b38-b7e9-47f0-a8ff-0113c65f2682
2025-11-27 21:42:03 -06:00
Pedram Amini
304544eeef MAESTRO: Serve built web assets from Fastify static handler
- Install @fastify/static for serving static files
- Add resolveWebAssetsPath method to find web assets in dist/web
- Register @fastify/static plugin to serve assets at /web/assets/
- Add serveIndexHtml helper that transforms asset paths for SPA
- Update /web/desktop and /web/mobile routes to serve index.html
- Transform relative ./assets/ paths to /web/assets/ for proper routing
2025-11-27 03:37:05 -06:00