Changelog
Ada kabar baru.
Setiap perbaikan pada platform, sebagai kapal.
· EmailService
IMAP / SMTP-backed send, folder, and search for cloud stubs
Ekstrak pola delegasi IMAP / SMTP ke dalam Pengatur AbstractImrapBackedCloudProvider and have Zoho, IceWarp, Exchange, Google Workspace, and Microsoft 365 extend itu. Kelas dasar menerapkan MailSender, MailReader, FolderManager, dan SearchProvider di atas EmailImpapService, EmailSmtspService, and SearchService - layanan yang sama yang digunakan KamoMail - jadi: Kirim / selamatkan Draft untuk penyedia awan dengan kredensial SMTP. - Semua operasi folder (buat / ubah nama / hapus / pindahkan / setFlags / deleteMessage) bekerja melalui IMAP. - Cari delegasi ke SearchService yang ada. - Baca operasi dan cad inline: render terus mengalir melalui shared EmailIlapService parser. Stubs yang tersisa di setiap penyedia beton - Pencatat waktu alam (dimana dapat diterapkan), DomainManager, dan MailboxProvisioner - benar-benar perlu provider- native admin APIs (Microsoft Graph, Google Admin SDK, Zoho Admin API, EWS, admin IceWarp) yang belum terhubung ke codebase ini. Masing-masing stub sekarang membawa sebuah komentar bergaya TODO- penamaan API yang akan mengimplementasikannya.
· EmailService
IMAP-backed MailReader untuk stub penyedia awan
Zoho, IceWarp, Exchange, Google Workspace, dan Microsoft 365 semua mengekspos IMAP, Jadi kaitkan setiap metode penyedia-awan stub MailReader melalui Layanan ImpapService Bukannya melempar Exception Operation Unconvocated. Ini: - Buka blok membaca pesan pada penyedia ketika hanya kredensial IMAP dikonfigurasi (penyebaran paling umum hari ini). - Membuat contentId / inline metadata mengalir secara universal di seluruh setiap penyedia, karena EmailIlapService adalah parser tunggal. - Biarkan inline- gambar titik akhir memecahkan Cid: referensi untuk penyedia apapun. Metode penyedia awan yang tersisa (mengirim, manajemen folder, penyediaan, ops domain) masih Eksepsi Operasional Unconcected - kebutuhan mereka provider-native APIs dan tidak dalam lingkup di sini. Juga menambahkan MailContext.toMailcreations () sehingga penyedia (dan yang ada Adaptor KamoMailReader) berbagi satu credental-converse helper.
· kamo-internal
Render inline cid: gambar melalui endpoint EmailService baru
Ketika pesan mengekspos bagian inline (masing-masing membawa contentId), email renderer now rewritten < img src = "Cid:"... > referensi di mount time ke * * * * * * * * * * * * * * yang proxy sekarang juga Selanjutnya Cache-Control pada sehingga browser caches gambar yang diambil. - EmailAttasemen (baik dalam conversationTypes dan salinan lokal di MessageBrowser) memperoleh ruas contentId dan inline. - SanitizeedEmailRenderer menerima inlineImageBaseUrl + inlineContentIds; pada cid: imgs it rewrites known cids dan menyembunyikan sisanya, with the existing handler onerror masih menyembunyikan gambar rusak lainnya. - The berdedikasi cud stripping yang tinggal di sanitzer dikembalikan - menulis ulang milik pada waktu render, dimana isi pesan ada. - Daftar lampiran yang terlihat dalam ThreadDetailView dan MessageBrowser filter keluar bagian inline sehingga logo signature tertanam tidak lagi muncul sebagai lampiran dapat diunduh.
· EmailService
Layers inline image MIME part and permukaan Content- ID metadata
Render < img src = "cad:"... > dalam pesan UI dengan mengekspos bagian inline bahwa acuan tubuh HTML. - Lampiran Info memperoleh konsentId (tanpa sudut kurung) dan bendera inline. - bagian Multipart dan getAttasemen berbagi sebuah isstachment part predikat dan sebuah walker rekursif, sehingga bagian inline bersarang di dalam multipart / related ditangkap (dan indiknya tetap sejajar di dua metode). Sebelumnya rekursi menimpa daftar lampiran induk, yang juga menjatuhkan lampiran nyata dalam struktur bersarang. - Hastasemen sekarang didorong oleh bagian non-inline saja - logo tanda tangan tidak lebih lama nyalakan penjepit kertas pada setiap pesan. - New endpoint GET * * * * * * * * * * * * * * * * * * pada keduanya EmailController dan SharedMailboxMailController; menyelesaikan Cid melalui parsed Attachmentment Info, streams the part with Content- Disposition: inline dan Cache- Kontrol: private, max-age = 3600.
· KlusterServices
Tambahkan harga kotak surat @ kamocrm.com dan luar IMAP NodePort
- Surat Layanan Baru / dovebot-imap- eksternal (NodePort 30143 - > 143) jadi IMAP dapat dicapai dari luar cluster pada $NODE: 30143. - Harga benih @ kamocrm.com dalam mysql- di dalamnya sehingga bootstrap DB segar membuat kembali kotak surat; baris langsung sudah ada di MySQL.
· kamo-internal
Merancang baris ChatsList - tata letak elegan, tak ada gulungan horisontal, titik-titik online, lencana tak terbaca, penanda waktu relatif
· 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
Augment tidak dibaca disiarkan dengan muatan AKTIVITY untuk pencarian-daftar pemutakhiran
· kamo-internal
Langsung chats-list pemutakhiran melalui saluran NAS yang belum dibaca
· kamo-internal
Tab untuk anggota / percakapan dalam panel pusat interaksi
· kamo-internal
Daftar percakapan dengan gulungan tak terbatas, dibuat secara virtual melalui IntersectionObserver
· kamo-internal
Pilih Multi- di Daftar Anggota untuk memulai percakapan grup
· kamo-internal
Header obrolan dengan avatar stack, judul popover, dan anggota picker
· kamo-internal
Komposer dengan drag-drop, chip lampiran yang tertunda, masukan multi-line
· kamo-internal
Pesan gelembung dengan avatar, hover aksi, dan terlihat indikator
· kamo-internal
Render dan lightbox dalam baris
· kamo-internal
Tipe klien dan kait untuk sesi, penerimaan, lampiran
· kamo-internal
Rute proxy untuk find-or-create, anggota, lampiran, pencitraan proksi, bisu, mencabut
Ekstrak bersama * * * * * * * * * * * * pembantu ke app / lib / mediaServiceUr.ts Tambahkan rute proksi: find-or-create, anggota, penerimaan, lampiran (streaming), mutes, batalkan,
· 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
Tambahkan * * * * * * * * * * * * * ke MediaSesionMuteRepositori
· 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

Alam semestamu menunggu.
Mulai gratis dalam beberapa menit. Tambahkan produk kapanpun Anda siap — tidak ada migrasi, tidak ada login baru.
Gratis selamanya — tidak diperlukan kartu kredit