@memberjunction/core-entities 5.37.0 → 5.39.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.
Files changed (32) hide show
  1. package/dist/custom/MJQueryEntityExtended.d.ts +73 -0
  2. package/dist/custom/MJQueryEntityExtended.d.ts.map +1 -0
  3. package/dist/custom/MJQueryEntityExtended.js +195 -0
  4. package/dist/custom/MJQueryEntityExtended.js.map +1 -0
  5. package/dist/custom/ResourcePermissions/ResourcePermissionEngine.js +2 -2
  6. package/dist/custom/ResourcePermissions/ResourcePermissionEngine.js.map +1 -1
  7. package/dist/engines/QueryEngine.d.ts +28 -7
  8. package/dist/engines/QueryEngine.d.ts.map +1 -1
  9. package/dist/engines/QueryEngine.js +40 -1
  10. package/dist/engines/QueryEngine.js.map +1 -1
  11. package/dist/engines/UserInfoEngine.d.ts +9 -0
  12. package/dist/engines/UserInfoEngine.d.ts.map +1 -1
  13. package/dist/engines/UserInfoEngine.js +12 -0
  14. package/dist/engines/UserInfoEngine.js.map +1 -1
  15. package/dist/engines/conversations.d.ts +42 -2
  16. package/dist/engines/conversations.d.ts.map +1 -1
  17. package/dist/engines/conversations.js +49 -6
  18. package/dist/engines/conversations.js.map +1 -1
  19. package/dist/engines/interactive-forms.d.ts +132 -0
  20. package/dist/engines/interactive-forms.d.ts.map +1 -0
  21. package/dist/engines/interactive-forms.js +212 -0
  22. package/dist/engines/interactive-forms.js.map +1 -0
  23. package/dist/generated/entity_subclasses.d.ts +843 -104
  24. package/dist/generated/entity_subclasses.d.ts.map +1 -1
  25. package/dist/generated/entity_subclasses.js +1257 -138
  26. package/dist/generated/entity_subclasses.js.map +1 -1
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +2 -0
  30. package/dist/index.js.map +1 -1
  31. package/package.json +5 -5
  32. package/readme.md +3 -3
@@ -2658,7 +2658,7 @@ detailed information about what validation rules failed.`),
2658
2658
  export const MJAIAgentRunSchema = z.object({
2659
2659
  ID: z.string().describe(`
2660
2660
  * * Field Name: ID
2661
- * * Display Name: ID
2661
+ * * Display Name: Run ID
2662
2662
  * * SQL Data Type: uniqueidentifier
2663
2663
  * * Default Value: newsequentialid()
2664
2664
  * * Description: Unique identifier for this agent run`),
@@ -2733,7 +2733,7 @@ export const MJAIAgentRunSchema = z.object({
2733
2733
  * * Description: JSON serialization of the complete agent state, including conversation context, variables, and execution state. Enables pause/resume functionality.`),
2734
2734
  TotalTokensUsed: z.number().nullable().describe(`
2735
2735
  * * Field Name: TotalTokensUsed
2736
- * * Display Name: Total Tokens Used
2736
+ * * Display Name: Total Tokens
2737
2737
  * * SQL Data Type: int
2738
2738
  * * Default Value: 0
2739
2739
  * * Description: Total number of tokens consumed by all LLM calls during this agent run`),
@@ -2755,27 +2755,27 @@ export const MJAIAgentRunSchema = z.object({
2755
2755
  * * Default Value: getutcdate()`),
2756
2756
  TotalPromptTokensUsed: z.number().nullable().describe(`
2757
2757
  * * Field Name: TotalPromptTokensUsed
2758
- * * Display Name: Total Prompt Tokens Used
2758
+ * * Display Name: Prompt Tokens
2759
2759
  * * SQL Data Type: int
2760
2760
  * * Description: Total number of prompt/input tokens used across all AIPromptRun executions during this agent run. This provides a breakdown of the TotalTokensUsed field to help analyze the ratio of input vs output tokens consumed by the agent.`),
2761
2761
  TotalCompletionTokensUsed: z.number().nullable().describe(`
2762
2762
  * * Field Name: TotalCompletionTokensUsed
2763
- * * Display Name: Total Completion Tokens Used
2763
+ * * Display Name: Completion Tokens
2764
2764
  * * SQL Data Type: int
2765
2765
  * * Description: Total number of completion/output tokens generated across all AIPromptRun executions during this agent run. This provides a breakdown of the TotalTokensUsed field to help analyze the ratio of input vs output tokens consumed by the agent.`),
2766
2766
  TotalTokensUsedRollup: z.number().nullable().describe(`
2767
2767
  * * Field Name: TotalTokensUsedRollup
2768
- * * Display Name: Total Tokens Used (Rollup)
2768
+ * * Display Name: Total Tokens (Rollup)
2769
2769
  * * SQL Data Type: int
2770
2770
  * * Description: Total tokens used including this agent run and all sub-agent runs. For leaf agents (no sub-agents), this equals TotalTokensUsed. For parent agents, this includes the sum of all descendant agent tokens. Calculated as TotalPromptTokensUsedRollup + TotalCompletionTokensUsedRollup.`),
2771
2771
  TotalPromptTokensUsedRollup: z.number().nullable().describe(`
2772
2772
  * * Field Name: TotalPromptTokensUsedRollup
2773
- * * Display Name: Total Prompt Tokens Used (Rollup)
2773
+ * * Display Name: Prompt Tokens (Rollup)
2774
2774
  * * SQL Data Type: int
2775
2775
  * * Description: Total prompt/input tokens including this agent run and all sub-agent runs. For leaf agents (no sub-agents), this equals TotalPromptTokensUsed. For parent agents, this includes the sum of all descendant agent prompt tokens.`),
2776
2776
  TotalCompletionTokensUsedRollup: z.number().nullable().describe(`
2777
2777
  * * Field Name: TotalCompletionTokensUsedRollup
2778
- * * Display Name: Total Completion Tokens Used (Rollup)
2778
+ * * Display Name: Completion Tokens (Rollup)
2779
2779
  * * SQL Data Type: int
2780
2780
  * * Description: Total completion/output tokens including this agent run and all sub-agent runs. For leaf agents (no sub-agents), this equals TotalCompletionTokensUsed. For parent agents, this includes the sum of all descendant agent completion tokens.`),
2781
2781
  TotalCostRollup: z.number().nullable().describe(`
@@ -2791,7 +2791,7 @@ export const MJAIAgentRunSchema = z.object({
2791
2791
  * * Description: Optional tracking of a specific conversation detail (e.g. a specific message) that spawned this agent run`),
2792
2792
  ConversationDetailSequence: z.number().nullable().describe(`
2793
2793
  * * Field Name: ConversationDetailSequence
2794
- * * Display Name: Conversation Detail Sequence
2794
+ * * Display Name: Sequence
2795
2795
  * * SQL Data Type: int
2796
2796
  * * Description: If a conversation detail spawned multiple agent runs, tracks the order of their spawn/execution`),
2797
2797
  CancellationReason: z.union([z.literal('System'), z.literal('Timeout'), z.literal('User Request')]).nullable().describe(`
@@ -2826,7 +2826,7 @@ export const MJAIAgentRunSchema = z.object({
2826
2826
  * * Description: JSON serialization of the final Payload state at the end of the agent run`),
2827
2827
  Message: z.string().nullable().describe(`
2828
2828
  * * Field Name: Message
2829
- * * Display Name: Message
2829
+ * * Display Name: Final Message
2830
2830
  * * SQL Data Type: nvarchar(MAX)
2831
2831
  * * Description: Final message from the agent to the end user at the end of a run`),
2832
2832
  LastRunID: z.string().nullable().describe(`
@@ -2867,7 +2867,7 @@ each time the agent processes a prompt step.`),
2867
2867
  * * Description: Runtime vendor override that was used for this execution. When set along with OverrideModelID, this vendor was used to provide the model.`),
2868
2868
  Data: z.string().nullable().describe(`
2869
2869
  * * Field Name: Data
2870
- * * Display Name: Data
2870
+ * * Display Name: Execution Data
2871
2871
  * * SQL Data Type: nvarchar(MAX)
2872
2872
  * * Description: JSON serialized data that was passed for template rendering and prompt execution. This data was passed to the agent's prompt as well as all sub-agents.`),
2873
2873
  Verbose: z.boolean().nullable().describe(`
@@ -2921,61 +2921,71 @@ each time the agent processes a prompt step.`),
2921
2921
  * * Description: JSON object containing additional scope dimensions beyond the primary scope. Example: {"ContactID":"abc-123","TeamID":"team-456"}`),
2922
2922
  ExternalReferenceID: z.string().nullable().describe(`
2923
2923
  * * Field Name: ExternalReferenceID
2924
- * * Display Name: External Reference ID
2924
+ * * Display Name: External Reference
2925
2925
  * * SQL Data Type: nvarchar(200)
2926
2926
  * * Description: Optional reference ID from an external system that initiated this agent run. Enables correlation between the caller's agent run and this execution. For example, when Skip SaaS is called via SkipProxyAgent, this stores the MJ-side Agent Run ID.`),
2927
2927
  CompanyID: z.string().nullable().describe(`
2928
2928
  * * Field Name: CompanyID
2929
- * * Display Name: Company ID
2929
+ * * Display Name: Company
2930
2930
  * * SQL Data Type: uniqueidentifier
2931
2931
  * * Description: Optional company scope for multi-tenant memory. When populated, Memory Manager uses this to scope extracted notes to the company. Flows from ExecuteAgentParams.companyId at agent invocation time.`),
2932
+ TotalCacheReadTokensUsed: z.number().nullable().describe(`
2933
+ * * Field Name: TotalCacheReadTokensUsed
2934
+ * * Display Name: Cache Read Tokens
2935
+ * * SQL Data Type: int
2936
+ * * Description: Total input tokens served from the AI provider's prompt cache (cache reads / hits) across this agent run, summed from child prompt runs' TokensCacheReadRollup and sub-agent runs' TotalCacheReadTokensUsed. Counts only; the cost impact (cache reads are billed at a steep discount) is reflected in TotalCost. The cache counterpart of TotalPromptTokensUsed.`),
2937
+ TotalCacheWriteTokensUsed: z.number().nullable().describe(`
2938
+ * * Field Name: TotalCacheWriteTokensUsed
2939
+ * * Display Name: Cache Write Tokens
2940
+ * * SQL Data Type: int
2941
+ * * Description: Total input tokens written to the AI provider's prompt cache (cache writes / creation) across this agent run, summed from child prompt runs' TokensCacheWriteRollup and sub-agent runs' TotalCacheWriteTokensUsed. Populated for providers that bill cache creation (e.g. Anthropic); 0 or NULL otherwise. The cache counterpart of TotalCompletionTokensUsed.`),
2932
2942
  Agent: z.string().nullable().describe(`
2933
2943
  * * Field Name: Agent
2934
- * * Display Name: Agent Name
2944
+ * * Display Name: Agent Details
2935
2945
  * * SQL Data Type: nvarchar(255)`),
2936
2946
  ParentRun: z.string().nullable().describe(`
2937
2947
  * * Field Name: ParentRun
2938
- * * Display Name: Parent Run Name
2948
+ * * Display Name: Parent Run Details
2939
2949
  * * SQL Data Type: nvarchar(255)`),
2940
2950
  Conversation: z.string().nullable().describe(`
2941
2951
  * * Field Name: Conversation
2942
- * * Display Name: Conversation Name
2952
+ * * Display Name: Conversation Details
2943
2953
  * * SQL Data Type: nvarchar(255)`),
2944
2954
  User: z.string().nullable().describe(`
2945
2955
  * * Field Name: User
2946
- * * Display Name: User Name
2956
+ * * Display Name: User Details
2947
2957
  * * SQL Data Type: nvarchar(100)`),
2948
2958
  ConversationDetail: z.string().nullable().describe(`
2949
2959
  * * Field Name: ConversationDetail
2950
- * * Display Name: Conversation Detail Name
2960
+ * * Display Name: Conversation Detail Details
2951
2961
  * * SQL Data Type: nvarchar(MAX)`),
2952
2962
  LastRun: z.string().nullable().describe(`
2953
2963
  * * Field Name: LastRun
2954
- * * Display Name: Last Run Name
2964
+ * * Display Name: Last Run Details
2955
2965
  * * SQL Data Type: nvarchar(255)`),
2956
2966
  Configuration: z.string().nullable().describe(`
2957
2967
  * * Field Name: Configuration
2958
- * * Display Name: Configuration Name
2968
+ * * Display Name: Configuration Details
2959
2969
  * * SQL Data Type: nvarchar(100)`),
2960
2970
  OverrideModel: z.string().nullable().describe(`
2961
2971
  * * Field Name: OverrideModel
2962
- * * Display Name: Override Model Name
2972
+ * * Display Name: Override Model Details
2963
2973
  * * SQL Data Type: nvarchar(50)`),
2964
2974
  OverrideVendor: z.string().nullable().describe(`
2965
2975
  * * Field Name: OverrideVendor
2966
- * * Display Name: Override Vendor Name
2976
+ * * Display Name: Override Vendor Details
2967
2977
  * * SQL Data Type: nvarchar(50)`),
2968
2978
  ScheduledJobRun: z.string().nullable().describe(`
2969
2979
  * * Field Name: ScheduledJobRun
2970
- * * Display Name: Scheduled Job Run Name
2980
+ * * Display Name: Scheduled Job Details
2971
2981
  * * SQL Data Type: nvarchar(200)`),
2972
2982
  TestRun: z.string().nullable().describe(`
2973
2983
  * * Field Name: TestRun
2974
- * * Display Name: Test Run Name
2984
+ * * Display Name: Test Run Details
2975
2985
  * * SQL Data Type: nvarchar(255)`),
2976
2986
  PrimaryScopeEntity: z.string().nullable().describe(`
2977
2987
  * * Field Name: PrimaryScopeEntity
2978
- * * Display Name: Primary Scope Entity Name
2988
+ * * Display Name: Primary Scope Entity Details
2979
2989
  * * SQL Data Type: nvarchar(255)`),
2980
2990
  RootParentRunID: z.string().nullable().describe(`
2981
2991
  * * Field Name: RootParentRunID
@@ -4411,12 +4421,12 @@ export const MJAIModelCostSchema = z.object({
4411
4421
  * * Default Value: newsequentialid()`),
4412
4422
  ModelID: z.string().describe(`
4413
4423
  * * Field Name: ModelID
4414
- * * Display Name: Model ID
4424
+ * * Display Name: Model
4415
4425
  * * SQL Data Type: uniqueidentifier
4416
4426
  * * Related Entity/Foreign Key: MJ: AI Models (vwAIModels.ID)`),
4417
4427
  VendorID: z.string().describe(`
4418
4428
  * * Field Name: VendorID
4419
- * * Display Name: Vendor ID
4429
+ * * Display Name: Vendor
4420
4430
  * * SQL Data Type: uniqueidentifier
4421
4431
  * * Related Entity/Foreign Key: MJ: AI Vendors (vwAIVendors.ID)`),
4422
4432
  StartedAt: z.date().nullable().describe(`
@@ -4448,7 +4458,7 @@ export const MJAIModelCostSchema = z.object({
4448
4458
  * * Description: ISO 4217 three-letter currency code (e.g., USD, EUR, GBP) in uppercase`),
4449
4459
  PriceTypeID: z.string().describe(`
4450
4460
  * * Field Name: PriceTypeID
4451
- * * Display Name: Price Type ID
4461
+ * * Display Name: Price Type
4452
4462
  * * SQL Data Type: uniqueidentifier
4453
4463
  * * Related Entity/Foreign Key: MJ: AI Model Price Types (vwAIModelPriceTypes.ID)`),
4454
4464
  InputPricePerUnit: z.number().describe(`
@@ -4463,7 +4473,7 @@ export const MJAIModelCostSchema = z.object({
4463
4473
  * * Description: Price per unit for output tokens/responses. Must be non-negative. Often higher than input pricing`),
4464
4474
  UnitTypeID: z.string().describe(`
4465
4475
  * * Field Name: UnitTypeID
4466
- * * Display Name: Unit Type ID
4476
+ * * Display Name: Unit Type
4467
4477
  * * SQL Data Type: uniqueidentifier
4468
4478
  * * Related Entity/Foreign Key: MJ: AI Model Price Unit Types (vwAIModelPriceUnitTypes.ID)`),
4469
4479
  ProcessingType: z.union([z.literal('Batch'), z.literal('Realtime')]).describe(`
@@ -4490,21 +4500,31 @@ export const MJAIModelCostSchema = z.object({
4490
4500
  * * Display Name: Updated At
4491
4501
  * * SQL Data Type: datetimeoffset
4492
4502
  * * Default Value: getutcdate()`),
4503
+ CacheReadPricePerUnit: z.number().nullable().describe(`
4504
+ * * Field Name: CacheReadPricePerUnit
4505
+ * * Display Name: Cache Read Price Per Unit
4506
+ * * SQL Data Type: decimal(18, 8)
4507
+ * * Description: Optional price per unit for input tokens served from the AI provider's prompt cache (cache reads / hits), expressed in the same currency and UnitType (e.g. per 1M tokens) as InputPricePerUnit. When NULL, cache-read tokens are priced at InputPricePerUnit. Cache reads are usually far cheaper than uncached input (e.g. ~0.1x for Anthropic/Gemini, ~0.5x for OpenAI).`),
4508
+ CacheWritePricePerUnit: z.number().nullable().describe(`
4509
+ * * Field Name: CacheWritePricePerUnit
4510
+ * * Display Name: Cache Write Price Per Unit
4511
+ * * SQL Data Type: decimal(18, 8)
4512
+ * * Description: Optional price per unit for input tokens written to the AI provider's prompt cache (cache writes / creation), expressed in the same currency and UnitType as InputPricePerUnit. When NULL, cache-write tokens are priced at InputPricePerUnit. Populated for providers that bill cache creation separately (e.g. Anthropic, ~1.25x input); leave NULL for providers that do not (OpenAI, Gemini), which also report 0 cache-write tokens.`),
4493
4513
  Model: z.string().describe(`
4494
4514
  * * Field Name: Model
4495
- * * Display Name: Model
4515
+ * * Display Name: Model Name
4496
4516
  * * SQL Data Type: nvarchar(50)`),
4497
4517
  Vendor: z.string().describe(`
4498
4518
  * * Field Name: Vendor
4499
- * * Display Name: Vendor
4519
+ * * Display Name: Vendor Name
4500
4520
  * * SQL Data Type: nvarchar(50)`),
4501
4521
  PriceType: z.string().describe(`
4502
4522
  * * Field Name: PriceType
4503
- * * Display Name: Price Type
4523
+ * * Display Name: Price Type Name
4504
4524
  * * SQL Data Type: nvarchar(100)`),
4505
4525
  UnitType: z.string().describe(`
4506
4526
  * * Field Name: UnitType
4507
- * * Display Name: Unit Type
4527
+ * * Display Name: Unit Type Name
4508
4528
  * * SQL Data Type: nvarchar(100)`),
4509
4529
  });
4510
4530
  /**
@@ -5242,7 +5262,7 @@ export const MJAIPromptRunSchema = z.object({
5242
5262
  * * Description: Optional configuration used for this execution.`),
5243
5263
  RunAt: z.date().describe(`
5244
5264
  * * Field Name: RunAt
5245
- * * Display Name: Run At
5265
+ * * Display Name: Started At
5246
5266
  * * SQL Data Type: datetimeoffset
5247
5267
  * * Default Value: sysdatetimeoffset()
5248
5268
  * * Description: When the prompt run started, with timezone offset information.`),
@@ -5268,7 +5288,7 @@ export const MJAIPromptRunSchema = z.object({
5268
5288
  * * Description: The output result from the model.`),
5269
5289
  TokensUsed: z.number().nullable().describe(`
5270
5290
  * * Field Name: TokensUsed
5271
- * * Display Name: Total Tokens Used
5291
+ * * Display Name: Tokens Used
5272
5292
  * * SQL Data Type: int
5273
5293
  * * Description: Total number of tokens used (prompt + completion).`),
5274
5294
  TokensPrompt: z.number().nullable().describe(`
@@ -5343,12 +5363,12 @@ export const MJAIPromptRunSchema = z.object({
5343
5363
  * * Description: The cost of this specific prompt execution as reported by the AI provider. This does not include costs from child executions. The currency is specified in CostCurrency field.`),
5344
5364
  CostCurrency: z.string().nullable().describe(`
5345
5365
  * * Field Name: CostCurrency
5346
- * * Display Name: Cost Currency
5366
+ * * Display Name: Currency
5347
5367
  * * SQL Data Type: nvarchar(10)
5348
5368
  * * Description: ISO 4217 currency code for the Cost field (e.g., USD, EUR, GBP). Different AI providers may use different currencies.`),
5349
5369
  TokensUsedRollup: z.number().nullable().describe(`
5350
5370
  * * Field Name: TokensUsedRollup
5351
- * * Display Name: Total Tokens (Rollup)
5371
+ * * Display Name: Tokens Used (Rollup)
5352
5372
  * * SQL Data Type: int
5353
5373
  * * Description: Total tokens used including this execution and all child/grandchild executions. This provides a complete view of token usage for hierarchical prompt trees. Calculated as TokensPromptRollup + TokensCompletionRollup.`),
5354
5374
  TokensPromptRollup: z.number().nullable().describe(`
@@ -5408,12 +5428,12 @@ export const MJAIPromptRunSchema = z.object({
5408
5428
  * * Description: The response format requested for this run (e.g., 'JSON', 'Text', 'Markdown')`),
5409
5429
  LogProbs: z.boolean().nullable().describe(`
5410
5430
  * * Field Name: LogProbs
5411
- * * Display Name: Log Probabilities
5431
+ * * Display Name: Log Probs
5412
5432
  * * SQL Data Type: bit
5413
5433
  * * Description: Whether log probabilities were requested for this run`),
5414
5434
  TopLogProbs: z.number().nullable().describe(`
5415
5435
  * * Field Name: TopLogProbs
5416
- * * Display Name: Top Log Probabilities
5436
+ * * Display Name: Top Log Probs
5417
5437
  * * SQL Data Type: int
5418
5438
  * * Description: Number of top log probabilities requested per token (if LogProbs is true)`),
5419
5439
  DescendantCost: z.number().nullable().describe(`
@@ -5423,17 +5443,17 @@ export const MJAIPromptRunSchema = z.object({
5423
5443
  * * Description: The total cost of all descendant (child and grandchild) prompt runs, excluding this run's own cost. For leaf nodes (no children), this is 0. Updated when child costs change.`),
5424
5444
  ValidationAttemptCount: z.number().nullable().describe(`
5425
5445
  * * Field Name: ValidationAttemptCount
5426
- * * Display Name: Validation Attempt Count
5446
+ * * Display Name: Validation Attempts
5427
5447
  * * SQL Data Type: int
5428
5448
  * * Description: Total number of validation attempts made (including the initial attempt)`),
5429
5449
  SuccessfulValidationCount: z.number().nullable().describe(`
5430
5450
  * * Field Name: SuccessfulValidationCount
5431
- * * Display Name: Successful Validation Count
5451
+ * * Display Name: Successful Validations
5432
5452
  * * SQL Data Type: int
5433
5453
  * * Description: Number of validation attempts that passed validation`),
5434
5454
  FinalValidationPassed: z.boolean().nullable().describe(`
5435
5455
  * * Field Name: FinalValidationPassed
5436
- * * Display Name: Final Validation Passed
5456
+ * * Display Name: Validation Passed
5437
5457
  * * SQL Data Type: bit
5438
5458
  * * Description: Whether validation ultimately passed (1) or failed (0)`),
5439
5459
  ValidationBehavior: z.string().nullable().describe(`
@@ -5448,7 +5468,7 @@ export const MJAIPromptRunSchema = z.object({
5448
5468
  * * Description: Retry strategy used: Fixed, Linear, or Exponential`),
5449
5469
  MaxRetriesConfigured: z.number().nullable().describe(`
5450
5470
  * * Field Name: MaxRetriesConfigured
5451
- * * Display Name: Max Retries Configured
5471
+ * * Display Name: Max Retries
5452
5472
  * * SQL Data Type: int
5453
5473
  * * Description: Maximum number of retries configured on the prompt`),
5454
5474
  FinalValidationError: z.string().nullable().describe(`
@@ -5483,7 +5503,7 @@ export const MJAIPromptRunSchema = z.object({
5483
5503
  * * Description: Total time spent on retries in milliseconds (excluding first attempt)`),
5484
5504
  ValidationAttempts: z.string().nullable().describe(`
5485
5505
  * * Field Name: ValidationAttempts
5486
- * * Display Name: Validation Attempts
5506
+ * * Display Name: Validation Attempt Logs
5487
5507
  * * SQL Data Type: nvarchar(MAX)
5488
5508
  * * Description: JSON array containing detailed information about each validation attempt`),
5489
5509
  ValidationSummary: z.string().nullable().describe(`
@@ -5509,13 +5529,13 @@ export const MJAIPromptRunSchema = z.object({
5509
5529
  * * Description: JSON array of duration in milliseconds for each failover attempt`),
5510
5530
  OriginalModelID: z.string().nullable().describe(`
5511
5531
  * * Field Name: OriginalModelID
5512
- * * Display Name: Original Model
5532
+ * * Display Name: Original Model ID
5513
5533
  * * SQL Data Type: uniqueidentifier
5514
5534
  * * Related Entity/Foreign Key: MJ: AI Models (vwAIModels.ID)
5515
5535
  * * Description: The AI Model ID that was originally attempted before any failovers`),
5516
5536
  OriginalRequestStartTime: z.date().nullable().describe(`
5517
5537
  * * Field Name: OriginalRequestStartTime
5518
- * * Display Name: Original Request Start Time
5538
+ * * Display Name: Original Request Start
5519
5539
  * * SQL Data Type: datetimeoffset
5520
5540
  * * Description: Timestamp when the original request started, before any failovers`),
5521
5541
  TotalFailoverDuration: z.number().nullable().describe(`
@@ -5531,7 +5551,7 @@ export const MJAIPromptRunSchema = z.object({
5531
5551
  * * Description: If this run was initiated as a re-run of another prompt run, this field links back to the original run ID`),
5532
5552
  ModelSelection: z.string().nullable().describe(`
5533
5553
  * * Field Name: ModelSelection
5534
- * * Display Name: Model Selection
5554
+ * * Display Name: Model Selection Details
5535
5555
  * * SQL Data Type: nvarchar(MAX)
5536
5556
  * * Description: JSON object containing detailed model selection information including all models considered, their scores, and the selection rationale`),
5537
5557
  Status: z.union([z.literal('Cancelled'), z.literal('Completed'), z.literal('Failed'), z.literal('Pending'), z.literal('Running')]).describe(`
@@ -5586,7 +5606,7 @@ export const MJAIPromptRunSchema = z.object({
5586
5606
  * * Description: Unique key used for caching this prompt result, typically a hash of the prompt and parameters`),
5587
5607
  JudgeID: z.string().nullable().describe(`
5588
5608
  * * Field Name: JudgeID
5589
- * * Display Name: Judge
5609
+ * * Display Name: Judge Prompt
5590
5610
  * * SQL Data Type: uniqueidentifier
5591
5611
  * * Related Entity/Foreign Key: MJ: AI Prompts (vwAIPrompts.ID)
5592
5612
  * * Description: ID of the AIPrompt used as a judge to evaluate and rank multiple parallel execution results`),
@@ -5640,7 +5660,7 @@ export const MJAIPromptRunSchema = z.object({
5640
5660
  * * Description: Time in milliseconds for the model to generate the completion/response tokens. Provider-specific timing metric.`),
5641
5661
  ModelSpecificResponseDetails: z.string().nullable().describe(`
5642
5662
  * * Field Name: ModelSpecificResponseDetails
5643
- * * Display Name: Model Specific Response Details
5663
+ * * Display Name: Provider Response Details
5644
5664
  * * SQL Data Type: nvarchar(MAX)
5645
5665
  * * Description: JSON field containing provider-specific response metadata and details not captured in standard fields. Structure varies by AI provider.`),
5646
5666
  EffortLevel: z.number().nullable().describe(`
@@ -5669,6 +5689,26 @@ export const MJAIPromptRunSchema = z.object({
5669
5689
  * * Display Name: Assistant Prefill
5670
5690
  * * SQL Data Type: nvarchar(MAX)
5671
5691
  * * Description: The assistant prefill text that was used during this prompt execution. Records whether native prefill or fallback was applied. NULL means no prefill was used.`),
5692
+ TokensCacheRead: z.number().nullable().describe(`
5693
+ * * Field Name: TokensCacheRead
5694
+ * * Display Name: Tokens Cache Read
5695
+ * * SQL Data Type: int
5696
+ * * Description: Number of input tokens served from the AI provider's prompt cache (a cache READ / hit) for this run, as reported by the provider. Counts only; no cost is derived here. NULL if the provider did not report cache reads or caching did not engage. Distinct from CacheHit/CacheKey, which track MemberJunction's own result cache.`),
5697
+ TokensCacheWrite: z.number().nullable().describe(`
5698
+ * * Field Name: TokensCacheWrite
5699
+ * * Display Name: Tokens Cache Write
5700
+ * * SQL Data Type: int
5701
+ * * Description: Number of input tokens written to the AI provider's prompt cache (a cache WRITE / creation) for this run, as reported by the provider. Populated for providers that report cache writes (e.g. Anthropic cache_creation_input_tokens); NULL or 0 for providers that do not bill/report writes (OpenAI, Gemini, Groq, Cerebras). Counts only; no cost is derived here.`),
5702
+ TokensCacheReadRollup: z.number().nullable().describe(`
5703
+ * * Field Name: TokensCacheReadRollup
5704
+ * * Display Name: Tokens Cache Read (Rollup)
5705
+ * * SQL Data Type: int
5706
+ * * Description: Rollup of TokensCacheRead across this prompt run and all of its descendant prompt runs (e.g. the individual attempts behind a parallel / multi-attempt / failover consolidation). For a leaf run this equals TokensCacheRead. Use this (not TokensCacheRead) when aggregating cache reads up a prompt-run or agent-run hierarchy so fan-out provider calls are not under-counted.`),
5707
+ TokensCacheWriteRollup: z.number().nullable().describe(`
5708
+ * * Field Name: TokensCacheWriteRollup
5709
+ * * Display Name: Tokens Cache Write (Rollup)
5710
+ * * SQL Data Type: int
5711
+ * * Description: Rollup of TokensCacheWrite across this prompt run and all of its descendant prompt runs. For a leaf run this equals TokensCacheWrite. Mirrors TokensUsedRollup/TokensPromptRollup; populated for providers that report cache writes (e.g. Anthropic), otherwise 0 or NULL.`),
5672
5712
  Prompt: z.string().describe(`
5673
5713
  * * Field Name: Prompt
5674
5714
  * * Display Name: Prompt
@@ -5703,7 +5743,7 @@ export const MJAIPromptRunSchema = z.object({
5703
5743
  * * SQL Data Type: nvarchar(50)`),
5704
5744
  RerunFromPromptRun: z.string().nullable().describe(`
5705
5745
  * * Field Name: RerunFromPromptRun
5706
- * * Display Name: Rerun From
5746
+ * * Display Name: Rerun From Run
5707
5747
  * * SQL Data Type: nvarchar(255)`),
5708
5748
  Judge: z.string().nullable().describe(`
5709
5749
  * * Field Name: Judge
@@ -5723,7 +5763,7 @@ export const MJAIPromptRunSchema = z.object({
5723
5763
  * * SQL Data Type: uniqueidentifier`),
5724
5764
  RootRerunFromPromptRunID: z.string().nullable().describe(`
5725
5765
  * * Field Name: RootRerunFromPromptRunID
5726
- * * Display Name: Root Rerun From
5766
+ * * Display Name: Root Rerun Source
5727
5767
  * * SQL Data Type: uniqueidentifier`),
5728
5768
  });
5729
5769
  /**
@@ -7755,10 +7795,10 @@ export const MJArtifactUseSchema = z.object({
7755
7795
  * * Display Name: Updated At
7756
7796
  * * SQL Data Type: datetimeoffset
7757
7797
  * * Default Value: getutcdate()`),
7758
- ArtifactVersion: z.number().describe(`
7798
+ ArtifactVersion: z.string().nullable().describe(`
7759
7799
  * * Field Name: ArtifactVersion
7760
7800
  * * Display Name: Artifact Version
7761
- * * SQL Data Type: int`),
7801
+ * * SQL Data Type: nvarchar(255)`),
7762
7802
  User: z.string().describe(`
7763
7803
  * * Field Name: User
7764
7804
  * * Display Name: User
@@ -7815,10 +7855,10 @@ export const MJArtifactVersionAttributeSchema = z.object({
7815
7855
  * * Display Name: Updated At
7816
7856
  * * SQL Data Type: datetimeoffset
7817
7857
  * * Default Value: getutcdate()`),
7818
- ArtifactVersion: z.number().describe(`
7858
+ ArtifactVersion: z.string().nullable().describe(`
7819
7859
  * * Field Name: ArtifactVersion
7820
7860
  * * Display Name: Artifact Version
7821
- * * SQL Data Type: int`),
7861
+ * * SQL Data Type: nvarchar(255)`),
7822
7862
  });
7823
7863
  /**
7824
7864
  * zod schema definition for the entity MJ: Artifact Versions
@@ -8277,10 +8317,10 @@ export const MJCollectionArtifactSchema = z.object({
8277
8317
  * * Field Name: Collection
8278
8318
  * * Display Name: Collection
8279
8319
  * * SQL Data Type: nvarchar(255)`),
8280
- ArtifactVersion: z.number().describe(`
8320
+ ArtifactVersion: z.string().nullable().describe(`
8281
8321
  * * Field Name: ArtifactVersion
8282
8322
  * * Display Name: Artifact Version
8283
- * * SQL Data Type: int`),
8323
+ * * SQL Data Type: nvarchar(255)`),
8284
8324
  });
8285
8325
  /**
8286
8326
  * zod schema definition for the entity MJ: Collection Permissions
@@ -11114,10 +11154,10 @@ export const MJConversationDetailArtifactSchema = z.object({
11114
11154
  * * Field Name: ConversationDetail
11115
11155
  * * Display Name: Conversation Detail Summary
11116
11156
  * * SQL Data Type: nvarchar(MAX)`),
11117
- ArtifactVersion: z.number().describe(`
11157
+ ArtifactVersion: z.string().nullable().describe(`
11118
11158
  * * Field Name: ArtifactVersion
11119
11159
  * * Display Name: Artifact Version Summary
11120
- * * SQL Data Type: int`),
11160
+ * * SQL Data Type: nvarchar(255)`),
11121
11161
  });
11122
11162
  /**
11123
11163
  * zod schema definition for the entity MJ: Conversation Detail Attachments
@@ -11224,10 +11264,10 @@ export const MJConversationDetailAttachmentSchema = z.object({
11224
11264
  * * Field Name: File
11225
11265
  * * Display Name: File Record
11226
11266
  * * SQL Data Type: nvarchar(500)`),
11227
- ArtifactVersion: z.number().nullable().describe(`
11267
+ ArtifactVersion: z.string().nullable().describe(`
11228
11268
  * * Field Name: ArtifactVersion
11229
11269
  * * Display Name: Artifact Version Record
11230
- * * SQL Data Type: int`),
11270
+ * * SQL Data Type: nvarchar(255)`),
11231
11271
  });
11232
11272
  /**
11233
11273
  * zod schema definition for the entity MJ: Conversation Detail Ratings
@@ -11515,12 +11555,13 @@ export const MJConversationSchema = z.object({
11515
11555
  * * Field Name: LinkedEntityID
11516
11556
  * * Display Name: Linked Entity
11517
11557
  * * SQL Data Type: uniqueidentifier
11518
- * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)`),
11558
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
11559
+ * * Description: Generic 'what is this conversation about?' pointer. Names the Entity whose record this conversation references (e.g. MJ: Components when the conversation was started in the Form Builder cockpit about a specific form). Paired with LinkedRecordID via the CK_Conversation_LinkBinding cross-column CHECK — both NULL or both populated. Surfaces use this to filter their conversation list to entries about the currently-loaded record (e.g. 'show prior conversations about THIS form'). Reusable beyond Form Builder by any future dashboard / record-context surface that wants the same UX without further schema work.`),
11519
11560
  LinkedRecordID: z.string().nullable().describe(`
11520
11561
  * * Field Name: LinkedRecordID
11521
11562
  * * Display Name: Linked Record ID
11522
11563
  * * SQL Data Type: nvarchar(500)
11523
- * * Description: ID of a related record this conversation is about (support ticket, order, etc.).`),
11564
+ * * Description: The primary key of the record this conversation is about, serialized as a string so any entity type can be referenced regardless of its PK shape (UUID, int, composite). Used together with LinkedEntityID — see CK_Conversation_LinkBinding. Wide enough (NVARCHAR(500) in the baseline schema) to handle chunky composite keys. Surfaces query by (LinkedEntityID, LinkedRecordID) — or by LinkedRecordID IN (...) when a lineage of records shares conversation context (e.g. multiple Component versions of the same form lineage).`),
11524
11565
  DataContextID: z.string().nullable().describe(`
11525
11566
  * * Field Name: DataContextID
11526
11567
  * * Display Name: Data Context
@@ -11569,13 +11610,41 @@ export const MJConversationSchema = z.object({
11569
11610
  * * SQL Data Type: uniqueidentifier
11570
11611
  * * Related Entity/Foreign Key: MJ: Test Runs (vwTestRuns.ID)
11571
11612
  * * Description: Optional Foreign Key - Links this conversation to a test run if this conversation was generated as part of a test. Enables tracking test conversations separately from production conversations.`),
11613
+ ApplicationScope: z.union([z.literal('Application'), z.literal('Both'), z.literal('Global')]).describe(`
11614
+ * * Field Name: ApplicationScope
11615
+ * * Display Name: Application Scope
11616
+ * * SQL Data Type: nvarchar(20)
11617
+ * * Default Value: Global
11618
+ * * Value List Type: List
11619
+ * * Possible Values
11620
+ * * Application
11621
+ * * Both
11622
+ * * Global
11623
+ * * Description: Controls where this conversation surfaces in the UI. Global = appears in the main Chat app (no application binding). Application = scoped to a specific Application's embedded chat surface (e.g. the Form Builder cockpit); hidden from the main chat list by default. Both = explicitly promoted to appear in BOTH the main chat list and the bound Application's embedded surface. Defaults to Global so pre-existing conversations stay visible in main chat. Paired with ApplicationID via a cross-column CHECK constraint: Global => ApplicationID IS NULL; Application or Both => ApplicationID IS NOT NULL.`),
11624
+ ApplicationID: z.string().nullable().describe(`
11625
+ * * Field Name: ApplicationID
11626
+ * * Display Name: Application
11627
+ * * SQL Data Type: uniqueidentifier
11628
+ * * Related Entity/Foreign Key: MJ: Applications (vwApplications.ID)
11629
+ * * Description: Optional Application this conversation is bound to. Required when ApplicationScope is 'Application' or 'Both'; must be NULL when ApplicationScope is 'Global'. Enforced by the CK_Conversation_ScopeAppBinding cross-column CHECK. Used by embedded chat surfaces (e.g. the Form Builder cockpit) to filter their conversation list to just their own application's conversations.`),
11630
+ DefaultAgentID: z.string().nullable().describe(`
11631
+ * * Field Name: DefaultAgentID
11632
+ * * Display Name: Default Agent
11633
+ * * SQL Data Type: uniqueidentifier
11634
+ * * Related Entity/Foreign Key: MJ: AI Agents (vwAIAgents.ID)
11635
+ * * Description: Optional per-conversation default AI agent. When set, the message router targets this agent for non-mention, non-continuity messages instead of falling through to the embedder-supplied default (e.g. Form Builder) or to Sage. Lets a user pin a conversation to a specific specialist agent (e.g. Research Agent) so Sage is never invoked for that thread. Routing precedence: @mention > continuity (last responder) > Conversation.DefaultAgentID > embedder's defaultAgentId input > Sage fallback.`),
11636
+ AdditionalData: z.string().nullable().describe(`
11637
+ * * Field Name: AdditionalData
11638
+ * * Display Name: Additional Data
11639
+ * * SQL Data Type: nvarchar(MAX)
11640
+ * * Description: Free-form JSON extensibility column. Apps that want to attach conversation-scoped metadata (UI state, draft notes, custom analytics tags, etc.) can stuff it here without a schema change. **Namespace your keys** to avoid collisions across apps — store e.g. {"form-builder.lastPreviewRecordId":"...","my-app.fooFlag":true} rather than top-level lastPreviewRecordId. Core MJ code paths do NOT read this column; it's purely for downstream apps. NVARCHAR(MAX) so callers can store arbitrarily large blobs, but treat that as a smell — heavy data belongs in a real entity, not a JSON dump.`),
11572
11641
  User: z.string().describe(`
11573
11642
  * * Field Name: User
11574
11643
  * * Display Name: User Name
11575
11644
  * * SQL Data Type: nvarchar(100)`),
11576
11645
  LinkedEntity: z.string().nullable().describe(`
11577
11646
  * * Field Name: LinkedEntity
11578
- * * Display Name: Linked Entity Type
11647
+ * * Display Name: Linked Entity Name
11579
11648
  * * SQL Data Type: nvarchar(255)`),
11580
11649
  DataContext: z.string().nullable().describe(`
11581
11650
  * * Field Name: DataContext
@@ -11593,6 +11662,14 @@ export const MJConversationSchema = z.object({
11593
11662
  * * Field Name: TestRun
11594
11663
  * * Display Name: Test Run Name
11595
11664
  * * SQL Data Type: nvarchar(255)`),
11665
+ Application: z.string().nullable().describe(`
11666
+ * * Field Name: Application
11667
+ * * Display Name: Application Name
11668
+ * * SQL Data Type: nvarchar(100)`),
11669
+ DefaultAgent: z.string().nullable().describe(`
11670
+ * * Field Name: DefaultAgent
11671
+ * * Display Name: Default Agent Name
11672
+ * * SQL Data Type: nvarchar(255)`),
11596
11673
  });
11597
11674
  /**
11598
11675
  * zod schema definition for the entity MJ: Countries
@@ -14596,7 +14673,7 @@ export const MJEntityFieldSchema = z.object({
14596
14673
  * * ListOrUserEntry
14597
14674
  * * None
14598
14675
  * * Description: Possible Values of None, List, ListOrUserEntry - the last option meaning that the list of possible values are options, but a user can enter anything else desired too.`),
14599
- ExtendedType: z.union([z.literal('Code'), z.literal('Email'), z.literal('FaceTime'), z.literal('Geo'), z.literal('GeoAddress'), z.literal('GeoCity'), z.literal('GeoCountry'), z.literal('GeoLatitude'), z.literal('GeoLongitude'), z.literal('GeoPostalCode'), z.literal('GeoStateProvince'), z.literal('MSTeams'), z.literal('Other'), z.literal('SIP'), z.literal('SMS'), z.literal('Skype'), z.literal('Tel'), z.literal('URL'), z.literal('WhatsApp'), z.literal('ZoomMtg')]).nullable().describe(`
14676
+ ExtendedType: z.union([z.literal('Code'), z.literal('Email'), z.literal('FaceTime'), z.literal('Geo'), z.literal('GeoAddress'), z.literal('GeoCity'), z.literal('GeoCountry'), z.literal('GeoLatitude'), z.literal('GeoLongitude'), z.literal('GeoPostalCode'), z.literal('GeoStateProvince'), z.literal('HTML'), z.literal('Icon'), z.literal('MSTeams'), z.literal('Markdown'), z.literal('Other'), z.literal('SIP'), z.literal('SMS'), z.literal('Skype'), z.literal('Tel'), z.literal('URL'), z.literal('WhatsApp'), z.literal('ZoomMtg')]).nullable().describe(`
14600
14677
  * * Field Name: ExtendedType
14601
14678
  * * Display Name: Extended Type
14602
14679
  * * SQL Data Type: nvarchar(50)
@@ -14613,7 +14690,10 @@ export const MJEntityFieldSchema = z.object({
14613
14690
  * * GeoLongitude
14614
14691
  * * GeoPostalCode
14615
14692
  * * GeoStateProvince
14693
+ * * HTML
14694
+ * * Icon
14616
14695
  * * MSTeams
14696
+ * * Markdown
14617
14697
  * * Other
14618
14698
  * * SIP
14619
14699
  * * SMS
@@ -14622,7 +14702,7 @@ export const MJEntityFieldSchema = z.object({
14622
14702
  * * URL
14623
14703
  * * WhatsApp
14624
14704
  * * ZoomMtg
14625
- * * Description: Defines extended behaviors for a field such as for Email, Web URLs, Code, etc.`),
14705
+ * * Description: Defines extended behaviors for a field such as Email, Web URLs, Code, Markdown, HTML, and Icon. When set to 'Icon', the field's values are treated as icon CSS classes (e.g. Font Awesome) for per-row display in the UI.`),
14626
14706
  CodeType: z.union([z.literal('CSS'), z.literal('HTML'), z.literal('JavaScript'), z.literal('Other'), z.literal('SQL'), z.literal('TypeScript')]).nullable().describe(`
14627
14707
  * * Field Name: CodeType
14628
14708
  * * Display Name: Code Type
@@ -14961,6 +15041,109 @@ export const MJEntityFieldSchema = z.object({
14961
15041
  * * Display Name: Related Entity Class Name
14962
15042
  * * SQL Data Type: nvarchar(MAX)`),
14963
15043
  });
15044
+ /**
15045
+ * zod schema definition for the entity MJ: Entity Form Overrides
15046
+ */
15047
+ export const MJEntityFormOverrideSchema = z.object({
15048
+ ID: z.string().describe(`
15049
+ * * Field Name: ID
15050
+ * * Display Name: ID
15051
+ * * SQL Data Type: uniqueidentifier
15052
+ * * Default Value: newsequentialid()`),
15053
+ EntityID: z.string().describe(`
15054
+ * * Field Name: EntityID
15055
+ * * Display Name: Entity
15056
+ * * SQL Data Type: uniqueidentifier
15057
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
15058
+ * * Description: Foreign key to Entity — which entity this override is for.`),
15059
+ ComponentID: z.string().describe(`
15060
+ * * Field Name: ComponentID
15061
+ * * Display Name: Component
15062
+ * * SQL Data Type: uniqueidentifier
15063
+ * * Related Entity/Foreign Key: MJ: Components (vwComponents.ID)
15064
+ * * Description: Foreign key to Component — the component that renders the form. Must declare componentRole='form' and implement the FormHostProps contract.`),
15065
+ Name: z.string().describe(`
15066
+ * * Field Name: Name
15067
+ * * Display Name: Name
15068
+ * * SQL Data Type: nvarchar(255)
15069
+ * * Description: Human-readable label for this override (e.g., "CSR Customer Form", "Compact Mobile Variant").`),
15070
+ Description: z.string().nullable().describe(`
15071
+ * * Field Name: Description
15072
+ * * Display Name: Description
15073
+ * * SQL Data Type: nvarchar(MAX)
15074
+ * * Description: Optional longer description of what this override is for and when it applies.`),
15075
+ Scope: z.union([z.literal('Global'), z.literal('Role'), z.literal('User')]).describe(`
15076
+ * * Field Name: Scope
15077
+ * * Display Name: Scope
15078
+ * * SQL Data Type: nvarchar(20)
15079
+ * * Default Value: Global
15080
+ * * Value List Type: List
15081
+ * * Possible Values
15082
+ * * Global
15083
+ * * Role
15084
+ * * User
15085
+ * * Description: Resolution tier: User (requires UserID), Role (requires RoleID), or Global. The resolver evaluates in that order — a User row beats a Role row beats a Global row.`),
15086
+ UserID: z.string().nullable().describe(`
15087
+ * * Field Name: UserID
15088
+ * * Display Name: User
15089
+ * * SQL Data Type: uniqueidentifier
15090
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)
15091
+ * * Description: Required when Scope='User'. The single user this override applies to.`),
15092
+ RoleID: z.string().nullable().describe(`
15093
+ * * Field Name: RoleID
15094
+ * * Display Name: Role
15095
+ * * SQL Data Type: uniqueidentifier
15096
+ * * Related Entity/Foreign Key: MJ: Roles (vwRoles.ID)
15097
+ * * Description: Required when Scope='Role'. The role whose members see this override.`),
15098
+ Priority: z.number().describe(`
15099
+ * * Field Name: Priority
15100
+ * * Display Name: Priority
15101
+ * * SQL Data Type: int
15102
+ * * Default Value: 0
15103
+ * * Description: Higher value wins within a scope tier. Ties broken by __mj_CreatedAt DESC. No IsDefault — Priority is the only mechanism.`),
15104
+ Status: z.union([z.literal('Active'), z.literal('Inactive'), z.literal('Pending')]).describe(`
15105
+ * * Field Name: Status
15106
+ * * Display Name: Status
15107
+ * * SQL Data Type: nvarchar(20)
15108
+ * * Default Value: Active
15109
+ * * Value List Type: List
15110
+ * * Possible Values
15111
+ * * Active
15112
+ * * Inactive
15113
+ * * Pending
15114
+ * * Description: Active = eligible for resolution. Inactive = ignored. Pending = AI-authored, awaiting human activation (resolver treats as Inactive).`),
15115
+ Notes: z.string().nullable().describe(`
15116
+ * * Field Name: Notes
15117
+ * * Display Name: Notes
15118
+ * * SQL Data Type: nvarchar(MAX)
15119
+ * * Description: Optional free-form commentary about this override — e.g. who authored it, why it exists, what should change before it goes Global, links to related discussions. Does not affect resolution.`),
15120
+ __mj_CreatedAt: z.date().describe(`
15121
+ * * Field Name: __mj_CreatedAt
15122
+ * * Display Name: Created At
15123
+ * * SQL Data Type: datetimeoffset
15124
+ * * Default Value: getutcdate()`),
15125
+ __mj_UpdatedAt: z.date().describe(`
15126
+ * * Field Name: __mj_UpdatedAt
15127
+ * * Display Name: Updated At
15128
+ * * SQL Data Type: datetimeoffset
15129
+ * * Default Value: getutcdate()`),
15130
+ Entity: z.string().describe(`
15131
+ * * Field Name: Entity
15132
+ * * Display Name: Entity Name
15133
+ * * SQL Data Type: nvarchar(255)`),
15134
+ Component: z.string().describe(`
15135
+ * * Field Name: Component
15136
+ * * Display Name: Component Name
15137
+ * * SQL Data Type: nvarchar(500)`),
15138
+ User: z.string().nullable().describe(`
15139
+ * * Field Name: User
15140
+ * * Display Name: User Name
15141
+ * * SQL Data Type: nvarchar(100)`),
15142
+ Role: z.string().nullable().describe(`
15143
+ * * Field Name: Role
15144
+ * * Display Name: Role Name
15145
+ * * SQL Data Type: nvarchar(50)`),
15146
+ });
14964
15147
  /**
14965
15148
  * zod schema definition for the entity MJ: Entity Organic Key Related Entities
14966
15149
  */
@@ -16335,7 +16518,7 @@ export const MJIntegrationObjectFieldSchema = z.object({
16335
16518
  * * Description: Primary key`),
16336
16519
  IntegrationObjectID: z.string().describe(`
16337
16520
  * * Field Name: IntegrationObjectID
16338
- * * Display Name: Integration Object
16521
+ * * Display Name: Integration Object ID
16339
16522
  * * SQL Data Type: uniqueidentifier
16340
16523
  * * Related Entity/Foreign Key: MJ: Integration Objects (vwIntegrationObjects.ID)
16341
16524
  * * Description: Foreign key to the IntegrationObject this field belongs to`),
@@ -16398,7 +16581,7 @@ export const MJIntegrationObjectFieldSchema = z.object({
16398
16581
  * * Description: Whether this field is part of the object primary key`),
16399
16582
  IsUniqueKey: z.boolean().describe(`
16400
16583
  * * Field Name: IsUniqueKey
16401
- * * Display Name: Is Unique Key
16584
+ * * Display Name: Is Unique
16402
16585
  * * SQL Data Type: bit
16403
16586
  * * Default Value: 0
16404
16587
  * * Description: Whether values must be unique across all records`),
@@ -16463,13 +16646,24 @@ export const MJIntegrationObjectFieldSchema = z.object({
16463
16646
  * * SQL Data Type: bit
16464
16647
  * * Default Value: 0
16465
16648
  * * Description: When true, this field was dynamically discovered by IntrospectSchema and is not defined in static connector metadata.`),
16649
+ MetadataSource: z.union([z.literal('Custom'), z.literal('Declared'), z.literal('Discovered')]).describe(`
16650
+ * * Field Name: MetadataSource
16651
+ * * Display Name: Metadata Source
16652
+ * * SQL Data Type: nvarchar(20)
16653
+ * * Default Value: Declared
16654
+ * * Value List Type: List
16655
+ * * Possible Values
16656
+ * * Custom
16657
+ * * Declared
16658
+ * * Discovered
16659
+ * * Description: Provenance of this IntegrationObjectField row: Declared (from static research/docs), Discovered (from runtime API introspection), Custom (customer-defined custom field, e.g., HubSpot custom property on standard object). Drives merge precedence — discovered/runtime wins for type/constraints; declared wins for description/label/sequence/category.`),
16466
16660
  IntegrationObject: z.string().describe(`
16467
16661
  * * Field Name: IntegrationObject
16468
- * * Display Name: Integration Object Name
16662
+ * * Display Name: Integration Object
16469
16663
  * * SQL Data Type: nvarchar(255)`),
16470
16664
  RelatedIntegrationObject: z.string().nullable().describe(`
16471
16665
  * * Field Name: RelatedIntegrationObject
16472
- * * Display Name: Related Object Name
16666
+ * * Display Name: Related Integration Object Name
16473
16667
  * * SQL Data Type: nvarchar(255)`),
16474
16668
  });
16475
16669
  /**
@@ -16484,7 +16678,7 @@ export const MJIntegrationObjectSchema = z.object({
16484
16678
  * * Description: Primary key`),
16485
16679
  IntegrationID: z.string().describe(`
16486
16680
  * * Field Name: IntegrationID
16487
- * * Display Name: Integration ID
16681
+ * * Display Name: Integration
16488
16682
  * * SQL Data Type: uniqueidentifier
16489
16683
  * * Related Entity/Foreign Key: MJ: Integrations (vwIntegrations.ID)
16490
16684
  * * Description: Foreign key to the Integration that owns this object`),
@@ -16614,9 +16808,113 @@ export const MJIntegrationObjectSchema = z.object({
16614
16808
  * * SQL Data Type: bit
16615
16809
  * * Default Value: 0
16616
16810
  * * Description: When true, this object was dynamically discovered by IntrospectSchema and is not defined in static connector metadata.`),
16811
+ CreateAPIPath: z.string().nullable().describe(`
16812
+ * * Field Name: CreateAPIPath
16813
+ * * Display Name: Create API Path
16814
+ * * SQL Data Type: nvarchar(MAX)
16815
+ * * Description: HTTP path template for create operations. Generic CRUD in BaseRESTIntegrationConnector substitutes parent IDs into {var} placeholders. NULL means create not supported via metadata-driven path.`),
16816
+ CreateMethod: z.string().nullable().describe(`
16817
+ * * Field Name: CreateMethod
16818
+ * * Display Name: Create Method
16819
+ * * SQL Data Type: nvarchar(20)
16820
+ * * Description: HTTP method for create (typically POST). NULL means create not supported via metadata-driven path.`),
16821
+ CreateBodyShape: z.union([z.literal('flat'), z.literal('literal'), z.literal('wrapped')]).nullable().describe(`
16822
+ * * Field Name: CreateBodyShape
16823
+ * * Display Name: Create Body Shape
16824
+ * * SQL Data Type: nvarchar(50)
16825
+ * * Value List Type: List
16826
+ * * Possible Values
16827
+ * * flat
16828
+ * * literal
16829
+ * * wrapped
16830
+ * * Description: Request body shape for create: flat (top-level fields), wrapped (under CreateBodyKey), or literal (connector overrides CreateRecord and supplies own body).`),
16831
+ CreateBodyKey: z.string().nullable().describe(`
16832
+ * * Field Name: CreateBodyKey
16833
+ * * Display Name: Create Body Key
16834
+ * * SQL Data Type: nvarchar(100)
16835
+ * * Description: Wrapper key for create body when CreateBodyShape=wrapped. Example: 'member' for YourMembership which wraps body as {member:{...}}.`),
16836
+ CreateIDLocation: z.union([z.literal('body'), z.literal('header'), z.literal('n/a'), z.literal('path')]).nullable().describe(`
16837
+ * * Field Name: CreateIDLocation
16838
+ * * Display Name: Create ID Location
16839
+ * * SQL Data Type: nvarchar(20)
16840
+ * * Value List Type: List
16841
+ * * Possible Values
16842
+ * * body
16843
+ * * header
16844
+ * * n/a
16845
+ * * path
16846
+ * * Description: Where the created record ID is found in the create response: path (URL of returned Location header), body (parsed from JSON response), header (specific named header).`),
16847
+ UpdateAPIPath: z.string().nullable().describe(`
16848
+ * * Field Name: UpdateAPIPath
16849
+ * * Display Name: Update API Path
16850
+ * * SQL Data Type: nvarchar(MAX)
16851
+ * * Description: HTTP path template for update operations. Typically contains {ID} placeholder substituted with the record ExternalID at runtime.`),
16852
+ UpdateMethod: z.string().nullable().describe(`
16853
+ * * Field Name: UpdateMethod
16854
+ * * Display Name: Update Method
16855
+ * * SQL Data Type: nvarchar(20)
16856
+ * * Description: HTTP method for update (typically PATCH or PUT).`),
16857
+ UpdateBodyShape: z.union([z.literal('flat'), z.literal('literal'), z.literal('wrapped')]).nullable().describe(`
16858
+ * * Field Name: UpdateBodyShape
16859
+ * * Display Name: Update Body Shape
16860
+ * * SQL Data Type: nvarchar(50)
16861
+ * * Value List Type: List
16862
+ * * Possible Values
16863
+ * * flat
16864
+ * * literal
16865
+ * * wrapped
16866
+ * * Description: Request body shape for update: flat | wrapped | literal. See CreateBodyShape.`),
16867
+ UpdateBodyKey: z.string().nullable().describe(`
16868
+ * * Field Name: UpdateBodyKey
16869
+ * * Display Name: Update Body Key
16870
+ * * SQL Data Type: nvarchar(100)
16871
+ * * Description: Wrapper key for update body when UpdateBodyShape=wrapped.`),
16872
+ UpdateIDLocation: z.union([z.literal('body'), z.literal('header'), z.literal('n/a'), z.literal('path')]).nullable().describe(`
16873
+ * * Field Name: UpdateIDLocation
16874
+ * * Display Name: Update ID Location
16875
+ * * SQL Data Type: nvarchar(20)
16876
+ * * Value List Type: List
16877
+ * * Possible Values
16878
+ * * body
16879
+ * * header
16880
+ * * n/a
16881
+ * * path
16882
+ * * Description: For update: where the target record ID is located in the request — typically 'path' (substituted into UpdateAPIPath URL template).`),
16883
+ DeleteAPIPath: z.string().nullable().describe(`
16884
+ * * Field Name: DeleteAPIPath
16885
+ * * Display Name: Delete API Path
16886
+ * * SQL Data Type: nvarchar(MAX)
16887
+ * * Description: HTTP path template for delete operations. Typically contains {ID} placeholder. NULL means delete not supported via metadata-driven path. (Existing DeleteMethod column carries the verb.)`),
16888
+ DeleteIDLocation: z.union([z.literal('body'), z.literal('header'), z.literal('n/a'), z.literal('path')]).nullable().describe(`
16889
+ * * Field Name: DeleteIDLocation
16890
+ * * Display Name: Delete ID Location
16891
+ * * SQL Data Type: nvarchar(20)
16892
+ * * Value List Type: List
16893
+ * * Possible Values
16894
+ * * body
16895
+ * * header
16896
+ * * n/a
16897
+ * * path
16898
+ * * Description: For delete: where the target record ID is located — typically 'path'.`),
16899
+ IncrementalWatermarkField: z.string().nullable().describe(`
16900
+ * * Field Name: IncrementalWatermarkField
16901
+ * * Display Name: Incremental Watermark Field
16902
+ * * SQL Data Type: nvarchar(255)
16903
+ * * Description: Vendor field name marking "last changed" — drives incremental sync filter when SupportsIncrementalSync=1. The exact filter syntax (e.g., $filter=Modified gt {value} or modified_since={value}) lives in Configuration.incrementalFilterFormat. Provable-only: leave NULL if docs do not name a watermark field.`),
16904
+ MetadataSource: z.union([z.literal('Custom'), z.literal('Declared'), z.literal('Discovered')]).describe(`
16905
+ * * Field Name: MetadataSource
16906
+ * * Display Name: Metadata Source
16907
+ * * SQL Data Type: nvarchar(20)
16908
+ * * Default Value: Declared
16909
+ * * Value List Type: List
16910
+ * * Possible Values
16911
+ * * Custom
16912
+ * * Declared
16913
+ * * Discovered
16914
+ * * Description: Provenance of this IntegrationObject row: Declared (from static research/docs), Discovered (from runtime API introspection like Salesforce /describe), Custom (genuinely customer-created, e.g., HubSpot custom objects). Drives merge precedence in IntegrationSchemaSync.`),
16617
16915
  Integration: z.string().describe(`
16618
16916
  * * Field Name: Integration
16619
- * * Display Name: Integration
16917
+ * * Display Name: Integration Name
16620
16918
  * * SQL Data Type: nvarchar(100)`),
16621
16919
  });
16622
16920
  /**
@@ -21449,7 +21747,7 @@ export const MJScheduledJobSchema = z.object({
21449
21747
  * * Description: Whether to send email notifications. Requires NotifyOnSuccess or NotifyOnFailure to also be enabled.`),
21450
21748
  NotifyViaInApp: z.boolean().describe(`
21451
21749
  * * Field Name: NotifyViaInApp
21452
- * * Display Name: Notify Via In App
21750
+ * * Display Name: Notify Via In-App
21453
21751
  * * SQL Data Type: bit
21454
21752
  * * Default Value: 1
21455
21753
  * * Description: Whether to send in-app notifications. Requires NotifyOnSuccess or NotifyOnFailure to also be enabled. Defaults to true.`),
@@ -21494,6 +21792,12 @@ export const MJScheduledJobSchema = z.object({
21494
21792
  * * Display Name: Updated At
21495
21793
  * * SQL Data Type: datetimeoffset
21496
21794
  * * Default Value: getutcdate()`),
21795
+ RunImmediatelyIfNeverRun: z.boolean().describe(`
21796
+ * * Field Name: RunImmediatelyIfNeverRun
21797
+ * * Display Name: Run Immediately If Never Run
21798
+ * * SQL Data Type: bit
21799
+ * * Default Value: 0
21800
+ * * Description: When true AND LastRunAt IS NULL, the scheduler sets NextRunAt to now() instead of the next cron tick on initialization, so the job runs on the next polling cycle. Useful for newly-seeded jobs that should not wait up to a full cron interval before their first execution.`),
21497
21801
  JobType: z.string().describe(`
21498
21802
  * * Field Name: JobType
21499
21803
  * * Display Name: Job Type
@@ -22671,6 +22975,17 @@ export const MJTagSynonymSchema = z.object({
22671
22975
  * * Display Name: Updated At
22672
22976
  * * SQL Data Type: datetimeoffset
22673
22977
  * * Default Value: getutcdate()`),
22978
+ Status: z.union([z.literal('Active'), z.literal('Pending'), z.literal('Rejected')]).describe(`
22979
+ * * Field Name: Status
22980
+ * * Display Name: Status
22981
+ * * SQL Data Type: nvarchar(20)
22982
+ * * Default Value: Active
22983
+ * * Value List Type: List
22984
+ * * Possible Values
22985
+ * * Active
22986
+ * * Pending
22987
+ * * Rejected
22988
+ * * Description: Approval state of the synonym. Active = resolves to its tag during classification. Pending = proposed (e.g. by the LLM or a bulk import) and awaiting human review; does not resolve until approved. Rejected = reviewed and declined; retained for audit and to suppress re-proposal.`),
22674
22989
  Tag: z.string().describe(`
22675
22990
  * * Field Name: Tag
22676
22991
  * * Display Name: Tag Name
@@ -32729,7 +33044,7 @@ let MJAIAgentRunEntity = class MJAIAgentRunEntity extends BaseEntity {
32729
33044
  }
32730
33045
  /**
32731
33046
  * * Field Name: ID
32732
- * * Display Name: ID
33047
+ * * Display Name: Run ID
32733
33048
  * * SQL Data Type: uniqueidentifier
32734
33049
  * * Default Value: newsequentialid()
32735
33050
  * * Description: Unique identifier for this agent run
@@ -32889,7 +33204,7 @@ let MJAIAgentRunEntity = class MJAIAgentRunEntity extends BaseEntity {
32889
33204
  }
32890
33205
  /**
32891
33206
  * * Field Name: TotalTokensUsed
32892
- * * Display Name: Total Tokens Used
33207
+ * * Display Name: Total Tokens
32893
33208
  * * SQL Data Type: int
32894
33209
  * * Default Value: 0
32895
33210
  * * Description: Total number of tokens consumed by all LLM calls during this agent run
@@ -32933,7 +33248,7 @@ let MJAIAgentRunEntity = class MJAIAgentRunEntity extends BaseEntity {
32933
33248
  }
32934
33249
  /**
32935
33250
  * * Field Name: TotalPromptTokensUsed
32936
- * * Display Name: Total Prompt Tokens Used
33251
+ * * Display Name: Prompt Tokens
32937
33252
  * * SQL Data Type: int
32938
33253
  * * Description: Total number of prompt/input tokens used across all AIPromptRun executions during this agent run. This provides a breakdown of the TotalTokensUsed field to help analyze the ratio of input vs output tokens consumed by the agent.
32939
33254
  */
@@ -32945,7 +33260,7 @@ let MJAIAgentRunEntity = class MJAIAgentRunEntity extends BaseEntity {
32945
33260
  }
32946
33261
  /**
32947
33262
  * * Field Name: TotalCompletionTokensUsed
32948
- * * Display Name: Total Completion Tokens Used
33263
+ * * Display Name: Completion Tokens
32949
33264
  * * SQL Data Type: int
32950
33265
  * * Description: Total number of completion/output tokens generated across all AIPromptRun executions during this agent run. This provides a breakdown of the TotalTokensUsed field to help analyze the ratio of input vs output tokens consumed by the agent.
32951
33266
  */
@@ -32957,7 +33272,7 @@ let MJAIAgentRunEntity = class MJAIAgentRunEntity extends BaseEntity {
32957
33272
  }
32958
33273
  /**
32959
33274
  * * Field Name: TotalTokensUsedRollup
32960
- * * Display Name: Total Tokens Used (Rollup)
33275
+ * * Display Name: Total Tokens (Rollup)
32961
33276
  * * SQL Data Type: int
32962
33277
  * * Description: Total tokens used including this agent run and all sub-agent runs. For leaf agents (no sub-agents), this equals TotalTokensUsed. For parent agents, this includes the sum of all descendant agent tokens. Calculated as TotalPromptTokensUsedRollup + TotalCompletionTokensUsedRollup.
32963
33278
  */
@@ -32969,7 +33284,7 @@ let MJAIAgentRunEntity = class MJAIAgentRunEntity extends BaseEntity {
32969
33284
  }
32970
33285
  /**
32971
33286
  * * Field Name: TotalPromptTokensUsedRollup
32972
- * * Display Name: Total Prompt Tokens Used (Rollup)
33287
+ * * Display Name: Prompt Tokens (Rollup)
32973
33288
  * * SQL Data Type: int
32974
33289
  * * Description: Total prompt/input tokens including this agent run and all sub-agent runs. For leaf agents (no sub-agents), this equals TotalPromptTokensUsed. For parent agents, this includes the sum of all descendant agent prompt tokens.
32975
33290
  */
@@ -32981,7 +33296,7 @@ let MJAIAgentRunEntity = class MJAIAgentRunEntity extends BaseEntity {
32981
33296
  }
32982
33297
  /**
32983
33298
  * * Field Name: TotalCompletionTokensUsedRollup
32984
- * * Display Name: Total Completion Tokens Used (Rollup)
33299
+ * * Display Name: Completion Tokens (Rollup)
32985
33300
  * * SQL Data Type: int
32986
33301
  * * Description: Total completion/output tokens including this agent run and all sub-agent runs. For leaf agents (no sub-agents), this equals TotalCompletionTokensUsed. For parent agents, this includes the sum of all descendant agent completion tokens.
32987
33302
  */
@@ -33018,7 +33333,7 @@ let MJAIAgentRunEntity = class MJAIAgentRunEntity extends BaseEntity {
33018
33333
  }
33019
33334
  /**
33020
33335
  * * Field Name: ConversationDetailSequence
33021
- * * Display Name: Conversation Detail Sequence
33336
+ * * Display Name: Sequence
33022
33337
  * * SQL Data Type: int
33023
33338
  * * Description: If a conversation detail spawned multiple agent runs, tracks the order of their spawn/execution
33024
33339
  */
@@ -33081,7 +33396,7 @@ let MJAIAgentRunEntity = class MJAIAgentRunEntity extends BaseEntity {
33081
33396
  }
33082
33397
  /**
33083
33398
  * * Field Name: Message
33084
- * * Display Name: Message
33399
+ * * Display Name: Final Message
33085
33400
  * * SQL Data Type: nvarchar(MAX)
33086
33401
  * * Description: Final message from the agent to the end user at the end of a run
33087
33402
  */
@@ -33171,7 +33486,7 @@ each time the agent processes a prompt step.
33171
33486
  }
33172
33487
  /**
33173
33488
  * * Field Name: Data
33174
- * * Display Name: Data
33489
+ * * Display Name: Execution Data
33175
33490
  * * SQL Data Type: nvarchar(MAX)
33176
33491
  * * Description: JSON serialized data that was passed for template rendering and prompt execution. This data was passed to the agent's prompt as well as all sub-agents.
33177
33492
  */
@@ -33295,7 +33610,7 @@ each time the agent processes a prompt step.
33295
33610
  }
33296
33611
  /**
33297
33612
  * * Field Name: ExternalReferenceID
33298
- * * Display Name: External Reference ID
33613
+ * * Display Name: External Reference
33299
33614
  * * SQL Data Type: nvarchar(200)
33300
33615
  * * Description: Optional reference ID from an external system that initiated this agent run. Enables correlation between the caller's agent run and this execution. For example, when Skip SaaS is called via SkipProxyAgent, this stores the MJ-side Agent Run ID.
33301
33616
  */
@@ -33307,7 +33622,7 @@ each time the agent processes a prompt step.
33307
33622
  }
33308
33623
  /**
33309
33624
  * * Field Name: CompanyID
33310
- * * Display Name: Company ID
33625
+ * * Display Name: Company
33311
33626
  * * SQL Data Type: uniqueidentifier
33312
33627
  * * Description: Optional company scope for multi-tenant memory. When populated, Memory Manager uses this to scope extracted notes to the company. Flows from ExecuteAgentParams.companyId at agent invocation time.
33313
33628
  */
@@ -33318,8 +33633,32 @@ each time the agent processes a prompt step.
33318
33633
  this.Set('CompanyID', value);
33319
33634
  }
33320
33635
  /**
33636
+ * * Field Name: TotalCacheReadTokensUsed
33637
+ * * Display Name: Cache Read Tokens
33638
+ * * SQL Data Type: int
33639
+ * * Description: Total input tokens served from the AI provider's prompt cache (cache reads / hits) across this agent run, summed from child prompt runs' TokensCacheReadRollup and sub-agent runs' TotalCacheReadTokensUsed. Counts only; the cost impact (cache reads are billed at a steep discount) is reflected in TotalCost. The cache counterpart of TotalPromptTokensUsed.
33640
+ */
33641
+ get TotalCacheReadTokensUsed() {
33642
+ return this.Get('TotalCacheReadTokensUsed');
33643
+ }
33644
+ set TotalCacheReadTokensUsed(value) {
33645
+ this.Set('TotalCacheReadTokensUsed', value);
33646
+ }
33647
+ /**
33648
+ * * Field Name: TotalCacheWriteTokensUsed
33649
+ * * Display Name: Cache Write Tokens
33650
+ * * SQL Data Type: int
33651
+ * * Description: Total input tokens written to the AI provider's prompt cache (cache writes / creation) across this agent run, summed from child prompt runs' TokensCacheWriteRollup and sub-agent runs' TotalCacheWriteTokensUsed. Populated for providers that bill cache creation (e.g. Anthropic); 0 or NULL otherwise. The cache counterpart of TotalCompletionTokensUsed.
33652
+ */
33653
+ get TotalCacheWriteTokensUsed() {
33654
+ return this.Get('TotalCacheWriteTokensUsed');
33655
+ }
33656
+ set TotalCacheWriteTokensUsed(value) {
33657
+ this.Set('TotalCacheWriteTokensUsed', value);
33658
+ }
33659
+ /**
33321
33660
  * * Field Name: Agent
33322
- * * Display Name: Agent Name
33661
+ * * Display Name: Agent Details
33323
33662
  * * SQL Data Type: nvarchar(255)
33324
33663
  */
33325
33664
  get Agent() {
@@ -33327,7 +33666,7 @@ each time the agent processes a prompt step.
33327
33666
  }
33328
33667
  /**
33329
33668
  * * Field Name: ParentRun
33330
- * * Display Name: Parent Run Name
33669
+ * * Display Name: Parent Run Details
33331
33670
  * * SQL Data Type: nvarchar(255)
33332
33671
  */
33333
33672
  get ParentRun() {
@@ -33335,7 +33674,7 @@ each time the agent processes a prompt step.
33335
33674
  }
33336
33675
  /**
33337
33676
  * * Field Name: Conversation
33338
- * * Display Name: Conversation Name
33677
+ * * Display Name: Conversation Details
33339
33678
  * * SQL Data Type: nvarchar(255)
33340
33679
  */
33341
33680
  get Conversation() {
@@ -33343,7 +33682,7 @@ each time the agent processes a prompt step.
33343
33682
  }
33344
33683
  /**
33345
33684
  * * Field Name: User
33346
- * * Display Name: User Name
33685
+ * * Display Name: User Details
33347
33686
  * * SQL Data Type: nvarchar(100)
33348
33687
  */
33349
33688
  get User() {
@@ -33351,7 +33690,7 @@ each time the agent processes a prompt step.
33351
33690
  }
33352
33691
  /**
33353
33692
  * * Field Name: ConversationDetail
33354
- * * Display Name: Conversation Detail Name
33693
+ * * Display Name: Conversation Detail Details
33355
33694
  * * SQL Data Type: nvarchar(MAX)
33356
33695
  */
33357
33696
  get ConversationDetail() {
@@ -33359,7 +33698,7 @@ each time the agent processes a prompt step.
33359
33698
  }
33360
33699
  /**
33361
33700
  * * Field Name: LastRun
33362
- * * Display Name: Last Run Name
33701
+ * * Display Name: Last Run Details
33363
33702
  * * SQL Data Type: nvarchar(255)
33364
33703
  */
33365
33704
  get LastRun() {
@@ -33367,7 +33706,7 @@ each time the agent processes a prompt step.
33367
33706
  }
33368
33707
  /**
33369
33708
  * * Field Name: Configuration
33370
- * * Display Name: Configuration Name
33709
+ * * Display Name: Configuration Details
33371
33710
  * * SQL Data Type: nvarchar(100)
33372
33711
  */
33373
33712
  get Configuration() {
@@ -33375,7 +33714,7 @@ each time the agent processes a prompt step.
33375
33714
  }
33376
33715
  /**
33377
33716
  * * Field Name: OverrideModel
33378
- * * Display Name: Override Model Name
33717
+ * * Display Name: Override Model Details
33379
33718
  * * SQL Data Type: nvarchar(50)
33380
33719
  */
33381
33720
  get OverrideModel() {
@@ -33383,7 +33722,7 @@ each time the agent processes a prompt step.
33383
33722
  }
33384
33723
  /**
33385
33724
  * * Field Name: OverrideVendor
33386
- * * Display Name: Override Vendor Name
33725
+ * * Display Name: Override Vendor Details
33387
33726
  * * SQL Data Type: nvarchar(50)
33388
33727
  */
33389
33728
  get OverrideVendor() {
@@ -33391,7 +33730,7 @@ each time the agent processes a prompt step.
33391
33730
  }
33392
33731
  /**
33393
33732
  * * Field Name: ScheduledJobRun
33394
- * * Display Name: Scheduled Job Run Name
33733
+ * * Display Name: Scheduled Job Details
33395
33734
  * * SQL Data Type: nvarchar(200)
33396
33735
  */
33397
33736
  get ScheduledJobRun() {
@@ -33399,7 +33738,7 @@ each time the agent processes a prompt step.
33399
33738
  }
33400
33739
  /**
33401
33740
  * * Field Name: TestRun
33402
- * * Display Name: Test Run Name
33741
+ * * Display Name: Test Run Details
33403
33742
  * * SQL Data Type: nvarchar(255)
33404
33743
  */
33405
33744
  get TestRun() {
@@ -33407,7 +33746,7 @@ each time the agent processes a prompt step.
33407
33746
  }
33408
33747
  /**
33409
33748
  * * Field Name: PrimaryScopeEntity
33410
- * * Display Name: Primary Scope Entity Name
33749
+ * * Display Name: Primary Scope Entity Details
33411
33750
  * * SQL Data Type: nvarchar(255)
33412
33751
  */
33413
33752
  get PrimaryScopeEntity() {
@@ -37188,7 +37527,7 @@ let MJAIModelCostEntity = class MJAIModelCostEntity extends BaseEntity {
37188
37527
  }
37189
37528
  /**
37190
37529
  * * Field Name: ModelID
37191
- * * Display Name: Model ID
37530
+ * * Display Name: Model
37192
37531
  * * SQL Data Type: uniqueidentifier
37193
37532
  * * Related Entity/Foreign Key: MJ: AI Models (vwAIModels.ID)
37194
37533
  */
@@ -37200,7 +37539,7 @@ let MJAIModelCostEntity = class MJAIModelCostEntity extends BaseEntity {
37200
37539
  }
37201
37540
  /**
37202
37541
  * * Field Name: VendorID
37203
- * * Display Name: Vendor ID
37542
+ * * Display Name: Vendor
37204
37543
  * * SQL Data Type: uniqueidentifier
37205
37544
  * * Related Entity/Foreign Key: MJ: AI Vendors (vwAIVendors.ID)
37206
37545
  */
@@ -37267,7 +37606,7 @@ let MJAIModelCostEntity = class MJAIModelCostEntity extends BaseEntity {
37267
37606
  }
37268
37607
  /**
37269
37608
  * * Field Name: PriceTypeID
37270
- * * Display Name: Price Type ID
37609
+ * * Display Name: Price Type
37271
37610
  * * SQL Data Type: uniqueidentifier
37272
37611
  * * Related Entity/Foreign Key: MJ: AI Model Price Types (vwAIModelPriceTypes.ID)
37273
37612
  */
@@ -37303,7 +37642,7 @@ let MJAIModelCostEntity = class MJAIModelCostEntity extends BaseEntity {
37303
37642
  }
37304
37643
  /**
37305
37644
  * * Field Name: UnitTypeID
37306
- * * Display Name: Unit Type ID
37645
+ * * Display Name: Unit Type
37307
37646
  * * SQL Data Type: uniqueidentifier
37308
37647
  * * Related Entity/Foreign Key: MJ: AI Model Price Unit Types (vwAIModelPriceUnitTypes.ID)
37309
37648
  */
@@ -37360,8 +37699,32 @@ let MJAIModelCostEntity = class MJAIModelCostEntity extends BaseEntity {
37360
37699
  return this.Get('__mj_UpdatedAt');
37361
37700
  }
37362
37701
  /**
37702
+ * * Field Name: CacheReadPricePerUnit
37703
+ * * Display Name: Cache Read Price Per Unit
37704
+ * * SQL Data Type: decimal(18, 8)
37705
+ * * Description: Optional price per unit for input tokens served from the AI provider's prompt cache (cache reads / hits), expressed in the same currency and UnitType (e.g. per 1M tokens) as InputPricePerUnit. When NULL, cache-read tokens are priced at InputPricePerUnit. Cache reads are usually far cheaper than uncached input (e.g. ~0.1x for Anthropic/Gemini, ~0.5x for OpenAI).
37706
+ */
37707
+ get CacheReadPricePerUnit() {
37708
+ return this.Get('CacheReadPricePerUnit');
37709
+ }
37710
+ set CacheReadPricePerUnit(value) {
37711
+ this.Set('CacheReadPricePerUnit', value);
37712
+ }
37713
+ /**
37714
+ * * Field Name: CacheWritePricePerUnit
37715
+ * * Display Name: Cache Write Price Per Unit
37716
+ * * SQL Data Type: decimal(18, 8)
37717
+ * * Description: Optional price per unit for input tokens written to the AI provider's prompt cache (cache writes / creation), expressed in the same currency and UnitType as InputPricePerUnit. When NULL, cache-write tokens are priced at InputPricePerUnit. Populated for providers that bill cache creation separately (e.g. Anthropic, ~1.25x input); leave NULL for providers that do not (OpenAI, Gemini), which also report 0 cache-write tokens.
37718
+ */
37719
+ get CacheWritePricePerUnit() {
37720
+ return this.Get('CacheWritePricePerUnit');
37721
+ }
37722
+ set CacheWritePricePerUnit(value) {
37723
+ this.Set('CacheWritePricePerUnit', value);
37724
+ }
37725
+ /**
37363
37726
  * * Field Name: Model
37364
- * * Display Name: Model
37727
+ * * Display Name: Model Name
37365
37728
  * * SQL Data Type: nvarchar(50)
37366
37729
  */
37367
37730
  get Model() {
@@ -37369,7 +37732,7 @@ let MJAIModelCostEntity = class MJAIModelCostEntity extends BaseEntity {
37369
37732
  }
37370
37733
  /**
37371
37734
  * * Field Name: Vendor
37372
- * * Display Name: Vendor
37735
+ * * Display Name: Vendor Name
37373
37736
  * * SQL Data Type: nvarchar(50)
37374
37737
  */
37375
37738
  get Vendor() {
@@ -37377,7 +37740,7 @@ let MJAIModelCostEntity = class MJAIModelCostEntity extends BaseEntity {
37377
37740
  }
37378
37741
  /**
37379
37742
  * * Field Name: PriceType
37380
- * * Display Name: Price Type
37743
+ * * Display Name: Price Type Name
37381
37744
  * * SQL Data Type: nvarchar(100)
37382
37745
  */
37383
37746
  get PriceType() {
@@ -37385,7 +37748,7 @@ let MJAIModelCostEntity = class MJAIModelCostEntity extends BaseEntity {
37385
37748
  }
37386
37749
  /**
37387
37750
  * * Field Name: UnitType
37388
- * * Display Name: Unit Type
37751
+ * * Display Name: Unit Type Name
37389
37752
  * * SQL Data Type: nvarchar(100)
37390
37753
  */
37391
37754
  get UnitType() {
@@ -39573,7 +39936,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
39573
39936
  }
39574
39937
  /**
39575
39938
  * * Field Name: RunAt
39576
- * * Display Name: Run At
39939
+ * * Display Name: Started At
39577
39940
  * * SQL Data Type: datetimeoffset
39578
39941
  * * Default Value: sysdatetimeoffset()
39579
39942
  * * Description: When the prompt run started, with timezone offset information.
@@ -39634,7 +39997,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
39634
39997
  }
39635
39998
  /**
39636
39999
  * * Field Name: TokensUsed
39637
- * * Display Name: Total Tokens Used
40000
+ * * Display Name: Tokens Used
39638
40001
  * * SQL Data Type: int
39639
40002
  * * Description: Total number of tokens used (prompt + completion).
39640
40003
  */
@@ -39794,7 +40157,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
39794
40157
  }
39795
40158
  /**
39796
40159
  * * Field Name: CostCurrency
39797
- * * Display Name: Cost Currency
40160
+ * * Display Name: Currency
39798
40161
  * * SQL Data Type: nvarchar(10)
39799
40162
  * * Description: ISO 4217 currency code for the Cost field (e.g., USD, EUR, GBP). Different AI providers may use different currencies.
39800
40163
  */
@@ -39806,7 +40169,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
39806
40169
  }
39807
40170
  /**
39808
40171
  * * Field Name: TokensUsedRollup
39809
- * * Display Name: Total Tokens (Rollup)
40172
+ * * Display Name: Tokens Used (Rollup)
39810
40173
  * * SQL Data Type: int
39811
40174
  * * Description: Total tokens used including this execution and all child/grandchild executions. This provides a complete view of token usage for hierarchical prompt trees. Calculated as TokensPromptRollup + TokensCompletionRollup.
39812
40175
  */
@@ -39950,7 +40313,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
39950
40313
  }
39951
40314
  /**
39952
40315
  * * Field Name: LogProbs
39953
- * * Display Name: Log Probabilities
40316
+ * * Display Name: Log Probs
39954
40317
  * * SQL Data Type: bit
39955
40318
  * * Description: Whether log probabilities were requested for this run
39956
40319
  */
@@ -39962,7 +40325,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
39962
40325
  }
39963
40326
  /**
39964
40327
  * * Field Name: TopLogProbs
39965
- * * Display Name: Top Log Probabilities
40328
+ * * Display Name: Top Log Probs
39966
40329
  * * SQL Data Type: int
39967
40330
  * * Description: Number of top log probabilities requested per token (if LogProbs is true)
39968
40331
  */
@@ -39986,7 +40349,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
39986
40349
  }
39987
40350
  /**
39988
40351
  * * Field Name: ValidationAttemptCount
39989
- * * Display Name: Validation Attempt Count
40352
+ * * Display Name: Validation Attempts
39990
40353
  * * SQL Data Type: int
39991
40354
  * * Description: Total number of validation attempts made (including the initial attempt)
39992
40355
  */
@@ -39998,7 +40361,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
39998
40361
  }
39999
40362
  /**
40000
40363
  * * Field Name: SuccessfulValidationCount
40001
- * * Display Name: Successful Validation Count
40364
+ * * Display Name: Successful Validations
40002
40365
  * * SQL Data Type: int
40003
40366
  * * Description: Number of validation attempts that passed validation
40004
40367
  */
@@ -40010,7 +40373,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
40010
40373
  }
40011
40374
  /**
40012
40375
  * * Field Name: FinalValidationPassed
40013
- * * Display Name: Final Validation Passed
40376
+ * * Display Name: Validation Passed
40014
40377
  * * SQL Data Type: bit
40015
40378
  * * Description: Whether validation ultimately passed (1) or failed (0)
40016
40379
  */
@@ -40046,7 +40409,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
40046
40409
  }
40047
40410
  /**
40048
40411
  * * Field Name: MaxRetriesConfigured
40049
- * * Display Name: Max Retries Configured
40412
+ * * Display Name: Max Retries
40050
40413
  * * SQL Data Type: int
40051
40414
  * * Description: Maximum number of retries configured on the prompt
40052
40415
  */
@@ -40130,7 +40493,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
40130
40493
  }
40131
40494
  /**
40132
40495
  * * Field Name: ValidationAttempts
40133
- * * Display Name: Validation Attempts
40496
+ * * Display Name: Validation Attempt Logs
40134
40497
  * * SQL Data Type: nvarchar(MAX)
40135
40498
  * * Description: JSON array containing detailed information about each validation attempt
40136
40499
  */
@@ -40191,7 +40554,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
40191
40554
  }
40192
40555
  /**
40193
40556
  * * Field Name: OriginalModelID
40194
- * * Display Name: Original Model
40557
+ * * Display Name: Original Model ID
40195
40558
  * * SQL Data Type: uniqueidentifier
40196
40559
  * * Related Entity/Foreign Key: MJ: AI Models (vwAIModels.ID)
40197
40560
  * * Description: The AI Model ID that was originally attempted before any failovers
@@ -40204,7 +40567,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
40204
40567
  }
40205
40568
  /**
40206
40569
  * * Field Name: OriginalRequestStartTime
40207
- * * Display Name: Original Request Start Time
40570
+ * * Display Name: Original Request Start
40208
40571
  * * SQL Data Type: datetimeoffset
40209
40572
  * * Description: Timestamp when the original request started, before any failovers
40210
40573
  */
@@ -40241,7 +40604,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
40241
40604
  }
40242
40605
  /**
40243
40606
  * * Field Name: ModelSelection
40244
- * * Display Name: Model Selection
40607
+ * * Display Name: Model Selection Details
40245
40608
  * * SQL Data Type: nvarchar(MAX)
40246
40609
  * * Description: JSON object containing detailed model selection information including all models considered, their scores, and the selection rationale
40247
40610
  */
@@ -40352,7 +40715,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
40352
40715
  }
40353
40716
  /**
40354
40717
  * * Field Name: JudgeID
40355
- * * Display Name: Judge
40718
+ * * Display Name: Judge Prompt
40356
40719
  * * SQL Data Type: uniqueidentifier
40357
40720
  * * Related Entity/Foreign Key: MJ: AI Prompts (vwAIPrompts.ID)
40358
40721
  * * Description: ID of the AIPrompt used as a judge to evaluate and rank multiple parallel execution results
@@ -40476,7 +40839,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
40476
40839
  }
40477
40840
  /**
40478
40841
  * * Field Name: ModelSpecificResponseDetails
40479
- * * Display Name: Model Specific Response Details
40842
+ * * Display Name: Provider Response Details
40480
40843
  * * SQL Data Type: nvarchar(MAX)
40481
40844
  * * Description: JSON field containing provider-specific response metadata and details not captured in standard fields. Structure varies by AI provider.
40482
40845
  */
@@ -40548,6 +40911,54 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
40548
40911
  this.Set('AssistantPrefill', value);
40549
40912
  }
40550
40913
  /**
40914
+ * * Field Name: TokensCacheRead
40915
+ * * Display Name: Tokens Cache Read
40916
+ * * SQL Data Type: int
40917
+ * * Description: Number of input tokens served from the AI provider's prompt cache (a cache READ / hit) for this run, as reported by the provider. Counts only; no cost is derived here. NULL if the provider did not report cache reads or caching did not engage. Distinct from CacheHit/CacheKey, which track MemberJunction's own result cache.
40918
+ */
40919
+ get TokensCacheRead() {
40920
+ return this.Get('TokensCacheRead');
40921
+ }
40922
+ set TokensCacheRead(value) {
40923
+ this.Set('TokensCacheRead', value);
40924
+ }
40925
+ /**
40926
+ * * Field Name: TokensCacheWrite
40927
+ * * Display Name: Tokens Cache Write
40928
+ * * SQL Data Type: int
40929
+ * * Description: Number of input tokens written to the AI provider's prompt cache (a cache WRITE / creation) for this run, as reported by the provider. Populated for providers that report cache writes (e.g. Anthropic cache_creation_input_tokens); NULL or 0 for providers that do not bill/report writes (OpenAI, Gemini, Groq, Cerebras). Counts only; no cost is derived here.
40930
+ */
40931
+ get TokensCacheWrite() {
40932
+ return this.Get('TokensCacheWrite');
40933
+ }
40934
+ set TokensCacheWrite(value) {
40935
+ this.Set('TokensCacheWrite', value);
40936
+ }
40937
+ /**
40938
+ * * Field Name: TokensCacheReadRollup
40939
+ * * Display Name: Tokens Cache Read (Rollup)
40940
+ * * SQL Data Type: int
40941
+ * * Description: Rollup of TokensCacheRead across this prompt run and all of its descendant prompt runs (e.g. the individual attempts behind a parallel / multi-attempt / failover consolidation). For a leaf run this equals TokensCacheRead. Use this (not TokensCacheRead) when aggregating cache reads up a prompt-run or agent-run hierarchy so fan-out provider calls are not under-counted.
40942
+ */
40943
+ get TokensCacheReadRollup() {
40944
+ return this.Get('TokensCacheReadRollup');
40945
+ }
40946
+ set TokensCacheReadRollup(value) {
40947
+ this.Set('TokensCacheReadRollup', value);
40948
+ }
40949
+ /**
40950
+ * * Field Name: TokensCacheWriteRollup
40951
+ * * Display Name: Tokens Cache Write (Rollup)
40952
+ * * SQL Data Type: int
40953
+ * * Description: Rollup of TokensCacheWrite across this prompt run and all of its descendant prompt runs. For a leaf run this equals TokensCacheWrite. Mirrors TokensUsedRollup/TokensPromptRollup; populated for providers that report cache writes (e.g. Anthropic), otherwise 0 or NULL.
40954
+ */
40955
+ get TokensCacheWriteRollup() {
40956
+ return this.Get('TokensCacheWriteRollup');
40957
+ }
40958
+ set TokensCacheWriteRollup(value) {
40959
+ this.Set('TokensCacheWriteRollup', value);
40960
+ }
40961
+ /**
40551
40962
  * * Field Name: Prompt
40552
40963
  * * Display Name: Prompt
40553
40964
  * * SQL Data Type: nvarchar(255)
@@ -40613,7 +41024,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
40613
41024
  }
40614
41025
  /**
40615
41026
  * * Field Name: RerunFromPromptRun
40616
- * * Display Name: Rerun From
41027
+ * * Display Name: Rerun From Run
40617
41028
  * * SQL Data Type: nvarchar(255)
40618
41029
  */
40619
41030
  get RerunFromPromptRun() {
@@ -40653,7 +41064,7 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
40653
41064
  }
40654
41065
  /**
40655
41066
  * * Field Name: RootRerunFromPromptRunID
40656
- * * Display Name: Root Rerun From
41067
+ * * Display Name: Root Rerun Source
40657
41068
  * * SQL Data Type: uniqueidentifier
40658
41069
  */
40659
41070
  get RootRerunFromPromptRunID() {
@@ -43920,6 +44331,41 @@ let MJApplicationEntity = class MJApplicationEntity extends BaseEntity {
43920
44331
  return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
43921
44332
  }
43922
44333
  /**
44334
+ * MJ: Applications - Delete method override to wrap in transaction since CascadeDeletes is true.
44335
+ * Wrapping in a transaction ensures that all cascade delete operations are handled atomically.
44336
+ * @public
44337
+ * @method
44338
+ * @override
44339
+ * @memberof MJApplicationEntity
44340
+ * @returns {Promise<boolean>} - true if successful, false otherwise
44341
+ */
44342
+ async Delete(options) {
44343
+ if (Metadata.Provider.ProviderType === ProviderType.Database) { // global-provider-ok: codegen runs offline against a single provider
44344
+ // For database providers, use the transaction methods directly
44345
+ const provider = Metadata.Provider; // global-provider-ok: codegen runs offline against a single provider
44346
+ try {
44347
+ await provider.BeginTransaction();
44348
+ const result = await super.Delete(options);
44349
+ if (result) {
44350
+ await provider.CommitTransaction();
44351
+ return true;
44352
+ }
44353
+ else {
44354
+ await provider.RollbackTransaction();
44355
+ return false;
44356
+ }
44357
+ }
44358
+ catch (error) {
44359
+ await provider.RollbackTransaction();
44360
+ throw error;
44361
+ }
44362
+ }
44363
+ else {
44364
+ // For network providers, cascading deletes are handled server-side
44365
+ return super.Delete(options);
44366
+ }
44367
+ }
44368
+ /**
43923
44369
  * * Field Name: ID
43924
44370
  * * Display Name: ID
43925
44371
  * * SQL Data Type: uniqueidentifier
@@ -45629,7 +46075,7 @@ let MJArtifactUseEntity = class MJArtifactUseEntity extends BaseEntity {
45629
46075
  /**
45630
46076
  * * Field Name: ArtifactVersion
45631
46077
  * * Display Name: Artifact Version
45632
- * * SQL Data Type: int
46078
+ * * SQL Data Type: nvarchar(255)
45633
46079
  */
45634
46080
  get ArtifactVersion() {
45635
46081
  return this.Get('ArtifactVersion');
@@ -45775,7 +46221,7 @@ let MJArtifactVersionAttributeEntity = class MJArtifactVersionAttributeEntity ex
45775
46221
  /**
45776
46222
  * * Field Name: ArtifactVersion
45777
46223
  * * Display Name: Artifact Version
45778
- * * SQL Data Type: int
46224
+ * * SQL Data Type: nvarchar(255)
45779
46225
  */
45780
46226
  get ArtifactVersion() {
45781
46227
  return this.Get('ArtifactVersion');
@@ -46929,7 +47375,7 @@ let MJCollectionArtifactEntity = class MJCollectionArtifactEntity extends BaseEn
46929
47375
  /**
46930
47376
  * * Field Name: ArtifactVersion
46931
47377
  * * Display Name: Artifact Version
46932
- * * SQL Data Type: int
47378
+ * * SQL Data Type: nvarchar(255)
46933
47379
  */
46934
47380
  get ArtifactVersion() {
46935
47381
  return this.Get('ArtifactVersion');
@@ -54052,7 +54498,7 @@ let MJConversationDetailArtifactEntity = class MJConversationDetailArtifactEntit
54052
54498
  /**
54053
54499
  * * Field Name: ArtifactVersion
54054
54500
  * * Display Name: Artifact Version Summary
54055
- * * SQL Data Type: int
54501
+ * * SQL Data Type: nvarchar(255)
54056
54502
  */
54057
54503
  get ArtifactVersion() {
54058
54504
  return this.Get('ArtifactVersion');
@@ -54067,7 +54513,7 @@ export { MJConversationDetailArtifactEntity };
54067
54513
  * * Schema: __mj
54068
54514
  * * Base Table: ConversationDetailAttachment
54069
54515
  * * Base View: vwConversationDetailAttachments
54070
- * * @description Stores attachments (images, videos, audio, documents) for conversation messages. Supports both inline base64 storage for small files and reference to MJStorage for large files.
54516
+ * * @description DEPRECATED: file uploads now flow through ConversationArtifactVersion so they share storage, identity, versioning, permissions, and the artifact-tool dispatch path. Table, generated entity class, GraphQL types, and stored procedures all remain functional — runtime use produces a console warning per the framework's standard handling of Status='Deprecated'. See packages/AI/Agents/docs/ARTIFACT_TOOLS_GUIDE.md for migration guidance. Originally: Stores attachments (images, videos, audio, documents) for conversation messages.
54071
54517
  * * Primary Key: ID
54072
54518
  * @extends {BaseEntity}
54073
54519
  * @class
@@ -54345,7 +54791,7 @@ let MJConversationDetailAttachmentEntity = class MJConversationDetailAttachmentE
54345
54791
  /**
54346
54792
  * * Field Name: ArtifactVersion
54347
54793
  * * Display Name: Artifact Version Record
54348
- * * SQL Data Type: int
54794
+ * * SQL Data Type: nvarchar(255)
54349
54795
  */
54350
54796
  get ArtifactVersion() {
54351
54797
  return this.Get('ArtifactVersion');
@@ -55070,6 +55516,49 @@ let MJConversationEntity = class MJConversationEntity extends BaseEntity {
55070
55516
  }
55071
55517
  }
55072
55518
  /**
55519
+ * Validate() method override for MJ: Conversations entity. This is an auto-generated method that invokes the generated validators for this entity for the following fields:
55520
+ * * Table-Level: Ensures that records scoped as 'Global' do not have an associated Application ID, while records scoped to 'Application' or 'Both' must have a valid Application ID assigned.
55521
+ * * Table-Level: Both the linked entity and the linked record must be provided together, or both must be left empty, to ensure that a reference to an external record is complete.
55522
+ * @public
55523
+ * @method
55524
+ * @override
55525
+ */
55526
+ Validate() {
55527
+ const result = super.Validate();
55528
+ this.ValidateApplicationScopeAndIDConsistency(result);
55529
+ this.ValidateLinkedEntityAndRecordCoexistence(result);
55530
+ result.Success = result.Success && (result.Errors.length === 0);
55531
+ return result;
55532
+ }
55533
+ /**
55534
+ * Ensures that records scoped as 'Global' do not have an associated Application ID, while records scoped to 'Application' or 'Both' must have a valid Application ID assigned.
55535
+ * @param result - the ValidationResult object to add any errors or warnings to
55536
+ * @public
55537
+ * @method
55538
+ */
55539
+ ValidateApplicationScopeAndIDConsistency(result) {
55540
+ // If the scope is Global, ApplicationID must be null
55541
+ if (this.ApplicationScope === 'Global' && this.ApplicationID != null) {
55542
+ result.Errors.push(new ValidationErrorInfo("ApplicationID", "Application ID must be empty when the application scope is set to Global.", this.ApplicationID, ValidationErrorType.Failure));
55543
+ }
55544
+ // If the scope is Application or Both, ApplicationID must be provided
55545
+ if ((this.ApplicationScope === 'Application' || this.ApplicationScope === 'Both') && this.ApplicationID == null) {
55546
+ result.Errors.push(new ValidationErrorInfo("ApplicationID", "An Application ID is required when the application scope is set to Application or Both.", this.ApplicationID, ValidationErrorType.Failure));
55547
+ }
55548
+ }
55549
+ /**
55550
+ * Both the linked entity and the linked record must be provided together, or both must be left empty, to ensure that a reference to an external record is complete.
55551
+ * @param result - the ValidationResult object to add any errors or warnings to
55552
+ * @public
55553
+ * @method
55554
+ */
55555
+ ValidateLinkedEntityAndRecordCoexistence(result) {
55556
+ // The constraint ensures that LinkedEntityID and LinkedRecordID are either both null or both populated
55557
+ if ((this.LinkedEntityID == null && this.LinkedRecordID != null) || (this.LinkedEntityID != null && this.LinkedRecordID == null)) {
55558
+ result.Errors.push(new ValidationErrorInfo("LinkedEntityID", "Both Linked Entity and Linked Record must be provided together, or both must be empty.", this.LinkedEntityID, ValidationErrorType.Failure));
55559
+ }
55560
+ }
55561
+ /**
55073
55562
  * * Field Name: ID
55074
55563
  * * Display Name: ID
55075
55564
  * * SQL Data Type: uniqueidentifier
@@ -55158,6 +55647,7 @@ let MJConversationEntity = class MJConversationEntity extends BaseEntity {
55158
55647
  * * Display Name: Linked Entity
55159
55648
  * * SQL Data Type: uniqueidentifier
55160
55649
  * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
55650
+ * * Description: Generic 'what is this conversation about?' pointer. Names the Entity whose record this conversation references (e.g. MJ: Components when the conversation was started in the Form Builder cockpit about a specific form). Paired with LinkedRecordID via the CK_Conversation_LinkBinding cross-column CHECK — both NULL or both populated. Surfaces use this to filter their conversation list to entries about the currently-loaded record (e.g. 'show prior conversations about THIS form'). Reusable beyond Form Builder by any future dashboard / record-context surface that wants the same UX without further schema work.
55161
55651
  */
55162
55652
  get LinkedEntityID() {
55163
55653
  return this.Get('LinkedEntityID');
@@ -55169,7 +55659,7 @@ let MJConversationEntity = class MJConversationEntity extends BaseEntity {
55169
55659
  * * Field Name: LinkedRecordID
55170
55660
  * * Display Name: Linked Record ID
55171
55661
  * * SQL Data Type: nvarchar(500)
55172
- * * Description: ID of a related record this conversation is about (support ticket, order, etc.).
55662
+ * * Description: The primary key of the record this conversation is about, serialized as a string so any entity type can be referenced regardless of its PK shape (UUID, int, composite). Used together with LinkedEntityID — see CK_Conversation_LinkBinding. Wide enough (NVARCHAR(500) in the baseline schema) to handle chunky composite keys. Surfaces query by (LinkedEntityID, LinkedRecordID) — or by LinkedRecordID IN (...) when a lineage of records shares conversation context (e.g. multiple Component versions of the same form lineage).
55173
55663
  */
55174
55664
  get LinkedRecordID() {
55175
55665
  return this.Get('LinkedRecordID');
@@ -55276,6 +55766,62 @@ let MJConversationEntity = class MJConversationEntity extends BaseEntity {
55276
55766
  this.Set('TestRunID', value);
55277
55767
  }
55278
55768
  /**
55769
+ * * Field Name: ApplicationScope
55770
+ * * Display Name: Application Scope
55771
+ * * SQL Data Type: nvarchar(20)
55772
+ * * Default Value: Global
55773
+ * * Value List Type: List
55774
+ * * Possible Values
55775
+ * * Application
55776
+ * * Both
55777
+ * * Global
55778
+ * * Description: Controls where this conversation surfaces in the UI. Global = appears in the main Chat app (no application binding). Application = scoped to a specific Application's embedded chat surface (e.g. the Form Builder cockpit); hidden from the main chat list by default. Both = explicitly promoted to appear in BOTH the main chat list and the bound Application's embedded surface. Defaults to Global so pre-existing conversations stay visible in main chat. Paired with ApplicationID via a cross-column CHECK constraint: Global => ApplicationID IS NULL; Application or Both => ApplicationID IS NOT NULL.
55779
+ */
55780
+ get ApplicationScope() {
55781
+ return this.Get('ApplicationScope');
55782
+ }
55783
+ set ApplicationScope(value) {
55784
+ this.Set('ApplicationScope', value);
55785
+ }
55786
+ /**
55787
+ * * Field Name: ApplicationID
55788
+ * * Display Name: Application
55789
+ * * SQL Data Type: uniqueidentifier
55790
+ * * Related Entity/Foreign Key: MJ: Applications (vwApplications.ID)
55791
+ * * Description: Optional Application this conversation is bound to. Required when ApplicationScope is 'Application' or 'Both'; must be NULL when ApplicationScope is 'Global'. Enforced by the CK_Conversation_ScopeAppBinding cross-column CHECK. Used by embedded chat surfaces (e.g. the Form Builder cockpit) to filter their conversation list to just their own application's conversations.
55792
+ */
55793
+ get ApplicationID() {
55794
+ return this.Get('ApplicationID');
55795
+ }
55796
+ set ApplicationID(value) {
55797
+ this.Set('ApplicationID', value);
55798
+ }
55799
+ /**
55800
+ * * Field Name: DefaultAgentID
55801
+ * * Display Name: Default Agent
55802
+ * * SQL Data Type: uniqueidentifier
55803
+ * * Related Entity/Foreign Key: MJ: AI Agents (vwAIAgents.ID)
55804
+ * * Description: Optional per-conversation default AI agent. When set, the message router targets this agent for non-mention, non-continuity messages instead of falling through to the embedder-supplied default (e.g. Form Builder) or to Sage. Lets a user pin a conversation to a specific specialist agent (e.g. Research Agent) so Sage is never invoked for that thread. Routing precedence: @mention > continuity (last responder) > Conversation.DefaultAgentID > embedder's defaultAgentId input > Sage fallback.
55805
+ */
55806
+ get DefaultAgentID() {
55807
+ return this.Get('DefaultAgentID');
55808
+ }
55809
+ set DefaultAgentID(value) {
55810
+ this.Set('DefaultAgentID', value);
55811
+ }
55812
+ /**
55813
+ * * Field Name: AdditionalData
55814
+ * * Display Name: Additional Data
55815
+ * * SQL Data Type: nvarchar(MAX)
55816
+ * * Description: Free-form JSON extensibility column. Apps that want to attach conversation-scoped metadata (UI state, draft notes, custom analytics tags, etc.) can stuff it here without a schema change. **Namespace your keys** to avoid collisions across apps — store e.g. {"form-builder.lastPreviewRecordId":"...","my-app.fooFlag":true} rather than top-level lastPreviewRecordId. Core MJ code paths do NOT read this column; it's purely for downstream apps. NVARCHAR(MAX) so callers can store arbitrarily large blobs, but treat that as a smell — heavy data belongs in a real entity, not a JSON dump.
55817
+ */
55818
+ get AdditionalData() {
55819
+ return this.Get('AdditionalData');
55820
+ }
55821
+ set AdditionalData(value) {
55822
+ this.Set('AdditionalData', value);
55823
+ }
55824
+ /**
55279
55825
  * * Field Name: User
55280
55826
  * * Display Name: User Name
55281
55827
  * * SQL Data Type: nvarchar(100)
@@ -55285,7 +55831,7 @@ let MJConversationEntity = class MJConversationEntity extends BaseEntity {
55285
55831
  }
55286
55832
  /**
55287
55833
  * * Field Name: LinkedEntity
55288
- * * Display Name: Linked Entity Type
55834
+ * * Display Name: Linked Entity Name
55289
55835
  * * SQL Data Type: nvarchar(255)
55290
55836
  */
55291
55837
  get LinkedEntity() {
@@ -55323,6 +55869,22 @@ let MJConversationEntity = class MJConversationEntity extends BaseEntity {
55323
55869
  get TestRun() {
55324
55870
  return this.Get('TestRun');
55325
55871
  }
55872
+ /**
55873
+ * * Field Name: Application
55874
+ * * Display Name: Application Name
55875
+ * * SQL Data Type: nvarchar(100)
55876
+ */
55877
+ get Application() {
55878
+ return this.Get('Application');
55879
+ }
55880
+ /**
55881
+ * * Field Name: DefaultAgent
55882
+ * * Display Name: Default Agent Name
55883
+ * * SQL Data Type: nvarchar(255)
55884
+ */
55885
+ get DefaultAgent() {
55886
+ return this.Get('DefaultAgent');
55887
+ }
55326
55888
  };
55327
55889
  MJConversationEntity = __decorate([
55328
55890
  RegisterClass(BaseEntity, 'MJ: Conversations')
@@ -62777,7 +63339,10 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
62777
63339
  * * GeoLongitude
62778
63340
  * * GeoPostalCode
62779
63341
  * * GeoStateProvince
63342
+ * * HTML
63343
+ * * Icon
62780
63344
  * * MSTeams
63345
+ * * Markdown
62781
63346
  * * Other
62782
63347
  * * SIP
62783
63348
  * * SMS
@@ -62786,7 +63351,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
62786
63351
  * * URL
62787
63352
  * * WhatsApp
62788
63353
  * * ZoomMtg
62789
- * * Description: Defines extended behaviors for a field such as for Email, Web URLs, Code, etc.
63354
+ * * Description: Defines extended behaviors for a field such as Email, Web URLs, Code, Markdown, HTML, and Icon. When set to 'Icon', the field's values are treated as icon CSS classes (e.g. Font Awesome) for per-row display in the UI.
62790
63355
  */
62791
63356
  get ExtendedType() {
62792
63357
  return this.Get('ExtendedType');
@@ -63494,6 +64059,274 @@ MJEntityFieldEntity = __decorate([
63494
64059
  RegisterClass(BaseEntity, 'MJ: Entity Fields')
63495
64060
  ], MJEntityFieldEntity);
63496
64061
  export { MJEntityFieldEntity };
64062
+ /**
64063
+ * MJ: Entity Form Overrides - strongly typed entity sub-class
64064
+ * * Schema: __mj
64065
+ * * Base Table: EntityFormOverride
64066
+ * * Base View: vwEntityFormOverrides
64067
+ * * @description Points an Entity at a Component to serve as its form at runtime. Scoped to User > Role > Global with priority-based resolution. When present and Active, takes precedence over the entity's @RegisterClass-registered or CodeGen-generated Angular form.
64068
+ * * Primary Key: ID
64069
+ * @extends {BaseEntity}
64070
+ * @class
64071
+ * @public
64072
+ */
64073
+ let MJEntityFormOverrideEntity = class MJEntityFormOverrideEntity extends BaseEntity {
64074
+ /**
64075
+ * Loads the MJ: Entity Form Overrides record from the database
64076
+ * @param ID: string - primary key value to load the MJ: Entity Form Overrides record.
64077
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
64078
+ * @returns {Promise<boolean>} - true if successful, false otherwise
64079
+ * @public
64080
+ * @async
64081
+ * @memberof MJEntityFormOverrideEntity
64082
+ * @method
64083
+ * @override
64084
+ */
64085
+ async Load(ID, EntityRelationshipsToLoad) {
64086
+ const compositeKey = new CompositeKey();
64087
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
64088
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
64089
+ }
64090
+ /**
64091
+ * Validate() method override for MJ: Entity Form Overrides entity. This is an auto-generated method that invokes the generated validators for this entity for the following fields:
64092
+ * * Table-Level: Ensures that the correct identifier is provided based on the selected scope: 'User' requires a User ID without a Role, 'Role' requires a Role ID without a User, and 'Global' requires both to be empty. This prevents data inconsistency by ensuring records are correctly assigned to exactly one target type.
64093
+ * @public
64094
+ * @method
64095
+ * @override
64096
+ */
64097
+ Validate() {
64098
+ const result = super.Validate();
64099
+ this.ValidateScopeAndIdentifierConsistency(result);
64100
+ result.Success = result.Success && (result.Errors.length === 0);
64101
+ return result;
64102
+ }
64103
+ /**
64104
+ * Ensures that the correct identifier is provided based on the selected scope: 'User' requires a User ID without a Role, 'Role' requires a Role ID without a User, and 'Global' requires both to be empty. This prevents data inconsistency by ensuring records are correctly assigned to exactly one target type.
64105
+ * @param result - the ValidationResult object to add any errors or warnings to
64106
+ * @public
64107
+ * @method
64108
+ */
64109
+ ValidateScopeAndIdentifierConsistency(result) {
64110
+ if (this.Scope === 'User') {
64111
+ if (this.UserID == null || this.RoleID != null) {
64112
+ result.Errors.push(new ValidationErrorInfo("UserID", "When the scope is set to 'User', a User must be specified and the Role must be left empty.", this.UserID, ValidationErrorType.Failure));
64113
+ }
64114
+ }
64115
+ else if (this.Scope === 'Role') {
64116
+ if (this.RoleID == null || this.UserID != null) {
64117
+ result.Errors.push(new ValidationErrorInfo("RoleID", "When the scope is set to 'Role', a Role must be specified and the User must be left empty.", this.RoleID, ValidationErrorType.Failure));
64118
+ }
64119
+ }
64120
+ else if (this.Scope === 'Global') {
64121
+ if (this.UserID != null || this.RoleID != null) {
64122
+ result.Errors.push(new ValidationErrorInfo("Scope", "When the scope is set to 'Global', both the User and Role fields must be empty.", this.Scope, ValidationErrorType.Failure));
64123
+ }
64124
+ }
64125
+ }
64126
+ /**
64127
+ * * Field Name: ID
64128
+ * * Display Name: ID
64129
+ * * SQL Data Type: uniqueidentifier
64130
+ * * Default Value: newsequentialid()
64131
+ */
64132
+ get ID() {
64133
+ return this.Get('ID');
64134
+ }
64135
+ set ID(value) {
64136
+ this.Set('ID', value);
64137
+ }
64138
+ /**
64139
+ * * Field Name: EntityID
64140
+ * * Display Name: Entity
64141
+ * * SQL Data Type: uniqueidentifier
64142
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
64143
+ * * Description: Foreign key to Entity — which entity this override is for.
64144
+ */
64145
+ get EntityID() {
64146
+ return this.Get('EntityID');
64147
+ }
64148
+ set EntityID(value) {
64149
+ this.Set('EntityID', value);
64150
+ }
64151
+ /**
64152
+ * * Field Name: ComponentID
64153
+ * * Display Name: Component
64154
+ * * SQL Data Type: uniqueidentifier
64155
+ * * Related Entity/Foreign Key: MJ: Components (vwComponents.ID)
64156
+ * * Description: Foreign key to Component — the component that renders the form. Must declare componentRole='form' and implement the FormHostProps contract.
64157
+ */
64158
+ get ComponentID() {
64159
+ return this.Get('ComponentID');
64160
+ }
64161
+ set ComponentID(value) {
64162
+ this.Set('ComponentID', value);
64163
+ }
64164
+ /**
64165
+ * * Field Name: Name
64166
+ * * Display Name: Name
64167
+ * * SQL Data Type: nvarchar(255)
64168
+ * * Description: Human-readable label for this override (e.g., "CSR Customer Form", "Compact Mobile Variant").
64169
+ */
64170
+ get Name() {
64171
+ return this.Get('Name');
64172
+ }
64173
+ set Name(value) {
64174
+ this.Set('Name', value);
64175
+ }
64176
+ /**
64177
+ * * Field Name: Description
64178
+ * * Display Name: Description
64179
+ * * SQL Data Type: nvarchar(MAX)
64180
+ * * Description: Optional longer description of what this override is for and when it applies.
64181
+ */
64182
+ get Description() {
64183
+ return this.Get('Description');
64184
+ }
64185
+ set Description(value) {
64186
+ this.Set('Description', value);
64187
+ }
64188
+ /**
64189
+ * * Field Name: Scope
64190
+ * * Display Name: Scope
64191
+ * * SQL Data Type: nvarchar(20)
64192
+ * * Default Value: Global
64193
+ * * Value List Type: List
64194
+ * * Possible Values
64195
+ * * Global
64196
+ * * Role
64197
+ * * User
64198
+ * * Description: Resolution tier: User (requires UserID), Role (requires RoleID), or Global. The resolver evaluates in that order — a User row beats a Role row beats a Global row.
64199
+ */
64200
+ get Scope() {
64201
+ return this.Get('Scope');
64202
+ }
64203
+ set Scope(value) {
64204
+ this.Set('Scope', value);
64205
+ }
64206
+ /**
64207
+ * * Field Name: UserID
64208
+ * * Display Name: User
64209
+ * * SQL Data Type: uniqueidentifier
64210
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)
64211
+ * * Description: Required when Scope='User'. The single user this override applies to.
64212
+ */
64213
+ get UserID() {
64214
+ return this.Get('UserID');
64215
+ }
64216
+ set UserID(value) {
64217
+ this.Set('UserID', value);
64218
+ }
64219
+ /**
64220
+ * * Field Name: RoleID
64221
+ * * Display Name: Role
64222
+ * * SQL Data Type: uniqueidentifier
64223
+ * * Related Entity/Foreign Key: MJ: Roles (vwRoles.ID)
64224
+ * * Description: Required when Scope='Role'. The role whose members see this override.
64225
+ */
64226
+ get RoleID() {
64227
+ return this.Get('RoleID');
64228
+ }
64229
+ set RoleID(value) {
64230
+ this.Set('RoleID', value);
64231
+ }
64232
+ /**
64233
+ * * Field Name: Priority
64234
+ * * Display Name: Priority
64235
+ * * SQL Data Type: int
64236
+ * * Default Value: 0
64237
+ * * Description: Higher value wins within a scope tier. Ties broken by __mj_CreatedAt DESC. No IsDefault — Priority is the only mechanism.
64238
+ */
64239
+ get Priority() {
64240
+ return this.Get('Priority');
64241
+ }
64242
+ set Priority(value) {
64243
+ this.Set('Priority', value);
64244
+ }
64245
+ /**
64246
+ * * Field Name: Status
64247
+ * * Display Name: Status
64248
+ * * SQL Data Type: nvarchar(20)
64249
+ * * Default Value: Active
64250
+ * * Value List Type: List
64251
+ * * Possible Values
64252
+ * * Active
64253
+ * * Inactive
64254
+ * * Pending
64255
+ * * Description: Active = eligible for resolution. Inactive = ignored. Pending = AI-authored, awaiting human activation (resolver treats as Inactive).
64256
+ */
64257
+ get Status() {
64258
+ return this.Get('Status');
64259
+ }
64260
+ set Status(value) {
64261
+ this.Set('Status', value);
64262
+ }
64263
+ /**
64264
+ * * Field Name: Notes
64265
+ * * Display Name: Notes
64266
+ * * SQL Data Type: nvarchar(MAX)
64267
+ * * Description: Optional free-form commentary about this override — e.g. who authored it, why it exists, what should change before it goes Global, links to related discussions. Does not affect resolution.
64268
+ */
64269
+ get Notes() {
64270
+ return this.Get('Notes');
64271
+ }
64272
+ set Notes(value) {
64273
+ this.Set('Notes', value);
64274
+ }
64275
+ /**
64276
+ * * Field Name: __mj_CreatedAt
64277
+ * * Display Name: Created At
64278
+ * * SQL Data Type: datetimeoffset
64279
+ * * Default Value: getutcdate()
64280
+ */
64281
+ get __mj_CreatedAt() {
64282
+ return this.Get('__mj_CreatedAt');
64283
+ }
64284
+ /**
64285
+ * * Field Name: __mj_UpdatedAt
64286
+ * * Display Name: Updated At
64287
+ * * SQL Data Type: datetimeoffset
64288
+ * * Default Value: getutcdate()
64289
+ */
64290
+ get __mj_UpdatedAt() {
64291
+ return this.Get('__mj_UpdatedAt');
64292
+ }
64293
+ /**
64294
+ * * Field Name: Entity
64295
+ * * Display Name: Entity Name
64296
+ * * SQL Data Type: nvarchar(255)
64297
+ */
64298
+ get Entity() {
64299
+ return this.Get('Entity');
64300
+ }
64301
+ /**
64302
+ * * Field Name: Component
64303
+ * * Display Name: Component Name
64304
+ * * SQL Data Type: nvarchar(500)
64305
+ */
64306
+ get Component() {
64307
+ return this.Get('Component');
64308
+ }
64309
+ /**
64310
+ * * Field Name: User
64311
+ * * Display Name: User Name
64312
+ * * SQL Data Type: nvarchar(100)
64313
+ */
64314
+ get User() {
64315
+ return this.Get('User');
64316
+ }
64317
+ /**
64318
+ * * Field Name: Role
64319
+ * * Display Name: Role Name
64320
+ * * SQL Data Type: nvarchar(50)
64321
+ */
64322
+ get Role() {
64323
+ return this.Get('Role');
64324
+ }
64325
+ };
64326
+ MJEntityFormOverrideEntity = __decorate([
64327
+ RegisterClass(BaseEntity, 'MJ: Entity Form Overrides')
64328
+ ], MJEntityFormOverrideEntity);
64329
+ export { MJEntityFormOverrideEntity };
63497
64330
  /**
63498
64331
  * MJ: Entity Organic Key Related Entities - strongly typed entity sub-class
63499
64332
  * * Schema: __mj
@@ -66975,7 +67808,7 @@ let MJIntegrationObjectFieldEntity = class MJIntegrationObjectFieldEntity extend
66975
67808
  }
66976
67809
  /**
66977
67810
  * * Field Name: IntegrationObjectID
66978
- * * Display Name: Integration Object
67811
+ * * Display Name: Integration Object ID
66979
67812
  * * SQL Data Type: uniqueidentifier
66980
67813
  * * Related Entity/Foreign Key: MJ: Integration Objects (vwIntegrationObjects.ID)
66981
67814
  * * Description: Foreign key to the IntegrationObject this field belongs to
@@ -67122,7 +67955,7 @@ let MJIntegrationObjectFieldEntity = class MJIntegrationObjectFieldEntity extend
67122
67955
  }
67123
67956
  /**
67124
67957
  * * Field Name: IsUniqueKey
67125
- * * Display Name: Is Unique Key
67958
+ * * Display Name: Is Unique
67126
67959
  * * SQL Data Type: bit
67127
67960
  * * Default Value: 0
67128
67961
  * * Description: Whether values must be unique across all records
@@ -67259,8 +68092,26 @@ let MJIntegrationObjectFieldEntity = class MJIntegrationObjectFieldEntity extend
67259
68092
  this.Set('IsCustom', value);
67260
68093
  }
67261
68094
  /**
68095
+ * * Field Name: MetadataSource
68096
+ * * Display Name: Metadata Source
68097
+ * * SQL Data Type: nvarchar(20)
68098
+ * * Default Value: Declared
68099
+ * * Value List Type: List
68100
+ * * Possible Values
68101
+ * * Custom
68102
+ * * Declared
68103
+ * * Discovered
68104
+ * * Description: Provenance of this IntegrationObjectField row: Declared (from static research/docs), Discovered (from runtime API introspection), Custom (customer-defined custom field, e.g., HubSpot custom property on standard object). Drives merge precedence — discovered/runtime wins for type/constraints; declared wins for description/label/sequence/category.
68105
+ */
68106
+ get MetadataSource() {
68107
+ return this.Get('MetadataSource');
68108
+ }
68109
+ set MetadataSource(value) {
68110
+ this.Set('MetadataSource', value);
68111
+ }
68112
+ /**
67262
68113
  * * Field Name: IntegrationObject
67263
- * * Display Name: Integration Object Name
68114
+ * * Display Name: Integration Object
67264
68115
  * * SQL Data Type: nvarchar(255)
67265
68116
  */
67266
68117
  get IntegrationObject() {
@@ -67268,7 +68119,7 @@ let MJIntegrationObjectFieldEntity = class MJIntegrationObjectFieldEntity extend
67268
68119
  }
67269
68120
  /**
67270
68121
  * * Field Name: RelatedIntegrationObject
67271
- * * Display Name: Related Object Name
68122
+ * * Display Name: Related Integration Object Name
67272
68123
  * * SQL Data Type: nvarchar(255)
67273
68124
  */
67274
68125
  get RelatedIntegrationObject() {
@@ -67322,7 +68173,7 @@ let MJIntegrationObjectEntity = class MJIntegrationObjectEntity extends BaseEnti
67322
68173
  }
67323
68174
  /**
67324
68175
  * * Field Name: IntegrationID
67325
- * * Display Name: Integration ID
68176
+ * * Display Name: Integration
67326
68177
  * * SQL Data Type: uniqueidentifier
67327
68178
  * * Related Entity/Foreign Key: MJ: Integrations (vwIntegrations.ID)
67328
68179
  * * Description: Foreign key to the Integration that owns this object
@@ -67601,8 +68452,210 @@ let MJIntegrationObjectEntity = class MJIntegrationObjectEntity extends BaseEnti
67601
68452
  this.Set('IsCustom', value);
67602
68453
  }
67603
68454
  /**
68455
+ * * Field Name: CreateAPIPath
68456
+ * * Display Name: Create API Path
68457
+ * * SQL Data Type: nvarchar(MAX)
68458
+ * * Description: HTTP path template for create operations. Generic CRUD in BaseRESTIntegrationConnector substitutes parent IDs into {var} placeholders. NULL means create not supported via metadata-driven path.
68459
+ */
68460
+ get CreateAPIPath() {
68461
+ return this.Get('CreateAPIPath');
68462
+ }
68463
+ set CreateAPIPath(value) {
68464
+ this.Set('CreateAPIPath', value);
68465
+ }
68466
+ /**
68467
+ * * Field Name: CreateMethod
68468
+ * * Display Name: Create Method
68469
+ * * SQL Data Type: nvarchar(20)
68470
+ * * Description: HTTP method for create (typically POST). NULL means create not supported via metadata-driven path.
68471
+ */
68472
+ get CreateMethod() {
68473
+ return this.Get('CreateMethod');
68474
+ }
68475
+ set CreateMethod(value) {
68476
+ this.Set('CreateMethod', value);
68477
+ }
68478
+ /**
68479
+ * * Field Name: CreateBodyShape
68480
+ * * Display Name: Create Body Shape
68481
+ * * SQL Data Type: nvarchar(50)
68482
+ * * Value List Type: List
68483
+ * * Possible Values
68484
+ * * flat
68485
+ * * literal
68486
+ * * wrapped
68487
+ * * Description: Request body shape for create: flat (top-level fields), wrapped (under CreateBodyKey), or literal (connector overrides CreateRecord and supplies own body).
68488
+ */
68489
+ get CreateBodyShape() {
68490
+ return this.Get('CreateBodyShape');
68491
+ }
68492
+ set CreateBodyShape(value) {
68493
+ this.Set('CreateBodyShape', value);
68494
+ }
68495
+ /**
68496
+ * * Field Name: CreateBodyKey
68497
+ * * Display Name: Create Body Key
68498
+ * * SQL Data Type: nvarchar(100)
68499
+ * * Description: Wrapper key for create body when CreateBodyShape=wrapped. Example: 'member' for YourMembership which wraps body as {member:{...}}.
68500
+ */
68501
+ get CreateBodyKey() {
68502
+ return this.Get('CreateBodyKey');
68503
+ }
68504
+ set CreateBodyKey(value) {
68505
+ this.Set('CreateBodyKey', value);
68506
+ }
68507
+ /**
68508
+ * * Field Name: CreateIDLocation
68509
+ * * Display Name: Create ID Location
68510
+ * * SQL Data Type: nvarchar(20)
68511
+ * * Value List Type: List
68512
+ * * Possible Values
68513
+ * * body
68514
+ * * header
68515
+ * * n/a
68516
+ * * path
68517
+ * * Description: Where the created record ID is found in the create response: path (URL of returned Location header), body (parsed from JSON response), header (specific named header).
68518
+ */
68519
+ get CreateIDLocation() {
68520
+ return this.Get('CreateIDLocation');
68521
+ }
68522
+ set CreateIDLocation(value) {
68523
+ this.Set('CreateIDLocation', value);
68524
+ }
68525
+ /**
68526
+ * * Field Name: UpdateAPIPath
68527
+ * * Display Name: Update API Path
68528
+ * * SQL Data Type: nvarchar(MAX)
68529
+ * * Description: HTTP path template for update operations. Typically contains {ID} placeholder substituted with the record ExternalID at runtime.
68530
+ */
68531
+ get UpdateAPIPath() {
68532
+ return this.Get('UpdateAPIPath');
68533
+ }
68534
+ set UpdateAPIPath(value) {
68535
+ this.Set('UpdateAPIPath', value);
68536
+ }
68537
+ /**
68538
+ * * Field Name: UpdateMethod
68539
+ * * Display Name: Update Method
68540
+ * * SQL Data Type: nvarchar(20)
68541
+ * * Description: HTTP method for update (typically PATCH or PUT).
68542
+ */
68543
+ get UpdateMethod() {
68544
+ return this.Get('UpdateMethod');
68545
+ }
68546
+ set UpdateMethod(value) {
68547
+ this.Set('UpdateMethod', value);
68548
+ }
68549
+ /**
68550
+ * * Field Name: UpdateBodyShape
68551
+ * * Display Name: Update Body Shape
68552
+ * * SQL Data Type: nvarchar(50)
68553
+ * * Value List Type: List
68554
+ * * Possible Values
68555
+ * * flat
68556
+ * * literal
68557
+ * * wrapped
68558
+ * * Description: Request body shape for update: flat | wrapped | literal. See CreateBodyShape.
68559
+ */
68560
+ get UpdateBodyShape() {
68561
+ return this.Get('UpdateBodyShape');
68562
+ }
68563
+ set UpdateBodyShape(value) {
68564
+ this.Set('UpdateBodyShape', value);
68565
+ }
68566
+ /**
68567
+ * * Field Name: UpdateBodyKey
68568
+ * * Display Name: Update Body Key
68569
+ * * SQL Data Type: nvarchar(100)
68570
+ * * Description: Wrapper key for update body when UpdateBodyShape=wrapped.
68571
+ */
68572
+ get UpdateBodyKey() {
68573
+ return this.Get('UpdateBodyKey');
68574
+ }
68575
+ set UpdateBodyKey(value) {
68576
+ this.Set('UpdateBodyKey', value);
68577
+ }
68578
+ /**
68579
+ * * Field Name: UpdateIDLocation
68580
+ * * Display Name: Update ID Location
68581
+ * * SQL Data Type: nvarchar(20)
68582
+ * * Value List Type: List
68583
+ * * Possible Values
68584
+ * * body
68585
+ * * header
68586
+ * * n/a
68587
+ * * path
68588
+ * * Description: For update: where the target record ID is located in the request — typically 'path' (substituted into UpdateAPIPath URL template).
68589
+ */
68590
+ get UpdateIDLocation() {
68591
+ return this.Get('UpdateIDLocation');
68592
+ }
68593
+ set UpdateIDLocation(value) {
68594
+ this.Set('UpdateIDLocation', value);
68595
+ }
68596
+ /**
68597
+ * * Field Name: DeleteAPIPath
68598
+ * * Display Name: Delete API Path
68599
+ * * SQL Data Type: nvarchar(MAX)
68600
+ * * Description: HTTP path template for delete operations. Typically contains {ID} placeholder. NULL means delete not supported via metadata-driven path. (Existing DeleteMethod column carries the verb.)
68601
+ */
68602
+ get DeleteAPIPath() {
68603
+ return this.Get('DeleteAPIPath');
68604
+ }
68605
+ set DeleteAPIPath(value) {
68606
+ this.Set('DeleteAPIPath', value);
68607
+ }
68608
+ /**
68609
+ * * Field Name: DeleteIDLocation
68610
+ * * Display Name: Delete ID Location
68611
+ * * SQL Data Type: nvarchar(20)
68612
+ * * Value List Type: List
68613
+ * * Possible Values
68614
+ * * body
68615
+ * * header
68616
+ * * n/a
68617
+ * * path
68618
+ * * Description: For delete: where the target record ID is located — typically 'path'.
68619
+ */
68620
+ get DeleteIDLocation() {
68621
+ return this.Get('DeleteIDLocation');
68622
+ }
68623
+ set DeleteIDLocation(value) {
68624
+ this.Set('DeleteIDLocation', value);
68625
+ }
68626
+ /**
68627
+ * * Field Name: IncrementalWatermarkField
68628
+ * * Display Name: Incremental Watermark Field
68629
+ * * SQL Data Type: nvarchar(255)
68630
+ * * Description: Vendor field name marking "last changed" — drives incremental sync filter when SupportsIncrementalSync=1. The exact filter syntax (e.g., $filter=Modified gt {value} or modified_since={value}) lives in Configuration.incrementalFilterFormat. Provable-only: leave NULL if docs do not name a watermark field.
68631
+ */
68632
+ get IncrementalWatermarkField() {
68633
+ return this.Get('IncrementalWatermarkField');
68634
+ }
68635
+ set IncrementalWatermarkField(value) {
68636
+ this.Set('IncrementalWatermarkField', value);
68637
+ }
68638
+ /**
68639
+ * * Field Name: MetadataSource
68640
+ * * Display Name: Metadata Source
68641
+ * * SQL Data Type: nvarchar(20)
68642
+ * * Default Value: Declared
68643
+ * * Value List Type: List
68644
+ * * Possible Values
68645
+ * * Custom
68646
+ * * Declared
68647
+ * * Discovered
68648
+ * * Description: Provenance of this IntegrationObject row: Declared (from static research/docs), Discovered (from runtime API introspection like Salesforce /describe), Custom (genuinely customer-created, e.g., HubSpot custom objects). Drives merge precedence in IntegrationSchemaSync.
68649
+ */
68650
+ get MetadataSource() {
68651
+ return this.Get('MetadataSource');
68652
+ }
68653
+ set MetadataSource(value) {
68654
+ this.Set('MetadataSource', value);
68655
+ }
68656
+ /**
67604
68657
  * * Field Name: Integration
67605
- * * Display Name: Integration
68658
+ * * Display Name: Integration Name
67606
68659
  * * SQL Data Type: nvarchar(100)
67607
68660
  */
67608
68661
  get Integration() {
@@ -79880,7 +80933,7 @@ let MJScheduledJobEntity = class MJScheduledJobEntity extends BaseEntity {
79880
80933
  }
79881
80934
  /**
79882
80935
  * * Field Name: NotifyViaInApp
79883
- * * Display Name: Notify Via In App
80936
+ * * Display Name: Notify Via In-App
79884
80937
  * * SQL Data Type: bit
79885
80938
  * * Default Value: 1
79886
80939
  * * Description: Whether to send in-app notifications. Requires NotifyOnSuccess or NotifyOnFailure to also be enabled. Defaults to true.
@@ -79976,6 +81029,19 @@ let MJScheduledJobEntity = class MJScheduledJobEntity extends BaseEntity {
79976
81029
  return this.Get('__mj_UpdatedAt');
79977
81030
  }
79978
81031
  /**
81032
+ * * Field Name: RunImmediatelyIfNeverRun
81033
+ * * Display Name: Run Immediately If Never Run
81034
+ * * SQL Data Type: bit
81035
+ * * Default Value: 0
81036
+ * * Description: When true AND LastRunAt IS NULL, the scheduler sets NextRunAt to now() instead of the next cron tick on initialization, so the job runs on the next polling cycle. Useful for newly-seeded jobs that should not wait up to a full cron interval before their first execution.
81037
+ */
81038
+ get RunImmediatelyIfNeverRun() {
81039
+ return this.Get('RunImmediatelyIfNeverRun');
81040
+ }
81041
+ set RunImmediatelyIfNeverRun(value) {
81042
+ this.Set('RunImmediatelyIfNeverRun', value);
81043
+ }
81044
+ /**
79979
81045
  * * Field Name: JobType
79980
81046
  * * Display Name: Job Type
79981
81047
  * * SQL Data Type: nvarchar(100)
@@ -83014,6 +84080,24 @@ let MJTagSynonymEntity = class MJTagSynonymEntity extends BaseEntity {
83014
84080
  return this.Get('__mj_UpdatedAt');
83015
84081
  }
83016
84082
  /**
84083
+ * * Field Name: Status
84084
+ * * Display Name: Status
84085
+ * * SQL Data Type: nvarchar(20)
84086
+ * * Default Value: Active
84087
+ * * Value List Type: List
84088
+ * * Possible Values
84089
+ * * Active
84090
+ * * Pending
84091
+ * * Rejected
84092
+ * * Description: Approval state of the synonym. Active = resolves to its tag during classification. Pending = proposed (e.g. by the LLM or a bulk import) and awaiting human review; does not resolve until approved. Rejected = reviewed and declined; retained for audit and to suppress re-proposal.
84093
+ */
84094
+ get Status() {
84095
+ return this.Get('Status');
84096
+ }
84097
+ set Status(value) {
84098
+ this.Set('Status', value);
84099
+ }
84100
+ /**
83017
84101
  * * Field Name: Tag
83018
84102
  * * Display Name: Tag Name
83019
84103
  * * SQL Data Type: nvarchar(255)
@@ -87253,6 +88337,41 @@ let MJUserApplicationEntity = class MJUserApplicationEntity extends BaseEntity {
87253
88337
  return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
87254
88338
  }
87255
88339
  /**
88340
+ * MJ: User Applications - Delete method override to wrap in transaction since CascadeDeletes is true.
88341
+ * Wrapping in a transaction ensures that all cascade delete operations are handled atomically.
88342
+ * @public
88343
+ * @method
88344
+ * @override
88345
+ * @memberof MJUserApplicationEntity
88346
+ * @returns {Promise<boolean>} - true if successful, false otherwise
88347
+ */
88348
+ async Delete(options) {
88349
+ if (Metadata.Provider.ProviderType === ProviderType.Database) { // global-provider-ok: codegen runs offline against a single provider
88350
+ // For database providers, use the transaction methods directly
88351
+ const provider = Metadata.Provider; // global-provider-ok: codegen runs offline against a single provider
88352
+ try {
88353
+ await provider.BeginTransaction();
88354
+ const result = await super.Delete(options);
88355
+ if (result) {
88356
+ await provider.CommitTransaction();
88357
+ return true;
88358
+ }
88359
+ else {
88360
+ await provider.RollbackTransaction();
88361
+ return false;
88362
+ }
88363
+ }
88364
+ catch (error) {
88365
+ await provider.RollbackTransaction();
88366
+ throw error;
88367
+ }
88368
+ }
88369
+ else {
88370
+ // For network providers, cascading deletes are handled server-side
88371
+ return super.Delete(options);
88372
+ }
88373
+ }
88374
+ /**
87256
88375
  * * Field Name: ID
87257
88376
  * * SQL Data Type: uniqueidentifier
87258
88377
  * * Default Value: newsequentialid()