@memberjunction/core-entities 5.42.0 → 5.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15026,6 +15026,11 @@ export const MJEntityActionInvocationSchema = z.object({
15026
15026
  * * Display Name: Updated At
15027
15027
  * * SQL Data Type: datetimeoffset
15028
15028
  * * Default Value: getutcdate()`),
15029
+ RuntimeUXDriverClass: z.string().nullable().describe(`
15030
+ * * Field Name: RuntimeUXDriverClass
15031
+ * * Display Name: Runtime UX Driver Class
15032
+ * * SQL Data Type: nvarchar(255)
15033
+ * * Description: Optional class name of a registered runtime-UX driver component (a BaseEntityActionRuntimeUX subclass resolved via MJGlobal.ClassFactory) that owns this invocation's interaction — parameter collection, dry-run preview, confirmation, and progress. NULL invokes the action directly with no custom UX. This lets any action opt into a richer, reusable runtime experience while the grid/toolbar stays operation-agnostic.`),
15029
15034
  EntityAction: z.string().describe(`
15030
15035
  * * Field Name: EntityAction
15031
15036
  * * Display Name: Entity Action Name
@@ -20251,6 +20256,11 @@ export const MJOpenAppSchema = z.object({
20251
20256
  * * Display Name: Updated At
20252
20257
  * * SQL Data Type: datetimeoffset
20253
20258
  * * Default Value: getutcdate()`),
20259
+ Subpath: z.string().nullable().describe(`
20260
+ * * Field Name: Subpath
20261
+ * * Display Name: Subpath
20262
+ * * SQL Data Type: nvarchar(500)
20263
+ * * Description: In-repo subdirectory the app was installed from for multi-app repositories (e.g. 'CRM/HubSpot'). NULL when the app's mj-app.json is at the repository root.`),
20254
20264
  InstalledByUser: z.string().describe(`
20255
20265
  * * Field Name: InstalledByUser
20256
20266
  * * Display Name: Installed By User
@@ -20666,7 +20676,7 @@ export const MJProcessRunSchema = z.object({
20666
20676
  * * Description: Pause/cancel handshake flag honored by the processor between batches`),
20667
20677
  Configuration: z.string().nullable().describe(`
20668
20678
  * * Field Name: Configuration
20669
- * * Display Name: Configuration
20679
+ * * Display Name: Configuration JSON
20670
20680
  * * SQL Data Type: nvarchar(MAX)
20671
20681
  * * Description: JSON snapshot of the effective configuration for this run`),
20672
20682
  ErrorMessage: z.string().nullable().describe(`
@@ -20690,6 +20700,12 @@ export const MJProcessRunSchema = z.object({
20690
20700
  * * Display Name: Updated At
20691
20701
  * * SQL Data Type: datetimeoffset
20692
20702
  * * Default Value: getutcdate()`),
20703
+ DryRun: z.boolean().describe(`
20704
+ * * Field Name: DryRun
20705
+ * * Display Name: Is Dry Run
20706
+ * * SQL Data Type: bit
20707
+ * * Default Value: 0
20708
+ * * Description: When 1, this run was a dry-run (compute-only) preview: the per-record diffs were computed and persisted as Process Run Details, but no changes were written back to the target records. When 0, the run applied its changes.`),
20693
20709
  RecordProcess: z.string().nullable().describe(`
20694
20710
  * * Field Name: RecordProcess
20695
20711
  * * Display Name: Record Process Name
@@ -22542,7 +22558,7 @@ export const MJRecordProcessSchema = z.object({
22542
22558
  * * Disabled
22543
22559
  * * Draft
22544
22560
  * * Description: Lifecycle status: Draft (not yet wired), Active (triggers live), or Disabled`),
22545
- WorkType: z.union([z.literal('Action'), z.literal('Agent'), z.literal('Infer')]).describe(`
22561
+ WorkType: z.union([z.literal('Action'), z.literal('Agent'), z.literal('FieldRules'), z.literal('Infer')]).describe(`
22546
22562
  * * Field Name: WorkType
22547
22563
  * * Display Name: Work Type
22548
22564
  * * SQL Data Type: nvarchar(20)
@@ -22550,6 +22566,7 @@ export const MJRecordProcessSchema = z.object({
22550
22566
  * * Possible Values
22551
22567
  * * Action
22552
22568
  * * Agent
22569
+ * * FieldRules
22553
22570
  * * Infer
22554
22571
  * * Description: Whether the work is an Action, an Agent, or an Infer (per-record AI Prompt). Agents are dispatched through the Execute Agent action and must be top-level + ExposeAsAction; Infer runs the AI Prompt named by PromptID for each record and writes its structured output back via OutputMapping.`),
22555
22572
  ActionID: z.string().nullable().describe(`
@@ -22691,33 +22708,38 @@ export const MJRecordProcessSchema = z.object({
22691
22708
  * * Display Name: Updated At
22692
22709
  * * SQL Data Type: datetimeoffset
22693
22710
  * * Default Value: getutcdate()`),
22711
+ Configuration: z.string().nullable().describe(`
22712
+ * * Field Name: Configuration
22713
+ * * Display Name: Configuration
22714
+ * * SQL Data Type: nvarchar(MAX)
22715
+ * * Description: JSON configuration for the process's work, used by work types that need structured config beyond Input/Output mappings. For WorkType='FieldRules' this holds the serialized FieldRuleSet (the rules applied to each record). NULL for work types that do not use it.`),
22694
22716
  Category: z.string().nullable().describe(`
22695
22717
  * * Field Name: Category
22696
- * * Display Name: Category (Display)
22718
+ * * Display Name: Category Name
22697
22719
  * * SQL Data Type: nvarchar(255)`),
22698
22720
  Entity: z.string().describe(`
22699
22721
  * * Field Name: Entity
22700
- * * Display Name: Entity (Display)
22722
+ * * Display Name: Entity Name
22701
22723
  * * SQL Data Type: nvarchar(255)`),
22702
22724
  Action: z.string().nullable().describe(`
22703
22725
  * * Field Name: Action
22704
- * * Display Name: Action (Display)
22726
+ * * Display Name: Action Name
22705
22727
  * * SQL Data Type: nvarchar(425)`),
22706
22728
  Agent: z.string().nullable().describe(`
22707
22729
  * * Field Name: Agent
22708
- * * Display Name: Agent (Display)
22730
+ * * Display Name: Agent Name
22709
22731
  * * SQL Data Type: nvarchar(255)`),
22710
22732
  Prompt: z.string().nullable().describe(`
22711
22733
  * * Field Name: Prompt
22712
- * * Display Name: Prompt (Display)
22734
+ * * Display Name: Prompt Name
22713
22735
  * * SQL Data Type: nvarchar(255)`),
22714
22736
  ScopeView: z.string().nullable().describe(`
22715
22737
  * * Field Name: ScopeView
22716
- * * Display Name: Scope View (Display)
22738
+ * * Display Name: Scope View Name
22717
22739
  * * SQL Data Type: nvarchar(100)`),
22718
22740
  ScopeList: z.string().nullable().describe(`
22719
22741
  * * Field Name: ScopeList
22720
- * * Display Name: Scope List (Display)
22742
+ * * Display Name: Scope List Name
22721
22743
  * * SQL Data Type: nvarchar(100)`),
22722
22744
  });
22723
22745
  /**
@@ -22806,7 +22828,7 @@ export const MJRemoteOperationSchema = z.object({
22806
22828
  * * Description: Raw TypeScript interface/type source defining the input shape (same mechanism as EntityField JSON-type definitions)`),
22807
22829
  InputTypeIsArray: z.boolean().describe(`
22808
22830
  * * Field Name: InputTypeIsArray
22809
- * * Display Name: Is Input Array
22831
+ * * Display Name: Input Is Array
22810
22832
  * * SQL Data Type: bit
22811
22833
  * * Default Value: 0
22812
22834
  * * Description: When 1, the input type is emitted as an array (TInput[])`),
@@ -22822,7 +22844,7 @@ export const MJRemoteOperationSchema = z.object({
22822
22844
  * * Description: Raw TypeScript interface/type source defining the output shape`),
22823
22845
  OutputTypeIsArray: z.boolean().describe(`
22824
22846
  * * Field Name: OutputTypeIsArray
22825
- * * Display Name: Is Output Array
22847
+ * * Display Name: Output Is Array
22826
22848
  * * SQL Data Type: bit
22827
22849
  * * Default Value: 0
22828
22850
  * * Description: When 1, the output type is emitted as an array (TOutput[])`),
@@ -22860,12 +22882,12 @@ export const MJRemoteOperationSchema = z.object({
22860
22882
  * * Description: How the server implementation is provided: Manual (hand-written subclass), AI (generated from Description), or Default (standard generated plumbing)`),
22861
22883
  Code: z.string().nullable().describe(`
22862
22884
  * * Field Name: Code
22863
- * * Display Name: Implementation Code
22885
+ * * Display Name: Code
22864
22886
  * * SQL Data Type: nvarchar(MAX)
22865
22887
  * * Description: The AI-generated implementation body (when GenerationType=AI); regenerated only when Description changes`),
22866
22888
  CodeApprovalStatus: z.union([z.literal('Approved'), z.literal('Pending'), z.literal('Rejected')]).describe(`
22867
22889
  * * Field Name: CodeApprovalStatus
22868
- * * Display Name: Approval Status
22890
+ * * Display Name: Code Approval Status
22869
22891
  * * SQL Data Type: nvarchar(20)
22870
22892
  * * Default Value: Pending
22871
22893
  * * Value List Type: List
@@ -22876,13 +22898,13 @@ export const MJRemoteOperationSchema = z.object({
22876
22898
  * * Description: Human approval gate for AI-generated code: Pending, Approved, or Rejected. Only Approved AI code is emitted and routable.`),
22877
22899
  CodeApprovedByUserID: z.string().nullable().describe(`
22878
22900
  * * Field Name: CodeApprovedByUserID
22879
- * * Display Name: Approved By User ID
22901
+ * * Display Name: Code Approved By User ID
22880
22902
  * * SQL Data Type: uniqueidentifier
22881
22903
  * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)
22882
22904
  * * Description: Foreign key to the user who approved the generated code`),
22883
22905
  CodeApprovedAt: z.date().nullable().describe(`
22884
22906
  * * Field Name: CodeApprovedAt
22885
- * * Display Name: Approved At
22907
+ * * Display Name: Code Approved At
22886
22908
  * * SQL Data Type: datetimeoffset
22887
22909
  * * Description: When the generated code was approved`),
22888
22910
  ContractFingerprint: z.string().nullable().describe(`
@@ -22926,13 +22948,30 @@ export const MJRemoteOperationSchema = z.object({
22926
22948
  * * Display Name: Updated At
22927
22949
  * * SQL Data Type: datetimeoffset
22928
22950
  * * Default Value: getutcdate()`),
22951
+ CodeLocked: z.boolean().describe(`
22952
+ * * Field Name: CodeLocked
22953
+ * * Display Name: Code Locked
22954
+ * * SQL Data Type: bit
22955
+ * * Default Value: 0
22956
+ * * Description: When 1, the AI-generated Code is frozen and Save() will not regenerate it even if Description changes (the Generated-Actions CodeLocked analog). Default 0.`),
22957
+ CodeComments: z.string().nullable().describe(`
22958
+ * * Field Name: CodeComments
22959
+ * * Display Name: Code Comments
22960
+ * * SQL Data Type: nvarchar(MAX)
22961
+ * * Description: The model's explanation / comments for the AI-generated Code (populated alongside Code when GenerationType=AI). Human-facing review aid.`),
22962
+ Libraries: z.any().nullable().describe(`
22963
+ * * Field Name: Libraries
22964
+ * * Display Name: Libraries
22965
+ * * SQL Data Type: nvarchar(MAX)
22966
+ * * JSON Type: Array<MJRemoteOperationEntity_RemoteOperationLibrary>
22967
+ * * Description: JSON array of the libraries the generated body imports: [{ "Library": "@memberjunction/ai-prompts", "ItemsUsed": ["AIPromptRunner"] }, ...]. Bound to the RemoteOperationLibrary JSONType via metadata sync so CodeGen emits a typed LibrariesObject accessor; CodeGen uses it to emit the imports at the top of the generated remote_operations.ts. NULL/empty = only the default always-available libraries are imported.`),
22929
22968
  Category: z.string().nullable().describe(`
22930
22969
  * * Field Name: Category
22931
22970
  * * Display Name: Category Name
22932
22971
  * * SQL Data Type: nvarchar(255)`),
22933
22972
  CodeApprovedByUser: z.string().nullable().describe(`
22934
22973
  * * Field Name: CodeApprovedByUser
22935
- * * Display Name: Approved By User
22974
+ * * Display Name: Code Approved By User
22936
22975
  * * SQL Data Type: nvarchar(100)`),
22937
22976
  });
22938
22977
  /**
@@ -66840,6 +66879,18 @@ let MJEntityActionInvocationEntity = class MJEntityActionInvocationEntity extend
66840
66879
  return this.Get('__mj_UpdatedAt');
66841
66880
  }
66842
66881
  /**
66882
+ * * Field Name: RuntimeUXDriverClass
66883
+ * * Display Name: Runtime UX Driver Class
66884
+ * * SQL Data Type: nvarchar(255)
66885
+ * * Description: Optional class name of a registered runtime-UX driver component (a BaseEntityActionRuntimeUX subclass resolved via MJGlobal.ClassFactory) that owns this invocation's interaction — parameter collection, dry-run preview, confirmation, and progress. NULL invokes the action directly with no custom UX. This lets any action opt into a richer, reusable runtime experience while the grid/toolbar stays operation-agnostic.
66886
+ */
66887
+ get RuntimeUXDriverClass() {
66888
+ return this.Get('RuntimeUXDriverClass');
66889
+ }
66890
+ set RuntimeUXDriverClass(value) {
66891
+ this.Set('RuntimeUXDriverClass', value);
66892
+ }
66893
+ /**
66843
66894
  * * Field Name: EntityAction
66844
66895
  * * Display Name: Entity Action Name
66845
66896
  * * SQL Data Type: nvarchar(425)
@@ -79729,6 +79780,18 @@ let MJOpenAppEntity = class MJOpenAppEntity extends BaseEntity {
79729
79780
  return this.Get('__mj_UpdatedAt');
79730
79781
  }
79731
79782
  /**
79783
+ * * Field Name: Subpath
79784
+ * * Display Name: Subpath
79785
+ * * SQL Data Type: nvarchar(500)
79786
+ * * Description: In-repo subdirectory the app was installed from for multi-app repositories (e.g. 'CRM/HubSpot'). NULL when the app's mj-app.json is at the repository root.
79787
+ */
79788
+ get Subpath() {
79789
+ return this.Get('Subpath');
79790
+ }
79791
+ set Subpath(value) {
79792
+ this.Set('Subpath', value);
79793
+ }
79794
+ /**
79732
79795
  * * Field Name: InstalledByUser
79733
79796
  * * Display Name: Installed By User
79734
79797
  * * SQL Data Type: nvarchar(100)
@@ -80755,7 +80818,7 @@ let MJProcessRunEntity = class MJProcessRunEntity extends BaseEntity {
80755
80818
  }
80756
80819
  /**
80757
80820
  * * Field Name: Configuration
80758
- * * Display Name: Configuration
80821
+ * * Display Name: Configuration JSON
80759
80822
  * * SQL Data Type: nvarchar(MAX)
80760
80823
  * * Description: JSON snapshot of the effective configuration for this run
80761
80824
  */
@@ -80809,6 +80872,19 @@ let MJProcessRunEntity = class MJProcessRunEntity extends BaseEntity {
80809
80872
  return this.Get('__mj_UpdatedAt');
80810
80873
  }
80811
80874
  /**
80875
+ * * Field Name: DryRun
80876
+ * * Display Name: Is Dry Run
80877
+ * * SQL Data Type: bit
80878
+ * * Default Value: 0
80879
+ * * Description: When 1, this run was a dry-run (compute-only) preview: the per-record diffs were computed and persisted as Process Run Details, but no changes were written back to the target records. When 0, the run applied its changes.
80880
+ */
80881
+ get DryRun() {
80882
+ return this.Get('DryRun');
80883
+ }
80884
+ set DryRun(value) {
80885
+ this.Set('DryRun', value);
80886
+ }
80887
+ /**
80812
80888
  * * Field Name: RecordProcess
80813
80889
  * * Display Name: Record Process Name
80814
80890
  * * SQL Data Type: nvarchar(255)
@@ -85427,6 +85503,7 @@ let MJRecordProcessEntity = class MJRecordProcessEntity extends BaseEntity {
85427
85503
  * * Possible Values
85428
85504
  * * Action
85429
85505
  * * Agent
85506
+ * * FieldRules
85430
85507
  * * Infer
85431
85508
  * * Description: Whether the work is an Action, an Agent, or an Infer (per-record AI Prompt). Agents are dispatched through the Execute Agent action and must be top-level + ExposeAsAction; Infer runs the AI Prompt named by PromptID for each record and writes its structured output back via OutputMapping.
85432
85509
  */
@@ -85724,8 +85801,20 @@ let MJRecordProcessEntity = class MJRecordProcessEntity extends BaseEntity {
85724
85801
  return this.Get('__mj_UpdatedAt');
85725
85802
  }
85726
85803
  /**
85804
+ * * Field Name: Configuration
85805
+ * * Display Name: Configuration
85806
+ * * SQL Data Type: nvarchar(MAX)
85807
+ * * Description: JSON configuration for the process's work, used by work types that need structured config beyond Input/Output mappings. For WorkType='FieldRules' this holds the serialized FieldRuleSet (the rules applied to each record). NULL for work types that do not use it.
85808
+ */
85809
+ get Configuration() {
85810
+ return this.Get('Configuration');
85811
+ }
85812
+ set Configuration(value) {
85813
+ this.Set('Configuration', value);
85814
+ }
85815
+ /**
85727
85816
  * * Field Name: Category
85728
- * * Display Name: Category (Display)
85817
+ * * Display Name: Category Name
85729
85818
  * * SQL Data Type: nvarchar(255)
85730
85819
  */
85731
85820
  get Category() {
@@ -85733,7 +85822,7 @@ let MJRecordProcessEntity = class MJRecordProcessEntity extends BaseEntity {
85733
85822
  }
85734
85823
  /**
85735
85824
  * * Field Name: Entity
85736
- * * Display Name: Entity (Display)
85825
+ * * Display Name: Entity Name
85737
85826
  * * SQL Data Type: nvarchar(255)
85738
85827
  */
85739
85828
  get Entity() {
@@ -85741,7 +85830,7 @@ let MJRecordProcessEntity = class MJRecordProcessEntity extends BaseEntity {
85741
85830
  }
85742
85831
  /**
85743
85832
  * * Field Name: Action
85744
- * * Display Name: Action (Display)
85833
+ * * Display Name: Action Name
85745
85834
  * * SQL Data Type: nvarchar(425)
85746
85835
  */
85747
85836
  get Action() {
@@ -85749,7 +85838,7 @@ let MJRecordProcessEntity = class MJRecordProcessEntity extends BaseEntity {
85749
85838
  }
85750
85839
  /**
85751
85840
  * * Field Name: Agent
85752
- * * Display Name: Agent (Display)
85841
+ * * Display Name: Agent Name
85753
85842
  * * SQL Data Type: nvarchar(255)
85754
85843
  */
85755
85844
  get Agent() {
@@ -85757,7 +85846,7 @@ let MJRecordProcessEntity = class MJRecordProcessEntity extends BaseEntity {
85757
85846
  }
85758
85847
  /**
85759
85848
  * * Field Name: Prompt
85760
- * * Display Name: Prompt (Display)
85849
+ * * Display Name: Prompt Name
85761
85850
  * * SQL Data Type: nvarchar(255)
85762
85851
  */
85763
85852
  get Prompt() {
@@ -85765,7 +85854,7 @@ let MJRecordProcessEntity = class MJRecordProcessEntity extends BaseEntity {
85765
85854
  }
85766
85855
  /**
85767
85856
  * * Field Name: ScopeView
85768
- * * Display Name: Scope View (Display)
85857
+ * * Display Name: Scope View Name
85769
85858
  * * SQL Data Type: nvarchar(100)
85770
85859
  */
85771
85860
  get ScopeView() {
@@ -85773,7 +85862,7 @@ let MJRecordProcessEntity = class MJRecordProcessEntity extends BaseEntity {
85773
85862
  }
85774
85863
  /**
85775
85864
  * * Field Name: ScopeList
85776
- * * Display Name: Scope List (Display)
85865
+ * * Display Name: Scope List Name
85777
85866
  * * SQL Data Type: nvarchar(100)
85778
85867
  */
85779
85868
  get ScopeList() {
@@ -85912,6 +86001,11 @@ export { MJRemoteOperationCategoryEntity };
85912
86001
  * @public
85913
86002
  */
85914
86003
  let MJRemoteOperationEntity = class MJRemoteOperationEntity extends BaseEntity {
86004
+ constructor() {
86005
+ super(...arguments);
86006
+ this._LibrariesObject_cached = undefined;
86007
+ this._LibrariesObject_lastRaw = null;
86008
+ }
85915
86009
  /**
85916
86010
  * Loads the MJ: Remote Operations record from the database
85917
86011
  * @param ID: string - primary key value to load the MJ: Remote Operations record.
@@ -86015,7 +86109,7 @@ let MJRemoteOperationEntity = class MJRemoteOperationEntity extends BaseEntity {
86015
86109
  }
86016
86110
  /**
86017
86111
  * * Field Name: InputTypeIsArray
86018
- * * Display Name: Is Input Array
86112
+ * * Display Name: Input Is Array
86019
86113
  * * SQL Data Type: bit
86020
86114
  * * Default Value: 0
86021
86115
  * * Description: When 1, the input type is emitted as an array (TInput[])
@@ -86052,7 +86146,7 @@ let MJRemoteOperationEntity = class MJRemoteOperationEntity extends BaseEntity {
86052
86146
  }
86053
86147
  /**
86054
86148
  * * Field Name: OutputTypeIsArray
86055
- * * Display Name: Is Output Array
86149
+ * * Display Name: Output Is Array
86056
86150
  * * SQL Data Type: bit
86057
86151
  * * Default Value: 0
86058
86152
  * * Description: When 1, the output type is emitted as an array (TOutput[])
@@ -86125,7 +86219,7 @@ let MJRemoteOperationEntity = class MJRemoteOperationEntity extends BaseEntity {
86125
86219
  }
86126
86220
  /**
86127
86221
  * * Field Name: Code
86128
- * * Display Name: Implementation Code
86222
+ * * Display Name: Code
86129
86223
  * * SQL Data Type: nvarchar(MAX)
86130
86224
  * * Description: The AI-generated implementation body (when GenerationType=AI); regenerated only when Description changes
86131
86225
  */
@@ -86137,7 +86231,7 @@ let MJRemoteOperationEntity = class MJRemoteOperationEntity extends BaseEntity {
86137
86231
  }
86138
86232
  /**
86139
86233
  * * Field Name: CodeApprovalStatus
86140
- * * Display Name: Approval Status
86234
+ * * Display Name: Code Approval Status
86141
86235
  * * SQL Data Type: nvarchar(20)
86142
86236
  * * Default Value: Pending
86143
86237
  * * Value List Type: List
@@ -86155,7 +86249,7 @@ let MJRemoteOperationEntity = class MJRemoteOperationEntity extends BaseEntity {
86155
86249
  }
86156
86250
  /**
86157
86251
  * * Field Name: CodeApprovedByUserID
86158
- * * Display Name: Approved By User ID
86252
+ * * Display Name: Code Approved By User ID
86159
86253
  * * SQL Data Type: uniqueidentifier
86160
86254
  * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)
86161
86255
  * * Description: Foreign key to the user who approved the generated code
@@ -86168,7 +86262,7 @@ let MJRemoteOperationEntity = class MJRemoteOperationEntity extends BaseEntity {
86168
86262
  }
86169
86263
  /**
86170
86264
  * * Field Name: CodeApprovedAt
86171
- * * Display Name: Approved At
86265
+ * * Display Name: Code Approved At
86172
86266
  * * SQL Data Type: datetimeoffset
86173
86267
  * * Description: When the generated code was approved
86174
86268
  */
@@ -86263,6 +86357,62 @@ let MJRemoteOperationEntity = class MJRemoteOperationEntity extends BaseEntity {
86263
86357
  return this.Get('__mj_UpdatedAt');
86264
86358
  }
86265
86359
  /**
86360
+ * * Field Name: CodeLocked
86361
+ * * Display Name: Code Locked
86362
+ * * SQL Data Type: bit
86363
+ * * Default Value: 0
86364
+ * * Description: When 1, the AI-generated Code is frozen and Save() will not regenerate it even if Description changes (the Generated-Actions CodeLocked analog). Default 0.
86365
+ */
86366
+ get CodeLocked() {
86367
+ return this.Get('CodeLocked');
86368
+ }
86369
+ set CodeLocked(value) {
86370
+ this.Set('CodeLocked', value);
86371
+ }
86372
+ /**
86373
+ * * Field Name: CodeComments
86374
+ * * Display Name: Code Comments
86375
+ * * SQL Data Type: nvarchar(MAX)
86376
+ * * Description: The model's explanation / comments for the AI-generated Code (populated alongside Code when GenerationType=AI). Human-facing review aid.
86377
+ */
86378
+ get CodeComments() {
86379
+ return this.Get('CodeComments');
86380
+ }
86381
+ set CodeComments(value) {
86382
+ this.Set('CodeComments', value);
86383
+ }
86384
+ /**
86385
+ * * Field Name: Libraries
86386
+ * * Display Name: Libraries
86387
+ * * SQL Data Type: nvarchar(MAX)
86388
+ * * JSON Type: Array<MJRemoteOperationEntity_RemoteOperationLibrary>
86389
+ * * Description: JSON array of the libraries the generated body imports: [{ "Library": "@memberjunction/ai-prompts", "ItemsUsed": ["AIPromptRunner"] }, ...]. Bound to the RemoteOperationLibrary JSONType via metadata sync so CodeGen emits a typed LibrariesObject accessor; CodeGen uses it to emit the imports at the top of the generated remote_operations.ts. NULL/empty = only the default always-available libraries are imported.
86390
+ */
86391
+ get Libraries() {
86392
+ return this.Get('Libraries');
86393
+ }
86394
+ set Libraries(value) {
86395
+ this.Set('Libraries', value);
86396
+ }
86397
+ /**
86398
+ * Typed accessor for Libraries — returns parsed JSON as Array<MJRemoteOperationEntity_RemoteOperationLibrary>.
86399
+ * Uses lazy parsing with cache invalidation when the underlying raw value changes.
86400
+ */
86401
+ get LibrariesObject() {
86402
+ const raw = this.Libraries;
86403
+ if (raw !== this._LibrariesObject_lastRaw) {
86404
+ this._LibrariesObject_cached = raw ? JSON.parse(raw) : null;
86405
+ this._LibrariesObject_lastRaw = raw;
86406
+ }
86407
+ return this._LibrariesObject_cached;
86408
+ }
86409
+ set LibrariesObject(value) {
86410
+ const raw = value ? JSON.stringify(value) : null;
86411
+ this.Libraries = raw;
86412
+ this._LibrariesObject_cached = value;
86413
+ this._LibrariesObject_lastRaw = raw;
86414
+ }
86415
+ /**
86266
86416
  * * Field Name: Category
86267
86417
  * * Display Name: Category Name
86268
86418
  * * SQL Data Type: nvarchar(255)
@@ -86272,7 +86422,7 @@ let MJRemoteOperationEntity = class MJRemoteOperationEntity extends BaseEntity {
86272
86422
  }
86273
86423
  /**
86274
86424
  * * Field Name: CodeApprovedByUser
86275
- * * Display Name: Approved By User
86425
+ * * Display Name: Code Approved By User
86276
86426
  * * SQL Data Type: nvarchar(100)
86277
86427
  */
86278
86428
  get CodeApprovedByUser() {