Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
290 commits
Select commit Hold shift + click to select a range
b120a90
MAESTRO: Document intentional useEffect dep omission in TerminalView
pedramamini Mar 1, 2026
6d3995b
MAESTRO: Update tests for PR #486 review fixes
pedramamini Mar 1, 2026
af3ec11
feat: add "Run All Phases" toggle to wizard and resize modal
pedramamini Mar 3, 2026
a9952f4
feat: stream real-time history entries into Director's Notes with liv…
pedramamini Mar 4, 2026
ffbdb2f
feat: add maestro:// deep link protocol and clickable OS notifications
pedramamini Mar 4, 2026
4ebad25
fix: address PR review β€” add type="button" and ariaLabel to ToggleSwitch
pedramamini Mar 4, 2026
6c9c9fe
fix: address PR review β€” stable ref pattern, deduplicated counters, c…
pedramamini Mar 4, 2026
e2af946
fix: address PR review feedback for deep links
pedramamini Mar 4, 2026
f4be149
feat: add deep link template variables, shared URL builders, and docs
pedramamini Mar 4, 2026
ea5b06b
fix: handle expected IPC errors gracefully to prevent unhandled rejec…
pedramamini Mar 4, 2026
dddf781
feat: gate Maestro Symphony behind Encore Features toggle, add multi-…
pedramamini Mar 4, 2026
3916890
MAESTRO: Phase 01 - GitHub polling foundation (types, DB, poller module)
pedramamini Mar 4, 2026
da7f13c
MAESTRO: Phase 02 - GitHub polling integration (engine, YAML, executo…
pedramamini Mar 4, 2026
5c9c638
MAESTRO: Phase 03 - Add GitHub pattern presets (PR Review, Issue Tria…
pedramamini Mar 4, 2026
a7af3f0
MAESTRO: Sync CueEventType across preload and renderer with GitHub ev…
pedramamini Mar 4, 2026
bccf2be
MAESTRO: Add GitHub event documentation to Cue Help Modal
pedramamini Mar 4, 2026
5f7a2c2
MAESTRO: Add GitHub event payload display to Cue activity log
pedramamini Mar 4, 2026
80880ba
MAESTRO: Add GitHub event types to CueYamlEditor YAML template and AI…
pedramamini Mar 4, 2026
382f712
merge: resolve conflicts with main, adapt encore features to decompos…
pedramamini Mar 4, 2026
3905a75
Merge remote-tracking branch 'origin/main' into run-all-wizard-docs
pedramamini Mar 4, 2026
244f2e4
fix: restore Cmd+/- font size shortcuts lost when custom menu was added
pedramamini Mar 4, 2026
5272ae1
feat: add Create Worktree command to command palette with auto-focus
pedramamini Mar 4, 2026
f6e9ebb
fix: format symphony-registry.json and register font size shortcuts
pedramamini Mar 4, 2026
222e201
fix: address CodeRabbit PR review findings for encore-features
pedramamini Mar 4, 2026
e01f2bf
Merge origin/main into maestro-cue-spinout with PR review fixes
pedramamini Mar 5, 2026
b227372
fix: wire Symphony stats tracking through batch run lifecycle
pedramamini Mar 1, 2026
2a8b89c
fix: add history entry for Symphony PR finalization
pedramamini Mar 1, 2026
e8408aa
fix: include issue number in Symphony working directory name
pedramamini Mar 1, 2026
c9588eb
fix: correct user message alignment toggle behavior (#493)
jeffscottward Mar 1, 2026
616bf95
fix: resolve merge regressions from main β€” dead subscriptions and ali…
reachraza Mar 2, 2026
ec5209f
chore: modify .gitignore
reachraza Mar 2, 2026
76433ac
style: ran formatter to conform to standards
reachraza Mar 2, 2026
8a5d66b
feat: add bookmark toggle, tab long-press actions, and reusable long-…
pedramamini Mar 2, 2026
93b75de
fix: update test mocks and fix conditional hooks for bookmark/tab fea…
pedramamini Mar 2, 2026
2225592
fix: resolve TS errors in TerminalOutput test after merge conflict re…
reachraza Mar 2, 2026
dfc605e
fix: 0.15.0-RC polish round two β€” error details & lookback default (#…
pedramamini Mar 3, 2026
02eb5d3
fix: show tool call details and fix text routing for OpenCode thinkin…
chr1syy Mar 3, 2026
7ca7e86
fix: 0.15.0 RC polish round two (#503)
pedramamini Mar 3, 2026
6e9d283
fix: update OpenCode parser integration test missed in #499
pedramamini Mar 3, 2026
dc474c8
docs: sync release notes for v0.15.1
github-actions[bot] Mar 3, 2026
d229f37
[Symphony] Start contribution for #160
pedramamini Mar 1, 2026
b85c762
MAESTRO: Fix four terminal tab integration bugs
pedramamini Mar 5, 2026
5f2ff01
refactor: decompose SettingsModal into per-tab components
reachraza Mar 3, 2026
56aeae4
fix: address CodeRabbit review findings across refactored components
reachraza Mar 3, 2026
4c2f639
refactor: decompose SessionList into focused sub-components and hooks
reachraza Mar 4, 2026
ad7f3b7
refactor-chore: move SettingsModal into Settings directory for consis…
reachraza Mar 4, 2026
5337073
fix: address CodeRabbit review findings across refactored components
reachraza Mar 4, 2026
15f45fc
refactor: merge NewGroupChatModal and EditGroupChatModal into unified…
reachraza Mar 4, 2026
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
0bb3e6c
feat: rename time.interval to time.heartbeat and add time.scheduled t…
pedramamini Mar 8, 2026
630a8c4
feat: add Alt+J shortcut to jump to closest terminal tab
pedramamini Mar 8, 2026
351beef
fix: hide unread agents filter button when left sidebar is collapsed
pedramamini Mar 8, 2026
e75dcec
## CHANGES
pedramamini Mar 8, 2026
4b3fb22
fix: auto-close terminal tab when shell process exits
pedramamini Mar 8, 2026
fa56d01
fix: close terminal tab immediately on shell exit instead of 300ms delay
pedramamini Mar 8, 2026
6d316a8
feat: respect unread filter when cycling agents with Cmd+[/]
pedramamini Mar 8, 2026
2f3960e
## CHANGES
pedramamini Mar 8, 2026
d4da393
feat: add native llm guard pipeline
jeffscottward Mar 6, 2026
7d29a30
fix: guard exit-only llm responses
jeffscottward Mar 6, 2026
a35b459
style: format llm guard changes
jeffscottward Mar 6, 2026
2149955
feat(llm-guard): implement core security scanning pipeline
Ashraf-Ali-aa Mar 9, 2026
ed5678a
feat(llm-guard): add settings and configuration management
Ashraf-Ali-aa Mar 9, 2026
1d3827a
feat(llm-guard): add security UI components
Ashraf-Ali-aa Mar 9, 2026
f09ce74
feat(llm-guard): add hooks and app integration
Ashraf-Ali-aa Mar 9, 2026
14aff35
test(llm-guard): add comprehensive test coverage
Ashraf-Ali-aa Mar 9, 2026
97cb2b0
docs(llm-guard): add documentation and dependencies
Ashraf-Ali-aa Mar 9, 2026
b84c5c3
feat(spellcheck): add IPC handlers for spell-check functionality
Ashraf-Ali-aa Mar 9, 2026
b609389
fix: remove scroll-to-bottom arrow indicator from terminal output view
pedramamini Mar 7, 2026
e2390c5
fix: improve light theme contrast for syntax highlighting and colors
pedramamini Mar 8, 2026
c361fd7
chore: bump version to 0.15.2
pedramamini Mar 8, 2026
b162ac8
fix: remove noPromptSeparator for OpenCode to prevent slash command e…
chr1syy Mar 7, 2026
8c904f4
chore(cli): update run-playbook, send command and agent spawner
chr1syy Mar 6, 2026
ae85f0d
fix(cli): preserve OpenCode JSON error events in CLI spawner
chr1syy Mar 6, 2026
b7d344c
refactor: consolidate CLI agent spawner to eliminate copy-paste dupli…
pedramamini Mar 9, 2026
5ac77ef
fix: normalize filenames to NFC Unicode to prevent duplicate entries …
kianhub Mar 9, 2026
0132f86
fix: add load sequence counter to prevent stale file tree updates
kianhub Mar 9, 2026
2e0a1b7
test: add Unicode NFC/NFD normalization tests for duplicate file prev…
kianhub Mar 9, 2026
6ecedbd
fix: reset fileTreeLoading on stale load discard to prevent infinite …
kianhub Mar 9, 2026
5ea40ed
fix: address PR review β€” per-session staleness counters, raw path ide…
kianhub Mar 9, 2026
d1cf6c7
MAESTRO: eliminate triple JSON parsing on NDJSON hot path (TASK-M01)
openasocket Mar 8, 2026
7090530
fix: remove parsedJson from AgentError.raw to match type definition
openasocket Mar 8, 2026
983db96
MAESTRO: fix Gemini -y in read-only mode and add readOnlyCliEnforced …
openasocket Mar 8, 2026
6134c03
fix: adapt agent-args tests for main branch compatibility
openasocket Mar 8, 2026
c0b37eb
fix: address code review feedback for LLM Guard PR
Ashraf-Ali-aa Mar 9, 2026
f3c0f8e
deps: add uuid package for security-logger
Ashraf-Ali-aa Mar 9, 2026
c8cab67
fix: address additional code review feedback for LLM Guard PR
Ashraf-Ali-aa Mar 9, 2026
4f7a029
feat: move to encore
Ashraf-Ali-aa Mar 9, 2026
27962f7
docs: update feature documentation and add LLM Guard to Encore Features
Ashraf-Ali-aa Mar 10, 2026
d339b6d
fix: address CodeRabbit and Greptile review feedback
Ashraf-Ali-aa Mar 15, 2026
2b9e4da
fix: suppress prompt preview when security findings detected
Ashraf-Ali-aa Mar 15, 2026
2a70e15
fix: use Maestro session ID for LlmGuardIndicator
Ashraf-Ali-aa Mar 15, 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: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,7 @@ jobs:
files: artifacts/release/*
fail_on_unmatched_files: false
draft: false
prerelease: false
prerelease: ${{ contains(github.ref_name, '-rc') || contains(github.ref_name, '-RC') || contains(github.ref_name, '-beta') || contains(github.ref_name, '-alpha') }}
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand Down
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
Loading