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 17, 2026
FixAIService

Use non-streaming chat completion for REST endpoint

Streaming over REST with blockLast() was producing empty responses because WebClient's SSE parsing doesn't work reliably with bodyToFlux(String.class). Added ha...

Kamo·7mo ago
FixAIService

Add detailed error logging to HuggingFaceAdapter for debugging 400 errors

Captures and logs the actual HF error response body instead of just status code.

Kamo·7mo ago
FixAIService

Switch HuggingFace to router.huggingface.co (api-inference is deprecated)

HF returns 410 on api-inference.huggingface.co with message to use router.huggingface.co instead.

Kamo·7mo ago
FixAIService

Use HuggingFace OpenAI-compatible endpoint with model in request body

HF's /v1/chat/completions endpoint takes the model ID in the JSON body, not in the URL path. Switched from per-model URL routing to standard

Kamo·7mo ago
Fixkamo-internal

Fetch all provider models on edit, pre-populate active selections

- Fetch provider details with all models (active+inactive) when clicking Edit - Pre-populate editing.models with IDs of active models - Show full model list wit...

kamo·7mo ago
FixAIService

Add model count to provider list, switch HF to router endpoint

- Include modelCount in provider list GET response - Switch Hugging Face default base URL to router.huggingface.co - Support both api-inference and router URL f...

Kamo·7mo ago
Fixkamo-internal

Add isError to AiChatMessage interface

kamo·7mo ago
FixAIService

Return full decrypted API key in provider responses

Users need to see and edit the full key, not a masked version.

Kamo·7mo ago
Fixkamo-internal

Stay in edit mode after creating provider, show test and model buttons

- After creating a new provider, stay in edit mode with the returned ID so user can immediately test connection and add models - Fix id checks from === undefi...

kamo·7mo ago
FixAIService

Normalize base URL to prevent /v1/v1 duplication

Strips trailing /v1 from base URL before appending /v1/chat/completions, so users can enter base URLs with or without the /v1 suffix.

Kamo·7mo ago
FixAIService

Restructure test connection to discover models first, handle rate limits gracefully

- Model discovery (lightweight GET) runs before chat test (POST) - Rate limit (429) errors show user-friendly warning instead of failing - Auth errors (401/403)...

Kamo·7mo ago
Fixkamo-internal

Move message to Junk folder when reporting as spam

After flagging a message as spam via spamApi, also call batchApi.move to move it to Junk (or back to INBOX when marking as not spam). Applies to both single and...

kamo·7mo ago
FixAIService

Use provider-specific test model instead of hardcoded gpt-4o-mini

Each provider type now uses an appropriate model for connection testing

Kamo·7mo ago
Fixkamo-internal

Switch AI chat from WebSocket to REST mode until WS proxy is available

Reports as 'connected' so the UI is usable. Messages sent via REST POST to **************** instead of WebSocket.

kamo·7mo ago
Fixkamo-internal

Remove duplicate minimize/maximize/close buttons from AI chat header

The tool window shell already provides these controls.

kamo·7mo ago
FixAIService

Serialize entity IDs as strings to prevent JavaScript precision loss

CockroachDB unique_rowid() generates INT8 values that exceed JavaScript's Number.MAX_SAFE_INTEGER, causing ID corruption in the frontend.

Kamo·7mo ago
March 16, 2026
Fixkamo-internal

Extend email content to full width of detail panel

Remove max-w-4xl constraint so the email body, attachments, and quick reply fill 100% of the available panel width.

kamo·7mo ago
Fixkamo-internal

Rename Messages to Emails in NavPri sidebar

kamo·7mo ago
FixAIService

Add OTK authentication support matching SecurityService pattern

- Add OTKPreAuthFilter to validate X-OTK header and resolve to *** session - Update SessionHelper to read from request attributes set by filter - Update all con...

Kamo·7mo ago
FixEmailService

Use @Value for RspamdConfig and make training non-blocking

RspamdConfig now uses @Value to match existing project patterns. Rspamd training failures no longer prevent the message from being moved.

Kamo·7mo ago
Fixkamo-internal

Ensure Junk and other system folders always appear in sidebar

Adds guaranteed system folders (INBOX, Sent, Drafts, Junk, Trash, Archive) to the folder tree even if they don't exist on the IMAP server yet.

kamo·7mo ago
Fixkamo-internal

Auto-refresh message list when draft is saved or email is sent

MessageTool dispatches email:folder-changed events after saving a draft (Drafts) or sending an email (Sent). MessageBrowser listens and refreshes if the affecte...

kamo·7mo ago
Fixkamo-internal

Match message tool color scheme to other tools and rename to New Email

Switch from dark theme to the light theme used by chat/calculator tools: light gray gradients, white inputs, var(--color-primary) accents. Rename tool from "New...

kamo·7mo ago
Fixkamo-internal

Restore full WYSIWYG toolbar options in message tool

Adds back headers, strike, background color, alignment, and image options. Toolbar wraps onto two lines when in compact (non-maximized) mode via flex-wrap.

kamo·7mo ago
Fixkamo-internal

Mark messages as read on IMAP server and refresh folder counts

Clicking a message now calls PUT **************** with seen:true on the backend, persisting the read state to IMAP. Sidebar folder unread counts refresh after m...

kamo·7mo ago
FixEmailService

Save copy to Sent folder after sending email

Transport.send() only sends via SMTP without saving to IMAP. Added saveToSent() to append the message to the Sent folder with the SEEN flag set. Applies to send...

Kamo·7mo ago
FixEmailService

Disable STARTTLS and auth for port 25 internal SMTP

Port 25 on internal Postfix doesn't support STARTTLS and allows relay from cluster IPs via mynetworks. Only enable auth and STARTTLS when using port 587 (submis...

Kamo·7mo ago
Fixkamo-internal

Move useState hook before early returns to fix React error #300

useState(syncing) was declared after conditional early returns, violating React's rules of hooks.

kamo·7mo ago
FixEmailService

Use SMTP port 25 instead of 587 for internal Postfix

Postfix only listens on port 25 inside the cluster. Port 587 (submission) is not enabled in the container.

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