v5.42.0

New Features

  • LiveKit Room UX stack: New packages @memberjunction/livekit-room-core, @memberjunction/ng-livekit-room, @memberjunction/livekit-room-server, and @memberjunction/ng-mj-livekit-room deliver a full-featured, multi-party video/audio room experience. Includes gallery/speaker/split-view layouts, pre-join lobby, agent state visualizer, collaborative whiteboard (synced via data channel), recording, E2EE, noise filtering, and an Explorer tab registration. The "Realtime" app is renamed to Meet with default agent resolution and multi-party human invite links.
  • Native LiveKit bridge with two-way audio: @memberjunction/ai-bridge-livekit-native wraps @livekit/rtc-node so a bridged AI agent can publish its voice and subscribe to per-participant audio in a live room. The BridgeNativeSdkRegistry auto-binds the correct native factory at session start; all bridge providers (Zoom, Teams, Google Meet, Webex, Slack, Discord, Twilio, Vonage, RingCentral, LiveKit) gain native two-way SDK bindings behind injectable/testable factory seams.
  • Goal-driven browser control: A realtime agent (or human) can now set a high-level goal (e.g., "log in and open the latest invoice") and MJ computer-use plans and executes it. New RunComputerUseGoal API on remote browser sessions, async start+poll execution to avoid transport timeouts, collaborative pause-on-human-takeover, model-blind credential injection via {{label}} token substitution, and an ExecuteRemoteBrowserGoal GraphQL mutation wired in the Conversations widget.
  • Record Set Processing & Remote Operations: New @memberjunction/record-set-processor delivers a hardened iterate-and-process engine with batching, concurrency control, rate limiting, circuit breaker, and checkpoint/resume. Ships Array/View/List/Filter/Keyset sources; Action/Agent/Infer processors; and a uniform write-back mechanism. The accompanying BaseRemotableOperation<TInput,TOutput> primitive (in @memberjunction/core) provides a typed, provider-routed capability both browser and server invoke through one call site — the peer of BaseEntity (CRUD) and RunView (set reads).
  • Integration v2 framework + connector expansion: The integration framework gained deterministic content-hash identity for keyless rows, door-before-child dependency ordering, adaptive rate-limit hooks, and improved schema sizing (json/text/array fields now map to NVARCHAR(MAX) instead of being truncated at 255 chars). New connectors in this release: GrowthZone (OAuth2, 38 objects), OpenWater (25 objects), ORCID (12 objects), PropFuel, Path LMS (GraphQL Reporting API), SharePoint (Microsoft Graph delta-token sync), Microsoft Dynamics 365 (Dataverse OData), Novi AMS (32 objects, read+write), netFORUM Enterprise (xWeb SOAP, 34 objects), MemberSuite (REST v2, 196 objects), and Rhythm Software (377 objects, 14,515 fields, full credential-free e2e verified).
  • Standard Search Entity Documents: @memberjunction/ai-vector-sync ships a standard set of Active Search-type Entity Documents for MJ: Entities, MJ: AI Agents, MJ: Actions, MJ: AI Prompts, and MJ: AI Models — all on the in-process Simple Vector Service Provider (no API key required). Semantic/hybrid SearchEntity works out of the box for these core catalogs after running mj sync push.
  • MJ Claude Pack installer: New mj install:claude and mj update:claude CLI commands install/refresh a curated bundle of CLAUDE.md guidance, slash commands, and skills for Claude Code users. mj doctor gains a claude-pack check group with 5 health checks.
  • Conversation folders: Conversations can now be grouped into collapsible, nestable folders backed by MJ: Projects, with drag-and-drop, multi-select, bulk move, a staging shelf, and a navigator pane in the Collections view.
  • Clipboard paste/copy in remote browser: A human controlling the remote browser can now paste credentials in (via a new 'text' RemoteBrowserHumanInput kind) and copy text out (via GetSelectionText and a new GetRemoteBrowserSelection GraphQL query).

Improvements

  • PostgreSQL parity: Multiple correctness fixes for PostgreSQL production deployments — dialect-correct boolean literals and entity search predicates, T-SQL date function translation (GETDATE(), DATEADD) to PG equivalents in runtime SQL, mj app install/upgrade/remove now work on PostgreSQL, CodeGen type corrections for PG, mj migrate convert --bake-codegen for codegen-free PG deploys, and scheduling engine heartbeat lease extension ported to PG.
  • Engine server composition refactor: ActionEngineServer, EntityActionEngineServer, CommunicationEngine, and TemplateEngineServer now compose their metadata-cache base (following the AIEngine/AIEngineBase pattern) instead of extending it, eliminating duplicate metadata caches and the "Duplicate RunView Detected" telemetry warnings on server startup.
  • Field active-status enforcement relocated: Deprecated-field warnings and disabled-field exceptions are now enforced at BaseEntity.Get()/Set()/SetMany() (the genuine code-access boundary) rather than on the low-level EntityField.Value accessor, eliminating false deprecation warnings on entities that merely contain a deprecated column.
  • Computer Use model selection: The goal loop defaults to stored Computer Use - Controller/Computer Use - Judge metadata prompts with failover across Gemini/Claude/GPT. The prompt text is single-sourced — the behavioral core lives once in metadata templates, and a drift-guard test keeps both layers in sync.
  • AI prompt model/vendor resolution: Full ModelSelectionResult is now threaded through the execution pipeline instead of being re-derived at the ExecutePromptexecuteSinglePrompt boundary, fixing driver resolution bugs. ParallelExecutionCoordinator now extends AIPromptRunner and delegates each task's model call to the inherited executeModel, unifying credential resolution, driver/vendor selection, streaming, and media handling into one place.
  • Memory Manager cache-served reads: All Memory Manager maintenance scans (consolidation, orphan-prune, TTL-expiry, decay, hardening) now filter the AIEngine in-memory arrays instead of re-querying the database on every 15-minute cycle, eliminating redundant RunView calls.
  • Metadata sync deletion audit batching: mj sync push deletion audit now issues one RunView per (target entity, referencing FK field) using chunked IN (...) filters instead of one serial query per record × field, eliminating apparent hangs on large pushes.
  • Explorer navigation accessibility: New mjClickable directive retrofits existing clickable <div>/<span> elements as accessible, keyboard-operable controls. Home dashboard app tiles, sidebar items, header nav items, and the app-switcher now carry proper ARIA roles, labels, and keyboard activation — improving both assistive tech support and DOM/computer-use agent discoverability.
  • Pluggable MJ CLI with AI-friendly output: New @memberjunction/cli-core package (BaseCLIPlugin + runtime host), JSON formatting for machine-readable output, two-tier progressive disclosure, per-command runtime/timeout hints, and a fix for sync push/pull hanging on DB-pool teardown.
  • Installer pipeline improvements: Checkpoint resume no longer corrupts .env on restart; PostgreSQL PG_* env vars are propagated to MJAPI .env; non-semver tags are handled gracefully in npm install; mj install skips SQL Server sysadmin-only grants when sa is the configured user; migration timeout is now configurable.

Bug Fixes

  • Agent run steps stuck at Status='Running': Fixed a race where a fast step's fire-and-forget INSERT reload reverted the in-memory finalize mutation, causing CompletedAt=NULL on quick Actions and prompt runs. The save queue now applies finalize/TargetLogID mutations inside the post-INSERT continuation.
  • @ResultTable save column mis-routing: Fixed a SQL Server save bug where newly-added columns (sequenced after existing ones) caused values to land in the wrong capture column, producing truncation or type-conversion errors.
  • Remote browser agent session ID race: The browser_* realtime tools now wait briefly for the session ID to bind (rather than returning a hard failure) when a model fires a tool on the first beat before mintSession completes.
  • browser_AchieveGoal losing result on long runs: Fixed by making goal execution async (start + poll) instead of blocking a single HTTP request, preventing transport timeout losses on multi-minute computer-use loops.
  • Integration StartSync returning false success: IntegrationStartSync no longer returns {Success:true, RunID:null} for fast/no-op syncs; it now resolves the real RunID and returns Success:false with a message when no run record appears.
  • CodeGen soft-PK config cache going stale: RunInProcess now invalidates ManageMetadataBase's soft-PK/FK config cache per in-process run, fixing "No primary key found" errors in the long-lived MJAPI RSU CodeGen path.
  • mj sync push not idempotent for 6 connectors: Filled null BatchMaxRequestCount/BatchRequestWaitTime in SharePoint, Neon CRM, Fonteva, MemberSuite, PheedLoop, and Rhythm connector metadata — updates to existing records were failing validation while fresh inserts silently absorbed the null.
  • Gmail nested MIME body extraction: @memberjunction/communication-gmail now recursively extracts message bodies from nested MIME parts.
  • Data Explorer view-config drawer overlap: Fixed the sliding panel overlapping the dashboard header in Data Explorer.
  • open-app-engine app uninstall swallowing errors: App uninstall now deletes FK-dependent metadata (Entity Field Values, Entity Settings) in dependency order and reports real failures instead of returning a false "success".