v5.49.0: Realtime AI hardening, cache correctness, and integrations overhaul
New Features
Section titled “New Features”- Conversation compaction: AI agents now generate durable cross-turn conversation summaries (Sequence + SummaryPromptRunID), with new conversation-history retrieval tools (
getMessageBySequence,getMessagesByRange,searchConversation,summarizeRange) and wired chat-edit affordances - New AI models: Gemini 3.6 Flash, Gemini 3.5 Flash-Lite, GPT Realtime 2.1, and GPT Realtime 2.1-mini added to the model catalog
- Communication DryRun mode: All five shipping providers (SendGrid, Gmail, Twilio, MS Graph, Expo Push) now support
Message.DryRun = true— runs the full preflight + payload construction without contacting the external service - Realtime OpenAI GA features:
reasoningEffort,parallelToolCalls, and MCP tool declarations now thread end-to-end on both server-bridged and client-direct realtime topologies; xAI Grok driver now subclasses the OpenAI driver instead of maintaining a ~600-line protocol clone - Scoped search and vector routing: Per-record Pinecone namespace routing, scope-level provider config templating via Nunjucks, and optional embedding
dimensionsforwarded across all embedding providers - Conversations composer toggles:
mj-conversation-chat-areaexposes host-levelallowPlanMode,allowRealtime,showEmptyFill, andshowLoadingStateinputs for embedding products - Instance config shell chrome: White-labeled deployments can hide notifications, app switcher, app nav, update toasts, and floating chat overlay through metadata rather than CSS overrides
- Vector sync improvements: New
vectorIdStrategy: 'recordId'option uses source record PKs as vector IDs for portability; newfieldStrategy: 'explicit'emits exactly the configured metadata fields; type-aware metadata storage for numeric and datetime columns - CodeGen IS-A relationship validation: Declared IS-A (Table-Per-Type) relationships are now validated for certain defects at CodeGen time instead of failing confusingly at runtime
- Startup mode (
full|task): CLI/script processes skip engine pre-warm by default (taskmode), reducing startup time; measured 14× CPU reduction onmj sync validate - Integrations framework overhaul: Semantic overlay with per-attribute external-wins precedence, maintenance sync locking, monotonic live progress, watermark backfill for new columns, and RSU step-index/progress fields
- FK auto-indexing on by default:
autoIndexForeignKeys()now defaults totrue; no existing FK indexes are renamed, and generated DDL is idempotent
Improvements
Section titled “Improvements”- Realtime transcript continuation: Mid-sentence pauses (VAD
speech_startedon breaths) no longer split one utterance into multiple turns; a normalization-aware continuation detector collapses streaming ASR re-emissions into one in-place-updating turn - Realtime driver family consolidation: Shared
OpenAIProtocolRealtimeClientbrain andOpenAIProtocolWebSocketRealtimeClienttransport; HuggingFace client/server driver now subclasses the OpenAI implementation; eliminates ~940 lines of duplicated protocol code across the family - Cancellation token support across all LLM drivers:
ChatParams.cancellationTokenis now forwarded to the underlying SDK on all 19 providers (streaming and non-streaming); aborted requests fail rather than silently leaving sockets open - Prompt execution timeout: New
AIPromptParams.timeoutMSandAIPromptTimeoutError; timeout flows into the existing retry/failover machinery rather than hanging indefinitely - Per-record Pinecone namespace routing: Ingestion groups batches by namespace derived from source-record field values; query-time namespace extracted from rendered
ExternalIndexConfig - Explorer performance: Omnibar jump-to-record debounced (150ms), list-detail “Add from views” batched into a single
RunViewscall, simple record list uses O(1)EntityByNamelookup - SQL Server large-schema CodeGen speed:
spUpdateExistingEntityFieldsFromSchemamaterializes catalog-introspection views into temp tables before the join; measured 140s → 1.1s on 600-table schemas - PostgreSQL NUMERIC/DECIMAL/BIGINT parsing:
node-postgresstring defaults now parsed to JS numbers; fixescost.toFixed is not a functionconsole floods and token-total string-concatenation bugs - FK auto-index generation unified across dialects: Primary-key and virtual-field exclusions now shared between SQL Server and PostgreSQL CodeGen providers; template method replaces duplicated logic
TestingFrameworkbootstrap split: Client integration bootstrap is now server-free;./registryand./checks/*subpath exports let client dispatchers avoid loading server entity subclasses- ClassFactory resolution hardening:
TryCreateInstance/TryCreateInstanceAsyncreturn explicitClassResolutionResult;@RequiresSubclass()decorator prevents hollow base-class fallback; per-base warning cap stops hot-path flood - CodeGen advanced-generation circuit breaker: 3 consecutive credential failures trip a per-run circuit; field-grouping O(N) → O(1) lookup by normalized EntityID
- CodeGen app-role INSERT idempotent: Application and ApplicationRole seeds now use
IF NOT EXISTSguards; safe to re-run on reinstall or teardown scenarios - Embedding dimension control expanded:
params.dimensionsforwarded across Cohere, Gemini, Mistral, Azure, and Bedrock drivers; Azure no longer hardcodes 1536 on every request - Headless GraphQL AI agent execution:
GraphQLAIClient.RunAIAgentdetectsPushStatusUpdatesavailability and falls back to synchronous resolver mode for Node/MCP consumers
Bug Fixes
Section titled “Bug Fixes”- Cache correctness (B38–B44, H1–H5):
schemaHashcarry-forward on in-place save/delete;hasNarrowingSegmentdeny-by-default allowlist prevents view WhereClause and per-user RLS predicate from being served to wrong users after in-place upsert; aggregates invalidated on mutation;ApplyDifferentialUpdaterefuses to merge into subset/narrowing/aggregate slots - RunView
TotalRowCountparity: Local cache now carries the server-authoritative total rather than the slice size; paginated andcount_onlyreads agree - RunView/RunViews pre/post hooks on cache path:
PreRunView(scoping) andPostRunView(masking/audit) hooks now execute on theRunViewsWithCacheCheckpath that was previously skipping both - Browser freeze on integer PK entities:
CompositeKey.EqualsKeynow string-coerces scalar values before comparison; integer-PK record views no longer loop indefinitely on navigation - Realtime transcript duplicate rows: Persistence serialized per role via promise chain; concurrent frames for the same role can no longer both take the create branch;
Stop()drains queued writes under a 5s timeout before building the result - GraphQL WebSocket subscriptions on default root path: WS upgrade handler now accepts
/graphqlas an alias of/when running on the default root path - Communication HTML body fallback:
ProcessedMessageServer.Processpreserved the derived HTML body instead of overwriting it with an emptyHTMLBody || '' - LLM streaming truncation silent success: Errors mid-stream now surface as failures instead of being swallowed and reported as completed responses
- Predictive Studio leakage guard: Bracketed deny-list input no longer silently disarms the guard;
MJMLTrainingPipelineEntityServer.ValidateAsyncrejects malformed input at save; unifiedDEFAULT_DOMINANCE_THRESHOLD(was 0.85 vs 0.6 split) - PostgreSQL Memory Manager query:
sinceparameter now filtered throughsqlDatein the PG dialect ofGetConversationsForMemoryManager, matching the SQL Server fix from 2026-07-18 - Query Builder pagination: Ad-hoc query results no longer capped at 100 rows; reports true total row count; data grid no longer collapses value-identical rows from queries without an ID column
- CoreActions duplicate class names:
FindCandidateActionsAction/FindCandidateAgentsActionrenamed from their copy-pastedFindBest*names; both now appear in the ServerBootstrap manifest and are tree-shake-protected - CodeGen soft PK honored on both dialects:
spUpdateExistingEntityFieldsFromSchemanow preservesIsSoftPrimaryKeyon PostgreSQL, matching the SQL Server behavior - CSS nesting in
ngc-built packages: BEM&__elem/&--modifierrules in realtime/conversations components that were silently dropped (no Sass step) are now real CSS; active-tab indicators and played-progress colors now render - Template autoescape control:
TemplateEngineServer.RenderTemplateSimpleaccepts{ autoescape: false }for plain-text contexts;&no longer appears in email subject lines