Skip to content

feat: Encore Feature system with gating infrastructure#473

Open
felipeggv wants to merge 5 commits intoRunMaestro:mainfrom
felipeggv:feat/rebuild-encore-system
Open

feat: Encore Feature system with gating infrastructure#473
felipeggv wants to merge 5 commits intoRunMaestro:mainfrom
felipeggv:feat/rebuild-encore-system

Conversation

@felipeggv
Copy link

@felipeggv felipeggv commented Feb 27, 2026

Summary

  • Adds EncoreFeatureFlags type system with unifiedInbox and tabDescription flags
  • Adds Zustand settingsStore integration with persistence via window.maestro.settings
  • Adds Encore tab in Settings Modal with feature toggles (role="switch", aria-checked)
  • Gates keyboard shortcuts (Alt+I for Agent Inbox, Meta+Shift+O for Director Notes) behind feature flags
  • Gates AgentInbox modal rendering and handler props behind unifiedInbox encore feature
  • Sets all encore features to false by default (convention: opt-in only)

Commits

  • feat: add unifiedInbox and tabDescription to EncoreFeatureFlags
  • feat: add Unified Inbox and Tab Descriptions cards to Settings Encore tab
  • feat: gate keyboard shortcuts for agentInbox and directorNotes encore features
  • feat: gate AgentInbox modal rendering and handler props behind unifiedInbox encore feature
  • fix: set tabDescription encore default to false for convention consistency

Test plan

  • npm run lint passes
  • npm run test passes
  • Toggle each feature on/off in Settings → Encore tab
  • Verify shortcuts only work when feature is enabled
  • Verify AgentInbox modal only renders when unifiedInbox is enabled
  • Verify all encore features default to false on fresh install

Summary by CodeRabbit

Release Notes

  • New Features
    • Introduced Unified Inbox feature with Alt+i keyboard shortcut access and quick actions integration
    • Added Tab Descriptions feature toggle
    • New feature toggles available in Settings for both Unified Inbox and Tab Descriptions to enable/disable as needed

Felipe Gobbi and others added 5 commits February 27, 2026 10:53
Extends the Encore Feature system with two new feature flags for upcoming
Unified Inbox and Tab Description features. tabDescription defaults to
true (enabled by default), unifiedInbox defaults to false.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…gs Encore tab

- Import Inbox and FileText icons from lucide-react
- Change Encore tab icon from FlaskConical to Sparkles per spec
- Add Unified Inbox feature card with toggle, Beta badge, left-border accent
- Add Tab Descriptions feature card with toggle, left-border accent
- Both cards follow existing toggle pattern (spread-copy + flip flag)
- All 113 SettingsModal tests pass, lint clean

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…es encore features

Add agentInbox shortcut (Alt+I) with encoreFeatures.unifiedInbox guard.
Director's Notes shortcut already had its guard. Register agentInbox modal
in the modal store and wire through App.tsx keyboard handler context.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…nd unifiedInbox encore feature

- Add onOpenAgentInbox gated prop (App.tsx → AppModals → QuickActionsModal)
- Add AgentInbox rendering placeholder in App.tsx (commented, component TBD)
- Add Unified Inbox entry to QuickActionsModal command palette
- DirectorNotesModal gating was already in place from prior work

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…on consistency

The tabDescription encore feature was defaulting to true, inconsistent
with the encore pattern (all features disabled by default). No handler
or UI exists yet for tab descriptions, so this is purely a default fix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@felipeggv
Copy link
Author

@coderabbitai review

@coderabbitai
Copy link

coderabbitai bot commented Feb 27, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai
Copy link

coderabbitai bot commented Feb 27, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d612b6 and 060ba44.

📒 Files selected for processing (9)
  • src/renderer/App.tsx
  • src/renderer/components/AppModals.tsx
  • src/renderer/components/QuickActionsModal.tsx
  • src/renderer/components/SettingsModal.tsx
  • src/renderer/constants/shortcuts.ts
  • src/renderer/hooks/keyboard/useMainKeyboardHandler.ts
  • src/renderer/stores/modalStore.ts
  • src/renderer/stores/settingsStore.ts
  • src/renderer/types/index.ts

📝 Walkthrough

Walkthrough

This PR introduces a new Agent Inbox feature with modal state management, keyboard shortcut (Alt+i), feature flags, and UI integration. Changes include modal state store updates, keyboard handler wiring, quick action menu entry, settings panel controls, and app-level callback exposure.

Changes

Cohort / File(s) Summary
Modal State & Type Definitions
src/renderer/stores/modalStore.ts, src/renderer/stores/settingsStore.ts, src/renderer/types/index.ts
Added agentInbox modal identifier to ModalId union, introduced setAgentInboxOpen() action with state selector, extended EncoreFeatureFlags with unifiedInbox and tabDescription boolean toggles (default false).
App-Level Wiring
src/renderer/App.tsx
Exposed agentInboxOpen state and setAgentInboxOpen handler via useModalActions, passed onOpenAgentInbox callback to AppModals component, integrated setAgentInboxOpen into keyboard handler surface, gated by encore feature flag.
Component Interfaces
src/renderer/components/AppModals.tsx
Added onOpenAgentInbox?: () => void prop to AppModalsProps and AppUtilityModalsProps interfaces, propagated callback through component composition tree.
UI Components & User Interactions
src/renderer/components/QuickActionsModal.tsx, src/renderer/components/SettingsModal.tsx
Added "Unified Inbox" quick action entry triggered by onOpenAgentInbox prop in QuickActionsModal; added two new feature cards in SettingsModal for Unified Inbox and Tab Descriptions with visual toggles and icon updates (FlaskConical → Sparkles, added Inbox and FileText icons).
Input & Configuration
src/renderer/constants/shortcuts.ts, src/renderer/hooks/keyboard/useMainKeyboardHandler.ts
Defined new keyboard shortcut agentInbox with keys ['Alt', 'i'] and label "Unified Inbox"; added shortcut handler in useMainKeyboardHandler that triggers setAgentInboxOpen when unifiedInbox feature flag is enabled.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant Keyboard as Keyboard Handler
    participant UI as QuickActionsModal/<br/>SettingsModal
    participant App as App.tsx
    participant Store as Modal Store
    participant Modal as Agent Inbox<br/>Modal

    rect rgba(100, 150, 255, 0.5)
    Note over User,Modal: Keyboard Shortcut Path (Alt+i)
    User->>Keyboard: Press Alt+i
    Keyboard->>Keyboard: Check unifiedInbox<br/>feature flag
    Keyboard->>App: Call setAgentInboxOpen(true)
    App->>Store: updateModal('agentInbox', true)
    Store->>Modal: Re-render with open state
    Modal->>User: Display Agent Inbox
    end

    rect rgba(150, 200, 100, 0.5)
    Note over User,Modal: UI Click Path (Quick Actions)
    User->>UI: Click "Unified Inbox"
    UI->>App: Call onOpenAgentInbox()
    App->>Store: updateModal('agentInbox', true)
    Store->>Modal: Re-render with open state
    Modal->>User: Display Agent Inbox
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 75.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately captures the main objective of the PR: introducing an Encore feature system with gating infrastructure for controlling feature enablement.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps
Copy link

greptile-apps bot commented Feb 27, 2026

Greptile Summary

Adds Encore Feature infrastructure for Unified Inbox and Tab Descriptions with proper feature gating

  • Added unifiedInbox and tabDescription flags to EncoreFeatureFlags type system
  • Integrated Zustand settings store with persistence via window.maestro.settings
  • Added feature toggle UI cards in Settings Modal Encore tab with role="switch" and aria-checked attributes
  • Gated Unified Inbox keyboard shortcut (Alt+I) behind encoreFeatures.unifiedInbox check
  • Gated AgentInbox modal rendering and handler props with conditional rendering pattern
  • All encore features default to false following opt-in convention
  • Changed Encore tab icon from FlaskConical to Sparkles for better visual consistency
  • tabDescription is infrastructure-only (no implementation gating yet)

The implementation follows the established Director's Notes pattern from CLAUDE-PATTERNS.md with proper gating across keyboard shortcuts, command palette, and modal rendering.

Confidence Score: 5/5

  • This PR is safe to merge with no risk - purely additive infrastructure with proper feature gating
  • Score reflects excellent implementation quality: follows established patterns from CLAUDE-PATTERNS.md, properly gates all access points, uses type-safe defaults, includes accessibility attributes (role/aria-checked), and maintains backward compatibility. No breaking changes, no logic bugs, and comprehensive feature gating.
  • No files require special attention - all changes follow established patterns

Important Files Changed

Filename Overview
src/renderer/types/index.ts Added unifiedInbox and tabDescription flags to EncoreFeatureFlags interface
src/renderer/stores/settingsStore.ts Set default values to false for both new encore features (opt-in convention)
src/renderer/hooks/keyboard/useMainKeyboardHandler.ts Added keyboard handler for agentInbox, properly gated by encoreFeatures.unifiedInbox check
src/renderer/components/SettingsModal.tsx Added feature toggle cards for Unified Inbox and Tab Descriptions, changed Encore tab icon from FlaskConical to Sparkles
src/renderer/App.tsx Added feature-gated callback for Unified Inbox and commented-out modal placeholder (component TBD)

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    Start([User Action]) --> CheckFeature{Feature Enabled?}
    
    CheckFeature -->|Yes| AllowAccess[Allow Access]
    CheckFeature -->|No| BlockAccess[Block Access]
    
    AllowAccess --> KB[Keyboard Shortcut Alt+I]
    AllowAccess --> CP[Command Palette Entry]
    AllowAccess --> Modal[Modal Rendering]
    
    BlockAccess --> NoKB[No Keyboard Handler]
    BlockAccess --> NoCP[No Command Palette Entry]
    BlockAccess --> NoModal[No Modal]
    
    subgraph Settings["Settings Store (settingsStore.ts)"]
        SF[encoreFeatures.unifiedInbox: false]
        SF2[encoreFeatures.tabDescription: false]
    end
    
    subgraph UI["Settings Modal UI"]
        Toggle[Toggle Switch]
        Toggle --> Update[Update encoreFeatures]
        Update --> Persist[window.maestro.settings.set]
    end
    
    subgraph Gating["Feature Gates"]
        KB --> Gate1{encoreFeatures?.unifiedInbox}
        CP --> Gate2{onOpenAgentInbox !== undefined}
        Modal --> Gate3{encoreFeatures.unifiedInbox && agentInboxOpen}
    end
    
    Settings --> CheckFeature
    UI --> Settings
Loading

Last reviewed commit: 060ba44

@coderabbitai
Copy link

coderabbitai bot commented Feb 27, 2026

📝 Walkthrough

Walkthrough

This change adds support for two new encore features: Unified Inbox and Tab Descriptions. A new Agent Inbox modal is introduced with state management through the modal store, wired through the component hierarchy, accessible via keyboard shortcut (Alt+I) and Quick Actions menu, with UI toggles in Settings.

Changes

Cohort / File(s) Summary
Modal Infrastructure
src/renderer/stores/modalStore.ts
Added agentInbox modal state to ModalId union and ModalDataMap; introduced setAgentInboxOpen action and agentInboxOpen selector for managing Agent Inbox modal lifecycle.
Type Definitions
src/renderer/types/index.ts, src/renderer/stores/settingsStore.ts
Extended EncoreFeatureFlags with two new boolean flags: unifiedInbox and tabDescription, both defaulting to false.
Component Hierarchy Wiring
src/renderer/App.tsx, src/renderer/components/AppModals.tsx, src/renderer/components/QuickActionsModal.tsx
Established prop passing chain from App → AppModals → AppUtilityModals → QuickActionsModal for onOpenAgentInbox callback; destructured setAgentInboxOpen and agentInboxOpen from modal store in App.
Feature UI
src/renderer/components/SettingsModal.tsx
Added feature toggle cards for Unified Inbox and Tab Descriptions in Encore Features section; updated Encore tab icon from FlaskConical to Sparkles; imported Inbox and FileText icons.
Quick Actions Integration
src/renderer/components/QuickActionsModal.tsx
Added new main action item with id agentInbox, label "Unified Inbox", keyboard shortcut binding, and execution logic to call onOpenAgentInbox() and close the modal.
Keyboard Input Handling
src/renderer/constants/shortcuts.ts, src/renderer/hooks/keyboard/useMainKeyboardHandler.ts
Added agentInbox shortcut with keys Alt+I to DEFAULT_SHORTCUTS; added keyboard handler branch for agentInbox shortcut that opens modal when unifiedInbox feature flag is enabled.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 75.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: Encore Feature system with gating infrastructure' accurately describes the main change: introducing an Encore feature system with feature flags and feature-gated functionality across the codebase.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/renderer/components/SettingsModal.tsx (1)

3644-3772: Consider extracting a shared Encore toggle-card component.

Unified Inbox and Tab Descriptions duplicate the same card/switch structure. A shared component will reduce drift and keep future feature toggles consistent.

♻️ Proposed refactor sketch
+type EncoreToggleCardProps = {
+	enabled: boolean;
+	onToggle: () => void;
+	icon: React.ReactNode;
+	title: string;
+	description: string;
+	theme: Theme;
+	beta?: boolean;
+};
+
+const EncoreToggleCard = ({
+	enabled,
+	onToggle,
+	icon,
+	title,
+	description,
+	theme,
+	beta,
+}: EncoreToggleCardProps) => (
+	<div
+		className="rounded-lg p-4"
+		style={{
+			borderLeft: `3px solid ${enabled ? theme.colors.accent : theme.colors.border}`,
+			backgroundColor: enabled ? `${theme.colors.accent}08` : 'transparent',
+		}}
+	>
+		<button
+			className="w-full flex items-center justify-between text-left"
+			onClick={onToggle}
+			role="switch"
+			aria-checked={enabled}
+		>
+			{/* shared icon/title/description/switch UI */}
+		</button>
+	</div>
+);
...
- {/* Unified Inbox Feature Card */}
- <div>...</div>
-
- {/* Tab Descriptions Feature Card */}
- <div>...</div>
+ <EncoreToggleCard
+	enabled={encoreFeatures.unifiedInbox}
+	onToggle={() =>
+		setEncoreFeatures({ ...encoreFeatures, unifiedInbox: !encoreFeatures.unifiedInbox })
+	}
+	icon={<Inbox className="w-5 h-5" />}
+	title="Unified Inbox"
+	description="Aggregated view of pending actions across all agents"
+	theme={theme}
+	beta
+ />
+ <EncoreToggleCard
+	enabled={encoreFeatures.tabDescription}
+	onToggle={() =>
+		setEncoreFeatures({
+			...encoreFeatures,
+			tabDescription: !encoreFeatures.tabDescription,
+		})
+	}
+	icon={<FileText className="w-5 h-5" />}
+	title="Tab Descriptions"
+	description="Show AI-generated descriptions below tab names for quick context"
+	theme={theme}
+ />
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/components/SettingsModal.tsx` around lines 3644 - 3772, The two
feature cards (Unified Inbox and Tab Descriptions) duplicate the same card +
switch UI; extract a reusable component (e.g., EncoreFeatureToggle) that accepts
props: id/key or value (boolean), onToggle (function), label (string),
description (string), Icon (component), optional badge (e.g., "Beta"), and theme
for styling, and preserves role="switch" and aria-checked behavior; replace the
duplicated blocks in SettingsModal (the JSX using
encoreFeatures.unifiedInbox/tabDescription and setEncoreFeatures) with calls to
<EncoreFeatureToggle value={encoreFeatures.unifiedInbox} onToggle={() =>
setEncoreFeatures({...encoreFeatures, unifiedInbox:
!encoreFeatures.unifiedInbox})} label="Unified Inbox" description="..."
Icon={Inbox} badge="Beta" /> and similarly for tabDescription, ensuring the
switch background/handle transform logic uses the passed value prop so visual
state remains identical.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/renderer/App.tsx`:
- Line 3715: The onOpenAgentInbox prop is wired (onOpenAgentInbox,
setAgentInboxOpen, encoreFeatures.unifiedInbox) but the modal render
(AgentInboxModal) is commented out and the component is missing; restore or
implement the AgentInboxModal component and its render path: either re-enable
the existing render block for AgentInboxModal and ensure a concrete
AgentInboxModal component is created/ exported, or replace the commented block
with a call to a newly implemented AgentInboxModal that accepts isOpen and
onClose (tied to setAgentInboxOpen), and guard its rendering behind
encoreFeatures.unifiedInbox so the callback actually opens a real modal.

---

Nitpick comments:
In `@src/renderer/components/SettingsModal.tsx`:
- Around line 3644-3772: The two feature cards (Unified Inbox and Tab
Descriptions) duplicate the same card + switch UI; extract a reusable component
(e.g., EncoreFeatureToggle) that accepts props: id/key or value (boolean),
onToggle (function), label (string), description (string), Icon (component),
optional badge (e.g., "Beta"), and theme for styling, and preserves
role="switch" and aria-checked behavior; replace the duplicated blocks in
SettingsModal (the JSX using encoreFeatures.unifiedInbox/tabDescription and
setEncoreFeatures) with calls to <EncoreFeatureToggle
value={encoreFeatures.unifiedInbox} onToggle={() =>
setEncoreFeatures({...encoreFeatures, unifiedInbox:
!encoreFeatures.unifiedInbox})} label="Unified Inbox" description="..."
Icon={Inbox} badge="Beta" /> and similarly for tabDescription, ensuring the
switch background/handle transform logic uses the passed value prop so visual
state remains identical.

ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9d612b6 and 060ba44.

📒 Files selected for processing (9)
  • src/renderer/App.tsx
  • src/renderer/components/AppModals.tsx
  • src/renderer/components/QuickActionsModal.tsx
  • src/renderer/components/SettingsModal.tsx
  • src/renderer/constants/shortcuts.ts
  • src/renderer/hooks/keyboard/useMainKeyboardHandler.ts
  • src/renderer/stores/modalStore.ts
  • src/renderer/stores/settingsStore.ts
  • src/renderer/types/index.ts

onOpenDirectorNotes={
encoreFeatures.directorNotes ? () => setDirectorNotesOpen(true) : undefined
}
onOpenAgentInbox={encoreFeatures.unifiedInbox ? () => setAgentInboxOpen(true) : undefined}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Agent Inbox state/callback references =="
rg -n --type=ts --type=tsx -C2 '\bagentInboxOpen\b|\bsetAgentInboxOpen\b|\bonOpenAgentInbox\b'

echo
echo "== Active AgentInboxModal JSX mounts (non-comment lines) =="
rg -nP --type=tsx '^\s*<AgentInboxModal\b' || true

echo
echo "== Any AgentInboxModal mentions (including comments) =="
rg -n --type=tsx 'AgentInboxModal'

Repository: RunMaestro/Maestro

Length of output: 150


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Check if the file exists and get its line count
if [ -f "src/renderer/App.tsx" ]; then
  echo "== File found: src/renderer/App.tsx =="
  wc -l src/renderer/App.tsx
  
  echo
  echo "== Lines around 3715 (callback setup) =="
  sed -n '3710,3720p' src/renderer/App.tsx
  
  echo
  echo "== Lines 4111-4120 (alleged commented modal) =="
  sed -n '4111,4120p' src/renderer/App.tsx
  
  echo
  echo "== Search for agentInboxOpen references =="
  grep -n 'agentInboxOpen\|setAgentInboxOpen\|onOpenAgentInbox' src/renderer/App.tsx || echo "No matches found"
  
  echo
  echo "== Search for AgentInboxModal mentions =="
  grep -n 'AgentInboxModal' src/renderer/App.tsx || echo "No matches found"
else
  echo "File not found at src/renderer/App.tsx"
  # List the directory structure
  ls -la src/renderer/ 2>/dev/null || echo "src/renderer directory not found"
fi

Repository: RunMaestro/Maestro

Length of output: 1523


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Search entire codebase for AgentInboxModal (excluding App.tsx) =="
find . -type f \( -name "*.tsx" -o -name "*.ts" -o -name "*.jsx" -o -name "*.js" \) -not -path "./node_modules/*" -not -path "./.git/*" | xargs grep -l 'AgentInboxModal' 2>/dev/null | grep -v 'App.tsx' || echo "No other files reference AgentInboxModal"

echo
echo "== Verify AgentInboxModal definition/export =="
find . -type f \( -name "*.tsx" -o -name "*.ts" \) -not -path "./node_modules/*" -not -path "./.git/*" | xargs grep -l 'export.*AgentInboxModal\|AgentInboxModal.*=' 2>/dev/null || echo "No definition found"

Repository: RunMaestro/Maestro

Length of output: 239


Unified Inbox callback is wired but modal render is disabled and component doesn't exist.

Line 3715 enables opening the inbox via onOpenAgentInbox callback, but the only AgentInboxModal render block (Lines 4111-4120) is fully commented out with a note that the component is TBD. The component is not defined anywhere in the codebase, making the feature non-functional.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/renderer/App.tsx` at line 3715, The onOpenAgentInbox prop is wired
(onOpenAgentInbox, setAgentInboxOpen, encoreFeatures.unifiedInbox) but the modal
render (AgentInboxModal) is commented out and the component is missing; restore
or implement the AgentInboxModal component and its render path: either re-enable
the existing render block for AgentInboxModal and ensure a concrete
AgentInboxModal component is created/ exported, or replace the commented block
with a call to a newly implemented AgentInboxModal that accepts isOpen and
onClose (tied to setAgentInboxOpen), and guard its rendering behind
encoreFeatures.unifiedInbox so the callback actually opens a real modal.

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.

1 participant