Skip to content

v5.49.0: Realtime AI hardening, cache correctness, and integrations overhaul

  • 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 dimensions forwarded across all embedding providers
  • Conversations composer toggles: mj-conversation-chat-area exposes host-level allowPlanMode, allowRealtime, showEmptyFill, and showLoadingState inputs 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; new fieldStrategy: '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 (task mode), reducing startup time; measured 14× CPU reduction on mj 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 to true; no existing FK indexes are renamed, and generated DDL is idempotent
  • Realtime transcript continuation: Mid-sentence pauses (VAD speech_started on 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 OpenAIProtocolRealtimeClient brain and OpenAIProtocolWebSocketRealtimeClient transport; 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.cancellationToken is 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.timeoutMS and AIPromptTimeoutError; 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 RunViews call, simple record list uses O(1) EntityByName lookup
  • SQL Server large-schema CodeGen speed: spUpdateExistingEntityFieldsFromSchema materializes catalog-introspection views into temp tables before the join; measured 140s → 1.1s on 600-table schemas
  • PostgreSQL NUMERIC/DECIMAL/BIGINT parsing: node-postgres string defaults now parsed to JS numbers; fixes cost.toFixed is not a function console 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
  • TestingFramework bootstrap split: Client integration bootstrap is now server-free; ./registry and ./checks/* subpath exports let client dispatchers avoid loading server entity subclasses
  • ClassFactory resolution hardening: TryCreateInstance/TryCreateInstanceAsync return explicit ClassResolutionResult; @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 EXISTS guards; safe to re-run on reinstall or teardown scenarios
  • Embedding dimension control expanded: params.dimensions forwarded across Cohere, Gemini, Mistral, Azure, and Bedrock drivers; Azure no longer hardcodes 1536 on every request
  • Headless GraphQL AI agent execution: GraphQLAIClient.RunAIAgent detects PushStatusUpdates availability and falls back to synchronous resolver mode for Node/MCP consumers
  • Cache correctness (B38–B44, H1–H5): schemaHash carry-forward on in-place save/delete; hasNarrowingSegment deny-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; ApplyDifferentialUpdate refuses to merge into subset/narrowing/aggregate slots
  • RunView TotalRowCount parity: Local cache now carries the server-authoritative total rather than the slice size; paginated and count_only reads agree
  • RunView/RunViews pre/post hooks on cache path: PreRunView (scoping) and PostRunView (masking/audit) hooks now execute on the RunViewsWithCacheCheck path that was previously skipping both
  • Browser freeze on integer PK entities: CompositeKey.EqualsKey now 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 /graphql as an alias of / when running on the default root path
  • Communication HTML body fallback: ProcessedMessageServer.Process preserved the derived HTML body instead of overwriting it with an empty HTMLBody || ''
  • 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.ValidateAsync rejects malformed input at save; unified DEFAULT_DOMINANCE_THRESHOLD (was 0.85 vs 0.6 split)
  • PostgreSQL Memory Manager query: since parameter now filtered through sqlDate in the PG dialect of GetConversationsForMemoryManager, 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 / FindCandidateAgentsAction renamed from their copy-pasted FindBest* names; both now appear in the ServerBootstrap manifest and are tree-shake-protected
  • CodeGen soft PK honored on both dialects: spUpdateExistingEntityFieldsFromSchema now preserves IsSoftPrimaryKey on PostgreSQL, matching the SQL Server behavior
  • CSS nesting in ngc-built packages: BEM &__elem/&--modifier rules 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.RenderTemplateSimple accepts { autoescape: false } for plain-text contexts; & no longer appears in email subject lines