[package]
edition = "2021"
rust-version = "1.89"
name = "assay-cli"
version = "6.3.1"
build = false
exclude = [
"tests/e2e_mcp_wrap_assert_cmd.rs",
"tests/mcp_wrap_authorize_forward.rs",
"tests/agent_golden_path_contract.rs",
"tests/agent_plugin_package_contract.rs",
"tests/policy_validate_machine_contract.rs",
"tests/config_recovery_argv_contract.rs",
"tests/explicit_config_class_contract.rs",
"tests/doctor_config_check_contract.rs",
"tests/init_stdout_contract.rs",
"tests/doctor_exit_class_contract.rs",
"tests/doctor_argument_contract.rs",
"tests/doctor_text_render_contract.rs",
"tests/cli_describe_contract.rs",
"tests/stdout_json_write_contract.rs",
"tests/evidence_verify_attestation_cli.rs",
"tests/mcp_preflight_contract.rs",
"tests/recovery_argv_publisher_parity.rs",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Policy-as-code gate for MCP agent tool calls, with verifiable evidence and Linux kernel enforcement."
readme = "README.md"
keywords = [
"mcp",
"ai-agents",
"agent-security",
"policy-as-code",
"evidence",
]
categories = [
"command-line-utilities",
"development-tools::testing",
]
license = "MIT"
repository = "https://github.com/Rul1an/assay"
[features]
default = [
"tui",
"sim",
"runner",
]
experimental = ["assay-core/experimental"]
profile-test-hook = []
runner = [
"dep:assay-runner-core",
"dep:assay-runner-schema",
"dep:assay-runner-linux",
]
sim = ["dep:assay-sim"]
tui = [
"dep:ratatui",
"dep:crossterm",
]
[[bin]]
name = "assay"
path = "src/main.rs"
[[test]]
name = "adr045_citations"
path = "tests/adr045_citations.rs"
[[test]]
name = "adr045_prefix_table"
path = "tests/adr045_prefix_table.rs"
[[test]]
name = "aee_non_claims_parity"
path = "tests/aee_non_claims_parity.rs"
[[test]]
name = "aee_version_parity"
path = "tests/aee_version_parity.rs"
[[test]]
name = "cli_json_identities"
path = "tests/cli_json_identities.rs"
[[test]]
name = "conformance_privileged_mcp_action"
path = "tests/conformance_privileged_mcp_action.rs"
[[test]]
name = "conformance_privileged_mcp_action_v1"
path = "tests/conformance_privileged_mcp_action_v1.rs"
[[test]]
name = "contract_bounded_ingest_cli"
path = "tests/contract_bounded_ingest_cli.rs"
[[test]]
name = "contract_docs_generate_explain"
path = "tests/contract_docs_generate_explain.rs"
[[test]]
name = "contract_exit_codes"
path = "tests/contract_exit_codes.rs"
[[test]]
name = "contract_generate_g1"
path = "tests/contract_generate_g1.rs"
[[test]]
name = "contract_init_ci"
path = "tests/contract_init_ci.rs"
[[test]]
name = "contract_init_hello_trace"
path = "tests/contract_init_hello_trace.rs"
[[test]]
name = "contract_monitor_cli"
path = "tests/contract_monitor_cli.rs"
[[test]]
name = "contract_run_ci_parity"
path = "tests/contract_run_ci_parity.rs"
[[test]]
name = "contract_sandbox_enforcement_health_degrade"
path = "tests/contract_sandbox_enforcement_health_degrade.rs"
[[test]]
name = "contract_sandbox_policy_load_fail_closed"
path = "tests/contract_sandbox_policy_load_fail_closed.rs"
[[test]]
name = "coverage_contract"
path = "tests/coverage_contract.rs"
[[test]]
name = "coverage_declared_basis_docs"
path = "tests/coverage_declared_basis_docs.rs"
[[test]]
name = "coverage_declared_tools_file"
path = "tests/coverage_declared_tools_file.rs"
[[test]]
name = "coverage_format_md"
path = "tests/coverage_format_md.rs"
[[test]]
name = "coverage_format_modes"
path = "tests/coverage_format_modes.rs"
[[test]]
name = "coverage_out_md"
path = "tests/coverage_out_md.rs"
[[test]]
name = "coverage_routes_top"
path = "tests/coverage_routes_top.rs"
[[test]]
name = "coverage_threshold"
path = "tests/coverage_threshold.rs"
[[test]]
name = "delegated_exec_observation_v0"
path = "tests/delegated_exec_observation_v0.rs"
[[test]]
name = "demo_write_errors"
path = "tests/demo_write_errors.rs"
[[test]]
name = "dev_encoding"
path = "tests/dev_encoding.rs"
[[test]]
name = "discovery_method_coverage"
path = "tests/discovery_method_coverage.rs"
[[test]]
name = "doctor_fix_e2e"
path = "tests/doctor_fix_e2e.rs"
[[test]]
name = "e2e_policy_test"
path = "tests/e2e_policy_test.rs"
[[test]]
name = "early_failure_summary_parity"
path = "tests/early_failure_summary_parity.rs"
[[test]]
name = "error_enums_non_exhaustive"
path = "tests/error_enums_non_exhaustive.rs"
[[test]]
name = "evidence_diff_stdout_contract"
path = "tests/evidence_diff_stdout_contract.rs"
[[test]]
name = "evidence_store_test"
path = "tests/evidence_store_test.rs"
[[test]]
name = "evidence_test"
path = "tests/evidence_test.rs"
[[test]]
name = "exit_code_contract"
path = "tests/exit_code_contract.rs"
[[test]]
name = "fail_on_gate"
path = "tests/fail_on_gate.rs"
[[test]]
name = "format_value_parser"
path = "tests/format_value_parser.rs"
[[test]]
name = "generate_golden"
path = "tests/generate_golden.rs"
[[test]]
name = "golden_runner"
path = "tests/golden_runner.rs"
[[test]]
name = "inode_gen"
path = "tests/inode_gen.rs"
[[test]]
name = "json_format_reports_failures_on_stdout"
path = "tests/json_format_reports_failures_on_stdout.rs"
[[test]]
name = "kill_switch_assert_cmd"
path = "tests/kill_switch_assert_cmd.rs"
[[test]]
name = "lsm_deny_smoke"
path = "tests/lsm_deny_smoke.rs"
[[test]]
name = "mcp_command_grouping_test"
path = "tests/mcp_command_grouping_test.rs"
[[test]]
name = "mcp_id_correlation_errors"
path = "tests/mcp_id_correlation_errors.rs"
[[test]]
name = "mcp_manifest_promotion_contract"
path = "tests/mcp_manifest_promotion_contract.rs"
[[test]]
name = "mcp_quickstart_release"
path = "tests/mcp_quickstart_release.rs"
[[test]]
name = "mcp_transport_import"
path = "tests/mcp_transport_import.rs"
[[test]]
name = "mcp_wrap_coverage"
path = "tests/mcp_wrap_coverage.rs"
[[test]]
name = "mcp_wrap_state_window_out"
path = "tests/mcp_wrap_state_window_out.rs"
[[test]]
name = "named_json_envelopes"
path = "tests/named_json_envelopes.rs"
[[test]]
name = "policy_command_grouping_test"
path = "tests/policy_command_grouping_test.rs"
[[test]]
name = "policy_edge_cases"
path = "tests/policy_edge_cases.rs"
[[test]]
name = "policy_resolve_cli"
path = "tests/policy_resolve_cli.rs"
[[test]]
name = "profile_integration_test"
path = "tests/profile_integration_test.rs"
[[test]]
name = "profile_projection_honesty"
path = "tests/profile_projection_honesty.rs"
[[test]]
name = "project_enforcement_health_cli"
path = "tests/project_enforcement_health_cli.rs"
[[test]]
name = "project_otel_cli"
path = "tests/project_otel_cli.rs"
[[test]]
name = "push_refuses_before_upload"
path = "tests/push_refuses_before_upload.rs"
[[test]]
name = "reason_code_vocabularies"
path = "tests/reason_code_vocabularies.rs"
[[test]]
name = "receipt_schema_registry_test"
path = "tests/receipt_schema_registry_test.rs"
[[test]]
name = "run_json_render_safety"
path = "tests/run_json_render_safety.rs"
[[test]]
name = "sarif_schema_parity"
path = "tests/sarif_schema_parity.rs"
[[test]]
name = "spec_reason_code_registry"
path = "tests/spec_reason_code_registry.rs"
[[test]]
name = "strict_open"
path = "tests/strict_open.rs"
[[test]]
name = "tool_signing_test"
path = "tests/tool_signing_test.rs"
[[test]]
name = "trust_basis_test"
path = "tests/trust_basis_test.rs"
[[test]]
name = "trustcard_test"
path = "tests/trustcard_test.rs"
[[test]]
name = "verify_side_effects_cli"
path = "tests/verify_side_effects_cli.rs"
[[bench]]
name = "profile_store_harness"
path = "benches/profile_store_harness.rs"
harness = false
[[bench]]
name = "suite_run_worstcase"
path = "benches/suite_run_worstcase.rs"
harness = false
[dependencies.anyhow]
version = "1"
[dependencies.assay-canonical]
version = "6.3.1"
[dependencies.assay-common]
version = "6.3.1"
features = ["std"]
default-features = false
[dependencies.assay-core]
version = "6.3.1"
[dependencies.assay-evidence]
version = "6.3.1"
[dependencies.assay-mcp-server]
version = "6.3.1"
[dependencies.assay-metrics]
version = "6.3.1"
[dependencies.assay-monitor]
version = "6.3.1"
[dependencies.assay-policy]
version = "6.3.1"
[dependencies.assay-registry]
version = "6.3.1"
[dependencies.assay-runner-core]
version = "6.3.1"
optional = true
[dependencies.assay-runner-linux]
version = "6.3.1"
optional = true
[dependencies.assay-runner-schema]
version = "6.3.1"
optional = true
[dependencies.assay-sim]
version = "6.3.1"
optional = true
[dependencies.async-trait]
version = "0.1"
[dependencies.base64]
version = "0.23"
[dependencies.chrono]
version = "0.4"
features = [
"serde",
"std",
"clock",
]
default-features = false
[dependencies.clap]
version = "4"
features = [
"derive",
"env",
]
[dependencies.crossterm]
version = "0.29"
optional = true
[dependencies.dialoguer]
version = "0.12"
[dependencies.dirs]
version = "6.0"
[dependencies.ed25519-dalek]
version = "3.0"
features = [
"pkcs8",
"pem",
"rand_core",
]
[dependencies.env_logger]
version = "0.11"
[dependencies.futures]
version = "0.3"
[dependencies.getrandom]
version = "0.4"
features = ["sys_rng"]
[dependencies.globset]
version = "0.4"
[dependencies.hex]
version = "0.4"
[dependencies.humantime]
version = "2"
[dependencies.jsonschema]
version = "0.53"
features = ["idna"]
default-features = false
[dependencies.libc]
version = "0.2"
[dependencies.nix]
version = "0.27"
features = [
"signal",
"process",
"fs",
"ioctl",
]
[dependencies.once_cell]
version = "1.21"
[dependencies.pkcs8]
version = "0.11"
features = ["pem"]
[dependencies.rand]
version = "0.8"
[dependencies.ratatui]
version = "0.30"
optional = true
[dependencies.semver]
version = "1"
[dependencies.serde]
version = "1.0"
features = [
"derive",
"std",
]
default-features = false
[dependencies.serde_json]
version = "1.0"
features = ["std"]
default-features = false
[dependencies.serde_yaml]
version = "0.9"
[dependencies.sha2]
version = "0.11"
[dependencies.similar]
version = "3"
[dependencies.sysinfo]
version = "0.30"
[dependencies.tokio]
version = "1"
features = ["full"]
[dependencies.tokio-stream]
version = "0.1"
[dependencies.tracing]
version = "0.1"
[dev-dependencies.assert_cmd]
version = "2.2.2"
[dev-dependencies.criterion]
version = "0.8"
[dev-dependencies.flate2]
version = "1.1"
[dev-dependencies.predicates]
version = "3.1.4"
[dev-dependencies.proptest]
version = "1.10"
[dev-dependencies.regex]
version = "1"
[dev-dependencies.serial_test]
version = "3.5.0"
[dev-dependencies.tar]
version = "0.4"
[dev-dependencies.tempfile]
version = "3"
[target.'cfg(target_os = "linux")'.dependencies.landlock]
version = "=0.4.7"
[target."cfg(unix)".dev-dependencies.process-wrap]
version = "9.1"
features = [
"process-group",
"std",
]
default-features = false
[target."cfg(windows)".dev-dependencies.process-wrap]
version = "9.1"
features = [
"job-object",
"std",
]
default-features = false
[lints.clippy]
missing_errors_doc = "allow"
print_stdout = "allow"
unwrap_used = "allow"
[lints.clippy.all]
level = "warn"
priority = -1
[lints.clippy.pedantic]
level = "allow"
priority = -1
[lints.rust]
missing_docs = "allow"
unsafe_code = "deny"
unused_lifetimes = "warn"
[lints.rust.rust_2018_idioms]
level = "warn"
priority = -1