@memberjunction/core-entities 5.49.0 → 5.50.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 (34) hide show
  1. package/dist/custom/MJListEntityExtended.d.ts +27 -0
  2. package/dist/custom/MJListEntityExtended.d.ts.map +1 -0
  3. package/dist/custom/MJListEntityExtended.js +52 -0
  4. package/dist/custom/MJListEntityExtended.js.map +1 -0
  5. package/dist/custom/Permissions/BaseShareEntityExtended.d.ts.map +1 -1
  6. package/dist/custom/Permissions/BaseShareEntityExtended.js +6 -1
  7. package/dist/custom/Permissions/BaseShareEntityExtended.js.map +1 -1
  8. package/dist/custom/Permissions/MJArtifactPermissionEntityExtended.d.ts.map +1 -1
  9. package/dist/custom/Permissions/MJArtifactPermissionEntityExtended.js +6 -4
  10. package/dist/custom/Permissions/MJArtifactPermissionEntityExtended.js.map +1 -1
  11. package/dist/custom/Permissions/MJCollectionPermissionEntityExtended.d.ts.map +1 -1
  12. package/dist/custom/Permissions/MJCollectionPermissionEntityExtended.js +4 -2
  13. package/dist/custom/Permissions/MJCollectionPermissionEntityExtended.js.map +1 -1
  14. package/dist/engines/UserInfoEngine.d.ts +13 -0
  15. package/dist/engines/UserInfoEngine.d.ts.map +1 -1
  16. package/dist/engines/UserInfoEngine.js +23 -5
  17. package/dist/engines/UserInfoEngine.js.map +1 -1
  18. package/dist/engines/artifacts.d.ts +87 -12
  19. package/dist/engines/artifacts.d.ts.map +1 -1
  20. package/dist/engines/artifacts.js +140 -35
  21. package/dist/engines/artifacts.js.map +1 -1
  22. package/dist/engines/knowledgeHubMetadata.d.ts +26 -4
  23. package/dist/engines/knowledgeHubMetadata.d.ts.map +1 -1
  24. package/dist/engines/knowledgeHubMetadata.js +70 -16
  25. package/dist/engines/knowledgeHubMetadata.js.map +1 -1
  26. package/dist/generated/entity_subclasses.d.ts +1202 -78
  27. package/dist/generated/entity_subclasses.d.ts.map +1 -1
  28. package/dist/generated/entity_subclasses.js +1521 -243
  29. package/dist/generated/entity_subclasses.js.map +1 -1
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +1 -0
  33. package/dist/index.js.map +1 -1
  34. package/package.json +6 -6
@@ -6389,12 +6389,6 @@ export const MJAIPromptRunSchema = z.object({
6389
6389
  * * Display Name: Execution Order
6390
6390
  * * SQL Data Type: int
6391
6391
  * * Description: Execution order for parallel child runs and result selector runs. Used to track the sequence of execution within a parallel run group. NULL for single runs and parallel parent runs.`),
6392
- AgentRunID: z.string().nullable().describe(`
6393
- * * Field Name: AgentRunID
6394
- * * Display Name: Agent Run
6395
- * * SQL Data Type: uniqueidentifier
6396
- * * Related Entity/Foreign Key: MJ: AI Agent Runs (vwAIAgentRuns.ID)
6397
- * * Description: Optional reference to the AIAgentRun that initiated this prompt execution. Links prompt runs to their parent agent runs for comprehensive execution tracking.`),
6398
6392
  Cost: z.number().nullable().describe(`
6399
6393
  * * Field Name: Cost
6400
6394
  * * Display Name: Cost
@@ -6772,10 +6766,6 @@ export const MJAIPromptRunSchema = z.object({
6772
6766
  * * Field Name: Parent
6773
6767
  * * Display Name: Parent
6774
6768
  * * SQL Data Type: nvarchar(255)`),
6775
- AgentRun: z.string().nullable().describe(`
6776
- * * Field Name: AgentRun
6777
- * * Display Name: Agent Run
6778
- * * SQL Data Type: nvarchar(255)`),
6779
6769
  OriginalModel: z.string().nullable().describe(`
6780
6770
  * * Field Name: OriginalModel
6781
6771
  * * Display Name: Original Model
@@ -7567,6 +7557,77 @@ export const MJAISkillPermissionSchema = z.object({
7567
7557
  * * Display Name: User
7568
7558
  * * SQL Data Type: nvarchar(100)`),
7569
7559
  });
7560
+ /**
7561
+ * zod schema definition for the entity MJ: AI Skill Search Scopes
7562
+ */
7563
+ export const MJAISkillSearchScopeSchema = z.object({
7564
+ ID: z.string().describe(`
7565
+ * * Field Name: ID
7566
+ * * Display Name: ID
7567
+ * * SQL Data Type: uniqueidentifier
7568
+ * * Default Value: newsequentialid()`),
7569
+ SkillID: z.string().describe(`
7570
+ * * Field Name: SkillID
7571
+ * * Display Name: Skill ID
7572
+ * * SQL Data Type: uniqueidentifier
7573
+ * * Related Entity/Foreign Key: MJ: AI Skills (vwAISkills.ID)
7574
+ * * Description: The skill this grant belongs to.`),
7575
+ SearchScopeID: z.string().describe(`
7576
+ * * Field Name: SearchScopeID
7577
+ * * Display Name: Search Scope ID
7578
+ * * SQL Data Type: uniqueidentifier
7579
+ * * Related Entity/Foreign Key: MJ: Search Scopes (vwSearchScopes.ID)
7580
+ * * Description: The Search Scope this skill may reach.`),
7581
+ Status: z.union([z.literal('Active'), z.literal('Inactive')]).describe(`
7582
+ * * Field Name: Status
7583
+ * * Display Name: Status
7584
+ * * SQL Data Type: nvarchar(20)
7585
+ * * Default Value: Active
7586
+ * * Value List Type: List
7587
+ * * Possible Values
7588
+ * * Active
7589
+ * * Inactive
7590
+ * * Description: Active or Inactive. Inactive rows are ignored during resolution.`),
7591
+ StartAt: z.date().nullable().describe(`
7592
+ * * Field Name: StartAt
7593
+ * * Display Name: Start At
7594
+ * * SQL Data Type: datetimeoffset
7595
+ * * Description: Optional start of the window in which this grant is honoured. NULL = no lower bound. Evaluated against the current time on every resolution, so a window opening or closing needs no cache invalidation.`),
7596
+ EndAt: z.date().nullable().describe(`
7597
+ * * Field Name: EndAt
7598
+ * * Display Name: End At
7599
+ * * SQL Data Type: datetimeoffset
7600
+ * * Description: Optional end of the window in which this grant is honoured. NULL = no upper bound.`),
7601
+ Priority: z.number().nullable().describe(`
7602
+ * * Field Name: Priority
7603
+ * * Display Name: Priority
7604
+ * * SQL Data Type: int
7605
+ * * Description: Lower numbers win when several granted scopes are candidates and none is marked IsDefault.`),
7606
+ IsDefault: z.boolean().describe(`
7607
+ * * Field Name: IsDefault
7608
+ * * Display Name: Is Default
7609
+ * * SQL Data Type: bit
7610
+ * * Default Value: 0
7611
+ * * Description: When set, this scope is chosen for the skill ahead of Priority ordering.`),
7612
+ __mj_CreatedAt: z.date().describe(`
7613
+ * * Field Name: __mj_CreatedAt
7614
+ * * Display Name: Created At
7615
+ * * SQL Data Type: datetimeoffset
7616
+ * * Default Value: getutcdate()`),
7617
+ __mj_UpdatedAt: z.date().describe(`
7618
+ * * Field Name: __mj_UpdatedAt
7619
+ * * Display Name: Updated At
7620
+ * * SQL Data Type: datetimeoffset
7621
+ * * Default Value: getutcdate()`),
7622
+ Skill: z.string().describe(`
7623
+ * * Field Name: Skill
7624
+ * * Display Name: Skill
7625
+ * * SQL Data Type: nvarchar(255)`),
7626
+ SearchScope: z.string().describe(`
7627
+ * * Field Name: SearchScope
7628
+ * * Display Name: Search Scope
7629
+ * * SQL Data Type: nvarchar(200)`),
7630
+ });
7570
7631
  /**
7571
7632
  * zod schema definition for the entity MJ: AI Skill Sub Agents
7572
7633
  */
@@ -7683,6 +7744,16 @@ export const MJAISkillSchema = z.object({
7683
7744
  * * Auto
7684
7745
  * * RequestedOnly
7685
7746
  * * Description: Controls whether this skill may ever be self-activated by an agent. Auto: the skill may appear in accepting agents' prompt catalogs and be activated mid-run on agent judgment — but only for agents whose own SkillActivationMode is also Auto (double gate). RequestedOnly (default): the skill is excluded from prompt catalogs entirely and can only be activated when the user explicitly requests it for the run (a /skill mention flowing through ExecuteAgentParams.requestedSkillIDs). All other activation gates (AcceptsSkills, skill Status, per-agent assignment, user Run permission) apply unchanged in both modes.`),
7747
+ SearchScopeAccess: z.union([z.literal('All'), z.literal('Assigned'), z.literal('None')]).nullable().describe(`
7748
+ * * Field Name: SearchScopeAccess
7749
+ * * Display Name: Search Scope Access
7750
+ * * SQL Data Type: nvarchar(20)
7751
+ * * Value List Type: List
7752
+ * * Possible Values
7753
+ * * All
7754
+ * * Assigned
7755
+ * * None
7756
+ * * Description: Which Search Scopes this skill may reach when activated. None = grants no retrieval scope; Assigned = only scopes listed in AISkillSearchScope; All = any active scope. NULL behaves as None so existing skills are unaffected. Mirrors AIAgent.SearchScopeAccess so a skill and an agent are interchangeable principals to SearchScopePermissionResolver.`),
7686
7757
  CreatedByUser: z.string().describe(`
7687
7758
  * * Field Name: CreatedByUser
7688
7759
  * * Display Name: Created By User
@@ -11610,6 +11681,172 @@ export const MJContentItemAttributeSchema = z.object({
11610
11681
  * * Display Name: Content Item
11611
11682
  * * SQL Data Type: nvarchar(250)`),
11612
11683
  });
11684
+ /**
11685
+ * zod schema definition for the entity MJ: Content Item Chunks
11686
+ */
11687
+ export const MJContentItemChunkSchema = z.object({
11688
+ ID: z.string().describe(`
11689
+ * * Field Name: ID
11690
+ * * Display Name: ID
11691
+ * * SQL Data Type: uniqueidentifier
11692
+ * * Default Value: newsequentialid()`),
11693
+ ContentItemID: z.string().describe(`
11694
+ * * Field Name: ContentItemID
11695
+ * * Display Name: Content Item
11696
+ * * SQL Data Type: uniqueidentifier
11697
+ * * Related Entity/Foreign Key: MJ: Content Items (vwContentItems.ID)`),
11698
+ Sequence: z.number().describe(`
11699
+ * * Field Name: Sequence
11700
+ * * Display Name: Sequence
11701
+ * * SQL Data Type: int
11702
+ * * Description: Zero-based ordinal position of this chunk within the parent Content Item, preserving the original order in which the text was split.`),
11703
+ Text: z.string().nullable().describe(`
11704
+ * * Field Name: Text
11705
+ * * Display Name: Text
11706
+ * * SQL Data Type: nvarchar(MAX)
11707
+ * * Description: The chunk of extracted text (from the parent Content Item) that was embedded to produce this chunk's vector. NULL for media-only segments (for example an image, or a video window with no transcript), where the embedded payload is the media itself and any readable representation lives in Description/Transcript.`),
11708
+ VectorRecordID: z.string().nullable().describe(`
11709
+ * * Field Name: VectorRecordID
11710
+ * * Display Name: Vector Record ID
11711
+ * * SQL Data Type: nvarchar(100)
11712
+ * * Description: The identifier of this chunk's vector record in the vector database (e.g. Pinecone) — the deterministic key MemberJunction assigns and upserts the chunk's embedding under. Provides traceability from the chunk back to its stored vector.`),
11713
+ EmbeddingStatus: z.union([z.literal('Active'), z.literal('Complete'), z.literal('Failed'), z.literal('Pending'), z.literal('Processed'), z.literal('Processing'), z.literal('Skipped')]).describe(`
11714
+ * * Field Name: EmbeddingStatus
11715
+ * * Display Name: Embedding Status
11716
+ * * SQL Data Type: nvarchar(20)
11717
+ * * Default Value: Pending
11718
+ * * Value List Type: List
11719
+ * * Possible Values
11720
+ * * Active
11721
+ * * Complete
11722
+ * * Failed
11723
+ * * Pending
11724
+ * * Processed
11725
+ * * Processing
11726
+ * * Skipped
11727
+ * * Description: Embedding lifecycle state of this chunk: Pending (default), Processing, Active, Complete, Processed, Failed, or Skipped.`),
11728
+ TaggingStatus: z.union([z.literal('Active'), z.literal('Complete'), z.literal('Failed'), z.literal('Pending'), z.literal('Processed'), z.literal('Processing'), z.literal('Skipped')]).describe(`
11729
+ * * Field Name: TaggingStatus
11730
+ * * Display Name: Tagging Status
11731
+ * * SQL Data Type: nvarchar(20)
11732
+ * * Default Value: Pending
11733
+ * * Value List Type: List
11734
+ * * Possible Values
11735
+ * * Active
11736
+ * * Complete
11737
+ * * Failed
11738
+ * * Pending
11739
+ * * Processed
11740
+ * * Processing
11741
+ * * Skipped
11742
+ * * Description: Tagging lifecycle state of this chunk: Pending (default), Processing, Active, Complete, Processed, Failed, or Skipped.`),
11743
+ DeleteStatus: z.union([z.literal('Deleted'), z.literal('Pending')]).nullable().describe(`
11744
+ * * Field Name: DeleteStatus
11745
+ * * Display Name: Delete Status
11746
+ * * SQL Data Type: nvarchar(20)
11747
+ * * Value List Type: List
11748
+ * * Possible Values
11749
+ * * Deleted
11750
+ * * Pending
11751
+ * * Description: Deletion lifecycle state of this chunk's vector: NULL when not slated for deletion, Pending when vector removal is queued, or Deleted once the vector has been removed from the vector database.`),
11752
+ LastEmbeddedAt: z.date().nullable().describe(`
11753
+ * * Field Name: LastEmbeddedAt
11754
+ * * Display Name: Last Embedded At
11755
+ * * SQL Data Type: datetimeoffset
11756
+ * * Description: Timestamp of the last successful embedding of this chunk.`),
11757
+ LastTaggedAt: z.date().nullable().describe(`
11758
+ * * Field Name: LastTaggedAt
11759
+ * * Display Name: Last Tagged At
11760
+ * * SQL Data Type: datetimeoffset
11761
+ * * Description: Timestamp of the last successful tagging of this chunk.`),
11762
+ LastDeletedAt: z.date().nullable().describe(`
11763
+ * * Field Name: LastDeletedAt
11764
+ * * Display Name: Last Deleted At
11765
+ * * SQL Data Type: datetimeoffset
11766
+ * * Description: Timestamp of the last successful deletion of this chunk's vector from the vector database.`),
11767
+ __mj_CreatedAt: z.date().describe(`
11768
+ * * Field Name: __mj_CreatedAt
11769
+ * * Display Name: Created At
11770
+ * * SQL Data Type: datetimeoffset
11771
+ * * Default Value: getutcdate()`),
11772
+ __mj_UpdatedAt: z.date().describe(`
11773
+ * * Field Name: __mj_UpdatedAt
11774
+ * * Display Name: Updated At
11775
+ * * SQL Data Type: datetimeoffset
11776
+ * * Default Value: getutcdate()`),
11777
+ Modality: z.union([z.literal('audio'), z.literal('image'), z.literal('multimodal'), z.literal('text'), z.literal('video')]).describe(`
11778
+ * * Field Name: Modality
11779
+ * * Display Name: Modality
11780
+ * * SQL Data Type: nvarchar(20)
11781
+ * * Default Value: text
11782
+ * * Value List Type: List
11783
+ * * Possible Values
11784
+ * * audio
11785
+ * * image
11786
+ * * multimodal
11787
+ * * text
11788
+ * * video
11789
+ * * Description: The modality of this chunk's embedded payload: text (default), image, audio, video, or multimodal (text and media fused into a single vector). Determines which vector index the chunk's embedding belongs to, since a multimodal embedding model produces vectors of a different dimension than a text model, and is used at retrieval time to merge results per modality rather than taking a single global top-k.`),
11790
+ StartOffset: z.number().nullable().describe(`
11791
+ * * Field Name: StartOffset
11792
+ * * Display Name: Start Offset
11793
+ * * SQL Data Type: int
11794
+ * * Description: Inclusive character offset where this chunk begins within the parent Content Item's extracted text. Together with EndOffset this is the provenance link that resolves a search hit back to the exact passage in the source document. NULL for media segments, which are positioned by StartMs/EndMs instead.`),
11795
+ EndOffset: z.number().nullable().describe(`
11796
+ * * Field Name: EndOffset
11797
+ * * Display Name: End Offset
11798
+ * * SQL Data Type: int
11799
+ * * Description: Exclusive character offset where this chunk ends within the parent Content Item's extracted text. See StartOffset. NULL for media segments.`),
11800
+ StartMs: z.number().nullable().describe(`
11801
+ * * Field Name: StartMs
11802
+ * * Display Name: Start (ms)
11803
+ * * SQL Data Type: int
11804
+ * * Description: Start of this chunk's time window, in milliseconds from the beginning of the parent audio or video asset. Set by transcript- or window-based segmentation; enables time-windowed playback deep-links from a search result (for example 14:22-15:05 of a session recording). NULL for text segments.`),
11805
+ EndMs: z.number().nullable().describe(`
11806
+ * * Field Name: EndMs
11807
+ * * Display Name: End (ms)
11808
+ * * SQL Data Type: int
11809
+ * * Description: End of this chunk's time window, in milliseconds from the beginning of the parent audio or video asset. See StartMs. NULL for text segments.`),
11810
+ PageNumber: z.number().nullable().describe(`
11811
+ * * Field Name: PageNumber
11812
+ * * Display Name: Page Number
11813
+ * * SQL Data Type: int
11814
+ * * Description: One-based page number this chunk came from, for paginated sources such as PDFs or slide decks. Provides citation-grade provenance alongside the character offsets. NULL when the source is not paginated.`),
11815
+ SegmentTitle: z.string().nullable().describe(`
11816
+ * * Field Name: SegmentTitle
11817
+ * * Display Name: Segment Title
11818
+ * * SQL Data Type: nvarchar(500)
11819
+ * * Description: Human-readable label for this segment — a document heading for structure-based segmentation, or a generated chapter title for topic- and transcript-based segmentation. Displayed with search results and prepended to the embedded text so a chunk's vector carries its own topic.`),
11820
+ Description: z.string().nullable().describe(`
11821
+ * * Field Name: Description
11822
+ * * Display Name: Description
11823
+ * * SQL Data Type: nvarchar(MAX)
11824
+ * * Description: An AI-generated description of this chunk's content, primarily for non-text segments. Retrieval of a media chunk otherwise yields only a pointer (an asset and a time window) that an agent cannot reason over; this column is the readable representation that an agent reads, a cross-encoder reranks, and lexical search matches. A short summary of it may be mirrored into the vector record's metadata for display and filtering, but the full text belongs here.`),
11825
+ Transcript: z.string().nullable().describe(`
11826
+ * * Field Name: Transcript
11827
+ * * Display Name: Transcript
11828
+ * * SQL Data Type: nvarchar(MAX)
11829
+ * * Description: The verbatim transcript covering this chunk's time window, for audio and video segments, including speaker labels where the source provides them. Distinct from Description, which is a generated summary: this is what was actually said, and it is what makes a recording findable by lexical search.`),
11830
+ SegmenterKey: z.string().nullable().describe(`
11831
+ * * Field Name: SegmenterKey
11832
+ * * Display Name: Segmenter Key
11833
+ * * SQL Data Type: nvarchar(100)
11834
+ * * Description: Registration key of the segmentation strategy that produced this chunk (for example StructuralText, SemanticText, Transcript, or FixedWindow). Provenance: when a Content Source's configured strategy changes, this identifies which chunks were produced by the previous strategy and therefore need re-chunking.`),
11835
+ ParentChunkID: z.string().nullable().describe(`
11836
+ * * Field Name: ParentChunkID
11837
+ * * Display Name: Parent Chunk
11838
+ * * SQL Data Type: uniqueidentifier
11839
+ * * Related Entity/Foreign Key: MJ: Content Item Chunks (vwContentItemChunks.ID)
11840
+ * * Description: Optional self-reference to another chunk of the same Content Item that is the parent of this one, expressing a chapter to sub-chapter hierarchy — for example a five-minute chapter of a recording and the individual speaker turns within it, or a document section and its subsections. NULL for top-level segments.`),
11841
+ ContentItem: z.string().nullable().describe(`
11842
+ * * Field Name: ContentItem
11843
+ * * Display Name: Content Item
11844
+ * * SQL Data Type: nvarchar(250)`),
11845
+ RootParentChunkID: z.string().nullable().describe(`
11846
+ * * Field Name: RootParentChunkID
11847
+ * * Display Name: Root Parent Chunk
11848
+ * * SQL Data Type: uniqueidentifier`),
11849
+ });
11613
11850
  /**
11614
11851
  * zod schema definition for the entity MJ: Content Item Duplicates
11615
11852
  */
@@ -11777,7 +12014,7 @@ export const MJContentItemSchema = z.object({
11777
12014
  * * Default Value: newsequentialid()`),
11778
12015
  ContentSourceID: z.string().describe(`
11779
12016
  * * Field Name: ContentSourceID
11780
- * * Display Name: Content Source ID
12017
+ * * Display Name: Content Source
11781
12018
  * * SQL Data Type: uniqueidentifier
11782
12019
  * * Related Entity/Foreign Key: MJ: Content Sources (vwContentSources.ID)`),
11783
12020
  Name: z.string().nullable().describe(`
@@ -11790,17 +12027,17 @@ export const MJContentItemSchema = z.object({
11790
12027
  * * SQL Data Type: nvarchar(MAX)`),
11791
12028
  ContentTypeID: z.string().describe(`
11792
12029
  * * Field Name: ContentTypeID
11793
- * * Display Name: Content Type ID
12030
+ * * Display Name: Content Type
11794
12031
  * * SQL Data Type: uniqueidentifier
11795
12032
  * * Related Entity/Foreign Key: MJ: Content Types (vwContentTypes.ID)`),
11796
12033
  ContentSourceTypeID: z.string().describe(`
11797
12034
  * * Field Name: ContentSourceTypeID
11798
- * * Display Name: Content Source Type ID
12035
+ * * Display Name: Content Source Type
11799
12036
  * * SQL Data Type: uniqueidentifier
11800
12037
  * * Related Entity/Foreign Key: MJ: Content Source Types (vwContentSourceTypes.ID)`),
11801
12038
  ContentFileTypeID: z.string().describe(`
11802
12039
  * * Field Name: ContentFileTypeID
11803
- * * Display Name: Content File Type ID
12040
+ * * Display Name: Content File Type
11804
12041
  * * SQL Data Type: uniqueidentifier
11805
12042
  * * Related Entity/Foreign Key: MJ: Content File Types (vwContentFileTypes.ID)`),
11806
12043
  Checksum: z.string().nullable().describe(`
@@ -11815,7 +12052,7 @@ export const MJContentItemSchema = z.object({
11815
12052
  * * Description: The source location URL where this content was retrieved from.`),
11816
12053
  Text: z.string().nullable().describe(`
11817
12054
  * * Field Name: Text
11818
- * * Display Name: Text
12055
+ * * Display Name: Extracted Text
11819
12056
  * * SQL Data Type: nvarchar(MAX)
11820
12057
  * * Description: The extracted text content from the source document or file.`),
11821
12058
  __mj_CreatedAt: z.date().describe(`
@@ -11830,7 +12067,7 @@ export const MJContentItemSchema = z.object({
11830
12067
  * * Default Value: getutcdate()`),
11831
12068
  EntityRecordDocumentID: z.string().nullable().describe(`
11832
12069
  * * Field Name: EntityRecordDocumentID
11833
- * * Display Name: Entity Record Document ID
12070
+ * * Display Name: Entity Record Document
11834
12071
  * * SQL Data Type: uniqueidentifier
11835
12072
  * * Related Entity/Foreign Key: MJ: Entity Record Documents (vwEntityRecordDocuments.ID)
11836
12073
  * * Description: For entity-sourced content items, links to the Entity Record Document snapshot that was rendered for this item. Provides traceability back to the source entity record via ERD.EntityID + ERD.RecordID. NULL for non-entity sources.`),
@@ -11854,7 +12091,7 @@ export const MJContentItemSchema = z.object({
11854
12091
  * * Description: Timestamp of the most recent successful embedding for this content item.`),
11855
12092
  EmbeddingModelID: z.string().nullable().describe(`
11856
12093
  * * Field Name: EmbeddingModelID
11857
- * * Display Name: Embedding Model ID
12094
+ * * Display Name: Embedding Model
11858
12095
  * * SQL Data Type: uniqueidentifier
11859
12096
  * * Related Entity/Foreign Key: MJ: AI Models (vwAIModels.ID)
11860
12097
  * * Description: The AI model used to generate the most recent embedding for this content item.`),
@@ -11876,30 +12113,54 @@ export const MJContentItemSchema = z.object({
11876
12113
  * * Display Name: Last Tagged At
11877
12114
  * * SQL Data Type: datetimeoffset
11878
12115
  * * Description: Timestamp of the most recent successful autotagging run for this content item.`),
12116
+ VectorRecordID: z.string().nullable().describe(`
12117
+ * * Field Name: VectorRecordID
12118
+ * * Display Name: Vector Record ID
12119
+ * * SQL Data Type: nvarchar(100)
12120
+ * * Description: The identifier of this Content Item's vector record in the vector database (e.g. Pinecone) — the deterministic key MemberJunction assigns and upserts the embedding under when the item is embedded as a single vector. Provides traceability from the Content Item back to its stored vector. For chunked items, per-chunk identifiers are tracked on the ContentItemChunk entity instead.`),
12121
+ ParentID: z.string().nullable().describe(`
12122
+ * * Field Name: ParentID
12123
+ * * Display Name: Parent Content
12124
+ * * SQL Data Type: uniqueidentifier
12125
+ * * Related Entity/Foreign Key: MJ: Content Items (vwContentItems.ID)
12126
+ * * Description: Optional self-reference to another Content Item that is the parent of this one, enabling a content-item hierarchy (e.g. a document and its sub-pages, or a site and its crawled pages). NULL for top-level items.`),
12127
+ DisplayLink: z.string().nullable().describe(`
12128
+ * * Field Name: DisplayLink
12129
+ * * Display Name: Display Link
12130
+ * * SQL Data Type: nvarchar(2000)
12131
+ * * Description: Optional display/clickable URL for this Content Item (e.g. a canonical or human-facing link), distinct from the source URL used for ingestion.`),
11879
12132
  ContentSource: z.string().nullable().describe(`
11880
12133
  * * Field Name: ContentSource
11881
- * * Display Name: Content Source
12134
+ * * Display Name: Content Source Name
11882
12135
  * * SQL Data Type: nvarchar(255)`),
11883
12136
  ContentType: z.string().describe(`
11884
12137
  * * Field Name: ContentType
11885
- * * Display Name: Content Type
12138
+ * * Display Name: Content Type Name
11886
12139
  * * SQL Data Type: nvarchar(255)`),
11887
12140
  ContentSourceType: z.string().describe(`
11888
12141
  * * Field Name: ContentSourceType
11889
- * * Display Name: Content Source Type
12142
+ * * Display Name: Content Source Type Name
11890
12143
  * * SQL Data Type: nvarchar(255)`),
11891
12144
  ContentFileType: z.string().describe(`
11892
12145
  * * Field Name: ContentFileType
11893
- * * Display Name: Content File Type
12146
+ * * Display Name: Content File Type Name
11894
12147
  * * SQL Data Type: nvarchar(255)`),
11895
12148
  EntityRecordDocument: z.string().nullable().describe(`
11896
12149
  * * Field Name: EntityRecordDocument
11897
- * * Display Name: Entity Record Document
12150
+ * * Display Name: Entity Record Document Name
11898
12151
  * * SQL Data Type: nvarchar(450)`),
11899
12152
  EmbeddingModel: z.string().nullable().describe(`
11900
12153
  * * Field Name: EmbeddingModel
11901
- * * Display Name: Embedding Model
12154
+ * * Display Name: Embedding Model Name
11902
12155
  * * SQL Data Type: nvarchar(50)`),
12156
+ Parent: z.string().nullable().describe(`
12157
+ * * Field Name: Parent
12158
+ * * Display Name: Parent Content Name
12159
+ * * SQL Data Type: nvarchar(250)`),
12160
+ RootParentID: z.string().nullable().describe(`
12161
+ * * Field Name: RootParentID
12162
+ * * Display Name: Root Parent Content
12163
+ * * SQL Data Type: uniqueidentifier`),
11903
12164
  });
11904
12165
  /**
11905
12166
  * zod schema definition for the entity MJ: Content Process Run Details
@@ -12352,37 +12613,47 @@ export const MJContentSourceSchema = z.object({
12352
12613
  * * SQL Data Type: uniqueidentifier
12353
12614
  * * Related Entity/Foreign Key: MJ: Scheduled Actions (vwScheduledActions.ID)
12354
12615
  * * Description: Optional link to a MJ Scheduled Action that automatically runs the classification pipeline for this source on a cron schedule.`),
12616
+ SegmenterKey: z.string().nullable().describe(`
12617
+ * * Field Name: SegmenterKey
12618
+ * * Display Name: Segmenter Strategy
12619
+ * * SQL Data Type: nvarchar(100)
12620
+ * * Description: Registration key of the segmentation strategy used to split this source's content into embeddable chunks — for example StructuralText (document headings), AdaptiveBoundary (target size closing on the nearest natural break), SemanticText (LLM-detected topic boundaries), Transcript (audio/video chapters), PagedContent (one segment per page), or FixedWindow (uniform windows). NULL falls back to the Content Type's value, then to a built-in default.`),
12621
+ CleanerKey: z.string().nullable().describe(`
12622
+ * * Field Name: CleanerKey
12623
+ * * Display Name: Cleaner Strategy
12624
+ * * SQL Data Type: nvarchar(100)
12625
+ * * Description: Registration key of the content-cleaning strategy applied to this source before segmentation — for example Html (CSS-selector-driven extraction that drops navigation, sidebars, and advertising) or PlainText (whitespace normalization only). Cleaning is separate from segmentation because the two change for different reasons: a new site template needs new selectors, not a new chunking strategy. NULL falls back to the Content Type's value, then to a default inferred from the content's mime type.`),
12355
12626
  ContentType: z.string().describe(`
12356
12627
  * * Field Name: ContentType
12357
- * * Display Name: Content Type
12628
+ * * Display Name: Content Type Name
12358
12629
  * * SQL Data Type: nvarchar(255)`),
12359
12630
  ContentSourceType: z.string().describe(`
12360
12631
  * * Field Name: ContentSourceType
12361
- * * Display Name: Content Source Type
12632
+ * * Display Name: Content Source Type Name
12362
12633
  * * SQL Data Type: nvarchar(255)`),
12363
12634
  ContentFileType: z.string().describe(`
12364
12635
  * * Field Name: ContentFileType
12365
- * * Display Name: Content File Type
12636
+ * * Display Name: Content File Type Name
12366
12637
  * * SQL Data Type: nvarchar(255)`),
12367
12638
  EmbeddingModel: z.string().nullable().describe(`
12368
12639
  * * Field Name: EmbeddingModel
12369
- * * Display Name: Embedding Model
12640
+ * * Display Name: Embedding Model Name
12370
12641
  * * SQL Data Type: nvarchar(50)`),
12371
12642
  VectorIndex: z.string().nullable().describe(`
12372
12643
  * * Field Name: VectorIndex
12373
- * * Display Name: Vector Index
12644
+ * * Display Name: Vector Index Name
12374
12645
  * * SQL Data Type: nvarchar(255)`),
12375
12646
  Entity: z.string().nullable().describe(`
12376
12647
  * * Field Name: Entity
12377
- * * Display Name: Entity
12648
+ * * Display Name: Entity Name
12378
12649
  * * SQL Data Type: nvarchar(255)`),
12379
12650
  EntityDocument: z.string().nullable().describe(`
12380
12651
  * * Field Name: EntityDocument
12381
- * * Display Name: Entity Document
12652
+ * * Display Name: Entity Document Name
12382
12653
  * * SQL Data Type: nvarchar(250)`),
12383
12654
  ScheduledAction: z.string().nullable().describe(`
12384
12655
  * * Field Name: ScheduledAction
12385
- * * Display Name: Scheduled Action
12656
+ * * Display Name: Scheduled Action Name
12386
12657
  * * SQL Data Type: nvarchar(255)`),
12387
12658
  });
12388
12659
  /**
@@ -12483,6 +12754,16 @@ export const MJContentTypeSchema = z.object({
12483
12754
  * * SQL Data Type: nvarchar(MAX)
12484
12755
  * * JSON Type: MJContentTypeEntity_IContentTypeConfiguration
12485
12756
  * * Description: JSON configuration blob for content-type-level settings. Conforms to the IContentTypeConfiguration interface. Reserved for future type-wide settings such as default tag taxonomy rules and processing options.`),
12757
+ SegmenterKey: z.string().nullable().describe(`
12758
+ * * Field Name: SegmenterKey
12759
+ * * Display Name: Segmenter Strategy
12760
+ * * SQL Data Type: nvarchar(100)
12761
+ * * Description: Default segmentation strategy for content of this type, used when a Content Source does not specify its own SegmenterKey. See ContentSource.SegmenterKey for the available strategies.`),
12762
+ CleanerKey: z.string().nullable().describe(`
12763
+ * * Field Name: CleanerKey
12764
+ * * Display Name: Cleaner Strategy
12765
+ * * SQL Data Type: nvarchar(100)
12766
+ * * Description: Default content-cleaning strategy for content of this type, used when a Content Source does not specify its own CleanerKey. See ContentSource.CleanerKey.`),
12486
12767
  AIModel: z.string().describe(`
12487
12768
  * * Field Name: AIModel
12488
12769
  * * Display Name: AI Model Name
@@ -12657,6 +12938,46 @@ export const MJConversationArtifactSchema = z.object({
12657
12938
  * * Display Name: Artifact Type
12658
12939
  * * SQL Data Type: nvarchar(100)`),
12659
12940
  });
12941
+ /**
12942
+ * zod schema definition for the entity MJ: Conversation Compaction Runs
12943
+ */
12944
+ export const MJConversationCompactionRunSchema = z.object({
12945
+ ID: z.string().describe(`
12946
+ * * Field Name: ID
12947
+ * * Display Name: ID
12948
+ * * SQL Data Type: uniqueidentifier
12949
+ * * Default Value: newsequentialid()`),
12950
+ ConversationDetailID: z.string().describe(`
12951
+ * * Field Name: ConversationDetailID
12952
+ * * Display Name: Conversation Detail
12953
+ * * SQL Data Type: uniqueidentifier
12954
+ * * Related Entity/Foreign Key: MJ: Conversation Details (vwConversationDetails.ID)
12955
+ * * Description: The conversation detail row whose SummaryOfEarlierConversation was produced by this compaction run.`),
12956
+ PromptRunID: z.string().describe(`
12957
+ * * Field Name: PromptRunID
12958
+ * * Display Name: Prompt Run
12959
+ * * SQL Data Type: uniqueidentifier
12960
+ * * Related Entity/Foreign Key: MJ: AI Prompt Runs (vwAIPromptRuns.ID)
12961
+ * * Description: The AI Prompt Run that generated the compaction summary (model, tokens, cost, prompt version).`),
12962
+ __mj_CreatedAt: z.date().describe(`
12963
+ * * Field Name: __mj_CreatedAt
12964
+ * * Display Name: Created At
12965
+ * * SQL Data Type: datetimeoffset
12966
+ * * Default Value: getutcdate()`),
12967
+ __mj_UpdatedAt: z.date().describe(`
12968
+ * * Field Name: __mj_UpdatedAt
12969
+ * * Display Name: Updated At
12970
+ * * SQL Data Type: datetimeoffset
12971
+ * * Default Value: getutcdate()`),
12972
+ ConversationDetail: z.string().nullable().describe(`
12973
+ * * Field Name: ConversationDetail
12974
+ * * Display Name: Conversation Detail Name
12975
+ * * SQL Data Type: nvarchar(100)`),
12976
+ PromptRun: z.string().nullable().describe(`
12977
+ * * Field Name: PromptRun
12978
+ * * Display Name: Prompt Run Name
12979
+ * * SQL Data Type: nvarchar(255)`),
12980
+ });
12660
12981
  /**
12661
12982
  * zod schema definition for the entity MJ: Conversation Detail Artifacts
12662
12983
  */
@@ -13064,12 +13385,6 @@ export const MJConversationDetailSchema = z.object({
13064
13385
  * * SQL Data Type: int
13065
13386
  * * Default Value: 0
13066
13387
  * * Description: Monotonic, per-conversation ordinal assigned on insert (1-based). Provides a stable symbolic handle used by conversation-history retrieval tools and by the sequence markers embedded in compaction summaries. A summary stored in SummaryOfEarlierConversation on a given row covers all rows with a lower Sequence in the same conversation.`),
13067
- SummaryPromptRunID: z.string().nullable().describe(`
13068
- * * Field Name: SummaryPromptRunID
13069
- * * Display Name: Summary Prompt Run
13070
- * * SQL Data Type: uniqueidentifier
13071
- * * Related Entity/Foreign Key: MJ: AI Prompt Runs (vwAIPromptRuns.ID)
13072
- * * Description: When SummaryOfEarlierConversation is populated by a cross-turn compaction, this links to the AIPromptRun that produced it (model, tokens, cost, prompt version). Null for ordinary (non-summary) rows.`),
13073
13388
  Conversation: z.string().nullable().describe(`
13074
13389
  * * Field Name: Conversation
13075
13390
  * * Display Name: Conversation
@@ -13098,10 +13413,6 @@ export const MJConversationDetailSchema = z.object({
13098
13413
  * * Field Name: TestRun
13099
13414
  * * Display Name: Test Run
13100
13415
  * * SQL Data Type: nvarchar(255)`),
13101
- SummaryPromptRun: z.string().nullable().describe(`
13102
- * * Field Name: SummaryPromptRun
13103
- * * Display Name: Summary Prompt Run
13104
- * * SQL Data Type: nvarchar(255)`),
13105
13416
  RootParentID: z.string().nullable().describe(`
13106
13417
  * * Field Name: RootParentID
13107
13418
  * * Display Name: Root Parent
@@ -26393,6 +26704,22 @@ export const MJSearchExecutionLogSchema = z.object({
26393
26704
  * * Display Name: Updated At
26394
26705
  * * SQL Data Type: datetimeoffset
26395
26706
  * * Default Value: getutcdate()`),
26707
+ AISkillID: z.string().nullable().describe(`
26708
+ * * Field Name: AISkillID
26709
+ * * Display Name: AI Skill ID
26710
+ * * SQL Data Type: uniqueidentifier
26711
+ * * Related Entity/Foreign Key: MJ: AI Skills (vwAISkills.ID)
26712
+ * * Description: The AI Skill on whose behalf this search ran, or NULL for a search with no active skill. Mirrors AIAgentID: since a skill is a search principal in its own right (AISkill.SearchScopeAccess plus MJ: AI Skill Search Scopes rows can reach a scope the user's own roles do not grant), the log must record which skill was active or the entitlement decision cannot be reconstructed.`),
26713
+ PrimaryScopeRecordID: z.string().nullable().describe(`
26714
+ * * Field Name: PrimaryScopeRecordID
26715
+ * * Display Name: Primary Scope Record ID
26716
+ * * SQL Data Type: uniqueidentifier
26717
+ * * Description: The tenant this search ran for, taken from SearchContext.PrimaryScopeRecordID. Lets a multi-tenant deployment partition, filter and retain search audit history per customer. NULL for untenanted searches. Named for the existing primary-scope concept rather than OrganizationID because a scope's primary scope may be a Company, Client or Practice.`),
26718
+ ScopeDecisionJSON: z.string().nullable().describe(`
26719
+ * * Field Name: ScopeDecisionJSON
26720
+ * * Display Name: Scope Decision JSON
26721
+ * * SQL Data Type: nvarchar(MAX)
26722
+ * * Description: Serialized ScopeExplanation recording WHY this search could reach what it reached: the entitlement decision and the grant that produced it, every dimension with its provenance (CallerSupplied / ServerDerived / Default / DiscardedCaller / Absent), and each lane's rendered filter with its active-or-skipped status and reason. Identical in shape to the value returned by SearchEngine.ExplainScope(), so the dry-run an administrator previews before running a search is the same structure the audit log stores afterwards. NULL when the engine did not capture a decision (older writers, or a failure before scope resolution).`),
26396
26723
  SearchScope: z.string().nullable().describe(`
26397
26724
  * * Field Name: SearchScope
26398
26725
  * * Display Name: Search Scope Name
@@ -26405,6 +26732,10 @@ export const MJSearchExecutionLogSchema = z.object({
26405
26732
  * * Field Name: AIAgent
26406
26733
  * * Display Name: AI Agent Name
26407
26734
  * * SQL Data Type: nvarchar(255)`),
26735
+ AISkill: z.string().nullable().describe(`
26736
+ * * Field Name: AISkill
26737
+ * * Display Name: AI Skill
26738
+ * * SQL Data Type: nvarchar(255)`),
26408
26739
  });
26409
26740
  /**
26410
26741
  * zod schema definition for the entity MJ: Search Providers
@@ -26538,6 +26869,11 @@ export const MJSearchScopeEntitySchema = z.object({
26538
26869
  * * Display Name: Updated At
26539
26870
  * * SQL Data Type: datetimeoffset
26540
26871
  * * Default Value: getutcdate()`),
26872
+ RequiredMetadataKeys: z.string().nullable().describe(`
26873
+ * * Field Name: RequiredMetadataKeys
26874
+ * * Display Name: Required Metadata Keys
26875
+ * * SQL Data Type: nvarchar(MAX)
26876
+ * * Description: JSON array of column or alias names the rendered ExtraFilter MUST reference for this lane to be considered safe, e.g. ["OrganizationID","ContentSourceID"]. Checked against the RENDERED filter at search time: if one is missing the lane is SKIPPED rather than queried, because a partially-rendered filter (an {% if %} clause dropped when its dimension was absent or discarded) is still valid SQL and silently widens the search. Same concept and same engine check as SearchScopeExternalIndex.RequiredMetadataKeys, applied to the SQL lane. NULL = no contract declared, which is the pre-migration behaviour.`),
26541
26877
  SearchScope: z.string().describe(`
26542
26878
  * * Field Name: SearchScope
26543
26879
  * * Display Name: Search Scope
@@ -26606,6 +26942,11 @@ export const MJSearchScopeExternalIndexSchema = z.object({
26606
26942
  * * Display Name: Updated At
26607
26943
  * * SQL Data Type: datetimeoffset
26608
26944
  * * Default Value: getutcdate()`),
26945
+ RequiredMetadataKeys: z.string().nullable().describe(`
26946
+ * * Field Name: RequiredMetadataKeys
26947
+ * * Display Name: Required Metadata Keys
26948
+ * * SQL Data Type: nvarchar(MAX)
26949
+ * * Description: JSON array of metadata key names the rendered MetadataFilter MUST constrain on for this lane to be considered safe, e.g. ["OrganizationID","ContentSourceID"]. Checked against the RENDERED filter at search time: if a key is missing the lane is SKIPPED rather than queried, because a partially-rendered filter silently widens the search. This also documents the ingest contract — these are the labels the writer must stamp on every document in the index, since a filter on a key that was never written either matches nothing or (on providers that ignore unknown keys) matches everything. NULL = no contract declared, which is the pre-migration behaviour.`),
26609
26950
  SearchScope: z.string().describe(`
26610
26951
  * * Field Name: SearchScope
26611
26952
  * * Display Name: Search Scope
@@ -26664,6 +27005,21 @@ export const MJSearchScopePermissionSchema = z.object({
26664
27005
  * * Display Name: Updated At
26665
27006
  * * SQL Data Type: datetimeoffset
26666
27007
  * * Default Value: getutcdate()`),
27008
+ StartAt: z.date().nullable().describe(`
27009
+ * * Field Name: StartAt
27010
+ * * Display Name: Start At
27011
+ * * SQL Data Type: datetimeoffset
27012
+ * * Description: Optional start of the window in which this grant applies. NULL = no lower bound. SearchScopePermission was the only member of this family without a time window, so temporary grants previously needed a bespoke mechanism.`),
27013
+ EndAt: z.date().nullable().describe(`
27014
+ * * Field Name: EndAt
27015
+ * * Display Name: End At
27016
+ * * SQL Data Type: datetimeoffset
27017
+ * * Description: Optional end of the window in which this grant applies. NULL = no upper bound.`),
27018
+ PrimaryScopeRecordID: z.string().nullable().describe(`
27019
+ * * Field Name: PrimaryScopeRecordID
27020
+ * * Display Name: Primary Scope Record ID
27021
+ * * SQL Data Type: uniqueidentifier
27022
+ * * Description: Optional tenant this grant is limited to, matched against SearchContext.PrimaryScopeRecordID at search time and type-checkable against the scope's own PrimaryScopeEntityID. NULL = applies to every tenant, which is the pre-migration behaviour for all existing rows. Deliberately NOT called OrganizationID: MJ is domain-agnostic and a scope's primary scope may be a Company, Client or Practice, so this reuses the existing primary-scope concept rather than inventing a parallel tenancy column.`),
26667
27023
  SearchScope: z.string().describe(`
26668
27024
  * * Field Name: SearchScope
26669
27025
  * * Display Name: Search Scope Name
@@ -41721,6 +42077,71 @@ let MJAIAgentTypeEntity = class MJAIAgentTypeEntity extends BaseEntity {
41721
42077
  return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
41722
42078
  }
41723
42079
  /**
42080
+ * Validate() method override for MJ: AI Agent Types entity. This is an auto-generated method that invokes the generated validators for this entity for the following fields:
42081
+ * * CompactionTargetPercent: The compaction target percentage must be a value between 1 and 100 percent.
42082
+ * * CompactionTriggerPercent: The compaction trigger percentage must be a value between 1 and 100 percent.
42083
+ * * ContextWindowMaxTokens: The maximum tokens for the context window must be a positive number greater than 0.
42084
+ * * Table-Level: The compaction target percentage must be less than the compaction trigger percentage to ensure that compaction successfully reduces the resource usage below the trigger threshold.
42085
+ * @public
42086
+ * @method
42087
+ * @override
42088
+ */
42089
+ Validate() {
42090
+ const result = super.Validate();
42091
+ this.ValidateCompactionTargetPercentRange(result);
42092
+ this.ValidateCompactionTriggerPercentRange(result);
42093
+ this.ValidateContextWindowMaxTokensGreaterThanZero(result);
42094
+ this.ValidateCompactionTargetPercentLessThanTriggerPercent(result);
42095
+ result.Success = result.Success && (result.Errors.length === 0);
42096
+ return result;
42097
+ }
42098
+ /**
42099
+ * The compaction target percentage must be a value between 1 and 100 percent.
42100
+ * @param result - the ValidationResult object to add any errors or warnings to
42101
+ * @public
42102
+ * @method
42103
+ */
42104
+ ValidateCompactionTargetPercentRange(result) {
42105
+ if (this.CompactionTargetPercent != null && (this.CompactionTargetPercent < 1 || this.CompactionTargetPercent > 100)) {
42106
+ result.Errors.push(new ValidationErrorInfo('CompactionTargetPercent', 'Compaction Target Percent must be between 1 and 100.', this.CompactionTargetPercent, ValidationErrorType.Failure));
42107
+ }
42108
+ }
42109
+ /**
42110
+ * The compaction trigger percentage must be a value between 1 and 100 percent.
42111
+ * @param result - the ValidationResult object to add any errors or warnings to
42112
+ * @public
42113
+ * @method
42114
+ */
42115
+ ValidateCompactionTriggerPercentRange(result) {
42116
+ if (this.CompactionTriggerPercent != null && (this.CompactionTriggerPercent < 1 || this.CompactionTriggerPercent > 100)) {
42117
+ result.Errors.push(new ValidationErrorInfo("CompactionTriggerPercent", "Compaction trigger percentage must be between 1 and 100.", this.CompactionTriggerPercent, ValidationErrorType.Failure));
42118
+ }
42119
+ }
42120
+ /**
42121
+ * The maximum tokens for the context window must be a positive number greater than 0.
42122
+ * @param result - the ValidationResult object to add any errors or warnings to
42123
+ * @public
42124
+ * @method
42125
+ */
42126
+ ValidateContextWindowMaxTokensGreaterThanZero(result) {
42127
+ if (this.ContextWindowMaxTokens != null && this.ContextWindowMaxTokens <= 0) {
42128
+ result.Errors.push(new ValidationErrorInfo("ContextWindowMaxTokens", "Context Window Max Tokens must be a positive number greater than 0.", this.ContextWindowMaxTokens, ValidationErrorType.Failure));
42129
+ }
42130
+ }
42131
+ /**
42132
+ * The compaction target percentage must be less than the compaction trigger percentage to ensure that compaction successfully reduces the resource usage below the trigger threshold.
42133
+ * @param result - the ValidationResult object to add any errors or warnings to
42134
+ * @public
42135
+ * @method
42136
+ */
42137
+ ValidateCompactionTargetPercentLessThanTriggerPercent(result) {
42138
+ if (this.CompactionTargetPercent != null && this.CompactionTriggerPercent != null) {
42139
+ if (this.CompactionTargetPercent >= this.CompactionTriggerPercent) {
42140
+ result.Errors.push(new ValidationErrorInfo("CompactionTargetPercent", "The compaction target percentage must be strictly less than the compaction trigger percentage.", this.CompactionTargetPercent, ValidationErrorType.Failure));
42141
+ }
42142
+ }
42143
+ }
42144
+ /**
41724
42145
  * * Field Name: ID
41725
42146
  * * Display Name: ID
41726
42147
  * * SQL Data Type: uniqueidentifier
@@ -42113,6 +42534,9 @@ let MJAIAgentEntity = class MJAIAgentEntity extends BaseEntity {
42113
42534
  }
42114
42535
  /**
42115
42536
  * Validate() method override for MJ: AI Agents entity. This is an auto-generated method that invokes the generated validators for this entity for the following fields:
42537
+ * * CompactionTargetPercent: The compaction target percentage must be between 1 and 100 percent.
42538
+ * * CompactionTriggerPercent: The compaction trigger percentage must be a value between 1 and 100.
42539
+ * * ContextWindowMaxTokens: The maximum tokens for the context window must be a positive number greater than zero.
42116
42540
  * * DefaultPromptEffortLevel: This rule ensures that if a default prompt effort level is specified, it must be a number between 1 and 100, inclusive.
42117
42541
  * * MaxExecutionsPerRun: This rule ensures that if 'MaxExecutionsPerRun' is provided, it must be a value greater than zero. If it is left blank, that's acceptable.
42118
42542
  * * MaxMessages: This rule ensures that the maximum number of messages, if specified, must be greater than zero.
@@ -42126,6 +42550,9 @@ let MJAIAgentEntity = class MJAIAgentEntity extends BaseEntity {
42126
42550
  */
42127
42551
  Validate() {
42128
42552
  const result = super.Validate();
42553
+ this.ValidateCompactionTargetPercentRange(result);
42554
+ this.ValidateCompactionTriggerPercentRange(result);
42555
+ this.ValidateContextWindowMaxTokensGreaterThanZero(result);
42129
42556
  this.ValidateDefaultPromptEffortLevelInAllowedRange(result);
42130
42557
  this.ValidateMaxExecutionsPerRunGreaterThanZero(result);
42131
42558
  this.ValidateMaxMessagesGreaterThanZero(result);
@@ -42137,6 +42564,39 @@ let MJAIAgentEntity = class MJAIAgentEntity extends BaseEntity {
42137
42564
  return result;
42138
42565
  }
42139
42566
  /**
42567
+ * The compaction target percentage must be between 1 and 100 percent.
42568
+ * @param result - the ValidationResult object to add any errors or warnings to
42569
+ * @public
42570
+ * @method
42571
+ */
42572
+ ValidateCompactionTargetPercentRange(result) {
42573
+ if (this.CompactionTargetPercent != null && (this.CompactionTargetPercent < 1 || this.CompactionTargetPercent > 100)) {
42574
+ result.Errors.push(new ValidationErrorInfo("CompactionTargetPercent", "Compaction target percent must be between 1 and 100.", this.CompactionTargetPercent, ValidationErrorType.Failure));
42575
+ }
42576
+ }
42577
+ /**
42578
+ * The compaction trigger percentage must be a value between 1 and 100.
42579
+ * @param result - the ValidationResult object to add any errors or warnings to
42580
+ * @public
42581
+ * @method
42582
+ */
42583
+ ValidateCompactionTriggerPercentRange(result) {
42584
+ if (this.CompactionTriggerPercent != null && (this.CompactionTriggerPercent < 1 || this.CompactionTriggerPercent > 100)) {
42585
+ result.Errors.push(new ValidationErrorInfo("CompactionTriggerPercent", "Compaction trigger percentage must be between 1 and 100.", this.CompactionTriggerPercent, ValidationErrorType.Failure));
42586
+ }
42587
+ }
42588
+ /**
42589
+ * The maximum tokens for the context window must be a positive number greater than zero.
42590
+ * @param result - the ValidationResult object to add any errors or warnings to
42591
+ * @public
42592
+ * @method
42593
+ */
42594
+ ValidateContextWindowMaxTokensGreaterThanZero(result) {
42595
+ if (this.ContextWindowMaxTokens != null && this.ContextWindowMaxTokens <= 0) {
42596
+ result.Errors.push(new ValidationErrorInfo("ContextWindowMaxTokens", "The maximum tokens for the context window must be greater than zero.", this.ContextWindowMaxTokens, ValidationErrorType.Failure));
42597
+ }
42598
+ }
42599
+ /**
42140
42600
  * This rule ensures that if a default prompt effort level is specified, it must be a number between 1 and 100, inclusive.
42141
42601
  * @param result - the ValidationResult object to add any errors or warnings to
42142
42602
  * @public
@@ -48061,19 +48521,6 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
48061
48521
  this.Set('ExecutionOrder', value);
48062
48522
  }
48063
48523
  /**
48064
- * * Field Name: AgentRunID
48065
- * * Display Name: Agent Run
48066
- * * SQL Data Type: uniqueidentifier
48067
- * * Related Entity/Foreign Key: MJ: AI Agent Runs (vwAIAgentRuns.ID)
48068
- * * Description: Optional reference to the AIAgentRun that initiated this prompt execution. Links prompt runs to their parent agent runs for comprehensive execution tracking.
48069
- */
48070
- get AgentRunID() {
48071
- return this.Get('AgentRunID');
48072
- }
48073
- set AgentRunID(value) {
48074
- this.Set('AgentRunID', value);
48075
- }
48076
- /**
48077
48524
  * * Field Name: Cost
48078
48525
  * * Display Name: Cost
48079
48526
  * * SQL Data Type: decimal(19, 8)
@@ -48937,14 +49384,6 @@ let MJAIPromptRunEntity = class MJAIPromptRunEntity extends BaseEntity {
48937
49384
  return this.Get('Parent');
48938
49385
  }
48939
49386
  /**
48940
- * * Field Name: AgentRun
48941
- * * Display Name: Agent Run
48942
- * * SQL Data Type: nvarchar(255)
48943
- */
48944
- get AgentRun() {
48945
- return this.Get('AgentRun');
48946
- }
48947
- /**
48948
49387
  * * Field Name: OriginalModel
48949
49388
  * * Display Name: Original Model
48950
49389
  * * SQL Data Type: nvarchar(50)
@@ -50851,6 +51290,177 @@ MJAISkillPermissionEntity = __decorate([
50851
51290
  RegisterClass(BaseEntity, 'MJ: AI Skill Permissions')
50852
51291
  ], MJAISkillPermissionEntity);
50853
51292
  export { MJAISkillPermissionEntity };
51293
+ /**
51294
+ * MJ: AI Skill Search Scopes - strongly typed entity sub-class
51295
+ * * Schema: __mj
51296
+ * * Base Table: AISkillSearchScope
51297
+ * * Base View: vwAISkillSearchScopes
51298
+ * * @description Search Scopes an AI Skill may reach when activated, honoured when AISkill.SearchScopeAccess = 'Assigned'. Mirrors AIAgentSearchScope: Status plus an optional StartAt/EndAt window time-box a grant, and Priority/IsDefault pick among several. An empty table means no skill grants any scope - the pre-migration behaviour.
51299
+ * * Primary Key: ID
51300
+ * @extends {BaseEntity}
51301
+ * @class
51302
+ * @public
51303
+ */
51304
+ let MJAISkillSearchScopeEntity = class MJAISkillSearchScopeEntity extends BaseEntity {
51305
+ /**
51306
+ * Loads the MJ: AI Skill Search Scopes record from the database
51307
+ * @param ID: string - primary key value to load the MJ: AI Skill Search Scopes record.
51308
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
51309
+ * @returns {Promise<boolean>} - true if successful, false otherwise
51310
+ * @public
51311
+ * @async
51312
+ * @memberof MJAISkillSearchScopeEntity
51313
+ * @method
51314
+ * @override
51315
+ */
51316
+ async Load(ID, EntityRelationshipsToLoad) {
51317
+ const compositeKey = new CompositeKey();
51318
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
51319
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
51320
+ }
51321
+ /**
51322
+ * * Field Name: ID
51323
+ * * Display Name: ID
51324
+ * * SQL Data Type: uniqueidentifier
51325
+ * * Default Value: newsequentialid()
51326
+ */
51327
+ get ID() {
51328
+ return this.Get('ID');
51329
+ }
51330
+ set ID(value) {
51331
+ this.Set('ID', value);
51332
+ }
51333
+ /**
51334
+ * * Field Name: SkillID
51335
+ * * Display Name: Skill ID
51336
+ * * SQL Data Type: uniqueidentifier
51337
+ * * Related Entity/Foreign Key: MJ: AI Skills (vwAISkills.ID)
51338
+ * * Description: The skill this grant belongs to.
51339
+ */
51340
+ get SkillID() {
51341
+ return this.Get('SkillID');
51342
+ }
51343
+ set SkillID(value) {
51344
+ this.Set('SkillID', value);
51345
+ }
51346
+ /**
51347
+ * * Field Name: SearchScopeID
51348
+ * * Display Name: Search Scope ID
51349
+ * * SQL Data Type: uniqueidentifier
51350
+ * * Related Entity/Foreign Key: MJ: Search Scopes (vwSearchScopes.ID)
51351
+ * * Description: The Search Scope this skill may reach.
51352
+ */
51353
+ get SearchScopeID() {
51354
+ return this.Get('SearchScopeID');
51355
+ }
51356
+ set SearchScopeID(value) {
51357
+ this.Set('SearchScopeID', value);
51358
+ }
51359
+ /**
51360
+ * * Field Name: Status
51361
+ * * Display Name: Status
51362
+ * * SQL Data Type: nvarchar(20)
51363
+ * * Default Value: Active
51364
+ * * Value List Type: List
51365
+ * * Possible Values
51366
+ * * Active
51367
+ * * Inactive
51368
+ * * Description: Active or Inactive. Inactive rows are ignored during resolution.
51369
+ */
51370
+ get Status() {
51371
+ return this.Get('Status');
51372
+ }
51373
+ set Status(value) {
51374
+ this.Set('Status', value);
51375
+ }
51376
+ /**
51377
+ * * Field Name: StartAt
51378
+ * * Display Name: Start At
51379
+ * * SQL Data Type: datetimeoffset
51380
+ * * Description: Optional start of the window in which this grant is honoured. NULL = no lower bound. Evaluated against the current time on every resolution, so a window opening or closing needs no cache invalidation.
51381
+ */
51382
+ get StartAt() {
51383
+ return this.Get('StartAt');
51384
+ }
51385
+ set StartAt(value) {
51386
+ this.Set('StartAt', value);
51387
+ }
51388
+ /**
51389
+ * * Field Name: EndAt
51390
+ * * Display Name: End At
51391
+ * * SQL Data Type: datetimeoffset
51392
+ * * Description: Optional end of the window in which this grant is honoured. NULL = no upper bound.
51393
+ */
51394
+ get EndAt() {
51395
+ return this.Get('EndAt');
51396
+ }
51397
+ set EndAt(value) {
51398
+ this.Set('EndAt', value);
51399
+ }
51400
+ /**
51401
+ * * Field Name: Priority
51402
+ * * Display Name: Priority
51403
+ * * SQL Data Type: int
51404
+ * * Description: Lower numbers win when several granted scopes are candidates and none is marked IsDefault.
51405
+ */
51406
+ get Priority() {
51407
+ return this.Get('Priority');
51408
+ }
51409
+ set Priority(value) {
51410
+ this.Set('Priority', value);
51411
+ }
51412
+ /**
51413
+ * * Field Name: IsDefault
51414
+ * * Display Name: Is Default
51415
+ * * SQL Data Type: bit
51416
+ * * Default Value: 0
51417
+ * * Description: When set, this scope is chosen for the skill ahead of Priority ordering.
51418
+ */
51419
+ get IsDefault() {
51420
+ return this.Get('IsDefault');
51421
+ }
51422
+ set IsDefault(value) {
51423
+ this.Set('IsDefault', value);
51424
+ }
51425
+ /**
51426
+ * * Field Name: __mj_CreatedAt
51427
+ * * Display Name: Created At
51428
+ * * SQL Data Type: datetimeoffset
51429
+ * * Default Value: getutcdate()
51430
+ */
51431
+ get __mj_CreatedAt() {
51432
+ return this.Get('__mj_CreatedAt');
51433
+ }
51434
+ /**
51435
+ * * Field Name: __mj_UpdatedAt
51436
+ * * Display Name: Updated At
51437
+ * * SQL Data Type: datetimeoffset
51438
+ * * Default Value: getutcdate()
51439
+ */
51440
+ get __mj_UpdatedAt() {
51441
+ return this.Get('__mj_UpdatedAt');
51442
+ }
51443
+ /**
51444
+ * * Field Name: Skill
51445
+ * * Display Name: Skill
51446
+ * * SQL Data Type: nvarchar(255)
51447
+ */
51448
+ get Skill() {
51449
+ return this.Get('Skill');
51450
+ }
51451
+ /**
51452
+ * * Field Name: SearchScope
51453
+ * * Display Name: Search Scope
51454
+ * * SQL Data Type: nvarchar(200)
51455
+ */
51456
+ get SearchScope() {
51457
+ return this.Get('SearchScope');
51458
+ }
51459
+ };
51460
+ MJAISkillSearchScopeEntity = __decorate([
51461
+ RegisterClass(BaseEntity, 'MJ: AI Skill Search Scopes')
51462
+ ], MJAISkillSearchScopeEntity);
51463
+ export { MJAISkillSearchScopeEntity };
50854
51464
  /**
50855
51465
  * MJ: AI Skill Sub Agents - strongly typed entity sub-class
50856
51466
  * * Schema: __mj
@@ -51133,6 +51743,23 @@ let MJAISkillEntity = class MJAISkillEntity extends BaseEntity {
51133
51743
  this.Set('ActivationMode', value);
51134
51744
  }
51135
51745
  /**
51746
+ * * Field Name: SearchScopeAccess
51747
+ * * Display Name: Search Scope Access
51748
+ * * SQL Data Type: nvarchar(20)
51749
+ * * Value List Type: List
51750
+ * * Possible Values
51751
+ * * All
51752
+ * * Assigned
51753
+ * * None
51754
+ * * Description: Which Search Scopes this skill may reach when activated. None = grants no retrieval scope; Assigned = only scopes listed in AISkillSearchScope; All = any active scope. NULL behaves as None so existing skills are unaffected. Mirrors AIAgent.SearchScopeAccess so a skill and an agent are interchangeable principals to SearchScopePermissionResolver.
51755
+ */
51756
+ get SearchScopeAccess() {
51757
+ return this.Get('SearchScopeAccess');
51758
+ }
51759
+ set SearchScopeAccess(value) {
51760
+ this.Set('SearchScopeAccess', value);
51761
+ }
51762
+ /**
51136
51763
  * * Field Name: CreatedByUser
51137
51764
  * * Display Name: Created By User
51138
51765
  * * SQL Data Type: nvarchar(100)
@@ -60810,6 +61437,370 @@ MJContentItemAttributeEntity = __decorate([
60810
61437
  RegisterClass(BaseEntity, 'MJ: Content Item Attributes')
60811
61438
  ], MJContentItemAttributeEntity);
60812
61439
  export { MJContentItemAttributeEntity };
61440
+ /**
61441
+ * MJ: Content Item Chunks - strongly typed entity sub-class
61442
+ * * Schema: __mj
61443
+ * * Base Table: ContentItemChunk
61444
+ * * Base View: vwContentItemChunks
61445
+ * * @description Represents an individual chunk of a Content Item's text that was embedded as a distinct vector. When a Content Item is too large to embed as a single vector it is split into ordered chunks; each chunk becomes one row here, linking the stored vector back to the specific portion of the parent Content Item it represents.
61446
+ * * Primary Key: ID
61447
+ * @extends {BaseEntity}
61448
+ * @class
61449
+ * @public
61450
+ */
61451
+ let MJContentItemChunkEntity = class MJContentItemChunkEntity extends BaseEntity {
61452
+ /**
61453
+ * Loads the MJ: Content Item Chunks record from the database
61454
+ * @param ID: string - primary key value to load the MJ: Content Item Chunks record.
61455
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
61456
+ * @returns {Promise<boolean>} - true if successful, false otherwise
61457
+ * @public
61458
+ * @async
61459
+ * @memberof MJContentItemChunkEntity
61460
+ * @method
61461
+ * @override
61462
+ */
61463
+ async Load(ID, EntityRelationshipsToLoad) {
61464
+ const compositeKey = new CompositeKey();
61465
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
61466
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
61467
+ }
61468
+ /**
61469
+ * * Field Name: ID
61470
+ * * Display Name: ID
61471
+ * * SQL Data Type: uniqueidentifier
61472
+ * * Default Value: newsequentialid()
61473
+ */
61474
+ get ID() {
61475
+ return this.Get('ID');
61476
+ }
61477
+ set ID(value) {
61478
+ this.Set('ID', value);
61479
+ }
61480
+ /**
61481
+ * * Field Name: ContentItemID
61482
+ * * Display Name: Content Item
61483
+ * * SQL Data Type: uniqueidentifier
61484
+ * * Related Entity/Foreign Key: MJ: Content Items (vwContentItems.ID)
61485
+ */
61486
+ get ContentItemID() {
61487
+ return this.Get('ContentItemID');
61488
+ }
61489
+ set ContentItemID(value) {
61490
+ this.Set('ContentItemID', value);
61491
+ }
61492
+ /**
61493
+ * * Field Name: Sequence
61494
+ * * Display Name: Sequence
61495
+ * * SQL Data Type: int
61496
+ * * Description: Zero-based ordinal position of this chunk within the parent Content Item, preserving the original order in which the text was split.
61497
+ */
61498
+ get Sequence() {
61499
+ return this.Get('Sequence');
61500
+ }
61501
+ set Sequence(value) {
61502
+ this.Set('Sequence', value);
61503
+ }
61504
+ /**
61505
+ * * Field Name: Text
61506
+ * * Display Name: Text
61507
+ * * SQL Data Type: nvarchar(MAX)
61508
+ * * Description: The chunk of extracted text (from the parent Content Item) that was embedded to produce this chunk's vector. NULL for media-only segments (for example an image, or a video window with no transcript), where the embedded payload is the media itself and any readable representation lives in Description/Transcript.
61509
+ */
61510
+ get Text() {
61511
+ return this.Get('Text');
61512
+ }
61513
+ set Text(value) {
61514
+ this.Set('Text', value);
61515
+ }
61516
+ /**
61517
+ * * Field Name: VectorRecordID
61518
+ * * Display Name: Vector Record ID
61519
+ * * SQL Data Type: nvarchar(100)
61520
+ * * Description: The identifier of this chunk's vector record in the vector database (e.g. Pinecone) — the deterministic key MemberJunction assigns and upserts the chunk's embedding under. Provides traceability from the chunk back to its stored vector.
61521
+ */
61522
+ get VectorRecordID() {
61523
+ return this.Get('VectorRecordID');
61524
+ }
61525
+ set VectorRecordID(value) {
61526
+ this.Set('VectorRecordID', value);
61527
+ }
61528
+ /**
61529
+ * * Field Name: EmbeddingStatus
61530
+ * * Display Name: Embedding Status
61531
+ * * SQL Data Type: nvarchar(20)
61532
+ * * Default Value: Pending
61533
+ * * Value List Type: List
61534
+ * * Possible Values
61535
+ * * Active
61536
+ * * Complete
61537
+ * * Failed
61538
+ * * Pending
61539
+ * * Processed
61540
+ * * Processing
61541
+ * * Skipped
61542
+ * * Description: Embedding lifecycle state of this chunk: Pending (default), Processing, Active, Complete, Processed, Failed, or Skipped.
61543
+ */
61544
+ get EmbeddingStatus() {
61545
+ return this.Get('EmbeddingStatus');
61546
+ }
61547
+ set EmbeddingStatus(value) {
61548
+ this.Set('EmbeddingStatus', value);
61549
+ }
61550
+ /**
61551
+ * * Field Name: TaggingStatus
61552
+ * * Display Name: Tagging Status
61553
+ * * SQL Data Type: nvarchar(20)
61554
+ * * Default Value: Pending
61555
+ * * Value List Type: List
61556
+ * * Possible Values
61557
+ * * Active
61558
+ * * Complete
61559
+ * * Failed
61560
+ * * Pending
61561
+ * * Processed
61562
+ * * Processing
61563
+ * * Skipped
61564
+ * * Description: Tagging lifecycle state of this chunk: Pending (default), Processing, Active, Complete, Processed, Failed, or Skipped.
61565
+ */
61566
+ get TaggingStatus() {
61567
+ return this.Get('TaggingStatus');
61568
+ }
61569
+ set TaggingStatus(value) {
61570
+ this.Set('TaggingStatus', value);
61571
+ }
61572
+ /**
61573
+ * * Field Name: DeleteStatus
61574
+ * * Display Name: Delete Status
61575
+ * * SQL Data Type: nvarchar(20)
61576
+ * * Value List Type: List
61577
+ * * Possible Values
61578
+ * * Deleted
61579
+ * * Pending
61580
+ * * Description: Deletion lifecycle state of this chunk's vector: NULL when not slated for deletion, Pending when vector removal is queued, or Deleted once the vector has been removed from the vector database.
61581
+ */
61582
+ get DeleteStatus() {
61583
+ return this.Get('DeleteStatus');
61584
+ }
61585
+ set DeleteStatus(value) {
61586
+ this.Set('DeleteStatus', value);
61587
+ }
61588
+ /**
61589
+ * * Field Name: LastEmbeddedAt
61590
+ * * Display Name: Last Embedded At
61591
+ * * SQL Data Type: datetimeoffset
61592
+ * * Description: Timestamp of the last successful embedding of this chunk.
61593
+ */
61594
+ get LastEmbeddedAt() {
61595
+ return this.Get('LastEmbeddedAt');
61596
+ }
61597
+ set LastEmbeddedAt(value) {
61598
+ this.Set('LastEmbeddedAt', value);
61599
+ }
61600
+ /**
61601
+ * * Field Name: LastTaggedAt
61602
+ * * Display Name: Last Tagged At
61603
+ * * SQL Data Type: datetimeoffset
61604
+ * * Description: Timestamp of the last successful tagging of this chunk.
61605
+ */
61606
+ get LastTaggedAt() {
61607
+ return this.Get('LastTaggedAt');
61608
+ }
61609
+ set LastTaggedAt(value) {
61610
+ this.Set('LastTaggedAt', value);
61611
+ }
61612
+ /**
61613
+ * * Field Name: LastDeletedAt
61614
+ * * Display Name: Last Deleted At
61615
+ * * SQL Data Type: datetimeoffset
61616
+ * * Description: Timestamp of the last successful deletion of this chunk's vector from the vector database.
61617
+ */
61618
+ get LastDeletedAt() {
61619
+ return this.Get('LastDeletedAt');
61620
+ }
61621
+ set LastDeletedAt(value) {
61622
+ this.Set('LastDeletedAt', value);
61623
+ }
61624
+ /**
61625
+ * * Field Name: __mj_CreatedAt
61626
+ * * Display Name: Created At
61627
+ * * SQL Data Type: datetimeoffset
61628
+ * * Default Value: getutcdate()
61629
+ */
61630
+ get __mj_CreatedAt() {
61631
+ return this.Get('__mj_CreatedAt');
61632
+ }
61633
+ /**
61634
+ * * Field Name: __mj_UpdatedAt
61635
+ * * Display Name: Updated At
61636
+ * * SQL Data Type: datetimeoffset
61637
+ * * Default Value: getutcdate()
61638
+ */
61639
+ get __mj_UpdatedAt() {
61640
+ return this.Get('__mj_UpdatedAt');
61641
+ }
61642
+ /**
61643
+ * * Field Name: Modality
61644
+ * * Display Name: Modality
61645
+ * * SQL Data Type: nvarchar(20)
61646
+ * * Default Value: text
61647
+ * * Value List Type: List
61648
+ * * Possible Values
61649
+ * * audio
61650
+ * * image
61651
+ * * multimodal
61652
+ * * text
61653
+ * * video
61654
+ * * Description: The modality of this chunk's embedded payload: text (default), image, audio, video, or multimodal (text and media fused into a single vector). Determines which vector index the chunk's embedding belongs to, since a multimodal embedding model produces vectors of a different dimension than a text model, and is used at retrieval time to merge results per modality rather than taking a single global top-k.
61655
+ */
61656
+ get Modality() {
61657
+ return this.Get('Modality');
61658
+ }
61659
+ set Modality(value) {
61660
+ this.Set('Modality', value);
61661
+ }
61662
+ /**
61663
+ * * Field Name: StartOffset
61664
+ * * Display Name: Start Offset
61665
+ * * SQL Data Type: int
61666
+ * * Description: Inclusive character offset where this chunk begins within the parent Content Item's extracted text. Together with EndOffset this is the provenance link that resolves a search hit back to the exact passage in the source document. NULL for media segments, which are positioned by StartMs/EndMs instead.
61667
+ */
61668
+ get StartOffset() {
61669
+ return this.Get('StartOffset');
61670
+ }
61671
+ set StartOffset(value) {
61672
+ this.Set('StartOffset', value);
61673
+ }
61674
+ /**
61675
+ * * Field Name: EndOffset
61676
+ * * Display Name: End Offset
61677
+ * * SQL Data Type: int
61678
+ * * Description: Exclusive character offset where this chunk ends within the parent Content Item's extracted text. See StartOffset. NULL for media segments.
61679
+ */
61680
+ get EndOffset() {
61681
+ return this.Get('EndOffset');
61682
+ }
61683
+ set EndOffset(value) {
61684
+ this.Set('EndOffset', value);
61685
+ }
61686
+ /**
61687
+ * * Field Name: StartMs
61688
+ * * Display Name: Start (ms)
61689
+ * * SQL Data Type: int
61690
+ * * Description: Start of this chunk's time window, in milliseconds from the beginning of the parent audio or video asset. Set by transcript- or window-based segmentation; enables time-windowed playback deep-links from a search result (for example 14:22-15:05 of a session recording). NULL for text segments.
61691
+ */
61692
+ get StartMs() {
61693
+ return this.Get('StartMs');
61694
+ }
61695
+ set StartMs(value) {
61696
+ this.Set('StartMs', value);
61697
+ }
61698
+ /**
61699
+ * * Field Name: EndMs
61700
+ * * Display Name: End (ms)
61701
+ * * SQL Data Type: int
61702
+ * * Description: End of this chunk's time window, in milliseconds from the beginning of the parent audio or video asset. See StartMs. NULL for text segments.
61703
+ */
61704
+ get EndMs() {
61705
+ return this.Get('EndMs');
61706
+ }
61707
+ set EndMs(value) {
61708
+ this.Set('EndMs', value);
61709
+ }
61710
+ /**
61711
+ * * Field Name: PageNumber
61712
+ * * Display Name: Page Number
61713
+ * * SQL Data Type: int
61714
+ * * Description: One-based page number this chunk came from, for paginated sources such as PDFs or slide decks. Provides citation-grade provenance alongside the character offsets. NULL when the source is not paginated.
61715
+ */
61716
+ get PageNumber() {
61717
+ return this.Get('PageNumber');
61718
+ }
61719
+ set PageNumber(value) {
61720
+ this.Set('PageNumber', value);
61721
+ }
61722
+ /**
61723
+ * * Field Name: SegmentTitle
61724
+ * * Display Name: Segment Title
61725
+ * * SQL Data Type: nvarchar(500)
61726
+ * * Description: Human-readable label for this segment — a document heading for structure-based segmentation, or a generated chapter title for topic- and transcript-based segmentation. Displayed with search results and prepended to the embedded text so a chunk's vector carries its own topic.
61727
+ */
61728
+ get SegmentTitle() {
61729
+ return this.Get('SegmentTitle');
61730
+ }
61731
+ set SegmentTitle(value) {
61732
+ this.Set('SegmentTitle', value);
61733
+ }
61734
+ /**
61735
+ * * Field Name: Description
61736
+ * * Display Name: Description
61737
+ * * SQL Data Type: nvarchar(MAX)
61738
+ * * Description: An AI-generated description of this chunk's content, primarily for non-text segments. Retrieval of a media chunk otherwise yields only a pointer (an asset and a time window) that an agent cannot reason over; this column is the readable representation that an agent reads, a cross-encoder reranks, and lexical search matches. A short summary of it may be mirrored into the vector record's metadata for display and filtering, but the full text belongs here.
61739
+ */
61740
+ get Description() {
61741
+ return this.Get('Description');
61742
+ }
61743
+ set Description(value) {
61744
+ this.Set('Description', value);
61745
+ }
61746
+ /**
61747
+ * * Field Name: Transcript
61748
+ * * Display Name: Transcript
61749
+ * * SQL Data Type: nvarchar(MAX)
61750
+ * * Description: The verbatim transcript covering this chunk's time window, for audio and video segments, including speaker labels where the source provides them. Distinct from Description, which is a generated summary: this is what was actually said, and it is what makes a recording findable by lexical search.
61751
+ */
61752
+ get Transcript() {
61753
+ return this.Get('Transcript');
61754
+ }
61755
+ set Transcript(value) {
61756
+ this.Set('Transcript', value);
61757
+ }
61758
+ /**
61759
+ * * Field Name: SegmenterKey
61760
+ * * Display Name: Segmenter Key
61761
+ * * SQL Data Type: nvarchar(100)
61762
+ * * Description: Registration key of the segmentation strategy that produced this chunk (for example StructuralText, SemanticText, Transcript, or FixedWindow). Provenance: when a Content Source's configured strategy changes, this identifies which chunks were produced by the previous strategy and therefore need re-chunking.
61763
+ */
61764
+ get SegmenterKey() {
61765
+ return this.Get('SegmenterKey');
61766
+ }
61767
+ set SegmenterKey(value) {
61768
+ this.Set('SegmenterKey', value);
61769
+ }
61770
+ /**
61771
+ * * Field Name: ParentChunkID
61772
+ * * Display Name: Parent Chunk
61773
+ * * SQL Data Type: uniqueidentifier
61774
+ * * Related Entity/Foreign Key: MJ: Content Item Chunks (vwContentItemChunks.ID)
61775
+ * * Description: Optional self-reference to another chunk of the same Content Item that is the parent of this one, expressing a chapter to sub-chapter hierarchy — for example a five-minute chapter of a recording and the individual speaker turns within it, or a document section and its subsections. NULL for top-level segments.
61776
+ */
61777
+ get ParentChunkID() {
61778
+ return this.Get('ParentChunkID');
61779
+ }
61780
+ set ParentChunkID(value) {
61781
+ this.Set('ParentChunkID', value);
61782
+ }
61783
+ /**
61784
+ * * Field Name: ContentItem
61785
+ * * Display Name: Content Item
61786
+ * * SQL Data Type: nvarchar(250)
61787
+ */
61788
+ get ContentItem() {
61789
+ return this.Get('ContentItem');
61790
+ }
61791
+ /**
61792
+ * * Field Name: RootParentChunkID
61793
+ * * Display Name: Root Parent Chunk
61794
+ * * SQL Data Type: uniqueidentifier
61795
+ */
61796
+ get RootParentChunkID() {
61797
+ return this.Get('RootParentChunkID');
61798
+ }
61799
+ };
61800
+ MJContentItemChunkEntity = __decorate([
61801
+ RegisterClass(BaseEntity, 'MJ: Content Item Chunks')
61802
+ ], MJContentItemChunkEntity);
61803
+ export { MJContentItemChunkEntity };
60813
61804
  /**
60814
61805
  * MJ: Content Item Duplicates - strongly typed entity sub-class
60815
61806
  * * Schema: __mj
@@ -61216,7 +62207,7 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61216
62207
  }
61217
62208
  /**
61218
62209
  * * Field Name: ContentSourceID
61219
- * * Display Name: Content Source ID
62210
+ * * Display Name: Content Source
61220
62211
  * * SQL Data Type: uniqueidentifier
61221
62212
  * * Related Entity/Foreign Key: MJ: Content Sources (vwContentSources.ID)
61222
62213
  */
@@ -61250,7 +62241,7 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61250
62241
  }
61251
62242
  /**
61252
62243
  * * Field Name: ContentTypeID
61253
- * * Display Name: Content Type ID
62244
+ * * Display Name: Content Type
61254
62245
  * * SQL Data Type: uniqueidentifier
61255
62246
  * * Related Entity/Foreign Key: MJ: Content Types (vwContentTypes.ID)
61256
62247
  */
@@ -61262,7 +62253,7 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61262
62253
  }
61263
62254
  /**
61264
62255
  * * Field Name: ContentSourceTypeID
61265
- * * Display Name: Content Source Type ID
62256
+ * * Display Name: Content Source Type
61266
62257
  * * SQL Data Type: uniqueidentifier
61267
62258
  * * Related Entity/Foreign Key: MJ: Content Source Types (vwContentSourceTypes.ID)
61268
62259
  */
@@ -61274,7 +62265,7 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61274
62265
  }
61275
62266
  /**
61276
62267
  * * Field Name: ContentFileTypeID
61277
- * * Display Name: Content File Type ID
62268
+ * * Display Name: Content File Type
61278
62269
  * * SQL Data Type: uniqueidentifier
61279
62270
  * * Related Entity/Foreign Key: MJ: Content File Types (vwContentFileTypes.ID)
61280
62271
  */
@@ -61310,7 +62301,7 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61310
62301
  }
61311
62302
  /**
61312
62303
  * * Field Name: Text
61313
- * * Display Name: Text
62304
+ * * Display Name: Extracted Text
61314
62305
  * * SQL Data Type: nvarchar(MAX)
61315
62306
  * * Description: The extracted text content from the source document or file.
61316
62307
  */
@@ -61340,7 +62331,7 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61340
62331
  }
61341
62332
  /**
61342
62333
  * * Field Name: EntityRecordDocumentID
61343
- * * Display Name: Entity Record Document ID
62334
+ * * Display Name: Entity Record Document
61344
62335
  * * SQL Data Type: uniqueidentifier
61345
62336
  * * Related Entity/Foreign Key: MJ: Entity Record Documents (vwEntityRecordDocuments.ID)
61346
62337
  * * Description: For entity-sourced content items, links to the Entity Record Document snapshot that was rendered for this item. Provides traceability back to the source entity record via ERD.EntityID + ERD.RecordID. NULL for non-entity sources.
@@ -61385,7 +62376,7 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61385
62376
  }
61386
62377
  /**
61387
62378
  * * Field Name: EmbeddingModelID
61388
- * * Display Name: Embedding Model ID
62379
+ * * Display Name: Embedding Model
61389
62380
  * * SQL Data Type: uniqueidentifier
61390
62381
  * * Related Entity/Foreign Key: MJ: AI Models (vwAIModels.ID)
61391
62382
  * * Description: The AI model used to generate the most recent embedding for this content item.
@@ -61429,8 +62420,45 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61429
62420
  this.Set('LastTaggedAt', value);
61430
62421
  }
61431
62422
  /**
62423
+ * * Field Name: VectorRecordID
62424
+ * * Display Name: Vector Record ID
62425
+ * * SQL Data Type: nvarchar(100)
62426
+ * * Description: The identifier of this Content Item's vector record in the vector database (e.g. Pinecone) — the deterministic key MemberJunction assigns and upserts the embedding under when the item is embedded as a single vector. Provides traceability from the Content Item back to its stored vector. For chunked items, per-chunk identifiers are tracked on the ContentItemChunk entity instead.
62427
+ */
62428
+ get VectorRecordID() {
62429
+ return this.Get('VectorRecordID');
62430
+ }
62431
+ set VectorRecordID(value) {
62432
+ this.Set('VectorRecordID', value);
62433
+ }
62434
+ /**
62435
+ * * Field Name: ParentID
62436
+ * * Display Name: Parent Content
62437
+ * * SQL Data Type: uniqueidentifier
62438
+ * * Related Entity/Foreign Key: MJ: Content Items (vwContentItems.ID)
62439
+ * * Description: Optional self-reference to another Content Item that is the parent of this one, enabling a content-item hierarchy (e.g. a document and its sub-pages, or a site and its crawled pages). NULL for top-level items.
62440
+ */
62441
+ get ParentID() {
62442
+ return this.Get('ParentID');
62443
+ }
62444
+ set ParentID(value) {
62445
+ this.Set('ParentID', value);
62446
+ }
62447
+ /**
62448
+ * * Field Name: DisplayLink
62449
+ * * Display Name: Display Link
62450
+ * * SQL Data Type: nvarchar(2000)
62451
+ * * Description: Optional display/clickable URL for this Content Item (e.g. a canonical or human-facing link), distinct from the source URL used for ingestion.
62452
+ */
62453
+ get DisplayLink() {
62454
+ return this.Get('DisplayLink');
62455
+ }
62456
+ set DisplayLink(value) {
62457
+ this.Set('DisplayLink', value);
62458
+ }
62459
+ /**
61432
62460
  * * Field Name: ContentSource
61433
- * * Display Name: Content Source
62461
+ * * Display Name: Content Source Name
61434
62462
  * * SQL Data Type: nvarchar(255)
61435
62463
  */
61436
62464
  get ContentSource() {
@@ -61438,7 +62466,7 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61438
62466
  }
61439
62467
  /**
61440
62468
  * * Field Name: ContentType
61441
- * * Display Name: Content Type
62469
+ * * Display Name: Content Type Name
61442
62470
  * * SQL Data Type: nvarchar(255)
61443
62471
  */
61444
62472
  get ContentType() {
@@ -61446,7 +62474,7 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61446
62474
  }
61447
62475
  /**
61448
62476
  * * Field Name: ContentSourceType
61449
- * * Display Name: Content Source Type
62477
+ * * Display Name: Content Source Type Name
61450
62478
  * * SQL Data Type: nvarchar(255)
61451
62479
  */
61452
62480
  get ContentSourceType() {
@@ -61454,7 +62482,7 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61454
62482
  }
61455
62483
  /**
61456
62484
  * * Field Name: ContentFileType
61457
- * * Display Name: Content File Type
62485
+ * * Display Name: Content File Type Name
61458
62486
  * * SQL Data Type: nvarchar(255)
61459
62487
  */
61460
62488
  get ContentFileType() {
@@ -61462,7 +62490,7 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61462
62490
  }
61463
62491
  /**
61464
62492
  * * Field Name: EntityRecordDocument
61465
- * * Display Name: Entity Record Document
62493
+ * * Display Name: Entity Record Document Name
61466
62494
  * * SQL Data Type: nvarchar(450)
61467
62495
  */
61468
62496
  get EntityRecordDocument() {
@@ -61470,12 +62498,28 @@ let MJContentItemEntity = class MJContentItemEntity extends BaseEntity {
61470
62498
  }
61471
62499
  /**
61472
62500
  * * Field Name: EmbeddingModel
61473
- * * Display Name: Embedding Model
62501
+ * * Display Name: Embedding Model Name
61474
62502
  * * SQL Data Type: nvarchar(50)
61475
62503
  */
61476
62504
  get EmbeddingModel() {
61477
62505
  return this.Get('EmbeddingModel');
61478
62506
  }
62507
+ /**
62508
+ * * Field Name: Parent
62509
+ * * Display Name: Parent Content Name
62510
+ * * SQL Data Type: nvarchar(250)
62511
+ */
62512
+ get Parent() {
62513
+ return this.Get('Parent');
62514
+ }
62515
+ /**
62516
+ * * Field Name: RootParentID
62517
+ * * Display Name: Root Parent Content
62518
+ * * SQL Data Type: uniqueidentifier
62519
+ */
62520
+ get RootParentID() {
62521
+ return this.Get('RootParentID');
62522
+ }
61479
62523
  };
61480
62524
  MJContentItemEntity = __decorate([
61481
62525
  RegisterClass(BaseEntity, 'MJ: Content Items')
@@ -62691,8 +63735,32 @@ let MJContentSourceEntity = class MJContentSourceEntity extends BaseEntity {
62691
63735
  this.Set('ScheduledActionID', value);
62692
63736
  }
62693
63737
  /**
63738
+ * * Field Name: SegmenterKey
63739
+ * * Display Name: Segmenter Strategy
63740
+ * * SQL Data Type: nvarchar(100)
63741
+ * * Description: Registration key of the segmentation strategy used to split this source's content into embeddable chunks — for example StructuralText (document headings), AdaptiveBoundary (target size closing on the nearest natural break), SemanticText (LLM-detected topic boundaries), Transcript (audio/video chapters), PagedContent (one segment per page), or FixedWindow (uniform windows). NULL falls back to the Content Type's value, then to a built-in default.
63742
+ */
63743
+ get SegmenterKey() {
63744
+ return this.Get('SegmenterKey');
63745
+ }
63746
+ set SegmenterKey(value) {
63747
+ this.Set('SegmenterKey', value);
63748
+ }
63749
+ /**
63750
+ * * Field Name: CleanerKey
63751
+ * * Display Name: Cleaner Strategy
63752
+ * * SQL Data Type: nvarchar(100)
63753
+ * * Description: Registration key of the content-cleaning strategy applied to this source before segmentation — for example Html (CSS-selector-driven extraction that drops navigation, sidebars, and advertising) or PlainText (whitespace normalization only). Cleaning is separate from segmentation because the two change for different reasons: a new site template needs new selectors, not a new chunking strategy. NULL falls back to the Content Type's value, then to a default inferred from the content's mime type.
63754
+ */
63755
+ get CleanerKey() {
63756
+ return this.Get('CleanerKey');
63757
+ }
63758
+ set CleanerKey(value) {
63759
+ this.Set('CleanerKey', value);
63760
+ }
63761
+ /**
62694
63762
  * * Field Name: ContentType
62695
- * * Display Name: Content Type
63763
+ * * Display Name: Content Type Name
62696
63764
  * * SQL Data Type: nvarchar(255)
62697
63765
  */
62698
63766
  get ContentType() {
@@ -62700,7 +63768,7 @@ let MJContentSourceEntity = class MJContentSourceEntity extends BaseEntity {
62700
63768
  }
62701
63769
  /**
62702
63770
  * * Field Name: ContentSourceType
62703
- * * Display Name: Content Source Type
63771
+ * * Display Name: Content Source Type Name
62704
63772
  * * SQL Data Type: nvarchar(255)
62705
63773
  */
62706
63774
  get ContentSourceType() {
@@ -62708,7 +63776,7 @@ let MJContentSourceEntity = class MJContentSourceEntity extends BaseEntity {
62708
63776
  }
62709
63777
  /**
62710
63778
  * * Field Name: ContentFileType
62711
- * * Display Name: Content File Type
63779
+ * * Display Name: Content File Type Name
62712
63780
  * * SQL Data Type: nvarchar(255)
62713
63781
  */
62714
63782
  get ContentFileType() {
@@ -62716,7 +63784,7 @@ let MJContentSourceEntity = class MJContentSourceEntity extends BaseEntity {
62716
63784
  }
62717
63785
  /**
62718
63786
  * * Field Name: EmbeddingModel
62719
- * * Display Name: Embedding Model
63787
+ * * Display Name: Embedding Model Name
62720
63788
  * * SQL Data Type: nvarchar(50)
62721
63789
  */
62722
63790
  get EmbeddingModel() {
@@ -62724,7 +63792,7 @@ let MJContentSourceEntity = class MJContentSourceEntity extends BaseEntity {
62724
63792
  }
62725
63793
  /**
62726
63794
  * * Field Name: VectorIndex
62727
- * * Display Name: Vector Index
63795
+ * * Display Name: Vector Index Name
62728
63796
  * * SQL Data Type: nvarchar(255)
62729
63797
  */
62730
63798
  get VectorIndex() {
@@ -62732,7 +63800,7 @@ let MJContentSourceEntity = class MJContentSourceEntity extends BaseEntity {
62732
63800
  }
62733
63801
  /**
62734
63802
  * * Field Name: Entity
62735
- * * Display Name: Entity
63803
+ * * Display Name: Entity Name
62736
63804
  * * SQL Data Type: nvarchar(255)
62737
63805
  */
62738
63806
  get Entity() {
@@ -62740,7 +63808,7 @@ let MJContentSourceEntity = class MJContentSourceEntity extends BaseEntity {
62740
63808
  }
62741
63809
  /**
62742
63810
  * * Field Name: EntityDocument
62743
- * * Display Name: Entity Document
63811
+ * * Display Name: Entity Document Name
62744
63812
  * * SQL Data Type: nvarchar(250)
62745
63813
  */
62746
63814
  get EntityDocument() {
@@ -62748,7 +63816,7 @@ let MJContentSourceEntity = class MJContentSourceEntity extends BaseEntity {
62748
63816
  }
62749
63817
  /**
62750
63818
  * * Field Name: ScheduledAction
62751
- * * Display Name: Scheduled Action
63819
+ * * Display Name: Scheduled Action Name
62752
63820
  * * SQL Data Type: nvarchar(255)
62753
63821
  */
62754
63822
  get ScheduledAction() {
@@ -63047,6 +64115,30 @@ let MJContentTypeEntity = class MJContentTypeEntity extends BaseEntity {
63047
64115
  this._ConfigurationObject_lastRaw = raw;
63048
64116
  }
63049
64117
  /**
64118
+ * * Field Name: SegmenterKey
64119
+ * * Display Name: Segmenter Strategy
64120
+ * * SQL Data Type: nvarchar(100)
64121
+ * * Description: Default segmentation strategy for content of this type, used when a Content Source does not specify its own SegmenterKey. See ContentSource.SegmenterKey for the available strategies.
64122
+ */
64123
+ get SegmenterKey() {
64124
+ return this.Get('SegmenterKey');
64125
+ }
64126
+ set SegmenterKey(value) {
64127
+ this.Set('SegmenterKey', value);
64128
+ }
64129
+ /**
64130
+ * * Field Name: CleanerKey
64131
+ * * Display Name: Cleaner Strategy
64132
+ * * SQL Data Type: nvarchar(100)
64133
+ * * Description: Default content-cleaning strategy for content of this type, used when a Content Source does not specify its own CleanerKey. See ContentSource.CleanerKey.
64134
+ */
64135
+ get CleanerKey() {
64136
+ return this.Get('CleanerKey');
64137
+ }
64138
+ set CleanerKey(value) {
64139
+ this.Set('CleanerKey', value);
64140
+ }
64141
+ /**
63050
64142
  * * Field Name: AIModel
63051
64143
  * * Display Name: AI Model Name
63052
64144
  * * SQL Data Type: nvarchar(50)
@@ -63369,39 +64461,233 @@ let MJConversationArtifactVersionEntity = class MJConversationArtifactVersionEnt
63369
64461
  return this.Get('__mj_UpdatedAt');
63370
64462
  }
63371
64463
  /**
63372
- * * Field Name: ConversationArtifact
63373
- * * Display Name: Conversation Artifact
64464
+ * * Field Name: ConversationArtifact
64465
+ * * Display Name: Conversation Artifact
64466
+ * * SQL Data Type: nvarchar(255)
64467
+ */
64468
+ get ConversationArtifact() {
64469
+ return this.Get('ConversationArtifact');
64470
+ }
64471
+ };
64472
+ MJConversationArtifactVersionEntity = __decorate([
64473
+ RegisterClass(BaseEntity, 'MJ: Conversation Artifact Versions')
64474
+ ], MJConversationArtifactVersionEntity);
64475
+ export { MJConversationArtifactVersionEntity };
64476
+ /**
64477
+ * MJ: Conversation Artifacts - strongly typed entity sub-class
64478
+ * * Schema: __mj
64479
+ * * Base Table: ConversationArtifact
64480
+ * * Base View: vwConversationArtifacts
64481
+ * * @description Stores metadata for artifacts created within conversations
64482
+ * * Primary Key: ID
64483
+ * @extends {BaseEntity}
64484
+ * @class
64485
+ * @public
64486
+ * @deprecated This entity is deprecated and will be removed in a future version. Using it will result in console warnings.
64487
+ */
64488
+ let MJConversationArtifactEntity = class MJConversationArtifactEntity extends BaseEntity {
64489
+ /**
64490
+ * Loads the MJ: Conversation Artifacts record from the database
64491
+ * @param ID: string - primary key value to load the MJ: Conversation Artifacts record.
64492
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
64493
+ * @returns {Promise<boolean>} - true if successful, false otherwise
64494
+ * @public
64495
+ * @async
64496
+ * @memberof MJConversationArtifactEntity
64497
+ * @method
64498
+ * @override
64499
+ */
64500
+ async Load(ID, EntityRelationshipsToLoad) {
64501
+ const compositeKey = new CompositeKey();
64502
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
64503
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
64504
+ }
64505
+ /**
64506
+ * MJ: Conversation Artifacts - Delete method override to wrap in transaction since CascadeDeletes is true.
64507
+ * Wrapping in a transaction ensures that all cascade delete operations are handled atomically.
64508
+ * @public
64509
+ * @method
64510
+ * @override
64511
+ * @memberof MJConversationArtifactEntity
64512
+ * @returns {Promise<boolean>} - true if successful, false otherwise
64513
+ */
64514
+ async Delete(options) {
64515
+ if (Metadata.Provider.ProviderType === ProviderType.Database) { // global-provider-ok: codegen runs offline against a single provider
64516
+ // For database providers, use the transaction methods directly
64517
+ const provider = Metadata.Provider; // global-provider-ok: codegen runs offline against a single provider
64518
+ try {
64519
+ await provider.BeginTransaction();
64520
+ const result = await super.Delete(options);
64521
+ if (result) {
64522
+ await provider.CommitTransaction();
64523
+ return true;
64524
+ }
64525
+ else {
64526
+ await provider.RollbackTransaction();
64527
+ return false;
64528
+ }
64529
+ }
64530
+ catch (error) {
64531
+ await provider.RollbackTransaction();
64532
+ throw error;
64533
+ }
64534
+ }
64535
+ else {
64536
+ // For network providers, cascading deletes are handled server-side
64537
+ return super.Delete(options);
64538
+ }
64539
+ }
64540
+ /**
64541
+ * * Field Name: ID
64542
+ * * Display Name: ID
64543
+ * * SQL Data Type: uniqueidentifier
64544
+ * * Default Value: newsequentialid()
64545
+ */
64546
+ get ID() {
64547
+ return this.Get('ID');
64548
+ }
64549
+ set ID(value) {
64550
+ this.Set('ID', value);
64551
+ }
64552
+ /**
64553
+ * * Field Name: Name
64554
+ * * Display Name: Name
64555
+ * * SQL Data Type: nvarchar(255)
64556
+ * * Description: Display name of the artifact
64557
+ */
64558
+ get Name() {
64559
+ return this.Get('Name');
64560
+ }
64561
+ set Name(value) {
64562
+ this.Set('Name', value);
64563
+ }
64564
+ /**
64565
+ * * Field Name: Description
64566
+ * * Display Name: Description
64567
+ * * SQL Data Type: nvarchar(MAX)
64568
+ * * Description: Extended description of the artifact
64569
+ */
64570
+ get Description() {
64571
+ return this.Get('Description');
64572
+ }
64573
+ set Description(value) {
64574
+ this.Set('Description', value);
64575
+ }
64576
+ /**
64577
+ * * Field Name: ConversationID
64578
+ * * Display Name: Conversation ID
64579
+ * * SQL Data Type: uniqueidentifier
64580
+ * * Related Entity/Foreign Key: MJ: Conversations (vwConversations.ID)
64581
+ * * Description: Reference to the conversation this artifact belongs to
64582
+ */
64583
+ get ConversationID() {
64584
+ return this.Get('ConversationID');
64585
+ }
64586
+ set ConversationID(value) {
64587
+ this.Set('ConversationID', value);
64588
+ }
64589
+ /**
64590
+ * * Field Name: ArtifactTypeID
64591
+ * * Display Name: Artifact Type ID
64592
+ * * SQL Data Type: uniqueidentifier
64593
+ * * Related Entity/Foreign Key: MJ: Artifact Types (vwArtifactTypes.ID)
64594
+ * * Description: Reference to the type of artifact
64595
+ */
64596
+ get ArtifactTypeID() {
64597
+ return this.Get('ArtifactTypeID');
64598
+ }
64599
+ set ArtifactTypeID(value) {
64600
+ this.Set('ArtifactTypeID', value);
64601
+ }
64602
+ /**
64603
+ * * Field Name: SharingScope
64604
+ * * Display Name: Sharing Scope
64605
+ * * SQL Data Type: nvarchar(50)
64606
+ * * Value List Type: List
64607
+ * * Possible Values
64608
+ * * Everyone
64609
+ * * None
64610
+ * * Public
64611
+ * * SpecificUsers
64612
+ * * Description: Controls who can view this artifact (None, SpecificUsers, Everyone, Public)
64613
+ */
64614
+ get SharingScope() {
64615
+ return this.Get('SharingScope');
64616
+ }
64617
+ set SharingScope(value) {
64618
+ this.Set('SharingScope', value);
64619
+ }
64620
+ /**
64621
+ * * Field Name: Comments
64622
+ * * Display Name: Comments
64623
+ * * SQL Data Type: nvarchar(MAX)
64624
+ * * Description: User comments about the artifact
64625
+ */
64626
+ get Comments() {
64627
+ return this.Get('Comments');
64628
+ }
64629
+ set Comments(value) {
64630
+ this.Set('Comments', value);
64631
+ }
64632
+ /**
64633
+ * * Field Name: __mj_CreatedAt
64634
+ * * Display Name: Created At
64635
+ * * SQL Data Type: datetimeoffset
64636
+ * * Default Value: getutcdate()
64637
+ */
64638
+ get __mj_CreatedAt() {
64639
+ return this.Get('__mj_CreatedAt');
64640
+ }
64641
+ /**
64642
+ * * Field Name: __mj_UpdatedAt
64643
+ * * Display Name: Updated At
64644
+ * * SQL Data Type: datetimeoffset
64645
+ * * Default Value: getutcdate()
64646
+ */
64647
+ get __mj_UpdatedAt() {
64648
+ return this.Get('__mj_UpdatedAt');
64649
+ }
64650
+ /**
64651
+ * * Field Name: Conversation
64652
+ * * Display Name: Conversation
63374
64653
  * * SQL Data Type: nvarchar(255)
63375
64654
  */
63376
- get ConversationArtifact() {
63377
- return this.Get('ConversationArtifact');
64655
+ get Conversation() {
64656
+ return this.Get('Conversation');
64657
+ }
64658
+ /**
64659
+ * * Field Name: ArtifactType
64660
+ * * Display Name: Artifact Type
64661
+ * * SQL Data Type: nvarchar(100)
64662
+ */
64663
+ get ArtifactType() {
64664
+ return this.Get('ArtifactType');
63378
64665
  }
63379
64666
  };
63380
- MJConversationArtifactVersionEntity = __decorate([
63381
- RegisterClass(BaseEntity, 'MJ: Conversation Artifact Versions')
63382
- ], MJConversationArtifactVersionEntity);
63383
- export { MJConversationArtifactVersionEntity };
64667
+ MJConversationArtifactEntity = __decorate([
64668
+ RegisterClass(BaseEntity, 'MJ: Conversation Artifacts')
64669
+ ], MJConversationArtifactEntity);
64670
+ export { MJConversationArtifactEntity };
63384
64671
  /**
63385
- * MJ: Conversation Artifacts - strongly typed entity sub-class
64672
+ * MJ: Conversation Compaction Runs - strongly typed entity sub-class
63386
64673
  * * Schema: __mj
63387
- * * Base Table: ConversationArtifact
63388
- * * Base View: vwConversationArtifacts
63389
- * * @description Stores metadata for artifacts created within conversations
64674
+ * * Base Table: ConversationCompactionRun
64675
+ * * Base View: vwConversationCompactionRuns
64676
+ * * @description Links a conversation detail boundary row to the AI Prompt Run that produced its compaction summary. Audit-only join table replacing the former ConversationDetail.SummaryPromptRunID FK to break the CodeGen cycle.
63390
64677
  * * Primary Key: ID
63391
64678
  * @extends {BaseEntity}
63392
64679
  * @class
63393
64680
  * @public
63394
- * @deprecated This entity is deprecated and will be removed in a future version. Using it will result in console warnings.
63395
64681
  */
63396
- let MJConversationArtifactEntity = class MJConversationArtifactEntity extends BaseEntity {
64682
+ let MJConversationCompactionRunEntity = class MJConversationCompactionRunEntity extends BaseEntity {
63397
64683
  /**
63398
- * Loads the MJ: Conversation Artifacts record from the database
63399
- * @param ID: string - primary key value to load the MJ: Conversation Artifacts record.
64684
+ * Loads the MJ: Conversation Compaction Runs record from the database
64685
+ * @param ID: string - primary key value to load the MJ: Conversation Compaction Runs record.
63400
64686
  * @param EntityRelationshipsToLoad - (optional) the relationships to load
63401
64687
  * @returns {Promise<boolean>} - true if successful, false otherwise
63402
64688
  * @public
63403
64689
  * @async
63404
- * @memberof MJConversationArtifactEntity
64690
+ * @memberof MJConversationCompactionRunEntity
63405
64691
  * @method
63406
64692
  * @override
63407
64693
  */
@@ -63411,41 +64697,6 @@ let MJConversationArtifactEntity = class MJConversationArtifactEntity extends Ba
63411
64697
  return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
63412
64698
  }
63413
64699
  /**
63414
- * MJ: Conversation Artifacts - Delete method override to wrap in transaction since CascadeDeletes is true.
63415
- * Wrapping in a transaction ensures that all cascade delete operations are handled atomically.
63416
- * @public
63417
- * @method
63418
- * @override
63419
- * @memberof MJConversationArtifactEntity
63420
- * @returns {Promise<boolean>} - true if successful, false otherwise
63421
- */
63422
- async Delete(options) {
63423
- if (Metadata.Provider.ProviderType === ProviderType.Database) { // global-provider-ok: codegen runs offline against a single provider
63424
- // For database providers, use the transaction methods directly
63425
- const provider = Metadata.Provider; // global-provider-ok: codegen runs offline against a single provider
63426
- try {
63427
- await provider.BeginTransaction();
63428
- const result = await super.Delete(options);
63429
- if (result) {
63430
- await provider.CommitTransaction();
63431
- return true;
63432
- }
63433
- else {
63434
- await provider.RollbackTransaction();
63435
- return false;
63436
- }
63437
- }
63438
- catch (error) {
63439
- await provider.RollbackTransaction();
63440
- throw error;
63441
- }
63442
- }
63443
- else {
63444
- // For network providers, cascading deletes are handled server-side
63445
- return super.Delete(options);
63446
- }
63447
- }
63448
- /**
63449
64700
  * * Field Name: ID
63450
64701
  * * Display Name: ID
63451
64702
  * * SQL Data Type: uniqueidentifier
@@ -63458,84 +64709,30 @@ let MJConversationArtifactEntity = class MJConversationArtifactEntity extends Ba
63458
64709
  this.Set('ID', value);
63459
64710
  }
63460
64711
  /**
63461
- * * Field Name: Name
63462
- * * Display Name: Name
63463
- * * SQL Data Type: nvarchar(255)
63464
- * * Description: Display name of the artifact
63465
- */
63466
- get Name() {
63467
- return this.Get('Name');
63468
- }
63469
- set Name(value) {
63470
- this.Set('Name', value);
63471
- }
63472
- /**
63473
- * * Field Name: Description
63474
- * * Display Name: Description
63475
- * * SQL Data Type: nvarchar(MAX)
63476
- * * Description: Extended description of the artifact
63477
- */
63478
- get Description() {
63479
- return this.Get('Description');
63480
- }
63481
- set Description(value) {
63482
- this.Set('Description', value);
63483
- }
63484
- /**
63485
- * * Field Name: ConversationID
63486
- * * Display Name: Conversation ID
64712
+ * * Field Name: ConversationDetailID
64713
+ * * Display Name: Conversation Detail
63487
64714
  * * SQL Data Type: uniqueidentifier
63488
- * * Related Entity/Foreign Key: MJ: Conversations (vwConversations.ID)
63489
- * * Description: Reference to the conversation this artifact belongs to
64715
+ * * Related Entity/Foreign Key: MJ: Conversation Details (vwConversationDetails.ID)
64716
+ * * Description: The conversation detail row whose SummaryOfEarlierConversation was produced by this compaction run.
63490
64717
  */
63491
- get ConversationID() {
63492
- return this.Get('ConversationID');
64718
+ get ConversationDetailID() {
64719
+ return this.Get('ConversationDetailID');
63493
64720
  }
63494
- set ConversationID(value) {
63495
- this.Set('ConversationID', value);
64721
+ set ConversationDetailID(value) {
64722
+ this.Set('ConversationDetailID', value);
63496
64723
  }
63497
64724
  /**
63498
- * * Field Name: ArtifactTypeID
63499
- * * Display Name: Artifact Type ID
64725
+ * * Field Name: PromptRunID
64726
+ * * Display Name: Prompt Run
63500
64727
  * * SQL Data Type: uniqueidentifier
63501
- * * Related Entity/Foreign Key: MJ: Artifact Types (vwArtifactTypes.ID)
63502
- * * Description: Reference to the type of artifact
63503
- */
63504
- get ArtifactTypeID() {
63505
- return this.Get('ArtifactTypeID');
63506
- }
63507
- set ArtifactTypeID(value) {
63508
- this.Set('ArtifactTypeID', value);
63509
- }
63510
- /**
63511
- * * Field Name: SharingScope
63512
- * * Display Name: Sharing Scope
63513
- * * SQL Data Type: nvarchar(50)
63514
- * * Value List Type: List
63515
- * * Possible Values
63516
- * * Everyone
63517
- * * None
63518
- * * Public
63519
- * * SpecificUsers
63520
- * * Description: Controls who can view this artifact (None, SpecificUsers, Everyone, Public)
63521
- */
63522
- get SharingScope() {
63523
- return this.Get('SharingScope');
63524
- }
63525
- set SharingScope(value) {
63526
- this.Set('SharingScope', value);
63527
- }
63528
- /**
63529
- * * Field Name: Comments
63530
- * * Display Name: Comments
63531
- * * SQL Data Type: nvarchar(MAX)
63532
- * * Description: User comments about the artifact
64728
+ * * Related Entity/Foreign Key: MJ: AI Prompt Runs (vwAIPromptRuns.ID)
64729
+ * * Description: The AI Prompt Run that generated the compaction summary (model, tokens, cost, prompt version).
63533
64730
  */
63534
- get Comments() {
63535
- return this.Get('Comments');
64731
+ get PromptRunID() {
64732
+ return this.Get('PromptRunID');
63536
64733
  }
63537
- set Comments(value) {
63538
- this.Set('Comments', value);
64734
+ set PromptRunID(value) {
64735
+ this.Set('PromptRunID', value);
63539
64736
  }
63540
64737
  /**
63541
64738
  * * Field Name: __mj_CreatedAt
@@ -63556,26 +64753,26 @@ let MJConversationArtifactEntity = class MJConversationArtifactEntity extends Ba
63556
64753
  return this.Get('__mj_UpdatedAt');
63557
64754
  }
63558
64755
  /**
63559
- * * Field Name: Conversation
63560
- * * Display Name: Conversation
63561
- * * SQL Data Type: nvarchar(255)
64756
+ * * Field Name: ConversationDetail
64757
+ * * Display Name: Conversation Detail Name
64758
+ * * SQL Data Type: nvarchar(100)
63562
64759
  */
63563
- get Conversation() {
63564
- return this.Get('Conversation');
64760
+ get ConversationDetail() {
64761
+ return this.Get('ConversationDetail');
63565
64762
  }
63566
64763
  /**
63567
- * * Field Name: ArtifactType
63568
- * * Display Name: Artifact Type
63569
- * * SQL Data Type: nvarchar(100)
64764
+ * * Field Name: PromptRun
64765
+ * * Display Name: Prompt Run Name
64766
+ * * SQL Data Type: nvarchar(255)
63570
64767
  */
63571
- get ArtifactType() {
63572
- return this.Get('ArtifactType');
64768
+ get PromptRun() {
64769
+ return this.Get('PromptRun');
63573
64770
  }
63574
64771
  };
63575
- MJConversationArtifactEntity = __decorate([
63576
- RegisterClass(BaseEntity, 'MJ: Conversation Artifacts')
63577
- ], MJConversationArtifactEntity);
63578
- export { MJConversationArtifactEntity };
64772
+ MJConversationCompactionRunEntity = __decorate([
64773
+ RegisterClass(BaseEntity, 'MJ: Conversation Compaction Runs')
64774
+ ], MJConversationCompactionRunEntity);
64775
+ export { MJConversationCompactionRunEntity };
63579
64776
  /**
63580
64777
  * MJ: Conversation Detail Artifacts - strongly typed entity sub-class
63581
64778
  * * Schema: __mj
@@ -64649,22 +65846,6 @@ let MJConversationDetailEntity = class MJConversationDetailEntity extends BaseEn
64649
65846
  get Sequence() {
64650
65847
  return this.Get('Sequence');
64651
65848
  }
64652
- set Sequence(value) {
64653
- this.Set('Sequence', value);
64654
- }
64655
- /**
64656
- * * Field Name: SummaryPromptRunID
64657
- * * Display Name: Summary Prompt Run
64658
- * * SQL Data Type: uniqueidentifier
64659
- * * Related Entity/Foreign Key: MJ: AI Prompt Runs (vwAIPromptRuns.ID)
64660
- * * Description: When SummaryOfEarlierConversation is populated by a cross-turn compaction, this links to the AIPromptRun that produced it (model, tokens, cost, prompt version). Null for ordinary (non-summary) rows.
64661
- */
64662
- get SummaryPromptRunID() {
64663
- return this.Get('SummaryPromptRunID');
64664
- }
64665
- set SummaryPromptRunID(value) {
64666
- this.Set('SummaryPromptRunID', value);
64667
- }
64668
65849
  /**
64669
65850
  * * Field Name: Conversation
64670
65851
  * * Display Name: Conversation
@@ -64722,14 +65903,6 @@ let MJConversationDetailEntity = class MJConversationDetailEntity extends BaseEn
64722
65903
  return this.Get('TestRun');
64723
65904
  }
64724
65905
  /**
64725
- * * Field Name: SummaryPromptRun
64726
- * * Display Name: Summary Prompt Run
64727
- * * SQL Data Type: nvarchar(255)
64728
- */
64729
- get SummaryPromptRun() {
64730
- return this.Get('SummaryPromptRun');
64731
- }
64732
- /**
64733
65906
  * * Field Name: RootParentID
64734
65907
  * * Display Name: Root Parent
64735
65908
  * * SQL Data Type: uniqueidentifier
@@ -97528,6 +98701,43 @@ let MJSearchExecutionLogEntity = class MJSearchExecutionLogEntity extends BaseEn
97528
98701
  return this.Get('__mj_UpdatedAt');
97529
98702
  }
97530
98703
  /**
98704
+ * * Field Name: AISkillID
98705
+ * * Display Name: AI Skill ID
98706
+ * * SQL Data Type: uniqueidentifier
98707
+ * * Related Entity/Foreign Key: MJ: AI Skills (vwAISkills.ID)
98708
+ * * Description: The AI Skill on whose behalf this search ran, or NULL for a search with no active skill. Mirrors AIAgentID: since a skill is a search principal in its own right (AISkill.SearchScopeAccess plus MJ: AI Skill Search Scopes rows can reach a scope the user's own roles do not grant), the log must record which skill was active or the entitlement decision cannot be reconstructed.
98709
+ */
98710
+ get AISkillID() {
98711
+ return this.Get('AISkillID');
98712
+ }
98713
+ set AISkillID(value) {
98714
+ this.Set('AISkillID', value);
98715
+ }
98716
+ /**
98717
+ * * Field Name: PrimaryScopeRecordID
98718
+ * * Display Name: Primary Scope Record ID
98719
+ * * SQL Data Type: uniqueidentifier
98720
+ * * Description: The tenant this search ran for, taken from SearchContext.PrimaryScopeRecordID. Lets a multi-tenant deployment partition, filter and retain search audit history per customer. NULL for untenanted searches. Named for the existing primary-scope concept rather than OrganizationID because a scope's primary scope may be a Company, Client or Practice.
98721
+ */
98722
+ get PrimaryScopeRecordID() {
98723
+ return this.Get('PrimaryScopeRecordID');
98724
+ }
98725
+ set PrimaryScopeRecordID(value) {
98726
+ this.Set('PrimaryScopeRecordID', value);
98727
+ }
98728
+ /**
98729
+ * * Field Name: ScopeDecisionJSON
98730
+ * * Display Name: Scope Decision JSON
98731
+ * * SQL Data Type: nvarchar(MAX)
98732
+ * * Description: Serialized ScopeExplanation recording WHY this search could reach what it reached: the entitlement decision and the grant that produced it, every dimension with its provenance (CallerSupplied / ServerDerived / Default / DiscardedCaller / Absent), and each lane's rendered filter with its active-or-skipped status and reason. Identical in shape to the value returned by SearchEngine.ExplainScope(), so the dry-run an administrator previews before running a search is the same structure the audit log stores afterwards. NULL when the engine did not capture a decision (older writers, or a failure before scope resolution).
98733
+ */
98734
+ get ScopeDecisionJSON() {
98735
+ return this.Get('ScopeDecisionJSON');
98736
+ }
98737
+ set ScopeDecisionJSON(value) {
98738
+ this.Set('ScopeDecisionJSON', value);
98739
+ }
98740
+ /**
97531
98741
  * * Field Name: SearchScope
97532
98742
  * * Display Name: Search Scope Name
97533
98743
  * * SQL Data Type: nvarchar(200)
@@ -97551,6 +98761,14 @@ let MJSearchExecutionLogEntity = class MJSearchExecutionLogEntity extends BaseEn
97551
98761
  get AIAgent() {
97552
98762
  return this.Get('AIAgent');
97553
98763
  }
98764
+ /**
98765
+ * * Field Name: AISkill
98766
+ * * Display Name: AI Skill
98767
+ * * SQL Data Type: nvarchar(255)
98768
+ */
98769
+ get AISkill() {
98770
+ return this.Get('AISkill');
98771
+ }
97554
98772
  };
97555
98773
  MJSearchExecutionLogEntity = __decorate([
97556
98774
  RegisterClass(BaseEntity, 'MJ: Search Execution Logs')
@@ -97910,6 +99128,18 @@ let MJSearchScopeEntityEntity = class MJSearchScopeEntityEntity extends BaseEnti
97910
99128
  return this.Get('__mj_UpdatedAt');
97911
99129
  }
97912
99130
  /**
99131
+ * * Field Name: RequiredMetadataKeys
99132
+ * * Display Name: Required Metadata Keys
99133
+ * * SQL Data Type: nvarchar(MAX)
99134
+ * * Description: JSON array of column or alias names the rendered ExtraFilter MUST reference for this lane to be considered safe, e.g. ["OrganizationID","ContentSourceID"]. Checked against the RENDERED filter at search time: if one is missing the lane is SKIPPED rather than queried, because a partially-rendered filter (an {% if %} clause dropped when its dimension was absent or discarded) is still valid SQL and silently widens the search. Same concept and same engine check as SearchScopeExternalIndex.RequiredMetadataKeys, applied to the SQL lane. NULL = no contract declared, which is the pre-migration behaviour.
99135
+ */
99136
+ get RequiredMetadataKeys() {
99137
+ return this.Get('RequiredMetadataKeys');
99138
+ }
99139
+ set RequiredMetadataKeys(value) {
99140
+ this.Set('RequiredMetadataKeys', value);
99141
+ }
99142
+ /**
97913
99143
  * * Field Name: SearchScope
97914
99144
  * * Display Name: Search Scope
97915
99145
  * * SQL Data Type: nvarchar(200)
@@ -98100,6 +99330,18 @@ let MJSearchScopeExternalIndexEntity = class MJSearchScopeExternalIndexEntity ex
98100
99330
  return this.Get('__mj_UpdatedAt');
98101
99331
  }
98102
99332
  /**
99333
+ * * Field Name: RequiredMetadataKeys
99334
+ * * Display Name: Required Metadata Keys
99335
+ * * SQL Data Type: nvarchar(MAX)
99336
+ * * Description: JSON array of metadata key names the rendered MetadataFilter MUST constrain on for this lane to be considered safe, e.g. ["OrganizationID","ContentSourceID"]. Checked against the RENDERED filter at search time: if a key is missing the lane is SKIPPED rather than queried, because a partially-rendered filter silently widens the search. This also documents the ingest contract — these are the labels the writer must stamp on every document in the index, since a filter on a key that was never written either matches nothing or (on providers that ignore unknown keys) matches everything. NULL = no contract declared, which is the pre-migration behaviour.
99337
+ */
99338
+ get RequiredMetadataKeys() {
99339
+ return this.Get('RequiredMetadataKeys');
99340
+ }
99341
+ set RequiredMetadataKeys(value) {
99342
+ this.Set('RequiredMetadataKeys', value);
99343
+ }
99344
+ /**
98103
99345
  * * Field Name: SearchScope
98104
99346
  * * Display Name: Search Scope
98105
99347
  * * SQL Data Type: nvarchar(200)
@@ -98266,6 +99508,42 @@ let MJSearchScopePermissionEntity = class MJSearchScopePermissionEntity extends
98266
99508
  return this.Get('__mj_UpdatedAt');
98267
99509
  }
98268
99510
  /**
99511
+ * * Field Name: StartAt
99512
+ * * Display Name: Start At
99513
+ * * SQL Data Type: datetimeoffset
99514
+ * * Description: Optional start of the window in which this grant applies. NULL = no lower bound. SearchScopePermission was the only member of this family without a time window, so temporary grants previously needed a bespoke mechanism.
99515
+ */
99516
+ get StartAt() {
99517
+ return this.Get('StartAt');
99518
+ }
99519
+ set StartAt(value) {
99520
+ this.Set('StartAt', value);
99521
+ }
99522
+ /**
99523
+ * * Field Name: EndAt
99524
+ * * Display Name: End At
99525
+ * * SQL Data Type: datetimeoffset
99526
+ * * Description: Optional end of the window in which this grant applies. NULL = no upper bound.
99527
+ */
99528
+ get EndAt() {
99529
+ return this.Get('EndAt');
99530
+ }
99531
+ set EndAt(value) {
99532
+ this.Set('EndAt', value);
99533
+ }
99534
+ /**
99535
+ * * Field Name: PrimaryScopeRecordID
99536
+ * * Display Name: Primary Scope Record ID
99537
+ * * SQL Data Type: uniqueidentifier
99538
+ * * Description: Optional tenant this grant is limited to, matched against SearchContext.PrimaryScopeRecordID at search time and type-checkable against the scope's own PrimaryScopeEntityID. NULL = applies to every tenant, which is the pre-migration behaviour for all existing rows. Deliberately NOT called OrganizationID: MJ is domain-agnostic and a scope's primary scope may be a Company, Client or Practice, so this reuses the existing primary-scope concept rather than inventing a parallel tenancy column.
99539
+ */
99540
+ get PrimaryScopeRecordID() {
99541
+ return this.Get('PrimaryScopeRecordID');
99542
+ }
99543
+ set PrimaryScopeRecordID(value) {
99544
+ this.Set('PrimaryScopeRecordID', value);
99545
+ }
99546
+ /**
98269
99547
  * * Field Name: SearchScope
98270
99548
  * * Display Name: Search Scope Name
98271
99549
  * * SQL Data Type: nvarchar(200)