v5.42.0
9 days ago by Caeleb Balanesi
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-roomdeliver 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-nativewraps@livekit/rtc-nodeso a bridged AI agent can publish its voice and subscribe to per-participant audio in a live room. TheBridgeNativeSdkRegistryauto-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
RunComputerUseGoalAPI 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 anExecuteRemoteBrowserGoalGraphQL mutation wired in the Conversations widget. - Record Set Processing & Remote Operations: New
@memberjunction/record-set-processordelivers 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 accompanyingBaseRemotableOperation<TInput,TOutput>primitive (in@memberjunction/core) provides a typed, provider-routed capability both browser and server invoke through one call site — the peer ofBaseEntity(CRUD) andRunView(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/arrayfields now map toNVARCHAR(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-syncships a standard set of ActiveSearch-type Entity Documents forMJ: Entities,MJ: AI Agents,MJ: Actions,MJ: AI Prompts, andMJ: AI Models— all on the in-processSimple Vector Service Provider(no API key required). Semantic/hybridSearchEntityworks out of the box for these core catalogs after runningmj sync push. - MJ Claude Pack installer: New
mj install:claudeandmj update:claudeCLI commands install/refresh a curated bundle ofCLAUDE.mdguidance, slash commands, and skills for Claude Code users.mj doctorgains aclaude-packcheck 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'RemoteBrowserHumanInputkind) and copy text out (viaGetSelectionTextand a newGetRemoteBrowserSelectionGraphQL 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/removenow work on PostgreSQL, CodeGen type corrections for PG,mj migrate convert --bake-codegenfor codegen-free PG deploys, and scheduling engine heartbeat lease extension ported to PG. - Engine server composition refactor:
ActionEngineServer,EntityActionEngineServer,CommunicationEngine, andTemplateEngineServernow compose their metadata-cache base (following theAIEngine/AIEngineBasepattern) 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-levelEntityField.Valueaccessor, 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 - Judgemetadata 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
ModelSelectionResultis now threaded through the execution pipeline instead of being re-derived at theExecutePrompt→executeSinglePromptboundary, fixing driver resolution bugs.ParallelExecutionCoordinatornow extendsAIPromptRunnerand delegates each task's model call to the inheritedexecuteModel, 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
AIEnginein-memory arrays instead of re-querying the database on every 15-minute cycle, eliminating redundantRunViewcalls. - Metadata sync deletion audit batching:
mj sync pushdeletion audit now issues oneRunViewper (target entity, referencing FK field) using chunkedIN (...)filters instead of one serial query per record × field, eliminating apparent hangs on large pushes. - Explorer navigation accessibility: New
mjClickabledirective 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-corepackage (BaseCLIPlugin+ runtime host), JSON formatting for machine-readable output, two-tier progressive disclosure, per-command runtime/timeout hints, and a fix forsync push/pullhanging on DB-pool teardown. - Installer pipeline improvements: Checkpoint resume no longer corrupts
.envon restart; PostgreSQLPG_*env vars are propagated to MJAPI.env; non-semver tags are handled gracefully innpm install;mj installskips SQL Server sysadmin-only grants whensais 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, causingCompletedAt=NULLon quick Actions and prompt runs. The save queue now applies finalize/TargetLogIDmutations inside the post-INSERT continuation. @ResultTablesave 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 beforemintSessioncompletes. browser_AchieveGoallosing 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
StartSyncreturning false success:IntegrationStartSyncno longer returns{Success:true, RunID:null}for fast/no-op syncs; it now resolves the realRunIDand returnsSuccess:falsewith a message when no run record appears. - CodeGen soft-PK config cache going stale:
RunInProcessnow invalidatesManageMetadataBase'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 pushnot idempotent for 6 connectors: Filled nullBatchMaxRequestCount/BatchRequestWaitTimein 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-gmailnow 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-engineapp 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".