@x12i/memorix-retrieval 1.20.0 → 1.22.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 (78) hide show
  1. package/README.md +56 -0
  2. package/catalox-seeds/inputs/entity-descriptors/vulnerabilities.json +0 -21
  3. package/catalox-seeds/inputs/manifest.json +8 -15
  4. package/catalox-seeds/memorix-retrieval-descriptors.manifest.json +1 -492
  5. package/dist/client/types.d.ts +6 -1
  6. package/dist/client/types.d.ts.map +1 -1
  7. package/dist/data/record-display-name.d.ts +4 -0
  8. package/dist/data/record-display-name.d.ts.map +1 -0
  9. package/dist/data/record-display-name.js +44 -0
  10. package/dist/data/record-display-name.js.map +1 -0
  11. package/dist/data/record-display-name.test.d.ts +2 -0
  12. package/dist/data/record-display-name.test.d.ts.map +1 -0
  13. package/dist/data/record-display-name.test.js +49 -0
  14. package/dist/data/record-display-name.test.js.map +1 -0
  15. package/dist/data/record-id.d.ts.map +1 -1
  16. package/dist/data/record-id.js +1 -1
  17. package/dist/data/record-id.js.map +1 -1
  18. package/dist/data/record-info.d.ts +30 -0
  19. package/dist/data/record-info.d.ts.map +1 -0
  20. package/dist/data/record-info.js +80 -0
  21. package/dist/data/record-info.js.map +1 -0
  22. package/dist/data/record-info.test.d.ts +2 -0
  23. package/dist/data/record-info.test.d.ts.map +1 -0
  24. package/dist/data/record-info.test.js +61 -0
  25. package/dist/data/record-info.test.js.map +1 -0
  26. package/dist/explorer/raw-collection-records.d.ts +2 -0
  27. package/dist/explorer/raw-collection-records.d.ts.map +1 -1
  28. package/dist/explorer/raw-collection-records.js +19 -14
  29. package/dist/explorer/raw-collection-records.js.map +1 -1
  30. package/dist/explorer/raw-reads.d.ts +2 -2
  31. package/dist/explorer/raw-reads.d.ts.map +1 -1
  32. package/dist/explorer/raw-reads.js +15 -2
  33. package/dist/explorer/raw-reads.js.map +1 -1
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +2 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/retrieval/compose-row.d.ts.map +1 -1
  39. package/dist/retrieval/compose-row.js +10 -0
  40. package/dist/retrieval/compose-row.js.map +1 -1
  41. package/dist/retrieval/fetch-item.d.ts.map +1 -1
  42. package/dist/retrieval/fetch-item.js +11 -0
  43. package/dist/retrieval/fetch-item.js.map +1 -1
  44. package/dist/retrieval/fetch-narratives.d.ts.map +1 -1
  45. package/dist/retrieval/fetch-narratives.js +2 -9
  46. package/dist/retrieval/fetch-narratives.js.map +1 -1
  47. package/dist/retrieval/fetch-record-info.d.ts +33 -0
  48. package/dist/retrieval/fetch-record-info.d.ts.map +1 -0
  49. package/dist/retrieval/fetch-record-info.js +39 -0
  50. package/dist/retrieval/fetch-record-info.js.map +1 -0
  51. package/dist/seeds/build-manifest.js +1 -1
  52. package/dist/seeds/build-manifest.js.map +1 -1
  53. package/dist/seeds/default-seed-spec.d.ts.map +1 -1
  54. package/dist/seeds/default-seed-spec.js +0 -4
  55. package/dist/seeds/default-seed-spec.js.map +1 -1
  56. package/dist/tests/fetch-item.test.js +39 -0
  57. package/dist/tests/fetch-item.test.js.map +1 -1
  58. package/dist/tests/fetch-list.test.js +81 -0
  59. package/dist/tests/fetch-list.test.js.map +1 -1
  60. package/dist/tests/fetch-narratives.test.js +1 -1
  61. package/dist/tests/fetch-narratives.test.js.map +1 -1
  62. package/dist/tests/fetch-record-info.test.d.ts +2 -0
  63. package/dist/tests/fetch-record-info.test.d.ts.map +1 -0
  64. package/dist/tests/fetch-record-info.test.js +67 -0
  65. package/dist/tests/fetch-record-info.test.js.map +1 -0
  66. package/docs/MEMORIX-CATALOX-CONTRACTS.md +5 -5
  67. package/docs/MEMORIX-DATABASE-CONVENTIONS.md +0 -3
  68. package/package.json +1 -1
  69. package/catalox-seeds/inputs/entity-descriptors/variabilities-groups.json +0 -303
  70. package/catalox-seeds/inputs/item-descriptors/variabilities-group-detail-item.json +0 -87
  71. package/catalox-seeds/inputs/list-descriptors/variabilities-groups-main-list.json +0 -43
  72. package/catalox-seeds/inputs/memorix-descriptors.bundle.json +0 -1500
  73. package/catalox-seeds/inputs/memorix-item-descriptors.catalog.json +0 -283
  74. package/catalox-seeds/inputs/memorix-item-descriptors.items.json +0 -280
  75. package/catalox-seeds/inputs/memorix-list-descriptors.catalog.json +0 -207
  76. package/catalox-seeds/inputs/memorix-list-descriptors.items.json +0 -234
  77. package/catalox-seeds/inputs/memorix-object-type-descriptors.catalog.json +0 -1005
  78. package/catalox-seeds/inputs/memorix-object-type-descriptors.items.json +0 -1002
package/README.md CHANGED
@@ -289,6 +289,62 @@ const page = await fetchMemorixSliceRecords(client, {
289
289
  });
290
290
  ```
291
291
 
292
+ ## Record display names
293
+
294
+ Human-readable titles for operators come from **`record.concept.name`** on stored documents (see [MEMORIX-DATABASE-CONVENTIONS.md](./docs/MEMORIX-DATABASE-CONVENTIONS.md)). Memorix read-tier APIs resolve display names centrally — hosts must not scan top-level `id`, `name`, or `data.*` fields.
295
+
296
+ ```typescript
297
+ import { resolveMemorixRecordDisplayName } from "@x12i/memorix-retrieval";
298
+
299
+ const displayName = resolveMemorixRecordDisplayName(record, {
300
+ preferredLocale: "en", // optional; for localized concept.name objects
301
+ });
302
+ // string | undefined — never falls back to record id or identity fields
303
+ ```
304
+
305
+ **Supported `concept.name` shapes:** plain string, string array (first non-empty entry), localized object (`{ en: "...", he: "..." }`).
306
+
307
+ **List and item responses** include optional top-level `displayName` (and list rows also expose `recordId` when resolvable):
308
+
309
+ - `fetchMemorixList` / `fetchMemorixListForEntity` → `rows[].displayName`
310
+ - `fetchMemorixItem` / `fetchMemorixItemForEntity` → `displayName`
311
+ - `listMemorixEntityContentTypeDocuments` → `documents[].displayName`
312
+
313
+ When `concept.name` is absent, `displayName` is omitted. Show the record id separately for disambiguation — do not substitute it as the title.
314
+
315
+ ### Easy retrieval helpers
316
+
317
+ Use these when you need identity + display name without re-implementing Memorix rules:
318
+
319
+ ```typescript
320
+ import {
321
+ fetchMemorixRecordInfoForEntity,
322
+ resolveMemorixRecordInfo,
323
+ resolveMemorixRecordInfoFromRow,
324
+ resolveMemorixRecordInfoFromItem,
325
+ formatMemorixRecordLabel,
326
+ } from "@x12i/memorix-retrieval";
327
+
328
+ // One call: lookup by entity + recordId / entityId / eventId / knowledgeId
329
+ const info = await fetchMemorixRecordInfoForEntity(client, {
330
+ entityName: "vulnerability-groups",
331
+ recordId: "69d216ed358778e93215788d",
332
+ });
333
+ // → { recordId, displayName?, entityId?, identityField?, identityValue? }
334
+
335
+ // From list rows (already stamped with displayName)
336
+ const fromRow = resolveMemorixRecordInfoFromRow(listRow);
337
+
338
+ // From item responses
339
+ const fromItem = resolveMemorixRecordInfoFromItem(itemResponse);
340
+
341
+ // Picker / journal label — name when present, else id
342
+ const label = formatMemorixRecordLabel(info);
343
+ const withSuffix = formatMemorixRecordLabel(info, { includeIdSuffix: true });
344
+ ```
345
+
346
+ **Search:** `memorixLabelSearchFilter` (used by raw entity reads) includes `concept.name` for string-valued names. Localized-object search is best-effort on the `concept.name` path only.
347
+
292
348
  ## Record identity
293
349
 
294
350
  ```typescript
@@ -384,27 +384,6 @@
384
384
  "xdrAgentStatus",
385
385
  "potentialImpactLevel"
386
386
  ]
387
- },
388
- "vulnerabilityGroup": {
389
- "targetEntity": "variabilities-groups",
390
- "type": "manyToOne",
391
- "source": {
392
- "contentType": "snapshots",
393
- "path": "sourceFacts.values.pluginId.rawValue"
394
- },
395
- "target": {
396
- "contentType": "snapshots",
397
- "path": "sourceFacts.values.plugin_id.rawValue"
398
- },
399
- "defaultMode": "extendFields",
400
- "targetFields": [
401
- "groupId",
402
- "pluginName",
403
- "severity",
404
- "affectedEntitiesCount",
405
- "riskLevel",
406
- "priorityScore"
407
- ]
408
387
  }
409
388
  }
410
389
  }
@@ -5,42 +5,35 @@
5
5
  "catalogs": {
6
6
  "memorix-object-type-descriptors": [
7
7
  "assets",
8
- "vulnerabilities",
9
- "variabilities-groups"
8
+ "topology-subnets",
9
+ "vulnerabilities"
10
10
  ],
11
11
  "memorix-list-descriptors": [
12
12
  "assets-main-list",
13
+ "topology-subnets-main-list",
13
14
  "vulnerabilities-main-list",
14
15
  "critical-vulnerabilities-list",
15
- "variabilities-groups-main-list",
16
16
  "memorix-workspace-records-list"
17
17
  ],
18
18
  "memorix-item-descriptors": [
19
19
  "asset-detail-item",
20
- "vulnerability-detail-item",
21
- "variabilities-group-detail-item"
20
+ "topology-subnet-detail-item",
21
+ "vulnerability-detail-item"
22
22
  ]
23
23
  },
24
24
  "files": [
25
25
  "entity-descriptors/assets.json",
26
- "entity-descriptors/variabilities-groups.json",
26
+ "entity-descriptors/topology-subnets.json",
27
27
  "entity-descriptors/vulnerabilities.json",
28
28
  "item-descriptors/asset-detail-item.json",
29
- "item-descriptors/variabilities-group-detail-item.json",
29
+ "item-descriptors/topology-subnet-detail-item.json",
30
30
  "item-descriptors/vulnerability-detail-item.json",
31
31
  "list-descriptors/assets-main-list.json",
32
32
  "list-descriptors/critical-vulnerabilities-list.json",
33
- "list-descriptors/variabilities-groups-main-list.json",
33
+ "list-descriptors/topology-subnets-main-list.json",
34
34
  "list-descriptors/vulnerabilities-main-list.json",
35
35
  "list-descriptors/memorix-workspace-records-list.json",
36
36
  "memorix-catalog-ids.json",
37
- "memorix-descriptors.bundle.json",
38
- "memorix-object-type-descriptors.catalog.json",
39
- "memorix-object-type-descriptors.items.json",
40
- "memorix-item-descriptors.catalog.json",
41
- "memorix-item-descriptors.items.json",
42
- "memorix-list-descriptors.catalog.json",
43
- "memorix-list-descriptors.items.json",
44
37
  "scope.json"
45
38
  ]
46
39
  }
@@ -2,7 +2,7 @@
2
2
  "presetVersion": 1,
3
3
  "id": "memorix-retrieval-descriptors",
4
4
  "name": "Memorix retrieval descriptors",
5
- "description": "Entity, list, and item descriptors for @x12i/memorix-retrieval (from catalox-seeds/inputs/). assets and variabilities-groups target memorix-entities; vulnerabilities target memorix-events. All items share scope.domains/network+vulnerabilities and scope.agents/neo.",
5
+ "description": "Entity, list, and item descriptors for @x12i/memorix-retrieval (from catalox-seeds/inputs/). assets and topology-subnets target memorix-entities; vulnerabilities target memorix-events. All items share scope.domains/network+vulnerabilities and scope.agents/neo.",
6
6
  "catalogs": [
7
7
  {
8
8
  "catalogId": "memorix-object-type-descriptors",
@@ -721,322 +721,6 @@
721
721
  "objectType": "topology-subnets"
722
722
  }
723
723
  },
724
- {
725
- "catalogId": "memorix-object-type-descriptors",
726
- "scope": {
727
- "domains": [
728
- "network",
729
- "vulnerabilities"
730
- ],
731
- "agents": [
732
- "neo"
733
- ]
734
- },
735
- "data": {
736
- "id": "variabilities-groups",
737
- "defaultListDescriptorId": "variabilities-groups-main-list",
738
- "defaultItemDescriptorId": "variabilities-group-detail-item",
739
- "target": "entity",
740
- "collectionPrefix": "variabilities-groups",
741
- "identity": {
742
- "allowedIdFields": [
743
- "identity.recordId",
744
- "identity.targetId"
745
- ],
746
- "requiredExactlyOne": true,
747
- "defaultIdField": "identity.recordId"
748
- },
749
- "defaults": {
750
- "canonicalContentType": "snapshots",
751
- "dataRoot": "data",
752
- "effectiveDatePath": "lifecycle.capturedAt",
753
- "fallbackEffectiveDatePaths": [
754
- "capturedAt",
755
- "snapshot.capturedAt",
756
- "data.enrichedAt",
757
- "data.enrichment.enrichedAt"
758
- ]
759
- },
760
- "contentTypes": {
761
- "snapshots": {
762
- "postfix": "snapshots",
763
- "collection": "variabilities-groups-snapshots",
764
- "dataRoot": "data",
765
- "isCanonical": true,
766
- "effectiveDatePath": "lifecycle.capturedAt",
767
- "fallbackEffectiveDatePaths": [
768
- "capturedAt",
769
- "snapshot.capturedAt",
770
- "data.enrichedAt",
771
- "data.enrichment.enrichedAt"
772
- ]
773
- }
774
- },
775
- "properties": {
776
- "groupId": {
777
- "label": "Group ID",
778
- "source": {
779
- "contentType": "snapshots",
780
- "path": "sourceFacts.values.id.rawValue"
781
- },
782
- "humanReadable": true,
783
- "sortable": true,
784
- "filterable": true,
785
- "list": true,
786
- "item": true,
787
- "valueType": "string"
788
- },
789
- "type": {
790
- "label": "Type",
791
- "source": {
792
- "contentType": "snapshots",
793
- "path": "sourceFacts.values.type.rawValue"
794
- },
795
- "humanReadable": true,
796
- "sortable": true,
797
- "filterable": true,
798
- "list": true,
799
- "item": true,
800
- "valueType": "string"
801
- },
802
- "pluginId": {
803
- "label": "Plugin ID",
804
- "source": {
805
- "contentType": "snapshots",
806
- "path": "sourceFacts.values.plugin_id.rawValue"
807
- },
808
- "humanReadable": true,
809
- "sortable": true,
810
- "filterable": true,
811
- "list": true,
812
- "item": true,
813
- "valueType": "number"
814
- },
815
- "pluginName": {
816
- "label": "Plugin Name",
817
- "source": {
818
- "contentType": "snapshots",
819
- "path": "data.name"
820
- },
821
- "humanReadable": true,
822
- "sortable": true,
823
- "filterable": true,
824
- "list": true,
825
- "item": true,
826
- "valueType": "string"
827
- },
828
- "pluginFamily": {
829
- "label": "Plugin Family",
830
- "source": {
831
- "contentType": "snapshots",
832
- "path": "data.vulnerability_family"
833
- },
834
- "humanReadable": true,
835
- "sortable": true,
836
- "filterable": true,
837
- "list": true,
838
- "item": true,
839
- "valueType": "string"
840
- },
841
- "severity": {
842
- "label": "Severity",
843
- "source": {
844
- "contentType": "snapshots",
845
- "path": "data.severity"
846
- },
847
- "humanReadable": true,
848
- "sortable": true,
849
- "filterable": true,
850
- "list": true,
851
- "item": true,
852
- "valueType": "string"
853
- },
854
- "affectedEntities": {
855
- "label": "Affected Entities",
856
- "source": {
857
- "contentType": "snapshots",
858
- "path": "associatedData.affectedAssets"
859
- },
860
- "humanReadable": true,
861
- "sortable": false,
862
- "filterable": true,
863
- "list": false,
864
- "item": true,
865
- "valueType": "array"
866
- },
867
- "affectedEntitiesCount": {
868
- "label": "Affected Entities Count",
869
- "source": {
870
- "contentType": "snapshots",
871
- "path": "associatedData.affectedAssets"
872
- },
873
- "humanReadable": true,
874
- "sortable": false,
875
- "filterable": false,
876
- "list": true,
877
- "item": true,
878
- "valueType": "array",
879
- "format": "count"
880
- },
881
- "source": {
882
- "label": "Source",
883
- "source": {
884
- "contentType": "snapshots",
885
- "path": "data.source"
886
- },
887
- "humanReadable": true,
888
- "sortable": true,
889
- "filterable": true,
890
- "list": false,
891
- "item": true,
892
- "valueType": "string"
893
- },
894
- "cveId": {
895
- "label": "CVE",
896
- "source": {
897
- "contentType": "snapshots",
898
- "path": "data.cveId"
899
- },
900
- "humanReadable": true,
901
- "sortable": true,
902
- "filterable": true,
903
- "list": true,
904
- "item": true,
905
- "valueType": "string"
906
- },
907
- "riskLevel": {
908
- "label": "Risk Level",
909
- "source": {
910
- "contentType": "snapshots",
911
- "path": "data.enrichment.riskLevel"
912
- },
913
- "humanReadable": true,
914
- "sortable": true,
915
- "filterable": true,
916
- "list": true,
917
- "item": true,
918
- "valueType": "string"
919
- },
920
- "priorityScore": {
921
- "label": "Priority Score",
922
- "source": {
923
- "contentType": "snapshots",
924
- "path": "data.enrichment.priorityScore"
925
- },
926
- "humanReadable": true,
927
- "sortable": true,
928
- "filterable": true,
929
- "list": true,
930
- "item": true,
931
- "valueType": "number"
932
- },
933
- "compositeScore": {
934
- "label": "Composite Score",
935
- "source": {
936
- "contentType": "snapshots",
937
- "path": "data.enrichment.compositeScore"
938
- },
939
- "humanReadable": true,
940
- "sortable": true,
941
- "filterable": true,
942
- "list": true,
943
- "item": true,
944
- "valueType": "number"
945
- },
946
- "epss": {
947
- "label": "EPSS",
948
- "source": {
949
- "contentType": "snapshots",
950
- "path": "data.enrichment.epss.epss"
951
- },
952
- "humanReadable": true,
953
- "sortable": true,
954
- "filterable": true,
955
- "list": true,
956
- "item": true,
957
- "valueType": "number"
958
- },
959
- "knownExploited": {
960
- "label": "Known Exploited",
961
- "source": {
962
- "contentType": "snapshots",
963
- "path": "data.enrichment.kev.isKnownExploited"
964
- },
965
- "humanReadable": true,
966
- "sortable": true,
967
- "filterable": true,
968
- "list": true,
969
- "item": true,
970
- "valueType": "boolean"
971
- },
972
- "cvssBaseScore": {
973
- "label": "CVSS Base Score",
974
- "source": {
975
- "contentType": "snapshots",
976
- "path": "data.enrichment.cvss.baseScore"
977
- },
978
- "humanReadable": true,
979
- "sortable": true,
980
- "filterable": true,
981
- "list": true,
982
- "item": true,
983
- "valueType": "number"
984
- },
985
- "cvssVector": {
986
- "label": "CVSS Vector",
987
- "source": {
988
- "contentType": "snapshots",
989
- "path": "data.enrichment.cvss.cvssVector"
990
- },
991
- "humanReadable": true,
992
- "sortable": false,
993
- "filterable": true,
994
- "list": false,
995
- "item": true,
996
- "valueType": "string"
997
- },
998
- "enrichedAt": {
999
- "label": "Enriched At",
1000
- "source": {
1001
- "contentType": "snapshots",
1002
- "path": "data.enrichedAt"
1003
- },
1004
- "humanReadable": true,
1005
- "sortable": true,
1006
- "filterable": true,
1007
- "list": false,
1008
- "item": true,
1009
- "valueType": "datetime"
1010
- }
1011
- },
1012
- "relations": {
1013
- "groupVulnerabilities": {
1014
- "type": "oneToMany",
1015
- "source": {
1016
- "contentType": "snapshots",
1017
- "path": "sourceFacts.values.plugin_id.rawValue"
1018
- },
1019
- "target": {
1020
- "contentType": "snapshots",
1021
- "path": "sourceFacts.values.pluginId.rawValue"
1022
- },
1023
- "defaultMode": "array",
1024
- "defaultArrayProperty": "vulnerabilities",
1025
- "targetFields": [
1026
- "vulnerabilityId",
1027
- "assetIp",
1028
- "pluginName",
1029
- "severity",
1030
- "riskLevel",
1031
- "priorityScore"
1032
- ],
1033
- "targetObjectType": "vulnerabilities"
1034
- }
1035
- },
1036
- "schemaVersion": "memorix.objectTypeDescriptor.v2",
1037
- "objectType": "variabilities-groups"
1038
- }
1039
- },
1040
724
  {
1041
725
  "catalogId": "memorix-object-type-descriptors",
1042
726
  "scope": {
@@ -1433,27 +1117,6 @@
1433
1117
  "potentialImpactLevel"
1434
1118
  ],
1435
1119
  "targetObjectType": "assets"
1436
- },
1437
- "vulnerabilityGroup": {
1438
- "type": "manyToOne",
1439
- "source": {
1440
- "contentType": "snapshots",
1441
- "path": "sourceFacts.values.pluginId.rawValue"
1442
- },
1443
- "target": {
1444
- "contentType": "snapshots",
1445
- "path": "sourceFacts.values.plugin_id.rawValue"
1446
- },
1447
- "defaultMode": "extendFields",
1448
- "targetFields": [
1449
- "groupId",
1450
- "pluginName",
1451
- "severity",
1452
- "affectedEntitiesCount",
1453
- "riskLevel",
1454
- "priorityScore"
1455
- ],
1456
- "targetObjectType": "variabilities-groups"
1457
1120
  }
1458
1121
  },
1459
1122
  "schemaVersion": "memorix.objectTypeDescriptor.v2",
@@ -1921,61 +1584,6 @@
1921
1584
  "target": "event"
1922
1585
  }
1923
1586
  },
1924
- {
1925
- "catalogId": "memorix-list-descriptors",
1926
- "scope": {
1927
- "domains": [
1928
- "network",
1929
- "vulnerabilities"
1930
- ],
1931
- "agents": [
1932
- "neo"
1933
- ]
1934
- },
1935
- "data": {
1936
- "id": "variabilities-groups-main-list",
1937
- "entity": "variabilities-groups",
1938
- "title": "Vulnerability Groups",
1939
- "leadingContentType": "snapshots",
1940
- "pagination": {
1941
- "enabled": true,
1942
- "defaultLimit": 50,
1943
- "maxLimit": 200
1944
- },
1945
- "filters": [],
1946
- "fields": [
1947
- "groupId",
1948
- "pluginName",
1949
- "pluginFamily",
1950
- "severity",
1951
- "affectedEntitiesCount",
1952
- "cveId",
1953
- "riskLevel",
1954
- "priorityScore",
1955
- "epss",
1956
- "knownExploited"
1957
- ],
1958
- "extensions": [],
1959
- "includeRelations": [],
1960
- "allowedSorts": [
1961
- "groupId",
1962
- "pluginId",
1963
- "pluginName",
1964
- "pluginFamily",
1965
- "severity",
1966
- "riskLevel",
1967
- "priorityScore",
1968
- "epss",
1969
- "knownExploited",
1970
- "cvssBaseScore"
1971
- ],
1972
- "defaultSort": {
1973
- "property": "priorityScore",
1974
- "direction": "desc"
1975
- },
1976
- "allowSortDrivenLeadingOverride": false
1977
- }
1978
- },
1979
1587
  {
1980
1588
  "catalogId": "memorix-list-descriptors",
1981
1589
  "scope": {
@@ -2369,105 +1977,6 @@
2369
1977
  }
2370
1978
  }
2371
1979
  },
2372
- {
2373
- "catalogId": "memorix-item-descriptors",
2374
- "scope": {
2375
- "domains": [
2376
- "network",
2377
- "vulnerabilities"
2378
- ],
2379
- "agents": [
2380
- "neo"
2381
- ]
2382
- },
2383
- "data": {
2384
- "id": "variabilities-group-detail-item",
2385
- "entity": "variabilities-groups",
2386
- "title": "Vulnerability Group Detail",
2387
- "identity": {
2388
- "idField": "identity.recordId"
2389
- },
2390
- "contentTypes": [
2391
- {
2392
- "contentType": "snapshots",
2393
- "required": true,
2394
- "multiMatch": {
2395
- "strategy": "last",
2396
- "effectiveDatePath": "lifecycle.capturedAt",
2397
- "fallbackEffectiveDatePaths": [
2398
- "capturedAt",
2399
- "snapshot.capturedAt",
2400
- "data.enrichedAt",
2401
- "data.enrichment.enrichedAt"
2402
- ]
2403
- }
2404
- }
2405
- ],
2406
- "sections": [
2407
- {
2408
- "id": "summary",
2409
- "title": "Summary",
2410
- "fields": [
2411
- "groupId",
2412
- "type",
2413
- "pluginId",
2414
- "pluginName",
2415
- "pluginFamily",
2416
- "severity",
2417
- "cveId",
2418
- "source"
2419
- ]
2420
- },
2421
- {
2422
- "id": "affectedEntities",
2423
- "title": "Affected Entities",
2424
- "fields": [
2425
- "affectedEntities",
2426
- "affectedEntitiesCount"
2427
- ]
2428
- },
2429
- {
2430
- "id": "risk",
2431
- "title": "Risk",
2432
- "fields": [
2433
- "riskLevel",
2434
- "priorityScore",
2435
- "compositeScore"
2436
- ]
2437
- },
2438
- {
2439
- "id": "threatIntelligence",
2440
- "title": "Threat Intelligence",
2441
- "fields": [
2442
- "epss",
2443
- "knownExploited",
2444
- "cvssBaseScore",
2445
- "cvssVector",
2446
- "enrichedAt"
2447
- ]
2448
- }
2449
- ],
2450
- "includeRelations": [
2451
- {
2452
- "relation": "groupVulnerabilities",
2453
- "mode": "array",
2454
- "arrayProperty": "vulnerabilities",
2455
- "limit": 200,
2456
- "fields": [
2457
- "vulnerabilityId",
2458
- "assetIp",
2459
- "pluginName",
2460
- "severity",
2461
- "riskLevel",
2462
- "priorityScore"
2463
- ]
2464
- }
2465
- ],
2466
- "content": {
2467
- "allowed": false
2468
- }
2469
- }
2470
- },
2471
1980
  {
2472
1981
  "catalogId": "memorix-item-descriptors",
2473
1982
  "scope": {
@@ -90,6 +90,10 @@ export type FetchMemorixListRequest = {
90
90
  auditRead?: boolean;
91
91
  includeSourceRefs?: boolean;
92
92
  };
93
+ export type MemorixRecordDisplayFields = {
94
+ recordId?: string;
95
+ displayName?: string;
96
+ };
93
97
  export type FetchMemorixListResponse = {
94
98
  listId: string;
95
99
  entity: string;
@@ -106,7 +110,7 @@ export type FetchMemorixListResponse = {
106
110
  direction: "asc" | "desc";
107
111
  contentType: string;
108
112
  };
109
- rows: Array<Record<string, unknown>>;
113
+ rows: Array<Record<string, unknown> & MemorixRecordDisplayFields>;
110
114
  issues?: import("../errors/issues.js").MemorixRetrievalIssue[];
111
115
  source?: import("../runtime/source-provenance.js").MemorixRuntimeSourceRef;
112
116
  sources?: import("../runtime/source-provenance.js").MemorixRuntimeSourceRef[];
@@ -191,6 +195,7 @@ export type FetchMemorixItemResponse = {
191
195
  entityId?: string;
192
196
  eventId?: string;
193
197
  knowledgeId?: string;
198
+ displayName?: string;
194
199
  sections: Array<{
195
200
  id: string;
196
201
  title: string;