Skip to content

Encore: 2 Bundled Encore Features and Settings UI Updates#419

Open
needmorecowbell wants to merge 19 commits intoRunMaestro:mainfrom
needmorecowbell:plugin_environment
Open

Encore: 2 Bundled Encore Features and Settings UI Updates#419
needmorecowbell wants to merge 19 commits intoRunMaestro:mainfrom
needmorecowbell:plugin_environment

Conversation

@needmorecowbell
Copy link
Copy Markdown
Contributor

@needmorecowbell needmorecowbell commented Feb 19, 2026

Summary

  • Implements a full extension system ("Encore Features") for Maestro with manifest-based discovery, sandboxed activation, scoped storage, and an IPC bridge for main↔renderer communication
  • Ships two bundled first-party encores: Agent Status Exporter (real-time agent data to JSON) and Notification Webhook (HTTP notifications on agent events)
  • Extracts Director's Notes settings into its own EncoreFeatureCard, creating a flat, uniform feature list in Settings → Encore tab
  • All encores are off by default, lazy-loaded on toggle, and persist enabled/disabled state across restarts

What's included

Core system (src/main/encore-*.ts, src/shared/encore-types.ts):

  • Manifest format with permissions model (process:read, storage, settings:*, notifications, network)
  • Loader with bundled-encore bootstrapping from dist/encores/userData/encores/
  • Host with scoped API surface per encore (storage, IPC, settings, process read, notifications)
  • Storage with path traversal prevention (rejects .., absolute paths, null bytes, separators)
  • IPC bridge for encore:<id>:<channel> message routing

UI (src/renderer/components/):

  • EncoreFeatureCard — shared toggle card wrapper used by both Director's Notes and Plugins
  • DirectorNotesSettings — extracted ~380 LOC from SettingsModal into self-contained component
  • EncoreManager — browse/enable/disable encores with per-encore settings panels
  • EncoreTabContent — sandboxed iframe renderer for encores with UI
  • Keyboard shortcut: Ctrl+Shift+X opens Encore tab (when plugins feature enabled)

State persistence fix:

  • Replaced broken userDisabled flag with symmetric encore:<id>:enabled boolean
  • enableEncore() → sets true, disableEncore() → sets false, startup restores only explicit true
  • No auto-enable for first-party encores

Test plan

  • npm run lint passes
  • All 480 test files pass (20,332 tests)
  • New test coverage: encore-activation, encore-host, encore-loader, encore-reference, EncoreManager, EncoreTabContent, useEncoreRegistry
  • Manual: Settings → Encore tab shows flat list with Director's Notes and Plugins as peer cards
  • Manual: Toggle encore on → persists across npm run dev restarts; toggle off → stays off
  • Manual: Agent Status Exporter writes JSON when enabled with output path configured
  • Manual: Notification Webhook fires HTTP POST on agent completion/error

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added Encore Features system for installable plugins, with UI for browsing, enabling/disabling, and per-plugin settings.
    • Bundled Agent Status Exporter and Notification Webhook plugins.
    • Right panel support for plugin tabs and a keyboard shortcut (Meta+Shift+X) to open Encore features.
  • Documentation

    • Comprehensive developer and user guides for the Encore system and plugin manifests.

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants