@memberjunction/core-entities 5.24.0 → 5.26.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 (33) hide show
  1. package/dist/engines/FileStorageEngine.d.ts +21 -5
  2. package/dist/engines/FileStorageEngine.d.ts.map +1 -1
  3. package/dist/engines/FileStorageEngine.js +24 -4
  4. package/dist/engines/FileStorageEngine.js.map +1 -1
  5. package/dist/engines/GeoDataEngine.d.ts +141 -0
  6. package/dist/engines/GeoDataEngine.d.ts.map +1 -0
  7. package/dist/engines/GeoDataEngine.js +425 -0
  8. package/dist/engines/GeoDataEngine.js.map +1 -0
  9. package/dist/engines/InstanceConfigEngine.d.ts +105 -0
  10. package/dist/engines/InstanceConfigEngine.d.ts.map +1 -0
  11. package/dist/engines/InstanceConfigEngine.js +198 -0
  12. package/dist/engines/InstanceConfigEngine.js.map +1 -0
  13. package/dist/engines/SearchEngineBase.d.ts +76 -0
  14. package/dist/engines/SearchEngineBase.d.ts.map +1 -0
  15. package/dist/engines/SearchEngineBase.js +141 -0
  16. package/dist/engines/SearchEngineBase.js.map +1 -0
  17. package/dist/engines/UserInfoEngine.d.ts +15 -1
  18. package/dist/engines/UserInfoEngine.d.ts.map +1 -1
  19. package/dist/engines/UserInfoEngine.js +45 -0
  20. package/dist/engines/UserInfoEngine.js.map +1 -1
  21. package/dist/engines/artifacts.d.ts +13 -0
  22. package/dist/engines/artifacts.d.ts.map +1 -1
  23. package/dist/engines/artifacts.js +25 -0
  24. package/dist/engines/artifacts.js.map +1 -1
  25. package/dist/generated/entity_subclasses.d.ts +1653 -71
  26. package/dist/generated/entity_subclasses.d.ts.map +1 -1
  27. package/dist/generated/entity_subclasses.js +2476 -123
  28. package/dist/generated/entity_subclasses.js.map +1 -1
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +3 -0
  32. package/dist/index.js.map +1 -1
  33. package/package.json +6 -5
@@ -976,9 +976,19 @@ export const MJAIAgentCategorySchema = z.object({
976
976
  * * Display Name: Updated At
977
977
  * * SQL Data Type: datetimeoffset
978
978
  * * Default Value: getutcdate()`),
979
+ DefaultStorageAccountID: z.string().nullable().describe(`
980
+ * * Field Name: DefaultStorageAccountID
981
+ * * Display Name: Default Storage Account
982
+ * * SQL Data Type: uniqueidentifier
983
+ * * Related Entity/Foreign Key: MJ: File Storage Accounts (vwFileStorageAccounts.ID)
984
+ * * Description: Default file storage account for agents in this category. Inherited by child categories that do not define their own value — resolution walks up the ParentID tree until a non-null value is found. Overrides the Type-level default. FK to FileStorageAccount.`),
979
985
  Parent: z.string().nullable().describe(`
980
986
  * * Field Name: Parent
981
- * * Display Name: Parent Name
987
+ * * Display Name: Parent
988
+ * * SQL Data Type: nvarchar(200)`),
989
+ DefaultStorageAccount: z.string().nullable().describe(`
990
+ * * Field Name: DefaultStorageAccount
991
+ * * Display Name: Default Storage Account Name
982
992
  * * SQL Data Type: nvarchar(200)`),
983
993
  RootParentID: z.string().nullable().describe(`
984
994
  * * Field Name: RootParentID
@@ -3189,7 +3199,7 @@ export const MJAIAgentTypeSchema = z.object({
3189
3199
  * * Description: Determines whether the custom form section (specified by UIFormSectionClass) should be expanded by default when the AI Agent form loads. True means the section starts expanded, False means it starts collapsed. Only applies when UIFormSectionClass is specified. Defaults to 1 (expanded).`),
3190
3200
  PromptParamsSchema: z.string().nullable().describe(`
3191
3201
  * * Field Name: PromptParamsSchema
3192
- * * Display Name: Prompt Parameters Schema
3202
+ * * Display Name: Prompt Params Schema
3193
3203
  * * SQL Data Type: nvarchar(MAX)
3194
3204
  * * Description: JSON Schema defining the available prompt parameters for this agent type. Includes property definitions with types, defaults, and descriptions. Used by agents of this type to customize which prompt sections are included in the system prompt. The schema follows JSON Schema draft-07 format.`),
3195
3205
  AssignmentStrategy: z.string().nullable().describe(`
@@ -3197,10 +3207,20 @@ export const MJAIAgentTypeSchema = z.object({
3197
3207
  * * Display Name: Assignment Strategy
3198
3208
  * * SQL Data Type: nvarchar(MAX)
3199
3209
  * * Description: JSON-serialized AgentRequestAssignmentStrategy defining the default assignment strategy for all agents of this type. Overridden by per-invocation or category-level strategies in the resolution chain.`),
3210
+ DefaultStorageAccountID: z.string().nullable().describe(`
3211
+ * * Field Name: DefaultStorageAccountID
3212
+ * * Display Name: Default Storage Account
3213
+ * * SQL Data Type: uniqueidentifier
3214
+ * * Related Entity/Foreign Key: MJ: File Storage Accounts (vwFileStorageAccounts.ID)
3215
+ * * Description: Default file storage account for agents of this type. Lowest priority in the resolution chain (Type → Category tree → Agent → Runtime override). When set, all agents of this type use this storage account unless overridden at a more specific level. FK to FileStorageAccount.`),
3200
3216
  SystemPrompt: z.string().nullable().describe(`
3201
3217
  * * Field Name: SystemPrompt
3202
- * * Display Name: System Prompt Text
3218
+ * * Display Name: System Prompt
3203
3219
  * * SQL Data Type: nvarchar(255)`),
3220
+ DefaultStorageAccount: z.string().nullable().describe(`
3221
+ * * Field Name: DefaultStorageAccount
3222
+ * * Display Name: Default Storage Account Name
3223
+ * * SQL Data Type: nvarchar(200)`),
3204
3224
  });
3205
3225
  /**
3206
3226
  * zod schema definition for the entity MJ: AI Agents
@@ -3273,17 +3293,17 @@ export const MJAIAgentSchema = z.object({
3273
3293
  * * Description: When true, enables automatic compression of conversation context when the message threshold is reached.`),
3274
3294
  ContextCompressionMessageThreshold: z.number().nullable().describe(`
3275
3295
  * * Field Name: ContextCompressionMessageThreshold
3276
- * * Display Name: Compression Message Threshold
3296
+ * * Display Name: Context Compression Message Threshold
3277
3297
  * * SQL Data Type: int
3278
3298
  * * Description: Number of messages that triggers context compression when EnableContextCompression is true.`),
3279
3299
  ContextCompressionPromptID: z.string().nullable().describe(`
3280
3300
  * * Field Name: ContextCompressionPromptID
3281
- * * Display Name: Compression Prompt
3301
+ * * Display Name: Context Compression Prompt
3282
3302
  * * SQL Data Type: uniqueidentifier
3283
3303
  * * Related Entity/Foreign Key: MJ: AI Prompts (vwAIPrompts.ID)`),
3284
3304
  ContextCompressionMessageRetentionCount: z.number().nullable().describe(`
3285
3305
  * * Field Name: ContextCompressionMessageRetentionCount
3286
- * * Display Name: Compression Message Retention Count
3306
+ * * Display Name: Context Compression Message Retention Count
3287
3307
  * * SQL Data Type: int
3288
3308
  * * Description: Number of recent messages to keep uncompressed when context compression is applied.`),
3289
3309
  TypeID: z.string().nullable().describe(`
@@ -3614,13 +3634,19 @@ if this limit is exceeded.`),
3614
3634
  * * SQL Data Type: bit
3615
3635
  * * Default Value: 1
3616
3636
  * * Description: When true (default), this agent accepts runtime-registered ephemeral client tools that are not defined in metadata. Set to false for agents that require strict tool governance.`),
3637
+ DefaultStorageAccountID: z.string().nullable().describe(`
3638
+ * * Field Name: DefaultStorageAccountID
3639
+ * * Display Name: Default Storage Account ID
3640
+ * * SQL Data Type: uniqueidentifier
3641
+ * * Related Entity/Foreign Key: MJ: File Storage Accounts (vwFileStorageAccounts.ID)
3642
+ * * Description: Default file storage account for this specific agent. Overrides both Type-level and Category-level defaults. Can be further overridden at runtime via ExecuteAgentParams.override.storageAccountId. FK to FileStorageAccount.`),
3617
3643
  Parent: z.string().nullable().describe(`
3618
3644
  * * Field Name: Parent
3619
3645
  * * Display Name: Parent Name
3620
3646
  * * SQL Data Type: nvarchar(255)`),
3621
3647
  ContextCompressionPrompt: z.string().nullable().describe(`
3622
3648
  * * Field Name: ContextCompressionPrompt
3623
- * * Display Name: Context Compression Prompt Name
3649
+ * * Display Name: Context Compression Prompt
3624
3650
  * * SQL Data Type: nvarchar(255)`),
3625
3651
  Type: z.string().nullable().describe(`
3626
3652
  * * Field Name: Type
@@ -3642,6 +3668,10 @@ if this limit is exceeded.`),
3642
3668
  * * Field Name: Category
3643
3669
  * * Display Name: Category Name
3644
3670
  * * SQL Data Type: nvarchar(200)`),
3671
+ DefaultStorageAccount: z.string().nullable().describe(`
3672
+ * * Field Name: DefaultStorageAccount
3673
+ * * Display Name: Default Storage Account
3674
+ * * SQL Data Type: nvarchar(200)`),
3645
3675
  RootParentID: z.string().nullable().describe(`
3646
3676
  * * Field Name: RootParentID
3647
3677
  * * Display Name: Root Parent
@@ -6699,6 +6729,58 @@ export const MJApplicationEntitySchema = z.object({
6699
6729
  * * Display Name: Entity Base Table Code Name
6700
6730
  * * SQL Data Type: nvarchar(MAX)`),
6701
6731
  });
6732
+ /**
6733
+ * zod schema definition for the entity MJ: Application Roles
6734
+ */
6735
+ export const MJApplicationRoleSchema = z.object({
6736
+ ID: z.string().describe(`
6737
+ * * Field Name: ID
6738
+ * * Display Name: ID
6739
+ * * SQL Data Type: uniqueidentifier
6740
+ * * Default Value: newsequentialid()`),
6741
+ ApplicationID: z.string().describe(`
6742
+ * * Field Name: ApplicationID
6743
+ * * Display Name: Application
6744
+ * * SQL Data Type: uniqueidentifier
6745
+ * * Related Entity/Foreign Key: MJ: Applications (vwApplications.ID)
6746
+ * * Description: Foreign key to the Application this role grant applies to`),
6747
+ RoleID: z.string().describe(`
6748
+ * * Field Name: RoleID
6749
+ * * Display Name: Role
6750
+ * * SQL Data Type: uniqueidentifier
6751
+ * * Related Entity/Foreign Key: MJ: Roles (vwRoles.ID)
6752
+ * * Description: Foreign key to the Role being granted or denied access`),
6753
+ CanAccess: z.boolean().describe(`
6754
+ * * Field Name: CanAccess
6755
+ * * Display Name: Can Access
6756
+ * * SQL Data Type: bit
6757
+ * * Default Value: 1
6758
+ * * Description: When true, users in this role can access the application. When false, this record acts as an explicit deny for the role.`),
6759
+ CanAdmin: z.boolean().describe(`
6760
+ * * Field Name: CanAdmin
6761
+ * * Display Name: Can Admin
6762
+ * * SQL Data Type: bit
6763
+ * * Default Value: 0
6764
+ * * Description: When true, users in this role can modify application settings, manage nav items, and configure the application.`),
6765
+ __mj_CreatedAt: z.date().describe(`
6766
+ * * Field Name: __mj_CreatedAt
6767
+ * * Display Name: Created At
6768
+ * * SQL Data Type: datetimeoffset
6769
+ * * Default Value: getutcdate()`),
6770
+ __mj_UpdatedAt: z.date().describe(`
6771
+ * * Field Name: __mj_UpdatedAt
6772
+ * * Display Name: Updated At
6773
+ * * SQL Data Type: datetimeoffset
6774
+ * * Default Value: getutcdate()`),
6775
+ Application: z.string().describe(`
6776
+ * * Field Name: Application
6777
+ * * Display Name: Application Name
6778
+ * * SQL Data Type: nvarchar(100)`),
6779
+ Role: z.string().describe(`
6780
+ * * Field Name: Role
6781
+ * * Display Name: Role Name
6782
+ * * SQL Data Type: nvarchar(50)`),
6783
+ });
6702
6784
  /**
6703
6785
  * zod schema definition for the entity MJ: Application Settings
6704
6786
  */
@@ -6988,6 +7070,16 @@ export const MJArtifactTypeSchema = z.object({
6988
7070
  * * Display Name: Icon
6989
7071
  * * SQL Data Type: nvarchar(255)
6990
7072
  * * Description: Font Awesome icon class name for displaying this artifact type in the UI (e.g., fa-file-code, fa-chart-line)`),
7073
+ ContentCategory: z.union([z.literal('File'), z.literal('Text')]).describe(`
7074
+ * * Field Name: ContentCategory
7075
+ * * Display Name: Content Category
7076
+ * * SQL Data Type: nvarchar(10)
7077
+ * * Default Value: Text
7078
+ * * Value List Type: List
7079
+ * * Possible Values
7080
+ * * File
7081
+ * * Text
7082
+ * * Description: Classifies whether this artifact type stores text content ('Text', the default for all existing types) or a binary file in MJStorage ('File'). Used by AgentRunner and viewer components to route file-based artifacts correctly.`),
6991
7083
  Parent: z.string().nullable().describe(`
6992
7084
  * * Field Name: Parent
6993
7085
  * * Display Name: Parent
@@ -7121,7 +7213,7 @@ export const MJArtifactVersionSchema = z.object({
7121
7213
  * * Default Value: newsequentialid()`),
7122
7214
  ArtifactID: z.string().describe(`
7123
7215
  * * Field Name: ArtifactID
7124
- * * Display Name: Artifact ID
7216
+ * * Display Name: Artifact
7125
7217
  * * SQL Data Type: uniqueidentifier
7126
7218
  * * Related Entity/Foreign Key: MJ: Artifacts (vwArtifacts.ID)`),
7127
7219
  VersionNumber: z.number().describe(`
@@ -7146,7 +7238,7 @@ export const MJArtifactVersionSchema = z.object({
7146
7238
  * * Description: User comments specific to this version`),
7147
7239
  UserID: z.string().describe(`
7148
7240
  * * Field Name: UserID
7149
- * * Display Name: User ID
7241
+ * * Display Name: User
7150
7242
  * * SQL Data Type: uniqueidentifier
7151
7243
  * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)`),
7152
7244
  __mj_CreatedAt: z.date().describe(`
@@ -7174,6 +7266,37 @@ export const MJArtifactVersionSchema = z.object({
7174
7266
  * * Display Name: Description
7175
7267
  * * SQL Data Type: nvarchar(MAX)
7176
7268
  * * Description: Description of this artifact version. Can differ from Artifact.Description as it may evolve with versions.`),
7269
+ FileID: z.string().nullable().describe(`
7270
+ * * Field Name: FileID
7271
+ * * Display Name: File
7272
+ * * SQL Data Type: uniqueidentifier
7273
+ * * Related Entity/Foreign Key: MJ: Files (vwFiles.ID)
7274
+ * * Description: Foreign key to the MJ: Files entity. When ContentMode is 'File', this references the binary file stored in MJStorage. NULL when ContentMode is 'Text'.`),
7275
+ ContentMode: z.union([z.literal('File'), z.literal('Text')]).describe(`
7276
+ * * Field Name: ContentMode
7277
+ * * Display Name: Content Mode
7278
+ * * SQL Data Type: nvarchar(10)
7279
+ * * Default Value: Text
7280
+ * * Value List Type: List
7281
+ * * Possible Values
7282
+ * * File
7283
+ * * Text
7284
+ * * Description: Determines how artifact content is stored. 'Text' (default) means the Content column holds the data. 'File' means FileID references a binary file in MJStorage and Content is unused.`),
7285
+ MimeType: z.string().nullable().describe(`
7286
+ * * Field Name: MimeType
7287
+ * * Display Name: MIME Type
7288
+ * * SQL Data Type: nvarchar(200)
7289
+ * * Description: MIME type of the stored file (e.g. application/pdf). Denormalized from the File entity for display without joins. Only populated when ContentMode is 'File'.`),
7290
+ FileName: z.string().nullable().describe(`
7291
+ * * Field Name: FileName
7292
+ * * Display Name: File Name
7293
+ * * SQL Data Type: nvarchar(500)
7294
+ * * Description: Original filename of the stored file (e.g. report.pdf). Denormalized from the File entity for display without joins. Only populated when ContentMode is 'File'.`),
7295
+ ContentSizeBytes: z.number().nullable().describe(`
7296
+ * * Field Name: ContentSizeBytes
7297
+ * * Display Name: Content Size Bytes
7298
+ * * SQL Data Type: bigint
7299
+ * * Description: Size of the stored file in bytes. Denormalized for display without loading the file. Only populated when ContentMode is 'File'.`),
7177
7300
  Artifact: z.string().describe(`
7178
7301
  * * Field Name: Artifact
7179
7302
  * * Display Name: Artifact
@@ -7182,6 +7305,10 @@ export const MJArtifactVersionSchema = z.object({
7182
7305
  * * Field Name: User
7183
7306
  * * Display Name: User
7184
7307
  * * SQL Data Type: nvarchar(100)`),
7308
+ File: z.string().nullable().describe(`
7309
+ * * Field Name: File
7310
+ * * Display Name: File
7311
+ * * SQL Data Type: nvarchar(500)`),
7185
7312
  });
7186
7313
  /**
7187
7314
  * zod schema definition for the entity MJ: Artifacts
@@ -10828,6 +10955,66 @@ export const MJConversationSchema = z.object({
10828
10955
  * * Display Name: Test Run Name
10829
10956
  * * SQL Data Type: nvarchar(255)`),
10830
10957
  });
10958
+ /**
10959
+ * zod schema definition for the entity MJ: Countries
10960
+ */
10961
+ export const MJCountrySchema = z.object({
10962
+ ID: z.string().describe(`
10963
+ * * Field Name: ID
10964
+ * * Display Name: ID
10965
+ * * SQL Data Type: uniqueidentifier
10966
+ * * Default Value: newsequentialid()`),
10967
+ Name: z.string().describe(`
10968
+ * * Field Name: Name
10969
+ * * Display Name: Name
10970
+ * * SQL Data Type: nvarchar(200)
10971
+ * * Description: Full country name (e.g., "United States", "Canada").`),
10972
+ ISO2: z.string().describe(`
10973
+ * * Field Name: ISO2
10974
+ * * Display Name: ISO 2
10975
+ * * SQL Data Type: nvarchar(2)
10976
+ * * Description: ISO 3166-1 alpha-2 code (e.g., "US", "CA"). Unique business key for lookups.`),
10977
+ ISO3: z.string().describe(`
10978
+ * * Field Name: ISO3
10979
+ * * Display Name: ISO 3
10980
+ * * SQL Data Type: nvarchar(3)
10981
+ * * Description: ISO 3166-1 alpha-3 code (e.g., "USA", "CAN"). Unique business key for lookups.`),
10982
+ NumericCode: z.number().nullable().describe(`
10983
+ * * Field Name: NumericCode
10984
+ * * Display Name: Numeric Code
10985
+ * * SQL Data Type: int
10986
+ * * Description: ISO 3166-1 numeric code (e.g., 840 for US, 124 for Canada).`),
10987
+ Latitude: z.number().nullable().describe(`
10988
+ * * Field Name: Latitude
10989
+ * * Display Name: Latitude
10990
+ * * SQL Data Type: decimal(10, 6)
10991
+ * * Description: Geographic centroid latitude. Used as fallback point for country-level geocoding.`),
10992
+ Longitude: z.number().nullable().describe(`
10993
+ * * Field Name: Longitude
10994
+ * * Display Name: Longitude
10995
+ * * SQL Data Type: decimal(10, 6)
10996
+ * * Description: Geographic centroid longitude. Used as fallback point for country-level geocoding.`),
10997
+ BoundaryGeoJSON: z.string().nullable().describe(`
10998
+ * * Field Name: BoundaryGeoJSON
10999
+ * * Display Name: Boundary GeoJSON
11000
+ * * SQL Data Type: nvarchar(MAX)
11001
+ * * Description: Medium-resolution (~50m) GeoJSON boundary polygon for choropleth map rendering. Nullable — point map falls back to centroid if absent. Total ~3MB for all countries.`),
11002
+ CommonAliases: z.string().nullable().describe(`
11003
+ * * Field Name: CommonAliases
11004
+ * * Display Name: Common Aliases
11005
+ * * SQL Data Type: nvarchar(MAX)
11006
+ * * Description: JSON array of common aliases and alternate names (e.g., ["United States","USA","U.S.","America"]). Used by GeoResolver for fuzzy text-to-country matching.`),
11007
+ __mj_CreatedAt: z.date().describe(`
11008
+ * * Field Name: __mj_CreatedAt
11009
+ * * Display Name: Created At
11010
+ * * SQL Data Type: datetimeoffset
11011
+ * * Default Value: getutcdate()`),
11012
+ __mj_UpdatedAt: z.date().describe(`
11013
+ * * Field Name: __mj_UpdatedAt
11014
+ * * Display Name: Updated At
11015
+ * * SQL Data Type: datetimeoffset
11016
+ * * Default Value: getutcdate()`),
11017
+ });
10831
11018
  /**
10832
11019
  * zod schema definition for the entity MJ: Credential Categories
10833
11020
  */
@@ -12544,7 +12731,7 @@ export const MJEntitySchema = z.object({
12544
12731
  * * Default Value: newsequentialid()`),
12545
12732
  ParentID: z.string().nullable().describe(`
12546
12733
  * * Field Name: ParentID
12547
- * * Display Name: Parent ID
12734
+ * * Display Name: Parent
12548
12735
  * * SQL Data Type: uniqueidentifier
12549
12736
  * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)`),
12550
12737
  Name: z.string().describe(`
@@ -12651,46 +12838,46 @@ export const MJEntitySchema = z.object({
12651
12838
  * * Description: Set to 1 if a custom resolver has been created for the entity.`),
12652
12839
  AllowUserSearchAPI: z.boolean().describe(`
12653
12840
  * * Field Name: AllowUserSearchAPI
12654
- * * Display Name: Allow User Search API
12841
+ * * Display Name: Allow User Search
12655
12842
  * * SQL Data Type: bit
12656
12843
  * * Default Value: 0
12657
12844
  * * Description: Enabling this bit will result in search being possible at the API and UI layers`),
12658
12845
  FullTextSearchEnabled: z.boolean().describe(`
12659
12846
  * * Field Name: FullTextSearchEnabled
12660
- * * Display Name: Full Text Search Enabled
12847
+ * * Display Name: Full-Text Search Enabled
12661
12848
  * * SQL Data Type: bit
12662
12849
  * * Default Value: 0
12663
12850
  * * Description: Whether full-text search indexing is enabled for this entity.`),
12664
12851
  FullTextCatalog: z.string().nullable().describe(`
12665
12852
  * * Field Name: FullTextCatalog
12666
- * * Display Name: Full Text Catalog
12853
+ * * Display Name: Full-Text Catalog
12667
12854
  * * SQL Data Type: nvarchar(255)
12668
12855
  * * Description: Name of the SQL Server full-text catalog if search is enabled.`),
12669
12856
  FullTextCatalogGenerated: z.boolean().describe(`
12670
12857
  * * Field Name: FullTextCatalogGenerated
12671
- * * Display Name: Full Text Catalog Generated
12858
+ * * Display Name: Full-Text Catalog Generated
12672
12859
  * * SQL Data Type: bit
12673
12860
  * * Default Value: 1
12674
12861
  * * Description: Indicates if the full-text catalog was auto-generated by CodeGen.`),
12675
12862
  FullTextIndex: z.string().nullable().describe(`
12676
12863
  * * Field Name: FullTextIndex
12677
- * * Display Name: Full Text Index
12864
+ * * Display Name: Full-Text Index
12678
12865
  * * SQL Data Type: nvarchar(255)
12679
12866
  * * Description: Name of the full-text index on this entity's table.`),
12680
12867
  FullTextIndexGenerated: z.boolean().describe(`
12681
12868
  * * Field Name: FullTextIndexGenerated
12682
- * * Display Name: Full Text Index Generated
12869
+ * * Display Name: Full-Text Index Generated
12683
12870
  * * SQL Data Type: bit
12684
12871
  * * Default Value: 1
12685
12872
  * * Description: Indicates if the full-text index was auto-generated by CodeGen.`),
12686
12873
  FullTextSearchFunction: z.string().nullable().describe(`
12687
12874
  * * Field Name: FullTextSearchFunction
12688
- * * Display Name: Full Text Search Function
12875
+ * * Display Name: Search Function
12689
12876
  * * SQL Data Type: nvarchar(255)
12690
12877
  * * Description: Name of the function used for full-text searching this entity.`),
12691
12878
  FullTextSearchFunctionGenerated: z.boolean().describe(`
12692
12879
  * * Field Name: FullTextSearchFunctionGenerated
12693
- * * Display Name: Full Text Search Function Generated
12880
+ * * Display Name: Search Function Generated
12694
12881
  * * SQL Data Type: bit
12695
12882
  * * Default Value: 1
12696
12883
  * * Description: Indicates if the search function was auto-generated by CodeGen.`),
@@ -12702,34 +12889,34 @@ export const MJEntitySchema = z.object({
12702
12889
  * * Description: Maximum number of rows to return in user-created views for this entity.`),
12703
12890
  spCreate: z.string().nullable().describe(`
12704
12891
  * * Field Name: spCreate
12705
- * * Display Name: Create Stored Procedure
12892
+ * * Display Name: Create Procedure
12706
12893
  * * SQL Data Type: nvarchar(255)
12707
12894
  * * Description: Name of the stored procedure for creating records in this entity.`),
12708
12895
  spUpdate: z.string().nullable().describe(`
12709
12896
  * * Field Name: spUpdate
12710
- * * Display Name: Update Stored Procedure
12897
+ * * Display Name: Update Procedure
12711
12898
  * * SQL Data Type: nvarchar(255)
12712
12899
  * * Description: Name of the stored procedure for updating records in this entity.`),
12713
12900
  spDelete: z.string().nullable().describe(`
12714
12901
  * * Field Name: spDelete
12715
- * * Display Name: Delete Stored Procedure
12902
+ * * Display Name: Delete Procedure
12716
12903
  * * SQL Data Type: nvarchar(255)
12717
12904
  * * Description: Name of the stored procedure for deleting records in this entity.`),
12718
12905
  spCreateGenerated: z.boolean().describe(`
12719
12906
  * * Field Name: spCreateGenerated
12720
- * * Display Name: Create Procedure Generated
12907
+ * * Display Name: Create SP Generated
12721
12908
  * * SQL Data Type: bit
12722
12909
  * * Default Value: 1
12723
12910
  * * Description: Indicates if the create procedure was auto-generated by CodeGen.`),
12724
12911
  spUpdateGenerated: z.boolean().describe(`
12725
12912
  * * Field Name: spUpdateGenerated
12726
- * * Display Name: Update Procedure Generated
12913
+ * * Display Name: Update SP Generated
12727
12914
  * * SQL Data Type: bit
12728
12915
  * * Default Value: 1
12729
12916
  * * Description: Indicates if the update procedure was auto-generated by CodeGen.`),
12730
12917
  spDeleteGenerated: z.boolean().describe(`
12731
12918
  * * Field Name: spDeleteGenerated
12732
- * * Display Name: Delete Procedure Generated
12919
+ * * Display Name: Delete SP Generated
12733
12920
  * * SQL Data Type: bit
12734
12921
  * * Default Value: 1
12735
12922
  * * Description: Indicates if the delete procedure was auto-generated by CodeGen.`),
@@ -12757,12 +12944,12 @@ export const MJEntitySchema = z.object({
12757
12944
  * * Description: This field must be turned on in order to enable merging of records for the entity. For AllowRecordMerge to be turned on, AllowDeleteAPI must be set to 1, and DeleteType must be set to Soft`),
12758
12945
  spMatch: z.string().nullable().describe(`
12759
12946
  * * Field Name: spMatch
12760
- * * Display Name: Match Stored Procedure
12947
+ * * Display Name: Match Procedure
12761
12948
  * * SQL Data Type: nvarchar(255)
12762
12949
  * * Description: When specified, this stored procedure is used to find matching records in this particular entity. The convention is to pass in the primary key(s) columns for the given entity to the procedure and the return will be zero to many rows where there is a column for each primary key field(s) and a ProbabilityScore (numeric(1,12)) column that has a 0 to 1 value of the probability of a match.`),
12763
12950
  RelationshipDefaultDisplayType: z.union([z.literal('Dropdown'), z.literal('Search')]).describe(`
12764
12951
  * * Field Name: RelationshipDefaultDisplayType
12765
- * * Display Name: Relationship Default Display Type
12952
+ * * Display Name: Default Relationship Display Type
12766
12953
  * * SQL Data Type: nvarchar(20)
12767
12954
  * * Default Value: Search
12768
12955
  * * Value List Type: List
@@ -12778,12 +12965,12 @@ export const MJEntitySchema = z.object({
12778
12965
  * * Description: Indicates if the default user form was auto-generated for this entity.`),
12779
12966
  EntityObjectSubclassName: z.string().nullable().describe(`
12780
12967
  * * Field Name: EntityObjectSubclassName
12781
- * * Display Name: Entity Object Subclass Name
12968
+ * * Display Name: Subclass Name
12782
12969
  * * SQL Data Type: nvarchar(255)
12783
12970
  * * Description: TypeScript class name for the entity subclass in the codebase.`),
12784
12971
  EntityObjectSubclassImport: z.string().nullable().describe(`
12785
12972
  * * Field Name: EntityObjectSubclassImport
12786
- * * Display Name: Entity Object Subclass Import
12973
+ * * Display Name: Subclass Import Path
12787
12974
  * * SQL Data Type: nvarchar(255)
12788
12975
  * * Description: Import path for the entity subclass in the TypeScript codebase.`),
12789
12976
  PreferredCommunicationField: z.string().nullable().describe(`
@@ -12808,12 +12995,12 @@ export const MJEntitySchema = z.object({
12808
12995
  * * Default Value: getutcdate()`),
12809
12996
  ScopeDefault: z.string().nullable().describe(`
12810
12997
  * * Field Name: ScopeDefault
12811
- * * Display Name: Scope Default
12998
+ * * Display Name: Default Scope
12812
12999
  * * SQL Data Type: nvarchar(100)
12813
13000
  * * Description: Optional, comma-delimited string indicating the default scope for entity visibility. Options include Users, Admins, AI, and All. Defaults to All when NULL. This is used for simple defaults for filtering entity visibility, not security enforcement.`),
12814
13001
  RowsToPackWithSchema: z.union([z.literal('All'), z.literal('None'), z.literal('Sample')]).describe(`
12815
13002
  * * Field Name: RowsToPackWithSchema
12816
- * * Display Name: Rows To Pack With Schema
13003
+ * * Display Name: Rows To Pack
12817
13004
  * * SQL Data Type: nvarchar(20)
12818
13005
  * * Default Value: None
12819
13006
  * * Value List Type: List
@@ -12824,7 +13011,7 @@ export const MJEntitySchema = z.object({
12824
13011
  * * Description: Determines how entity rows should be packaged for external use. Options include None, Sample, and All. Defaults to None.`),
12825
13012
  RowsToPackSampleMethod: z.union([z.literal('bottom n'), z.literal('random'), z.literal('top n')]).describe(`
12826
13013
  * * Field Name: RowsToPackSampleMethod
12827
- * * Display Name: Rows To Pack Sample Method
13014
+ * * Display Name: Packing Sample Method
12828
13015
  * * SQL Data Type: nvarchar(20)
12829
13016
  * * Default Value: random
12830
13017
  * * Value List Type: List
@@ -12835,18 +13022,18 @@ export const MJEntitySchema = z.object({
12835
13022
  * * Description: Defines the sampling method for row packing when RowsToPackWithSchema is set to Sample. Options include random, top n, and bottom n. Defaults to random.`),
12836
13023
  RowsToPackSampleCount: z.number().describe(`
12837
13024
  * * Field Name: RowsToPackSampleCount
12838
- * * Display Name: Rows To Pack Sample Count
13025
+ * * Display Name: Packing Sample Count
12839
13026
  * * SQL Data Type: int
12840
13027
  * * Default Value: 0
12841
13028
  * * Description: The number of rows to pack when RowsToPackWithSchema is set to Sample, based on the designated sampling method. Defaults to 0.`),
12842
13029
  RowsToPackSampleOrder: z.string().nullable().describe(`
12843
13030
  * * Field Name: RowsToPackSampleOrder
12844
- * * Display Name: Rows To Pack Sample Order
13031
+ * * Display Name: Packing Sample Order
12845
13032
  * * SQL Data Type: nvarchar(MAX)
12846
13033
  * * Description: An optional ORDER BY clause for row packing when RowsToPackWithSchema is set to Sample. Allows custom ordering for selected entity data when using top n and bottom n.`),
12847
13034
  AutoRowCountFrequency: z.number().nullable().describe(`
12848
13035
  * * Field Name: AutoRowCountFrequency
12849
- * * Display Name: Auto Row Count Frequency
13036
+ * * Display Name: Refresh Frequency (Hours)
12850
13037
  * * SQL Data Type: int
12851
13038
  * * Description: Frequency in hours for automatically performing row counts on this entity. If NULL, automatic row counting is disabled. If greater than 0, schedules recurring SELECT COUNT(*) queries at the specified interval.`),
12852
13039
  RowCount: z.number().nullable().describe(`
@@ -12856,7 +13043,7 @@ export const MJEntitySchema = z.object({
12856
13043
  * * Description: Cached row count for this entity, populated by automatic row count processes when AutoRowCountFrequency is configured.`),
12857
13044
  RowCountRunAt: z.date().nullable().describe(`
12858
13045
  * * Field Name: RowCountRunAt
12859
- * * Display Name: Row Count Run At
13046
+ * * Display Name: Last Counted At
12860
13047
  * * SQL Data Type: datetimeoffset
12861
13048
  * * Description: Timestamp indicating when the last automatic row count was performed for this entity.`),
12862
13049
  Status: z.union([z.literal('Active'), z.literal('Deprecated'), z.literal('Disabled')]).describe(`
@@ -12881,6 +13068,48 @@ export const MJEntitySchema = z.object({
12881
13068
  * * SQL Data Type: bit
12882
13069
  * * Default Value: 0
12883
13070
  * * Description: When false (default), child types are disjoint - a record can only be one child type at a time. When true, a record can simultaneously exist as multiple child types (e.g., a Person can be both a Member and a Volunteer).`),
13071
+ AutoUpdateFullTextSearch: z.boolean().describe(`
13072
+ * * Field Name: AutoUpdateFullTextSearch
13073
+ * * Display Name: Auto Update Search Settings
13074
+ * * SQL Data Type: bit
13075
+ * * Default Value: 1
13076
+ * * Description: When true, CodeGen LLM can auto-configure full-text search settings (FullTextSearchEnabled, catalog, index, function) during code generation runs.`),
13077
+ AutoUpdateAllowUserSearchAPI: z.boolean().describe(`
13078
+ * * Field Name: AutoUpdateAllowUserSearchAPI
13079
+ * * Display Name: Auto Update Search API
13080
+ * * SQL Data Type: bit
13081
+ * * Default Value: 1
13082
+ * * Description: When true, CodeGen LLM can auto-set AllowUserSearchAPI during code generation runs.`),
13083
+ TrustServerCacheCompletely: z.boolean().describe(`
13084
+ * * Field Name: TrustServerCacheCompletely
13085
+ * * Display Name: Trust Server Cache
13086
+ * * SQL Data Type: bit
13087
+ * * Default Value: 1
13088
+ * * Description: When true (default), the server-side RunView cache will store and return cached results for this entity, trusting that all mutations flow through BaseEntity.Save() which fires cache invalidation events. Set to false for entities whose rows are created as side-effects of other operations via raw SQL (e.g., Record Changes created by spCreateRecordChange_Internal), since those inserts bypass BaseEntity and never trigger cache invalidation.`),
13089
+ SupportsGeoCoding: z.boolean().describe(`
13090
+ * * Field Name: SupportsGeoCoding
13091
+ * * Display Name: Supports Geo-Coding
13092
+ * * SQL Data Type: bit
13093
+ * * Default Value: 0
13094
+ * * Description: When true, CodeGen generates geo-aware subclass code, adds __mj_Latitude/__mj_Longitude virtual fields to the base view, and the UI shows a map view toggle. Auto-set by CodeGen when LLM detects geo-capable fields (address, lat/lng, etc.).`),
13095
+ AutoUpdateSupportsGeoCoding: z.boolean().describe(`
13096
+ * * Field Name: AutoUpdateSupportsGeoCoding
13097
+ * * Display Name: Auto Update Geo-Coding
13098
+ * * SQL Data Type: bit
13099
+ * * Default Value: 1
13100
+ * * Description: When true (default), CodeGen can automatically set SupportsGeoCoding based on LLM analysis of entity fields. Set to 0 to lock the value and prevent CodeGen from changing it.`),
13101
+ AllowCaching: z.boolean().describe(`
13102
+ * * Field Name: AllowCaching
13103
+ * * Display Name: Allow Caching
13104
+ * * SQL Data Type: bit
13105
+ * * Default Value: 0
13106
+ * * Description: Controls whether this entity participates in server-side and client-side caching. When false, all cache operations (PreRunView checks, auto-cache storage, BaseEntity event fingerprint scans, client-side IndexedDB cache) are skipped entirely. This column is the single source of truth at runtime; schema-level defaults are applied at CodeGen time via newEntityDefaults.AllowCachingBySchema.`),
13107
+ DetectExternalChanges: z.boolean().describe(`
13108
+ * * Field Name: DetectExternalChanges
13109
+ * * Display Name: Detect External Changes
13110
+ * * SQL Data Type: bit
13111
+ * * Default Value: 0
13112
+ * * Description: When set to 1 AND TrackRecordChanges is also 1, the external change detection system will scan this entity for changes made outside the MJ framework (direct SQL, third-party tools, etc.) and replay them through Save() to create proper RecordChange audit entries. Default is 0 (opt-out) because most entities, especially __mj schema metadata tables, are managed by migrations/CodeGen and should not be scanned.`),
12884
13113
  CodeName: z.string().nullable().describe(`
12885
13114
  * * Field Name: CodeName
12886
13115
  * * Display Name: Code Name
@@ -13633,7 +13862,7 @@ export const MJEntityFieldSchema = z.object({
13633
13862
  * * Default Value: newsequentialid()`),
13634
13863
  EntityID: z.string().describe(`
13635
13864
  * * Field Name: EntityID
13636
- * * Display Name: Entity
13865
+ * * Display Name: Entity ID
13637
13866
  * * SQL Data Type: uniqueidentifier
13638
13867
  * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)`),
13639
13868
  Sequence: z.number().describe(`
@@ -13682,7 +13911,7 @@ export const MJEntityFieldSchema = z.object({
13682
13911
  * * Description: Used for generating custom tabs in the generated forms, only utilized if GeneratedFormSection=Category`),
13683
13912
  Type: z.string().describe(`
13684
13913
  * * Field Name: Type
13685
- * * Display Name: Type
13914
+ * * Display Name: Data Type
13686
13915
  * * SQL Data Type: nvarchar(100)
13687
13916
  * * Description: SQL Data type (auto maintained by CodeGen)`),
13688
13917
  Length: z.number().nullable().describe(`
@@ -13728,7 +13957,7 @@ export const MJEntityFieldSchema = z.object({
13728
13957
  * * ListOrUserEntry
13729
13958
  * * None
13730
13959
  * * 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.`),
13731
- ExtendedType: z.union([z.literal('Code'), z.literal('Email'), z.literal('FaceTime'), z.literal('Geo'), 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(`
13960
+ 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(`
13732
13961
  * * Field Name: ExtendedType
13733
13962
  * * Display Name: Extended Type
13734
13963
  * * SQL Data Type: nvarchar(50)
@@ -13738,6 +13967,13 @@ export const MJEntityFieldSchema = z.object({
13738
13967
  * * Email
13739
13968
  * * FaceTime
13740
13969
  * * Geo
13970
+ * * GeoAddress
13971
+ * * GeoCity
13972
+ * * GeoCountry
13973
+ * * GeoLatitude
13974
+ * * GeoLongitude
13975
+ * * GeoPostalCode
13976
+ * * GeoStateProvince
13741
13977
  * * MSTeams
13742
13978
  * * Other
13743
13979
  * * SIP
@@ -13791,7 +14027,7 @@ export const MJEntityFieldSchema = z.object({
13791
14027
  * * Description: If set to 1, and if AllowUpdateAPI=1, the field can be edited within a view when the view is in edit mode.`),
13792
14028
  IncludeInUserSearchAPI: z.boolean().describe(`
13793
14029
  * * Field Name: IncludeInUserSearchAPI
13794
- * * Display Name: Include In User Search API
14030
+ * * Display Name: Include In User Search
13795
14031
  * * SQL Data Type: bit
13796
14032
  * * Default Value: 0
13797
14033
  * * Description: If set to 1, this column will be included in user search queries for both traditional and full text search`),
@@ -13803,7 +14039,7 @@ export const MJEntityFieldSchema = z.object({
13803
14039
  * * Description: If set to 1, CodeGen will automatically generate a Full Text Catalog/Index in the database and include this field in the search index.`),
13804
14040
  UserSearchParamFormatAPI: z.string().nullable().describe(`
13805
14041
  * * Field Name: UserSearchParamFormatAPI
13806
- * * Display Name: User Search Param Format API
14042
+ * * Display Name: Search Param Format
13807
14043
  * * SQL Data Type: nvarchar(500)
13808
14044
  * * Description: NULL`),
13809
14045
  IncludeInGeneratedForm: z.boolean().describe(`
@@ -13842,18 +14078,18 @@ export const MJEntityFieldSchema = z.object({
13842
14078
  * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)`),
13843
14079
  RelatedEntityFieldName: z.string().nullable().describe(`
13844
14080
  * * Field Name: RelatedEntityFieldName
13845
- * * Display Name: Related Entity Field Name
14081
+ * * Display Name: Related Entity Field
13846
14082
  * * SQL Data Type: nvarchar(255)
13847
14083
  * * Description: Name of the field in the Related Entity that this field links to (auto maintained by CodeGen)`),
13848
14084
  IncludeRelatedEntityNameFieldInBaseView: z.boolean().describe(`
13849
14085
  * * Field Name: IncludeRelatedEntityNameFieldInBaseView
13850
- * * Display Name: Include Related Entity Name Field In Base View
14086
+ * * Display Name: Include Related Name In View
13851
14087
  * * SQL Data Type: bit
13852
14088
  * * Default Value: 1
13853
14089
  * * Description: If set to 1, the "Name" field of the Related Entity will be included in this entity as a virtual field`),
13854
14090
  RelatedEntityNameFieldMap: z.string().nullable().describe(`
13855
14091
  * * Field Name: RelatedEntityNameFieldMap
13856
- * * Display Name: Related Entity Name Field Map
14092
+ * * Display Name: Related Entity Name Map
13857
14093
  * * SQL Data Type: nvarchar(255)
13858
14094
  * * Description: For foreign key fields, maps which field in the related entity contains the display name. This is used by CodeGen to automatically add in virtual fields for the "Name Field" of the related entity.`),
13859
14095
  RelatedEntityDisplayType: z.string().describe(`
@@ -13884,7 +14120,7 @@ export const MJEntityFieldSchema = z.object({
13884
14120
  * * Description: A comma-delimited string indicating the default scope for field visibility. Options include Users, Admins, AI, and All. Defaults to All when NULL. This is used for a simple method of filtering field defaults for visibility, not security enforcement.`),
13885
14121
  AutoUpdateRelatedEntityInfo: z.boolean().describe(`
13886
14122
  * * Field Name: AutoUpdateRelatedEntityInfo
13887
- * * Display Name: Auto Update Related Entity Info
14123
+ * * Display Name: Auto Update Related Info
13888
14124
  * * SQL Data Type: bit
13889
14125
  * * Default Value: 1
13890
14126
  * * Description: Indicates whether the related entity information should be automatically updated from the database schema. When set to 0, relationships not part of the database schema can be manually defined at the application and AI agent level. Defaults to 1.`),
@@ -13936,7 +14172,7 @@ export const MJEntityFieldSchema = z.object({
13936
14172
  * * Description: When 1, allows system/LLM to auto-update DisplayName during CodeGen; when 0, user has locked this field`),
13937
14173
  AutoUpdateIncludeInUserSearchAPI: z.boolean().describe(`
13938
14174
  * * Field Name: AutoUpdateIncludeInUserSearchAPI
13939
- * * Display Name: Auto Update Include In User Search API
14175
+ * * Display Name: Auto Update Search Inclusion
13940
14176
  * * SQL Data Type: bit
13941
14177
  * * Default Value: 1
13942
14178
  * * Description: When 1, allows system/LLM to auto-update IncludeInUserSearchAPI during CodeGen; when 0, user has locked this field`),
@@ -13997,6 +14233,30 @@ export const MJEntityFieldSchema = z.object({
13997
14233
  * * Display Name: JSON Type Definition
13998
14234
  * * SQL Data Type: nvarchar(MAX)
13999
14235
  * * Description: Raw TypeScript code emitted by CodeGen above the entity class definition. Typically contains the interface/type definition referenced by JSONType. Can include imports, multiple types, or any valid TypeScript.`),
14236
+ UserSearchPredicateAPI: z.string().describe(`
14237
+ * * Field Name: UserSearchPredicateAPI
14238
+ * * Display Name: User Search Predicate
14239
+ * * SQL Data Type: nvarchar(20)
14240
+ * * Default Value: Contains
14241
+ * * Description: Search predicate controlling how user search queries match against this field. Valid values: BeginsWith, Contains, EndsWith, Exact.`),
14242
+ AutoUpdateUserSearchPredicate: z.boolean().describe(`
14243
+ * * Field Name: AutoUpdateUserSearchPredicate
14244
+ * * Display Name: Auto Update Search Predicate
14245
+ * * SQL Data Type: bit
14246
+ * * Default Value: 1
14247
+ * * Description: When true, CodeGen LLM can auto-set the UserSearchPredicateAPI value during code generation runs.`),
14248
+ AutoUpdateFullTextSearch: z.boolean().describe(`
14249
+ * * Field Name: AutoUpdateFullTextSearch
14250
+ * * Display Name: Auto Update Full Text Search
14251
+ * * SQL Data Type: bit
14252
+ * * Default Value: 1
14253
+ * * Description: When true, CodeGen LLM can auto-set the FullTextSearchEnabled value during code generation runs.`),
14254
+ AutoUpdateExtendedType: z.boolean().describe(`
14255
+ * * Field Name: AutoUpdateExtendedType
14256
+ * * Display Name: Auto Update Extended Type
14257
+ * * SQL Data Type: bit
14258
+ * * Default Value: 1
14259
+ * * Description: When true (default), CodeGen can automatically suggest and apply ExtendedType values (GeoLatitude, GeoLongitude, GeoAddress, etc.) during LLM field categorization. Set to 0 to lock admin-specified ExtendedType.`),
14000
14260
  FieldCodeName: z.string().nullable().describe(`
14001
14261
  * * Field Name: FieldCodeName
14002
14262
  * * Display Name: Field Code Name
@@ -14027,19 +14287,19 @@ export const MJEntityFieldSchema = z.object({
14027
14287
  * * SQL Data Type: nvarchar(MAX)`),
14028
14288
  RelatedEntity: z.string().nullable().describe(`
14029
14289
  * * Field Name: RelatedEntity
14030
- * * Display Name: Related Entity
14290
+ * * Display Name: Related Entity Name
14031
14291
  * * SQL Data Type: nvarchar(255)`),
14032
14292
  RelatedEntitySchemaName: z.string().nullable().describe(`
14033
14293
  * * Field Name: RelatedEntitySchemaName
14034
- * * Display Name: Related Entity Schema Name
14294
+ * * Display Name: Related Entity Schema
14035
14295
  * * SQL Data Type: nvarchar(255)`),
14036
14296
  RelatedEntityBaseTable: z.string().nullable().describe(`
14037
14297
  * * Field Name: RelatedEntityBaseTable
14038
- * * Display Name: Related Entity Base Table
14298
+ * * Display Name: Related Entity Table
14039
14299
  * * SQL Data Type: nvarchar(255)`),
14040
14300
  RelatedEntityBaseView: z.string().nullable().describe(`
14041
14301
  * * Field Name: RelatedEntityBaseView
14042
- * * Display Name: Related Entity Base View
14302
+ * * Display Name: Related Entity View
14043
14303
  * * SQL Data Type: nvarchar(255)`),
14044
14304
  RelatedEntityCodeName: z.string().nullable().describe(`
14045
14305
  * * Field Name: RelatedEntityCodeName
@@ -14931,6 +15191,79 @@ export const MJFileEntityRecordLinkSchema = z.object({
14931
15191
  * * Display Name: Entity
14932
15192
  * * SQL Data Type: nvarchar(255)`),
14933
15193
  });
15194
+ /**
15195
+ * zod schema definition for the entity MJ: File Storage Account Permissions
15196
+ */
15197
+ export const MJFileStorageAccountPermissionSchema = z.object({
15198
+ ID: z.string().describe(`
15199
+ * * Field Name: ID
15200
+ * * Display Name: ID
15201
+ * * SQL Data Type: uniqueidentifier
15202
+ * * Default Value: newsequentialid()`),
15203
+ FileStorageAccountID: z.string().describe(`
15204
+ * * Field Name: FileStorageAccountID
15205
+ * * Display Name: Storage Account
15206
+ * * SQL Data Type: uniqueidentifier
15207
+ * * Related Entity/Foreign Key: MJ: File Storage Accounts (vwFileStorageAccounts.ID)
15208
+ * * Description: The storage account this permission applies to.`),
15209
+ Type: z.union([z.literal('Everyone'), z.literal('Role'), z.literal('User')]).describe(`
15210
+ * * Field Name: Type
15211
+ * * Display Name: Permission Type
15212
+ * * SQL Data Type: nvarchar(20)
15213
+ * * Default Value: Role
15214
+ * * Value List Type: List
15215
+ * * Possible Values
15216
+ * * Everyone
15217
+ * * Role
15218
+ * * User
15219
+ * * Description: Permission type: User (requires UserID), Role (requires RoleID), or Everyone (both NULL).`),
15220
+ UserID: z.string().nullable().describe(`
15221
+ * * Field Name: UserID
15222
+ * * Display Name: User
15223
+ * * SQL Data Type: uniqueidentifier
15224
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)
15225
+ * * Description: Required when Type is User. The specific user granted access to this storage account.`),
15226
+ RoleID: z.string().nullable().describe(`
15227
+ * * Field Name: RoleID
15228
+ * * Display Name: Role
15229
+ * * SQL Data Type: uniqueidentifier
15230
+ * * Related Entity/Foreign Key: MJ: Roles (vwRoles.ID)
15231
+ * * Description: Required when Type is Role. The role granted access to this storage account.`),
15232
+ CanRead: z.boolean().describe(`
15233
+ * * Field Name: CanRead
15234
+ * * Display Name: Can Read
15235
+ * * SQL Data Type: bit
15236
+ * * Default Value: 1
15237
+ * * Description: Whether the grantee can read/search files in this storage account.`),
15238
+ CanWrite: z.boolean().describe(`
15239
+ * * Field Name: CanWrite
15240
+ * * Display Name: Can Write
15241
+ * * SQL Data Type: bit
15242
+ * * Default Value: 0
15243
+ * * Description: Whether the grantee can upload/modify files in this storage account.`),
15244
+ __mj_CreatedAt: z.date().describe(`
15245
+ * * Field Name: __mj_CreatedAt
15246
+ * * Display Name: Created At
15247
+ * * SQL Data Type: datetimeoffset
15248
+ * * Default Value: getutcdate()`),
15249
+ __mj_UpdatedAt: z.date().describe(`
15250
+ * * Field Name: __mj_UpdatedAt
15251
+ * * Display Name: Updated At
15252
+ * * SQL Data Type: datetimeoffset
15253
+ * * Default Value: getutcdate()`),
15254
+ FileStorageAccount: z.string().describe(`
15255
+ * * Field Name: FileStorageAccount
15256
+ * * Display Name: Storage Account Name
15257
+ * * SQL Data Type: nvarchar(200)`),
15258
+ User: z.string().nullable().describe(`
15259
+ * * Field Name: User
15260
+ * * Display Name: User Name
15261
+ * * SQL Data Type: nvarchar(100)`),
15262
+ Role: z.string().nullable().describe(`
15263
+ * * Field Name: Role
15264
+ * * Display Name: Role Name
15265
+ * * SQL Data Type: nvarchar(50)`),
15266
+ });
14934
15267
  /**
14935
15268
  * zod schema definition for the entity MJ: File Storage Accounts
14936
15269
  */
@@ -14973,9 +15306,15 @@ export const MJFileStorageAccountSchema = z.object({
14973
15306
  * * Display Name: Updated At
14974
15307
  * * SQL Data Type: datetimeoffset
14975
15308
  * * Default Value: getutcdate()`),
15309
+ IncludeInGlobalSearch: z.boolean().describe(`
15310
+ * * Field Name: IncludeInGlobalSearch
15311
+ * * Display Name: Include In Global Search
15312
+ * * SQL Data Type: bit
15313
+ * * Default Value: 0
15314
+ * * Description: When true, this storage account is included in universal/global search results. Only effective if the associated provider supports search (SupportsSearch = 1).`),
14976
15315
  Provider: z.string().describe(`
14977
15316
  * * Field Name: Provider
14978
- * * Display Name: Provider Name
15317
+ * * Display Name: Provider Type
14979
15318
  * * SQL Data Type: nvarchar(50)`),
14980
15319
  Credential: z.string().describe(`
14981
15320
  * * Field Name: Credential
@@ -15259,6 +15598,69 @@ export const MJGeneratedCodeSchema = z.object({
15259
15598
  * * Display Name: Linked Entity
15260
15599
  * * SQL Data Type: nvarchar(255)`),
15261
15600
  });
15601
+ /**
15602
+ * zod schema definition for the entity MJ: Instance Configurations
15603
+ */
15604
+ export const MJInstanceConfigurationSchema = z.object({
15605
+ ID: z.string().describe(`
15606
+ * * Field Name: ID
15607
+ * * Display Name: ID
15608
+ * * SQL Data Type: uniqueidentifier
15609
+ * * Default Value: newsequentialid()`),
15610
+ FeatureKey: z.string().describe(`
15611
+ * * Field Name: FeatureKey
15612
+ * * Display Name: Feature Key
15613
+ * * SQL Data Type: nvarchar(200)
15614
+ * * Description: Unique dot-notation key identifying the feature, e.g. Shell.SearchBar.Enabled.`),
15615
+ Value: z.string().describe(`
15616
+ * * Field Name: Value
15617
+ * * Display Name: Current Value
15618
+ * * SQL Data Type: nvarchar(MAX)
15619
+ * * Description: Current value for this feature setting.`),
15620
+ ValueType: z.union([z.literal('boolean'), z.literal('json'), z.literal('number'), z.literal('string')]).describe(`
15621
+ * * Field Name: ValueType
15622
+ * * Display Name: Value Type
15623
+ * * SQL Data Type: nvarchar(20)
15624
+ * * Default Value: boolean
15625
+ * * Value List Type: List
15626
+ * * Possible Values
15627
+ * * boolean
15628
+ * * json
15629
+ * * number
15630
+ * * string
15631
+ * * Description: Data type of the value: boolean, string, number, or json.`),
15632
+ Category: z.string().describe(`
15633
+ * * Field Name: Category
15634
+ * * Display Name: Admin Category
15635
+ * * SQL Data Type: nvarchar(100)
15636
+ * * Default Value: General
15637
+ * * Description: Grouping category for admin UI display.`),
15638
+ DisplayName: z.string().describe(`
15639
+ * * Field Name: DisplayName
15640
+ * * Display Name: Display Name
15641
+ * * SQL Data Type: nvarchar(200)
15642
+ * * Description: Human-readable display name for the setting.`),
15643
+ Description: z.string().nullable().describe(`
15644
+ * * Field Name: Description
15645
+ * * Display Name: Description
15646
+ * * SQL Data Type: nvarchar(MAX)
15647
+ * * Description: Optional extended description or help text for the setting.`),
15648
+ DefaultValue: z.string().describe(`
15649
+ * * Field Name: DefaultValue
15650
+ * * Display Name: Default Value
15651
+ * * SQL Data Type: nvarchar(MAX)
15652
+ * * Description: Factory default value. Used when resetting to defaults.`),
15653
+ __mj_CreatedAt: z.date().describe(`
15654
+ * * Field Name: __mj_CreatedAt
15655
+ * * Display Name: Created At
15656
+ * * SQL Data Type: datetimeoffset
15657
+ * * Default Value: getutcdate()`),
15658
+ __mj_UpdatedAt: z.date().describe(`
15659
+ * * Field Name: __mj_UpdatedAt
15660
+ * * Display Name: Updated At
15661
+ * * SQL Data Type: datetimeoffset
15662
+ * * Default Value: getutcdate()`),
15663
+ });
15262
15664
  /**
15263
15665
  * zod schema definition for the entity MJ: Integration Object Fields
15264
15666
  */
@@ -18801,6 +19203,135 @@ export const MJRecordChangeSchema = z.object({
18801
19203
  * * Display Name: Integration
18802
19204
  * * SQL Data Type: nvarchar(100)`),
18803
19205
  });
19206
+ /**
19207
+ * zod schema definition for the entity MJ: Record Geo Codes
19208
+ */
19209
+ export const MJRecordGeoCodeSchema = z.object({
19210
+ ID: z.string().describe(`
19211
+ * * Field Name: ID
19212
+ * * Display Name: ID
19213
+ * * SQL Data Type: uniqueidentifier
19214
+ * * Default Value: newsequentialid()`),
19215
+ EntityID: z.string().describe(`
19216
+ * * Field Name: EntityID
19217
+ * * Display Name: Entity
19218
+ * * SQL Data Type: uniqueidentifier
19219
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
19220
+ * * Description: Foreign key to Entity. Identifies which entity this geocode belongs to.`),
19221
+ RecordID: z.string().describe(`
19222
+ * * Field Name: RecordID
19223
+ * * Display Name: Record
19224
+ * * SQL Data Type: nvarchar(450)
19225
+ * * Description: MJ composite primary key format string identifying the source record (e.g., "ID|<uuid>"). Max 450 chars for SQL Server index support.`),
19226
+ LocationType: z.string().describe(`
19227
+ * * Field Name: LocationType
19228
+ * * Display Name: Location Type
19229
+ * * SQL Data Type: nvarchar(50)
19230
+ * * Default Value: Primary
19231
+ * * Description: Discriminator for multi-location entities. Default "Primary" for single-address entities. Multi-address examples: "Home", "Business", "Mailing", "PO Box".`),
19232
+ Latitude: z.number().nullable().describe(`
19233
+ * * Field Name: Latitude
19234
+ * * Display Name: Latitude
19235
+ * * SQL Data Type: decimal(10, 6)
19236
+ * * Description: Geocoded latitude coordinate. NULL when Status is "pending" or "failed".`),
19237
+ Longitude: z.number().nullable().describe(`
19238
+ * * Field Name: Longitude
19239
+ * * Display Name: Longitude
19240
+ * * SQL Data Type: decimal(10, 6)
19241
+ * * Description: Geocoded longitude coordinate. NULL when Status is "pending" or "failed".`),
19242
+ Precision: z.union([z.literal('city'), z.literal('country'), z.literal('county'), z.literal('exact'), z.literal('postal_code'), z.literal('state_province')]).nullable().describe(`
19243
+ * * Field Name: Precision
19244
+ * * Display Name: Precision
19245
+ * * SQL Data Type: nvarchar(20)
19246
+ * * Value List Type: List
19247
+ * * Possible Values
19248
+ * * city
19249
+ * * country
19250
+ * * county
19251
+ * * exact
19252
+ * * postal_code
19253
+ * * state_province
19254
+ * * Description: Precision level of the geocoded result: exact (street address), postal_code, city, county, state_province, or country.`),
19255
+ CountryID: z.string().nullable().describe(`
19256
+ * * Field Name: CountryID
19257
+ * * Display Name: Country
19258
+ * * SQL Data Type: uniqueidentifier
19259
+ * * Related Entity/Foreign Key: MJ: Countries (vwCountries.ID)
19260
+ * * Description: Optional FK to Country reference table. Populated alongside lat/lng to enable choropleth grouping without reverse-geocoding at render time.`),
19261
+ StateProvinceID: z.string().nullable().describe(`
19262
+ * * Field Name: StateProvinceID
19263
+ * * Display Name: State Province
19264
+ * * SQL Data Type: uniqueidentifier
19265
+ * * Related Entity/Foreign Key: MJ: State Provinces (vwStateProvinces.ID)
19266
+ * * Description: Optional FK to StateProvince reference table. Populated alongside lat/lng to enable state-level choropleth grouping.`),
19267
+ Status: z.union([z.literal('failed'), z.literal('pending'), z.literal('success')]).describe(`
19268
+ * * Field Name: Status
19269
+ * * Display Name: Status
19270
+ * * SQL Data Type: nvarchar(20)
19271
+ * * Default Value: pending
19272
+ * * Value List Type: List
19273
+ * * Possible Values
19274
+ * * failed
19275
+ * * pending
19276
+ * * success
19277
+ * * Description: Current geocoding status: "pending" (awaiting geocode), "success" (geocoded), or "failed" (geocoding error). Used by scheduled job for retry logic.`),
19278
+ ErrorMessage: z.string().nullable().describe(`
19279
+ * * Field Name: ErrorMessage
19280
+ * * Display Name: Error Message
19281
+ * * SQL Data Type: nvarchar(MAX)
19282
+ * * Description: Error details when Status is "failed". Captures API error messages, rate limit info, etc. for debugging.`),
19283
+ RetryCount: z.number().describe(`
19284
+ * * Field Name: RetryCount
19285
+ * * Display Name: Retry Count
19286
+ * * SQL Data Type: int
19287
+ * * Default Value: 0
19288
+ * * Description: Number of geocoding attempts. Used for exponential backoff in the scheduled retry job. Stops retrying at configurable maxRetries (default 3).`),
19289
+ SourceFieldHash: z.string().nullable().describe(`
19290
+ * * Field Name: SourceFieldHash
19291
+ * * Display Name: Source Field Hash
19292
+ * * SQL Data Type: nvarchar(64)
19293
+ * * Description: SHA-256 hash of the source field values that produced this geocode. When source fields change on save, the hash won't match and re-geocoding is triggered. Format: SHA-256(concat(field1, "|", field2, ...)).`),
19294
+ GeocodedAt: z.date().nullable().describe(`
19295
+ * * Field Name: GeocodedAt
19296
+ * * Display Name: Geocoded At
19297
+ * * SQL Data Type: datetimeoffset
19298
+ * * Description: Timestamp of when geocoding was last attempted (success or failure).`),
19299
+ GeocodingSource: z.union([z.literal('google'), z.literal('ip_geolocation'), z.literal('manual'), z.literal('native'), z.literal('reference_data'), z.literal('reverse')]).nullable().describe(`
19300
+ * * Field Name: GeocodingSource
19301
+ * * Display Name: Geocoding Source
19302
+ * * SQL Data Type: nvarchar(30)
19303
+ * * Value List Type: List
19304
+ * * Possible Values
19305
+ * * google
19306
+ * * ip_geolocation
19307
+ * * manual
19308
+ * * native
19309
+ * * reference_data
19310
+ * * reverse
19311
+ * * Description: How this geocode was produced: google (Google Geocoding API), reference_data (resolved via Country/StateProvince tables), manual (user-entered), ip_geolocation (IP lookup), native (copied from entity lat/lng fields), reverse (reverse geocode from coordinates).`),
19312
+ __mj_CreatedAt: z.date().describe(`
19313
+ * * Field Name: __mj_CreatedAt
19314
+ * * Display Name: Created At
19315
+ * * SQL Data Type: datetimeoffset
19316
+ * * Default Value: getutcdate()`),
19317
+ __mj_UpdatedAt: z.date().describe(`
19318
+ * * Field Name: __mj_UpdatedAt
19319
+ * * Display Name: Updated At
19320
+ * * SQL Data Type: datetimeoffset
19321
+ * * Default Value: getutcdate()`),
19322
+ Entity: z.string().describe(`
19323
+ * * Field Name: Entity
19324
+ * * Display Name: Entity Name
19325
+ * * SQL Data Type: nvarchar(255)`),
19326
+ Country: z.string().nullable().describe(`
19327
+ * * Field Name: Country
19328
+ * * Display Name: Country Name
19329
+ * * SQL Data Type: nvarchar(200)`),
19330
+ StateProvince: z.string().nullable().describe(`
19331
+ * * Field Name: StateProvince
19332
+ * * Display Name: State Province Name
19333
+ * * SQL Data Type: nvarchar(200)`),
19334
+ });
18804
19335
  /**
18805
19336
  * zod schema definition for the entity MJ: Record Links
18806
19337
  */
@@ -20154,6 +20685,99 @@ export const MJSchemaInfoSchema = z.object({
20154
20685
  * * SQL Data Type: nvarchar(25)
20155
20686
  * * Description: Optional suffix to append to entity names generated for this schema. Can be overridden by mj.config.cjs NameRulesBySchema settings.`),
20156
20687
  });
20688
+ /**
20689
+ * zod schema definition for the entity MJ: Search Providers
20690
+ */
20691
+ export const MJSearchProviderSchema = z.object({
20692
+ ID: z.string().describe(`
20693
+ * * Field Name: ID
20694
+ * * Display Name: ID
20695
+ * * SQL Data Type: uniqueidentifier
20696
+ * * Default Value: newsequentialid()`),
20697
+ Name: z.string().describe(`
20698
+ * * Field Name: Name
20699
+ * * Display Name: Name
20700
+ * * SQL Data Type: nvarchar(200)
20701
+ * * Description: Display name for this search provider (e.g., "Vector Search", "Algolia")`),
20702
+ Description: z.string().nullable().describe(`
20703
+ * * Field Name: Description
20704
+ * * Display Name: Description
20705
+ * * SQL Data Type: nvarchar(MAX)
20706
+ * * Description: Human-readable description of what this provider searches and how it works`),
20707
+ DriverClass: z.string().describe(`
20708
+ * * Field Name: DriverClass
20709
+ * * Display Name: Driver Class
20710
+ * * SQL Data Type: nvarchar(500)
20711
+ * * Description: ClassFactory key used with @RegisterClass(ISearchProvider, DriverClass) to instantiate the provider at runtime`),
20712
+ Status: z.union([z.literal('Active'), z.literal('Pending'), z.literal('Terminated')]).describe(`
20713
+ * * Field Name: Status
20714
+ * * Display Name: Status
20715
+ * * SQL Data Type: nvarchar(20)
20716
+ * * Default Value: Active
20717
+ * * Value List Type: List
20718
+ * * Possible Values
20719
+ * * Active
20720
+ * * Pending
20721
+ * * Terminated
20722
+ * * Description: Provider lifecycle status: Pending (not yet activated), Active (in use), Terminated (disabled)`),
20723
+ Priority: z.number().describe(`
20724
+ * * Field Name: Priority
20725
+ * * Display Name: Priority
20726
+ * * SQL Data Type: int
20727
+ * * Default Value: 0
20728
+ * * Description: Execution priority (lower = higher priority). Controls provider ordering and can influence RRF weighting. Must be >= 0.`),
20729
+ SupportsPreview: z.boolean().describe(`
20730
+ * * Field Name: SupportsPreview
20731
+ * * Display Name: Supports Preview
20732
+ * * SQL Data Type: bit
20733
+ * * Default Value: 1
20734
+ * * Description: Whether this provider should run during fast preview/autocomplete searches. Expensive providers (external APIs) may set this to 0.`),
20735
+ MaxResultsOverride: z.number().nullable().describe(`
20736
+ * * Field Name: MaxResultsOverride
20737
+ * * Display Name: Max Results Override
20738
+ * * SQL Data Type: int
20739
+ * * Description: Optional per-provider cap on the number of results to return. Useful for rate-limited or pay-per-query external APIs. When NULL, uses the SearchEngine default.`),
20740
+ ProviderConfig: z.string().nullable().describe(`
20741
+ * * Field Name: ProviderConfig
20742
+ * * Display Name: Provider Configuration
20743
+ * * SQL Data Type: nvarchar(MAX)
20744
+ * * Description: Optional JSON configuration blob for provider-specific settings (e.g., API endpoints, index names, tuning parameters). Schema is provider-defined.`),
20745
+ CredentialID: z.string().nullable().describe(`
20746
+ * * Field Name: CredentialID
20747
+ * * Display Name: Credential
20748
+ * * SQL Data Type: uniqueidentifier
20749
+ * * Related Entity/Foreign Key: MJ: Credentials (vwCredentials.ID)
20750
+ * * Description: Optional FK to the Credential entity for providers that require authentication (e.g., Algolia API key, external service credentials)`),
20751
+ DisplayName: z.string().nullable().describe(`
20752
+ * * Field Name: DisplayName
20753
+ * * Display Name: Display Name
20754
+ * * SQL Data Type: nvarchar(200)
20755
+ * * Description: UI display name for this provider shown in filter facets and result grouping (e.g., "Database", "Semantic Search"). When NULL, falls back to the Name column.`),
20756
+ Icon: z.string().nullable().describe(`
20757
+ * * Field Name: Icon
20758
+ * * Display Name: Icon
20759
+ * * SQL Data Type: nvarchar(200)
20760
+ * * Description: CSS icon class for UI display in filter facets and result badges (e.g., "fa-solid fa-database", "fa-solid fa-brain"). Supports any CSS-based icon library. When NULL, a default icon is used.`),
20761
+ Comments: z.string().nullable().describe(`
20762
+ * * Field Name: Comments
20763
+ * * Display Name: Comments
20764
+ * * SQL Data Type: nvarchar(MAX)
20765
+ * * Description: Free-form notes about this provider configuration`),
20766
+ __mj_CreatedAt: z.date().describe(`
20767
+ * * Field Name: __mj_CreatedAt
20768
+ * * Display Name: Created At
20769
+ * * SQL Data Type: datetimeoffset
20770
+ * * Default Value: getutcdate()`),
20771
+ __mj_UpdatedAt: z.date().describe(`
20772
+ * * Field Name: __mj_UpdatedAt
20773
+ * * Display Name: Updated At
20774
+ * * SQL Data Type: datetimeoffset
20775
+ * * Default Value: getutcdate()`),
20776
+ Credential: z.string().nullable().describe(`
20777
+ * * Field Name: Credential
20778
+ * * Display Name: Credential Name
20779
+ * * SQL Data Type: nvarchar(200)`),
20780
+ });
20157
20781
  /**
20158
20782
  * zod schema definition for the entity MJ: Skills
20159
20783
  */
@@ -20249,6 +20873,71 @@ export const MJSQLDialectSchema = z.object({
20249
20873
  * * SQL Data Type: datetimeoffset
20250
20874
  * * Default Value: getutcdate()`),
20251
20875
  });
20876
+ /**
20877
+ * zod schema definition for the entity MJ: State Provinces
20878
+ */
20879
+ export const MJStateProvinceSchema = z.object({
20880
+ ID: z.string().describe(`
20881
+ * * Field Name: ID
20882
+ * * Display Name: ID
20883
+ * * SQL Data Type: uniqueidentifier
20884
+ * * Default Value: newsequentialid()`),
20885
+ CountryID: z.string().describe(`
20886
+ * * Field Name: CountryID
20887
+ * * Display Name: Country
20888
+ * * SQL Data Type: uniqueidentifier
20889
+ * * Related Entity/Foreign Key: MJ: Countries (vwCountries.ID)
20890
+ * * Description: Foreign key to Country. Establishes the parent country for this state/province.`),
20891
+ Name: z.string().describe(`
20892
+ * * Field Name: Name
20893
+ * * Display Name: Name
20894
+ * * SQL Data Type: nvarchar(200)
20895
+ * * Description: Full state/province name (e.g., "California", "Ontario").`),
20896
+ Code: z.string().describe(`
20897
+ * * Field Name: Code
20898
+ * * Display Name: State Code
20899
+ * * SQL Data Type: nvarchar(10)
20900
+ * * Description: Short code within the country (e.g., "CA", "ON"). Unique per country via compound constraint.`),
20901
+ ISO3166_2: z.string().describe(`
20902
+ * * Field Name: ISO3166_2
20903
+ * * Display Name: ISO 3166-2 Code
20904
+ * * SQL Data Type: nvarchar(10)
20905
+ * * Description: ISO 3166-2 subdivision code (e.g., "US-CA", "CA-ON"). Globally unique.`),
20906
+ Latitude: z.number().nullable().describe(`
20907
+ * * Field Name: Latitude
20908
+ * * Display Name: Latitude
20909
+ * * SQL Data Type: decimal(10, 6)
20910
+ * * Description: Geographic centroid latitude. Used as fallback point for state-level geocoding.`),
20911
+ Longitude: z.number().nullable().describe(`
20912
+ * * Field Name: Longitude
20913
+ * * Display Name: Longitude
20914
+ * * SQL Data Type: decimal(10, 6)
20915
+ * * Description: Geographic centroid longitude. Used as fallback point for state-level geocoding.`),
20916
+ BoundaryGeoJSON: z.string().nullable().describe(`
20917
+ * * Field Name: BoundaryGeoJSON
20918
+ * * Display Name: Boundary GeoJSON
20919
+ * * SQL Data Type: nvarchar(MAX)
20920
+ * * Description: Medium-resolution (~50m) GeoJSON boundary polygon for choropleth map rendering. Nullable. Total ~15-20MB for all states/provinces worldwide.`),
20921
+ CommonAliases: z.string().nullable().describe(`
20922
+ * * Field Name: CommonAliases
20923
+ * * Display Name: Common Aliases
20924
+ * * SQL Data Type: nvarchar(MAX)
20925
+ * * Description: JSON array of common aliases (e.g., ["Calif.","California","Cal"]). Used by GeoResolver for fuzzy text-to-state matching.`),
20926
+ __mj_CreatedAt: z.date().describe(`
20927
+ * * Field Name: __mj_CreatedAt
20928
+ * * Display Name: Created At
20929
+ * * SQL Data Type: datetimeoffset
20930
+ * * Default Value: getutcdate()`),
20931
+ __mj_UpdatedAt: z.date().describe(`
20932
+ * * Field Name: __mj_UpdatedAt
20933
+ * * Display Name: Updated At
20934
+ * * SQL Data Type: datetimeoffset
20935
+ * * Default Value: getutcdate()`),
20936
+ Country: z.string().describe(`
20937
+ * * Field Name: Country
20938
+ * * Display Name: Country Name
20939
+ * * SQL Data Type: nvarchar(200)`),
20940
+ });
20252
20941
  /**
20253
20942
  * zod schema definition for the entity MJ: Tag Audit Logs
20254
20943
  */
@@ -22905,6 +23594,16 @@ export const MJVectorDatabaseSchema = z.object({
22905
23594
  * * Display Name: Configuration
22906
23595
  * * SQL Data Type: nvarchar(MAX)
22907
23596
  * * Description: JSON configuration settings for this vector database provider. Stores provider-specific connection settings like custom host URLs, authentication configuration, timeouts, retry policies, and batch size limits. NULL means use defaults from environment variables or provider defaults.`),
23597
+ CredentialID: z.string().nullable().describe(`
23598
+ * * Field Name: CredentialID
23599
+ * * Display Name: Credential
23600
+ * * SQL Data Type: uniqueidentifier
23601
+ * * Related Entity/Foreign Key: MJ: Credentials (vwCredentials.ID)
23602
+ * * Description: Optional link to a stored credential containing the API key and any other authentication details for this vector database provider. When set, the Credential Engine decrypts and supplies the key at runtime. When NULL, the system falls back to the environment variable AI_VENDOR_API_KEY__<ClassKey>.`),
23603
+ Credential: z.string().nullable().describe(`
23604
+ * * Field Name: Credential
23605
+ * * Display Name: Credential Name
23606
+ * * SQL Data Type: nvarchar(200)`),
22908
23607
  });
22909
23608
  /**
22910
23609
  * zod schema definition for the entity MJ: Vector Indexes
@@ -26117,14 +26816,35 @@ let MJAIAgentCategoryEntity = class MJAIAgentCategoryEntity extends BaseEntity {
26117
26816
  return this.Get('__mj_UpdatedAt');
26118
26817
  }
26119
26818
  /**
26819
+ * * Field Name: DefaultStorageAccountID
26820
+ * * Display Name: Default Storage Account
26821
+ * * SQL Data Type: uniqueidentifier
26822
+ * * Related Entity/Foreign Key: MJ: File Storage Accounts (vwFileStorageAccounts.ID)
26823
+ * * Description: Default file storage account for agents in this category. Inherited by child categories that do not define their own value — resolution walks up the ParentID tree until a non-null value is found. Overrides the Type-level default. FK to FileStorageAccount.
26824
+ */
26825
+ get DefaultStorageAccountID() {
26826
+ return this.Get('DefaultStorageAccountID');
26827
+ }
26828
+ set DefaultStorageAccountID(value) {
26829
+ this.Set('DefaultStorageAccountID', value);
26830
+ }
26831
+ /**
26120
26832
  * * Field Name: Parent
26121
- * * Display Name: Parent Name
26833
+ * * Display Name: Parent
26122
26834
  * * SQL Data Type: nvarchar(200)
26123
26835
  */
26124
26836
  get Parent() {
26125
26837
  return this.Get('Parent');
26126
26838
  }
26127
26839
  /**
26840
+ * * Field Name: DefaultStorageAccount
26841
+ * * Display Name: Default Storage Account Name
26842
+ * * SQL Data Type: nvarchar(200)
26843
+ */
26844
+ get DefaultStorageAccount() {
26845
+ return this.Get('DefaultStorageAccount');
26846
+ }
26847
+ /**
26128
26848
  * * Field Name: RootParentID
26129
26849
  * * Display Name: Root Parent
26130
26850
  * * SQL Data Type: uniqueidentifier
@@ -31648,7 +32368,7 @@ let MJAIAgentTypeEntity = class MJAIAgentTypeEntity extends BaseEntity {
31648
32368
  }
31649
32369
  /**
31650
32370
  * * Field Name: PromptParamsSchema
31651
- * * Display Name: Prompt Parameters Schema
32371
+ * * Display Name: Prompt Params Schema
31652
32372
  * * SQL Data Type: nvarchar(MAX)
31653
32373
  * * Description: JSON Schema defining the available prompt parameters for this agent type. Includes property definitions with types, defaults, and descriptions. Used by agents of this type to customize which prompt sections are included in the system prompt. The schema follows JSON Schema draft-07 format.
31654
32374
  */
@@ -31671,13 +32391,34 @@ let MJAIAgentTypeEntity = class MJAIAgentTypeEntity extends BaseEntity {
31671
32391
  this.Set('AssignmentStrategy', value);
31672
32392
  }
31673
32393
  /**
32394
+ * * Field Name: DefaultStorageAccountID
32395
+ * * Display Name: Default Storage Account
32396
+ * * SQL Data Type: uniqueidentifier
32397
+ * * Related Entity/Foreign Key: MJ: File Storage Accounts (vwFileStorageAccounts.ID)
32398
+ * * Description: Default file storage account for agents of this type. Lowest priority in the resolution chain (Type → Category tree → Agent → Runtime override). When set, all agents of this type use this storage account unless overridden at a more specific level. FK to FileStorageAccount.
32399
+ */
32400
+ get DefaultStorageAccountID() {
32401
+ return this.Get('DefaultStorageAccountID');
32402
+ }
32403
+ set DefaultStorageAccountID(value) {
32404
+ this.Set('DefaultStorageAccountID', value);
32405
+ }
32406
+ /**
31674
32407
  * * Field Name: SystemPrompt
31675
- * * Display Name: System Prompt Text
32408
+ * * Display Name: System Prompt
31676
32409
  * * SQL Data Type: nvarchar(255)
31677
32410
  */
31678
32411
  get SystemPrompt() {
31679
32412
  return this.Get('SystemPrompt');
31680
32413
  }
32414
+ /**
32415
+ * * Field Name: DefaultStorageAccount
32416
+ * * Display Name: Default Storage Account Name
32417
+ * * SQL Data Type: nvarchar(200)
32418
+ */
32419
+ get DefaultStorageAccount() {
32420
+ return this.Get('DefaultStorageAccount');
32421
+ }
31681
32422
  };
31682
32423
  MJAIAgentTypeEntity = __decorate([
31683
32424
  RegisterClass(BaseEntity, 'MJ: AI Agent Types')
@@ -31996,7 +32737,7 @@ let MJAIAgentEntity = class MJAIAgentEntity extends BaseEntity {
31996
32737
  }
31997
32738
  /**
31998
32739
  * * Field Name: ContextCompressionMessageThreshold
31999
- * * Display Name: Compression Message Threshold
32740
+ * * Display Name: Context Compression Message Threshold
32000
32741
  * * SQL Data Type: int
32001
32742
  * * Description: Number of messages that triggers context compression when EnableContextCompression is true.
32002
32743
  */
@@ -32008,7 +32749,7 @@ let MJAIAgentEntity = class MJAIAgentEntity extends BaseEntity {
32008
32749
  }
32009
32750
  /**
32010
32751
  * * Field Name: ContextCompressionPromptID
32011
- * * Display Name: Compression Prompt
32752
+ * * Display Name: Context Compression Prompt
32012
32753
  * * SQL Data Type: uniqueidentifier
32013
32754
  * * Related Entity/Foreign Key: MJ: AI Prompts (vwAIPrompts.ID)
32014
32755
  */
@@ -32020,7 +32761,7 @@ let MJAIAgentEntity = class MJAIAgentEntity extends BaseEntity {
32020
32761
  }
32021
32762
  /**
32022
32763
  * * Field Name: ContextCompressionMessageRetentionCount
32023
- * * Display Name: Compression Message Retention Count
32764
+ * * Display Name: Context Compression Message Retention Count
32024
32765
  * * SQL Data Type: int
32025
32766
  * * Description: Number of recent messages to keep uncompressed when context compression is applied.
32026
32767
  */
@@ -32702,6 +33443,19 @@ if this limit is exceeded.
32702
33443
  this.Set('AllowEphemeralClientTools', value);
32703
33444
  }
32704
33445
  /**
33446
+ * * Field Name: DefaultStorageAccountID
33447
+ * * Display Name: Default Storage Account ID
33448
+ * * SQL Data Type: uniqueidentifier
33449
+ * * Related Entity/Foreign Key: MJ: File Storage Accounts (vwFileStorageAccounts.ID)
33450
+ * * Description: Default file storage account for this specific agent. Overrides both Type-level and Category-level defaults. Can be further overridden at runtime via ExecuteAgentParams.override.storageAccountId. FK to FileStorageAccount.
33451
+ */
33452
+ get DefaultStorageAccountID() {
33453
+ return this.Get('DefaultStorageAccountID');
33454
+ }
33455
+ set DefaultStorageAccountID(value) {
33456
+ this.Set('DefaultStorageAccountID', value);
33457
+ }
33458
+ /**
32705
33459
  * * Field Name: Parent
32706
33460
  * * Display Name: Parent Name
32707
33461
  * * SQL Data Type: nvarchar(255)
@@ -32711,7 +33465,7 @@ if this limit is exceeded.
32711
33465
  }
32712
33466
  /**
32713
33467
  * * Field Name: ContextCompressionPrompt
32714
- * * Display Name: Context Compression Prompt Name
33468
+ * * Display Name: Context Compression Prompt
32715
33469
  * * SQL Data Type: nvarchar(255)
32716
33470
  */
32717
33471
  get ContextCompressionPrompt() {
@@ -32758,6 +33512,14 @@ if this limit is exceeded.
32758
33512
  return this.Get('Category');
32759
33513
  }
32760
33514
  /**
33515
+ * * Field Name: DefaultStorageAccount
33516
+ * * Display Name: Default Storage Account
33517
+ * * SQL Data Type: nvarchar(200)
33518
+ */
33519
+ get DefaultStorageAccount() {
33520
+ return this.Get('DefaultStorageAccount');
33521
+ }
33522
+ /**
32761
33523
  * * Field Name: RootParentID
32762
33524
  * * Display Name: Root Parent
32763
33525
  * * SQL Data Type: uniqueidentifier
@@ -40759,6 +41521,137 @@ MJApplicationEntityEntity = __decorate([
40759
41521
  RegisterClass(BaseEntity, 'MJ: Application Entities')
40760
41522
  ], MJApplicationEntityEntity);
40761
41523
  export { MJApplicationEntityEntity };
41524
+ /**
41525
+ * MJ: Application Roles - strongly typed entity sub-class
41526
+ * * Schema: __mj
41527
+ * * Base Table: ApplicationRole
41528
+ * * Base View: vwApplicationRoles
41529
+ * * @description Controls which roles can access and administer specific applications. When no ApplicationRole records exist for an application, all roles can access it (open access). When at least one record exists, only roles with CanAccess=1 are permitted.
41530
+ * * Primary Key: ID
41531
+ * @extends {BaseEntity}
41532
+ * @class
41533
+ * @public
41534
+ */
41535
+ let MJApplicationRoleEntity = class MJApplicationRoleEntity extends BaseEntity {
41536
+ /**
41537
+ * Loads the MJ: Application Roles record from the database
41538
+ * @param ID: string - primary key value to load the MJ: Application Roles record.
41539
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
41540
+ * @returns {Promise<boolean>} - true if successful, false otherwise
41541
+ * @public
41542
+ * @async
41543
+ * @memberof MJApplicationRoleEntity
41544
+ * @method
41545
+ * @override
41546
+ */
41547
+ async Load(ID, EntityRelationshipsToLoad) {
41548
+ const compositeKey = new CompositeKey();
41549
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
41550
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
41551
+ }
41552
+ /**
41553
+ * * Field Name: ID
41554
+ * * Display Name: ID
41555
+ * * SQL Data Type: uniqueidentifier
41556
+ * * Default Value: newsequentialid()
41557
+ */
41558
+ get ID() {
41559
+ return this.Get('ID');
41560
+ }
41561
+ set ID(value) {
41562
+ this.Set('ID', value);
41563
+ }
41564
+ /**
41565
+ * * Field Name: ApplicationID
41566
+ * * Display Name: Application
41567
+ * * SQL Data Type: uniqueidentifier
41568
+ * * Related Entity/Foreign Key: MJ: Applications (vwApplications.ID)
41569
+ * * Description: Foreign key to the Application this role grant applies to
41570
+ */
41571
+ get ApplicationID() {
41572
+ return this.Get('ApplicationID');
41573
+ }
41574
+ set ApplicationID(value) {
41575
+ this.Set('ApplicationID', value);
41576
+ }
41577
+ /**
41578
+ * * Field Name: RoleID
41579
+ * * Display Name: Role
41580
+ * * SQL Data Type: uniqueidentifier
41581
+ * * Related Entity/Foreign Key: MJ: Roles (vwRoles.ID)
41582
+ * * Description: Foreign key to the Role being granted or denied access
41583
+ */
41584
+ get RoleID() {
41585
+ return this.Get('RoleID');
41586
+ }
41587
+ set RoleID(value) {
41588
+ this.Set('RoleID', value);
41589
+ }
41590
+ /**
41591
+ * * Field Name: CanAccess
41592
+ * * Display Name: Can Access
41593
+ * * SQL Data Type: bit
41594
+ * * Default Value: 1
41595
+ * * Description: When true, users in this role can access the application. When false, this record acts as an explicit deny for the role.
41596
+ */
41597
+ get CanAccess() {
41598
+ return this.Get('CanAccess');
41599
+ }
41600
+ set CanAccess(value) {
41601
+ this.Set('CanAccess', value);
41602
+ }
41603
+ /**
41604
+ * * Field Name: CanAdmin
41605
+ * * Display Name: Can Admin
41606
+ * * SQL Data Type: bit
41607
+ * * Default Value: 0
41608
+ * * Description: When true, users in this role can modify application settings, manage nav items, and configure the application.
41609
+ */
41610
+ get CanAdmin() {
41611
+ return this.Get('CanAdmin');
41612
+ }
41613
+ set CanAdmin(value) {
41614
+ this.Set('CanAdmin', value);
41615
+ }
41616
+ /**
41617
+ * * Field Name: __mj_CreatedAt
41618
+ * * Display Name: Created At
41619
+ * * SQL Data Type: datetimeoffset
41620
+ * * Default Value: getutcdate()
41621
+ */
41622
+ get __mj_CreatedAt() {
41623
+ return this.Get('__mj_CreatedAt');
41624
+ }
41625
+ /**
41626
+ * * Field Name: __mj_UpdatedAt
41627
+ * * Display Name: Updated At
41628
+ * * SQL Data Type: datetimeoffset
41629
+ * * Default Value: getutcdate()
41630
+ */
41631
+ get __mj_UpdatedAt() {
41632
+ return this.Get('__mj_UpdatedAt');
41633
+ }
41634
+ /**
41635
+ * * Field Name: Application
41636
+ * * Display Name: Application Name
41637
+ * * SQL Data Type: nvarchar(100)
41638
+ */
41639
+ get Application() {
41640
+ return this.Get('Application');
41641
+ }
41642
+ /**
41643
+ * * Field Name: Role
41644
+ * * Display Name: Role Name
41645
+ * * SQL Data Type: nvarchar(50)
41646
+ */
41647
+ get Role() {
41648
+ return this.Get('Role');
41649
+ }
41650
+ };
41651
+ MJApplicationRoleEntity = __decorate([
41652
+ RegisterClass(BaseEntity, 'MJ: Application Roles')
41653
+ ], MJApplicationRoleEntity);
41654
+ export { MJApplicationRoleEntity };
40762
41655
  /**
40763
41656
  * MJ: Application Settings - strongly typed entity sub-class
40764
41657
  * * Schema: __mj
@@ -41494,6 +42387,23 @@ let MJArtifactTypeEntity = class MJArtifactTypeEntity extends BaseEntity {
41494
42387
  this.Set('Icon', value);
41495
42388
  }
41496
42389
  /**
42390
+ * * Field Name: ContentCategory
42391
+ * * Display Name: Content Category
42392
+ * * SQL Data Type: nvarchar(10)
42393
+ * * Default Value: Text
42394
+ * * Value List Type: List
42395
+ * * Possible Values
42396
+ * * File
42397
+ * * Text
42398
+ * * Description: Classifies whether this artifact type stores text content ('Text', the default for all existing types) or a binary file in MJStorage ('File'). Used by AgentRunner and viewer components to route file-based artifacts correctly.
42399
+ */
42400
+ get ContentCategory() {
42401
+ return this.Get('ContentCategory');
42402
+ }
42403
+ set ContentCategory(value) {
42404
+ this.Set('ContentCategory', value);
42405
+ }
42406
+ /**
41497
42407
  * * Field Name: Parent
41498
42408
  * * Display Name: Parent
41499
42409
  * * SQL Data Type: nvarchar(100)
@@ -41830,7 +42740,7 @@ let MJArtifactVersionEntity = class MJArtifactVersionEntity extends BaseEntity {
41830
42740
  }
41831
42741
  /**
41832
42742
  * * Field Name: ArtifactID
41833
- * * Display Name: Artifact ID
42743
+ * * Display Name: Artifact
41834
42744
  * * SQL Data Type: uniqueidentifier
41835
42745
  * * Related Entity/Foreign Key: MJ: Artifacts (vwArtifacts.ID)
41836
42746
  */
@@ -41890,7 +42800,7 @@ let MJArtifactVersionEntity = class MJArtifactVersionEntity extends BaseEntity {
41890
42800
  }
41891
42801
  /**
41892
42802
  * * Field Name: UserID
41893
- * * Display Name: User ID
42803
+ * * Display Name: User
41894
42804
  * * SQL Data Type: uniqueidentifier
41895
42805
  * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)
41896
42806
  */
@@ -41955,6 +42865,72 @@ let MJArtifactVersionEntity = class MJArtifactVersionEntity extends BaseEntity {
41955
42865
  this.Set('Description', value);
41956
42866
  }
41957
42867
  /**
42868
+ * * Field Name: FileID
42869
+ * * Display Name: File
42870
+ * * SQL Data Type: uniqueidentifier
42871
+ * * Related Entity/Foreign Key: MJ: Files (vwFiles.ID)
42872
+ * * Description: Foreign key to the MJ: Files entity. When ContentMode is 'File', this references the binary file stored in MJStorage. NULL when ContentMode is 'Text'.
42873
+ */
42874
+ get FileID() {
42875
+ return this.Get('FileID');
42876
+ }
42877
+ set FileID(value) {
42878
+ this.Set('FileID', value);
42879
+ }
42880
+ /**
42881
+ * * Field Name: ContentMode
42882
+ * * Display Name: Content Mode
42883
+ * * SQL Data Type: nvarchar(10)
42884
+ * * Default Value: Text
42885
+ * * Value List Type: List
42886
+ * * Possible Values
42887
+ * * File
42888
+ * * Text
42889
+ * * Description: Determines how artifact content is stored. 'Text' (default) means the Content column holds the data. 'File' means FileID references a binary file in MJStorage and Content is unused.
42890
+ */
42891
+ get ContentMode() {
42892
+ return this.Get('ContentMode');
42893
+ }
42894
+ set ContentMode(value) {
42895
+ this.Set('ContentMode', value);
42896
+ }
42897
+ /**
42898
+ * * Field Name: MimeType
42899
+ * * Display Name: MIME Type
42900
+ * * SQL Data Type: nvarchar(200)
42901
+ * * Description: MIME type of the stored file (e.g. application/pdf). Denormalized from the File entity for display without joins. Only populated when ContentMode is 'File'.
42902
+ */
42903
+ get MimeType() {
42904
+ return this.Get('MimeType');
42905
+ }
42906
+ set MimeType(value) {
42907
+ this.Set('MimeType', value);
42908
+ }
42909
+ /**
42910
+ * * Field Name: FileName
42911
+ * * Display Name: File Name
42912
+ * * SQL Data Type: nvarchar(500)
42913
+ * * Description: Original filename of the stored file (e.g. report.pdf). Denormalized from the File entity for display without joins. Only populated when ContentMode is 'File'.
42914
+ */
42915
+ get FileName() {
42916
+ return this.Get('FileName');
42917
+ }
42918
+ set FileName(value) {
42919
+ this.Set('FileName', value);
42920
+ }
42921
+ /**
42922
+ * * Field Name: ContentSizeBytes
42923
+ * * Display Name: Content Size Bytes
42924
+ * * SQL Data Type: bigint
42925
+ * * Description: Size of the stored file in bytes. Denormalized for display without loading the file. Only populated when ContentMode is 'File'.
42926
+ */
42927
+ get ContentSizeBytes() {
42928
+ return this.Get('ContentSizeBytes');
42929
+ }
42930
+ set ContentSizeBytes(value) {
42931
+ this.Set('ContentSizeBytes', value);
42932
+ }
42933
+ /**
41958
42934
  * * Field Name: Artifact
41959
42935
  * * Display Name: Artifact
41960
42936
  * * SQL Data Type: nvarchar(255)
@@ -41970,6 +42946,14 @@ let MJArtifactVersionEntity = class MJArtifactVersionEntity extends BaseEntity {
41970
42946
  get User() {
41971
42947
  return this.Get('User');
41972
42948
  }
42949
+ /**
42950
+ * * Field Name: File
42951
+ * * Display Name: File
42952
+ * * SQL Data Type: nvarchar(500)
42953
+ */
42954
+ get File() {
42955
+ return this.Get('File');
42956
+ }
41973
42957
  };
41974
42958
  MJArtifactVersionEntity = __decorate([
41975
42959
  RegisterClass(BaseEntity, 'MJ: Artifact Versions')
@@ -51210,6 +52194,165 @@ MJConversationEntity = __decorate([
51210
52194
  RegisterClass(BaseEntity, 'MJ: Conversations')
51211
52195
  ], MJConversationEntity);
51212
52196
  export { MJConversationEntity };
52197
+ /**
52198
+ * MJ: Countries - strongly typed entity sub-class
52199
+ * * Schema: __mj
52200
+ * * Base Table: Country
52201
+ * * Base View: vwCountries
52202
+ * * @description Reference table for countries with ISO 3166-1 codes, geographic centroids, and optional medium-resolution boundary GeoJSON for choropleth rendering. Seeded with ~250 countries.
52203
+ * * Primary Key: ID
52204
+ * @extends {BaseEntity}
52205
+ * @class
52206
+ * @public
52207
+ */
52208
+ let MJCountryEntity = class MJCountryEntity extends BaseEntity {
52209
+ /**
52210
+ * Loads the MJ: Countries record from the database
52211
+ * @param ID: string - primary key value to load the MJ: Countries record.
52212
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
52213
+ * @returns {Promise<boolean>} - true if successful, false otherwise
52214
+ * @public
52215
+ * @async
52216
+ * @memberof MJCountryEntity
52217
+ * @method
52218
+ * @override
52219
+ */
52220
+ async Load(ID, EntityRelationshipsToLoad) {
52221
+ const compositeKey = new CompositeKey();
52222
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
52223
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
52224
+ }
52225
+ /**
52226
+ * * Field Name: ID
52227
+ * * Display Name: ID
52228
+ * * SQL Data Type: uniqueidentifier
52229
+ * * Default Value: newsequentialid()
52230
+ */
52231
+ get ID() {
52232
+ return this.Get('ID');
52233
+ }
52234
+ set ID(value) {
52235
+ this.Set('ID', value);
52236
+ }
52237
+ /**
52238
+ * * Field Name: Name
52239
+ * * Display Name: Name
52240
+ * * SQL Data Type: nvarchar(200)
52241
+ * * Description: Full country name (e.g., "United States", "Canada").
52242
+ */
52243
+ get Name() {
52244
+ return this.Get('Name');
52245
+ }
52246
+ set Name(value) {
52247
+ this.Set('Name', value);
52248
+ }
52249
+ /**
52250
+ * * Field Name: ISO2
52251
+ * * Display Name: ISO 2
52252
+ * * SQL Data Type: nvarchar(2)
52253
+ * * Description: ISO 3166-1 alpha-2 code (e.g., "US", "CA"). Unique business key for lookups.
52254
+ */
52255
+ get ISO2() {
52256
+ return this.Get('ISO2');
52257
+ }
52258
+ set ISO2(value) {
52259
+ this.Set('ISO2', value);
52260
+ }
52261
+ /**
52262
+ * * Field Name: ISO3
52263
+ * * Display Name: ISO 3
52264
+ * * SQL Data Type: nvarchar(3)
52265
+ * * Description: ISO 3166-1 alpha-3 code (e.g., "USA", "CAN"). Unique business key for lookups.
52266
+ */
52267
+ get ISO3() {
52268
+ return this.Get('ISO3');
52269
+ }
52270
+ set ISO3(value) {
52271
+ this.Set('ISO3', value);
52272
+ }
52273
+ /**
52274
+ * * Field Name: NumericCode
52275
+ * * Display Name: Numeric Code
52276
+ * * SQL Data Type: int
52277
+ * * Description: ISO 3166-1 numeric code (e.g., 840 for US, 124 for Canada).
52278
+ */
52279
+ get NumericCode() {
52280
+ return this.Get('NumericCode');
52281
+ }
52282
+ set NumericCode(value) {
52283
+ this.Set('NumericCode', value);
52284
+ }
52285
+ /**
52286
+ * * Field Name: Latitude
52287
+ * * Display Name: Latitude
52288
+ * * SQL Data Type: decimal(10, 6)
52289
+ * * Description: Geographic centroid latitude. Used as fallback point for country-level geocoding.
52290
+ */
52291
+ get Latitude() {
52292
+ return this.Get('Latitude');
52293
+ }
52294
+ set Latitude(value) {
52295
+ this.Set('Latitude', value);
52296
+ }
52297
+ /**
52298
+ * * Field Name: Longitude
52299
+ * * Display Name: Longitude
52300
+ * * SQL Data Type: decimal(10, 6)
52301
+ * * Description: Geographic centroid longitude. Used as fallback point for country-level geocoding.
52302
+ */
52303
+ get Longitude() {
52304
+ return this.Get('Longitude');
52305
+ }
52306
+ set Longitude(value) {
52307
+ this.Set('Longitude', value);
52308
+ }
52309
+ /**
52310
+ * * Field Name: BoundaryGeoJSON
52311
+ * * Display Name: Boundary GeoJSON
52312
+ * * SQL Data Type: nvarchar(MAX)
52313
+ * * Description: Medium-resolution (~50m) GeoJSON boundary polygon for choropleth map rendering. Nullable — point map falls back to centroid if absent. Total ~3MB for all countries.
52314
+ */
52315
+ get BoundaryGeoJSON() {
52316
+ return this.Get('BoundaryGeoJSON');
52317
+ }
52318
+ set BoundaryGeoJSON(value) {
52319
+ this.Set('BoundaryGeoJSON', value);
52320
+ }
52321
+ /**
52322
+ * * Field Name: CommonAliases
52323
+ * * Display Name: Common Aliases
52324
+ * * SQL Data Type: nvarchar(MAX)
52325
+ * * Description: JSON array of common aliases and alternate names (e.g., ["United States","USA","U.S.","America"]). Used by GeoResolver for fuzzy text-to-country matching.
52326
+ */
52327
+ get CommonAliases() {
52328
+ return this.Get('CommonAliases');
52329
+ }
52330
+ set CommonAliases(value) {
52331
+ this.Set('CommonAliases', value);
52332
+ }
52333
+ /**
52334
+ * * Field Name: __mj_CreatedAt
52335
+ * * Display Name: Created At
52336
+ * * SQL Data Type: datetimeoffset
52337
+ * * Default Value: getutcdate()
52338
+ */
52339
+ get __mj_CreatedAt() {
52340
+ return this.Get('__mj_CreatedAt');
52341
+ }
52342
+ /**
52343
+ * * Field Name: __mj_UpdatedAt
52344
+ * * Display Name: Updated At
52345
+ * * SQL Data Type: datetimeoffset
52346
+ * * Default Value: getutcdate()
52347
+ */
52348
+ get __mj_UpdatedAt() {
52349
+ return this.Get('__mj_UpdatedAt');
52350
+ }
52351
+ };
52352
+ MJCountryEntity = __decorate([
52353
+ RegisterClass(BaseEntity, 'MJ: Countries')
52354
+ ], MJCountryEntity);
52355
+ export { MJCountryEntity };
51213
52356
  /**
51214
52357
  * MJ: Credential Categories - strongly typed entity sub-class
51215
52358
  * * Schema: __mj
@@ -55510,7 +56653,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55510
56653
  }
55511
56654
  /**
55512
56655
  * * Field Name: ParentID
55513
- * * Display Name: Parent ID
56656
+ * * Display Name: Parent
55514
56657
  * * SQL Data Type: uniqueidentifier
55515
56658
  * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
55516
56659
  */
@@ -55744,7 +56887,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55744
56887
  }
55745
56888
  /**
55746
56889
  * * Field Name: AllowUserSearchAPI
55747
- * * Display Name: Allow User Search API
56890
+ * * Display Name: Allow User Search
55748
56891
  * * SQL Data Type: bit
55749
56892
  * * Default Value: 0
55750
56893
  * * Description: Enabling this bit will result in search being possible at the API and UI layers
@@ -55757,7 +56900,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55757
56900
  }
55758
56901
  /**
55759
56902
  * * Field Name: FullTextSearchEnabled
55760
- * * Display Name: Full Text Search Enabled
56903
+ * * Display Name: Full-Text Search Enabled
55761
56904
  * * SQL Data Type: bit
55762
56905
  * * Default Value: 0
55763
56906
  * * Description: Whether full-text search indexing is enabled for this entity.
@@ -55770,7 +56913,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55770
56913
  }
55771
56914
  /**
55772
56915
  * * Field Name: FullTextCatalog
55773
- * * Display Name: Full Text Catalog
56916
+ * * Display Name: Full-Text Catalog
55774
56917
  * * SQL Data Type: nvarchar(255)
55775
56918
  * * Description: Name of the SQL Server full-text catalog if search is enabled.
55776
56919
  */
@@ -55782,7 +56925,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55782
56925
  }
55783
56926
  /**
55784
56927
  * * Field Name: FullTextCatalogGenerated
55785
- * * Display Name: Full Text Catalog Generated
56928
+ * * Display Name: Full-Text Catalog Generated
55786
56929
  * * SQL Data Type: bit
55787
56930
  * * Default Value: 1
55788
56931
  * * Description: Indicates if the full-text catalog was auto-generated by CodeGen.
@@ -55795,7 +56938,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55795
56938
  }
55796
56939
  /**
55797
56940
  * * Field Name: FullTextIndex
55798
- * * Display Name: Full Text Index
56941
+ * * Display Name: Full-Text Index
55799
56942
  * * SQL Data Type: nvarchar(255)
55800
56943
  * * Description: Name of the full-text index on this entity's table.
55801
56944
  */
@@ -55807,7 +56950,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55807
56950
  }
55808
56951
  /**
55809
56952
  * * Field Name: FullTextIndexGenerated
55810
- * * Display Name: Full Text Index Generated
56953
+ * * Display Name: Full-Text Index Generated
55811
56954
  * * SQL Data Type: bit
55812
56955
  * * Default Value: 1
55813
56956
  * * Description: Indicates if the full-text index was auto-generated by CodeGen.
@@ -55820,7 +56963,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55820
56963
  }
55821
56964
  /**
55822
56965
  * * Field Name: FullTextSearchFunction
55823
- * * Display Name: Full Text Search Function
56966
+ * * Display Name: Search Function
55824
56967
  * * SQL Data Type: nvarchar(255)
55825
56968
  * * Description: Name of the function used for full-text searching this entity.
55826
56969
  */
@@ -55832,7 +56975,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55832
56975
  }
55833
56976
  /**
55834
56977
  * * Field Name: FullTextSearchFunctionGenerated
55835
- * * Display Name: Full Text Search Function Generated
56978
+ * * Display Name: Search Function Generated
55836
56979
  * * SQL Data Type: bit
55837
56980
  * * Default Value: 1
55838
56981
  * * Description: Indicates if the search function was auto-generated by CodeGen.
@@ -55858,7 +57001,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55858
57001
  }
55859
57002
  /**
55860
57003
  * * Field Name: spCreate
55861
- * * Display Name: Create Stored Procedure
57004
+ * * Display Name: Create Procedure
55862
57005
  * * SQL Data Type: nvarchar(255)
55863
57006
  * * Description: Name of the stored procedure for creating records in this entity.
55864
57007
  */
@@ -55870,7 +57013,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55870
57013
  }
55871
57014
  /**
55872
57015
  * * Field Name: spUpdate
55873
- * * Display Name: Update Stored Procedure
57016
+ * * Display Name: Update Procedure
55874
57017
  * * SQL Data Type: nvarchar(255)
55875
57018
  * * Description: Name of the stored procedure for updating records in this entity.
55876
57019
  */
@@ -55882,7 +57025,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55882
57025
  }
55883
57026
  /**
55884
57027
  * * Field Name: spDelete
55885
- * * Display Name: Delete Stored Procedure
57028
+ * * Display Name: Delete Procedure
55886
57029
  * * SQL Data Type: nvarchar(255)
55887
57030
  * * Description: Name of the stored procedure for deleting records in this entity.
55888
57031
  */
@@ -55894,7 +57037,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55894
57037
  }
55895
57038
  /**
55896
57039
  * * Field Name: spCreateGenerated
55897
- * * Display Name: Create Procedure Generated
57040
+ * * Display Name: Create SP Generated
55898
57041
  * * SQL Data Type: bit
55899
57042
  * * Default Value: 1
55900
57043
  * * Description: Indicates if the create procedure was auto-generated by CodeGen.
@@ -55907,7 +57050,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55907
57050
  }
55908
57051
  /**
55909
57052
  * * Field Name: spUpdateGenerated
55910
- * * Display Name: Update Procedure Generated
57053
+ * * Display Name: Update SP Generated
55911
57054
  * * SQL Data Type: bit
55912
57055
  * * Default Value: 1
55913
57056
  * * Description: Indicates if the update procedure was auto-generated by CodeGen.
@@ -55920,7 +57063,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55920
57063
  }
55921
57064
  /**
55922
57065
  * * Field Name: spDeleteGenerated
55923
- * * Display Name: Delete Procedure Generated
57066
+ * * Display Name: Delete SP Generated
55924
57067
  * * SQL Data Type: bit
55925
57068
  * * Default Value: 1
55926
57069
  * * Description: Indicates if the delete procedure was auto-generated by CodeGen.
@@ -55976,7 +57119,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55976
57119
  }
55977
57120
  /**
55978
57121
  * * Field Name: spMatch
55979
- * * Display Name: Match Stored Procedure
57122
+ * * Display Name: Match Procedure
55980
57123
  * * SQL Data Type: nvarchar(255)
55981
57124
  * * Description: When specified, this stored procedure is used to find matching records in this particular entity. The convention is to pass in the primary key(s) columns for the given entity to the procedure and the return will be zero to many rows where there is a column for each primary key field(s) and a ProbabilityScore (numeric(1,12)) column that has a 0 to 1 value of the probability of a match.
55982
57125
  */
@@ -55988,7 +57131,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
55988
57131
  }
55989
57132
  /**
55990
57133
  * * Field Name: RelationshipDefaultDisplayType
55991
- * * Display Name: Relationship Default Display Type
57134
+ * * Display Name: Default Relationship Display Type
55992
57135
  * * SQL Data Type: nvarchar(20)
55993
57136
  * * Default Value: Search
55994
57137
  * * Value List Type: List
@@ -56018,7 +57161,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
56018
57161
  }
56019
57162
  /**
56020
57163
  * * Field Name: EntityObjectSubclassName
56021
- * * Display Name: Entity Object Subclass Name
57164
+ * * Display Name: Subclass Name
56022
57165
  * * SQL Data Type: nvarchar(255)
56023
57166
  * * Description: TypeScript class name for the entity subclass in the codebase.
56024
57167
  */
@@ -56030,7 +57173,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
56030
57173
  }
56031
57174
  /**
56032
57175
  * * Field Name: EntityObjectSubclassImport
56033
- * * Display Name: Entity Object Subclass Import
57176
+ * * Display Name: Subclass Import Path
56034
57177
  * * SQL Data Type: nvarchar(255)
56035
57178
  * * Description: Import path for the entity subclass in the TypeScript codebase.
56036
57179
  */
@@ -56084,7 +57227,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
56084
57227
  }
56085
57228
  /**
56086
57229
  * * Field Name: ScopeDefault
56087
- * * Display Name: Scope Default
57230
+ * * Display Name: Default Scope
56088
57231
  * * SQL Data Type: nvarchar(100)
56089
57232
  * * Description: Optional, comma-delimited string indicating the default scope for entity visibility. Options include Users, Admins, AI, and All. Defaults to All when NULL. This is used for simple defaults for filtering entity visibility, not security enforcement.
56090
57233
  */
@@ -56096,7 +57239,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
56096
57239
  }
56097
57240
  /**
56098
57241
  * * Field Name: RowsToPackWithSchema
56099
- * * Display Name: Rows To Pack With Schema
57242
+ * * Display Name: Rows To Pack
56100
57243
  * * SQL Data Type: nvarchar(20)
56101
57244
  * * Default Value: None
56102
57245
  * * Value List Type: List
@@ -56114,7 +57257,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
56114
57257
  }
56115
57258
  /**
56116
57259
  * * Field Name: RowsToPackSampleMethod
56117
- * * Display Name: Rows To Pack Sample Method
57260
+ * * Display Name: Packing Sample Method
56118
57261
  * * SQL Data Type: nvarchar(20)
56119
57262
  * * Default Value: random
56120
57263
  * * Value List Type: List
@@ -56132,7 +57275,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
56132
57275
  }
56133
57276
  /**
56134
57277
  * * Field Name: RowsToPackSampleCount
56135
- * * Display Name: Rows To Pack Sample Count
57278
+ * * Display Name: Packing Sample Count
56136
57279
  * * SQL Data Type: int
56137
57280
  * * Default Value: 0
56138
57281
  * * Description: The number of rows to pack when RowsToPackWithSchema is set to Sample, based on the designated sampling method. Defaults to 0.
@@ -56145,7 +57288,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
56145
57288
  }
56146
57289
  /**
56147
57290
  * * Field Name: RowsToPackSampleOrder
56148
- * * Display Name: Rows To Pack Sample Order
57291
+ * * Display Name: Packing Sample Order
56149
57292
  * * SQL Data Type: nvarchar(MAX)
56150
57293
  * * Description: An optional ORDER BY clause for row packing when RowsToPackWithSchema is set to Sample. Allows custom ordering for selected entity data when using top n and bottom n.
56151
57294
  */
@@ -56157,7 +57300,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
56157
57300
  }
56158
57301
  /**
56159
57302
  * * Field Name: AutoRowCountFrequency
56160
- * * Display Name: Auto Row Count Frequency
57303
+ * * Display Name: Refresh Frequency (Hours)
56161
57304
  * * SQL Data Type: int
56162
57305
  * * Description: Frequency in hours for automatically performing row counts on this entity. If NULL, automatic row counting is disabled. If greater than 0, schedules recurring SELECT COUNT(*) queries at the specified interval.
56163
57306
  */
@@ -56181,7 +57324,7 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
56181
57324
  }
56182
57325
  /**
56183
57326
  * * Field Name: RowCountRunAt
56184
- * * Display Name: Row Count Run At
57327
+ * * Display Name: Last Counted At
56185
57328
  * * SQL Data Type: datetimeoffset
56186
57329
  * * Description: Timestamp indicating when the last automatic row count was performed for this entity.
56187
57330
  */
@@ -56235,6 +57378,97 @@ let MJEntityEntity = class MJEntityEntity extends BaseEntity {
56235
57378
  this.Set('AllowMultipleSubtypes', value);
56236
57379
  }
56237
57380
  /**
57381
+ * * Field Name: AutoUpdateFullTextSearch
57382
+ * * Display Name: Auto Update Search Settings
57383
+ * * SQL Data Type: bit
57384
+ * * Default Value: 1
57385
+ * * Description: When true, CodeGen LLM can auto-configure full-text search settings (FullTextSearchEnabled, catalog, index, function) during code generation runs.
57386
+ */
57387
+ get AutoUpdateFullTextSearch() {
57388
+ return this.Get('AutoUpdateFullTextSearch');
57389
+ }
57390
+ set AutoUpdateFullTextSearch(value) {
57391
+ this.Set('AutoUpdateFullTextSearch', value);
57392
+ }
57393
+ /**
57394
+ * * Field Name: AutoUpdateAllowUserSearchAPI
57395
+ * * Display Name: Auto Update Search API
57396
+ * * SQL Data Type: bit
57397
+ * * Default Value: 1
57398
+ * * Description: When true, CodeGen LLM can auto-set AllowUserSearchAPI during code generation runs.
57399
+ */
57400
+ get AutoUpdateAllowUserSearchAPI() {
57401
+ return this.Get('AutoUpdateAllowUserSearchAPI');
57402
+ }
57403
+ set AutoUpdateAllowUserSearchAPI(value) {
57404
+ this.Set('AutoUpdateAllowUserSearchAPI', value);
57405
+ }
57406
+ /**
57407
+ * * Field Name: TrustServerCacheCompletely
57408
+ * * Display Name: Trust Server Cache
57409
+ * * SQL Data Type: bit
57410
+ * * Default Value: 1
57411
+ * * Description: When true (default), the server-side RunView cache will store and return cached results for this entity, trusting that all mutations flow through BaseEntity.Save() which fires cache invalidation events. Set to false for entities whose rows are created as side-effects of other operations via raw SQL (e.g., Record Changes created by spCreateRecordChange_Internal), since those inserts bypass BaseEntity and never trigger cache invalidation.
57412
+ */
57413
+ get TrustServerCacheCompletely() {
57414
+ return this.Get('TrustServerCacheCompletely');
57415
+ }
57416
+ set TrustServerCacheCompletely(value) {
57417
+ this.Set('TrustServerCacheCompletely', value);
57418
+ }
57419
+ /**
57420
+ * * Field Name: SupportsGeoCoding
57421
+ * * Display Name: Supports Geo-Coding
57422
+ * * SQL Data Type: bit
57423
+ * * Default Value: 0
57424
+ * * Description: When true, CodeGen generates geo-aware subclass code, adds __mj_Latitude/__mj_Longitude virtual fields to the base view, and the UI shows a map view toggle. Auto-set by CodeGen when LLM detects geo-capable fields (address, lat/lng, etc.).
57425
+ */
57426
+ get SupportsGeoCoding() {
57427
+ return this.Get('SupportsGeoCoding');
57428
+ }
57429
+ set SupportsGeoCoding(value) {
57430
+ this.Set('SupportsGeoCoding', value);
57431
+ }
57432
+ /**
57433
+ * * Field Name: AutoUpdateSupportsGeoCoding
57434
+ * * Display Name: Auto Update Geo-Coding
57435
+ * * SQL Data Type: bit
57436
+ * * Default Value: 1
57437
+ * * Description: When true (default), CodeGen can automatically set SupportsGeoCoding based on LLM analysis of entity fields. Set to 0 to lock the value and prevent CodeGen from changing it.
57438
+ */
57439
+ get AutoUpdateSupportsGeoCoding() {
57440
+ return this.Get('AutoUpdateSupportsGeoCoding');
57441
+ }
57442
+ set AutoUpdateSupportsGeoCoding(value) {
57443
+ this.Set('AutoUpdateSupportsGeoCoding', value);
57444
+ }
57445
+ /**
57446
+ * * Field Name: AllowCaching
57447
+ * * Display Name: Allow Caching
57448
+ * * SQL Data Type: bit
57449
+ * * Default Value: 0
57450
+ * * Description: Controls whether this entity participates in server-side and client-side caching. When false, all cache operations (PreRunView checks, auto-cache storage, BaseEntity event fingerprint scans, client-side IndexedDB cache) are skipped entirely. This column is the single source of truth at runtime; schema-level defaults are applied at CodeGen time via newEntityDefaults.AllowCachingBySchema.
57451
+ */
57452
+ get AllowCaching() {
57453
+ return this.Get('AllowCaching');
57454
+ }
57455
+ set AllowCaching(value) {
57456
+ this.Set('AllowCaching', value);
57457
+ }
57458
+ /**
57459
+ * * Field Name: DetectExternalChanges
57460
+ * * Display Name: Detect External Changes
57461
+ * * SQL Data Type: bit
57462
+ * * Default Value: 0
57463
+ * * Description: When set to 1 AND TrackRecordChanges is also 1, the external change detection system will scan this entity for changes made outside the MJ framework (direct SQL, third-party tools, etc.) and replay them through Save() to create proper RecordChange audit entries. Default is 0 (opt-out) because most entities, especially __mj schema metadata tables, are managed by migrations/CodeGen and should not be scanned.
57464
+ */
57465
+ get DetectExternalChanges() {
57466
+ return this.Get('DetectExternalChanges');
57467
+ }
57468
+ set DetectExternalChanges(value) {
57469
+ this.Set('DetectExternalChanges', value);
57470
+ }
57471
+ /**
56238
57472
  * * Field Name: CodeName
56239
57473
  * * Display Name: Code Name
56240
57474
  * * SQL Data Type: nvarchar(MAX)
@@ -58173,7 +59407,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58173
59407
  }
58174
59408
  /**
58175
59409
  * * Field Name: EntityID
58176
- * * Display Name: Entity
59410
+ * * Display Name: Entity ID
58177
59411
  * * SQL Data Type: uniqueidentifier
58178
59412
  * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
58179
59413
  */
@@ -58276,7 +59510,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58276
59510
  }
58277
59511
  /**
58278
59512
  * * Field Name: Type
58279
- * * Display Name: Type
59513
+ * * Display Name: Data Type
58280
59514
  * * SQL Data Type: nvarchar(100)
58281
59515
  * * Description: SQL Data type (auto maintained by CodeGen)
58282
59516
  */
@@ -58367,6 +59601,13 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58367
59601
  * * Email
58368
59602
  * * FaceTime
58369
59603
  * * Geo
59604
+ * * GeoAddress
59605
+ * * GeoCity
59606
+ * * GeoCountry
59607
+ * * GeoLatitude
59608
+ * * GeoLongitude
59609
+ * * GeoPostalCode
59610
+ * * GeoStateProvince
58370
59611
  * * MSTeams
58371
59612
  * * Other
58372
59613
  * * SIP
@@ -58469,7 +59710,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58469
59710
  }
58470
59711
  /**
58471
59712
  * * Field Name: IncludeInUserSearchAPI
58472
- * * Display Name: Include In User Search API
59713
+ * * Display Name: Include In User Search
58473
59714
  * * SQL Data Type: bit
58474
59715
  * * Default Value: 0
58475
59716
  * * Description: If set to 1, this column will be included in user search queries for both traditional and full text search
@@ -58495,7 +59736,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58495
59736
  }
58496
59737
  /**
58497
59738
  * * Field Name: UserSearchParamFormatAPI
58498
- * * Display Name: User Search Param Format API
59739
+ * * Display Name: Search Param Format
58499
59740
  * * SQL Data Type: nvarchar(500)
58500
59741
  * * Description: NULL
58501
59742
  */
@@ -58573,7 +59814,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58573
59814
  }
58574
59815
  /**
58575
59816
  * * Field Name: RelatedEntityFieldName
58576
- * * Display Name: Related Entity Field Name
59817
+ * * Display Name: Related Entity Field
58577
59818
  * * SQL Data Type: nvarchar(255)
58578
59819
  * * Description: Name of the field in the Related Entity that this field links to (auto maintained by CodeGen)
58579
59820
  */
@@ -58585,7 +59826,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58585
59826
  }
58586
59827
  /**
58587
59828
  * * Field Name: IncludeRelatedEntityNameFieldInBaseView
58588
- * * Display Name: Include Related Entity Name Field In Base View
59829
+ * * Display Name: Include Related Name In View
58589
59830
  * * SQL Data Type: bit
58590
59831
  * * Default Value: 1
58591
59832
  * * Description: If set to 1, the "Name" field of the Related Entity will be included in this entity as a virtual field
@@ -58598,7 +59839,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58598
59839
  }
58599
59840
  /**
58600
59841
  * * Field Name: RelatedEntityNameFieldMap
58601
- * * Display Name: Related Entity Name Field Map
59842
+ * * Display Name: Related Entity Name Map
58602
59843
  * * SQL Data Type: nvarchar(255)
58603
59844
  * * Description: For foreign key fields, maps which field in the related entity contains the display name. This is used by CodeGen to automatically add in virtual fields for the "Name Field" of the related entity.
58604
59845
  */
@@ -58665,7 +59906,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58665
59906
  }
58666
59907
  /**
58667
59908
  * * Field Name: AutoUpdateRelatedEntityInfo
58668
- * * Display Name: Auto Update Related Entity Info
59909
+ * * Display Name: Auto Update Related Info
58669
59910
  * * SQL Data Type: bit
58670
59911
  * * Default Value: 1
58671
59912
  * * Description: Indicates whether the related entity information should be automatically updated from the database schema. When set to 0, relationships not part of the database schema can be manually defined at the application and AI agent level. Defaults to 1.
@@ -58766,7 +60007,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58766
60007
  }
58767
60008
  /**
58768
60009
  * * Field Name: AutoUpdateIncludeInUserSearchAPI
58769
- * * Display Name: Auto Update Include In User Search API
60010
+ * * Display Name: Auto Update Search Inclusion
58770
60011
  * * SQL Data Type: bit
58771
60012
  * * Default Value: 1
58772
60013
  * * Description: When 1, allows system/LLM to auto-update IncludeInUserSearchAPI during CodeGen; when 0, user has locked this field
@@ -58905,6 +60146,58 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58905
60146
  this.Set('JSONTypeDefinition', value);
58906
60147
  }
58907
60148
  /**
60149
+ * * Field Name: UserSearchPredicateAPI
60150
+ * * Display Name: User Search Predicate
60151
+ * * SQL Data Type: nvarchar(20)
60152
+ * * Default Value: Contains
60153
+ * * Description: Search predicate controlling how user search queries match against this field. Valid values: BeginsWith, Contains, EndsWith, Exact.
60154
+ */
60155
+ get UserSearchPredicateAPI() {
60156
+ return this.Get('UserSearchPredicateAPI');
60157
+ }
60158
+ set UserSearchPredicateAPI(value) {
60159
+ this.Set('UserSearchPredicateAPI', value);
60160
+ }
60161
+ /**
60162
+ * * Field Name: AutoUpdateUserSearchPredicate
60163
+ * * Display Name: Auto Update Search Predicate
60164
+ * * SQL Data Type: bit
60165
+ * * Default Value: 1
60166
+ * * Description: When true, CodeGen LLM can auto-set the UserSearchPredicateAPI value during code generation runs.
60167
+ */
60168
+ get AutoUpdateUserSearchPredicate() {
60169
+ return this.Get('AutoUpdateUserSearchPredicate');
60170
+ }
60171
+ set AutoUpdateUserSearchPredicate(value) {
60172
+ this.Set('AutoUpdateUserSearchPredicate', value);
60173
+ }
60174
+ /**
60175
+ * * Field Name: AutoUpdateFullTextSearch
60176
+ * * Display Name: Auto Update Full Text Search
60177
+ * * SQL Data Type: bit
60178
+ * * Default Value: 1
60179
+ * * Description: When true, CodeGen LLM can auto-set the FullTextSearchEnabled value during code generation runs.
60180
+ */
60181
+ get AutoUpdateFullTextSearch() {
60182
+ return this.Get('AutoUpdateFullTextSearch');
60183
+ }
60184
+ set AutoUpdateFullTextSearch(value) {
60185
+ this.Set('AutoUpdateFullTextSearch', value);
60186
+ }
60187
+ /**
60188
+ * * Field Name: AutoUpdateExtendedType
60189
+ * * Display Name: Auto Update Extended Type
60190
+ * * SQL Data Type: bit
60191
+ * * Default Value: 1
60192
+ * * Description: When true (default), CodeGen can automatically suggest and apply ExtendedType values (GeoLatitude, GeoLongitude, GeoAddress, etc.) during LLM field categorization. Set to 0 to lock admin-specified ExtendedType.
60193
+ */
60194
+ get AutoUpdateExtendedType() {
60195
+ return this.Get('AutoUpdateExtendedType');
60196
+ }
60197
+ set AutoUpdateExtendedType(value) {
60198
+ this.Set('AutoUpdateExtendedType', value);
60199
+ }
60200
+ /**
58908
60201
  * * Field Name: FieldCodeName
58909
60202
  * * Display Name: Field Code Name
58910
60203
  * * SQL Data Type: nvarchar(MAX)
@@ -58962,7 +60255,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58962
60255
  }
58963
60256
  /**
58964
60257
  * * Field Name: RelatedEntity
58965
- * * Display Name: Related Entity
60258
+ * * Display Name: Related Entity Name
58966
60259
  * * SQL Data Type: nvarchar(255)
58967
60260
  */
58968
60261
  get RelatedEntity() {
@@ -58970,7 +60263,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58970
60263
  }
58971
60264
  /**
58972
60265
  * * Field Name: RelatedEntitySchemaName
58973
- * * Display Name: Related Entity Schema Name
60266
+ * * Display Name: Related Entity Schema
58974
60267
  * * SQL Data Type: nvarchar(255)
58975
60268
  */
58976
60269
  get RelatedEntitySchemaName() {
@@ -58978,7 +60271,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58978
60271
  }
58979
60272
  /**
58980
60273
  * * Field Name: RelatedEntityBaseTable
58981
- * * Display Name: Related Entity Base Table
60274
+ * * Display Name: Related Entity Table
58982
60275
  * * SQL Data Type: nvarchar(255)
58983
60276
  */
58984
60277
  get RelatedEntityBaseTable() {
@@ -58986,7 +60279,7 @@ let MJEntityFieldEntity = class MJEntityFieldEntity extends BaseEntity {
58986
60279
  }
58987
60280
  /**
58988
60281
  * * Field Name: RelatedEntityBaseView
58989
- * * Display Name: Related Entity Base View
60282
+ * * Display Name: Related Entity View
58990
60283
  * * SQL Data Type: nvarchar(255)
58991
60284
  */
58992
60285
  get RelatedEntityBaseView() {
@@ -61250,6 +62543,204 @@ MJFileEntityRecordLinkEntity = __decorate([
61250
62543
  RegisterClass(BaseEntity, 'MJ: File Entity Record Links')
61251
62544
  ], MJFileEntityRecordLinkEntity);
61252
62545
  export { MJFileEntityRecordLinkEntity };
62546
+ /**
62547
+ * MJ: File Storage Account Permissions - strongly typed entity sub-class
62548
+ * * Schema: __mj
62549
+ * * Base Table: FileStorageAccountPermission
62550
+ * * Base View: vwFileStorageAccountPermissions
62551
+ * * @description Controls which users and roles can access specific file storage accounts. If no permission records exist for an account, it is accessible to everyone (backwards compatible).
62552
+ * * Primary Key: ID
62553
+ * @extends {BaseEntity}
62554
+ * @class
62555
+ * @public
62556
+ */
62557
+ let MJFileStorageAccountPermissionEntity = class MJFileStorageAccountPermissionEntity extends BaseEntity {
62558
+ /**
62559
+ * Loads the MJ: File Storage Account Permissions record from the database
62560
+ * @param ID: string - primary key value to load the MJ: File Storage Account Permissions record.
62561
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
62562
+ * @returns {Promise<boolean>} - true if successful, false otherwise
62563
+ * @public
62564
+ * @async
62565
+ * @memberof MJFileStorageAccountPermissionEntity
62566
+ * @method
62567
+ * @override
62568
+ */
62569
+ async Load(ID, EntityRelationshipsToLoad) {
62570
+ const compositeKey = new CompositeKey();
62571
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
62572
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
62573
+ }
62574
+ /**
62575
+ * Validate() method override for MJ: File Storage Account Permissions entity. This is an auto-generated method that invokes the generated validators for this entity for the following fields:
62576
+ * * Table-Level: Permissions must be correctly assigned based on the type: a 'User' type requires a User ID and no Role ID, a 'Role' type requires a Role ID and no User ID, and the 'Everyone' type requires both IDs to be empty. This ensures that permissions are always linked to the correct entity.
62577
+ * @public
62578
+ * @method
62579
+ * @override
62580
+ */
62581
+ Validate() {
62582
+ const result = super.Validate();
62583
+ this.ValidateTypeIdentifierAssignment(result);
62584
+ result.Success = result.Success && (result.Errors.length === 0);
62585
+ return result;
62586
+ }
62587
+ /**
62588
+ * Permissions must be correctly assigned based on the type: a 'User' type requires a User ID and no Role ID, a 'Role' type requires a Role ID and no User ID, and the 'Everyone' type requires both IDs to be empty. This ensures that permissions are always linked to the correct entity.
62589
+ * @param result - the ValidationResult object to add any errors or warnings to
62590
+ * @public
62591
+ * @method
62592
+ */
62593
+ ValidateTypeIdentifierAssignment(result) {
62594
+ // Validates that the correct ID is provided or omitted based on the Type field
62595
+ const isUserValid = this.Type === "User" && this.UserID != null && this.RoleID == null;
62596
+ const isRoleValid = this.Type === "Role" && this.RoleID != null && this.UserID == null;
62597
+ const isEveryoneValid = this.Type === "Everyone" && this.UserID == null && this.RoleID == null;
62598
+ if (!isUserValid && !isRoleValid && !isEveryoneValid) {
62599
+ result.Errors.push(new ValidationErrorInfo("Type", "The identifier assignment is invalid for the selected Type. 'User' requires a User ID and no Role ID, 'Role' requires a Role ID and no User ID, and 'Everyone' requires both to be empty.", this.Type, ValidationErrorType.Failure));
62600
+ }
62601
+ }
62602
+ /**
62603
+ * * Field Name: ID
62604
+ * * Display Name: ID
62605
+ * * SQL Data Type: uniqueidentifier
62606
+ * * Default Value: newsequentialid()
62607
+ */
62608
+ get ID() {
62609
+ return this.Get('ID');
62610
+ }
62611
+ set ID(value) {
62612
+ this.Set('ID', value);
62613
+ }
62614
+ /**
62615
+ * * Field Name: FileStorageAccountID
62616
+ * * Display Name: Storage Account
62617
+ * * SQL Data Type: uniqueidentifier
62618
+ * * Related Entity/Foreign Key: MJ: File Storage Accounts (vwFileStorageAccounts.ID)
62619
+ * * Description: The storage account this permission applies to.
62620
+ */
62621
+ get FileStorageAccountID() {
62622
+ return this.Get('FileStorageAccountID');
62623
+ }
62624
+ set FileStorageAccountID(value) {
62625
+ this.Set('FileStorageAccountID', value);
62626
+ }
62627
+ /**
62628
+ * * Field Name: Type
62629
+ * * Display Name: Permission Type
62630
+ * * SQL Data Type: nvarchar(20)
62631
+ * * Default Value: Role
62632
+ * * Value List Type: List
62633
+ * * Possible Values
62634
+ * * Everyone
62635
+ * * Role
62636
+ * * User
62637
+ * * Description: Permission type: User (requires UserID), Role (requires RoleID), or Everyone (both NULL).
62638
+ */
62639
+ get Type() {
62640
+ return this.Get('Type');
62641
+ }
62642
+ set Type(value) {
62643
+ this.Set('Type', value);
62644
+ }
62645
+ /**
62646
+ * * Field Name: UserID
62647
+ * * Display Name: User
62648
+ * * SQL Data Type: uniqueidentifier
62649
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)
62650
+ * * Description: Required when Type is User. The specific user granted access to this storage account.
62651
+ */
62652
+ get UserID() {
62653
+ return this.Get('UserID');
62654
+ }
62655
+ set UserID(value) {
62656
+ this.Set('UserID', value);
62657
+ }
62658
+ /**
62659
+ * * Field Name: RoleID
62660
+ * * Display Name: Role
62661
+ * * SQL Data Type: uniqueidentifier
62662
+ * * Related Entity/Foreign Key: MJ: Roles (vwRoles.ID)
62663
+ * * Description: Required when Type is Role. The role granted access to this storage account.
62664
+ */
62665
+ get RoleID() {
62666
+ return this.Get('RoleID');
62667
+ }
62668
+ set RoleID(value) {
62669
+ this.Set('RoleID', value);
62670
+ }
62671
+ /**
62672
+ * * Field Name: CanRead
62673
+ * * Display Name: Can Read
62674
+ * * SQL Data Type: bit
62675
+ * * Default Value: 1
62676
+ * * Description: Whether the grantee can read/search files in this storage account.
62677
+ */
62678
+ get CanRead() {
62679
+ return this.Get('CanRead');
62680
+ }
62681
+ set CanRead(value) {
62682
+ this.Set('CanRead', value);
62683
+ }
62684
+ /**
62685
+ * * Field Name: CanWrite
62686
+ * * Display Name: Can Write
62687
+ * * SQL Data Type: bit
62688
+ * * Default Value: 0
62689
+ * * Description: Whether the grantee can upload/modify files in this storage account.
62690
+ */
62691
+ get CanWrite() {
62692
+ return this.Get('CanWrite');
62693
+ }
62694
+ set CanWrite(value) {
62695
+ this.Set('CanWrite', value);
62696
+ }
62697
+ /**
62698
+ * * Field Name: __mj_CreatedAt
62699
+ * * Display Name: Created At
62700
+ * * SQL Data Type: datetimeoffset
62701
+ * * Default Value: getutcdate()
62702
+ */
62703
+ get __mj_CreatedAt() {
62704
+ return this.Get('__mj_CreatedAt');
62705
+ }
62706
+ /**
62707
+ * * Field Name: __mj_UpdatedAt
62708
+ * * Display Name: Updated At
62709
+ * * SQL Data Type: datetimeoffset
62710
+ * * Default Value: getutcdate()
62711
+ */
62712
+ get __mj_UpdatedAt() {
62713
+ return this.Get('__mj_UpdatedAt');
62714
+ }
62715
+ /**
62716
+ * * Field Name: FileStorageAccount
62717
+ * * Display Name: Storage Account Name
62718
+ * * SQL Data Type: nvarchar(200)
62719
+ */
62720
+ get FileStorageAccount() {
62721
+ return this.Get('FileStorageAccount');
62722
+ }
62723
+ /**
62724
+ * * Field Name: User
62725
+ * * Display Name: User Name
62726
+ * * SQL Data Type: nvarchar(100)
62727
+ */
62728
+ get User() {
62729
+ return this.Get('User');
62730
+ }
62731
+ /**
62732
+ * * Field Name: Role
62733
+ * * Display Name: Role Name
62734
+ * * SQL Data Type: nvarchar(50)
62735
+ */
62736
+ get Role() {
62737
+ return this.Get('Role');
62738
+ }
62739
+ };
62740
+ MJFileStorageAccountPermissionEntity = __decorate([
62741
+ RegisterClass(BaseEntity, 'MJ: File Storage Account Permissions')
62742
+ ], MJFileStorageAccountPermissionEntity);
62743
+ export { MJFileStorageAccountPermissionEntity };
61253
62744
  /**
61254
62745
  * MJ: File Storage Accounts - strongly typed entity sub-class
61255
62746
  * * Schema: __mj
@@ -61360,8 +62851,21 @@ let MJFileStorageAccountEntity = class MJFileStorageAccountEntity extends BaseEn
61360
62851
  return this.Get('__mj_UpdatedAt');
61361
62852
  }
61362
62853
  /**
62854
+ * * Field Name: IncludeInGlobalSearch
62855
+ * * Display Name: Include In Global Search
62856
+ * * SQL Data Type: bit
62857
+ * * Default Value: 0
62858
+ * * Description: When true, this storage account is included in universal/global search results. Only effective if the associated provider supports search (SupportsSearch = 1).
62859
+ */
62860
+ get IncludeInGlobalSearch() {
62861
+ return this.Get('IncludeInGlobalSearch');
62862
+ }
62863
+ set IncludeInGlobalSearch(value) {
62864
+ this.Set('IncludeInGlobalSearch', value);
62865
+ }
62866
+ /**
61363
62867
  * * Field Name: Provider
61364
- * * Display Name: Provider Name
62868
+ * * Display Name: Provider Type
61365
62869
  * * SQL Data Type: nvarchar(50)
61366
62870
  */
61367
62871
  get Provider() {
@@ -62067,6 +63571,161 @@ MJGeneratedCodeEntity = __decorate([
62067
63571
  RegisterClass(BaseEntity, 'MJ: Generated Codes')
62068
63572
  ], MJGeneratedCodeEntity);
62069
63573
  export { MJGeneratedCodeEntity };
63574
+ /**
63575
+ * MJ: Instance Configurations - strongly typed entity sub-class
63576
+ * * Schema: __mj
63577
+ * * Base Table: InstanceConfiguration
63578
+ * * Base View: vwInstanceConfigurations
63579
+ * * @description Instance-level feature toggles and configuration. Controls which features are enabled per MJ Explorer deployment.
63580
+ * * Primary Key: ID
63581
+ * @extends {BaseEntity}
63582
+ * @class
63583
+ * @public
63584
+ */
63585
+ let MJInstanceConfigurationEntity = class MJInstanceConfigurationEntity extends BaseEntity {
63586
+ /**
63587
+ * Loads the MJ: Instance Configurations record from the database
63588
+ * @param ID: string - primary key value to load the MJ: Instance Configurations record.
63589
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
63590
+ * @returns {Promise<boolean>} - true if successful, false otherwise
63591
+ * @public
63592
+ * @async
63593
+ * @memberof MJInstanceConfigurationEntity
63594
+ * @method
63595
+ * @override
63596
+ */
63597
+ async Load(ID, EntityRelationshipsToLoad) {
63598
+ const compositeKey = new CompositeKey();
63599
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
63600
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
63601
+ }
63602
+ /**
63603
+ * * Field Name: ID
63604
+ * * Display Name: ID
63605
+ * * SQL Data Type: uniqueidentifier
63606
+ * * Default Value: newsequentialid()
63607
+ */
63608
+ get ID() {
63609
+ return this.Get('ID');
63610
+ }
63611
+ set ID(value) {
63612
+ this.Set('ID', value);
63613
+ }
63614
+ /**
63615
+ * * Field Name: FeatureKey
63616
+ * * Display Name: Feature Key
63617
+ * * SQL Data Type: nvarchar(200)
63618
+ * * Description: Unique dot-notation key identifying the feature, e.g. Shell.SearchBar.Enabled.
63619
+ */
63620
+ get FeatureKey() {
63621
+ return this.Get('FeatureKey');
63622
+ }
63623
+ set FeatureKey(value) {
63624
+ this.Set('FeatureKey', value);
63625
+ }
63626
+ /**
63627
+ * * Field Name: Value
63628
+ * * Display Name: Current Value
63629
+ * * SQL Data Type: nvarchar(MAX)
63630
+ * * Description: Current value for this feature setting.
63631
+ */
63632
+ get Value() {
63633
+ return this.Get('Value');
63634
+ }
63635
+ set Value(value) {
63636
+ this.Set('Value', value);
63637
+ }
63638
+ /**
63639
+ * * Field Name: ValueType
63640
+ * * Display Name: Value Type
63641
+ * * SQL Data Type: nvarchar(20)
63642
+ * * Default Value: boolean
63643
+ * * Value List Type: List
63644
+ * * Possible Values
63645
+ * * boolean
63646
+ * * json
63647
+ * * number
63648
+ * * string
63649
+ * * Description: Data type of the value: boolean, string, number, or json.
63650
+ */
63651
+ get ValueType() {
63652
+ return this.Get('ValueType');
63653
+ }
63654
+ set ValueType(value) {
63655
+ this.Set('ValueType', value);
63656
+ }
63657
+ /**
63658
+ * * Field Name: Category
63659
+ * * Display Name: Admin Category
63660
+ * * SQL Data Type: nvarchar(100)
63661
+ * * Default Value: General
63662
+ * * Description: Grouping category for admin UI display.
63663
+ */
63664
+ get Category() {
63665
+ return this.Get('Category');
63666
+ }
63667
+ set Category(value) {
63668
+ this.Set('Category', value);
63669
+ }
63670
+ /**
63671
+ * * Field Name: DisplayName
63672
+ * * Display Name: Display Name
63673
+ * * SQL Data Type: nvarchar(200)
63674
+ * * Description: Human-readable display name for the setting.
63675
+ */
63676
+ get DisplayName() {
63677
+ return this.Get('DisplayName');
63678
+ }
63679
+ set DisplayName(value) {
63680
+ this.Set('DisplayName', value);
63681
+ }
63682
+ /**
63683
+ * * Field Name: Description
63684
+ * * Display Name: Description
63685
+ * * SQL Data Type: nvarchar(MAX)
63686
+ * * Description: Optional extended description or help text for the setting.
63687
+ */
63688
+ get Description() {
63689
+ return this.Get('Description');
63690
+ }
63691
+ set Description(value) {
63692
+ this.Set('Description', value);
63693
+ }
63694
+ /**
63695
+ * * Field Name: DefaultValue
63696
+ * * Display Name: Default Value
63697
+ * * SQL Data Type: nvarchar(MAX)
63698
+ * * Description: Factory default value. Used when resetting to defaults.
63699
+ */
63700
+ get DefaultValue() {
63701
+ return this.Get('DefaultValue');
63702
+ }
63703
+ set DefaultValue(value) {
63704
+ this.Set('DefaultValue', value);
63705
+ }
63706
+ /**
63707
+ * * Field Name: __mj_CreatedAt
63708
+ * * Display Name: Created At
63709
+ * * SQL Data Type: datetimeoffset
63710
+ * * Default Value: getutcdate()
63711
+ */
63712
+ get __mj_CreatedAt() {
63713
+ return this.Get('__mj_CreatedAt');
63714
+ }
63715
+ /**
63716
+ * * Field Name: __mj_UpdatedAt
63717
+ * * Display Name: Updated At
63718
+ * * SQL Data Type: datetimeoffset
63719
+ * * Default Value: getutcdate()
63720
+ */
63721
+ get __mj_UpdatedAt() {
63722
+ return this.Get('__mj_UpdatedAt');
63723
+ }
63724
+ };
63725
+ MJInstanceConfigurationEntity = __decorate([
63726
+ RegisterClass(BaseEntity, 'MJ: Instance Configurations')
63727
+ ], MJInstanceConfigurationEntity);
63728
+ export { MJInstanceConfigurationEntity };
62070
63729
  /**
62071
63730
  * MJ: Integration Object Fields - strongly typed entity sub-class
62072
63731
  * * Schema: __mj
@@ -71001,6 +72660,288 @@ MJRecordChangeEntity = __decorate([
71001
72660
  RegisterClass(BaseEntity, 'MJ: Record Changes')
71002
72661
  ], MJRecordChangeEntity);
71003
72662
  export { MJRecordChangeEntity };
72663
+ /**
72664
+ * MJ: Record Geo Codes - strongly typed entity sub-class
72665
+ * * Schema: __mj
72666
+ * * Base Table: RecordGeoCode
72667
+ * * Base View: vwRecordGeoCodes
72668
+ * * @description Polymorphic table storing persisted geocoding results for any MJ entity record. Each row maps an entity record + location type to a lat/lng coordinate, with optional country/state references for choropleth grouping. Supports multi-location entities via LocationType discriminator.
72669
+ * * Primary Key: ID
72670
+ * @extends {BaseEntity}
72671
+ * @class
72672
+ * @public
72673
+ */
72674
+ let MJRecordGeoCodeEntity = class MJRecordGeoCodeEntity extends BaseEntity {
72675
+ /**
72676
+ * Loads the MJ: Record Geo Codes record from the database
72677
+ * @param ID: string - primary key value to load the MJ: Record Geo Codes record.
72678
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
72679
+ * @returns {Promise<boolean>} - true if successful, false otherwise
72680
+ * @public
72681
+ * @async
72682
+ * @memberof MJRecordGeoCodeEntity
72683
+ * @method
72684
+ * @override
72685
+ */
72686
+ async Load(ID, EntityRelationshipsToLoad) {
72687
+ const compositeKey = new CompositeKey();
72688
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
72689
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
72690
+ }
72691
+ /**
72692
+ * * Field Name: ID
72693
+ * * Display Name: ID
72694
+ * * SQL Data Type: uniqueidentifier
72695
+ * * Default Value: newsequentialid()
72696
+ */
72697
+ get ID() {
72698
+ return this.Get('ID');
72699
+ }
72700
+ set ID(value) {
72701
+ this.Set('ID', value);
72702
+ }
72703
+ /**
72704
+ * * Field Name: EntityID
72705
+ * * Display Name: Entity
72706
+ * * SQL Data Type: uniqueidentifier
72707
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
72708
+ * * Description: Foreign key to Entity. Identifies which entity this geocode belongs to.
72709
+ */
72710
+ get EntityID() {
72711
+ return this.Get('EntityID');
72712
+ }
72713
+ set EntityID(value) {
72714
+ this.Set('EntityID', value);
72715
+ }
72716
+ /**
72717
+ * * Field Name: RecordID
72718
+ * * Display Name: Record
72719
+ * * SQL Data Type: nvarchar(450)
72720
+ * * Description: MJ composite primary key format string identifying the source record (e.g., "ID|<uuid>"). Max 450 chars for SQL Server index support.
72721
+ */
72722
+ get RecordID() {
72723
+ return this.Get('RecordID');
72724
+ }
72725
+ set RecordID(value) {
72726
+ this.Set('RecordID', value);
72727
+ }
72728
+ /**
72729
+ * * Field Name: LocationType
72730
+ * * Display Name: Location Type
72731
+ * * SQL Data Type: nvarchar(50)
72732
+ * * Default Value: Primary
72733
+ * * Description: Discriminator for multi-location entities. Default "Primary" for single-address entities. Multi-address examples: "Home", "Business", "Mailing", "PO Box".
72734
+ */
72735
+ get LocationType() {
72736
+ return this.Get('LocationType');
72737
+ }
72738
+ set LocationType(value) {
72739
+ this.Set('LocationType', value);
72740
+ }
72741
+ /**
72742
+ * * Field Name: Latitude
72743
+ * * Display Name: Latitude
72744
+ * * SQL Data Type: decimal(10, 6)
72745
+ * * Description: Geocoded latitude coordinate. NULL when Status is "pending" or "failed".
72746
+ */
72747
+ get Latitude() {
72748
+ return this.Get('Latitude');
72749
+ }
72750
+ set Latitude(value) {
72751
+ this.Set('Latitude', value);
72752
+ }
72753
+ /**
72754
+ * * Field Name: Longitude
72755
+ * * Display Name: Longitude
72756
+ * * SQL Data Type: decimal(10, 6)
72757
+ * * Description: Geocoded longitude coordinate. NULL when Status is "pending" or "failed".
72758
+ */
72759
+ get Longitude() {
72760
+ return this.Get('Longitude');
72761
+ }
72762
+ set Longitude(value) {
72763
+ this.Set('Longitude', value);
72764
+ }
72765
+ /**
72766
+ * * Field Name: Precision
72767
+ * * Display Name: Precision
72768
+ * * SQL Data Type: nvarchar(20)
72769
+ * * Value List Type: List
72770
+ * * Possible Values
72771
+ * * city
72772
+ * * country
72773
+ * * county
72774
+ * * exact
72775
+ * * postal_code
72776
+ * * state_province
72777
+ * * Description: Precision level of the geocoded result: exact (street address), postal_code, city, county, state_province, or country.
72778
+ */
72779
+ get Precision() {
72780
+ return this.Get('Precision');
72781
+ }
72782
+ set Precision(value) {
72783
+ this.Set('Precision', value);
72784
+ }
72785
+ /**
72786
+ * * Field Name: CountryID
72787
+ * * Display Name: Country
72788
+ * * SQL Data Type: uniqueidentifier
72789
+ * * Related Entity/Foreign Key: MJ: Countries (vwCountries.ID)
72790
+ * * Description: Optional FK to Country reference table. Populated alongside lat/lng to enable choropleth grouping without reverse-geocoding at render time.
72791
+ */
72792
+ get CountryID() {
72793
+ return this.Get('CountryID');
72794
+ }
72795
+ set CountryID(value) {
72796
+ this.Set('CountryID', value);
72797
+ }
72798
+ /**
72799
+ * * Field Name: StateProvinceID
72800
+ * * Display Name: State Province
72801
+ * * SQL Data Type: uniqueidentifier
72802
+ * * Related Entity/Foreign Key: MJ: State Provinces (vwStateProvinces.ID)
72803
+ * * Description: Optional FK to StateProvince reference table. Populated alongside lat/lng to enable state-level choropleth grouping.
72804
+ */
72805
+ get StateProvinceID() {
72806
+ return this.Get('StateProvinceID');
72807
+ }
72808
+ set StateProvinceID(value) {
72809
+ this.Set('StateProvinceID', value);
72810
+ }
72811
+ /**
72812
+ * * Field Name: Status
72813
+ * * Display Name: Status
72814
+ * * SQL Data Type: nvarchar(20)
72815
+ * * Default Value: pending
72816
+ * * Value List Type: List
72817
+ * * Possible Values
72818
+ * * failed
72819
+ * * pending
72820
+ * * success
72821
+ * * Description: Current geocoding status: "pending" (awaiting geocode), "success" (geocoded), or "failed" (geocoding error). Used by scheduled job for retry logic.
72822
+ */
72823
+ get Status() {
72824
+ return this.Get('Status');
72825
+ }
72826
+ set Status(value) {
72827
+ this.Set('Status', value);
72828
+ }
72829
+ /**
72830
+ * * Field Name: ErrorMessage
72831
+ * * Display Name: Error Message
72832
+ * * SQL Data Type: nvarchar(MAX)
72833
+ * * Description: Error details when Status is "failed". Captures API error messages, rate limit info, etc. for debugging.
72834
+ */
72835
+ get ErrorMessage() {
72836
+ return this.Get('ErrorMessage');
72837
+ }
72838
+ set ErrorMessage(value) {
72839
+ this.Set('ErrorMessage', value);
72840
+ }
72841
+ /**
72842
+ * * Field Name: RetryCount
72843
+ * * Display Name: Retry Count
72844
+ * * SQL Data Type: int
72845
+ * * Default Value: 0
72846
+ * * Description: Number of geocoding attempts. Used for exponential backoff in the scheduled retry job. Stops retrying at configurable maxRetries (default 3).
72847
+ */
72848
+ get RetryCount() {
72849
+ return this.Get('RetryCount');
72850
+ }
72851
+ set RetryCount(value) {
72852
+ this.Set('RetryCount', value);
72853
+ }
72854
+ /**
72855
+ * * Field Name: SourceFieldHash
72856
+ * * Display Name: Source Field Hash
72857
+ * * SQL Data Type: nvarchar(64)
72858
+ * * Description: SHA-256 hash of the source field values that produced this geocode. When source fields change on save, the hash won't match and re-geocoding is triggered. Format: SHA-256(concat(field1, "|", field2, ...)).
72859
+ */
72860
+ get SourceFieldHash() {
72861
+ return this.Get('SourceFieldHash');
72862
+ }
72863
+ set SourceFieldHash(value) {
72864
+ this.Set('SourceFieldHash', value);
72865
+ }
72866
+ /**
72867
+ * * Field Name: GeocodedAt
72868
+ * * Display Name: Geocoded At
72869
+ * * SQL Data Type: datetimeoffset
72870
+ * * Description: Timestamp of when geocoding was last attempted (success or failure).
72871
+ */
72872
+ get GeocodedAt() {
72873
+ return this.Get('GeocodedAt');
72874
+ }
72875
+ set GeocodedAt(value) {
72876
+ this.Set('GeocodedAt', value);
72877
+ }
72878
+ /**
72879
+ * * Field Name: GeocodingSource
72880
+ * * Display Name: Geocoding Source
72881
+ * * SQL Data Type: nvarchar(30)
72882
+ * * Value List Type: List
72883
+ * * Possible Values
72884
+ * * google
72885
+ * * ip_geolocation
72886
+ * * manual
72887
+ * * native
72888
+ * * reference_data
72889
+ * * reverse
72890
+ * * Description: How this geocode was produced: google (Google Geocoding API), reference_data (resolved via Country/StateProvince tables), manual (user-entered), ip_geolocation (IP lookup), native (copied from entity lat/lng fields), reverse (reverse geocode from coordinates).
72891
+ */
72892
+ get GeocodingSource() {
72893
+ return this.Get('GeocodingSource');
72894
+ }
72895
+ set GeocodingSource(value) {
72896
+ this.Set('GeocodingSource', value);
72897
+ }
72898
+ /**
72899
+ * * Field Name: __mj_CreatedAt
72900
+ * * Display Name: Created At
72901
+ * * SQL Data Type: datetimeoffset
72902
+ * * Default Value: getutcdate()
72903
+ */
72904
+ get __mj_CreatedAt() {
72905
+ return this.Get('__mj_CreatedAt');
72906
+ }
72907
+ /**
72908
+ * * Field Name: __mj_UpdatedAt
72909
+ * * Display Name: Updated At
72910
+ * * SQL Data Type: datetimeoffset
72911
+ * * Default Value: getutcdate()
72912
+ */
72913
+ get __mj_UpdatedAt() {
72914
+ return this.Get('__mj_UpdatedAt');
72915
+ }
72916
+ /**
72917
+ * * Field Name: Entity
72918
+ * * Display Name: Entity Name
72919
+ * * SQL Data Type: nvarchar(255)
72920
+ */
72921
+ get Entity() {
72922
+ return this.Get('Entity');
72923
+ }
72924
+ /**
72925
+ * * Field Name: Country
72926
+ * * Display Name: Country Name
72927
+ * * SQL Data Type: nvarchar(200)
72928
+ */
72929
+ get Country() {
72930
+ return this.Get('Country');
72931
+ }
72932
+ /**
72933
+ * * Field Name: StateProvince
72934
+ * * Display Name: State Province Name
72935
+ * * SQL Data Type: nvarchar(200)
72936
+ */
72937
+ get StateProvince() {
72938
+ return this.Get('StateProvince');
72939
+ }
72940
+ };
72941
+ MJRecordGeoCodeEntity = __decorate([
72942
+ RegisterClass(BaseEntity, 'MJ: Record Geo Codes')
72943
+ ], MJRecordGeoCodeEntity);
72944
+ export { MJRecordGeoCodeEntity };
71004
72945
  /**
71005
72946
  * MJ: Record Links - strongly typed entity sub-class
71006
72947
  * * Schema: __mj
@@ -74547,6 +76488,253 @@ MJSchemaInfoEntity = __decorate([
74547
76488
  RegisterClass(BaseEntity, 'MJ: Schema Info')
74548
76489
  ], MJSchemaInfoEntity);
74549
76490
  export { MJSchemaInfoEntity };
76491
+ /**
76492
+ * MJ: Search Providers - strongly typed entity sub-class
76493
+ * * Schema: __mj
76494
+ * * Base Table: SearchProvider
76495
+ * * Base View: vwSearchProviders
76496
+ * * Primary Key: ID
76497
+ * @extends {BaseEntity}
76498
+ * @class
76499
+ * @public
76500
+ */
76501
+ let MJSearchProviderEntity = class MJSearchProviderEntity extends BaseEntity {
76502
+ /**
76503
+ * Loads the MJ: Search Providers record from the database
76504
+ * @param ID: string - primary key value to load the MJ: Search Providers record.
76505
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
76506
+ * @returns {Promise<boolean>} - true if successful, false otherwise
76507
+ * @public
76508
+ * @async
76509
+ * @memberof MJSearchProviderEntity
76510
+ * @method
76511
+ * @override
76512
+ */
76513
+ async Load(ID, EntityRelationshipsToLoad) {
76514
+ const compositeKey = new CompositeKey();
76515
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
76516
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
76517
+ }
76518
+ /**
76519
+ * Validate() method override for MJ: Search Providers entity. This is an auto-generated method that invokes the generated validators for this entity for the following fields:
76520
+ * * Priority: The priority level must be a non-negative value (0 or greater) to ensure valid ordering and categorization of records.
76521
+ * @public
76522
+ * @method
76523
+ * @override
76524
+ */
76525
+ Validate() {
76526
+ const result = super.Validate();
76527
+ this.ValidatePriorityAtLeastZero(result);
76528
+ result.Success = result.Success && (result.Errors.length === 0);
76529
+ return result;
76530
+ }
76531
+ /**
76532
+ * The priority level must be a non-negative value (0 or greater) to ensure valid ordering and categorization of records.
76533
+ * @param result - the ValidationResult object to add any errors or warnings to
76534
+ * @public
76535
+ * @method
76536
+ */
76537
+ ValidatePriorityAtLeastZero(result) {
76538
+ if (this.Priority < 0) {
76539
+ result.Errors.push(new ValidationErrorInfo("Priority", "Priority must be 0 or greater.", this.Priority, ValidationErrorType.Failure));
76540
+ }
76541
+ }
76542
+ /**
76543
+ * * Field Name: ID
76544
+ * * Display Name: ID
76545
+ * * SQL Data Type: uniqueidentifier
76546
+ * * Default Value: newsequentialid()
76547
+ */
76548
+ get ID() {
76549
+ return this.Get('ID');
76550
+ }
76551
+ set ID(value) {
76552
+ this.Set('ID', value);
76553
+ }
76554
+ /**
76555
+ * * Field Name: Name
76556
+ * * Display Name: Name
76557
+ * * SQL Data Type: nvarchar(200)
76558
+ * * Description: Display name for this search provider (e.g., "Vector Search", "Algolia")
76559
+ */
76560
+ get Name() {
76561
+ return this.Get('Name');
76562
+ }
76563
+ set Name(value) {
76564
+ this.Set('Name', value);
76565
+ }
76566
+ /**
76567
+ * * Field Name: Description
76568
+ * * Display Name: Description
76569
+ * * SQL Data Type: nvarchar(MAX)
76570
+ * * Description: Human-readable description of what this provider searches and how it works
76571
+ */
76572
+ get Description() {
76573
+ return this.Get('Description');
76574
+ }
76575
+ set Description(value) {
76576
+ this.Set('Description', value);
76577
+ }
76578
+ /**
76579
+ * * Field Name: DriverClass
76580
+ * * Display Name: Driver Class
76581
+ * * SQL Data Type: nvarchar(500)
76582
+ * * Description: ClassFactory key used with @RegisterClass(ISearchProvider, DriverClass) to instantiate the provider at runtime
76583
+ */
76584
+ get DriverClass() {
76585
+ return this.Get('DriverClass');
76586
+ }
76587
+ set DriverClass(value) {
76588
+ this.Set('DriverClass', value);
76589
+ }
76590
+ /**
76591
+ * * Field Name: Status
76592
+ * * Display Name: Status
76593
+ * * SQL Data Type: nvarchar(20)
76594
+ * * Default Value: Active
76595
+ * * Value List Type: List
76596
+ * * Possible Values
76597
+ * * Active
76598
+ * * Pending
76599
+ * * Terminated
76600
+ * * Description: Provider lifecycle status: Pending (not yet activated), Active (in use), Terminated (disabled)
76601
+ */
76602
+ get Status() {
76603
+ return this.Get('Status');
76604
+ }
76605
+ set Status(value) {
76606
+ this.Set('Status', value);
76607
+ }
76608
+ /**
76609
+ * * Field Name: Priority
76610
+ * * Display Name: Priority
76611
+ * * SQL Data Type: int
76612
+ * * Default Value: 0
76613
+ * * Description: Execution priority (lower = higher priority). Controls provider ordering and can influence RRF weighting. Must be >= 0.
76614
+ */
76615
+ get Priority() {
76616
+ return this.Get('Priority');
76617
+ }
76618
+ set Priority(value) {
76619
+ this.Set('Priority', value);
76620
+ }
76621
+ /**
76622
+ * * Field Name: SupportsPreview
76623
+ * * Display Name: Supports Preview
76624
+ * * SQL Data Type: bit
76625
+ * * Default Value: 1
76626
+ * * Description: Whether this provider should run during fast preview/autocomplete searches. Expensive providers (external APIs) may set this to 0.
76627
+ */
76628
+ get SupportsPreview() {
76629
+ return this.Get('SupportsPreview');
76630
+ }
76631
+ set SupportsPreview(value) {
76632
+ this.Set('SupportsPreview', value);
76633
+ }
76634
+ /**
76635
+ * * Field Name: MaxResultsOverride
76636
+ * * Display Name: Max Results Override
76637
+ * * SQL Data Type: int
76638
+ * * Description: Optional per-provider cap on the number of results to return. Useful for rate-limited or pay-per-query external APIs. When NULL, uses the SearchEngine default.
76639
+ */
76640
+ get MaxResultsOverride() {
76641
+ return this.Get('MaxResultsOverride');
76642
+ }
76643
+ set MaxResultsOverride(value) {
76644
+ this.Set('MaxResultsOverride', value);
76645
+ }
76646
+ /**
76647
+ * * Field Name: ProviderConfig
76648
+ * * Display Name: Provider Configuration
76649
+ * * SQL Data Type: nvarchar(MAX)
76650
+ * * Description: Optional JSON configuration blob for provider-specific settings (e.g., API endpoints, index names, tuning parameters). Schema is provider-defined.
76651
+ */
76652
+ get ProviderConfig() {
76653
+ return this.Get('ProviderConfig');
76654
+ }
76655
+ set ProviderConfig(value) {
76656
+ this.Set('ProviderConfig', value);
76657
+ }
76658
+ /**
76659
+ * * Field Name: CredentialID
76660
+ * * Display Name: Credential
76661
+ * * SQL Data Type: uniqueidentifier
76662
+ * * Related Entity/Foreign Key: MJ: Credentials (vwCredentials.ID)
76663
+ * * Description: Optional FK to the Credential entity for providers that require authentication (e.g., Algolia API key, external service credentials)
76664
+ */
76665
+ get CredentialID() {
76666
+ return this.Get('CredentialID');
76667
+ }
76668
+ set CredentialID(value) {
76669
+ this.Set('CredentialID', value);
76670
+ }
76671
+ /**
76672
+ * * Field Name: DisplayName
76673
+ * * Display Name: Display Name
76674
+ * * SQL Data Type: nvarchar(200)
76675
+ * * Description: UI display name for this provider shown in filter facets and result grouping (e.g., "Database", "Semantic Search"). When NULL, falls back to the Name column.
76676
+ */
76677
+ get DisplayName() {
76678
+ return this.Get('DisplayName');
76679
+ }
76680
+ set DisplayName(value) {
76681
+ this.Set('DisplayName', value);
76682
+ }
76683
+ /**
76684
+ * * Field Name: Icon
76685
+ * * Display Name: Icon
76686
+ * * SQL Data Type: nvarchar(200)
76687
+ * * Description: CSS icon class for UI display in filter facets and result badges (e.g., "fa-solid fa-database", "fa-solid fa-brain"). Supports any CSS-based icon library. When NULL, a default icon is used.
76688
+ */
76689
+ get Icon() {
76690
+ return this.Get('Icon');
76691
+ }
76692
+ set Icon(value) {
76693
+ this.Set('Icon', value);
76694
+ }
76695
+ /**
76696
+ * * Field Name: Comments
76697
+ * * Display Name: Comments
76698
+ * * SQL Data Type: nvarchar(MAX)
76699
+ * * Description: Free-form notes about this provider configuration
76700
+ */
76701
+ get Comments() {
76702
+ return this.Get('Comments');
76703
+ }
76704
+ set Comments(value) {
76705
+ this.Set('Comments', value);
76706
+ }
76707
+ /**
76708
+ * * Field Name: __mj_CreatedAt
76709
+ * * Display Name: Created At
76710
+ * * SQL Data Type: datetimeoffset
76711
+ * * Default Value: getutcdate()
76712
+ */
76713
+ get __mj_CreatedAt() {
76714
+ return this.Get('__mj_CreatedAt');
76715
+ }
76716
+ /**
76717
+ * * Field Name: __mj_UpdatedAt
76718
+ * * Display Name: Updated At
76719
+ * * SQL Data Type: datetimeoffset
76720
+ * * Default Value: getutcdate()
76721
+ */
76722
+ get __mj_UpdatedAt() {
76723
+ return this.Get('__mj_UpdatedAt');
76724
+ }
76725
+ /**
76726
+ * * Field Name: Credential
76727
+ * * Display Name: Credential Name
76728
+ * * SQL Data Type: nvarchar(200)
76729
+ */
76730
+ get Credential() {
76731
+ return this.Get('Credential');
76732
+ }
76733
+ };
76734
+ MJSearchProviderEntity = __decorate([
76735
+ RegisterClass(BaseEntity, 'MJ: Search Providers')
76736
+ ], MJSearchProviderEntity);
76737
+ export { MJSearchProviderEntity };
74550
76738
  /**
74551
76739
  * MJ: Skills - strongly typed entity sub-class
74552
76740
  * * Schema: __mj
@@ -74805,6 +76993,174 @@ MJSQLDialectEntity = __decorate([
74805
76993
  RegisterClass(BaseEntity, 'MJ: SQL Dialects')
74806
76994
  ], MJSQLDialectEntity);
74807
76995
  export { MJSQLDialectEntity };
76996
+ /**
76997
+ * MJ: State Provinces - strongly typed entity sub-class
76998
+ * * Schema: __mj
76999
+ * * Base Table: StateProvince
77000
+ * * Base View: vwStateProvinces
77001
+ * * @description Reference table for states, provinces, and first-level administrative divisions. Linked to Country via FK. Seeded with ~5,000 records with ISO 3166-2 codes, centroids, and optional boundary GeoJSON.
77002
+ * * Primary Key: ID
77003
+ * @extends {BaseEntity}
77004
+ * @class
77005
+ * @public
77006
+ */
77007
+ let MJStateProvinceEntity = class MJStateProvinceEntity extends BaseEntity {
77008
+ /**
77009
+ * Loads the MJ: State Provinces record from the database
77010
+ * @param ID: string - primary key value to load the MJ: State Provinces record.
77011
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
77012
+ * @returns {Promise<boolean>} - true if successful, false otherwise
77013
+ * @public
77014
+ * @async
77015
+ * @memberof MJStateProvinceEntity
77016
+ * @method
77017
+ * @override
77018
+ */
77019
+ async Load(ID, EntityRelationshipsToLoad) {
77020
+ const compositeKey = new CompositeKey();
77021
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
77022
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
77023
+ }
77024
+ /**
77025
+ * * Field Name: ID
77026
+ * * Display Name: ID
77027
+ * * SQL Data Type: uniqueidentifier
77028
+ * * Default Value: newsequentialid()
77029
+ */
77030
+ get ID() {
77031
+ return this.Get('ID');
77032
+ }
77033
+ set ID(value) {
77034
+ this.Set('ID', value);
77035
+ }
77036
+ /**
77037
+ * * Field Name: CountryID
77038
+ * * Display Name: Country
77039
+ * * SQL Data Type: uniqueidentifier
77040
+ * * Related Entity/Foreign Key: MJ: Countries (vwCountries.ID)
77041
+ * * Description: Foreign key to Country. Establishes the parent country for this state/province.
77042
+ */
77043
+ get CountryID() {
77044
+ return this.Get('CountryID');
77045
+ }
77046
+ set CountryID(value) {
77047
+ this.Set('CountryID', value);
77048
+ }
77049
+ /**
77050
+ * * Field Name: Name
77051
+ * * Display Name: Name
77052
+ * * SQL Data Type: nvarchar(200)
77053
+ * * Description: Full state/province name (e.g., "California", "Ontario").
77054
+ */
77055
+ get Name() {
77056
+ return this.Get('Name');
77057
+ }
77058
+ set Name(value) {
77059
+ this.Set('Name', value);
77060
+ }
77061
+ /**
77062
+ * * Field Name: Code
77063
+ * * Display Name: State Code
77064
+ * * SQL Data Type: nvarchar(10)
77065
+ * * Description: Short code within the country (e.g., "CA", "ON"). Unique per country via compound constraint.
77066
+ */
77067
+ get Code() {
77068
+ return this.Get('Code');
77069
+ }
77070
+ set Code(value) {
77071
+ this.Set('Code', value);
77072
+ }
77073
+ /**
77074
+ * * Field Name: ISO3166_2
77075
+ * * Display Name: ISO 3166-2 Code
77076
+ * * SQL Data Type: nvarchar(10)
77077
+ * * Description: ISO 3166-2 subdivision code (e.g., "US-CA", "CA-ON"). Globally unique.
77078
+ */
77079
+ get ISO3166_2() {
77080
+ return this.Get('ISO3166_2');
77081
+ }
77082
+ set ISO3166_2(value) {
77083
+ this.Set('ISO3166_2', value);
77084
+ }
77085
+ /**
77086
+ * * Field Name: Latitude
77087
+ * * Display Name: Latitude
77088
+ * * SQL Data Type: decimal(10, 6)
77089
+ * * Description: Geographic centroid latitude. Used as fallback point for state-level geocoding.
77090
+ */
77091
+ get Latitude() {
77092
+ return this.Get('Latitude');
77093
+ }
77094
+ set Latitude(value) {
77095
+ this.Set('Latitude', value);
77096
+ }
77097
+ /**
77098
+ * * Field Name: Longitude
77099
+ * * Display Name: Longitude
77100
+ * * SQL Data Type: decimal(10, 6)
77101
+ * * Description: Geographic centroid longitude. Used as fallback point for state-level geocoding.
77102
+ */
77103
+ get Longitude() {
77104
+ return this.Get('Longitude');
77105
+ }
77106
+ set Longitude(value) {
77107
+ this.Set('Longitude', value);
77108
+ }
77109
+ /**
77110
+ * * Field Name: BoundaryGeoJSON
77111
+ * * Display Name: Boundary GeoJSON
77112
+ * * SQL Data Type: nvarchar(MAX)
77113
+ * * Description: Medium-resolution (~50m) GeoJSON boundary polygon for choropleth map rendering. Nullable. Total ~15-20MB for all states/provinces worldwide.
77114
+ */
77115
+ get BoundaryGeoJSON() {
77116
+ return this.Get('BoundaryGeoJSON');
77117
+ }
77118
+ set BoundaryGeoJSON(value) {
77119
+ this.Set('BoundaryGeoJSON', value);
77120
+ }
77121
+ /**
77122
+ * * Field Name: CommonAliases
77123
+ * * Display Name: Common Aliases
77124
+ * * SQL Data Type: nvarchar(MAX)
77125
+ * * Description: JSON array of common aliases (e.g., ["Calif.","California","Cal"]). Used by GeoResolver for fuzzy text-to-state matching.
77126
+ */
77127
+ get CommonAliases() {
77128
+ return this.Get('CommonAliases');
77129
+ }
77130
+ set CommonAliases(value) {
77131
+ this.Set('CommonAliases', value);
77132
+ }
77133
+ /**
77134
+ * * Field Name: __mj_CreatedAt
77135
+ * * Display Name: Created At
77136
+ * * SQL Data Type: datetimeoffset
77137
+ * * Default Value: getutcdate()
77138
+ */
77139
+ get __mj_CreatedAt() {
77140
+ return this.Get('__mj_CreatedAt');
77141
+ }
77142
+ /**
77143
+ * * Field Name: __mj_UpdatedAt
77144
+ * * Display Name: Updated At
77145
+ * * SQL Data Type: datetimeoffset
77146
+ * * Default Value: getutcdate()
77147
+ */
77148
+ get __mj_UpdatedAt() {
77149
+ return this.Get('__mj_UpdatedAt');
77150
+ }
77151
+ /**
77152
+ * * Field Name: Country
77153
+ * * Display Name: Country Name
77154
+ * * SQL Data Type: nvarchar(200)
77155
+ */
77156
+ get Country() {
77157
+ return this.Get('Country');
77158
+ }
77159
+ };
77160
+ MJStateProvinceEntity = __decorate([
77161
+ RegisterClass(BaseEntity, 'MJ: State Provinces')
77162
+ ], MJStateProvinceEntity);
77163
+ export { MJStateProvinceEntity };
74808
77164
  /**
74809
77165
  * MJ: Tag Audit Logs - strongly typed entity sub-class
74810
77166
  * * Schema: __mj
@@ -74995,30 +77351,6 @@ let MJTagCoOccurrenceEntity = class MJTagCoOccurrenceEntity extends BaseEntity {
74995
77351
  return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
74996
77352
  }
74997
77353
  /**
74998
- * Validate() method override for MJ: Tag Co Occurrences entity. This is an auto-generated method that invokes the generated validators for this entity for the following fields:
74999
- * * Table-Level: Tag A must be ordered before Tag B to ensure that each pair of tags is stored consistently and to prevent duplicate entries for the same combination.
75000
- * @public
75001
- * @method
75002
- * @override
75003
- */
75004
- Validate() {
75005
- const result = super.Validate();
75006
- this.ValidateTagAIDLessThanTagBID(result);
75007
- result.Success = result.Success && (result.Errors.length === 0);
75008
- return result;
75009
- }
75010
- /**
75011
- * Tag A must be ordered before Tag B to ensure that each pair of tags is stored consistently and to prevent duplicate entries for the same combination.
75012
- * @param result - the ValidationResult object to add any errors or warnings to
75013
- * @public
75014
- * @method
75015
- */
75016
- ValidateTagAIDLessThanTagBID(result) {
75017
- if (this.TagAID != null && this.TagBID != null && this.TagAID >= this.TagBID) {
75018
- result.Errors.push(new ValidationErrorInfo("TagAID", "Tag A must be ordered before Tag B to ensure a consistent ordering of tag pairs.", this.TagAID, ValidationErrorType.Failure));
75019
- }
75020
- }
75021
- /**
75022
77354
  * * Field Name: ID
75023
77355
  * * Display Name: ID
75024
77356
  * * SQL Data Type: uniqueidentifier
@@ -81628,6 +83960,27 @@ let MJVectorDatabaseEntity = class MJVectorDatabaseEntity extends BaseEntity {
81628
83960
  set Configuration(value) {
81629
83961
  this.Set('Configuration', value);
81630
83962
  }
83963
+ /**
83964
+ * * Field Name: CredentialID
83965
+ * * Display Name: Credential
83966
+ * * SQL Data Type: uniqueidentifier
83967
+ * * Related Entity/Foreign Key: MJ: Credentials (vwCredentials.ID)
83968
+ * * Description: Optional link to a stored credential containing the API key and any other authentication details for this vector database provider. When set, the Credential Engine decrypts and supplies the key at runtime. When NULL, the system falls back to the environment variable AI_VENDOR_API_KEY__<ClassKey>.
83969
+ */
83970
+ get CredentialID() {
83971
+ return this.Get('CredentialID');
83972
+ }
83973
+ set CredentialID(value) {
83974
+ this.Set('CredentialID', value);
83975
+ }
83976
+ /**
83977
+ * * Field Name: Credential
83978
+ * * Display Name: Credential Name
83979
+ * * SQL Data Type: nvarchar(200)
83980
+ */
83981
+ get Credential() {
83982
+ return this.Get('Credential');
83983
+ }
81631
83984
  };
81632
83985
  MJVectorDatabaseEntity = __decorate([
81633
83986
  RegisterClass(BaseEntity, 'MJ: Vector Databases')