@mitre/hdf-schema 3.3.2 → 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.d.ts CHANGED
@@ -380,9 +380,11 @@ export interface Integrity {
380
380
  /**
381
381
  * The hash algorithm used for the checksum.
382
382
  *
383
- * Supported cryptographic hash algorithms for checksums and integrity verification.
383
+ * Supported cryptographic hash algorithms for checksums and integrity verification. blake3
384
+ * covers container-image and other artifact digests that use it.
384
385
  */
385
386
  export declare enum HashAlgorithm {
387
+ Blake3 = "blake3",
386
388
  Sha256 = "sha256",
387
389
  Sha384 = "sha384",
388
390
  Sha512 = "sha512"
@@ -412,6 +414,8 @@ export declare enum HashAlgorithm {
412
414
  * for the first amendment.
413
415
  *
414
416
  * Cryptographic checksum for verifying the referenced document's integrity.
417
+ *
418
+ * Cryptographic checksum of the referenced artifact for integrity verification.
415
419
  */
416
420
  export interface Checksum {
417
421
  /**
@@ -965,18 +969,27 @@ export interface Identity {
965
969
  identifier: string;
966
970
  /**
967
971
  * The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
968
- * 'system' for automated systems, 'simple' for basic string identifiers without additional
969
- * classification, or 'other' for custom identity systems.
972
+ * 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
973
+ * for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
974
+ * apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
975
+ * satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
976
+ * 'simple' for basic string identifiers without additional classification, or 'other' for
977
+ * custom identity systems.
970
978
  */
971
979
  type: IdentityType;
972
980
  [property: string]: any;
973
981
  }
974
982
  /**
975
983
  * The type of identifier. Use 'email' for email addresses, 'username' for user accounts,
976
- * 'system' for automated systems, 'simple' for basic string identifiers without additional
977
- * classification, or 'other' for custom identity systems.
984
+ * 'system' for deterministic non-interactive automation (CI jobs, cron, scanners), 'agent'
985
+ * for an AI/LLM agent acting with autonomy — kept distinct from 'system' so auditors can
986
+ * apply AI-specific scrutiny (e.g. 'an LLM proposed this' vs a deterministic job) and
987
+ * satisfy AI-source disclosure under frameworks like the EU AI Act and NIST AI RMF,
988
+ * 'simple' for basic string identifiers without additional classification, or 'other' for
989
+ * custom identity systems.
978
990
  */
979
991
  export declare enum IdentityType {
992
+ Agent = "agent",
980
993
  Email = "email",
981
994
  Other = "other",
982
995
  Simple = "simple",
@@ -1468,9 +1481,11 @@ export interface SupportedPlatform {
1468
1481
  * A physical or virtual server, workstation, or network device.
1469
1482
  *
1470
1483
  * Base properties shared by all component types. Extends the Target concept with stable
1471
- * identity, external references, and SBOM embedding.
1484
+ * identity, external references, generalized BOM attachment (boms[]), and unified artifact
1485
+ * integrity (integrity[]).
1472
1486
  *
1473
- * A static container image (not running).
1487
+ * A static container image (not running). Image integrity — formerly the 'digest' field —
1488
+ * is expressed via the shared Base_Component.integrity array.
1474
1489
  *
1475
1490
  * A running container instance.
1476
1491
  *
@@ -1484,17 +1499,33 @@ export interface SupportedPlatform {
1484
1499
  *
1485
1500
  * A running application or API (for DAST tools).
1486
1501
  *
1487
- * A software artifact or dependency (for SCA tools).
1502
+ * A software artifact or dependency (for SCA tools). Package integrity — formerly the
1503
+ * 'checksum' field — is expressed via the shared Base_Component.integrity array.
1488
1504
  *
1489
1505
  * A network segment or network device.
1490
1506
  *
1491
1507
  * A database instance.
1508
+ *
1509
+ * A thin AI-model component: identity and correlation only (parallel to Host_Component's
1510
+ * fqdn/ip). All model detail — architecture, parameter count, serialization format, lineage
1511
+ * — lives in an attached ai-model BOM (boms[]), never on the component itself.
1512
+ *
1513
+ * A thin dataset component: identity and correlation only, symmetric with
1514
+ * AI_Model_Component. All dataset detail — record count, format, classification, lineage —
1515
+ * lives in an attached dataset BOM (boms[]), never on the component itself.
1492
1516
  */
1493
1517
  export interface Component {
1494
1518
  /**
1495
1519
  * Names of baselines that apply to this component.
1496
1520
  */
1497
1521
  baselineRefs?: string[];
1522
+ /**
1523
+ * Component-scoped Bills of Materials (SBOM, ai-model, dataset, or any reserved bomType),
1524
+ * each carried by passthrough (ref/document) or normalized. Replaces the former
1525
+ * sbom/sbomRef/sbomFormat trio; a component may carry several BOMs (e.g. an SBOM plus an
1526
+ * ai-model BOM). See primitives/bom.schema.json.
1527
+ */
1528
+ boms?: BillOfMaterials[];
1498
1529
  /**
1499
1530
  * Stable UUID (RFC 4122) for this component. Required in hdf-system documents, optional in
1500
1531
  * hdf-results. Enables cross-document correlation, diffing, and data flow references.
@@ -1516,6 +1547,15 @@ export interface Component {
1516
1547
  * System-specific overrides for baseline input values.
1517
1548
  */
1518
1549
  inputOverrides?: InputOverride[];
1550
+ /**
1551
+ * Cryptographic integrity of this component's underlying artifact — model weights or
1552
+ * shards, dataset archive, container image, or package bytes. An array supports
1553
+ * multi-file/sharded artifacts. This is the single, generic home for artifact/subject
1554
+ * integrity across all component types (it replaced the former per-type Container_Image
1555
+ * digest and Artifact checksum fields). Distinct from BOM-document integrity (Bom.hashes[])
1556
+ * and from the document tamper-evidence Integrity type.
1557
+ */
1558
+ integrity?: Checksum[];
1519
1559
  /**
1520
1560
  * Optional key-value labels for flexible grouping. Well-known keys: system, component,
1521
1561
  * environment, region, team. Values must be strings.
@@ -1532,20 +1572,6 @@ export interface Component {
1532
1572
  * different teams manage different parts of a system.
1533
1573
  */
1534
1574
  owner?: Identity;
1535
- /**
1536
- * Embedded CycloneDX or SPDX SBOM document representing this component's software
1537
- * inventory. The sbomFormat field determines which format constraints apply.
1538
- */
1539
- sbom?: any;
1540
- /**
1541
- * Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
1542
- */
1543
- sbomFormat?: SBOMFormat;
1544
- /**
1545
- * URI reference to an external CycloneDX or SPDX SBOM document for this component. May be a
1546
- * relative path, absolute URI, or fragment identifier.
1547
- */
1548
- sbomRef?: string;
1549
1575
  /**
1550
1576
  * Label selector to match targets belonging to this component during migration. Targets
1551
1577
  * with matching labels are automatically included.
@@ -1554,13 +1580,31 @@ export interface Component {
1554
1580
  [key: string]: string;
1555
1581
  };
1556
1582
  /**
1557
- * Component type discriminator. Same values as Target types.
1583
+ * Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
1584
+ * AI subject components whose detail lives in an attached ai-model / dataset BOM).
1558
1585
  */
1559
1586
  type: TargetType;
1560
1587
  /**
1561
- * Fully qualified domain name.
1588
+ * Directory domain the host is a member of — Active Directory / NetBIOS / LDAP domain (ECS
1589
+ * host.domain semantics), NOT necessarily the DNS suffix of the FQDN. A standalone or
1590
+ * workgroup host has a hostname but no domain. Not derivable from the FQDN; populate only
1591
+ * from a source that carries directory membership.
1592
+ */
1593
+ domain?: string;
1594
+ /**
1595
+ * Fully qualified domain name (e.g. 'web01.prod.example.com'). Distinct from 'hostname'
1596
+ * (short) and 'domain' (directory domain). ECS recommends storing this lowercase; the
1597
+ * schema does not enforce case so source fidelity is preserved on round-trip.
1562
1598
  */
1563
1599
  fqdn?: string;
1600
+ /**
1601
+ * Short, OS-reported host name (the unqualified machine name, e.g. 'web01'). Kept distinct
1602
+ * from 'fqdn' because an FQDN is not reliably decomposable into hostname + domain
1603
+ * (standalone/workgroup hosts have no domain; a directory domain is not the FQDN's DNS
1604
+ * suffix). Aligns with ECS host.hostname and DISA STIG CKL HOST_NAME. Store the short name
1605
+ * the source reports; do not derive it from the FQDN.
1606
+ */
1607
+ hostname?: string;
1564
1608
  /**
1565
1609
  * IP address of the host.
1566
1610
  */
@@ -1577,10 +1621,6 @@ export interface Component {
1577
1621
  * Operating system version.
1578
1622
  */
1579
1623
  osVersion?: string;
1580
- /**
1581
- * Image digest for immutable reference.
1582
- */
1583
- digest?: string;
1584
1624
  /**
1585
1625
  * Container image ID.
1586
1626
  */
@@ -1629,6 +1669,11 @@ export interface Component {
1629
1669
  * Package version.
1630
1670
  *
1631
1671
  * Database version.
1672
+ *
1673
+ * Model version, revision, or checkpoint tag.
1674
+ *
1675
+ * Dataset version, release identifier, or — for highly dynamic datasets — a timestamped
1676
+ * release marker.
1632
1677
  */
1633
1678
  version?: string;
1634
1679
  /**
@@ -1675,10 +1720,6 @@ export interface Component {
1675
1720
  * Environment. Example: 'production', 'staging', 'development'.
1676
1721
  */
1677
1722
  environment?: string;
1678
- /**
1679
- * Package checksum for verification.
1680
- */
1681
- checksum?: string;
1682
1723
  /**
1683
1724
  * Package manager. Example: 'npm', 'maven', 'pip', 'nuget'.
1684
1725
  */
@@ -1707,6 +1748,311 @@ export interface Component {
1707
1748
  * Database port.
1708
1749
  */
1709
1750
  port?: number;
1751
+ /**
1752
+ * Provider/registry identifier for the model. Examples: a Hugging Face repo id
1753
+ * ('meta-llama/Llama-2-7b-hf') or a model purl. Correlates the component to its ai-model
1754
+ * BOM(s) and to lineage references from other models.
1755
+ */
1756
+ modelId?: string;
1757
+ /**
1758
+ * Provider/registry identifier for the dataset. Examples: a Hugging Face dataset repo id
1759
+ * ('HuggingFaceH4/ultrachat_200k'), a DOI, or a dataset purl. Correlates the component to
1760
+ * its dataset BOM(s) and to datasetRefs from ai-model components.
1761
+ */
1762
+ datasetId?: string;
1763
+ [property: string]: any;
1764
+ }
1765
+ export interface BillOfMaterials {
1766
+ /**
1767
+ * The manifest kind. Determines which normalized type-extension (model/dataset/packages)
1768
+ * may appear.
1769
+ */
1770
+ bomType: string;
1771
+ /**
1772
+ * Normalized dataset extension. Permitted only when bomType is dataset.
1773
+ */
1774
+ dataset?: DatasetBOMExtension;
1775
+ /**
1776
+ * Passthrough by embedding: the native manifest carried opaquely (e.g. a raw CycloneDX or
1777
+ * SPDX object). HDF does not constrain its internal shape — full manifest validation is a
1778
+ * tool-level concern.
1779
+ */
1780
+ document?: {
1781
+ [key: string]: any;
1782
+ };
1783
+ /**
1784
+ * Source manifest format the BOM was produced from or references. Examples: cyclonedx,
1785
+ * cyclonedx-ml, spdx, spdx-ai, huggingface, croissant. Free-form so new formats need no
1786
+ * schema change; the converter that emits the BOM owns the value.
1787
+ */
1788
+ format: string;
1789
+ /**
1790
+ * Integrity of the carried BOM *document* itself (the referenced/embedded manifest file),
1791
+ * NOT the integrity of the BOM's subject artifact. Subject/artifact integrity (model
1792
+ * weights, dataset archive) is a component-level concern, not carried here. Subject
1793
+ * identity is inherited from the host component/system; per-node identity lives in the
1794
+ * type-extension.
1795
+ */
1796
+ hashes?: Checksum[];
1797
+ /**
1798
+ * Optional license of the BOM document as a whole (SPDX license expression). Nullable and
1799
+ * often meaningless (CBOM algorithms, many HBOM parts have no license); per-node licenses
1800
+ * live in the type-extension, not here.
1801
+ */
1802
+ license?: null | string;
1803
+ /**
1804
+ * Normalized ai-model extension. Permitted only when bomType is ai-model.
1805
+ */
1806
+ model?: AIModelBOMExtension;
1807
+ /**
1808
+ * Normalized sbom extension: the flattened software package inventory. Permitted only when
1809
+ * bomType is sbom.
1810
+ */
1811
+ packages?: SBOMPackage[];
1812
+ /**
1813
+ * Passthrough by reference: URI (relative path, absolute URI, or fragment) to the native
1814
+ * manifest document. Present for externally-hosted BOMs.
1815
+ */
1816
+ ref?: string;
1817
+ /**
1818
+ * Optional stable identifier for this BOM document (e.g. CycloneDX serialNumber, SPDX
1819
+ * documentNamespace). Correlates the same BOM across evidence packages.
1820
+ */
1821
+ uniqueId?: string;
1822
+ }
1823
+ /**
1824
+ * Normalized dataset extension. Permitted only when bomType is dataset.
1825
+ *
1826
+ * Normalized dataset fields (SPDX 3.0 Dataset profile / MLCommons Croissant aligned). All
1827
+ * optional; open for partial-fidelity passthrough of unmapped native fields. Symmetric with
1828
+ * AI_Model_Extension: carries the dataset's own lineage (baseDatasetRefs/derivation) just
1829
+ * as the model extension carries baseModelRef/adaptationType.
1830
+ */
1831
+ export interface DatasetBOMExtension {
1832
+ /**
1833
+ * References to the source dataset(s) this one was derived from — a dataset componentId, or
1834
+ * a dataset BOM uniqueId/URI when no component exists. The lineage edge parallel to
1835
+ * ai-model's baseModelRef; the base dataset may carry its own dataset BOM.
1836
+ */
1837
+ baseDatasetRefs?: string[];
1838
+ /**
1839
+ * Sensitivity/classification of the data. Examples: public, internal, confidential, pii,
1840
+ * phi.
1841
+ */
1842
+ dataClassification?: string;
1843
+ /**
1844
+ * Physical format of the dataset. Examples: parquet, csv, jsonl, tfrecord, webdataset.
1845
+ */
1846
+ datasetFormat?: string;
1847
+ /**
1848
+ * Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
1849
+ * adaptationType. Minimal + extensible: filtered (subset by rule), augmented
1850
+ * (added/synthesized records), merged (union of sources), sampled (statistical draw).
1851
+ */
1852
+ derivation?: DatasetDerivationType;
1853
+ /**
1854
+ * Free-text statement of the dataset's intended use (CISA/G7 minimum element).
1855
+ */
1856
+ intendedUse?: string;
1857
+ /**
1858
+ * Content modality/kind of the data (CISA/G7 'Dataset content: modality'). Examples: text,
1859
+ * image, tabular, timeseries, audio. DISTINCT from datasetFormat, which is the physical
1860
+ * encoding (parquet/csv). Resolves SPDX 3.0 dataset_datasetType, which is content-kind, not
1861
+ * physical format. String or array of strings.
1862
+ */
1863
+ modality?: string[] | string;
1864
+ /**
1865
+ * Free-text description of the dataset's origin and collection process (CISA/G7 'Dataset
1866
+ * provenance'; SPDX 3.0 dataset_dataCollectionProcess).
1867
+ */
1868
+ provenance?: string;
1869
+ /**
1870
+ * Number of records/examples in the dataset.
1871
+ */
1872
+ recordCount?: number;
1873
+ /**
1874
+ * Free-text summary of the dataset's statistical properties (CISA/G7 minimum element;
1875
+ * open-ended by design). Intentionally free-text and will remain so permanently:
1876
+ * recordCount is the one structured statistic, and restructuring this into an object later
1877
+ * would break existing consumers, so it stays a string (additive-only).
1878
+ */
1879
+ statisticalProperties?: string;
1880
+ [property: string]: any;
1881
+ }
1882
+ /**
1883
+ * Relationship of this dataset to baseDatasetRefs, parallel to the model extension's
1884
+ * adaptationType. Minimal + extensible: filtered (subset by rule), augmented
1885
+ * (added/synthesized records), merged (union of sources), sampled (statistical draw).
1886
+ */
1887
+ export declare enum DatasetDerivationType {
1888
+ Augmented = "augmented",
1889
+ Filtered = "filtered",
1890
+ Merged = "merged",
1891
+ Sampled = "sampled"
1892
+ }
1893
+ /**
1894
+ * Normalized ai-model extension. Permitted only when bomType is ai-model.
1895
+ *
1896
+ * Normalized AI-model fields, aligned to the CISA/G7 'SBOM for AI' minimum elements. All
1897
+ * fields optional (standards-correct; only the EU AI Act makes a subset binding for
1898
+ * high-risk/GPAI). Left open (additionalProperties: true) so a converter can carry unmapped
1899
+ * native fields opaquely (partial-fidelity pattern). Subject name/version are inherited
1900
+ * from the host aiModel component, not repeated here.
1901
+ */
1902
+ export interface AIModelBOMExtension {
1903
+ /**
1904
+ * Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
1905
+ * vocabulary (the only typed lineage enum in the ecosystem).
1906
+ */
1907
+ adaptationType?: ModelAdaptationType;
1908
+ /**
1909
+ * Reference to the base model this one was adapted from (e.g. a Hugging Face repo id or
1910
+ * purl). Correlates the lineage edge; the base model itself may carry its own ai-model BOM.
1911
+ */
1912
+ baseModelRef?: string;
1913
+ /**
1914
+ * References to the training/evaluation datasets this model was produced from — preferably
1915
+ * a dataset component's componentId (correlating to a first-class dataset subject rather
1916
+ * than duplicating dataset detail, per ADR §10), or a dataset BOM uniqueId/URI when no
1917
+ * component exists.
1918
+ */
1919
+ datasetRefs?: string[];
1920
+ /**
1921
+ * Training hyper-parameters as name/value pairs (epochs, learning-rate, batch-size). This
1922
+ * is the set of training knobs, NOT the model's trainable parameterCount — the two are
1923
+ * routinely conflated. CISA/G7 'Model properties: hyper-parameters'; SPDX 3.0
1924
+ * ai_hyperparameter.
1925
+ */
1926
+ hyperparameters?: Hyperparameter[];
1927
+ /**
1928
+ * Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
1929
+ * context/sequence length, and tokenizer. Sourced from CycloneDX
1930
+ * modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
1931
+ */
1932
+ inputOutput?: InputOutput;
1933
+ /**
1934
+ * Free-text statement of intended use and out-of-scope uses (CISA/G7 minimum element).
1935
+ */
1936
+ intendedUse?: string;
1937
+ /**
1938
+ * Model's learning/training paradigm. Free-text because the value set varies across
1939
+ * standards. Examples: supervised, self-supervised, semi-supervised, reinforcement.
1940
+ * Cross-standard intersection: SPDX 3.0 ai_typeOfModel ∩ CycloneDX
1941
+ * modelParameters.approach.type ∩ CISA/G7 learning type.
1942
+ */
1943
+ learningApproach?: string;
1944
+ /**
1945
+ * Model architecture family. Examples: transformer, cnn, diffusion, mixture-of-experts.
1946
+ */
1947
+ modelArchitecture?: string;
1948
+ /**
1949
+ * Total trainable parameter count. No native CycloneDX/SPDX field exists; first-class here
1950
+ * because the EU AI Act keys GPAI obligations off model scale.
1951
+ */
1952
+ parameterCount?: number;
1953
+ /**
1954
+ * Reported evaluation metrics as name/value pairs. Values are free-text because metrics are
1955
+ * heterogeneous (accuracy, f1, BLEU, latency). The item stays open (additionalProperties:
1956
+ * true) to carry native CycloneDX slice/confidenceInterval detail opaquely. Cross-standard
1957
+ * intersection: SPDX 3.0 ai_metric ∩ CycloneDX quantitativeAnalysis.performanceMetrics ∩
1958
+ * CISA/G7 KPI cluster.
1959
+ */
1960
+ performanceMetrics?: PerformanceMetric[];
1961
+ /**
1962
+ * On-disk weight serialization format. Security-critical yet under-modeled by BOM specs:
1963
+ * pickle/pytorch permits arbitrary code execution on load; safetensors does not. Examples:
1964
+ * safetensors, pytorch, gguf, onnx, tensorflow.
1965
+ */
1966
+ serializationFormat?: string;
1967
+ /**
1968
+ * The ML task the model performs. Free-text. Examples: text-classification,
1969
+ * sentiment-analysis, object-detection, translation. Sourced from CycloneDX
1970
+ * modelParameters.task (SPDX 3.0 ai_domain is domain-level/adjacent, not the task); CISA/G7
1971
+ * intended-application.
1972
+ */
1973
+ task?: string;
1974
+ [property: string]: any;
1975
+ }
1976
+ /**
1977
+ * Lineage relationship to baseModelRef, adopting Hugging Face's base_model_relation
1978
+ * vocabulary (the only typed lineage enum in the ecosystem).
1979
+ */
1980
+ export declare enum ModelAdaptationType {
1981
+ Adapter = "adapter",
1982
+ Finetune = "finetune",
1983
+ Merge = "merge",
1984
+ Quantized = "quantized"
1985
+ }
1986
+ export interface Hyperparameter {
1987
+ /**
1988
+ * Hyper-parameter name. Examples: epochs, learning-rate, batch-size.
1989
+ */
1990
+ name?: string;
1991
+ /**
1992
+ * Hyper-parameter value (free-text).
1993
+ */
1994
+ value?: string;
1995
+ [property: string]: any;
1996
+ }
1997
+ /**
1998
+ * Model input/output properties (CISA/G7 minimum element): I/O data types, modality,
1999
+ * context/sequence length, and tokenizer. Sourced from CycloneDX
2000
+ * modelParameters.inputs[].format / outputs[].format. All sub-fields optional.
2001
+ */
2002
+ export interface InputOutput {
2003
+ /**
2004
+ * Maximum context/sequence length the model accepts, in tokens.
2005
+ */
2006
+ contextLength?: number;
2007
+ /**
2008
+ * Input/output data types. Examples: string, byte[], float32, image.
2009
+ */
2010
+ dataTypes?: string[];
2011
+ /**
2012
+ * Input/output modalities. String or array of strings. Examples: text, image, audio.
2013
+ * Symmetric with Dataset_Extension.modality.
2014
+ */
2015
+ modality?: string[] | string;
2016
+ /**
2017
+ * Tokenizer used for the model's input encoding. Examples: BPE, SentencePiece, tiktoken.
2018
+ */
2019
+ tokenizer?: string;
2020
+ [property: string]: any;
2021
+ }
2022
+ export interface PerformanceMetric {
2023
+ /**
2024
+ * Metric name. Examples: accuracy, f1, BLEU, latency.
2025
+ */
2026
+ name?: string;
2027
+ /**
2028
+ * Reported metric value, free-text because metrics are heterogeneous (percentages, scores,
2029
+ * milliseconds).
2030
+ */
2031
+ value?: string;
2032
+ [property: string]: any;
2033
+ }
2034
+ /**
2035
+ * A single normalized software package entry within an sbom BOM. Minimal identity + version
2036
+ * for querying/diffing; the full native record remains available via passthrough
2037
+ * (document/ref).
2038
+ */
2039
+ export interface SBOMPackage {
2040
+ /**
2041
+ * SPDX license identifiers/expressions for this package.
2042
+ */
2043
+ licenses?: string[];
2044
+ /**
2045
+ * Package name.
2046
+ */
2047
+ name: string;
2048
+ /**
2049
+ * Package URL (purl) — the preferred cross-BOM identity key when present.
2050
+ */
2051
+ purl?: string;
2052
+ /**
2053
+ * Package version.
2054
+ */
2055
+ version?: string;
1710
2056
  [property: string]: any;
1711
2057
  }
1712
2058
  /**
@@ -1745,16 +2091,11 @@ export declare enum CloudProvider {
1745
2091
  Other = "other"
1746
2092
  }
1747
2093
  /**
1748
- * Format of the SBOM (embedded or referenced). Required when sbom or sbomRef is present.
1749
- */
1750
- export declare enum SBOMFormat {
1751
- Cyclonedx = "cyclonedx",
1752
- Spdx = "spdx"
1753
- }
1754
- /**
1755
- * Component type discriminator. Same values as Target types.
2094
+ * Component type discriminator. Same values as Target types, plus aiModel and dataset (thin
2095
+ * AI subject components whose detail lives in an attached ai-model / dataset BOM).
1756
2096
  */
1757
2097
  export declare enum TargetType {
2098
+ AIModel = "aiModel",
1758
2099
  Application = "application",
1759
2100
  Artifact = "artifact",
1760
2101
  CloudAccount = "cloudAccount",
@@ -1763,6 +2104,7 @@ export declare enum TargetType {
1763
2104
  ContainerInstance = "containerInstance",
1764
2105
  ContainerPlatform = "containerPlatform",
1765
2106
  Database = "database",
2107
+ Dataset = "dataset",
1766
2108
  Host = "host",
1767
2109
  Network = "network",
1768
2110
  Repository = "repository"
@@ -1843,7 +2185,18 @@ export interface Runner {
1843
2185
  */
1844
2186
  containerImage?: string;
1845
2187
  /**
1846
- * The hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
2188
+ * The directory domain the runner system belongs to (Active Directory / NetBIOS / LDAP),
2189
+ * NOT the DNS suffix of the FQDN. Example: 'CORP'.
2190
+ */
2191
+ domain?: string;
2192
+ /**
2193
+ * The fully qualified domain name of the runner system, when known. Distinct from the short
2194
+ * 'hostname'; kept separate for the same reason as on host components (an FQDN is not
2195
+ * reliably decomposable). Example: 'ci-runner-01.build.example.com'.
2196
+ */
2197
+ fqdn?: string;
2198
+ /**
2199
+ * The short hostname of the runner system. Example: 'ci-runner-01', 'jenkins-agent-03',
1847
2200
  * 'k8s-node-worker-03'.
1848
2201
  */
1849
2202
  hostname?: string;
@@ -2142,7 +2495,8 @@ export interface HDFComparison {
2142
2495
  */
2143
2496
  comparisonMode: ComparisonMode;
2144
2497
  /**
2145
- * Comparison of components between two system documents. Used in systemDrift mode.
2498
+ * Comparison of components between two system documents. Used in systemDrift mode. A
2499
+ * component's BOM changes surface as a field change on its boms[] here.
2146
2500
  */
2147
2501
  componentDiffs?: ComponentDiff[];
2148
2502
  /**
@@ -2172,7 +2526,11 @@ export interface HDFComparison {
2172
2526
  */
2173
2527
  matching?: MatchingConfig;
2174
2528
  /**
2175
- * Comparison of packages between two SBOMs. Used in systemDrift mode for SBOM comparison.
2529
+ * RESERVED — not emitted by the current systemDrift comparison. systemDrift now reports a
2530
+ * component's BOM changes as a field change on its boms[] (see componentDiffs), and
2531
+ * standalone SBOM package diffing is a separate `hdf diff <sbom> <sbom>` output shape. This
2532
+ * field is retained for a future normalized package-level diff; consumers must not expect
2533
+ * it from today's systemDrift output.
2176
2534
  */
2177
2535
  packageDiffs?: PackageDiff[];
2178
2536
  /**
@@ -2570,15 +2928,22 @@ export interface MatchingConfig {
2570
2928
  [property: string]: any;
2571
2929
  }
2572
2930
  /**
2573
- * Comparison of a single package between two SBOM versions, matched by purl.
2931
+ * Comparison of a single BOM node between two BOM versions, matched by purl (software) or
2932
+ * identifier (models, datasets, hardware, crypto).
2574
2933
  */
2575
2934
  export interface PackageDiff {
2935
+ /**
2936
+ * Generic identity key for matching a BOM node across versions when no purl applies — e.g.
2937
+ * a Hugging Face model ref, dataset uniqueId, crypto algorithm OID, or hardware part
2938
+ * number. At least one of purl or identifier is required.
2939
+ */
2940
+ identifier?: string;
2576
2941
  /**
2577
2942
  * License identifiers for this package.
2578
2943
  */
2579
2944
  licenses?: string[];
2580
2945
  /**
2581
- * Human-readable package name.
2946
+ * Human-readable node name.
2582
2947
  */
2583
2948
  name?: string;
2584
2949
  /**
@@ -2590,9 +2955,11 @@ export interface PackageDiff {
2590
2955
  */
2591
2956
  oldVersion?: string;
2592
2957
  /**
2593
- * Package URL (purl) used as the identity key for matching across SBOMs.
2958
+ * Package URL (purl) — the preferred identity key for matching software packages across
2959
+ * BOMs. Optional: BOM nodes without a purl (AI models, datasets, hardware parts, crypto
2960
+ * algorithms) key on identifier instead.
2594
2961
  */
2595
- purl: string;
2962
+ purl?: string;
2596
2963
  /**
2597
2964
  * The state of this package: added (new in new SBOM), removed (absent from new SBOM),
2598
2965
  * updated (version changed), unchanged.
@@ -2883,6 +3250,13 @@ export interface HDFSystem {
2883
3250
  * Current Authorization to Operate (ATO) status.
2884
3251
  */
2885
3252
  authorizationStatus?: AuthorizationStatus;
3253
+ /**
3254
+ * System-scoped Bills of Materials whose subject is the authorization boundary rather than
3255
+ * a single component (e.g. a SaaSBOM of services, a KBOM of cluster inventory, an OBOM).
3256
+ * Component-scoped BOMs (SBOM, ai-model) attach on the component instead. See
3257
+ * primitives/bom.schema.json.
3258
+ */
3259
+ boms?: BillOfMaterials[];
2886
3260
  /**
2887
3261
  * Description of the system's authorization boundary. Example: network CIDR blocks, cloud
2888
3262
  * VPC IDs, physical locations.
@@ -2894,7 +3268,8 @@ export interface HDFSystem {
2894
3268
  categorizationLevel?: CategorizationLevel;
2895
3269
  /**
2896
3270
  * System components within the authorization boundary. Uses the full polymorphic Component
2897
- * type with stable identity (componentId), external references, and SBOM support.
3271
+ * type with stable identity (componentId), external references, and generalized BOM
3272
+ * attachment (boms[]).
2898
3273
  */
2899
3274
  components: Component[];
2900
3275
  /**
@@ -3417,6 +3792,13 @@ export interface HDFEvidencePackage {
3417
3792
  * Description of the evidence package's purpose and scope.
3418
3793
  */
3419
3794
  description?: string;
3795
+ /**
3796
+ * References to external native-format evidence (log/telemetry corpora and other artifacts)
3797
+ * carried by URI + integrity hash + format discriminator, without recreating the data
3798
+ * inside HDF. Logs in ECS/OCSF/etc. are legitimate accreditation evidence; HDF indexes them
3799
+ * here rather than transcoding them.
3800
+ */
3801
+ externalEvidence?: ExternalEvidenceReference[];
3420
3802
  /**
3421
3803
  * Information about the tool that generated this document.
3422
3804
  */
@@ -3520,7 +3902,7 @@ export interface SBOMCoverage {
3520
3902
  [property: string]: any;
3521
3903
  }
3522
3904
  /**
3523
- * A reference to an HDF document or SBOM included in the evidence package.
3905
+ * A reference to an HDF document or BOM/manifest included in the evidence package.
3524
3906
  */
3525
3907
  export interface ContentReference {
3526
3908
  /**
@@ -3549,14 +3931,97 @@ export interface ContentReference {
3549
3931
  /**
3550
3932
  * The type of HDF document being referenced.
3551
3933
  *
3552
- * The type of document referenced in the evidence package.
3934
+ * The type of document referenced in the evidence package. 'bom' covers any
3935
+ * Bill-of-Materials/manifest document (SBOM, AI model/dataset, and reserved future kinds) —
3936
+ * its specific kind is carried by the referenced document's bomType, not by a per-kind
3937
+ * Content_Type value.
3553
3938
  */
3554
3939
  export declare enum ContentType {
3940
+ BOM = "bom",
3555
3941
  HdfAmendments = "hdf-amendments",
3556
3942
  HdfBaseline = "hdf-baseline",
3557
3943
  HdfComparison = "hdf-comparison",
3558
3944
  HdfPlan = "hdf-plan",
3559
3945
  HdfResults = "hdf-results",
3560
- HdfSystem = "hdf-system",
3561
- Sbom = "sbom"
3946
+ HdfSystem = "hdf-system"
3947
+ }
3948
+ /**
3949
+ * A reference to external native-format evidence (log/telemetry corpus or other artifact)
3950
+ * carried by URI + integrity hash + format discriminator. Reference-only: the artifact is
3951
+ * never embedded (corpora can be huge) or transcoded (that would be lossy) — it stays
3952
+ * canonical in its native format and HDF acts as the structured index.
3953
+ */
3954
+ export interface ExternalEvidenceReference {
3955
+ /**
3956
+ * Cryptographic checksum of the referenced artifact for integrity verification.
3957
+ */
3958
+ checksum?: Checksum;
3959
+ /**
3960
+ * Optional human-readable description of this evidence entry.
3961
+ */
3962
+ description?: string;
3963
+ /**
3964
+ * The native format discriminator of the referenced artifact.
3965
+ */
3966
+ format: string;
3967
+ /**
3968
+ * Optional producer-declared version of the format (e.g. ECS '9.4.0', OCSF '1.8.0').
3969
+ * Free-text and untrusted — HDF does not validate it against a registry.
3970
+ */
3971
+ formatVersion?: string;
3972
+ /**
3973
+ * Optional IANA media type describing the on-disk serialization, orthogonal to 'format'
3974
+ * (the semantic standard). Examples: application/x-ndjson, application/json,
3975
+ * application/vnd.apache.parquet, text/csv.
3976
+ */
3977
+ mediaType?: string;
3978
+ /**
3979
+ * Optional descriptive metadata about the referenced corpus. Does not affect integrity.
3980
+ */
3981
+ metadata?: ExternalEvidenceMetadata;
3982
+ /**
3983
+ * URI to the external native-format evidence artifact (log/telemetry corpus, etc.). Can be
3984
+ * a relative path or absolute URL. The data stays canonical in its native format — HDF
3985
+ * references it, never parses or transcodes it.
3986
+ */
3987
+ uri: string;
3988
+ [property: string]: any;
3989
+ }
3990
+ /**
3991
+ * Optional descriptive metadata about the referenced corpus. Does not affect integrity.
3992
+ *
3993
+ * Descriptive metadata about a referenced external evidence corpus. Does not affect
3994
+ * integrity.
3995
+ */
3996
+ export interface ExternalEvidenceMetadata {
3997
+ /**
3998
+ * The tool/pipeline that collected or produced the corpus. Example: 'aws-security-lake',
3999
+ * 'elastic-agent'.
4000
+ */
4001
+ collector?: string;
4002
+ /**
4003
+ * Approximate number of records/events in the referenced corpus.
4004
+ */
4005
+ recordCount?: number;
4006
+ /**
4007
+ * The time window the referenced evidence covers.
4008
+ */
4009
+ timeRange?: ExternalEvidenceTimeRange;
4010
+ [property: string]: any;
4011
+ }
4012
+ /**
4013
+ * The time window the referenced evidence covers.
4014
+ *
4015
+ * The time window a referenced external evidence corpus covers.
4016
+ */
4017
+ export interface ExternalEvidenceTimeRange {
4018
+ /**
4019
+ * End of the time window the corpus covers (ISO 8601).
4020
+ */
4021
+ end?: Date;
4022
+ /**
4023
+ * Start of the time window the corpus covers (ISO 8601).
4024
+ */
4025
+ start?: Date;
4026
+ [property: string]: any;
3562
4027
  }