Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added
- **GUI**: EventFilter Fired toggle and quick filters (#486). Independent "⚡ Fired" toggle for mapping_fired event visibility, quick filter buttons (All/Raw Only/Fired Only), and state consistency guard preventing contradictory filter states.
- **GUI**: Toast notification system for mapping fires (#487, ADR-014 Phase 4). Transient workspace overlays showing trigger→action summaries with auto-dismiss (3s), hover-pause, error persistence, coalescence for continuous controls, max 5 visible. `toastsEnabled`/`toastsContinuous` settings gate toast emission.
- **GUI v2 Phase 1 — Layout Shell**: Rewrote `App.svelte` from router-based 8-view layout to three-zone unified workspace (Chat | Workspace | Events). Created `ChatPanel`, `WorkspacePanel`, `EventStreamPanel` panel components. Created `TitleBar` with device/profile dropdowns and settings gear. Created `workspace.js` store (9 workspace views, config diff/MIDI learn action routing) and `events.js` store (ring buffer, filters, app-level Tauri event listener). Added `theme.css` with full navy/indigo CSS variable palette. Updated `StatusBar` with CSS variables and dynamic version. Deleted old `views/` directory and `Sidebar.svelte`.
- **GUI v2 Phase 2 — Config Approval Flow**: Replaced modal-based config approval with workspace-integrated diff view. Created `ConfigDiffView` (pending change review with approve/edit/reject buttons, expiration countdown, change descriptions, diff preview), `MappingStateView` (mode tabs + mapping list, compact mode), `MappingRow` (trigger→action display with colored event-type dots and NEW/UPD badges), `DiffBlock` (simplified diff renderer). Created `diff-helpers.ts` utility with `formatTriggerText`, `formatActionText`, `getTriggerDotColor`. Wired LLM plan creation to workspace via `showConfigDiff()`. Non-mapping workspace views show compact mapping list below. **Spec deviation**: Reused existing `llm_apply_plan`/`llm_reject_plan` Rust commands instead of adding 3 new backend commands (same functionality, avoids duplication).
- **GUI v2 Phase 3 — MIDI Learn Refinement**: Replaced MIDI Learn modal capture with workspace-integrated refinement card. Created `RefinementCard` (interpretation chips, editable parameter fields, advanced velocity range slider, confirm/relearn/cancel actions), `AlternativeChips` (interpretation selector), `RangeSlider` (dual-thumb velocity range slider), `MidiLearnRefinement` (workspace view container). Created `refinement-helpers.ts` utility with `getAlternativeInterpretations`, `getParameterFields`, `buildTriggerFromParams`. Added `Refining` state to `LearnSessionState` in Rust backend. Wired event selection to workspace refinement via `showMidiLearnRefinement()`. **Spec deviation**: Refinement logic implemented as pure TypeScript functions instead of new Rust Tauri commands — event data from existing `stop_midi_learn` response is sufficient, avoids unnecessary IPC round-trips.
Expand Down
2 changes: 2 additions & 0 deletions conductor-gui/ui/src/App.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,8 @@ vi.mock('$lib/stores/events.js', async () => {
initEventListener: vi.fn(() => Promise.resolve(() => {})),
restartEventMonitoring: vi.fn(() => Promise.resolve(() => {})),
eventFiredFilter: writable(true),
toastsEnabled: writable(true),
toastsContinuous: writable(false),
eventMonitorStatus: writable('connecting'),
eventStreamPanelVisible: writable(true),
};
Expand Down
2 changes: 2 additions & 0 deletions conductor-gui/ui/src/lib/components/DeviceStatusPills.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ vi.mock('$lib/stores/events.js', async () => {
eventChannelFilter: writable('all'),
eventDeviceFilter: mockEventDeviceFilter,
eventFiredFilter: writable(true),
toastsEnabled: writable(true),
toastsContinuous: writable(false),
eventStreamVisible: writable(true),
learnSessionActive: writable(false),
autoScroll: writable(true),
Expand Down
2 changes: 2 additions & 0 deletions conductor-gui/ui/src/lib/components/EventFilter.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ vi.mock('$lib/stores/events.js', async () => {
eventFiredFilter: mockEventFiredFilter,
eventChannelFilter: writable('all'),
eventDeviceFilter: writable('all'),
toastsEnabled: writable(true),
toastsContinuous: writable(false),
eventStreamVisible: writable(true),
learnSessionActive: writable(false),
autoScroll: writable(true),
Expand Down
Loading
Loading