Skip to content
Closed
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
4c9f951
fix: re-enable batch state debouncing to resolve Auto Run performance…
Feb 26, 2026
48b8de3
MAESTRO: port agent-inbox shared types from feature/inbox-focus-polish
Feb 26, 2026
efe7dfc
MAESTRO: add unifiedInbox flag to EncoreFeatureFlags
Feb 26, 2026
9268995
MAESTRO: add Unified Inbox toggle card in Settings Encore tab
Feb 26, 2026
e29b425
MAESTRO: port useAgentInbox hook and AgentInbox components from featu…
Feb 26, 2026
615ff25
MAESTRO: integrate Unified Inbox modal into App.tsx with Encore Featu…
Feb 26, 2026
7eff634
MAESTRO: register Option+I keyboard shortcut for Unified Inbox with E…
Feb 26, 2026
d6842b1
MAESTRO: add Unified Inbox menu item to hamburger menu in SessionList
Feb 26, 2026
4403705
MAESTRO: add Unified Inbox action to command palette (QuickActionsModal)
Feb 26, 2026
2a05348
MAESTRO: fix unused-var eslint warning in FocusModeView
Feb 26, 2026
cd0734c
MAESTRO: fix Focus Mode auto-scroll bug with proximity-based approach
Feb 26, 2026
cf06151
MAESTRO: fix CodeRabbit bugs — group header a11y, scoped collapse, se…
Feb 26, 2026
1b65706
MAESTRO: align Inbox + Focus Mode headers with Director's Notes tokens
Feb 26, 2026
c47fca2
MAESTRO: align Focus Mode content spacing + reply input with Director…
Feb 26, 2026
d9698cb
MAESTRO: mark test verification gate as passed — 3 pre-existing Codex…
Feb 26, 2026
26d100b
MAESTRO: mark final verification gate as passed — ESLint clean + all …
Feb 26, 2026
3c388c7
MAESTRO: remove redundant star icons from Inbox + Focus Mode
Feb 26, 2026
b9252ef
MAESTRO: add description field to AITab and tabDescription flag to En…
Feb 26, 2026
d4829ed
MAESTRO: add Tab Description Settings toggle and handleUpdateTabDescr…
Feb 26, 2026
3cf3ccd
MAESTRO: wire tab description handler through prop chain and build in…
Feb 26, 2026
ed2e54b
MAESTRO: constrain tab description to 3-line max with ellipsis overflow
Feb 26, 2026
f494fad
fix: enable fuzzy matching for session filter in Left Bar
Feb 26, 2026
ad846a8
fix: enable fuzzy matching for slash command autocomplete in input area
Feb 26, 2026
f779e9a
fix: update fuzzy autocomplete test, remove duplicate log entry, cons…
Feb 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# ENCORE-INBOX-02: Add `unifiedInbox` flag to EncoreFeatureFlags

## Objective
Register the Unified Inbox as an Encore Feature with a type flag and default value.

## Context
- `EncoreFeatureFlags` interface is at `src/renderer/types/index.ts:906` — currently only has `directorNotes: boolean`
- `DEFAULT_ENCORE_FEATURES` is at `src/renderer/stores/settingsStore.ts:110` — currently `{ directorNotes: false }`
- The settings store hydration merges saved values with defaults at `settingsStore.ts:1669-1673` using spread: `{ ...DEFAULT_ENCORE_FEATURES, ...(saved) }` — so new fields with defaults are safe
- Both type AND default MUST be updated in the same task to avoid runtime `undefined`

## Tasks

- [x] In `src/renderer/types/index.ts`, find the `EncoreFeatureFlags` interface at line 906. Add `unifiedInbox: boolean` below `directorNotes`. Also in `src/renderer/stores/settingsStore.ts`, find `DEFAULT_ENCORE_FEATURES` at line 110. Add `unifiedInbox: false` to the object. Both changes must happen together:
```typescript
// types/index.ts:906
export interface EncoreFeatureFlags {
directorNotes: boolean;
unifiedInbox: boolean;
}

// stores/settingsStore.ts:110
export const DEFAULT_ENCORE_FEATURES: EncoreFeatureFlags = {
directorNotes: false,
unifiedInbox: false,
};
```

- [x] Run `npm run lint` to verify the new field doesn't cause type errors. Existing code spreading `encoreFeatures` will pick up the new field automatically via the default merge at line 1669-1673.

## Gate
- `npm run lint` passes
- `EncoreFeatureFlags` has both `directorNotes` and `unifiedInbox` fields
- `DEFAULT_ENCORE_FEATURES` has `unifiedInbox: false`
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# ENCORE-INBOX-04: Port useAgentInbox hook and AgentInbox components

## Objective
Port the data hook and all 3 component files from `feature/inbox-focus-polish` into the current codebase, adapting imports to the new architecture.

## Context
- Source branch: `feature/inbox-focus-polish`
- Files to port:
- `src/renderer/hooks/useAgentInbox.ts` — data aggregation hook
- `src/renderer/components/AgentInbox/index.tsx` — modal shell + view switching
- `src/renderer/components/AgentInbox/InboxListView.tsx` — virtualized list view
- `src/renderer/components/AgentInbox/FocusModeView.tsx` — focus mode detail view
- The new codebase uses `settingsStore.ts` (Zustand) instead of prop-drilling settings
- `useModalLayer` hook and `MODAL_PRIORITIES` still exist in the same locations
- `modalStore` still exists at `src/renderer/stores/modalStore.ts`
- `formatRelativeTime` is at `src/renderer/utils/formatters.ts`

## Tasks

- [x] Create `src/renderer/hooks/useAgentInbox.ts` by extracting from old branch: `git show feature/inbox-focus-polish:src/renderer/hooks/useAgentInbox.ts`. Copy the full content. Verify imports: `Session`, `Group` from `../types`, `InboxItem`, `InboxFilterMode`, `InboxSortMode` from `../types/agent-inbox`. These should resolve since Phase 01 created the types file. Run `npm run lint` to check.

- [x] Create the directory `src/renderer/components/AgentInbox/` and port all 3 component files. For each, extract from old branch and copy:
1. `git show feature/inbox-focus-polish:src/renderer/components/AgentInbox/index.tsx` → `src/renderer/components/AgentInbox/index.tsx`
2. `git show feature/inbox-focus-polish:src/renderer/components/AgentInbox/InboxListView.tsx` → `src/renderer/components/AgentInbox/InboxListView.tsx`
3. `git show feature/inbox-focus-polish:src/renderer/components/AgentInbox/FocusModeView.tsx` → `src/renderer/components/AgentInbox/FocusModeView.tsx`
After copying, verify all imports resolve. Key imports to check:
- `../../types` should export `Theme`, `Session`, `Group`, `ThinkingMode`, `LogEntry`
- `../../types/agent-inbox` should export all inbox types (from Phase 01)
- `../../hooks/useAgentInbox` should resolve (created above)
- `../../hooks/ui/useModalLayer` — verify this exists: `ls src/renderer/hooks/ui/useModalLayer*`
- `../../constants/modalPriorities` — verify: `grep -n "AGENT_INBOX" src/renderer/constants/modalPriorities.ts`. If `AGENT_INBOX` doesn't exist in priorities, add it (use priority 555, same as old branch)
- `../../stores/modalStore` — verify `selectModalData` is exported
- `../../utils/formatters` — verify `formatRelativeTime` is exported
- The ported `InboxListView.tsx` uses `react-window` for virtualization, but this dependency does NOT exist in the project. The codebase already uses `@tanstack/react-virtual` (used by Director's Notes `UnifiedHistoryTab.tsx`). After copying the files, replace ALL `react-window` imports with `@tanstack/react-virtual` equivalents. Specifically: replace `import { FixedSizeList } from 'react-window'` (or similar) with `import { useVirtualizer } from '@tanstack/react-virtual'` and refactor the list rendering to use the `useVirtualizer` hook pattern (see `src/renderer/components/DirectorNotes/UnifiedHistoryTab.tsx` lines 201-221 for reference). This avoids adding an unnecessary dependency.
- `../../utils/markdownConfig` — verify `generateTerminalProseStyles` exists
- `../../components/MarkdownRenderer` — verify exists
**Notes:** react-window → @tanstack/react-virtual migration completed. Added `agentInbox` to ModalId type, AgentInboxModalData interface, ModalDataMap, and getModalActions() in modalStore.ts. AGENT_INBOX priority added at 555 in modalPriorities.ts.

- [x] Run `npm run lint` and fix any import resolution errors. Common issues: renamed types, moved hooks, missing re-exports. Fix each error by finding the new location of the imported symbol.
**Notes:** Fixed 2 type narrowing issues in index.tsx (filterMode/sortMode from ModalData needed explicit casts to InboxFilterMode/InboxSortMode). Lint passes clean.

## Gate
- `src/renderer/hooks/useAgentInbox.ts` exists
- `src/renderer/components/AgentInbox/` directory has 3 files: `index.tsx`, `InboxListView.tsx`, `FocusModeView.tsx`
- `npm run lint` passes (zero errors)
- `AGENT_INBOX` priority registered in `modalPriorities.ts`
Loading