Auto-grow input to 11 lines when maximized, Enter sends, Alt+Enter newline, fix sidebar detection
- Input grows up to 11 lines (220px) when window is maximized, 6 lines otherwise - Enter submits message, Alt+Enter inserts newline (was Shift+Enter) - Use Resi...
Add manual model creation UI and POST /api/ai/models route
- Add "Add model manually" form in Provider Setup edit view - Add POST handler to /api/ai/models API route - Users can specify model ID and display name for cus...
Add detailed help tips, update provider types, improve model display
- Replace placeholder help tips with user-friendly explanations for all AI settings tabs (Usage, Providers, MCP, Security, Sales Agents) - Update PROVIDER_TYP...
Move message to Junk folder when reporting as spam
After flagging a message as spam via spamApi, also call batchApi.move to move it to Junk (or back to INBOX when marking as not spam). Applies to both single and...
Show configured providers in AI chat model selector dropdown
Fetches both models and providers. Shows providers as selectable options alongside any configured models, so users can pick a provider even when specific models...
Switch AI chat from WebSocket to REST mode until WS proxy is available
Reports as 'connected' so the UI is usable. Messages sent via REST POST to **************** instead of WebSocket.
Remove duplicate minimize/maximize/close buttons from AI chat header
The tool window shell already provides these controls.
Switch AI chat tool from dark theme to light theme matching other tools
Uses light backgrounds, var(--color-primary) accents, and org theme colors consistent with Calculator, Softphone, and other tool windows.
Extend email content to full width of detail panel
Remove max-w-4xl constraint so the email body, attachments, and quick reply fill 100% of the available panel width.
Add Sales Agent Setup tab, update settings nav slideout, fix subtitle
- Add Sales Agent Setup tab to AI settings (placeholder) - Add Artificial Intelligence section to settings slideout panel - Fix My Account nav links (Relationsh...
Align ProviderSetupTab field names with backend entity (priorityOrder, maxRateLimit, isActive)
Ensure Junk and other system folders always appear in sidebar
Adds guaranteed system folders (INBOX, Sent, Drafts, Junk, Trash, Archive) to the folder tree even if they don't exist on the IMAP server yet.
Move handleBulkReportSpam after getSelectedRefs to fix declaration order
Wire spam reporting into MessageBrowser with toast and state handling
Add tooltips to WYSIWYG toolbar buttons in New Email tool
Applies title attributes to all Quill toolbar buttons and pickers after mount: Bold, Italic, Underline, Strikethrough, Text Color, Background Color, Heading, Al...
Dynamically update tool window title from email subject
Add tool:title event to the tool window system. The New Email tool dispatches it as the subject field changes, showing the subject as the window title (abbrevia...
Add New Email tool icon to NavTop bar
Adds a mail icon button to the left of the Softphone button that opens the New Email tool window.
Auto-refresh message list when draft is saved or email is sent
MessageTool dispatches email:folder-changed events after saving a draft (Drafts) or sending an email (Sent). MessageBrowser listens and refreshes if the affecte...
Match message tool color scheme to other tools and rename to New Email
Switch from dark theme to the light theme used by chat/calculator tools: light gray gradients, white inputs, var(--color-primary) accents. Rename tool from "New...
Restore full WYSIWYG toolbar options in message tool
Adds back headers, strike, background color, alignment, and image options. Toolbar wraps onto two lines when in compact (non-maximized) mode via flex-wrap.
Mark messages as read on IMAP server and refresh folder counts
Clicking a message now calls PUT **************** with seen:true on the backend, persisting the read state to IMAP. Sidebar folder unread counts refresh after m...
Integrate New Message composer into tool window system
Replace the standalone fullscreen/mini composer windowing with the shared tool window infrastructure (minimize, maximize, hexheads). MessageSystem.openNewMessag...
Move useState hook before early returns to fix React error #300
useState(syncing) was declared after conditional early returns, violating React's rules of hooks.
Quick reply send button - remove client OTK, add credentials and feedback
The quick reply was sending a client-generated OTK header that the proxy doesn't use (proxy generates its own). Removed the unnecessary OTK call, added credenti...
LabelPicker now fetches and displays current message labels
- Added getMessageLabels API call to emailApi - LabelPicker fetches applied labels on mount via GET endpoint - Toggle updates local state immediately for respon...
Wire up remaining unwired UI elements in messages page
- FolderSidebar: folder options button now opens rename/delete menu - FolderSidebar: Folder Settings button renamed to Manage Folders, toggles create folder - F...
Wire up quick reply Send Reply and Cancel buttons
The quick reply textarea and buttons were static with no state or onClick handlers. Now properly sends replies via the email API and clears the textarea on canc...
Add sync conversations button for backfilling from IMAP
Shows a "Sync Conversations" button when no conversations are found, triggering bulk indexing of existing IMAP messages into conversation view.
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.