airom

module
v0.4.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 24, 2026 License: Apache-2.0

README

AIROM

The AI bill of materials that shows its work.

AIROM scans a filesystem, git repo, container image, or Kubernetes workload and generates an AI Bill of Materials: the models, prompts, datasets, embeddings, vector databases, and frameworks your software actually uses. Every entry carries file:line evidence.

CI Release Go Report Card Go Reference

Quick start

pip install airom
airom scan .

That's it. One static binary, no runtime, no daemon, no account.

┌──────────────────┬────────────────────────┬─────────┬─────────────┬───────┬────────────────────┬──────────┐
│ KIND             │ NAME                   │ VERSION │ PROVIDER    │ CONF  │ LOCATION           │ EVIDENCE │
├──────────────────┼────────────────────────┼─────────┼─────────────┼───────┼────────────────────┼──────────┤
│ embedding-model  │ text-embedding-3-large │ -       │ openai      │ 0.85  │ src/rag.py:6       │ 1 occ    │
│ framework        │ langchain              │ 0.2.16  │ langchain   │ 0.95  │ requirements.txt:2 │ 1 occ    │
│ hosted-llm       │ gpt-4.1                │ -       │ openai      │ 0.85  │ src/rag.py:15      │ 1 occ    │
│ library          │ openai                 │ 1.51.0  │ openai      │ 0.985 │ requirements.txt:3 │ 2 occ    │
│ local-model-file │ tiny.gguf              │ -       │ local       │ 0.95  │ models/tiny.gguf   │ 1 occ    │
│ prompt           │ system.txt             │ -       │ -           │ 0.8   │ prompts/system.txt │ 1 occ    │
│ rag-pipeline     │ rag-pipeline           │ -       │ -           │ 0.6   │ src/rag.py:6       │ 1 occ    │
│ vector-db        │ chroma                 │ 0.5.5   │ chroma      │ 0.985 │ requirements.txt:4 │ 3 occ    │
└──────────────────┴────────────────────────┴─────────┴─────────────┴───────┴────────────────────┴──────────┘

More ways to install and run: installation · quickstart · CLI reference

Common commands

airom scan .                              # a directory
airom repo https://github.com/org/app     # a git URL
airom image --input app.tar               # a container image archive
airom k8s --manifests ./deploy            # Kubernetes workloads

airom scan . -o cyclonedx=bom.json -o spdx=bom.spdx.json  # many formats, one pass
airom scan . --fix --fix-verify                          # fix the CVEs it found, one click each
airom scan . --exit-code 1 --fail-on "risk:high"         # gate a build
airom diff base.json head.json                           # what a PR changed

What it finds

Hosted models OpenAI, Anthropic, Gemini, Bedrock, Azure OpenAI, Cohere, Mistral, Groq. Model IDs and SDK call sites
Local weights GGUF, safetensors, ONNX, PyTorch, SavedModel, TFLite, HDF5, TensorRT. Identified by magic bytes and header parse, and never loaded or run
Frameworks LangChain, LlamaIndex, CrewAI, Agno, AutoGen, Semantic Kernel, CAMEL, MetaGPT, Letta, Crawl4AI, FastMCP, Transformers, and more
Local inference & training vLLM, llama.cpp, GPT4All, Ollama, DeepSpeed, Unsloth
Vector databases Chroma, Milvus, Qdrant, Pinecone, Weaviate, FAISS, Redis, pgvector. Includes SQL schemas and a server-side pgvector install
Prompts & datasets Prompt files and templates, CSV/JSONL/Parquet signatures, load_dataset(), HF and Kaggle references
Everything else Generation parameters bound to their call site, serving infrastructure, and RAG pipelines stitched into one component

Dependencies are read from manifests, lockfiles, installed metadata, and even PyInstaller binaries, so a frozen app with no source on disk still produces an inventory.

Languages: Python · JavaScript · TypeScript · Go · Java · Rust · C# · Kotlin · SQL

Why AIROM

Sooner or later someone asks: "Your AIBOM says this service uses gpt-4.1. Why? Where?"

Most tools can't answer. They describe a model you named in a registry, or they never look at your code. AIROM is evidence-first: every component carries the file:line it was seen at, the technique that found it, and an evidence-weighted confidence score, emitted as CycloneDX evidence.occurrences[] that other AIBOM tools leave empty.

It is also honest about what it doesn't know. A version it couldn't resolve stays empty instead of guessing; a model outside the lifecycle catalog carries no claim rather than a quiet "supported".

Beyond inventory

Feature What it does
Risk detection Load-time code-execution surfaces: pickle imports, Keras Lambda layers, GGUF template gadgets, and unsafe torch.load. Emitted as CycloneDX vulnerabilities[] and SARIF. Offline.
CVE overlay Your AI dependencies against OSV.dev, with real CVSS scores and a fail-closed gate. On by default.
One-click fixes --fix opens the advisory table with a Fix action per package and rewrites the manifest pin you click. Declared manifests only — a lockfile is reported, never forged. --fix-verify then dry-runs the ecosystem's resolver, so a bump that clears eight CVEs and leaves a manifest nothing can install is caught here, not in your next build.
Model lifecycle Hosted models matched against a dated, sourced catalog of provider retirement announcements.
Compliance mapping NIST AI RMF and OWASP Agentic controls as CycloneDX attestations, marked met, gap, or manual, with no invented scores.
VEX export An OpenVEX document over the CVE overlay, for consumers that ingest VEX. Only ever asserts affected, because a scanner has no basis for an all-clear.
SPDX 3.0.1 A JSON-LD graph with the AI, Dataset, Software, and Security profiles. Lossiest format: SPDX has no slot for file:line evidence, and the document says so rather than letting you assume there was none.
AIBOM diff The semantic delta between two scans, so AI becomes a per-PR control.
Test scope Fixtures and test trees are recorded but kept out of the default view.
Signed rule updates New frameworks reach you without a new binary, over an ed25519-verified channel.

In CI

- run: pip install airom
- run: airom scan . --exit-code 1 --fail-on "risk:high|cve:critical" -o sarif=airom.sarif
- uses: github/codeql-action/upload-sarif@v3
  with: { sarif_file: airom.sarif }

Findings land as GitHub Code Scanning alerts on the pull request that introduced them. See exit codes and GitHub Actions.

Extending it

Model IDs churn weekly, so the fast-moving surface lives in YAML rule packs rather than Go. Adding a provider is a rules PR, not a release:

airom dev new-rulepack fireworks   # scaffolds the pack and fixture stubs
airom rules lint rules/models/fireworks.yaml

One YAML file, two fixtures, one golden. For detections needing a real parser, implement FileDetector against the stdlib-only pkg/airom/detect SDK. See writing rules and docs/plugin-guide.md.

Status

v0.4.4, early but real. The pipeline, detectors, writers, and overlays are implemented and tested; expect rough edges.

Known gaps, each also surfaced in the affected flag's --help: caching is not implemented (--no-cache is a no-op), live registry and daemon image pulls are not available (use airom image --input <archive>), and live-cluster scanning is not available (use airom k8s --manifests <dir>).

The full ledger of what is complete, what is deferred to v2, and how AIROM compares to adjacent tools is in docs/project-status.md.

Security

AIROM is a security tool whose parsers eat untrusted bytes, and is built accordingly:

  • No model execution, ever. Weights are identified by magic bytes and bounded header parsing. Nothing is loaded, deserialized, or run.
  • Fuzzed parsers. Every binary header parser is fuzzed in CI and must return errors, never panic.
  • No surprise network access. --offline asserts it globally.
  • Signed releases. CGO_ENABLED=0, reproducible, checksummed, and keyless-cosign-signed.

Report vulnerabilities privately via a GitHub security advisory. See SECURITY.md.

Documentation

The documentation site and the landing page are built from airomhq/airom-web.

Contributing

Start with CONTRIBUTING.md. The fastest way to help is a rule pack. Most providers land in under an hour.

License

Apache License 2.0. © AIROM contributors

Directories

Path Synopsis
cmd
airom command
Command airom is the AIROM CLI entrypoint.
Command airom is the AIROM CLI entrypoint.
internal
app
Package app is the composition root — the ONLY wiring site in the codebase (ARCHITECTURE.md §12, decision D4).
Package app is the composition root — the ONLY wiring site in the codebase (ARCHITECTURE.md §12, decision D4).
assemble
Package assemble is the heart of the pipeline (ARCHITECTURE.md §9): the single-threaded, deterministic stage that turns detector claims into the canonical component graph.
Package assemble is the heart of the pipeline (ARCHITECTURE.md §9): the single-threaded, deterministic stage that turns detector claims into the canonical component graph.
bench
Package bench implements the evaluator behind `airom bench` (docs/benchmark.md): it scans each corpus entry with the real pipeline, matches the result against hand-written truth labels, and reports the metric set the release gate consumes.
Package bench implements the evaluator behind `airom bench` (docs/benchmark.md): it scans each corpus entry with the real pipeline, matches the result against hand-written truth labels, and reports the metric set the release gate consumes.
cache
Package cache implements the bbolt-backed scan cache (ARCHITECTURE.md §10, decision D10).
Package cache implements the bbolt-backed scan cache (ARCHITECTURE.md §10, decision D10).
classify
Package classify implements file classification (ARCHITECTURE.md §3, §4): language identification from paths, binary sniffing over the shared header sample, and the magic-byte registry that routes model files to their header parsers.
Package classify implements file classification (ARCHITECTURE.md §3, §4): language identification from paths, binary sniffing over the shared header sample, and the magic-byte registry that routes model files to their header parsers.
cli
Package cli implements the airom command tree, configuration layering, and exit-code policy (ARCHITECTURE.md §12, docs/cli.md).
Package cli implements the airom command tree, configuration layering, and exit-code policy (ARCHITECTURE.md §12, docs/cli.md).
compliance
Package compliance maps a named AI-governance framework's controls onto an assembled AIROM inventory.
Package compliance maps a named AI-governance framework's controls onto an assembled AIROM inventory.
conformance
Package conformance is AIROM's output-format conformance suite: a permanent, CI-enforced check that every writer's bytes satisfy the external contract the format claims to speak (docs/mapping.md).
Package conformance is AIROM's output-format conformance suite: a permanent, CI-enforced check that every writer's bytes satisfy the external contract the format claims to speak (docs/mapping.md).
detectors/all
Package all holds the GENERATED registration list of built-in detectors (ARCHITECTURE.md §6.2): no hand-edited central file for every detector PR to conflict on.
Package all holds the GENERATED registration list of built-in detectors (ARCHITECTURE.md §6.2): no hand-edited central file for every detector PR to conflict on.
detectors/dataset
Package dataset detects dataset files by format signature (ARCHITECTURE.md §4, §17): CSV and JSONL by structural sniffing of the shared header sample, Parquet and Arrow by magic bytes — emitting KindDataset claims that phase-2 stitching can attach to models via TRAINED_ON edges (the SPDX trainedOn mapping).
Package dataset detects dataset files by format signature (ARCHITECTURE.md §4, §17): CSV and JSONL by structural sniffing of the shared header sample, Parquet and Arrow by magic bytes — emitting KindDataset claims that phase-2 stitching can attach to models via TRAINED_ON edges (the SPDX trainedOn mapping).
detectors/frozen
Package frozen reads Python applications that were frozen into a single executable, where the usual evidence does not exist on disk.
Package frozen reads Python applications that were frozen into a single executable, where the usual evidence does not exist on disk.
detectors/gosrc
Package gosrc detects AI usage in Go source with the stdlib go/parser (ARCHITECTURE.md §6.4, decision D1): exact AST analysis of import paths, SDK call sites, and model-name literals — Go is the one language where a real parser is free, so it gets one instead of the region-lexer + regex path used elsewhere.
Package gosrc detects AI usage in Go source with the stdlib go/parser (ARCHITECTURE.md §6.4, decision D1): exact AST analysis of import paths, SDK call sites, and model-name literals — Go is the one language where a real parser is free, so it gets one instead of the region-lexer + regex path used elsewhere.
detectors/infra
Package infra detects AI serving-infrastructure signals in deployment artifacts (ARCHITECTURE.md §4, §17): Dockerfiles (AI base images such as ollama or vllm, model-pulling build steps), docker-compose services, and Kubernetes manifests — emitting KindInfra and KindService claims eligible for SERVED_BY and CONFIGURES edges, using MethodConfig evidence.
Package infra detects AI serving-infrastructure signals in deployment artifacts (ARCHITECTURE.md §4, §17): Dockerfiles (AI base images such as ollama or vllm, model-pulling build steps), docker-compose services, and Kubernetes manifests — emitting KindInfra and KindService claims eligible for SERVED_BY and CONFIGURES edges, using MethodConfig evidence.
detectors/manifest
Package manifest detects AI frameworks and SDKs declared in package manifests and lockfiles (ARCHITECTURE.md §4, §17): requirements.txt, pyproject.toml, package.json, go.mod, pom.xml, Gradle lockfiles, Cargo.toml, and csproj, emitting framework and library claims with declared versions.
Package manifest detects AI frameworks and SDKs declared in package manifests and lockfiles (ARCHITECTURE.md §4, §17): requirements.txt, pyproject.toml, package.json, go.mod, pom.xml, Gradle lockfiles, Cargo.toml, and csproj, emitting framework and library claims with declared versions.
detectors/modelfile
Package modelfile detects local model weight files by magic bytes and header-only parsing — core IP (ARCHITECTURE.md §4, §17): GGUF, safetensors, ONNX, torch zips (with static pickle opcode walking), TensorFlow SavedModel, TensorRT engines, TFLite, and HDF5.
Package modelfile detects local model weight files by magic bytes and header-only parsing — core IP (ARCHITECTURE.md §4, §17): GGUF, safetensors, ONNX, torch zips (with static pickle opcode walking), TensorFlow SavedModel, TensorRT engines, TFLite, and HDF5.
detectors/modelfilex
Package modelfilex implements binary "local model file" detectors for model serialization formats whose recognition needs more than a magic-byte gate: PyTorch archives (with a static, non-executing pickle opcode walk that flags dangerous imports), TensorFlow SavedModel protobufs, TFLite flatbuffers, Keras/HDF5 weight stores, and opaque TensorRT engines.
Package modelfilex implements binary "local model file" detectors for model serialization formats whose recognition needs more than a magic-byte gate: PyTorch archives (with a static, non-executing pickle opcode walk that flags dangerous imports), TensorFlow SavedModel protobufs, TFLite flatbuffers, Keras/HDF5 weight stores, and opaque TensorRT engines.
detectors/pgext
Package pgext reads PostgreSQL extension metadata off the filesystem.
Package pgext reads PostgreSQL extension metadata off the filesystem.
detectors/project
Package project holds the built-in phase-2 ProjectDetectors (ARCHITECTURE.md §3, §17) — cross-file logic the streaming phase cannot express: hfdir assembles a HuggingFace model directory (config.json + weights) into ONE component; adapterlink turns adapter_config.json into DERIVED_FROM base-model lineage; configbind attaches separated generation configs to the model they name via CONFIGURES edges under the refusal-first ambiguity policy (§9.5) — never a guessed edge; raglink stitches retriever, store, and embedder findings into a rag-pipeline composite with CONTAINS/QUERIES/EMBEDS_WITH edges; lockjoin joins manifests with their lockfiles.
Package project holds the built-in phase-2 ProjectDetectors (ARCHITECTURE.md §3, §17) — cross-file logic the streaming phase cannot express: hfdir assembles a HuggingFace model directory (config.json + weights) into ONE component; adapterlink turns adapter_config.json into DERIVED_FROM base-model lineage; configbind attaches separated generation configs to the model they name via CONFIGURES edges under the refusal-first ambiguity policy (§9.5) — never a guessed edge; raglink stitches retriever, store, and embedder findings into a rag-pipeline composite with CONTAINS/QUERIES/EMBEDS_WITH edges; lockjoin joins manifests with their lockfiles.
detectors/prompt
Package prompt detects prompt assets stored as standalone files (ARCHITECTURE.md §4, §17): .txt/.md/.yaml/.jinja content judged by template heuristics — placeholder syntax, role markers, instruction shape — plus prompt-suggestive path signals, emitting KindPrompt claims that can receive PROMPTED_BY edges.
Package prompt detects prompt assets stored as standalone files (ARCHITECTURE.md §4, §17): .txt/.md/.yaml/.jinja content judged by template heuristics — placeholder syntax, role markers, instruction shape — plus prompt-suggestive path signals, emitting KindPrompt claims that can receive PROMPTED_BY edges.
diff
Package diff compares two native AIBOM documents (schemaVersion "1") and reports what changed between them: components added, removed, and changed, keyed by the stable component ID (ARCHITECTURE.md §9.2).
Package diff compares two native AIBOM documents (schemaVersion "1") and reports what changed between them: components added, removed, and changed, keyed by the stable component ID (ARCHITECTURE.md §9.2).
dispatch
Package dispatch routes classified files to interested detectors through the compiled selector index (ARCHITECTURE.md §6.1) and adapts the internal read-once file context to the public SDK's detect.File.
Package dispatch routes classified files to interested detectors through the compiled selector index (ARCHITECTURE.md §6.1) and adapts the internal read-once file context to the public SDK's detect.File.
engine
Package engine drives the two-phase scan pipeline (ARCHITECTURE.md §3, §8): phase 1 streams files from exactly one walker/producer through a bounded task channel into a worker pool where all matched detectors run SEQUENTIALLY on one shared buffer, with exactly one collector goroutine owning all mutable aggregation state — no locks.
Package engine drives the two-phase scan pipeline (ARCHITECTURE.md §3, §8): phase 1 streams files from exactly one walker/producer through a bounded task channel into a worker pool where all matched detectors run SEQUENTIALLY on one shared buffer, with exactly one collector goroutine owning all mutable aggregation state — no locks.
eol
Package eol is the hosted-model end-of-life overlay: it matches the AI models AIROM inventoried against a curated catalog of provider retirement announcements and attaches a dated, sourced Lifecycle to them.
Package eol is the hosted-model end-of-life overlay: it matches the AI models AIROM inventoried against a curated catalog of provider retirement announcements and attaches a dated, sourced Lifecycle to them.
filectx
Package filectx implements the read-once file access contract (ARCHITECTURE.md §8, invariant P1): each file's bytes are read from the source at most once, and every interested detector shares that one buffer — detectors for a file run sequentially in one worker, so no buffer synchronization exists or is needed.
Package filectx implements the read-once file access contract (ARCHITECTURE.md §8, invariant P1): each file's bytes are read from the source at most once, and every interested detector shares that one buffer — detectors for a file run sequentially in one worker, so no buffer synchronization exists or is needed.
fix
Package fix turns the CVE overlay into an actionable remediation: for every vulnerable package it computes the version that clears the advisories and rewrites the pin in the manifest that declared it.
Package fix turns the CVE overlay into an actionable remediation: for every vulnerable package it computes the version that clears the advisories and rewrites the pin in the manifest that declared it.
fix/fixui
Package fixui is the interactive CVE table: the advisories a scan found, one row per finding, with a Fix action per package that rewrites the manifest pin in place.
Package fixui is the interactive CVE table: the advisories a scan found, one row per finding, with a Fix action per package that rewrites the manifest pin in place.
metrics
Package metrics makes profiling a product feature (ARCHITECTURE.md §14): ScanStats accumulates files walked and skipped, bytes read versus bytes in tree, cache hit rates, per-detector nanoseconds and invocation counts, and the selection explanation of which --select expression enabled which detector (§6.2) — embedded into the Inventory under --stats, so "what did the scanner skip" is always answerable and detector #217 is triaged with data, not guesses.
Package metrics makes profiling a product feature (ARCHITECTURE.md §14): ScanStats accumulates files walked and skipped, bytes read versus bytes in tree, cache hit rates, per-detector nanoseconds and invocation counts, and the selection explanation of which --select expression enabled which detector (§6.2) — embedded into the Inventory under --stats, so "what did the scanner skip" is always answerable and detector #217 is triaged with data, not guesses.
osv
Package osv is the opt-in CVE overlay: it matches the AI packages AIROM inventoried (by their purl) against the OSV.dev advisory database and attaches the resulting CVEs to those components.
Package osv is the opt-in CVE overlay: it matches the AI packages AIROM inventoried (by their purl) against the OSV.dev advisory database and attaches the resulting CVEs to those components.
perf
Package perf is AIROM's performance-regression harness (ARCHITECTURE.md invariant P2: peak memory is a function of CONFIGURATION, never of input size).
Package perf is AIROM's performance-regression harness (ARCHITECTURE.md invariant P2: peak memory is a function of CONFIGURATION, never of input size).
ruleengine
Package ruleengine implements the declarative rule-pack compiler and the generic rule detector (ARCHITECTURE.md §6.3, docs/rule-schema.md — this package implements exactly that contract).
Package ruleengine implements the declarative rule-pack compiler and the generic rule detector (ARCHITECTURE.md §6.3, docs/rule-schema.md — this package implements exactly that contract).
ruleengine/lexer
Package lexer splits source text into code / comment / string regions for the rule engine (ARCHITECTURE.md §6.4, decision D1; docs/rule-schema.md "regions").
Package lexer splits source text into code / comment / string regions for the rule engine (ARCHITECTURE.md §6.4, decision D1; docs/rule-schema.md "regions").
ruleengine/ruletest
Package ruletest runs rule packs against annotated fixtures — the shared engine behind `airom rules test`/`lint` and the embedded-pack CI test (docs/rule-schema.md "Fixtures and the lint contract").
Package ruletest runs rule packs against annotated fixtures — the shared engine behind `airom rules test`/`lint` and the embedded-pack CI test (docs/rule-schema.md "Fixtures and the lint contract").
rulesync
Package rulesync fetches, verifies, and caches a signed rule-pack bundle from the airomhq/airom-rules release channel, so rules can move faster than the airom binary without the user installing a second tool (Model B).
Package rulesync fetches, verifies, and caches a signed rule-pack bundle from the airomhq/airom-rules release channel, so rules can move faster than the airom binary without the user installing a second tool (Model B).
source
Package source defines the Source abstraction over scan targets (ARCHITECTURE.md §7): a Source couples a Walker (push-style, ignore-aware enumeration feeding phase 1), a Resolver (pull-style access for phase-2 project detectors), content identity (image digest, git HEAD, dir realpath), layer IDs for blob-cache granularity, and SourceInfo provenance.
Package source defines the Source abstraction over scan targets (ARCHITECTURE.md §7): a Source couples a Walker (push-style, ignore-aware enumeration feeding phase 1), a Resolver (pull-style access for phase-2 project detectors), content identity (image digest, git HEAD, dir realpath), layer IDs for blob-cache granularity, and SourceInfo provenance.
source/dirsource
Package dirsource implements the filesystem source (ARCHITECTURE.md §7): streaming enumeration with a nested per-directory .gitignore/.airomignore stack, non-overridable default skips, user --ignore globs, and an ignore-honoring resolver for the phase-2 pull API.
Package dirsource implements the filesystem source (ARCHITECTURE.md §7): streaming enumeration with a nested per-directory .gitignore/.airomignore stack, non-overridable default skips, user --ignore globs, and an ignore-honoring resolver for the phase-2 pull API.
source/gitsource
Package gitsource implements the remote-repository Source (ARCHITECTURE.md §7): git clone --depth=1 --single-branch --no-tags via an exec-git fast path when a git binary is available, with a go-git v6 fallback (decision D14: go-git's shallow-clone inefficiency is documented; established scanners shell out too).
Package gitsource implements the remote-repository Source (ARCHITECTURE.md §7): git clone --depth=1 --single-branch --no-tags via an exec-git fast path when a git binary is available, with a go-git v6 fallback (decision D14: go-git's shallow-clone inefficiency is documented; established scanners shell out too).
source/imagesource
Package imagesource implements the container-image Source (ARCHITECTURE.md §7, decision D11): go-containerregistry resolves a v1.Image through the remote → daemon → tarball → OCI-layout fallback chain, and the squashed tar from mutate.Extract is streamed exactly once.
Package imagesource implements the container-image Source (ARCHITECTURE.md §7, decision D11): go-containerregistry resolves a v1.Image through the remote → daemon → tarball → OCI-layout fallback chain, and the squashed tar from mutate.Extract is streamed exactly once.
source/k8ssource
Package k8ssource implements the Kubernetes Source (ARCHITECTURE.md §7).
Package k8ssource implements the Kubernetes Source (ARCHITECTURE.md §7).
tui
Package tui holds AIROM's terminal presentation primitives: TTY detection, ANSI styling, and the scan progress indicator.
Package tui holds AIROM's terminal presentation primitives: TTY detection, ANSI styling, and the scan progress indicator.
writer
Package writer defines the output stage (ARCHITECTURE.md §11): a Writer is a pure function from *airom.Inventory to bytes (invariant P5) that never invents, drops, or re-derives data — every format is a projection of the same assembled graph.
Package writer defines the output stage (ARCHITECTURE.md §11): a Writer is a pure function from *airom.Inventory to bytes (invariant P5) that never invents, drops, or re-derives data — every format is a projection of the same assembled graph.
writer/cdx
Package cdx projects the inventory to CycloneDX ML-BOM via CycloneDX/cyclonedx-go (ARCHITECTURE.md §11, decision D16) — 1.6 by default, 1.7 via --cdx-version (the modelCard shape is identical in both).
Package cdx projects the inventory to CycloneDX ML-BOM via CycloneDX/cyclonedx-go (ARCHITECTURE.md §11, decision D16) — 1.6 by default, 1.7 via --cdx-version (the modelCard shape is identical in both).
writer/compliancew
Package compliancew writes the human-readable compliance report (docs/compliance.md): each framework's controls as met / gap / manual, with the component evidence behind every verdict and a per-framework summary.
Package compliancew writes the human-readable compliance report (docs/compliance.md): each framework's controls as met / gap / manual, with the component evidence behind every verdict and a per-framework summary.
writer/nativejson
Package nativejson emits AIROM's native JSON format (ARCHITECTURE.md §11): the lossless, round-trip reference serialization of the Inventory graph, versioned from release one (schemaVersion "1") with its JSON Schema published per release under schemas/ and enforced by conformance and fuzz round-trip tests in CI (§14).
Package nativejson emits AIROM's native JSON format (ARCHITECTURE.md §11): the lossless, round-trip reference serialization of the Inventory graph, versioned from release one (schemaVersion "1") with its JSON Schema published per release under schemas/ and enforced by conformance and fuzz round-trip tests in CI (§14).
writer/sarifw
Package sarifw projects the inventory to SARIF 2.1.0 for GitHub Code Scanning (ARCHITECTURE.md §11, docs/mapping.md §3/§7).
Package sarifw projects the inventory to SARIF 2.1.0 for GitHub Code Scanning (ARCHITECTURE.md §11, docs/mapping.md §3/§7).
writer/spdxw
Package spdxw writes an SPDX 3.0.1 document with the AI, Dataset, Software, and Security profiles.
Package spdxw writes an SPDX 3.0.1 document with the AI, Dataset, Software, and Security profiles.
writer/tablew
Package tablew renders the human-facing terminal summary (ARCHITECTURE.md §11): a boxed scan-summary panel followed by a box-drawn component table with columns KIND | NAME | VERSION | PROVIDER | CONF | LOCATION (the primary path:line sighting) | EVIDENCE (rendered "n occ"), plus RISK | FLAGS when a scan surfaces an artifact risk.
Package tablew renders the human-facing terminal summary (ARCHITECTURE.md §11): a boxed scan-summary panel followed by a box-drawn component table with columns KIND | NAME | VERSION | PROVIDER | CONF | LOCATION (the primary path:line sighting) | EVIDENCE (rendered "n occ"), plus RISK | FLAGS when a scan surfaces an artifact risk.
writer/vexw
Package vexw writes an OpenVEX document from the CVE overlay.
Package vexw writes an OpenVEX document from the CVE overlay.
writer/writertest
Package writertest builds a representative Inventory shared by the writer tests and the mapping round-trip test — one fixture exercising every kind, tri-state, evidence shape, relationship type, and honesty record, so a single golden per format proves the whole projection.
Package writertest builds a representative Inventory shared by the writer tests and the mapping round-trip test — one fixture exercising every kind, tri-state, evidence shape, relationship type, and honesty record, so a single golden per format proves the whole projection.
writer/yamlw
Package yamlw renders the native inventory model as YAML through yaml.v3 with stable key order (ARCHITECTURE.md §11) — the same lossless content as the native JSON writer, in a form suited to human review.
Package yamlw renders the native inventory model as YAML through yaml.v3 with stable key order (ARCHITECTURE.md §11) — the same lossless content as the native JSON writer, in a form suited to human review.
xio
Package xio holds the bounded-I/O primitives behind the bounded-everything invariant (ARCHITECTURE.md §8, P2): sync.Pool buffer pools per size class (findings copy out ≤200-byte snippets and never retain buffers), the spool that grows from memory to a temp file under hard caps (≤4 MiB memory, ≤64 MiB tmpfile — §7), and the byte-weighted I/O semaphore (default budget 256 MiB, a separate knob from CPU parallelism) acquired at min(size, budget) around any read over 1 MiB.
Package xio holds the bounded-I/O primitives behind the bounded-everything invariant (ARCHITECTURE.md §8, P2): sync.Pool buffer pools per size class (findings copy out ≤200-byte snippets and never retain buffers), the spool that grows from memory to a temp file under hard caps (≤4 MiB memory, ≤64 MiB tmpfile — §7), and the byte-weighted I/O semaphore (default budget 256 MiB, a separate knob from CPU parallelism) acquired at min(size, budget) around any read over 1 MiB.
pkg
airom
Package airom is the canonical AIROM domain model (ARCHITECTURE.md §5): the component graph every writer projects and every detector's claims assemble into.
Package airom is the canonical AIROM domain model (ARCHITECTURE.md §5): the component graph every writer projects and every detector's claims assemble into.
airom/detect
Package detect is the public detector SDK (ARCHITECTURE.md §6.1): the contracts a detector implements, the read-once File it receives, the Finding claims it emits, and the selector index that routes files to detectors.
Package detect is the public detector SDK (ARCHITECTURE.md §6.1): the contracts a detector implements, the read-once File it receives, the Finding claims it emits, and the selector index that routes files to detectors.
airom/detectortest
Package detectortest is the public contract-test harness for AIROM detectors (ARCHITECTURE.md §14, plugin-guide.md B.4): built-in and third-party detectors prove themselves with the identical harness.
Package detectortest is the public contract-test harness for AIROM detectors (ARCHITECTURE.md §14, plugin-guide.md B.4): built-in and third-party detectors prove themselves with the identical harness.
airom/purl
Package purl builds package URLs under AIROM's purl discipline (ARCHITECTURE.md §9.4, decision D9): spec purl types only.
Package purl builds package URLs under AIROM's purl discipline (ARCHITECTURE.md §9.4, decision D9): spec purl types only.
Package rules embeds the built-in AIROM rule packs (ARCHITECTURE.md §6.3): the offline-by-construction default detection vocabulary, compiled into the binary and versioned with each release.
Package rules embeds the built-in AIROM rule packs (ARCHITECTURE.md §6.3): the offline-by-construction default detection vocabulary, compiled into the binary and versioned with each release.
Package schemas embeds AIROM's published JSON Schemas (docs/mapping.md): the native AIBOM format is a versioned API, and its schema ships with the binary and the repo.
Package schemas embeds AIROM's published JSON Schemas (docs/mapping.md): the native AIBOM format is a versioned API, and its schema ships with the binary and the repo.
tools
detectors-gen command
Command detectors-gen regenerates internal/detectors/all/all.go: the mechanical, conflict-free registration list of built-in detectors (ARCHITECTURE.md §6.2, plugin-guide.md B.5).
Command detectors-gen regenerates internal/detectors/all/all.go: the mechanical, conflict-free registration list of built-in detectors (ARCHITECTURE.md §6.2, plugin-guide.md B.5).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL