v5.43.0
5 days ago by Caeleb Balanesi
New Features
- Open Apps: Connector Extraction Modality —
mj app install <repo>/<subpath>supports multi-app repos with scoped-tag version resolution per app. NewOpenApp.Subpathcolumn persists which in-repo directory an app installed from, enabling correct upgrade/remove. Vendor connectors (Salesforce, NetSuite, GrowthZone, etc.) now ship as installable Open Apps fromMemberJunction/Integrationsrather than being seeded by MJ core. - Remote Operations (RO-2/RO-3/RO-4) — CodeGen emitter generates typed base classes for all declared Remote Operations. Long-running operations emit typed progress events observable both in-process and over the wire. AI-authored operation bodies:
Descriptiondrives LLM code generation (gated byCodeApprovalStatus). The Bulk Operations UX is now powered by the generic Remote Operations architecture. - Bulk Operations Studio — New
mj appinstallable application providing a drag-and-drop Record Process studio with visual FieldRules builder, reactive history, and dry-run preview. Supports Action/Agent/Infer work types. - Field Rules Engine — Shared engine (
@memberjunction/field-rules-transforms) reused across integration and bulk-update surfaces. AddspromptandentityDocumentsources, plus JSONPath/XPath transform plugins. - Generic Fire-and-Forget Save Queue —
KeyedSerialTaskQueue(global) andBaseEntitySaveQueue(core) eliminate hand-rolled "INSERT then UPDATE" persistence races. Adopted acrossActionEngine,AIPromptRunner,GenericProcessRunTracker, andAgentRunStepSaveQueue. Makes "stuck at Running" records structurally impossible. - Realtime Multi-Agent Floor Control — Broadcast/diarization mode, optional turn moderator, Gemini meeting mode, session capability surface with first-agent re-gating, and an idle session reaper. Zoom-style split Leave/End-for-everyone control on Google Meet rooms.
- Angular DOM Unit-Testing Foundation — New
@memberjunction/ng-test-utilspackage withrenderComponentFixtureandrenderTemplatehelpers. Vitest + jsdom harness with coverage reporting. Pilot DOM specs acrossng-ui-components,ng-pagination,ng-tabstrip, andng-livekit-roomleaf components. - Conversations: Query Mentions — Runnable queries now surface under the
#-mention trigger alongside entities. Queries are permission-filtered viaQueryInfo.UserCanRunand render with display name and configured icon in autocomplete, editor chips, and message badges. - CI: UI Design-Token and Button Override Gates — Two new GitHub Actions gates enforce no hardcoded hex colors and no
.mj-btnCSS overrides in PRs targetingnext. - Happy Birthday Madhav!
Improvements
- Open App Lifecycle Correctness — Installed server packages load at boot from
dynamicPackages.server[]; installed client packages recorded indynamicPackages.client[]. Install status is now correct (npm failure →Disabled, notActive). Remove is now safe (DB-first ordering, co-tenant shared-schema guard, atomic metadata commit). OwnApplicationrow is deleted on clean uninstall.mj codegen manifest --open-app-client-bootstrapreplaces the hand-written MJExplorer bootstrap script. - Integration Framework Hardening — Wide-table in-row size limits now live in
SQLDialect(MaxInRowSizeBytes,MaxColumnCount,EstimateInRowBytes).SchemaBuilderdefers over-budget columns to__mj_integration_CustomOverflowand emits structured warnings instead of shipping tables that fail every INSERT. Multi-level template-var traversal inBaseRESTIntegrationConnectorsupports paths with more than one template variable.IntegrationDiscoveryResolver.createEntityAndFieldMapsnow O(1) schema lookup instead of O(N²) scan — fixes large-catalog timeout (e.g. Salesforce ~1,695 objects). - CodeGen: Multi-Provider Database Symmetry —
SetupDataSourcedispatches viaClassFactoryto platform-specific providers; adding a new platform is a single@RegisterClass. PG env-var precedence (PG_HOST/PG_PORT/etc.) now resolves once inDEFAULT_CODEGEN_CONFIGwith de-duplicated warnings. New optionalcodegenPoolconfig block (max,min,idleTimeoutMillis,connectionTimeoutMillis,statementTimeoutMs,ssl). - Save-Capture Column Order —
@ResultTablein the SQL Server save wrapper now reads column order fromsys.columnsat config time (cached per entity), making it correct for hand-maintained views that diverge from canonical CodeGen column ordering. - Installer: Secret Protection — Configure phase now generates a
.gitignorecovering.env/.env.*so freshly scaffolded projects don't accidentally commit credentials. - Telemetry — Cacheability-aware duplicate-RunView suggestion for
AllowCaching=falseentities. Fixes pagination-fingerprint false-duplicates. Batched janitor channel reads. - Connector Metadata Removal — All connector-specific
Integration,Integration Object,Integration Object Field, andCredential Typemetadata removed from the MJ core repo and database. Migration safely guards against removing liveCompanyIntegrationconnections.
Bug Fixes
- Flow Agent Loop Resolution — ForEach/While loop-body Action steps now resolve against the standard Action registry (
ActionEngineServer.Instance.Actions) instead of the legacy AI Actions collection. Previously, any normal action used in a loop body (e.g. Google Custom Search) failed with "Action not found." - Flow Agent Static Collections — ForEach
collectionPathnow supportsstatic:[...]literal collections for iterating fixed lists/ranges without a prior step to build the array. - MJExplorer Login Crash —
MJNotificationService.Instancewas read before DI constructed the singleton during magic-link instant login. The service is now injected intoMJExplorerAppComponentso it initializes beforehandleLoginruns. - React Linter False Positives — Form-lifecycle false positives eliminated; no-op saves in the interactive form component are now guarded.
- CodeGen PG Env-Var Precedence — PG_* precedence was silently lost when
dbPlatformwas set only inmj.config.cjs(not viaDB_PLATFORMenv var). Fixed viaapplyPlatformDependentEnvVars()running post-merge. - CodeGen SSL Default — SSL was unintentionally flipped on in
NODE_ENV=productionfor PostgreSQL CodeGen connections. Now defaults tooffwith an explicitcodegenPool.sslknob. - CodeGen statement_timeout —
statement_timeoutGUC was not applied to the verify-SELECT-1 connection; fixed by carrying the timeout via the libpq startup option. - Restored OAuth2 Schema —
oauth2-client-credentials.schema.jsonwas inadvertently deleted alongside connector-specific schemas in a prior PR; restored. - UUID Equality in Entity-Action UX —
UUIDsEqualis now used in the AI-prompt selector instead of===, fixing UUID comparison failures across SQL Server (uppercase) and PostgreSQL (lowercase).