Журнал змін
Что нового.
Все усовершенствования платформы, как только она будет запущена.
· EmailService
IMAP/SMTP-backed надсилання, папка та пошук хмарних вузлів
Видобуток ІМП/СМТП делегаційного візерунка на АнотаціяImapBackedCloudProvider У мене є Zoho, IceWarp, Exchange, Google Workspace, Microsoft 365 розширено це. Базовий клас реалізує MailSender, MailReader, FolderManager, та SearchProvider по електронній поштіImapService, EmailSmtpService, пошукПослуги — такі ж послуги: - надсилайте / зберегтиDraft роботу для будь-якого хмарного провайдера з обліковими записами SMTP. - Усі операції папки (create / rename / remove / переміщення / setFlags / видалитиMessage) роботу через IMAP. - Пошук делегатів до існуючої пошукової служби. - Читання операцій та інлайн-кідка: рендеринг продовжує протікати через Загальний аналіз електронної поштиImapService. Решта труби в кожному конкретному постачальнику — RealtimeNotifier (детальніше застосовується), DomainManager та MailboxProvisioner — дійсно потрібно Статус на сервери API, EWS, IceWarp admin, який ще не простягається в цю базу коду. Що СТУБ тепер несе коментар до змісту API, який буде реалізовувати його.
· EmailService
IMAP-backed MailReader для хмарочосних вузлів
Zoho, IceWarp, Обмін, Google Робочий простір, Microsoft 365 все піддається IMAP, Отже, провід кожного хмари-провідувача, методи MailReader через EmailImapService замість кидання UnsupportedOperationException. Це: - Розблокувати читання повідомлень про тих провайдерів, коли тільки облікові дані ІМП налаштований (найбільш поширене розгортання сьогодні). - Створює новий вміст, що містить / вбудовані метадані в режимі реального часу через Кожен провайдер, так як служба електронної поштиImapService є одним з лідерів. - Докладає інлайн-зображення кінцевої точки з'єднання: посилання на будь-який постачальник. Решта хмарних методів (закінчення, управління папками, надання, домену ops) все ще не підтримують API-провайдери і не є в курсі тут. Також додає MailContext.toMailCredentials() тому провайдери (і існуючі EnglishDeutschPусский简体中文中國傳統EspañolالعربيةFrançaisελληνικάDanskАнглійскаябългарскиCatalàČeskýEestiSuomiGaeilgeहिन्दीHrvatskiMagyarIndonesiaIcelandicItalianoעברי日本の한국의LietuvosLatvijasмакедонскиMalayMaltiNederlandsNorskPolskiPortuguêsRomânescSlovenskýSlovenskiShqiptarCрпскиSvenskaไทยTürkçeYкраїнськийTiếng việtייִדישKiswahili.
· kamo-internal
Render inline cid: зображення через новий пункт електронної пошти
Коли повідомлення розгортається в лініях (вкладає вмісту), електронна пошта рендерера тепер rewrites <img src="cid:..."> посилання на час кріплення ******, який проксі зараз також Переадреса Cache-Control на тому, що веб-переглядач кешує зображення, що стоїть на місці. - Електронна пошта ПовідомленняБроузер) отримує вмістІд і внутрішні поля. - SanitizedEmailRenderer приймає inlineImageBaseUrl + inlineContentIds; on cid: imgs він rewrites відомий клітки і приховує відпочинок, з існуючими Навколо керма все ще приховує будь-який інший зламаний образ. - Приурочна клітка демонтажу, яка проживала в дезінфікаторі, перевернута — рерайтинг відноситься до часу рендерингу, де існує контекст повідомлення. - Список видимих вкладеннях в ThreadDetailView і повідомленняBrowser фільтри в лінію частин, так що вбудовані логотипи підпису більше не з'являються як завантаження вкладення.
· EmailService
Подавати вбудований зображення MIME частин та поверхні метаданих Content-ID
Рендер <img src="cid:..."> в повідомленнях УІ, випромінюючи вхідні частини посилання на HTML. - ПристосуванняInfo отримує вмістІд (без кутових кронштейнів) і внутр. - parseMultipart і GetAttachment поділяють одинарний індекс і рекурсивний ходьба, тому вбудовані деталі, що вміщалися всередині багатоквартирного / пов'язаного захоплюються (і їх індекси, що залишаються вирівняними через два способи). Попередньо повторення перекидання списку батьківських вкладень, які також скидається реальні насадки в підвісних конструкціях. - маєАтачмент тепер керований неінлайн-запчастинами тільки — логотипи підпису Довгий застібка на кожне повідомлення. - New endpoint GET *********** на обидва Статус на сервери номінальний ПристосуванняInfo, потоки частини з Content-Distion: inline і Cache-Control: приватний, макс-age=3600.
· KlusterServices
Додати каталог kamocrm.com і зовнішній IMAP NodePort
- Нова пошта/dovecot-imap-external (NodePort 30143 -> 143) так IMAP може бути досягнуто з-за межами кластера за $NODE:30143. - Насіннєве ціноутворення@kamocrm.com в mysql-init, так що свіже завантаження DB Відтворює поштову скриньку; живий ряд вже присутній в MySQL.
· kamo-internal
Redesign ChatsList рядки — елегантна верстка, не горизонтальна прокрутка, онлайн крапки, непрочитана значка, відносні часові темпи
· MediaService
Add GET /sessions/{guid}/members endpoint with display-name priority
Returns member list with name resolved via usernameAlias → fullName → alias → username, matching the same priority as the chat sessions list. This feeds ChatBox.loadMembers() so the tool window title bar can show the correct preferred name.
· kamo-internal
Derive and dispatch tool window title from session members
Adds onMembersChange callback to ChatBox; ChatTool derives the title (single name for 1-on-1, or '<name> (+N more)' for groups) and dispatches tool:title to update the ToolWindowShell title bar dynamically.
· kamo-internal
Lift search above tab strip, share query across Members and Chats tabs
Moves the search TextField from MemberList into NavTopPanel above the Tabs. Passes searchQuery as a prop to both MemberList and ChatsList so a single field filters both tabs. ChatsList filters rows by matching any non-self member's name.
· MediaService
Оздоблення неможливе мовлення з навантаженням АКТИВНОСТІ для оновлення чатів
· kamo-internal
Live chats-list оновлення через NATS Переглянути канал
· kamo-internal
Таблиці для членів/чат в панелі центрів взаємодії
· kamo-internal
Список чатів з нескінченним прокруткою, віртуалізований через IntersectionObserver
· kamo-internal
Multi-select в членСписок для стартових групових чатів
· kamo-internal
Чат заголовок з аватарним стеком, заголовком, та забирачом
· kamo-internal
Композитор з перетягуванням, задніми чіпсами, багатоканальним введенням
· kamo-internal
Повідомлення міхур з аватарами, конюшинними діями і індикатором
· kamo-internal
Вбудована накладка і блискавка
· kamo-internal
Види та гаки для сеансів, квитанцій, вкладення
· kamo-internal
Proxy routes for find-or-create, members, attachments, imaging proxy, mute, revoke
Extract shared **************** helper to app/lib/mediaServiceUrl.ts. Add proxy routes: find-or-create, members, receipts, attachments (streaming), mutes, revoke,
· MediaService
Configmap entries for attachment limits and multipart
· MediaService
Paged chat list with previews, members, unread counts
that returns ChatListRowDto rows including last message preview, member summaries, per-session unread counts, and ownLastViewedAt.
· kamo-shared-library
Add countUnreadAfter(guid, memberId, since) to MediaObjRepository
Needed by paged chat-list endpoint to compute per-session unread counts when ownLastViewedAt is a LocalDateTime pointer rather than a message UUID.
· MediaService
Real NATS publisher impl and READ_RECEIPT broadcast
· MediaService
Per-viewer mute endpoint and message filter
· kamo-shared-library
Додати ******** в MediaSessionMuteRepository
· MediaService
Imaging proxy with HTTP Range support and per-member download tracking
· kamo-shared-library
Add MediaObjImgDownloadRepository with existsByObjImgIdAndMemberId
Required by ImagingProxyService (Task 10) to deduplicate per-member download tracking without a full table scan.
· kamo-shared-library
Add CHAT_ATTACHMENT assoc type with imaging-chat-attachments bucket
· kamo-shared-library
Service methods for exact-match find/create, member add, mute, revoke, read

Твій всесвіт чекає.
Почати безкоштовно за декілька хвилин. Додати продукти, коли ви будете готові — без перенесення, без нових реєстрацій.
Безкоштовно назавжди — не потрібна кредитна карта