Jurnal de schimbări
Ce e nou.
Fiecare îmbunătățire a platformei, pe măsură ce se livrează.
· EmailService
IMAP/SMTP-backed send, folder, and search for cloud stubs
Extragerea modelului de delegare IMAP/SMTP în RezumatImapBacked CloudProvider și au Zoho, IceWarp, Exchange, Google Workspace, și Microsoft 365 extinde Ea. Clasa de bază implementează MailSender, MailReader, FolderManager, și SearchProvider pe partea de sus a EmailImapService, EmailSmtpService, și SearchService - trimite / salvaLucrarea pentru orice furnizor de cloud cu acreditare SMTP. - Toate operaţiunile dosarului (creare / redenumire / ştergere / mutare / setFlags / ȘtergeMesajul) lucrează prin IMAP. - Căutați delegați la Serviciul de căutare existent. - Operaţiuni de citire şi CID: redare continuă să curgă prin Partajat EmailImapservice parser. Cămaşele rămase în fiecare furnizor de beton aplicabil), DomainManager, și MailboxProvisioner API (Microsoft Graph, Google Admin SDK, Zoho Admin API, EWS, IceWarp admin) care nu sunt conectate în această bază de cod încă. Fiecare coarda poartă acum un comentariu de tip TODO care numește API-ul care l-ar implementa.
· EmailService
MailReader cu suport IMAP pentru cotoare
Zoho, IceWarp, Exchange, Google Workspace, și Microsoft 365 toate expune IMAP, așa că sârmă fiecare cloud-furnizor mailReader metode prin EmailImapService în loc de a arunca o operaţiune nesusţinută Excepţie. Asta: - Deblochează citirea mesajelor pe acei furnizori atunci când numai acreditări IMAP sunt configurat (cea mai frecventă desfăşurare de astăzi). - Face ca noul conţinutId/inline ataşament să curgă uniform peste fiecare furnizor, deoarece EmailImapService este singurul parser. - Lets the inline-image end remit CID: References for any provider. metodele de furnizare a cloud-urilor rămase (trimitere, gestionare a dosarelor, furnizare, domeniu ops) sunt încă nesusţinut operaţiune Excepţie API-uri native furnizor și nu sunt în domeniul de aplicare aici. De asemenea, adaugă MailContext.to MailCredentials() astfel furnizorii (și furnizorii existenți KamoMailReader adaptor) împărtășesc o singură acreditare-conversie ajutor.
· kamo-internal
Render inline cid: imagini prin noul obiectiv EmailService
Atunci când un mesaj expune piese inline (fiecare care transportă un conținutId), e-mailul rescrie acum <img src="cid:... referințe la data de montare Acum şi proxy-ul. înainte Cache-Control pe astfel încât browser-ul cache imaginea adus. - EmailAtachment (atât în conversație Tipuri și copia locală în MesajBrowser) câștigă conținutCâmpuri Id și Inline. - Sanitized EmailRenderer acceptă inlineImageBaseUrl + inlineContentIds; on imgs rescrie Cids cunoscute și ascunde restul, cu existente Onerror Handler încă ascunde orice altă imagine ruptă. - Dezbracare CID dedicat care a trăit în sanitizer este reverificat Rescrierea trebuie făcută la timp, unde există contextul mesajului. - Lista de atașamente vizibile în ThreadDetailView și MessageBrowser filtrează piesele inline astfel încât logo-urile de semnătură încorporate nu mai apar ca atașamente descărcabile.
· EmailService
Se serveste inline imagini piese MIME și metadate de conținut-ID
Render <img src="cid:... [62] în mesajele UI prin expunerea părților liniare că referinţele corpului HTML. - AtașamentInfo câștigă conținutId (fără paranteze unghiulare) și pavilion linie. - parseMultipart and getAttachment share a single isAttachmentPart predicate și un Walker recursiv, astfel încât părțile linia cuiburi în interiorul multipart / legate sunt capturate (și indicii lor rămân aliniați la cele două metode). Anterior recursiunea a suprascris lista de atașamente părintelui, care De asemenea, a scăzut atașamente reale în structuri cuib. - hasAtachment is now drived by non-inline parts only lumina mai mult agrafa de hârtie pe fiecare mesaj. - Noul obiectiv GET ******************* pe ambele EmailController și SharedMailboxController; rezolvă CID prin intermediul parsed AttachmentInfo, fluxs the part with Content-Dispozition: inline și Cache-Control: privat, max-age=3600.
· KlusterServices
Adăugaţi cutia poştală de preţuri@kamocrm.com şi NodePort IMAP extern
- New Service mail/dovecot-imap-extern (NodePort 30143 -> 143) so IMAP poate fi contactat din afara grupului pe NODE 30143. - Seed pricement@kamocrm.com in mysql-init so a fresh DB bootstrap recrea cutia poștală; rândul viu este deja prezent în MySQL.
· kamo-internal
Reproiectare chat-uriList rânduri
· 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 necitit transmision cu activitate sarcină utilă pentru actualizări chat-list
· kamo-internal
Actualizări live ale listei de chat-uri prin intermediul canalului NATS necitit
· kamo-internal
Taburi pentru membri/chat-uri în panoul central de interacţiune
· kamo-internal
Listă de chat cu sul infinit, virtualizat prin IntersectionObserver
· kamo-internal
Multiselectează în lista membrilor pentru discuții în grup
· kamo-internal
Comment
· kamo-internal
Compozitor cu drag-drop, în așteptare chips-uri de atașament, intrare multi-line
· kamo-internal
Bubble mesaj cu avatare, acțiuni hover, și indicatorul văzut
· kamo-internal
Reglarea și caseta de lumină a atașamentului
· kamo-internal
Tipuri de clienți și cârlige pentru sesiuni, chitanțe, atașamente
· 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
Adaugă ***************** la 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

Universul tău te așteaptă.
Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.
Gratuit pentru totdeauna — nu este necesar un card de credit