Trigger rebuild to pick up kamo-shared-library 094e80d (MediaObjTransit @IdClass)
Augment unread broadcast with ACTIVITY payload for chats-list updates
Paged chat list with previews, members, unread counts
that returns ChatListRowDto rows including last message preview, member summaries, per-session unread counts, and ownLastViewedAt.
Imaging proxy with HTTP Range support and per-member download tracking
Raise client read timeout to 120s for long messages
LibreTranslate runs CPU-only argos models — a paragraph-length chat message takes 20-30s to translate, and longer ones can push past 60s. The 8-second read time...
Cache-only bulk translate, FE handles fills
Bulk message-fetch endpoints now return only translations that are already cached and tag missing rows with needsTranslation:true. The chat UIs (kamo-internal C...
On-demand translation for chat and support messages
Captures the source language for every chat / support message and adds an optional ?lang=XX param on the message-fetch endpoints plus a per-message POST /transl...
Scope concurrency to build jobs, not Kubernetes deploys
Workflow-level concurrency serialized the whole pipeline (including kubectl rollouts). Move the group to the build job only so deploy jobs from different runs c...
Track public support chat by session GUID in Redis
Marketing visitors use /ws/public-chat-native without memberId; tickets still reference the org placeholder member as requestor. Increment PRESENCE_PUBLIC keys ...
Broadcast pending count + unread on agent read & visitor send
- **************** now delegates to **************** so the count reflects sessions with unread visitor messages and decrements when the agent calls markA...
Rebuild to pull latest kamo-shared-library
Picks up the new **************** queries and the SUPPORT_TICKET branch in ****************
Store geo on ticket at creation, drop GeoLite reads
**************** now captures the visitor's geo once (via GeoLookupService) and persists ip/country/city/subdivision on the SupportTicket itself. SupportTicket...
Bulk-load visitors and skip GeoLite lookup in list
The /api/support/tickets list endpoint was running, per page of 20 rows: - 20 **************** calls (N+1) - 20 calls into GeoLookupService.lookup, each of ...
Add /ws/public-chat-native plain WebSocket endpoint alongside SockJS
Registers a second STOMP endpoint without SockJS at /ws/public-chat-native so that the frontend can connect with a native WebSocket (brokerURL) without needing ...
Broadcast unread counts to agent on visitor message
After a visitor sends a support message, push the latest unread-counts payload to **************** so the agent's ticket-list badge and navtop counter update in...
Expand JPA repository scan to include commerce package
The new kamo-shared-library brings in **************** which requires **************** (in com.kamo.z.shared.commerce). MediaService only scanned donotmodify.da...
Restore HashMap import in ChatWebSocketController
The previous refactor removed the HashMap import but the handleTyping method still constructs a HashMap for the typing event payload, causing the Forgejo build ...
Proactively create NATS consumer at session creation to prevent message loss
Previously the NATS JetStream push consumer was only created when a STOMP client sent /app/chat/subscribe. With DeliverPolicy.New, any messages published before...
Relay theme provision from core NATS
Match SecurityService core publish: subscribe with Dispatcher on security.theme.provision.* instead of JetStream (stream only covers chat).
Rebuild for kamo-shared-library update (remove OrganizationType, add isTopLevel)
Rebuild for kamo-shared-library update (remove OrganizationType, add isTopLevel)
Use PublicChatVisitor displayName for requestorName on visitor tickets
Visitor-initiated tickets hardcode requestor to the org system member, so the DTO was surfacing the org owner's name in the Requestor column. Fall back to the P...
Expose city and subdivision in visitor geo lookup
- Extend GeoResult record with city and subdivision fields - Switch SupportTicketService.toDTO() to use GeoLookupService (IP-level lookup) instead of country-...
Build error in GeoLookupService and add NATS publish for agent messages
- Fix Optional vs List type mismatch in **************** - Inject NatsMessageService into MediaController - Publish to chat.session.{guid} after agent creates a...
Real-time chat delivery, message sides, notifications, and name sync
- Keep NATS subscription alive on client unsubscribe to avoid breaking agent real-time delivery - Tag visitor messages with messageType=VISITOR_MESSAGE in getMe...
Show visitor flag and location in support ticket header
- Inject PublicChatVisitorRepository and GeoLiteLocationRepository into SupportTicketService - Populate visitorIpAddress, visitorCountryCode, visitorCountryName...
Tag visitor messages as VISITOR_MESSAGE type, add senderName to GET messages
- PublicChatService: set messageType=VISITOR_MESSAGE so frontend can distinguish visitor echoes from agent responses on the STOMP topic - MediaController.getM...
Fix end-to-end public chat real-time via STOMP/NATS
- Remove internalAuth requirement from PublicChatWebSocketInterceptor so visitors can connect directly using only their sessionToken - Include visitor display...
Three support/chat issues — NATS relay, auto-popup, topic fallback
1. Switch SupportNotificationService and SupportStompRelayController from JetStream to core NATS — the CHAT_MESSAGES stream only covers chat.> so JetStrea...
Write contact form description as chat message on public ticket creation
The description was only stored on the ticket entity and never appeared in the chat window. Added writeTextMessage() helper and call it after the system event s...
Live pending support ticket count via NATS — notify org owner on new tickets, add pending-count REST endpoint
Rebuild for kamo-shared-library update (CREATE_CHILD_ORG right + apply-to flags)
Pulls the new RoleRightType.CREATE_CHILD_ORG (id 131), the three apply-to flags on ChildOrgSecurityModel, the two 13-arg service overloads, and the AppliedModel...
Rebuild for kamo-shared-library update (appConfig upsert-only fix)
Pulls the hardened **************** that no longer deletes appConfig rows whose service types are absent from the caller's payload — prevents silent data loss w...
Rebuild for kamo-shared-library update (effective-feature resolver)
Picks up the new AppliedModelEnforcementService methods (computeAvailabilitiesMap, isAppEffectivelyEnabled, getEffectivelyEnabledAppTypes, computeEffectiveFeatu...
Rebuild for kamo-shared-library update (applied-model enforcement + appConfigs + isPrivate)
Triggers a rebuild so this service pulls the updated kamo-shared-library containing AppliedModelEnforcementService, ChildOrgSecurityModelAppConfig entity, Servi...
Rebuild for kamo-shared-library update (runtime force rules + DEFAULT fallback in MemberRightsAppliedService)
Triggers a rebuild so this service picks up the updated **************** that applies template force rules and DEFAULT-template fallbacks on top of the existing...
Rebuild for kamo-shared-library update (master model, default role templates, force-rule resolver)
Triggers a rebuild so this service pulls the new kamo-shared-library revision containing Organization.branchTypeID, Organization.masterModelID, ****************...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
