-
Notifications
You must be signed in to change notification settings - Fork 248
fix: argument denylist + Windows shell escaping #536
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking "Sign up for GitHub", you agree to our terms of service and privacy statement. We'll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
openasocket
wants to merge
195
commits into
RunMaestro:0.16.0-RC
from
openasocket:fix/shared-security-hardening
Open
fix: argument denylist + Windows shell escaping #536
Changes from all commits
Commits
Show all changes
195 commits
Select commit
Hold shift + click to select a range
b9bc6b4
feat: add maestro:// deep link protocol and clickable OS notifications
pedramamini 96be37d
fix: address PR review feedback for deep links
pedramamini df9c61d
feat: add deep link template variables, shared URL builders, and docs
pedramamini 089b835
feat: stream real-time history entries into Director's Notes with liv...
pedramamini dce2e6d
fix: address PR review -- stable ref pattern, deduplicated counters, c...
pedramamini c03d9e3
feat: gate Maestro Symphony behind Encore Features toggle, add multi-...
pedramamini bbb51f7
fix: address CodeRabbit PR review findings for encore-features
pedramamini f11f9d5
MAESTRO: Phase 01 - Cue foundational types, template variables, logge...
pedramamini d8feb25
MAESTRO: Phase 02 - Cue Engine core, YAML loader, and file watcher pr...
pedramamini 21bbcbc
MAESTRO: Phase 03 - Cue executor for background agent spawning and hi...
pedramamini 03ef759
MAESTRO: Phase 04 - IPC handlers, preload API, and CueEngine initiali...
pedramamini b812631
MAESTRO: Phase 05 - CUE type rendering in History panel and detail modal
pedramamini d79064d
MAESTRO: Phase 05 - CUE log level test coverage for LogViewer component
pedramamini 967acec
MAESTRO: Phase 06 - Cue Modal dashboard with sessions, active runs, a...
pedramamini b3c568d
MAESTRO: Phase 07 - Cue YAML Editor with AI-assisted prompt generation
pedramamini d7f39a4
MAESTRO: Phase 08 - Cue Help Modal and auto-discovery of maestro-cue....
pedramamini 9483dee
MAESTRO: Phase 09 - Agent completion chains with fan-out, fan-in, and...
pedramamini 860ea69
MAESTRO: Phase 10 - YAML hot reload with config change/removal detect...
pedramamini 7c2c3fd
MAESTRO: Phase 10 - Cue status indicator in session list (Encore Feat...
pedramamini 864ff9f
MAESTRO: Phase 10 - Update documentation tables with Cue references
pedramamini 4035a94
MAESTRO: Phase 11 - Per-agent concurrency control and event queuing
pedramamini 1fadfdb
MAESTRO: Phase 12 - Sleep/wake reconciliation with heartbeat and even...
pedramamini 95921f2
MAESTRO: Phase 13 - Event payload filtering for Cue subscriptions
pedramamini 172659a
MAESTRO: Phase 14 - Named coordination pattern presets and AI pattern...
pedramamini ba55f46
MAESTRO: Phase 01 - GitHub polling foundation (types, DB, poller module)
pedramamini 59a1ab7
MAESTRO: Phase 02 - GitHub polling integration (engine, YAML, executo...
pedramamini 76d9307
MAESTRO: Phase 03 - Add GitHub pattern presets (PR Review, Issue Tria...
pedramamini 42de16a
MAESTRO: Sync CueEventType across preload and renderer with GitHub ev...
pedramamini 05bcf7d
MAESTRO: Add GitHub event documentation to Cue Help Modal
pedramamini 866a69e
MAESTRO: Add GitHub event payload display to Cue activity log
pedramamini 001f248
MAESTRO: Add GitHub event types to CueYamlEditor YAML template and AI...
pedramamini 338afa3
MAESTRO: Add task.pending event type to Cue automation system
pedramamini 2c44f35
MAESTRO: Update CLAUDE.md Cue description to include all trigger types
pedramamini 7be267d
Replace hardcoded tool detail extractors with generic summarizeToolInput
pedramamini 71a4abf
feat: add "Run All Phases" toggle to wizard and resize modal
pedramamini 276d015
fix: address PR review -- add type="button" and ariaLabel to ToggleSwitch
pedramamini 782e933
fix: resolve type errors from branch merges
pedramamini 8ee7410
feat: add Create Worktree command to command palette with auto-focus
pedramamini d3b9112
fix: format symphony-registry.json and register font size shortcuts
pedramamini 54c747b
feat: add --read-only flag to maestro-cli send command
pedramamini a9bca7f
feat: add unread agents filter toggle with Cmd+Shift+U shortcut
pedramamini 14dcfbb
fix: resolve tsconfig.main.json build errors from branch merges
pedramamini 931fb36
feat: add Copy Deep Link option to tab overlay menu
pedramamini 339ffc7
fix: pass app entry point in dev-mode protocol registration
pedramamini b3fffaa
refactor: move Usage & Stats settings from General tab to Encore Feat...
pedramamini 4def637
Gate CUE history filter on maestroCue encore feature and fix crowded ...
pedramamini 1085abb
fix: count only agents with entries in lookback window for Director's...
pedramamini b870ed7
fix: match unread agent indicator dot position to tab unread pattern
pedramamini 3f3d8a7
docs: move Usage Dashboard and Maestro Symphony under Encore Features...
pedramamini 8768714
Add CUE entry type to History Panel help modal when maestroCue is ena...
pedramamini 3170a69
Add comprehensive Maestro Cue user documentation (4 pages)
pedramamini 2afa0ef
feat: show View history link on files tab during batch run
pedramamini a9abd18
refactor: reorder Encore Features, remove BETA from Usage Dashboard
pedramamini b1711ed
Add Cue YAML editor, context menu integration, and fix help modal z-i...
pedramamini 0fc69c7
Add tests for cueYamlEditor modal and Configure Maestro Cue command p...
pedramamini b8071e7
Move Configure Maestro Cue below Configure Worktrees in context menu
pedramamini ccfea7a
Center history filter pills when CUE type adds a third row
pedramamini b851997
Add conversational AI Assist chat to CueYamlEditor with agent spawn a...
pedramamini 94eded3
version bump
pedramamini f250a0c
ignore Cue files
pedramamini d24c744
Add Cue Examples cookbook page and document triggeredBy filter field
pedramamini 70987a6
Rename Cancel to Exit in CueYamlEditor and pass cueShortcutKeys to Cu...
pedramamini 2198597
Add missing Cue template variables for file changeType and agent comp...
pedramamini bb6f4ed
fix: check sessionSshRemoteConfig as primary SSH remote ID source
pedramamini 882eb61
fix: always show .maestro folder in file tree regardless of ignore pa...
pedramamini 4c52713
fix: update CueHelpModal -> CueHelpContent import after rename in mae...
pedramamini 6ff5907
Add Cue Graph visualizer tab, standardize modal sizes, and inline hel...
pedramamini 01347a1
Use theme accent instead of hardcoded Cue teal for toggles, borders, ...
pedramamini 01bcb92
MAESTRO: Add pipeline types and React Flow canvas foundation for Cue ...
pedramamini da8d6e3
MAESTRO: Add custom node types and pipeline edge for Cue visual editor
pedramamini 8f96d66
MAESTRO: Add trigger and agent drawers with drag-and-drop for Cue pip...
pedramamini bb8d0d7
MAESTRO: Add pipeline lifecycle management with selector dropdown, co...
pedramamini ee0e1a4
MAESTRO: Add node and edge configuration panels for Cue pipeline editor
pedramamini f8ebb78
MAESTRO: Add pipeline-to-YAML conversion utility for Cue visual editor
pedramamini 92c2129
MAESTRO: Add YAML-to-pipeline reverse conversion for Cue visual editor
pedramamini 83aeb84
MAESTRO: Integrate YAML conversion into pipeline editor with save/loa...
pedramamini d73ebfd
MAESTRO: Add pipeline layout persistence via IPC for Cue visual editor
pedramamini 5a14074
MAESTRO: Update CueModal to use Pipeline Editor as default tab and re...
pedramamini d9f6e25
MAESTRO: Add pipeline-aware status indicators to CueModal Dashboard tab
pedramamini 9bf1f22
MAESTRO: Add polish features to Cue visual pipeline editor
pedramamini 75ea258
MAESTRO: Fix empty pipeline graph and add drawer improvements
pedramamini 7531612
fix: improve light theme contrast for syntax highlighting and colors
pedramamini 9e543b0
fix: include busy agents in unread agents filter
pedramamini bb99ff6
MAESTRO: Add layout algorithms and node dragging to Cue graph view
pedramamini 7a03ace
MAESTRO: Fix pipeline editor UI issues and add legend/auto-config
pedramamini 4b59988
fix: suppress empty groups and New Group button in unread agents filter
pedramamini ca6632e
[Symphony] Start contribution for #160
pedramamini de620a0
MAESTRO: Phase 1 -- install xterm.js and create XTerminal component
pedramamini adb1fed
MAESTRO: Phase 2 -- TerminalTab interface and unified tab type extensions
pedramamini 85bcd11
MAESTRO: Phase 3 -- terminalTabHelpers.ts pure function library
pedramamini ff30c06
MAESTRO: Phase 4 -- session initialization, migration, and persistence...
pedramamini b9521d0
MAESTRO: Phase 5 -- main process PTY management for terminal tabs
pedramamini 66e3efc
MAESTRO: Phase 6 -- TerminalView component for terminal tab rendering
pedramamini 65757c6
MAESTRO: Phase 7 -- tab store integration and terminal tab handlers
pedramamini 448e629
MAESTRO: Phase 8 -- TabBar rendering for terminal tabs
pedramamini 42e8eea
MAESTRO: Phase 9 -- Keyboard shortcuts for terminal tabs
pedramamini d47f493
MAESTRO: Phase 10 -- Terminal search UI overlay
pedramamini 65d833a
MAESTRO: Phase 11 -- Theme integration and ANSI color configuration
pedramamini ee7c1b8
MAESTRO: Phase 12 -- Terminal tab rename modal
pedramamini 1f2baec
MAESTRO: Phase 13 -- Cleanup, migration, testing, and polish
pedramamini a6c77b1
MAESTRO: Verify and fix terminal tab persistence across app restarts
pedramamini a1044a8
MAESTRO: Fix SSH field name bug in terminal tab PTY spawning
pedramamini 56d815f
MAESTRO: Fix terminal search next/previous query tracking bug
pedramamini 91300dc
MAESTRO: Phase 7 -- Fix terminal tab navigation in unified tab system
pedramamini 430fa43
MAESTRO: Guard shellLogs appends -- only write when no terminalTabs (l...
pedramamini a2f42bc
MAESTRO: Phase 13 -- Remove unused enterToSendTerminal and stale eslin...
pedramamini 08b4240
MAESTRO: Phase 13 -- Update test mocks with terminalTabs fields and fi...
pedramamini 351fca6
MAESTRO: Phase 13 -- Add Terminal Tab System section to ARCHITECTURE.md
pedramamini b70c960
MAESTRO: Address PR #486 review comments from CodeRabbit and Greptile
pedramamini 9a690b0
MAESTRO: Document intentional useEffect dep omission in TerminalView
pedramamini a7b6761
MAESTRO: Update tests for PR #486 review fixes
pedramamini b3f6f88
style: ran formatter to conform to standards
reachraza a9fe1c0
fix: resolve TS errors in TerminalOutput test after merge conflict re...
reachraza bdc78a8
fix: 0.15.0-RC polish round two -- error details & lookback default (#...
pedramamini 38c2044
docs: sync release notes for v0.15.1
github-actions[bot] 8fca760
[Symphony] Start contribution for #160
pedramamini 199e4cb
MAESTRO: Fix four terminal tab integration bugs
pedramamini 91885f2
fix: address CodeRabbit review findings across refactored components
reachraza e1311b1
refactor: decompose SessionList into focused sub-components and hooks
reachraza e84ace5
Add 'bills-bot' entry to symphony-registry.json (#388)
BillChirico 1669be4
[Symphony] Start contribution for #160
pedramamini 3290e27
[Symphony] Start contribution for #160
pedramamini e9ae2b5
MAESTRO: Fix four terminal tab integration bugs
pedramamini 543b593
fix: terminal tab rename keyboard shortcut and defensive cwd fallback
pedramamini 7db6c3b
fix: resolve 7 terminal tab integration issues (#160)
pedramamini 6e2ab72
fix: reset inputMode when switching from terminal to AI/file tabs
pedramamini 9ac43b7
fix: terminal tabs now connect to SSH remote host when session SSH is...
pedramamini 1d509c9
feat: show terminal tabs in tab switcher modal; fix xterm repaint on ...
pedramamini d1de877
fix: close AI tab falls back to correct neighbor using unifiedTabOrder
pedramamini 6e7e2a8
fix: preserve terminal content when returning from AI mode via isVisi...
pedramamini d121734
fix: closeTerminalTab falls back to correct neighbor using unifiedTab...
pedramamini 0e26b13
fix: persist terminal tab content across session switches
pedramamini 42bf61f
fix: defer WebGL addon load until terminal container is visible
pedramamini fd1ccc8
fix: terminal tabs on SSH agents now connect to the remote host
pedramamini 344323a
fix: use visibility:hidden instead of display:none for terminal keep-...
pedramamini 7718783
fix: SSH terminal tabs now actually connect to remote host
pedramamini 3e276f6
remove obsolete terminalWidth setting; update log buffer description
pedramamini 9cc5e59
test: add PtySpawner tests covering SSH terminal and shell terminal p...
pedramamini 9208de7
fix: always mount terminal sessions regardless of file preview / AI view
pedramamini 32ef410
test: add XTerminal and terminalTabHelpers coverage
pedramamini 30dbe8a
fix: remove scroll-to-bottom arrow indicator from terminal output view
pedramamini de62bb0
fix: terminal visual polish and keyboard handler cleanup
pedramamini 5914a92
fix: resolve lint warnings, stale tests, and two cue bugs
pedramamini dc95a91
MAESTRO: Add drag handles and gear icons to pipeline editor nodes
pedramamini c8c4961
feat: add empty state for unread agents filter with centered Bot icon
pedramamini a38015a
fix: terminal tab bugs, cue hotkey, and XTerminal WebGL load order
pedramamini 8681a50
fix: group agents by user-defined groups in Cue Pipeline Editor drawer
pedramamini 5b323a2
## CHANGES
pedramamini 6d32176
feat: split agent prompt into input/output, add pipeline color picker...
pedramamini 061decc
refactor: consolidate Maestro project files under .maestro/ directory
pedramamini 0c742b6
test: update tests for .maestro/ directory migration
pedramamini 6ba7f2f
fix: resolve test failures from .maestro/ migration
pedramamini 8eabff6
feat: add Edit YAML button to Cue dashboard and show sessions when en...
pedramamini f1ecbd9
feat: add output_prompt support to Cue pipeline agents
pedramamini 7942808
feat: replace pattern preset replace-all with copy-to-clipboard preview
pedramamini e48009b
## CHANGES
pedramamini d695187
## CHANGES
pedramamini c657a9a
## CHANGES
pedramamini e0e2f22
## CHANGES
pedramamini 3e1751e
feat: add image support to group chat (display, persistence, agent fo...
pedramamini e2bd571
test: add tests for Cue modal escape-from-help and unsaved changes co...
pedramamini 756b2a5
chore: remove beta badge from Storage Location setting
pedramamini a4b94c2
fix: restore "All Pipelines" selection on Pipeline Editor load
pedramamini 373e7ac
feat: append active theme to runmaestro.ai URLs
pedramamini 13b9d8e
feat: add theme-hint script for Mintlify docs
pedramamini 9912801
## CHANGES
pedramamini d5eb1b6
fix: resolve pipeline-dashboard mismatch by adding agent_id binding a...
pedramamini e3292b3
feat: rename time.interval to time.heartbeat and add time.scheduled t...
pedramamini 77f25b9
feat: add Alt+J shortcut to jump to closest terminal tab
pedramamini ba9d83a
fix: hide unread agents filter button when left sidebar is collapsed
pedramamini 51589c6
- Release workflow now auto-marks RC/beta/alpha tags as prereleases
pedramamini 821aa28
fix: auto-close terminal tab when shell process exits
pedramamini d428726
fix: close terminal tab immediately on shell exit instead of 300ms delay
pedramamini c811297
feat: respect unread filter when cycling agents with Cmd+[/]
pedramamini 0cf1357
- Cue YAML subscriptions now accept `agent_id` for binding runs to se...
pedramamini 0787a2a
fix: improve tab naming reliability, Cue pipeline targeting, and UI p...
pedramamini 3baeef7
fix: always show indicator dot on unread agents filter icon
pedramamini 45ae158
fix: always show .maestro directory in file tree even when dotfiles a...
pedramamini 51780f5
feat: add per-trigger prompts, custom trigger labels, and manual Run ...
pedramamini a342bb1
feat: staged splash screen with orchestra warm-up theme
pedramamini 3a81ae8
feat: add expand/collapse toggle to Cue pipeline config drawer
pedramamini 55cddc7
fix: stop auto-creating terminal tabs for new sessions
pedramamini ca67d48
fix: keep active worktree session visible under unread-only filter
pedramamini cdd3bd0
fix: post-rebase cleanup -- fix runtime crash, remove orphaned code, u...
pedramamini 55ee392
fix: use stdin passthrough for SSH remote Group Chat large prompts
pedramamini c9ce494
fix: auto-focus AI input when switching from terminal to AI mode
pedramamini a88b09e
## CHANGES
pedramamini c5d4f5c
feat: remap Cmd+0 to jump to last tab, Cmd+Shift+0 to reset font size
pedramamini bbd7f8b
## CHANGES
pedramamini 7845b66
fix: account for sticky overlays when scrolling active tab into view
pedramamini 7de2dcf
fix: correct Cue Modal shortcut in docs from Cmd+Shift+Q to Option+Q
pedramamini ccc1828
feat: add jump-to-agent buttons in System Process Viewer
pedramamini 23268d6
feat: confirm before closing tabs with unsent drafts
pedramamini ede68dc
MAESTRO: add argument denylist for sessionCustomArgs injection (TASK-...
openasocket e3795d9
MAESTRO: harden Windows shell argument escaping and add shell:false o...
openasocket File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 }} | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -6,6 +6,8 @@ Work\ Trees/ | |
| community-data/ | ||
| .mcp.json | ||
| specs/ | ||
| .maestro/ | ||
| maestro-cue.yaml | ||
|
|
||
| # Tests | ||
| coverage/ | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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) | ||
|
|
@@ -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. | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 | ||
|
|
||
|
|
@@ -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 |
||
|
getActiveRuns: () => Promise |
||
|
getActivityLog: (limit?) => Promise |
||
|
|
||
| // Engine controls | ||
|
enable: () => Promise |
||
|
disable: () => Promise |
||
|
|
||
| // Run management | ||
|
stopRun: (runId) => Promise |
||
|
stopAll: () => Promise |
||
|
|
||
| // Session config management | ||
|
refreshSession: (sessionId, projectRoot) => Promise |
||
|
|
||
| // YAML config file operations | ||
|
readYaml: (projectRoot) => Promise |
||
|
writeYaml: (projectRoot, content) => Promise |
||
| 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 | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 | ||
|
|
||
|
|
@@ -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 | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 | ||
|
|
@@ -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) | ||
|
|
@@ -203,6 +209,12 @@ 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` | | ||
| | Add terminal feature | `src/renderer/components/XTerminal.tsx`, `src/renderer/components/TerminalView.tsx` | | ||
| | Modify terminal tabs | `src/renderer/utils/terminalTabHelpers.ts`, `src/renderer/stores/tabStore.ts` | | ||
|
|
||
| --- | ||
|
|
||
|
|
||
31 changes: 31 additions & 0 deletions
docs/assets/theme-hint.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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; | ||
| } | ||
| })(); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 | ||
|
|
||
96 changes: 96 additions & 0 deletions
docs/deep-links.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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. | ||
|
|
||
|
|
||
| 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. | ||
|
|
||
| ## Related | ||
|
|
||
| - [Configuration](./configuration) -- OS notification settings | ||
| - [General Usage](./general-usage) -- Core UI and workflow patterns | ||
| - [MCP Server](./mcp-server) -- Connect AI applications to Maestro |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -9,6 +9,7 @@ | |
| "href": "https://runmaestro.ai" | ||
| }, | ||
| "favicon": "/assets/icon.ico", | ||
| "js": "/assets/theme-hint.js", | ||
| "colors": { | ||
| "primary": "#BD93F9", | ||
| "light": "#F8F8F2", | ||
|
|
@@ -52,8 +53,6 @@ | |
| "history", | ||
| "context-management", | ||
| "document-graph", | ||
| "usage-dashboard", | ||
| "symphony", | ||
| "git-worktrees", | ||
| "group-chat", | ||
| "remote-control", | ||
|
|
@@ -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" | ||
| }, | ||
| { | ||
|
|
||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.