Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
338 commits
Select commit Hold shift + click to select a range
eea56e1
refactor: centralize platform detection into shared utility module
reachraza Mar 4, 2026
1081a32
refactor: centralize renderer platform detection via window.maestro.p…
reachraza Mar 4, 2026
491e3f7
fix: use getWhichCommand() helper and add Linux platform test coverage
reachraza Mar 5, 2026
db00db5
style: fix symphony-registry.json formatting for CI
reachraza Mar 5, 2026
89f78ad
forgot to bump version!
pedramamini Mar 3, 2026
7991045
Add 'bills-bot' entry to symphony-registry.json (#388)
BillChirico Mar 4, 2026
e074d58
fix: auto-focus input field when toggling AI/Shell mode via Cmd+J
kianhub Mar 3, 2026
dbc69f1
refactor: extract focus delay into named constant
kianhub Mar 3, 2026
2143955
test: add setActiveFocus and inputRef mocks to toggleMode tests
kianhub Mar 3, 2026
1d5b3cd
test: assert auto-focus behavior in toggleMode tests
kianhub Mar 3, 2026
d236466
[Symphony] Start contribution for #160
pedramamini Mar 1, 2026
244d039
MAESTRO: Phase 9 — Keyboard shortcuts for terminal tabs
pedramamini Mar 1, 2026
168c346
fix: update test mocks and fix conditional hooks for bookmark/tab fea…
pedramamini Mar 2, 2026
362e64a
[Symphony] Start contribution for #160
pedramamini Mar 1, 2026
851b2a7
MAESTRO: Fix four terminal tab integration bugs
pedramamini Mar 5, 2026
bd96aba
fix: terminal tab rename keyboard shortcut and defensive cwd fallback
pedramamini Mar 5, 2026
c884825
fix: add missing HamburgerMenuContent component extracted from Sessio…
pedramamini Mar 5, 2026
05a4bfb
fix: resolve duplicate entries in file tree by using tree-structured …
pedramamini Mar 5, 2026
38a741c
feat: add --read-only flag to maestro-cli send command
pedramamini Mar 5, 2026
0ef4db6
MAESTRO: Add task.pending event type to Cue automation system
pedramamini Mar 5, 2026
05f3cf8
fix: allow session name pill to shrink so date doesn't collide with t…
pedramamini Mar 5, 2026
6642d01
fix: resolve 7 terminal tab integration issues (#160)
pedramamini Mar 5, 2026
a9d37cb
MAESTRO: Update CLAUDE.md Cue description to include all trigger types
pedramamini Mar 5, 2026
8eaed7e
feat: add unread agents filter toggle with Cmd+Shift+U shortcut
pedramamini Mar 5, 2026
9625315
Replace hardcoded tool detail extractors with generic summarizeToolInput
pedramamini Mar 5, 2026
7a3e642
fix: handle expected IPC errors gracefully to prevent unhandled rejec…
pedramamini Mar 4, 2026
4d11927
Merge remote-tracking branch 'origin/deep-links' into 0.16.0-RC
pedramamini Mar 6, 2026
1469a16
Merge remote-tracking branch 'origin/directors-notes-stream' into 0.1…
pedramamini Mar 6, 2026
7206526
Merge remote-tracking branch 'origin/encore-features' into 0.16.0-RC
pedramamini Mar 6, 2026
d7b6bf6
merge: resolve conflicts merging maestro-cue-spinout into 0.16.0-RC
pedramamini Mar 6, 2026
c3e928a
Merge remote-tracking branch 'origin/run-all-wizard-docs' into 0.16.0-RC
pedramamini Mar 6, 2026
f6541a7
fix: resolve type errors from branch merges
pedramamini Mar 6, 2026
930b649
merge: resolve conflicts merging little-thing into 0.16.0-RC
pedramamini Mar 6, 2026
15b59a2
feat: add Copy Deep Link option to tab overlay menu
pedramamini Mar 6, 2026
ce5cf67
fix: use textMain for session names to prevent visual dimming
pedramamini Mar 6, 2026
6cf514e
Merge remote-tracking branch 'origin/little-thing' into 0.16.0-RC
pedramamini Mar 6, 2026
82e1a80
fix: resolve tsconfig.main.json build errors from branch merges
pedramamini Mar 6, 2026
9060bb8
Merge remote-tracking branch 'origin/deep-links' into 0.16.0-RC
pedramamini Mar 6, 2026
6679395
Merge branch '0.16.0-RC' of https://github.com/RunMaestro/Maestro int…
pedramamini Mar 6, 2026
47eedca
fix: reset inputMode when switching from terminal to AI/file tabs
pedramamini Mar 6, 2026
3b0bba2
fix: pass app entry point in dev-mode protocol registration
pedramamini Mar 6, 2026
8d2b003
fix: count only agents with entries in lookback window for Director's…
pedramamini Mar 6, 2026
28b93de
Gate CUE history filter on maestroCue encore feature and fix crowded …
pedramamini Mar 6, 2026
8cc9a6c
fix: terminal tabs now connect to SSH remote host when session SSH is…
pedramamini Mar 6, 2026
926f978
fix: preserve draft input when replaying a previous message
pedramamini Mar 6, 2026
8910615
refactor: move Usage & Stats settings from General tab to Encore Feat…
pedramamini Mar 6, 2026
7409805
fix: match unread agent indicator dot position to tab unread pattern
pedramamini Mar 6, 2026
b3c5c8d
Merge remote-tracking branch 'origin/deep-links' into 0.16.0-RC
pedramamini Mar 6, 2026
25d26fc
merge: resolve conflict merging encore-features into 0.16.0-RC
pedramamini Mar 6, 2026
7e1025c
merge: resolve conflict merging maestro-cue-spinout into 0.16.0-RC
pedramamini Mar 6, 2026
56108c9
Add CUE entry type to History Panel help modal when maestroCue is ena…
pedramamini Mar 6, 2026
6efd53e
Merge remote-tracking branch 'origin/little-thing' into 0.16.0-RC
pedramamini Mar 6, 2026
5092e46
docs: move Usage Dashboard and Maestro Symphony under Encore Features…
pedramamini Mar 6, 2026
bca4bed
feat: show View history link on files tab during batch run
pedramamini Mar 6, 2026
03ae596
Add comprehensive Maestro Cue user documentation (4 pages)
pedramamini Mar 6, 2026
4810a99
Merge remote-tracking branch 'origin/encore-features' into 0.16.0-RC
pedramamini Mar 6, 2026
027b81e
merge: resolve conflicts merging maestro-cue-spinout docs into 0.16.0-RC
pedramamini Mar 6, 2026
a53b851
Merge remote-tracking branch 'origin/little-thing' into 0.16.0-RC
pedramamini Mar 6, 2026
4d0e212
fix: remove hardcoded max-width on header session name
pedramamini Mar 6, 2026
debe883
refactor: reorder Encore Features, remove BETA from Usage Dashboard
pedramamini Mar 6, 2026
391f9c0
merge: resolve conflicts merging encore-features into 0.16.0-RC (reor…
pedramamini Mar 6, 2026
45cc4b0
Merge remote-tracking branch 'origin/little-thing' into 0.16.0-RC
pedramamini Mar 6, 2026
c1cf4dc
Add Cue YAML editor, context menu integration, and fix help modal z-i…
pedramamini Mar 6, 2026
c2a366c
Add tests for cueYamlEditor modal and Configure Maestro Cue command p…
pedramamini Mar 6, 2026
cbc98a3
merge: resolve conflict merging maestro-cue-spinout into 0.16.0-RC (C…
pedramamini Mar 6, 2026
ee06bef
feat: show terminal tabs in tab switcher modal; fix xterm repaint on …
pedramamini Mar 6, 2026
fd20866
Move Configure Maestro Cue below Configure Worktrees in context menu
pedramamini Mar 6, 2026
0b7e4aa
Center history filter pills when CUE type adds a third row
pedramamini Mar 6, 2026
5c4a954
Add conversational AI Assist chat to CueYamlEditor with agent spawn a…
pedramamini Mar 6, 2026
ce90391
Merge remote-tracking branch 'origin/maestro-cue-spinout' into 0.16.0-RC
pedramamini Mar 6, 2026
6fb6a43
version bump
pedramamini Mar 6, 2026
6bf9839
ignore Cue files
pedramamini Mar 6, 2026
d5c606e
Add Cue Examples cookbook page and document triggeredBy filter field
pedramamini Mar 6, 2026
564d85f
fix: skip directory collision warning when agents are on different hosts
pedramamini Mar 6, 2026
52d9a37
Merge remote-tracking branch 'origin/maestro-cue-spinout' into 0.16.0-RC
pedramamini Mar 6, 2026
8174d7e
Merge remote-tracking branch 'origin/little-thing' into 0.16.0-RC
pedramamini Mar 6, 2026
fc466b8
Rename Cancel to Exit in CueYamlEditor and pass cueShortcutKeys to Cu…
pedramamini Mar 6, 2026
1a10463
Merge remote-tracking branch 'origin/maestro-cue-spinout' into 0.16.0-RC
pedramamini Mar 6, 2026
c469ec6
fix: close AI tab falls back to correct neighbor using unifiedTabOrder
pedramamini Mar 6, 2026
e47cb59
fix: check sessionSshRemoteConfig as primary SSH remote ID source
pedramamini Mar 6, 2026
16322c8
fix: use dark text colors for context warning sash in light mode
pedramamini Mar 6, 2026
d507d10
fix: dropdown clipping on hamburger menu and live overlay, rename Rem…
pedramamini Mar 6, 2026
96190ec
fix: always show .maestro folder in file tree regardless of ignore pa…
pedramamini Mar 6, 2026
993957e
Add missing Cue template variables for file changeType and agent comp…
pedramamini Mar 6, 2026
f5534af
Merge remote-tracking branch 'origin/maestro-cue-spinout' into 0.16.0-RC
pedramamini Mar 6, 2026
4f4d6f4
Merge remote-tracking branch 'origin/little-thing' into 0.16.0-RC
pedramamini Mar 6, 2026
924cbb7
fix: update CueHelpModal -> CueHelpContent import after rename in mae…
pedramamini Mar 6, 2026
c8154d8
Add Cue Graph visualizer tab, standardize modal sizes, and inline hel…
pedramamini Mar 6, 2026
31478e6
merge: integrate PR #519 (OpenCode multi-step fix, onConfigBlur signa…
pedramamini Mar 6, 2026
73dd645
fix: preserve terminal content when returning from AI mode via isVisi…
pedramamini Mar 6, 2026
3c38127
Use theme accent instead of hardcoded Cue teal for toggles, borders, …
pedramamini Mar 6, 2026
a337827
fix: closeTerminalTab falls back to correct neighbor using unifiedTab…
pedramamini Mar 6, 2026
cd135ab
merge: resolve conflicts merging maestro-cue-spinout into 0.16.0-RC (…
pedramamini Mar 6, 2026
142b52f
fix: persist terminal tab content across session switches
pedramamini Mar 6, 2026
fceeb5a
fix: defer WebGL addon load until terminal container is visible
pedramamini Mar 7, 2026
10c5d20
MAESTRO: Add pipeline types and React Flow canvas foundation for Cue …
pedramamini Mar 7, 2026
3a73db0
Merge remote-tracking branch 'origin/maestro-cue-spinout' into 0.16.0-RC
pedramamini Mar 7, 2026
85af511
fix: terminal tabs on SSH agents now connect to the remote host
pedramamini Mar 7, 2026
747a93c
MAESTRO: Add custom node types and pipeline edge for Cue visual editor
pedramamini Mar 7, 2026
c8af227
MAESTRO: Add trigger and agent drawers with drag-and-drop for Cue pip…
pedramamini Mar 7, 2026
c77aba7
MAESTRO: Add pipeline lifecycle management with selector dropdown, co…
pedramamini Mar 7, 2026
215981e
MAESTRO: Add node and edge configuration panels for Cue pipeline editor
pedramamini Mar 7, 2026
ab4174d
MAESTRO: Add pipeline-to-YAML conversion utility for Cue visual editor
pedramamini Mar 7, 2026
b444a8f
MAESTRO: Add YAML-to-pipeline reverse conversion for Cue visual editor
pedramamini Mar 7, 2026
4489eef
MAESTRO: Integrate YAML conversion into pipeline editor with save/loa…
pedramamini Mar 7, 2026
89156dc
fix: use visibility:hidden instead of display:none for terminal keep-…
pedramamini Mar 7, 2026
4ab5a75
MAESTRO: Add pipeline layout persistence via IPC for Cue visual editor
pedramamini Mar 7, 2026
8b69794
fix: SSH terminal tabs now actually connect to remote host
pedramamini Mar 7, 2026
f1784ed
MAESTRO: Update CueModal to use Pipeline Editor as default tab and re…
pedramamini Mar 7, 2026
e2752bd
MAESTRO: Add pipeline-aware status indicators to CueModal Dashboard tab
pedramamini Mar 7, 2026
f42fb0f
remove obsolete terminalWidth setting; update log buffer description
pedramamini Mar 7, 2026
e1f53fe
MAESTRO: Add polish features to Cue visual pipeline editor
pedramamini Mar 7, 2026
bfac684
test: add PtySpawner tests covering SSH terminal and shell terminal p…
pedramamini Mar 7, 2026
cecb0cb
fix: improve light theme contrast for syntax highlighting and colors
pedramamini Mar 7, 2026
f6e66b4
fix: always mount terminal sessions regardless of file preview / AI view
pedramamini Mar 7, 2026
68a62da
Merge remote-tracking branch 'origin/main' into 0.16.0-RC
pedramamini Mar 7, 2026
734d773
fix: include busy agents in unread agents filter
pedramamini Mar 7, 2026
cb00fc4
MAESTRO: Fix empty pipeline graph and add drawer improvements
pedramamini Mar 7, 2026
a6e5b08
Merge remote-tracking branch 'origin/maestro-cue-spinout' into 0.16.0-RC
pedramamini Mar 7, 2026
ecc2339
merge: resolve conflicts merging little-thing into 0.16.0-RC (keep re…
pedramamini Mar 7, 2026
894c665
MAESTRO: Add layout algorithms and node dragging to Cue graph view
pedramamini Mar 7, 2026
60a9853
test: add XTerminal and terminalTabHelpers coverage
pedramamini Mar 7, 2026
73e81eb
fix: remove scroll-to-bottom arrow indicator from terminal output view
pedramamini Mar 7, 2026
0445fec
MAESTRO: Fix pipeline editor UI issues and add legend/auto-config
pedramamini Mar 7, 2026
fc3e99c
Merge remote-tracking branch 'origin/maestro-cue-spinout' into 0.16.0-RC
pedramamini Mar 7, 2026
44be9a7
fix: suppress empty groups and New Group button in unread agents filter
pedramamini Mar 7, 2026
8e26571
MAESTRO: Add drag handles and gear icons to pipeline editor nodes
pedramamini Mar 7, 2026
9d87702
Merge remote-tracking branch 'origin/little-thing' into 0.16.0-RC
pedramamini Mar 7, 2026
c6734e5
feat: add empty state for unread agents filter with centered Bot icon
pedramamini Mar 7, 2026
c73693c
merge: integrate origin/0.16.0-RC into terminal-upgrade, resolve conf…
pedramamini Mar 7, 2026
e6cdae9
Merge pull request #528 from RunMaestro/terminal-upgrade
pedramamini Mar 7, 2026
36f41f0
fix: terminal visual polish and keyboard handler cleanup
pedramamini Mar 7, 2026
9750639
fix: resolve lint warnings, stale tests, and two cue bugs
pedramamini Mar 7, 2026
79db6a4
Merge remote-tracking branch 'origin/maestro-cue-spinout' into 0.16.0-RC
pedramamini Mar 7, 2026
0a0d27d
Merge remote-tracking branch 'origin/little-thing' into 0.16.0-RC
pedramamini Mar 7, 2026
379a936
fix: terminal tab bugs, cue hotkey, and XTerminal WebGL load order
pedramamini Mar 7, 2026
a7211fa
## CHANGES
pedramamini Mar 7, 2026
2c033f5
fix: group agents by user-defined groups in Cue Pipeline Editor drawer
pedramamini Mar 7, 2026
bd45839
## CHANGES
pedramamini Mar 7, 2026
2f9dba0
fix: file tree auto-refresh timer destroyed on right panel tab switch
pedramamini Mar 7, 2026
5a7b49f
feat: split agent prompt into input/output, add pipeline color picker…
pedramamini Mar 7, 2026
6f53b50
refactor: consolidate Maestro project files under .maestro/ directory
pedramamini Mar 7, 2026
5d580ce
test: update tests for .maestro/ directory migration
pedramamini Mar 7, 2026
bb213a6
fix: resolve test failures from .maestro/ migration
pedramamini Mar 7, 2026
92bf551
feat: add Edit YAML button to Cue dashboard and show sessions when en…
pedramamini Mar 7, 2026
c4b5367
feat: add output_prompt support to Cue pipeline agents
pedramamini Mar 7, 2026
c66951c
feat: replace pattern preset replace-all with copy-to-clipboard preview
pedramamini Mar 7, 2026
5fb805c
## CHANGES
pedramamini Mar 8, 2026
5e19983
## CHANGES
pedramamini Mar 8, 2026
d5c0122
## CHANGES
pedramamini Mar 8, 2026
4fa375d
## CHANGES
pedramamini Mar 8, 2026
d1d06a1
feat: add image support to group chat (display, persistence, agent fo…
pedramamini Mar 8, 2026
64e2419
test: add tests for Cue modal escape-from-help and unsaved changes co…
pedramamini Mar 8, 2026
4bca30c
chore: remove beta badge from Storage Location setting
pedramamini Mar 8, 2026
87ed425
fix: restore "All Pipelines" selection on Pipeline Editor load
pedramamini Mar 8, 2026
abc838f
feat: append active theme to runmaestro.ai URLs
pedramamini Mar 8, 2026
ab91c55
feat: add theme-hint script for Mintlify docs
pedramamini Mar 8, 2026
c08fb5a
fix: elevate branding header z-index so menu renders above sidebar co…
pedramamini Mar 8, 2026
6777895
## CHANGES
pedramamini Mar 8, 2026
7ee7057
fix: resolve pipeline-dashboard mismatch by adding agent_id binding a…
pedramamini Mar 8, 2026
d1883f4
MAESTRO: feat: add gemini-cli to ToolType, agent definitions, and cap…
openasocket Feb 20, 2026
139daa6
MAESTRO: feat: add gemini-cli to AGENT_ARTIFACTS in contextGroomer.ts
openasocket Feb 20, 2026
b7f097c
MAESTRO: feat: add gemini-cli to AGENT_TARGET_NOTES and getAgentDispl…
openasocket Feb 20, 2026
1c5926b
MAESTRO: feat: enable gemini-cli as supported agent in wizard AgentSe…
openasocket Feb 20, 2026
d808668
MAESTRO: feat: add gemini-cli display name to sessionValidation and N…
openasocket Feb 20, 2026
d97a631
MAESTRO: feat: add gemini-cli to all Record<ToolType> maps, error pat…
openasocket Feb 20, 2026
c763fc6
MAESTRO: feat: add Gemini CLI output parser for stream-json NDJSON ev…
openasocket Feb 20, 2026
4c9dea4
MAESTRO: Add Gemini session storage
openasocket Feb 20, 2026
6fed8be
MAESTRO: Add Gemini CLI support to CLI stack
openasocket Feb 20, 2026
c1726b8
MAESTRO: ensure gemini surfaces across UI
openasocket Feb 20, 2026
43a4846
MAESTRO: wire gemini storage + stats
openasocket Feb 20, 2026
e50b96e
MAESTRO: align Gemini parser tests with spec
openasocket Feb 20, 2026
0a4d54f
MAESTRO: cover gemini error patterns
openasocket Feb 20, 2026
64e5e39
MAESTRO: fix Gemini CLI streaming display + harden integration
openasocket Feb 21, 2026
1a667f9
MAESTRO: add Gemini workspace approval detection + IPC bridge
openasocket Feb 21, 2026
116b7cb
MAESTRO: wire Gemini workspace dirs into session + spawn pipeline
openasocket Feb 21, 2026
f9012fc
MAESTRO: add WorkspaceApprovalModal component for Gemini workspace ac…
openasocket Feb 21, 2026
7f7601c
MAESTRO: wire WorkspaceApprovalModal into store, listeners, and rende…
openasocket Feb 21, 2026
218d24a
MAESTRO: emit thinking-chunk for non-partial text events in StdoutHan…
openasocket Feb 21, 2026
82f7041
MAESTRO: add Gemini session stats store for persisting live token usage
openasocket Feb 21, 2026
32f137a
MAESTRO: capture per-turn Gemini token usage via gemini-session-stats…
openasocket Feb 21, 2026
806c9f9
MAESTRO: merge persisted Gemini token stats into parseGeminiSessionCo…
openasocket Feb 21, 2026
3dd5b61
MAESTRO: add sessionId extraction regex tests for Gemini stats lookup
openasocket Feb 21, 2026
83b73a8
MAESTRO: implement deleteMessagePair for Gemini session editing
openasocket Feb 21, 2026
868032d
MAESTRO: add session metadata support (naming, starring, named sessio…
openasocket Feb 21, 2026
c176dc8
MAESTRO: fix Gemini text routing and context usage calculation
openasocket Feb 21, 2026
d77a101
MAESTRO: add Gemini stats store schema/defaults tests to agentSession…
openasocket Feb 21, 2026
95396b5
MAESTRO: add getAllNamedSessions tests for agent exclusion, starred p…
openasocket Feb 21, 2026
a851c6d
MAESTRO: add StdoutHandler Gemini text routing tests for result fallb…
openasocket Feb 21, 2026
c0d62cc
MAESTRO: add Gemini context usage percentage and display tests
openasocket Feb 21, 2026
d3efd78
MAESTRO: improve Gemini error detection with model-specific capacity …
openasocket Feb 21, 2026
2b3b1a7
MAESTRO: fix Gemini group chat sandbox and batch/readOnly arg conflicts
openasocket Feb 21, 2026
6e3c88d
MAESTRO: fix SSH arg passthrough losing Gemini --include-directories …
openasocket Feb 28, 2026
f45a159
MAESTRO: fix SSH path normalization for Gemini --include-directories …
openasocket Feb 28, 2026
15a3f9b
MAESTRO: report silent JSON parse failure via Sentry in Gemini sessio…
openasocket Feb 28, 2026
e33c491
MAESTRO: add Windows path patterns to extractDeniedPath for cross-pla…
openasocket Feb 28, 2026
4872f7f
MAESTRO: replace console.warn with Sentry reporting for workspace app…
openasocket Feb 28, 2026
eb87ea9
MAESTRO: fix SSH sshRemoteId fallback in WorkspaceApprovalModal
openasocket Feb 28, 2026
249a3f0
MAESTRO: fix list-sessions CLI to route Gemini CLI agents to dedicate…
openasocket Feb 28, 2026
2966b53
MAESTRO: verify and harden wizard Gemini NDJSON conversation handling
openasocket Feb 28, 2026
6af11ce
MAESTRO: verify and update Gemini CLI capability flags against v0.29.…
openasocket Feb 28, 2026
247967e
MAESTRO: fix orphaned intermediate messages in Gemini deleteMessagePair
openasocket Feb 28, 2026
4e3dd91
MAESTRO: fix misleading plan (read-only) wording in context groomer
openasocket Feb 28, 2026
17cdfbe
MAESTRO: update inline wizard error message to include all supported …
openasocket Feb 28, 2026
8d8ee8d
MAESTRO: fix comment/code mismatch in AgentSelectionScreen AGENT_TILES
openasocket Feb 28, 2026
b290cc6
MAESTRO: guard --no-sandbox behind readOnlyArgs check in group chat m…
openasocket Mar 8, 2026
f9716cd
MAESTRO: report JSON parse errors via Sentry in gemini session storage
openasocket Mar 8, 2026
7279113
MAESTRO: guard against malformed timestamps producing NaN durations i…
openasocket Mar 8, 2026
3e47d30
MAESTRO: add non-vacuous length assertions to SSH path tests
openasocket Mar 8, 2026
18ed14f
MAESTRO: sum mixed input+prompt token fields in Gemini session parser
openasocket Mar 8, 2026
68d4c7e
MAESTRO: fix ambiguous basename match in Gemini history dir lookup
openasocket Mar 8, 2026
bfdf667
MAESTRO: add argument denylist for sessionCustomArgs injection (TASK-…
openasocket Mar 8, 2026
09ad601
MAESTRO: normalize and validate workspace approval paths (TASK-S02)
openasocket Mar 8, 2026
d46b73b
MAESTRO: harden Windows shell argument escaping and add shell:false o…
openasocket Mar 8, 2026
e94b271
MAESTRO: validate model and session ID inputs in CLI spawner and buil…
openasocket Mar 8, 2026
c8b00eb
MAESTRO: fix Gemini -y in read-only mode and add readOnlyCliEnforced …
openasocket Mar 8, 2026
e6eff07
MAESTRO: eliminate triple JSON parsing on NDJSON hot path (TASK-M01)
openasocket Mar 8, 2026
76e1fa4
MAESTRO: fix searchSessions O(N²) file reads and add bounded concurre…
openasocket Mar 8, 2026
1977a69
MAESTRO: debounce geminiStatsStore writes with 5s flush interval and …
openasocket Mar 8, 2026
a00ab95
MAESTRO: add SSH wrapping to spawnModeratorSynthesis (TASK-M04)
openasocket Mar 8, 2026
9c6ce4c
MAESTRO: add write serialization and atomic writes to deleteMessagePa…
openasocket Mar 8, 2026
46d8c67
MAESTRO: validate session file exists before --resume in spawnGeminiC…
openasocket Mar 8, 2026
707f033
MAESTRO: replace 130 raw console.log calls with structured logger.deb…
openasocket Mar 8, 2026
d9bca1c
MAESTRO: strip raw errorMessage from workspace approval events (TASK-…
openasocket Mar 8, 2026
cd1ba13
MAESTRO: add process watchdog for hung agents (TASK-M11)
openasocket Mar 8, 2026
e123951
MAESTRO: add file size guard (50MB) for Gemini session file reads (TA…
openasocket Mar 8, 2026
52e5ccf
fix: Gemini CLI stderr filtering and response display
openasocket Mar 9, 2026
24d809a
MAESTRO: bound jsonBuffer and streamedText growth (TASK-m01)
openasocket Mar 10, 2026
0f1083c
perf: hoist stderr regex patterns and cap log entry text at 512KB
openasocket Mar 10, 2026
94d608b
MAESTRO: fix double-counting in parseGeminiSessionContent token accum…
openasocket Mar 10, 2026
979624d
MAESTRO: skip full JSON parse when persisted stats exist, eliminate r…
openasocket Mar 10, 2026
8303687
MAESTRO: memoize derived values and handlers in React components (TAS…
openasocket Mar 10, 2026
900de5f
MAESTRO: extract duplicate buildGeminiWorkspaceDirArgs to group-chat-…
openasocket Mar 10, 2026
84c3f8d
MAESTRO: add timeout for pending participant responses in group chat …
openasocket Mar 10, 2026
ffaffe2
MAESTRO: fix orphaned process on duplicate addParticipant race condit…
openasocket Mar 10, 2026
0c57e11
MAESTRO: log and error on silent edge cases (TASK-m08)
openasocket Mar 10, 2026
af76968
MAESTRO: clean up type safety issues across 7 files (TASK-m09)
openasocket Mar 10, 2026
14cd771
MAESTRO: sanitize participant names in group chat session IDs (TASK-m10)
openasocket Mar 10, 2026
a807578
MAESTRO: reduce information disclosure in logs (TASK-m11)
openasocket Mar 10, 2026
04c7bdd
MAESTRO: add NaN duration guard to CLI agent-sessions (TASK-m12)
openasocket Mar 10, 2026
96e58ed
MAESTRO: add readOnlyCliEnforced guard to participant spawns (TASK-m13)
openasocket Mar 10, 2026
cc48d7e
MAESTRO: remove unnecessary `as any` casts on gemini-cli agentType in…
openasocket Mar 10, 2026
bf69103
MAESTRO: add debug logging for structured-output agent JSON parse fai…
openasocket Mar 10, 2026
a2f529d
MAESTRO: add 5s timeout to CLI binary detection via Promise.race (TAS…
openasocket Mar 10, 2026
6925388
MAESTRO: add dedicated test suite for spawnGeminiCli (TASK-T01)
openasocket Mar 10, 2026
afca1a5
MAESTRO: add comprehensive test suite for group chat output parser (T…
openasocket Mar 10, 2026
6ce326a
MAESTRO: add corrupted state tests for group chat session recovery (T…
openasocket Mar 10, 2026
d53197f
MAESTRO: add searchSessions and listSessionsPaginated test coverage (…
openasocket Mar 10, 2026
dbc2f4b
MAESTRO: add moderator synthesis pipeline tests (TASK-T05)
openasocket Mar 10, 2026
f88f09d
MAESTRO: fix TS2353 lint errors in detectErrorFromParsed return types
openasocket Mar 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ Work\ Trees/
community-data/
.mcp.json
specs/
.maestro/
maestro-cue.yaml

# Tests
coverage/
Expand Down
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ node_modules/
coverage/
*.min.js
.gitignore
.prettierignore
49 changes: 49 additions & 0 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Deep technical documentation for Maestro's architecture and design patterns. For
- [Achievement System](#achievement-system)
- [AI Tab System](#ai-tab-system)
- [File Preview Tab System](#file-preview-tab-system)
- [Terminal Tab System](#terminal-tab-system)
- [Execution Queue](#execution-queue)
- [Navigation History](#navigation-history)
- [Group Chat System](#group-chat-system)
Expand Down Expand Up @@ -1116,6 +1117,54 @@ File tabs display a colored badge based on file extension. Colors are theme-awar

---

## Terminal Tab System

Persistent PTY-backed terminal tabs that integrate into the unified tab bar alongside AI and file tabs. Built on xterm.js for full terminal emulation with ANSI support.

### Features

- **Persistent PTY**: Each tab spawns a dedicated PTY via `process:spawnTerminalTab` IPC — the shell stays alive between tab switches
- **xterm.js rendering**: Full terminal emulation via `XTerminal.tsx` (wraps `@xterm/xterm`); raw PTY data passes through unchanged
- **Multi-tab**: Multiple independent shells per agent; tabs are closable and renameable
- **State persistence**: `terminalTabs` array saved with the session; PTYs are re-spawned on restore
- **Spawn failure UX**: `state === 'exited' && pid === 0` shows an error overlay with a Retry button
- **Exit message**: PTY exit writes a yellow ANSI banner and new-terminal hint to the xterm buffer

### Terminal Tab Interface

```typescript
interface TerminalTab {
id: string; // Unique tab ID (UUID)
name: string; // Display name (custom or auto "Terminal N")
shellType: string; // Shell binary (e.g., "zsh", "bash")
cwd: string; // Working directory
pid: number; // PTY process ID (0 = not yet spawned)
state: 'idle' | 'running' | 'exited';
exitCode: number | null;
createdAt: number;
}
```

### Session Fields

```typescript
// In Session interface
terminalTabs: TerminalTab[]; // Array of terminal tabs
activeTerminalTabId: string | null; // Active terminal tab (null if not in terminal mode)
```

### Key Files

| File | Purpose |
| --------------------------- | -------------------------------------------------------------------- |
| `XTerminal.tsx` | xterm.js wrapper; handles PTY data I/O and terminal lifecycle |
| `TerminalView.tsx` | Layout container; manages tab selection and spawn/exit state |
| `terminalTabHelpers.ts` | CRUD helpers (`createTerminalTab`, `addTerminalTab`, `closeTerminalTab`, etc.) |
| `tabStore.ts` | Zustand selectors for terminal tab state |
| `src/main/ipc/handlers/process.ts` | `process:spawnTerminalTab` IPC handler with SSH support |

---

## Execution Queue

Sequential message processing system that prevents race conditions when multiple operations target the same agent.
Expand Down
35 changes: 35 additions & 0 deletions CLAUDE-IPC.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ The `window.maestro` API exposes the following namespaces:
- `history` - Per-agent execution history (see History API below)
- `cli` - CLI activity detection for playbook runs
- `tempfile` - Temporary file management for batch processing
- `cue` - Maestro Cue event-driven automation (see Cue API below)

## Analytics & Visualization

Expand Down Expand Up @@ -74,6 +75,40 @@ window.maestro.history = {

**AI Context Integration**: Use `getFilePath(sessionId)` to get the path to an agent's history file. This file can be passed directly to AI agents as context, giving them visibility into past completed tasks, decisions, and work patterns.

## Cue API

Maestro Cue event-driven automation engine. Gated behind the `maestroCue` Encore Feature flag.

```typescript
window.maestro.cue = {
// Query engine state
getStatus: () => Promise<CueSessionStatus[]>,
getActiveRuns: () => Promise<CueRunResult[]>,
getActivityLog: (limit?) => Promise<CueRunResult[]>,

// Engine controls
enable: () => Promise<void>,
disable: () => Promise<void>,

// Run management
stopRun: (runId) => Promise<boolean>,
stopAll: () => Promise<void>,

// Session config management
refreshSession: (sessionId, projectRoot) => Promise<void>,

// YAML config file operations
readYaml: (projectRoot) => Promise<string | null>,
writeYaml: (projectRoot, content) => Promise<void>,
validateYaml: (content) => Promise<{ valid: boolean; errors: string[] }>,

// Real-time updates
onActivityUpdate: (callback) => () => void, // Returns unsubscribe function
};
```

**Events:** `cue:activityUpdate` is pushed from main process on subscription triggers, run completions, config reloads, and config removals.

## Power Management

- `power` - Sleep prevention: setEnabled, isEnabled, getStatus, addReason, removeReason
Expand Down
13 changes: 11 additions & 2 deletions CLAUDE-PATTERNS.md
Original file line number Diff line number Diff line change
Expand Up @@ -348,16 +348,25 @@ When adding a new Encore Feature, gate **all** access points:
6. **Hamburger menu** — Make the setter optional, conditionally render the menu item in `SessionList.tsx`
7. **Command palette** — Pass `undefined` for the handler in `QuickActionsModal.tsx` (already conditionally renders based on handler existence)

### Reference Implementation: Director's Notes
### Reference Implementations

Director's Notes is the first Encore Feature and serves as the canonical example:
**Director's Notes** — First Encore Feature, canonical example:

- **Flag:** `encoreFeatures.directorNotes` in `EncoreFeatureFlags`
- **App.tsx gating:** Modal render wrapped in `{encoreFeatures.directorNotes && directorNotesOpen && (…)}`, callback passed as `encoreFeatures.directorNotes ? () => setDirectorNotesOpen(true) : undefined`
- **Keyboard shortcut:** `ctx.encoreFeatures?.directorNotes` guard in `useMainKeyboardHandler.ts`
- **Hamburger menu:** `setDirectorNotesOpen` made optional in `SessionList.tsx`, button conditionally rendered with `{setDirectorNotesOpen && (…)}`
- **Command palette:** `onOpenDirectorNotes` already conditionally renders in `QuickActionsModal.tsx` — passing `undefined` from App.tsx is sufficient

**Maestro Cue** — Event-driven automation, second Encore Feature:

- **Flag:** `encoreFeatures.maestroCue` in `EncoreFeatureFlags`
- **App.tsx gating:** Cue modal, hooks (`useCue`, `useCueAutoDiscovery`), and engine lifecycle gated on `encoreFeatures.maestroCue`
- **Keyboard shortcut:** `ctx.encoreFeatures?.maestroCue` guard in `useMainKeyboardHandler.ts`
- **Hamburger menu:** `setMaestroCueOpen` made optional in `SessionList.tsx`
- **Command palette:** `onOpenMaestroCue` conditionally renders in `QuickActionsModal.tsx`
- **Session list:** Cue status indicator (Zap icon) gated on `maestroCueEnabled`

When adding a new Encore Feature, mirror this pattern across all access points.

See [CONTRIBUTING.md → Encore Features](CONTRIBUTING.md#encore-features-feature-gating) for the full contributor guide.
4 changes: 2 additions & 2 deletions CLAUDE-WIZARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ src/renderer/components/Wizard/
3. **Conversation** → AI asks clarifying questions, builds confidence score (0-100)
4. **Phase Review** → View/edit generated Phase 1 document, choose to start tour

When confidence reaches 80+ and agent signals "ready", user proceeds to Phase Review where Auto Run documents are generated and saved to `Auto Run Docs/Initiation/`. The `Initiation/` subfolder keeps wizard-generated documents separate from user-created playbooks.
When confidence reaches 80+ and agent signals "ready", user proceeds to Phase Review where Auto Run documents are generated and saved to `.maestro/playbooks/initiation/`. The `initiation/` subfolder keeps wizard-generated documents separate from user-created playbooks.

### Triggering the Wizard

Expand Down Expand Up @@ -179,7 +179,7 @@ The Inline Wizard creates Auto Run Playbook documents from within an existing ag

- Multiple wizards can run in different tabs simultaneously
- Wizard state is **per-tab** (`AITab.wizardState`), not per-agent
- Documents written to unique subfolder under Auto Run folder (e.g., `Auto Run Docs/Project-Name/`)
- Documents written to unique subfolder under playbooks folder (e.g., `.maestro/playbooks/project-name/`)
- On completion, tab renamed to "Project: {SubfolderName}"
- Final AI message summarizes generated docs and next steps
- Same `agentSessionId` preserved for context continuity
Expand Down
12 changes: 11 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ Use "agent" in user-facing language. Reserve "session" for provider-level conver
- **Command Terminal** - Main window in terminal/shell mode
- **System Log Viewer** - Special view for system logs (`LogViewer.tsx`)

### Automation

- **Cue** — Event-driven automation system (Maestro Cue), gated as an Encore Feature. Watches for file changes, time intervals, agent completions, GitHub PRs/issues, and pending markdown tasks to trigger automated prompts. Configured via `.maestro/cue.yaml` per project.
- **Cue Modal** — Dashboard for managing Cue subscriptions and viewing activity (`CueModal.tsx`)

### Agent States (color-coded)

- **Green** - Ready/idle
Expand Down Expand Up @@ -131,9 +136,10 @@ src/
│ ├── preload.ts # Secure IPC bridge
│ ├── process-manager.ts # Process spawning (PTY + child_process)
│ ├── agent-*.ts # Agent detection, capabilities, session storage
│ ├── cue/ # Maestro Cue event-driven automation engine
│ ├── parsers/ # Per-agent output parsers + error patterns
│ ├── storage/ # Per-agent session storage implementations
│ ├── ipc/handlers/ # IPC handler modules (stats, git, playbooks, etc.)
│ ├── ipc/handlers/ # IPC handler modules (stats, git, playbooks, cue, etc.)
│ └── utils/ # Utilities (execFile, ssh-spawn-wrapper, etc.)
├── renderer/ # React frontend (desktop)
Expand Down Expand Up @@ -202,6 +208,10 @@ src/
| Add Director's Notes feature | `src/renderer/components/DirectorNotes/`, `src/main/ipc/handlers/director-notes.ts` |
| Add Encore Feature | `src/renderer/types/index.ts` (flag), `useSettings.ts` (state), `SettingsModal.tsx` (toggle UI), gate in `App.tsx` + keyboard handler |
| Modify history components | `src/renderer/components/History/` |
| Add Cue event type | `src/main/cue/cue-types.ts`, `src/main/cue/cue-engine.ts` |
| Add Cue template variable | `src/shared/templateVariables.ts`, `src/main/cue/cue-executor.ts` |
| Modify Cue modal | `src/renderer/components/CueModal.tsx` |
| Configure Cue engine | `src/main/cue/cue-engine.ts`, `src/main/ipc/handlers/cue.ts` |

---

Expand Down
31 changes: 31 additions & 0 deletions docs/assets/theme-hint.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/* global window, document, localStorage, URLSearchParams */
/**
* Theme Hint Script for Maestro Docs
*
* When the Maestro app opens a docs URL with a ?theme= query parameter,
* this script sets the Mintlify theme to match.
*
* Supported values: ?theme=dark | ?theme=light
*
* Mintlify stores the user's theme preference in localStorage under the
* key "mintlify-color-scheme". Setting this key and dispatching a storage
* event causes Mintlify to switch themes without a page reload.
*/
(function () {
var params = new URLSearchParams(window.location.search);
var theme = params.get('theme');

if (theme === 'dark' || theme === 'light') {
// Mintlify reads this localStorage key for theme preference
try {
localStorage.setItem('mintlify-color-scheme', theme);
} catch {
// localStorage unavailable — ignore
}

// Apply the class immediately to prevent flash of wrong theme
document.documentElement.classList.remove('light', 'dark');
document.documentElement.classList.add(theme);
document.documentElement.style.colorScheme = theme;
}
})();
2 changes: 1 addition & 1 deletion docs/autorun-playbooks.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Auto Run supports running multiple documents in sequence:
2. Click **+ Add Docs** to add more documents to the queue
3. Drag to reorder documents as needed
4. Configure options per document:
- **Reset on Completion** - Creates a working copy in `Runs/` subfolder instead of modifying the original. The original document is never touched, and working copies (e.g., `TASK-1735192800000-loop-1.md`) serve as audit logs.
- **Reset on Completion** - Creates a working copy in `runs/` subfolder instead of modifying the original. The original document is never touched, and working copies (e.g., `TASK-1735192800000-loop-1.md`) serve as audit logs.
- **Duplicate** - Add the same document multiple times
5. Enable **Loop Mode** to cycle back to the first document after completing the last
6. Click **Go** to start running documents
Expand Down
96 changes: 96 additions & 0 deletions docs/deep-links.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
title: Deep Links
description: Navigate to specific agents, tabs, and groups using maestro:// URLs from external apps, scripts, and OS notifications.
icon: link
---

# Deep Links

Maestro registers the `maestro://` URL protocol, enabling navigation to specific agents, tabs, and groups from external tools, scripts, shell commands, and OS notification clicks.

## URL Format

```
maestro://[action]/[parameters]
```

### Available Actions

| URL | Action |
| ------------------------------------------- | ------------------------------------------ |
| `maestro://focus` | Bring Maestro window to foreground |
| `maestro://session/{sessionId}` | Navigate to an agent |
| `maestro://session/{sessionId}/tab/{tabId}` | Navigate to a specific tab within an agent |
| `maestro://group/{groupId}` | Expand a group and focus its first agent |

IDs containing special characters (`/`, `?`, `#`, `%`, etc.) are automatically URI-encoded and decoded.

## Usage

### From Terminal

```bash
# macOS
open "maestro://session/abc123"
open "maestro://session/abc123/tab/def456"
open "maestro://group/my-group-id"
open "maestro://focus"

# Linux
xdg-open "maestro://session/abc123"

# Windows
start maestro://session/abc123
```

### OS Notification Clicks

When Maestro is running in the background and an agent completes a task, the OS notification is automatically linked to the originating agent and tab. Clicking the notification brings Maestro to the foreground and navigates directly to that agent's tab.

This works out of the box — no configuration needed. Ensure **OS Notifications** are enabled in Settings.

### Template Variables

Deep link URLs are available as template variables in system prompts, custom AI commands, and Auto Run documents:

| Variable | Description | Example Value |
| --------------------- | ---------------------------------------------- | ------------------------------------- |
| `{{AGENT_DEEP_LINK}}` | Link to the current agent | `maestro://session/abc123` |
| `{{TAB_DEEP_LINK}}` | Link to the current agent + active tab | `maestro://session/abc123/tab/def456` |
| `{{GROUP_DEEP_LINK}}` | Link to the agent's group (empty if ungrouped) | `maestro://group/grp789` |

These variables can be used in:

- **System prompts** — give AI agents awareness of their own deep link for cross-referencing
- **Custom AI commands** — include deep links in generated output
- **Auto Run documents** — reference agents in batch automation workflows
- **Custom notification commands** — include deep links in TTS or logging scripts

### From Scripts and External Tools

Any application can launch Maestro deep links by opening the URL. This enables integrations like:

- CI/CD pipelines that open a specific agent after deployment
- Shell scripts that navigate to a group after batch operations
- Alfred/Raycast workflows for quick agent access
- Bookmarks for frequently-used agents

## Platform Behavior

| Platform | Mechanism |
| ----------------- | ----------------------------------------------------------------------------- |
| **macOS** | `app.on('open-url')` delivers the URL to the running instance |
| **Windows/Linux** | `app.on('second-instance')` delivers the URL via argv to the primary instance |
| **Cold start** | URL is buffered and processed after the window is ready |

Maestro uses a single-instance lock — opening a deep link when Maestro is already running delivers the URL to the existing instance rather than launching a new one.

<Note>
In development mode, protocol registration is skipped by default to avoid overriding the production app's handler. Set `REGISTER_DEEP_LINKS_IN_DEV=1` to enable it during development.
</Note>

## Related

- [Configuration](./configuration) — OS notification settings
- [General Usage](./general-usage) — Core UI and workflow patterns
- [MCP Server](./mcp-server) — Connect AI applications to Maestro
19 changes: 14 additions & 5 deletions docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"href": "https://runmaestro.ai"
},
"favicon": "/assets/icon.ico",
"js": "/assets/theme-hint.js",
"colors": {
"primary": "#BD93F9",
"light": "#F8F8F2",
Expand Down Expand Up @@ -52,11 +53,9 @@
"history",
"context-management",
"document-graph",
"usage-dashboard",
"symphony",
"git-worktrees",
"group-chat",
"remote-access",
"remote-control",
"ssh-remote-execution",
"configuration"
]
Expand All @@ -74,15 +73,25 @@
{
"group": "Encore Features",
"icon": "flask",
"pages": ["encore-features", "director-notes"]
"pages": [
"encore-features",
"director-notes",
"usage-dashboard",
"symphony",
"maestro-cue",
"maestro-cue-configuration",
"maestro-cue-events",
"maestro-cue-advanced",
"maestro-cue-examples"
]
},
{
"group": "Providers & CLI",
"pages": ["provider-notes", "multi-claude", "cli"]
},
{
"group": "Integrations",
"pages": ["mcp-server"],
"pages": ["mcp-server", "deep-links"],
"icon": "plug"
},
{
Expand Down
Loading