v6.2.0-edge.4: Conversation forks, live agent avatars, and meeting video
Conversation forks, a working Stop for agent runs, template users, live agent avatars, agents that watch LiveKit meetings, Gemini Live on Gemini Enterprise, and four new decision models. Plus security hardening of action, template and realtime requests, and fixes to duplicate detection and call recordings.
Upgrade Notes apply: six migrations apply on mj migrate, RunAction and template runs are now authorized per caller, some aggregate expressions are refused, out-of-repo realtime drivers must change SendInput, and the conversation thread-panel API is removed.
Edge builds are prereleases.
MemberJunction 6.x is released under the Business Source License 1.1; 5.x and earlier stay ISC. What the licence grants, and what needs certification, is in the licence section of the v6 upgrade guide.
New Features
Section titled “New Features”- Conversation forks (
@memberjunction/ng-conversations,@memberjunction/core-entities,@memberjunction/ai-agents,@memberjunction/server,@memberjunction/realtime-runtime): A conversation is Main plus forks (MJ: Conversation Branches). “Fork from here”, Edit (“Save as fork”) and Regenerate each start a fork from a message without losing the original; a fork shows as a chip under its message and opens as a full view, and a Forks button lists them with All and Mine filters. Agents, artifacts, search, export and voice read only the open fork’s path. Forking is controlled by the newConversations: Forkauthorization (granted to the UI role) and a per-person setting in My Profile; with forking off, Edit and Regenerate change the latest turn in place and keep the replaced row hidden. - Stop for in-progress agent runs (
@memberjunction/ng-conversations,@memberjunction/ng-composer,@memberjunction/ai-agents,@memberjunction/ai-core-plus,@memberjunction/server): A Stop control on an in-progress reply now stops the run on whichever MJAPI replica owns it. The stopped run keeps its completed steps and payload, the reply reads “Stopped by user” rather than as an error, and the next turn continues from where it stopped. - Template users (
@memberjunction/core,@memberjunction/core-entities,@memberjunction/server,@memberjunction/cli,@memberjunction/open-app-engine,@memberjunction/record-cloning): A user flaggedIsTemplatecan be copied whole, with views, settings, dashboards, conversations and artifacts, through thetemplateclone preset. New users can be created from a template at first sign-in (userHandling.newUserTemplate),mj user clonecopies a user from the command line, and Open Apps can ship a template user. Explorer shows a banner while a template user is signed in. - Live agent avatars (
@memberjunction/ai,@memberjunction/ai-gemini,@memberjunction/ai-vertex,@memberjunction/ai-agents,@memberjunction/ai-realtime-client,@memberjunction/ng-conversations,@memberjunction/ng-realtime-media): A voiced agent whose persona has a face can appear as a live Gemini avatar in browser calls and LiveKit meetings, with the face kept in step with the voice. Avatar video is counted in realtime usage and priced per minute or per token. When an avatar can’t be shown (a phone call, an app with no video, a model or endpoint that renders none), the call says why once instead of failing. - Agents that watch LiveKit meetings (
@memberjunction/ai-bridge-livekit,@memberjunction/ai-bridge-livekit-native,@memberjunction/ai-bridge-server,@memberjunction/livekit-room-server,@memberjunction/ng-livekit-room): Withrealtime.video.watchMeetingson and a video-capable model, the agent’s bot sees the meeting’s cameras and shared screens, choosing the most recent share or the active speaker, and is told when what it sees changes. Each person decides in the room whether agents may see their camera and screen. - Gemini Live on Gemini Enterprise (Vertex AI) (
@memberjunction/ai-vertex,@memberjunction/ai-gemini,@memberjunction/server): Server and browser drivers for Gemini Live on Vertex AI. Browser sessions go through a new MJAPI realtime relay that adds Google credentials on each upstream connection, so no credential reaches the browser. Gemini Live sessions on both endpoints now continue past Google’s ~10-minute connection limit, survive dropped connections without cutting an answer, and use context-window compression so video sessions are not ended when the context fills. - Camera, screen share and video in realtime calls (
@memberjunction/realtime-runtime,@memberjunction/ai-realtime-client,@memberjunction/ng-realtime-media,@memberjunction/ng-conversations): Calls can share the user’s camera, the screen or one panel of the page with the agent, with a camera check before anything is shared, a device menu to switch microphone and camera mid-call, and a pick of which source the agent sees. The new@memberjunction/ng-realtime-mediapackage holds the shared call UI (tiles, controls, self-view, move-to and picture-in-picture), which the call overlay and the meeting room both use. - Realtime Channels v2 (
@memberjunction/realtime-runtime,@memberjunction/ai-core-plus,@memberjunction/ai-agents,@memberjunction/ng-realtime-channels,@memberjunction/ng-realtime-channel-examples): A self-describing channel contract with per-agent, per-app and per-host scoping, an Interactive Component channel, Camera, Screen Share and Avatar channels, verb-level exposure policy, an Angular adapter that wraps an existing component as a channel, and a channels guide. Existing channels, tool names and hosts are unchanged. - Embeddable realtime widget and identity verification (
@memberjunction/ng-realtime-widget,@memberjunction/realtime-runtime,@memberjunction/server):<mj-realtime-widget>embeds a voice session in any page, and anIdentityVerificationchannel with session events lets a session verify the caller mid-call. - New decision models (
@memberjunction/ai-cloudflare,@memberjunction/ai-systemone,@memberjunction/ai-openai): Cloudflare Clef and Clef-flash on Workers AI (CloudflareDecision), Kev and any server with a/v1/systemoneroute (SystemOneDecision), Perplexity Decider v1 27B (PerplexityDecision), and OpenAI’s Decisions API with GPT-6 Luna Decisions (OpenAIDecision). - Other new models (
@memberjunction/aiengine): Claude Haiku 5.5, Mistral Large 4 and the Nano Banana 2.1 image model, with vendor prices. - DBAutoDoc plugins and Index Advisor (
@memberjunction/db-auto-doc): A plugin system for DBAutoDoc and a first built-in plugin that proposes missing indexes and exports them as a SQL migration. - People Data Labs integration (
@memberjunction/actions-peopledatalabs): A People Data Labs client for bulk person enrichment with education and employment history, person search and school autocomplete, a credentials resolver, and thePeople Data Labs - Enrich Peopleaction. - Scoped notification configs (
@memberjunction/notifications,@memberjunction/core-entities,@memberjunction/server):MJ: Scoped Notification Configssets a notification type’s channels per application, role, user or origin, between the type’s defaults and a recipient’s preference, with locked denies that cap every level below. - Dashboards as an application, with an AI assistant (
@memberjunction/ng-dashboards,@memberjunction/ng-explorer-core,@memberjunction/ng-dashboard-viewer,@memberjunction/ai-agents): Dashboards move out of Data Explorer into their own Explorer application, reachable from Home, the command palette and recents. Config dashboards gain a side-pane assistant that works with the new Dashboards Expert agent by text or voice. - Math in markdown (
@memberjunction/markdown-core,@memberjunction/ng-markdown,@memberjunction/ng-chat): TeX ($…$,$$…$$,\(…\),\[…\]) and MathML, including JATS<mml:math>, render in chat and markdown views. - Inline Word and Excel previews (
@memberjunction/ng-artifacts,@memberjunction/ng-core-entity-forms):.docx,.xlsxand.xlsfiles preview in the Files form through the renderers the Artifacts viewer already used. - Installer sets up the database, on SQL Server or PostgreSQL (
@memberjunction/installer,@memberjunction/cli):mj installcreates the database and logins itself when given an administrator login, which is never saved, and now installs on PostgreSQL as well as SQL Server. - New UI building blocks (
@memberjunction/ng-charts,@memberjunction/ng-ui-components): Token-themed bar, donut and area chart widgets; anmj-menuaction menu; and a circle shape formjButton.
Improvements
Section titled “Improvements”- Transactions stay with the caller that opened them (
@memberjunction/generic-database-provider,@memberjunction/sqlserver-dataprovider,@memberjunction/postgresql-dataprovider,@memberjunction/core): A transaction opened on a shared database provider belongs to the async scope that began it, so concurrent requests and background work no longer run inside someone else’s transaction. - Metadata_Sync replays change only what changed (
@memberjunction/generic-database-provider,@memberjunction/sqlserver-dataprovider): A recorded update now carries only the fields the push changed, so replaying a Metadata_Sync migration no longer resets settings a deployment tuned on MJ-owned rows (one earlier replay had turnedTrustServerCacheCompletelyback on for a consumer). - Search ranks multi-source results by Reciprocal Rank Fusion (
@memberjunction/search-engine,@memberjunction/ng-search): Fused results keep their fusion order, andMinScoreapplies before fusion. - Engine and shared-cache hardening (
@memberjunction/core,@memberjunction/redis-provider,@memberjunction/server): Browser cache keys carry the user’s row-filter and field-security segments as server keys do, a transaction group updates each cached result set once, the dataset cache’s warm path works again, and named-channel Redis pub/sub is usable by applications for cross-replica messaging. - Record opens no longer fill engine caches (
@memberjunction/core-entities,@memberjunction/ng-explorer-core):UserInfoEnginestops cachingMJ: User Record Logs, which grew without bound in every MJAPI’s memory; recents are queried on demand. Twenty-two log, run and audit entities stop taking part in caching. - Agent Eval judges see the whole result (
@memberjunction/testing-engine): The llm-judge, decision-judge and rubric oracles now receive the agent’s final message and output artifacts, not only its payload. - Apollo enrichment rework (
@memberjunction/actions-apollo): A new Apollo client with bulk matching, typed errors and bounded rate-limit retries; the enrichment actions run on it and fix their key, save and paging bugs.
Bug Fixes
Section titled “Bug Fixes”- Duplicate detection reads every record and the same text vector sync stored (
@memberjunction/ai-vector-dupe,@memberjunction/ai-vector-sync): Detection no longer stops at the entity’s view row limit, no longer renders templates without their related data, holds one batch in memory instead of the whole run, and honours an entity document’s record filter. - Realtime calls cost and recording (
@memberjunction/ai-agents,@memberjunction/server,@memberjunction/realtime-runtime): A voice session’s co-agent run records its cost and is no longer marked Failed; recordings capture the agent’s audio on Gemini Live and other PCM drivers, store for users with only the UI role, retry a failed upload shard, are recovered from crash shards, and warn before a tab closes mid-upload. Server-side sessions (meetings, phone calls) now record model usage. - Agents with several storage accounts (
@memberjunction/ai-engine-base,@memberjunction/ai-agents): Agents no longer fail when several file storage accounts are active and none is the default. - Scheduled jobs activated while the server runs (
@memberjunction/scheduling-engine): A job switched to Active during polling gets itsNextRunAtat once instead of waiting for a restart. - Encryption keys an install doesn’t have (
@memberjunction/encryption): A value encrypted with an unavailable key logs one warning per key instead of an error on every load, and startup no longer fails validation for a key no field uses. - Box storage token renewal (
@memberjunction/storage): Box drivers that authenticate with client credentials renew their token instead of failing every read after about an hour. mj sync(@memberjunction/metadata-sync):pushfinds records created earlier in the same push,pullbacks up and restores every file it rewrites, and--dry-runoutput says it wrote nothing.- Linear-time parsing (
@memberjunction/conversations-runtime,@memberjunction/global): Chat mention parsing and URL trailing-slash trimming no longer backtrack quadratically on crafted input. - Chat and Explorer fixes (
@memberjunction/ng-composer,@memberjunction/ng-explorer-core,@memberjunction/ng-whiteboard,@memberjunction/ng-entity-viewer): Long messages no longer run behind the composer’s buttons, the omnibar’s keyboard selection stays on rendered rows, whiteboard markdown panels resize vertically, and entity grids no longer compute a saved view’s aggregates against another entity. - TextChunker keeps all text (
@memberjunction/ai-vectors): The sentence strategy no longer drops text around decimals, abbreviations and URLs.
Upgrade Notes
Section titled “Upgrade Notes”- Six migrations apply on
mj migrate:Scoped_Notification_Configs,User_IsTemplate,AIModelCost_spCreate_PriceTypeID_Default,Conversation_Branches,Scheduling_spSetScheduledJobNextRunAtandMetadata_Sync. RunActionauthorizes each action (@memberjunction/server,@memberjunction/actions): Scope-limited sessions (magic-link and widget guests, resource-scoped links) are refused. An Owner may run any action; any other user needs a role holding an authorization linked to the action throughMJ: Action Authorizations, unless the action’s class declaresBaseAction.AuthorizesCaller.SkipActionLogfrom the client is ignored.Calculate ExpressionandConditionalnow use restricted evaluators, andRun Ad-hoc QueryfollowsExecuteAdhocQuery’s rules.- Template rendering is sandboxed and template runs are authorized (
@memberjunction/templates,@memberjunction/server): Templates can no longer reachFunction,eval,processor the render internals, and some unusual names are refused at compile time withTemplateSandboxError.RunTemplateandTemplate.Runrefuse scope-limited sessions and callers without read permission onMJ: TemplatesandMJ: Template Contents. - Realtime direct actions (
@memberjunction/server,@memberjunction/ai-agents): The realtime relay no longer takes authority from a session’s editableConfigJSON, and scope-limited callers (including public web-widget guests) get no direct actions; their co-agent delegates throughinvoke-target-agent. - Restricted RunView aggregate expressions (
@memberjunction/sql-parser,@memberjunction/generic-database-provider): Each aggregate must be a single aggregate function call over the entity’s columns. Expressions such asSUM(x) + 1,ROUND(AVG(x), 2),CONVERT, window clauses and PostgreSQLFILTER (WHERE …)now return a per-aggregate error; the rows and other aggregates still load. - Out-of-repo realtime drivers must change
SendInput(@memberjunction/ai):IRealtimeSession.SendInputtakes oneRealtimeInputFrame({ Data, Kind, MimeType?, TimestampMs? }) instead of(chunk, kind?). - Conversation thread-panel API removed (
@memberjunction/ng-conversations,@memberjunction/ng-explorer-core): The ParentID-based thread panel is replaced by forks.ThreadPanelComponent, the chat area’sThreadIdinput andThreadOpened/ThreadClosedoutputs, the workspace’sOpenThread/CloseThread/SelectedThreadId, andMessageListComponent’sReplyInThread/ViewThreadoutputs are removed with their camelCase aliases; host apps that bind them must drop the bindings. UserInfoEngine.UserRecordLogsremoved (@memberjunction/core-entities): Useawait UserInfoEngine.LoadRecentRecordLogs(n).GetRecentRecordsForEntity()is removed.- Consumers that tune MJ-owned rows: From this release, Metadata_Sync migrations re-impose only values MJ changed, but migrations published earlier still contain full-row updates, so keep re-applying those settings after migrating.
- On PostgreSQL, two known gaps remain: duplicate shared form contributions are still not refused (the unique indexes need NULLS NOT DISTINCT), and
vwEntitiesandvwEntityFieldsstill lack theEnableFieldLevelSecurity,RelatedEntityFilterandRelatedEntityOrderBycolumns added in earlier releases, so those fields’ metadata is removed on PostgreSQL installs. Both are tracked for a later release.