@mitre/hdf-schema 3.3.1 → 3.4.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.
package/dist/ts/hdf.ts CHANGED
@@ -383,9 +383,11 @@ export interface Integrity {
383
383
  /**
384
384
  * The hash algorithm used for the checksum.
385
385
  *
386
- * Supported cryptographic hash algorithms for checksums and integrity verification.
386
+ * Supported cryptographic hash algorithms for checksums and integrity verification. blake3
387
+ * covers container-image and other artifact digests that use it.
387
388
  */
388
389
  export enum HashAlgorithm {
390
+ Blake3 = "blake3",
389
391
  Sha256 = "sha256",
390
392
  Sha384 = "sha384",
391
393
  Sha512 = "sha512",
@@ -416,6 +418,8 @@ export enum HashAlgorithm {
416
418
  * for the first amendment.
417
419
  *
418
420
  * Cryptographic checksum for verifying the referenced document's integrity.
421
+ *
422
+ * Cryptographic checksum of the referenced artifact for integrity verification.
419
423
  */
420
424
  export interface Checksum {
421
425
  /**
@@ -981,8 +985,12 @@ export interface Identity {
981
985
  identifier: string;
982
986
  /**
983
987
  * The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
984
- * 'system' for automated systems, 'simple' for basic string identifiers without additional
985
- * classification, or 'other' for custom identity systems.
988
+ * 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
989
+ * for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
990
+ * apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
991
+ * satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
992
+ * 'simple' for basic string identifiers without additional classification, or 'other' for
993
+ * custom identity systems.
986
994
  */
987
995
  type: IdentityType;
988
996
  [property: string]: any;
@@ -990,10 +998,15 @@ export interface Identity {
990
998
 
991
999
  /**
992
1000
  * The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
993
- * 'system' for automated systems, 'simple' for basic string identifiers without additional
994
- * classification, or 'other' for custom identity systems.
1001
+ * 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
1002
+ * for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
1003
+ * apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
1004
+ * satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
1005
+ * 'simple' for basic string identifiers without additional classification, or 'other' for
1006
+ * custom identity systems.
995
1007
  */
996
1008
  export enum IdentityType {
1009
+ Agent = "agent",
997
1010
  Email = "email",
998
1011
  Other = "other",
999
1012
  Simple = "simple",
@@ -1499,9 +1512,11 @@ export interface SupportedPlatform {
1499
1512
  * A physical or virtual server, workstation, or network device.
1500
1513
  *
1501
1514
  * Base properties shared by all component types. Extends the Target concept with stable
1502
- * identity, external references, and SBOM embedding.
1515
+ * identity, external references, generalized BOM attachment (boms[]), and unified artifact
1516
+ * integrity (integrity[]).
1503
1517
  *
1504
- * A static container image (not running).
1518
+ * A static container image (not running). Image integrity — formerly the 'digest' field —
1519
+ * is expressed via the shared Base_Component.integrity array.
1505
1520
  *
1506
1521
  * A running container instance.
1507
1522
  *
@@ -1515,17 +1530,33 @@ export interface SupportedPlatform {
1515
1530
  *
1516
1531
  * A running application or API (for DAST tools).
1517
1532
  *
1518
- * A software artifact or dependency (for SCA tools).
1533
+ * A software artifact or dependency (for SCA tools). Package integrity — formerly the
1534
+ * 'checksum' field — is expressed via the shared Base_Component.integrity array.
1519
1535
  *
1520
1536
  * A network segment or network device.
1521
1537
  *
1522
1538
  * A database instance.
1539
+ *
1540
+ * A thin AI-model component: identity and correlation only (parallel to Host_Component's
1541
+ * fqdn/ip). All model detail — architecture, parameter count, serialization format, lineage
1542
+ * — lives in an attached ai-model BOM (boms[]), never on the component itself.
1543
+ *
1544
+ * A thin dataset component: identity and correlation only, symmetric with
1545
+ * AI_Model_Component. All dataset detail — record count, format, classification, lineage —
1546
+ * lives in an attached dataset BOM (boms[]), never on the component itself.
1523
1547
  */
1524
1548
  export interface Component {
1525
1549
  /**
1526
1550
  * Names of baselines that apply to this component.
1527
1551
  */
1528
1552
  baselineRefs?: string[];
1553
+ /**
1554
+ * Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType),
1555
+ * each carried by passthrough (ref/document) or normalized. Replaces the former
1556
+ * sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an
1557
+ * ai-model BOM). See primitives/bom.schema.json.
1558
+ */
1559
+ boms?: BillOfMaterials[];
1529
1560
  /**
1530
1561
  * Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in
1531
1562
  * hdf-results. Enables cross-document correlation, diffing, and data flow references.
@@ -1545,6 +1576,15 @@ export interface Component {
1545
1576
  * System-specific overrides for baseline input values.
1546
1577
  */
1547
1578
  inputOverrides?: InputOverride[];
1579
+ /**
1580
+ * Cryptographic integrity of this component's underlying artifact — model weights or
1581
+ * shards, dataset archive, container image, or package bytes. An array supports
1582
+ * multi-file/sharded artifacts. This is the single, generic home for artifact/subject
1583
+ * integrity across all component types (it replaced the former per-type Container_Image
1584
+ * digest and Artifact checksum fields). Distinct from BOM-document integrity (Bom.hashes[])
1585
+ * and from the document tamper-evidence Integrity type.
1586
+ */
1587
+ integrity?: Checksum[];
1548
1588
  /**
1549
1589
  * Optional key-value labels for flexible grouping. Well-known keys: system, component,
1550
1590
  * environment, region, team. Values must be strings.
@@ -1559,33 +1599,37 @@ export interface Component {
1559
1599
  * different teams manage different parts of a system.
1560
1600
  */
1561
1601
  owner?: Identity;
1562
- /**
1563
- * Embedded CycloneDX or SPDX SBOM document representing this component's software
1564
- * inventory. The sbomFormat field determines which format constraints apply.
1565
- */
1566
- sbom?: any;
1567
- /**
1568
- * Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
1569
- */
1570
- sbomFormat?: SBOMFormat;
1571
- /**
1572
- * URI reference to an external CycloneDX or SPDX SBOM document for this component. May be a
1573
- * relative path, absolute URI, or fragment identifier.
1574
- */
1575
- sbomRef?: string;
1576
1602
  /**
1577
1603
  * Label selector to match targets belonging to this component during migration. Targets
1578
1604
  * with matching labels are automatically included.
1579
1605
  */
1580
1606
  targetSelector?: { [key: string]: string };
1581
1607
  /**
1582
- * Component type discriminator. Same values as Target types.
1608
+ * Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
1609
+ * AI subject components whose detail lives in an attached ai-model / dataset BOM).
1583
1610
  */
1584
1611
  type: TargetType;
1585
1612
  /**
1586
- * Fully qualified domain name.
1613
+ * Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS
1614
+ * host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or
1615
+ * workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only
1616
+ * from a source that carries directory membership.
1617
+ */
1618
+ domain?: string;
1619
+ /**
1620
+ * Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname'
1621
+ * (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the
1622
+ * schema does not enforce case so source fidelity is preserved on round-trip.
1587
1623
  */
1588
1624
  fqdn?: string;
1625
+ /**
1626
+ * Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct
1627
+ * from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain
1628
+ * (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS
1629
+ * suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name
1630
+ * the source reports; do not derive it from the FQDN.
1631
+ */
1632
+ hostname?: string;
1589
1633
  /**
1590
1634
  * IP address of the host.
1591
1635
  */
@@ -1602,10 +1646,6 @@ export interface Component {
1602
1646
  * Operating system version.
1603
1647
  */
1604
1648
  osVersion?: string;
1605
- /**
1606
- * Image digest for immutable reference.
1607
- */
1608
- digest?: string;
1609
1649
  /**
1610
1650
  * Container image ID.
1611
1651
  */
@@ -1654,6 +1694,11 @@ export interface Component {
1654
1694
  * Package version.
1655
1695
  *
1656
1696
  * Database version.
1697
+ *
1698
+ * Model version, revision, or checkpoint tag.
1699
+ *
1700
+ * Dataset version, release identifier, or — for highly dynamic datasets — a timestamped
1701
+ * release marker.
1657
1702
  */
1658
1703
  version?: string;
1659
1704
  /**
@@ -1700,10 +1745,6 @@ export interface Component {
1700
1745
  * Environment. Example: 'production', 'staging', 'development'.
1701
1746
  */
1702
1747
  environment?: string;
1703
- /**
1704
- * Package checksum for verification.
1705
- */
1706
- checksum?: string;
1707
1748
  /**
1708
1749
  * Package manager. Example: 'npm', 'maven', 'pip', 'nuget'.
1709
1750
  */
@@ -1732,6 +1773,318 @@ export interface Component {
1732
1773
  * Database port.
1733
1774
  */
1734
1775
  port?: number;
1776
+ /**
1777
+ * Provider/registry identifier for the model. Examples: a Hugging Face repo id
1778
+ * ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model
1779
+ * BOM(s) and to lineage references from other models.
1780
+ */
1781
+ modelId?: string;
1782
+ /**
1783
+ * Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id
1784
+ * ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to
1785
+ * its dataset BOM(s) and to datasetRefs from ai-model components.
1786
+ */
1787
+ datasetId?: string;
1788
+ [property: string]: any;
1789
+ }
1790
+
1791
+ export interface BillOfMaterials {
1792
+ /**
1793
+ * The manifest kind. Determines which normalized type-extension (model/dataset/packages)
1794
+ * may appear.
1795
+ */
1796
+ bomType: string;
1797
+ /**
1798
+ * Normalized dataset extension. Permitted only when bomType is dataset.
1799
+ */
1800
+ dataset?: DatasetBOMExtension;
1801
+ /**
1802
+ * Passthrough by embedding: the native manifest carried opaquely (e.g. a raw CycloneDX or
1803
+ * SPDX object). HDF does not constrain its internal shape — full manifest validation is a
1804
+ * tool-level concern.
1805
+ */
1806
+ document?: { [key: string]: any };
1807
+ /**
1808
+ * Source manifest format the BOM was produced from or references. Examples: cyclonedx,
1809
+ * cyclonedx-ml, spdx, spdx-ai, huggingface, croissant. Free-form so new formats need no
1810
+ * schema change; the converter that emits the BOM owns the value.
1811
+ */
1812
+ format: string;
1813
+ /**
1814
+ * Integrity of the carried BOM *document* itself (the referenced/embedded manifest file),
1815
+ * NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model
1816
+ * weights, dataset archive) is a component-level concern, not carried here. Subject
1817
+ * identity is inherited from the host component/system; per-node identity lives in the
1818
+ * type-extension.
1819
+ */
1820
+ hashes?: Checksum[];
1821
+ /**
1822
+ * Optional license of the BOM document as a whole (SPDX license expression). Nullable and
1823
+ * often meaningless (CBOM algorithms, many HBOM parts have no license); per-node licenses
1824
+ * live in the type-extension, not here.
1825
+ */
1826
+ license?: null | string;
1827
+ /**
1828
+ * Normalized ai-model extension. Permitted only when bomType is ai-model.
1829
+ */
1830
+ model?: AIModelBOMExtension;
1831
+ /**
1832
+ * Normalized sbom extension: the flattened software package inventory. Permitted only when
1833
+ * bomType is sbom.
1834
+ */
1835
+ packages?: SBOMPackage[];
1836
+ /**
1837
+ * Passthrough by reference: URI (relative path, absolute URI, or fragment) to the native
1838
+ * manifest document. Present for externally-hosted BOMs.
1839
+ */
1840
+ ref?: string;
1841
+ /**
1842
+ * Optional stable identifier for this BOM document (e.g. CycloneDX serialNumber, SPDX
1843
+ * documentNamespace). Correlates the same BOM across evidence packages.
1844
+ */
1845
+ uniqueId?: string;
1846
+ }
1847
+
1848
+ /**
1849
+ * Normalized dataset extension. Permitted only when bomType is dataset.
1850
+ *
1851
+ * Normalized dataset fields (SPDX 3.0 Dataset profile / MLCommons Croissant aligned). All
1852
+ * optional; open for partial-fidelity passthrough of unmapped native fields. Symmetric with
1853
+ * AI_Model_Extension: carries the dataset's own lineage (baseDatasetRefs/derivation) just
1854
+ * as the model extension carries baseModelRef/adaptationType.
1855
+ */
1856
+ export interface DatasetBOMExtension {
1857
+ /**
1858
+ * References to the source dataset(s) this one was derived from — a dataset componentId, or
1859
+ * a dataset BOM uniqueId/URI when no component exists. The lineage edge parallel to
1860
+ * ai-model's baseModelRef; the base dataset may carry its own dataset BOM.
1861
+ */
1862
+ baseDatasetRefs?: string[];
1863
+ /**
1864
+ * Sensitivity/classification of the data. Examples: public, internal, confidential, pii,
1865
+ * phi.
1866
+ */
1867
+ dataClassification?: string;
1868
+ /**
1869
+ * Physical format of the dataset. Examples: parquet, csv, jsonl, tfrecord, webdataset.
1870
+ */
1871
+ datasetFormat?: string;
1872
+ /**
1873
+ * Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
1874
+ * adaptationType. Minimal + extensible: filtered (subset by rule), augmented
1875
+ * (added/synthesized records), merged (union of sources), sampled (statistical draw).
1876
+ */
1877
+ derivation?: DatasetDerivationType;
1878
+ /**
1879
+ * Free-text statement of the dataset's intended use (CISA/G7 minimum element).
1880
+ */
1881
+ intendedUse?: string;
1882
+ /**
1883
+ * Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text,
1884
+ * image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical
1885
+ * encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not
1886
+ * physical format. String or array of strings.
1887
+ */
1888
+ modality?: string[] | string;
1889
+ /**
1890
+ * Free-text description of the dataset's origin and collection process (CISA/G7 'Dataset
1891
+ * provenance'; SPDX 3.0 dataset_dataCollectionProcess).
1892
+ */
1893
+ provenance?: string;
1894
+ /**
1895
+ * Number of records/examples in the dataset.
1896
+ */
1897
+ recordCount?: number;
1898
+ /**
1899
+ * Free-text summary of the dataset's statistical properties (CISA/G7 minimum element;
1900
+ * open-ended by design). Intentionally free-text and will remain so permanently:
1901
+ * recordCount is the one structured statistic, and restructuring this into an object later
1902
+ * would break existing consumers, so it stays a string (additive-only).
1903
+ */
1904
+ statisticalProperties?: string;
1905
+ [property: string]: any;
1906
+ }
1907
+
1908
+ /**
1909
+ * Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
1910
+ * adaptationType. Minimal + extensible: filtered (subset by rule), augmented
1911
+ * (added/synthesized records), merged (union of sources), sampled (statistical draw).
1912
+ */
1913
+ export enum DatasetDerivationType {
1914
+ Augmented = "augmented",
1915
+ Filtered = "filtered",
1916
+ Merged = "merged",
1917
+ Sampled = "sampled",
1918
+ }
1919
+
1920
+ /**
1921
+ * Normalized ai-model extension. Permitted only when bomType is ai-model.
1922
+ *
1923
+ * Normalized AI-model fields, aligned to the CISA/G7 'SBOM for AI' minimum elements. All
1924
+ * fields optional (standards-correct; only the EU AI Act makes a subset binding for
1925
+ * high-risk/GPAI). Left open (additionalProperties: true) so a converter can carry unmapped
1926
+ * native fields opaquely (partial-fidelity pattern). Subject name/version are inherited
1927
+ * from the host aiModel component, not repeated here.
1928
+ */
1929
+ export interface AIModelBOMExtension {
1930
+ /**
1931
+ * Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
1932
+ * vocabulary (the only typed lineage enum in the ecosystem).
1933
+ */
1934
+ adaptationType?: ModelAdaptationType;
1935
+ /**
1936
+ * Reference to the base model this one was adapted from (e.g. a Hugging Face repo id or
1937
+ * purl). Correlates the lineage edge; the base model itself may carry its own ai-model BOM.
1938
+ */
1939
+ baseModelRef?: string;
1940
+ /**
1941
+ * References to the training/evaluation datasets this model was produced from — preferably
1942
+ * a dataset component's componentId (correlating to a first-class dataset subject rather
1943
+ * than duplicating dataset detail, per ADR §10), or a dataset BOM uniqueId/URI when no
1944
+ * component exists.
1945
+ */
1946
+ datasetRefs?: string[];
1947
+ /**
1948
+ * Training hyper-parameters as name/value pairs (epochs, learning-rate, batch-size). This
1949
+ * is the set of training knobs, NOT the model's trainable parameterCount — the two are
1950
+ * routinely conflated. CISA/G7 'Model properties: hyper-parameters'; SPDX 3.0
1951
+ * ai_hyperparameter.
1952
+ */
1953
+ hyperparameters?: Hyperparameter[];
1954
+ /**
1955
+ * Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
1956
+ * context/sequence length, and tokenizer. Sourced from CycloneDX
1957
+ * modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
1958
+ */
1959
+ inputOutput?: InputOutput;
1960
+ /**
1961
+ * Free-text statement of intended use and out-of-scope uses (CISA/G7 minimum element).
1962
+ */
1963
+ intendedUse?: string;
1964
+ /**
1965
+ * Model's learning/training paradigm. Free-text because the value set varies across
1966
+ * standards. Examples: supervised, self-supervised, semi-supervised, reinforcement.
1967
+ * Cross-standard intersection: SPDX 3.0 ai_typeOfModel ∩ CycloneDX
1968
+ * modelParameters.approach.type ∩ CISA/G7 learning type.
1969
+ */
1970
+ learningApproach?: string;
1971
+ /**
1972
+ * Model architecture family. Examples: transformer, cnn, diffusion, mixture-of-experts.
1973
+ */
1974
+ modelArchitecture?: string;
1975
+ /**
1976
+ * Total trainable parameter count. No native CycloneDX/SPDX field exists; first-class here
1977
+ * because the EU AI Act keys GPAI obligations off model scale.
1978
+ */
1979
+ parameterCount?: number;
1980
+ /**
1981
+ * Reported evaluation metrics as name/value pairs. Values are free-text because metrics are
1982
+ * heterogeneous (accuracy, f1, BLEU, latency). The item stays open (additionalProperties:
1983
+ * true) to carry native CycloneDX slice/confidenceInterval detail opaquely. Cross-standard
1984
+ * intersection: SPDX 3.0 ai_metric ∩ CycloneDX quantitativeAnalysis.performanceMetrics ∩
1985
+ * CISA/G7 KPI cluster.
1986
+ */
1987
+ performanceMetrics?: PerformanceMetric[];
1988
+ /**
1989
+ * On-disk weight serialization format. Security-critical yet under-modeled by BOM specs:
1990
+ * pickle/pytorch permits arbitrary code execution on load; safetensors does not. Examples:
1991
+ * safetensors, pytorch, gguf, onnx, tensorflow.
1992
+ */
1993
+ serializationFormat?: string;
1994
+ /**
1995
+ * The ML task the model performs. Free-text. Examples: text-classification,
1996
+ * sentiment-analysis, object-detection, translation. Sourced from CycloneDX
1997
+ * modelParameters.task (SPDX 3.0 ai_domain is domain-level/adjacent, not the task); CISA/G7
1998
+ * intended-application.
1999
+ */
2000
+ task?: string;
2001
+ [property: string]: any;
2002
+ }
2003
+
2004
+ /**
2005
+ * Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
2006
+ * vocabulary (the only typed lineage enum in the ecosystem).
2007
+ */
2008
+ export enum ModelAdaptationType {
2009
+ Adapter = "adapter",
2010
+ Finetune = "finetune",
2011
+ Merge = "merge",
2012
+ Quantized = "quantized",
2013
+ }
2014
+
2015
+ export interface Hyperparameter {
2016
+ /**
2017
+ * Hyper-parameter name. Examples: epochs, learning-rate, batch-size.
2018
+ */
2019
+ name?: string;
2020
+ /**
2021
+ * Hyper-parameter value (free-text).
2022
+ */
2023
+ value?: string;
2024
+ [property: string]: any;
2025
+ }
2026
+
2027
+ /**
2028
+ * Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
2029
+ * context/sequence length, and tokenizer. Sourced from CycloneDX
2030
+ * modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
2031
+ */
2032
+ export interface InputOutput {
2033
+ /**
2034
+ * Maximum context/sequence length the model accepts, in tokens.
2035
+ */
2036
+ contextLength?: number;
2037
+ /**
2038
+ * Input/output data types. Examples: string, byte[], float32, image.
2039
+ */
2040
+ dataTypes?: string[];
2041
+ /**
2042
+ * Input/output modalities. String or array of strings. Examples: text, image, audio.
2043
+ * Symmetric with Dataset_Extension.modality.
2044
+ */
2045
+ modality?: string[] | string;
2046
+ /**
2047
+ * Tokenizer used for the model's input encoding. Examples: BPE, SentencePiece, tiktoken.
2048
+ */
2049
+ tokenizer?: string;
2050
+ [property: string]: any;
2051
+ }
2052
+
2053
+ export interface PerformanceMetric {
2054
+ /**
2055
+ * Metric name. Examples: accuracy, f1, BLEU, latency.
2056
+ */
2057
+ name?: string;
2058
+ /**
2059
+ * Reported metric value, free-text because metrics are heterogeneous (percentages, scores,
2060
+ * milliseconds).
2061
+ */
2062
+ value?: string;
2063
+ [property: string]: any;
2064
+ }
2065
+
2066
+ /**
2067
+ * A single normalized software package entry within an sbom BOM. Minimal identity + version
2068
+ * for querying/diffing; the full native record remains available via passthrough
2069
+ * (document/ref).
2070
+ */
2071
+ export interface SBOMPackage {
2072
+ /**
2073
+ * SPDX license identifiers/expressions for this package.
2074
+ */
2075
+ licenses?: string[];
2076
+ /**
2077
+ * Package name.
2078
+ */
2079
+ name: string;
2080
+ /**
2081
+ * Package URL (purl) — the preferred cross-BOM identity key when present.
2082
+ */
2083
+ purl?: string;
2084
+ /**
2085
+ * Package version.
2086
+ */
2087
+ version?: string;
1735
2088
  [property: string]: any;
1736
2089
  }
1737
2090
 
@@ -1773,17 +2126,11 @@ export enum CloudProvider {
1773
2126
  }
1774
2127
 
1775
2128
  /**
1776
- * Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
1777
- */
1778
- export enum SBOMFormat {
1779
- Cyclonedx = "cyclonedx",
1780
- Spdx = "spdx",
1781
- }
1782
-
1783
- /**
1784
- * Component type discriminator. Same values as Target types.
2129
+ * Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
2130
+ * AI subject components whose detail lives in an attached ai-model / dataset BOM).
1785
2131
  */
1786
2132
  export enum TargetType {
2133
+ AIModel = "aiModel",
1787
2134
  Application = "application",
1788
2135
  Artifact = "artifact",
1789
2136
  CloudAccount = "cloudAccount",
@@ -1792,6 +2139,7 @@ export enum TargetType {
1792
2139
  ContainerInstance = "containerInstance",
1793
2140
  ContainerPlatform = "containerPlatform",
1794
2141
  Database = "database",
2142
+ Dataset = "dataset",
1795
2143
  Host = "host",
1796
2144
  Network = "network",
1797
2145
  Repository = "repository",
@@ -1875,7 +2223,18 @@ export interface Runner {
1875
2223
  */
1876
2224
  containerImage?: string;
1877
2225
  /**
1878
- * The hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
2226
+ * The directory domain the runner system belongs to (Active Directory / NetBIOS / LDAP),
2227
+ * NOT the DNS suffix of the FQDN. Example: 'CORP'.
2228
+ */
2229
+ domain?: string;
2230
+ /**
2231
+ * The fully qualified domain name of the runner system, when known. Distinct from the short
2232
+ * 'hostname'; kept separate for the same reason as on host components (an FQDN is not
2233
+ * reliably decomposable). Example: 'ci-runner-01.build.example.com'.
2234
+ */
2235
+ fqdn?: string;
2236
+ /**
2237
+ * The short hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
1879
2238
  * 'k8s-node-worker-03'.
1880
2239
  */
1881
2240
  hostname?: string;
@@ -2175,7 +2534,8 @@ export interface HDFComparison {
2175
2534
  */
2176
2535
  comparisonMode: ComparisonMode;
2177
2536
  /**
2178
- * Comparison of components between two system documents. Used in systemDrift mode.
2537
+ * Comparison of components between two system documents. Used in systemDrift mode. A
2538
+ * component's BOM changes surface as a field change on its boms[] here.
2179
2539
  */
2180
2540
  componentDiffs?: ComponentDiff[];
2181
2541
  /**
@@ -2203,7 +2563,11 @@ export interface HDFComparison {
2203
2563
  */
2204
2564
  matching?: MatchingConfig;
2205
2565
  /**
2206
- * Comparison of packages between two SBOMs. Used in systemDrift mode for SBOM comparison.
2566
+ * RESERVED — not emitted by the current systemDrift comparison. systemDrift now reports a
2567
+ * component's BOM changes as a field change on its boms[] (see componentDiffs), and
2568
+ * standalone SBOM package diffing is a separate `hdf diff <sbom> <sbom>` output shape. This
2569
+ * field is retained for a future normalized package-level diff; consumers must not expect
2570
+ * it from today's systemDrift output.
2207
2571
  */
2208
2572
  packageDiffs?: PackageDiff[];
2209
2573
  /**
@@ -2615,15 +2979,22 @@ export interface MatchingConfig {
2615
2979
  }
2616
2980
 
2617
2981
  /**
2618
- * Comparison of a single package between two SBOM versions, matched by purl.
2982
+ * Comparison of a single BOM node between two BOM versions, matched by purl (software) or
2983
+ * identifier (models, datasets, hardware, crypto).
2619
2984
  */
2620
2985
  export interface PackageDiff {
2986
+ /**
2987
+ * Generic identity key for matching a BOM node across versions when no purl applies — e.g.
2988
+ * a Hugging Face model ref, dataset uniqueId, crypto algorithm OID, or hardware part
2989
+ * number. At least one of purl or identifier is required.
2990
+ */
2991
+ identifier?: string;
2621
2992
  /**
2622
2993
  * License identifiers for this package.
2623
2994
  */
2624
2995
  licenses?: string[];
2625
2996
  /**
2626
- * Human-readable package name.
2997
+ * Human-readable node name.
2627
2998
  */
2628
2999
  name?: string;
2629
3000
  /**
@@ -2635,9 +3006,11 @@ export interface PackageDiff {
2635
3006
  */
2636
3007
  oldVersion?: string;
2637
3008
  /**
2638
- * Package URL (purl) used as the identity key for matching across SBOMs.
3009
+ * Package URL (purl) — the preferred identity key for matching software packages across
3010
+ * BOMs. Optional: BOM nodes without a purl (AI models, datasets, hardware parts, crypto
3011
+ * algorithms) key on identifier instead.
2639
3012
  */
2640
- purl: string;
3013
+ purl?: string;
2641
3014
  /**
2642
3015
  * The state of this package: added (new in new SBOM), removed (absent from new SBOM),
2643
3016
  * updated (version changed), unchanged.
@@ -2938,6 +3311,13 @@ export interface HDFSystem {
2938
3311
  * Current Authorization to Operate (ATO) status.
2939
3312
  */
2940
3313
  authorizationStatus?: AuthorizationStatus;
3314
+ /**
3315
+ * System-scoped Bills of Materials whose subject is the authorization boundary rather than
3316
+ * a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM).
3317
+ * Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See
3318
+ * primitives/bom.schema.json.
3319
+ */
3320
+ boms?: BillOfMaterials[];
2941
3321
  /**
2942
3322
  * Description of the system's authorization boundary. Example: network CIDR blocks, cloud
2943
3323
  * VPC IDs, physical locations.
@@ -2949,7 +3329,8 @@ export interface HDFSystem {
2949
3329
  categorizationLevel?: CategorizationLevel;
2950
3330
  /**
2951
3331
  * System components within the authorization boundary. Uses the full polymorphic Component
2952
- * type with stable identity (componentId), external references, and SBOM support.
3332
+ * type with stable identity (componentId), external references, and generalized BOM
3333
+ * attachment (boms[]).
2953
3334
  */
2954
3335
  components: Component[];
2955
3336
  /**
@@ -3476,6 +3857,13 @@ export interface HDFEvidencePackage {
3476
3857
  * Description of the evidence package's purpose and scope.
3477
3858
  */
3478
3859
  description?: string;
3860
+ /**
3861
+ * References to external native-format evidence (log/telemetry corpora and other artifacts)
3862
+ * carried by URI + integrity hash + format discriminator, without recreating the data
3863
+ * inside HDF. Logs in ECS/OCSF/etc. are legitimate accreditation evidence; HDF indexes them
3864
+ * here rather than transcoding them.
3865
+ */
3866
+ externalEvidence?: ExternalEvidenceReference[];
3479
3867
  /**
3480
3868
  * Information about the tool that generated this document.
3481
3869
  */
@@ -3580,7 +3968,7 @@ export interface SBOMCoverage {
3580
3968
  }
3581
3969
 
3582
3970
  /**
3583
- * A reference to an HDF document or SBOM included in the evidence package.
3971
+ * A reference to an HDF document or BOM/manifest included in the evidence package.
3584
3972
  */
3585
3973
  export interface ContentReference {
3586
3974
  /**
@@ -3610,14 +3998,100 @@ export interface ContentReference {
3610
3998
  /**
3611
3999
  * The type of HDF document being referenced.
3612
4000
  *
3613
- * The type of document referenced in the evidence package.
4001
+ * The type of document referenced in the evidence package. 'bom' covers any
4002
+ * Bill-of-Materials/manifest document (SBOM, AI model/dataset, and reserved future kinds) —
4003
+ * its specific kind is carried by the referenced document's bomType, not by a per-kind
4004
+ * Content_Type value.
3614
4005
  */
3615
4006
  export enum ContentType {
4007
+ BOM = "bom",
3616
4008
  HdfAmendments = "hdf-amendments",
3617
4009
  HdfBaseline = "hdf-baseline",
3618
4010
  HdfComparison = "hdf-comparison",
3619
4011
  HdfPlan = "hdf-plan",
3620
4012
  HdfResults = "hdf-results",
3621
4013
  HdfSystem = "hdf-system",
3622
- Sbom = "sbom",
4014
+ }
4015
+
4016
+ /**
4017
+ * A reference to external native-format evidence (log/telemetry corpus or other artifact)
4018
+ * carried by URI + integrity hash + format discriminator. Reference-only: the artifact is
4019
+ * never embedded (corpora can be huge) or transcoded (that would be lossy) — it stays
4020
+ * canonical in its native format and HDF acts as the structured index.
4021
+ */
4022
+ export interface ExternalEvidenceReference {
4023
+ /**
4024
+ * Cryptographic checksum of the referenced artifact for integrity verification.
4025
+ */
4026
+ checksum?: Checksum;
4027
+ /**
4028
+ * Optional human-readable description of this evidence entry.
4029
+ */
4030
+ description?: string;
4031
+ /**
4032
+ * The native format discriminator of the referenced artifact.
4033
+ */
4034
+ format: string;
4035
+ /**
4036
+ * Optional producer-declared version of the format (e.g. ECS '9.4.0', OCSF '1.8.0').
4037
+ * Free-text and untrusted — HDF does not validate it against a registry.
4038
+ */
4039
+ formatVersion?: string;
4040
+ /**
4041
+ * Optional IANA media type describing the on-disk serialization, orthogonal to 'format'
4042
+ * (the semantic standard). Examples: application/x-ndjson, application/json,
4043
+ * application/vnd.apache.parquet, text/csv.
4044
+ */
4045
+ mediaType?: string;
4046
+ /**
4047
+ * Optional descriptive metadata about the referenced corpus. Does not affect integrity.
4048
+ */
4049
+ metadata?: ExternalEvidenceMetadata;
4050
+ /**
4051
+ * URI to the external native-format evidence artifact (log/telemetry corpus, etc.). Can be
4052
+ * a relative path or absolute URL. The data stays canonical in its native format — HDF
4053
+ * references it, never parses or transcodes it.
4054
+ */
4055
+ uri: string;
4056
+ [property: string]: any;
4057
+ }
4058
+
4059
+ /**
4060
+ * Optional descriptive metadata about the referenced corpus. Does not affect integrity.
4061
+ *
4062
+ * Descriptive metadata about a referenced external evidence corpus. Does not affect
4063
+ * integrity.
4064
+ */
4065
+ export interface ExternalEvidenceMetadata {
4066
+ /**
4067
+ * The tool/pipeline that collected or produced the corpus. Example: 'aws-security-lake',
4068
+ * 'elastic-agent'.
4069
+ */
4070
+ collector?: string;
4071
+ /**
4072
+ * Approximate number of records/events in the referenced corpus.
4073
+ */
4074
+ recordCount?: number;
4075
+ /**
4076
+ * The time window the referenced evidence covers.
4077
+ */
4078
+ timeRange?: ExternalEvidenceTimeRange;
4079
+ [property: string]: any;
4080
+ }
4081
+
4082
+ /**
4083
+ * The time window the referenced evidence covers.
4084
+ *
4085
+ * The time window a referenced external evidence corpus covers.
4086
+ */
4087
+ export interface ExternalEvidenceTimeRange {
4088
+ /**
4089
+ * End of the time window the corpus covers (ISO 8601).
4090
+ */
4091
+ end?: Date;
4092
+ /**
4093
+ * Start of the time window the corpus covers (ISO 8601).
4094
+ */
4095
+ start?: Date;
4096
+ [property: string]: any;
3623
4097
  }