Accept parentGuid from frontend in article creation
Frontend sends parentGuid (string) not parentId (numeric). Resolve GUID to ID server-side via lookup.
Add @JsonIgnore to KB entity lazy collections and back-references
Prevents LazyInitializationException and circular serialization when returning KB entities via REST endpoints.
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.
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...
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...
Add detailed error logging to HuggingFaceAdapter for debugging 400 errors
Captures and logs the actual HF error response body instead of just status code.
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.
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
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...
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...
Return full decrypted API key in provider responses
Users need to see and edit the full key, not a masked version.
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...
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.
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)...
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...
Use provider-specific test model instead of hardcoded gpt-4o-mini
Each provider type now uses an appropriate model for connection testing
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.
Remove duplicate minimize/maximize/close buttons from AI chat header
The tool window shell already provides these controls.
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.
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.
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...
Align ProviderSetupTab field names with backend entity (priorityOrder, maxRateLimit, isActive)
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.
Remove searchValue from ValueSelect queryKey to avoid unnecessary refetches
Je, unaona nini kuhusu usafiri?
Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.