Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

- **BREAKING: TRACE records now carry the v0.2 profile** `tag:agentrust-io.com,2026:trace-v0.2`. Pins move to `agentrust-trace>=0.5` and `agentrust-trace-tests>=0.4,<0.5`, which have to move together: the conformance suite cut over rather than dual-accepting, so 0.4.0 of the suite fails a v0.1 record and 0.3.x fails a v0.2 one. The v0.1 URI named `agentrust.io`, a domain this project never controlled, which RFC 4151 does not permit for a tag URI (agentrust-io/trace-spec#107). Nothing else about the record format changed.

### Changed

- **Extension URI moved to `https://agentrust-io.com/extensions/ca2a/v0.1`.** The previous `agentrust.io` host is not ours: it resolves to parked AWS addresses. An extension identifier is something we are asking other operators to copy into their Agent Cards, so it must not depend on a domain we do not control. A2A treats these URIs as identifiers rather than fetchable URLs, so nothing breaks functionally, but any peer pinning the old string must update. The adapter constant, the transport spec, the fixture, and the test that pins the constant all move together.

### Fixed
Expand Down
214 changes: 107 additions & 107 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,107 +1,107 @@
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "ca2a-runtime"
version = "0.1.0a1"
description = "Confidential agent-to-agent runtime: attested, attenuated delegation and sealed peer channels for A2A"
readme = "README.md"
license = { text = "MIT" }
authors = [
{ name = "AgenTrust Contributors", email = "oss@agentrust-io.com" },
]
keywords = ["a2a", "agent-to-agent", "delegation", "tee", "attestation", "confidential-computing", "ai-agents"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Security",
]
requires-python = ">=3.11"
dependencies = [
"cryptography>=42.0",
"pyyaml>=6.0",
"cedarpy>=4.8",
# TRACE record models + RFC 8785 signing, reused rather than reimplemented
# (see ROADMAP Tier 0). Pin a compatible minor; cross-repo skew is a known
# risk documented in LIMITATIONS.md.
"agentrust-trace>=0.4",
# Shared hardware-attestation verification (generic cert-chain verifier,
# SNP/TDX/TPM primitives) consumed via PyPI instead of duplicated per repo.
"agent-manifest>=0.5",
"rfc8785>=0.1",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0",
"pytest-asyncio>=0.23",
"pytest-cov>=5.0",
"ruff>=0.4",
"mypy>=1.10",
"types-pyyaml",
"bandit[toml]>=1.7",
"pip-audit>=2.6",
# Conformance suite: asserts emitted records pass the TRACE Level checks.
"agentrust-trace-tests>=0.2,<0.3",
]
[project.scripts]
ca2a = "ca2a_runtime.cli:main"
[project.urls]
Homepage = "https://github.com/agentrust-io/ca2a"
Repository = "https://github.com/agentrust-io/ca2a"
Documentation = "https://github.com/agentrust-io/ca2a/tree/main/docs"
"Bug Tracker" = "https://github.com/agentrust-io/ca2a/issues"
[tool.hatch.build.targets.wheel]
packages = ["src/ca2a_runtime", "src/ca2a_verify"]
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
addopts = "-v --tb=short"
pythonpath = ["src"]
[tool.ruff]
src = ["src"]
line-length = 100
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "W", "I", "UP", "B", "C4", "PIE", "T20", "RET", "SIM"]
ignore = ["E501"]
[tool.ruff.lint.per-file-ignores]
"src/ca2a_runtime/benchmarks.py" = ["T201"]
"src/ca2a_runtime/cli.py" = ["T201"]
"scripts/gen_example_chain.py" = ["T201"]
"scripts/gen_agt_evidence.py" = ["T201"]
"examples/**/*.py" = ["T201"]
[tool.bandit]
skips = ["B101"]
[tool.coverage.run]
source = ["src"]
omit = ["*/cli.py", "*/benchmarks.py"]
[tool.coverage.report]
fail_under = 70
[tool.mypy]
python_version = "3.11"
strict = true
ignore_missing_imports = true
warn_return_any = false
files = ["src/ca2a_runtime", "src/ca2a_verify"]
[[tool.mypy.overrides]]
module = ["ca2a_runtime.tee.sev_snp", "ca2a_runtime.tee.tdx", "ca2a_runtime.tee.tpm", "ca2a_runtime.cedar", "ca2a_verify.tdx", "ca2a_verify.tpm", "ca2a_runtime.channel.sealed"]
warn_unused_ignores = false
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "ca2a-runtime"
version = "0.1.0a1"
description = "Confidential agent-to-agent runtime: attested, attenuated delegation and sealed peer channels for A2A"
readme = "README.md"
license = { text = "MIT" }
authors = [
{ name = "AgenTrust Contributors", email = "oss@agentrust-io.com" },
]
keywords = ["a2a", "agent-to-agent", "delegation", "tee", "attestation", "confidential-computing", "ai-agents"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Security",
]
requires-python = ">=3.11"
dependencies = [
"cryptography>=42.0",
"pyyaml>=6.0",
"cedarpy>=4.8",
# TRACE record models + RFC 8785 signing, reused rather than reimplemented
# (see ROADMAP Tier 0). Pin a compatible minor; cross-repo skew is a known
# risk documented in LIMITATIONS.md.
"agentrust-trace>=0.5",
# Shared hardware-attestation verification (generic cert-chain verifier,
# SNP/TDX/TPM primitives) consumed via PyPI instead of duplicated per repo.
"agent-manifest>=0.5",
"rfc8785>=0.1",
]

[project.optional-dependencies]
dev = [
"pytest>=8.0",
"pytest-asyncio>=0.23",
"pytest-cov>=5.0",
"ruff>=0.4",
"mypy>=1.10",
"types-pyyaml",
"bandit[toml]>=1.7",
"pip-audit>=2.6",
# Conformance suite: asserts emitted records pass the TRACE Level checks.
"agentrust-trace-tests>=0.4,<0.5",
]

[project.scripts]
ca2a = "ca2a_runtime.cli:main"

[project.urls]
Homepage = "https://github.com/agentrust-io/ca2a"
Repository = "https://github.com/agentrust-io/ca2a"
Documentation = "https://github.com/agentrust-io/ca2a/tree/main/docs"
"Bug Tracker" = "https://github.com/agentrust-io/ca2a/issues"

[tool.hatch.build.targets.wheel]
packages = ["src/ca2a_runtime", "src/ca2a_verify"]

[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
addopts = "-v --tb=short"
pythonpath = ["src"]

[tool.ruff]
src = ["src"]
line-length = 100
target-version = "py311"

[tool.ruff.lint]
select = ["E", "F", "W", "I", "UP", "B", "C4", "PIE", "T20", "RET", "SIM"]
ignore = ["E501"]

[tool.ruff.lint.per-file-ignores]
"src/ca2a_runtime/benchmarks.py" = ["T201"]
"src/ca2a_runtime/cli.py" = ["T201"]
"scripts/gen_example_chain.py" = ["T201"]
"scripts/gen_agt_evidence.py" = ["T201"]
"examples/**/*.py" = ["T201"]

[tool.bandit]
skips = ["B101"]

[tool.coverage.run]
source = ["src"]
omit = ["*/cli.py", "*/benchmarks.py"]

[tool.coverage.report]
fail_under = 70

[tool.mypy]
python_version = "3.11"
strict = true
ignore_missing_imports = true
warn_return_any = false
files = ["src/ca2a_runtime", "src/ca2a_verify"]

[[tool.mypy.overrides]]
module = ["ca2a_runtime.tee.sev_snp", "ca2a_runtime.tee.tdx", "ca2a_runtime.tee.tpm", "ca2a_runtime.cedar", "ca2a_verify.tdx", "ca2a_verify.tpm", "ca2a_runtime.channel.sealed"]
warn_unused_ignores = false
4 changes: 2 additions & 2 deletions src/ca2a_runtime/trace_binding.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@
from agentrust_trace import sign_record
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey

# The frozen TRACE v0.1 profile URI. Every record's eat_profile equals this.
EAT_PROFILE = "tag:agentrust.io,2026:trace-v0.1"
# The frozen TRACE v0.2 profile URI. Every record's eat_profile equals this.
EAT_PROFILE = "tag:agentrust-io.com,2026:trace-v0.2"

# The platform value for a software-attestation (no hardware TEE) run. Records
# emitted with this platform are honestly Level 0 only: trace-tests fails a
Expand Down