KamoCRM

Live Change Log

Every feature, fix and improvement, posted as it ships. Nothing is held back for a launch.

17,374
Total Changes
5,891
Features
5,258
Fixes
30
Projects
Filter by project
All Projects17,374AIService242APIService174BillingService157ConversionService110DaemonService137DocsService223ESigService91EmailService568InitializerService329KBService151KlusterServices738MCPGatewayService235MediaService592RAGService79SecurityService1,822TranslateService62VOIPService248VectorService11kamo-apps26kamo-asterisk-support27kamo-capcha17kamo-capcha-widget4kamo-internal8,321kamo-login335kamo-marketing641kamo-nowww20kamo-register213kamo-shared-library1,631kamo-signer-monorepo56kamolos114
Filter by type
All TypesBuild16CI523Chore773Docs3,252Feature5,891Fix5,258Other993Performance165Refactor278Revert23Style42Test159Upgrade1
March 18, 2026
Fixkamo-internal

Prevent live preview panel from overflowing right edge

Change builder and preview panels from fixed flex-basis (55%/45%) to shrinkable flex so the gap between them is properly accounted for.

kamo·7mo ago
Fixkamo-internal

Use richTextExtension.configure() instead of RichTextExtension class

RichTextExtension class is not exported from the published @lexkit/editor package. Use the exported richTextExtension instance with .configure().

kamo·7mo ago
Fixkamo-internal

Remove duplicate ContentEditable — use RichTextExtension's plugin

The richTextExtension already renders its own ContentEditable via RichTextPlugin. Having a second manual ContentEditable created two editable areas. Remove the ...

kamo·7mo ago
Fixkamo-internal

Overhaul KB editor and article page layouts

Fix editor component: - Wrap in flex column container so toolbar stays fixed and content area scrolls independently - Use position:relative on content wrapper...

kamo·7mo ago
FixRAGService

Add search request/response logging to RagSearchController

Log orgId, query, result count, and full stack traces on error to diagnose 500 responses seen from AIService.

Kamo·7mo ago
FixAIService

Add response body and request logging to RagClient for debugging

Log the RAG search request URL, orgId, query, and response body on error to diagnose 500 responses from RAGService.

Kamo·7mo ago
FixKlusterServices

Enable auto-truncate on embedding model to prevent 413 errors

Add --auto-truncate flag so inputs exceeding the 256 token limit are silently truncated instead of rejected with a validation error.

Kamo·7mo ago
FixRAGService

Reduce chunk size to fit all-MiniLM-L6-v2 token limit (256 max)

Chunk target was 2000 chars (~512 tokens) but the embedding model only accepts 256 tokens, causing 413 validation errors. Reduce to 800 chars (~200 tokens) with...

Kamo·7mo ago
FixKlusterServices

Load embedding model from local hostPath to prevent HuggingFace download failures

The embedding-model pod was in CrashLoopBackOff because it couldn't download the model from HuggingFace on startup (network/DNS issue). Mount the model from a h...

Kamo·7mo ago
FixRAGService

Use integer match filter for Qdrant searches instead of matchKeyword

The orgId and articleId payload fields are stored as integers via value(Long), but search and delete filters used matchKeyword() which only matches string/keywo...

Kamo·7mo ago
FixRAGService

Index KB articles for RAG on creation, not just when published

Previously the RAG pipeline only indexed PUBLISHED articles, requiring the full review/approval cycle before the AI chat could reference them. Now indexes all a...

Kamo·7mo ago
Fixkamo-internal

Update reviews page to match enriched backend response fields

Use uid as key, articleGuid for navigation, articleTitle for display, and dateSubmitted for date. Matches the new backend response format that includes article ...

kamo·7mo ago
FixKBService

Return article guid/title in pending reviews response

The KbArticleReview entity has @JsonIgnore on article, so the pending reviews endpoint was returning reviews without article details (guid, title). Now uses eag...

Kamo·7mo ago
Fixkamo-internal

Surface actual backend error messages in article create/edit

Read errData.error (matching backend JSON format) instead of errData.message. Fix proxy to forward backend JSON errors directly instead of double-wrapping them ...

kamo·7mo ago
FixKBService

Add error handling to createArticle endpoint

Wrap createArticle call in try-catch to return proper JSON error responses instead of Spring Boot's default HTML error page.

Kamo·7mo ago
Fixkamo-internal

Add missing richTextExtension to enable editor text input

The RichTextPlugin from richTextExtension is required for the Lexical is silently ignored.

kamo·7mo ago
Fixkamo-internal

Add shared KB layout with persistent tabs and fix reviews page error

Create app/kb/layout.tsx with KbNavBar tabs shared across Articles, Resources, and Pending Reviews pages. Remove duplicate outer shells and fixed positioning fr...

kamo·7mo ago
March 17, 2026
Fixkamo-internal

Update navtop email badge when message is marked as read

Dispatch email:folder-changed event after marking a message as read, so MailButton re-fetches the unread count immediately.

kamo·7mo ago
Fixkamo-internal

Revert email WebSocket URL to same-origin Next.js rewrite path

Use /email-ws on same origin, proxied by Next.js rewrites to EmailService via k8s internal DNS. SockJS HTTP fallbacks (xhr-streaming, xhr-polling) work through ...

kamo·7mo ago
FixEmailService

Remove hardcoded WebSocket headers from email middleware

Traefik v3 handles WebSocket Upgrade/Connection headers natively. Hardcoding them broke SockJS fallback transports (xhr-streaming, xhr-polling). Now matches med...

Kamo·7mo ago
Fixkamo-internal

Connect email WebSocket directly to email.{domain} subdomain

Next.js rewrites cannot upgrade HTTP connections to WebSocket, causing the STOMP connection to silently fail after 3 retries. Now uses the same direct subdomain...

kamo·7mo ago
FixKlusterServices

Auto-cert service not renewing expired SSL certificates

The auto-cert service was importing expired certs from shared storage and skipping Certificate CR creation, so cert-manager couldn't manage renewals. Also fixed...

Kamo·7mo ago
Fixkamo-internal

Add 30s polling fallback for real-time email updates when WebSocket is unavailable

The WebSocket connection silently fails after 3 retries, leaving the UI permanently stale. This adds a 30-second polling interval as a reliable fallback across ...

kamo·7mo ago
Fixkamo-internal

Align branch-setup and automation tabs with billing tab design

Standardize layout patterns across settings tabs: consistent padding, shared EmptyState component, matching table structure and header styles.

kamo·7mo ago
Fixkamo-internal

Use shared EmailWebSocketContext for real-time unread badge updates

MailButton was creating a duplicate WebSocket connection via useEmailWebSocket() and optimistically incrementing the unread count. Now uses the shared useEmailW...

kamo·7mo ago
Fixkamo-internal

Route media feed WebSocket through media.* subdomain with retry limit

useMediaFeedWebSocket was connecting to same-origin /ws (404) instead of media.kamocrm.com. Fix URL construction to match useChatWebSocket pattern and add MAX_R...

kamo·7mo ago
Fixkamo-internal

Correct KB article field names to match backend entity

Frontend was using wrong field names (dateModified, content, authorName) instead of the actual backend fields (dateUpdated, contentJson, authorMemberId). Also r...

kamo·7mo ago
FixSecurityService

COALESCE type mismatch on security_level — column is varchar not int

The SQL query for user details during session creation was failing with 'incompatible COALESCE expressions: expected 0 to be of type varchar' because **********...

Kamo·7mo ago
Fixkamo-internal

Remove debug logging, add email WS retry limit, proxy email WS through k8s DNS

Remove verbose console.log statements from useUserInfo, NavTop, NavPri, MemberListProvider, SessionManager, sessionMonitor, avatarUtils, and useChatWebSocket th...

kamo·7mo ago
FixKBService

Correct hasRight to match flat rights array format and honor god mode

Session rights are stored as ["VIEW_DASHBOARD", ...] not [{name, setting}]. Also bypass right checks when GD (god mode) is true.

Kamo·7mo ago
FixRAGService

Rename qdrant config properties to avoid K8s env var collision

Kubernetes auto-creates QDRANT_PORT env var from the qdrant Service, which overrides the Spring property with 'tcp://ip:port' instead of an integer. Renamed to ...

Kamo·7mo ago
FixRAGService

Make NATS consumer startup resilient with retry logic

Consumer now retries subscription in a background thread with backoff if KB_EVENTS stream doesn't exist yet. Prevents crash loop when KBService hasn't published...

Kamo·7mo ago
FixKBService

Accept parentGuid from frontend in article creation

Frontend sends parentGuid (string) not parentId (numeric). Resolve GUID to ID server-side via lookup.

Kamo·7mo ago
Fixkamo-shared-library

Add @JsonIgnore to KB entity lazy collections and back-references

Prevents LazyInitializationException and circular serialization when returning KB entities via REST endpoints.

Kamo·7mo ago
Fixkamo-internal

Add KNOWLEDGE_BASE to AppType and Organization.isKnowledgeBase getter

Without these, the KB sidebar entry and home card were hidden since organization.isKnowledgeBase was undefined.

kamo·7mo ago
Fixkamo-internal

Wire up sidebar session history, folders, search, and remove duplicate header icon

- Fix wrapped API response parsing for sessions and folders - Fix folder create to use parentFolderId field name - Fix session/folder updates to use PUT (backen...

kamo·7mo ago

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.

Start Free ForeverView Pricing