Scaffold AIService project with providers, services, websocket, and controllers
AI chat orchestration service on port 4205 with: - WebSocket streaming with session auth via ***/Redis - Chat orchestration with auto-routing, usage tracking, a...
Scaffold MCPGatewayService with auth, controllers, transports, and health monitoring
Extract useOperatorLabels hook shared between useFilters and Funnel
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...
Save copy to Sent folder after sending email
Transport.send() only sends via SMTP without saving to IMAP. Added saveToSent() to append the message to the Sent folder with the SEEN flag set. Applies to send...
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...
Disable STARTTLS and auth for port 25 internal SMTP
Port 25 on internal Postfix doesn't support STARTTLS and allows relay from cluster IPs via mynetworks. Only enable auth and STARTTLS when using port 587 (submis...
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.
Use SMTP port 25 instead of 587 for internal Postfix
Postfix only listens on port 25 inside the cluster. Port 587 (submission) is not enabled in the container.
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...
Add GET endpoint for message labels
GET **************** returns label IDs applied to a specific message.
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...
Remove theme query param — Docs derives it from WOPISrc
Docs now has its own getThemePath() logic ported from kamo-internal's Theme.tsx, so DocsService no longer needs to pass the theme URL.
Pass org theme URL to Docs for per-org logo and favicon
Construct theme path from X-Forwarded-Host (e.g., internal.kamocrm.com -> **************** and append as &theme= query param in the Docs URL. Docs reads this to...
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.
Add bulk index endpoint to backfill conversations from IMAP
POST **************** indexes existing IMAP messages into conversations and search index tables.
مثل ما ترى الشحن؟?
كل واحد من هذه تحديثات الأراضي في مكان عملك تلقائيا. ابدأوا بالمجان وشاهدوها تنمو بعد أسبوع.