vouch-protocol 1.6.2__tar.gz → 2.0.1__tar.gz
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.
- {vouch_protocol-1.6.2/vouch_protocol.egg-info → vouch_protocol-2.0.1}/PKG-INFO +58 -35
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/README.md +49 -32
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/pyproject.toml +10 -3
- vouch_protocol-2.0.1/tests/test_accountability.py +371 -0
- vouch_protocol-2.0.1/tests/test_audit_trail.py +158 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_auditor.py +44 -34
- vouch_protocol-2.0.1/tests/test_autosign.py +452 -0
- vouch_protocol-2.0.1/tests/test_budget.py +102 -0
- vouch_protocol-2.0.1/tests/test_caveats.py +169 -0
- vouch_protocol-2.0.1/tests/test_cli_init.py +63 -0
- vouch_protocol-2.0.1/tests/test_conformance.py +35 -0
- vouch_protocol-2.0.1/tests/test_credential_gate.py +126 -0
- vouch_protocol-2.0.1/tests/test_deliberation.py +179 -0
- vouch_protocol-2.0.1/tests/test_dx_sugar.py +481 -0
- vouch_protocol-2.0.1/tests/test_fastapi_credential_gate.py +106 -0
- vouch_protocol-2.0.1/tests/test_fleet.py +261 -0
- vouch_protocol-2.0.1/tests/test_grade.py +66 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_hasura_integration.py +42 -58
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_hybrid.py +13 -13
- vouch_protocol-2.0.1/tests/test_liveness_conformance.py +234 -0
- vouch_protocol-2.0.1/tests/test_proof_of_integration.py +161 -0
- vouch_protocol-2.0.1/tests/test_provenance.py +169 -0
- vouch_protocol-2.0.1/tests/test_reasoning.py +279 -0
- vouch_protocol-2.0.1/tests/test_receipts.py +122 -0
- vouch_protocol-2.0.1/tests/test_recovery.py +113 -0
- vouch_protocol-2.0.1/tests/test_reputation_aggregate.py +99 -0
- vouch_protocol-2.0.1/tests/test_reputation_disputes.py +93 -0
- vouch_protocol-2.0.1/tests/test_reputation_ledger.py +105 -0
- vouch_protocol-2.0.1/tests/test_reputation_policy.py +81 -0
- vouch_protocol-2.0.1/tests/test_reputation_portability.py +106 -0
- vouch_protocol-2.0.1/tests/test_robot_access.py +181 -0
- vouch_protocol-2.0.1/tests/test_robot_conformance.py +169 -0
- vouch_protocol-2.0.1/tests/test_robot_custody.py +159 -0
- vouch_protocol-2.0.1/tests/test_robot_embodiment.py +197 -0
- vouch_protocol-2.0.1/tests/test_robot_fusion.py +121 -0
- vouch_protocol-2.0.1/tests/test_robot_handshake_blackbox_passport.py +186 -0
- vouch_protocol-2.0.1/tests/test_robot_identity.py +78 -0
- vouch_protocol-2.0.1/tests/test_robot_lease_quorum.py +231 -0
- vouch_protocol-2.0.1/tests/test_robot_lifecycle.py +160 -0
- vouch_protocol-2.0.1/tests/test_robot_liveness_revocation.py +356 -0
- vouch_protocol-2.0.1/tests/test_robot_perception.py +158 -0
- vouch_protocol-2.0.1/tests/test_robot_pq.py +112 -0
- vouch_protocol-2.0.1/tests/test_robot_provenance_capability.py +159 -0
- vouch_protocol-2.0.1/tests/test_robot_safety_record.py +161 -0
- vouch_protocol-2.0.1/tests/test_robot_wear.py +124 -0
- vouch_protocol-2.0.1/tests/test_secure_key_custody.py +187 -0
- vouch_protocol-2.0.1/tests/test_shield_guard.py +107 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_signer_vc.py +35 -47
- vouch_protocol-2.0.1/tests/test_threshold.py +168 -0
- vouch_protocol-2.0.1/tests/test_tool_registry.py +105 -0
- vouch_protocol-2.0.1/tests/test_transparency.py +224 -0
- vouch_protocol-2.0.1/tests/test_transport.py +247 -0
- vouch_protocol-2.0.1/tests/test_transport_http_rendezvous.py +219 -0
- vouch_protocol-2.0.1/tests/test_transport_rendezvous.py +157 -0
- vouch_protocol-2.0.1/tests/test_transport_udna_sdk.py +139 -0
- vouch_protocol-2.0.1/tests/test_trifecta.py +80 -0
- vouch_protocol-2.0.1/tests/test_trust_check.py +114 -0
- vouch_protocol-2.0.1/tests/test_validator_server.py +126 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_verifier_vc.py +54 -61
- vouch_protocol-2.0.1/vouch/__init__.py +694 -0
- vouch_protocol-2.0.1/vouch/accountability.py +592 -0
- vouch_protocol-2.0.1/vouch/agent.py +358 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/async_verifier.py +5 -177
- vouch_protocol-2.0.1/vouch/audit_trail.py +310 -0
- vouch_protocol-2.0.1/vouch/auditor.py +121 -0
- vouch_protocol-2.0.1/vouch/autosign.py +479 -0
- vouch_protocol-2.0.1/vouch/budget.py +211 -0
- vouch_protocol-2.0.1/vouch/caveats.py +305 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/cli.py +212 -31
- vouch_protocol-2.0.1/vouch/conformance.py +502 -0
- vouch_protocol-2.0.1/vouch/credential.py +181 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/data_integrity.py +21 -6
- vouch_protocol-2.0.1/vouch/deliberation.py +457 -0
- vouch_protocol-2.0.1/vouch/fleet.py +291 -0
- vouch_protocol-2.0.1/vouch/gate.py +119 -0
- vouch_protocol-2.0.1/vouch/grade.py +221 -0
- vouch_protocol-2.0.1/vouch/integrations/_common.py +61 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/integrations/a2a.py +2 -2
- vouch_protocol-2.0.1/vouch/integrations/autogen/__init__.py +50 -0
- vouch_protocol-2.0.1/vouch/integrations/autogpt/__init__.py +17 -0
- vouch_protocol-2.0.1/vouch/integrations/autogpt/commands.py +42 -0
- vouch_protocol-2.0.1/vouch/integrations/claude-code/settings.hooks.json +16 -0
- vouch_protocol-2.0.1/vouch/integrations/crewai/__init__.py +17 -0
- vouch_protocol-2.0.1/vouch/integrations/crewai/tool.py +90 -0
- vouch_protocol-2.0.1/vouch/integrations/fastapi.py +75 -0
- vouch_protocol-2.0.1/vouch/integrations/google.py +24 -0
- vouch_protocol-2.0.1/vouch/integrations/goose.py +132 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/integrations/hasura/webhook.py +60 -26
- vouch_protocol-2.0.1/vouch/integrations/langchain/__init__.py +17 -0
- vouch_protocol-2.0.1/vouch/integrations/langchain/tool.py +95 -0
- vouch_protocol-2.0.1/vouch/integrations/langgraph.py +87 -0
- vouch_protocol-2.0.1/vouch/integrations/mcp/server.py +267 -0
- vouch_protocol-2.0.1/vouch/integrations/vertex_ai/__init__.py +22 -0
- vouch_protocol-2.0.1/vouch/keystore.py +217 -0
- vouch_protocol-2.0.1/vouch/liveness_conformance.py +409 -0
- vouch_protocol-2.0.1/vouch/mcp_guard.py +265 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/onboard.py +22 -4
- vouch_protocol-2.0.1/vouch/proof_of_integration.py +337 -0
- vouch_protocol-2.0.1/vouch/provenance.py +291 -0
- vouch_protocol-2.0.1/vouch/reasoning.py +502 -0
- vouch_protocol-2.0.1/vouch/receipts.py +277 -0
- vouch_protocol-2.0.1/vouch/recovery.py +218 -0
- vouch_protocol-2.0.1/vouch/reputation_aggregate.py +161 -0
- vouch_protocol-2.0.1/vouch/reputation_disputes.py +150 -0
- vouch_protocol-2.0.1/vouch/reputation_ledger.py +209 -0
- vouch_protocol-2.0.1/vouch/reputation_policy.py +147 -0
- vouch_protocol-2.0.1/vouch/reputation_portability.py +178 -0
- vouch_protocol-2.0.1/vouch/robotics/__init__.py +299 -0
- vouch_protocol-2.0.1/vouch/robotics/_signing.py +29 -0
- vouch_protocol-2.0.1/vouch/robotics/access.py +268 -0
- vouch_protocol-2.0.1/vouch/robotics/blackbox.py +228 -0
- vouch_protocol-2.0.1/vouch/robotics/capability.py +170 -0
- vouch_protocol-2.0.1/vouch/robotics/conformance.py +405 -0
- vouch_protocol-2.0.1/vouch/robotics/custody.py +231 -0
- vouch_protocol-2.0.1/vouch/robotics/embodiment.py +221 -0
- vouch_protocol-2.0.1/vouch/robotics/fusion.py +200 -0
- vouch_protocol-2.0.1/vouch/robotics/handshake.py +215 -0
- vouch_protocol-2.0.1/vouch/robotics/identity.py +258 -0
- vouch_protocol-2.0.1/vouch/robotics/lease.py +169 -0
- vouch_protocol-2.0.1/vouch/robotics/lifecycle.py +312 -0
- vouch_protocol-2.0.1/vouch/robotics/liveness.py +369 -0
- vouch_protocol-2.0.1/vouch/robotics/passport.py +174 -0
- vouch_protocol-2.0.1/vouch/robotics/perception.py +232 -0
- vouch_protocol-2.0.1/vouch/robotics/physical_quorum.py +159 -0
- vouch_protocol-2.0.1/vouch/robotics/pq.py +146 -0
- vouch_protocol-2.0.1/vouch/robotics/provenance.py +130 -0
- vouch_protocol-2.0.1/vouch/robotics/revocation.py +126 -0
- vouch_protocol-2.0.1/vouch/robotics/safety_record.py +259 -0
- vouch_protocol-2.0.1/vouch/robotics/wear.py +191 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/shield/shield.py +87 -0
- vouch_protocol-2.0.1/vouch/signer.py +566 -0
- vouch_protocol-2.0.1/vouch/threshold.py +361 -0
- vouch_protocol-2.0.1/vouch/tool_registry.py +149 -0
- vouch_protocol-2.0.1/vouch/transparency.py +432 -0
- vouch_protocol-2.0.1/vouch/transport/__init__.py +137 -0
- vouch_protocol-2.0.1/vouch/transport/base.py +146 -0
- vouch_protocol-2.0.1/vouch/transport/did_key.py +77 -0
- vouch_protocol-2.0.1/vouch/transport/envelope.py +194 -0
- vouch_protocol-2.0.1/vouch/transport/http_rendezvous.py +332 -0
- vouch_protocol-2.0.1/vouch/transport/http_transport.py +160 -0
- vouch_protocol-2.0.1/vouch/transport/manager.py +188 -0
- vouch_protocol-2.0.1/vouch/transport/rendezvous.py +271 -0
- vouch_protocol-2.0.1/vouch/transport/udna.py +441 -0
- vouch_protocol-2.0.1/vouch/trifecta.py +219 -0
- vouch_protocol-2.0.1/vouch/trust_check.py +166 -0
- vouch_protocol-2.0.1/vouch/validator_server.py +193 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/verifier.py +122 -169
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1/vouch_protocol.egg-info}/PKG-INFO +58 -35
- vouch_protocol-2.0.1/vouch_protocol.egg-info/SOURCES.txt +232 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch_protocol.egg-info/requires.txt +11 -2
- vouch_protocol-1.6.2/tests/test_async_verifier.py +0 -196
- vouch_protocol-1.6.2/tests/test_delegation_chain.py +0 -195
- vouch_protocol-1.6.2/tests/test_signer.py +0 -142
- vouch_protocol-1.6.2/tests/test_signer_reputation.py +0 -122
- vouch_protocol-1.6.2/tests/test_verifier.py +0 -204
- vouch_protocol-1.6.2/vouch/__init__.py +0 -255
- vouch_protocol-1.6.2/vouch/auditor.py +0 -140
- vouch_protocol-1.6.2/vouch/integrations/_common.py +0 -91
- vouch_protocol-1.6.2/vouch/integrations/autogen/__init__.py +0 -5
- vouch_protocol-1.6.2/vouch/integrations/autogen/tool.py +0 -44
- vouch_protocol-1.6.2/vouch/integrations/autogpt/__init__.py +0 -5
- vouch_protocol-1.6.2/vouch/integrations/autogpt/commands.py +0 -78
- vouch_protocol-1.6.2/vouch/integrations/crewai/__init__.py +0 -5
- vouch_protocol-1.6.2/vouch/integrations/crewai/tool.py +0 -53
- vouch_protocol-1.6.2/vouch/integrations/google.py +0 -108
- vouch_protocol-1.6.2/vouch/integrations/langchain/__init__.py +0 -5
- vouch_protocol-1.6.2/vouch/integrations/langchain/tool.py +0 -104
- vouch_protocol-1.6.2/vouch/integrations/mcp/server.py +0 -94
- vouch_protocol-1.6.2/vouch/integrations/mlflow.py +0 -101
- vouch_protocol-1.6.2/vouch/integrations/safetensors.py +0 -126
- vouch_protocol-1.6.2/vouch/integrations/vertex_ai/__init__.py +0 -5
- vouch_protocol-1.6.2/vouch/integrations/vertex_ai/tool.py +0 -42
- vouch_protocol-1.6.2/vouch/signer.py +0 -424
- vouch_protocol-1.6.2/vouch_protocol.egg-info/SOURCES.txt +0 -124
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/LICENSE +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/MANIFEST.in +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/setup.cfg +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_attribution.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_audio_bridge.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_behavioral_attestation.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_bridge.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_c2pa_formats.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_cache.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_canary.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_data_integrity.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_git_workflow.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_heartbeat.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_hybrid_interop.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_jcs.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_jcs_interop.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_media_badge.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_media_native.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_merkle.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_multikey.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_nonce.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_quorum.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_reputation.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_revocation.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_scan.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_security_hardening.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_status_list.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_trust_entropy.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/tests/test_vc.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/attribution.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/attribution_cli.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/audio.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/behavioral_attestation.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/bridge/__init__.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/bridge/audio_routes.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/bridge/config.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/bridge/server.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/cache.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/canary.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/config.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/data_integrity_hybrid.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/did_web.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/heartbeat.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/integrations/adk.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/integrations/amnesia.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/integrations/hasura/__init__.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/integrations/mcp/__init__.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/integrations/n8n.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/integrations/streamlit/__init__.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/integrations/streamlit/seal.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/jcs.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/keys.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/kms.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/media/__init__.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/media/badge.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/media/c2pa.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/media/native.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/merkle.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/metrics.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/multikey.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/nonce.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/quorum.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/ratelimit.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/registry.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/reputation.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/revocation.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/scan/__init__.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/scan/detector.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/scan/patterns.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/seal.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/shield/__init__.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/shield/demo.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/shield/flight_recorder.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/shield/permissions.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/shield/trust_registry.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/ssrf.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/status_list.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/status_list_fetcher.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/trust_entropy.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/vc.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch/verification.py +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch_protocol.egg-info/dependency_links.txt +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch_protocol.egg-info/entry_points.txt +0 -0
- {vouch_protocol-1.6.2 → vouch_protocol-2.0.1}/vouch_protocol.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vouch-protocol
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.1
|
|
4
4
|
Summary: The Identity & Reputation Standard for AI Agents
|
|
5
5
|
Author-email: Vouch Protocol Contributors <hello@vouch-protocol.com>
|
|
6
6
|
License: Apache License 2.0
|
|
@@ -229,10 +229,14 @@ Provides-Extra: langchain
|
|
|
229
229
|
Requires-Dist: langchain>=0.1.0; extra == "langchain"
|
|
230
230
|
Provides-Extra: crewai
|
|
231
231
|
Requires-Dist: crewai>=0.1.0; extra == "crewai"
|
|
232
|
+
Provides-Extra: langgraph
|
|
233
|
+
Requires-Dist: langgraph>=0.1.0; extra == "langgraph"
|
|
234
|
+
Provides-Extra: goose
|
|
235
|
+
Requires-Dist: pyyaml>=6.0; extra == "goose"
|
|
232
236
|
Provides-Extra: autogen
|
|
233
237
|
Requires-Dist: pyautogen>=0.2.0; extra == "autogen"
|
|
234
238
|
Provides-Extra: mcp
|
|
235
|
-
Requires-Dist: mcp>=1.
|
|
239
|
+
Requires-Dist: mcp>=0.1.0; extra == "mcp"
|
|
236
240
|
Provides-Extra: vertex
|
|
237
241
|
Requires-Dist: google-cloud-aiplatform>=1.0.0; extra == "vertex"
|
|
238
242
|
Provides-Extra: streamlit
|
|
@@ -250,6 +254,8 @@ Requires-Dist: google-cloud-kms>=2.0.0; extra == "gcp"
|
|
|
250
254
|
Provides-Extra: azure
|
|
251
255
|
Requires-Dist: azure-keyvault-keys>=4.0.0; extra == "azure"
|
|
252
256
|
Provides-Extra: pq
|
|
257
|
+
Provides-Extra: udna
|
|
258
|
+
Requires-Dist: sirraya-udna-sdk>=1.0.3; extra == "udna"
|
|
253
259
|
Provides-Extra: tracing
|
|
254
260
|
Requires-Dist: opentelemetry-api>=1.20.0; extra == "tracing"
|
|
255
261
|
Requires-Dist: opentelemetry-sdk>=1.20.0; extra == "tracing"
|
|
@@ -271,7 +277,7 @@ Requires-Dist: base58>=2.1.0; extra == "dev"
|
|
|
271
277
|
Requires-Dist: qrcode>=7.4.0; extra == "dev"
|
|
272
278
|
Requires-Dist: c2pa-python>=0.5.0; extra == "dev"
|
|
273
279
|
Provides-Extra: all
|
|
274
|
-
Requires-Dist: vouch-protocol[autogen,crewai,dev,enterprise,langchain,mcp,server,streamlit,tracing,vertex]; extra == "all"
|
|
280
|
+
Requires-Dist: vouch-protocol[autogen,crewai,dev,enterprise,goose,langchain,langgraph,mcp,server,streamlit,tracing,vertex]; extra == "all"
|
|
275
281
|
Dynamic: license-file
|
|
276
282
|
|
|
277
283
|
# Vouch Protocol™
|
|
@@ -280,9 +286,9 @@ Dynamic: license-file
|
|
|
280
286
|
<img src="docs/assets/vouch-wordmark.png" alt="Vouch Protocol" width="400">
|
|
281
287
|
</p>
|
|
282
288
|
|
|
283
|
-
<sub><em>Vouch Protocol™
|
|
289
|
+
<sub><em>Vouch Protocol™ is a common-law trademark.</em></sub>
|
|
284
290
|
|
|
285
|
-
<p align="center">The Open Standard for Identity & Provenance of AI Agents</strong>
|
|
291
|
+
<p align="center"><strong>The Open Standard for Identity & Provenance of AI Agents</strong>
|
|
286
292
|
</p>
|
|
287
293
|
|
|
288
294
|
<p align="center">
|
|
@@ -299,6 +305,10 @@ Dynamic: license-file
|
|
|
299
305
|
<a href="https://discord.gg/mMqx5cG9Y"><img src="https://img.shields.io/badge/Discord-Join_Community-7289da?logo=discord&logoColor=white" alt="Discord"></a>
|
|
300
306
|
</p>
|
|
301
307
|
|
|
308
|
+
<p align="center">
|
|
309
|
+
<a href="https://codespaces.new/vouch-protocol/vouch"><img src="https://github.com/codespaces/badge.svg" alt="Open in GitHub Codespaces" height="28"></a>
|
|
310
|
+
</p>
|
|
311
|
+
|
|
302
312
|
<p align="center">
|
|
303
313
|
<a href="https://github.com/vouch-protocol/vouch/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg" alt="Apache 2.0 License"></a>
|
|
304
314
|
</p>
|
|
@@ -307,6 +317,16 @@ Dynamic: license-file
|
|
|
307
317
|
|
|
308
318
|
## Quick Start
|
|
309
319
|
|
|
320
|
+
```bash
|
|
321
|
+
# Install (Linux and macOS). On Windows, use: pip install vouch-protocol
|
|
322
|
+
curl -fsSL https://vouch-protocol.com/install.sh | sh
|
|
323
|
+
|
|
324
|
+
# Run vouch with no arguments and pick what you want to do
|
|
325
|
+
vouch
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Prefer to do it by hand? It is three commands:
|
|
329
|
+
|
|
310
330
|
```bash
|
|
311
331
|
pip install vouch-protocol
|
|
312
332
|
|
|
@@ -317,6 +337,8 @@ vouch git init
|
|
|
317
337
|
git commit -m "Secure commit"
|
|
318
338
|
```
|
|
319
339
|
|
|
340
|
+
Setting up an agent instead of git signing? `vouch onboard --quick` generates a working identity, allow-list, verifier, and heartbeat config in one command.
|
|
341
|
+
|
|
320
342
|
---
|
|
321
343
|
|
|
322
344
|
## What's New in v1.0
|
|
@@ -329,7 +351,7 @@ Vouch Protocol v1.0 aligns directly with the open standard:
|
|
|
329
351
|
- **Hybrid post-quantum profile** (`hybrid-eddsa-mldsa44-jcs-2026`) as an optional add-on for regulated deployments aligning with NIST CNSA 2.0 / NSM-10 timelines.
|
|
330
352
|
- **Three-way cross-implementation interop** verified across Python, TypeScript, and Go.
|
|
331
353
|
|
|
332
|
-
|
|
354
|
+
Credentials are issued with `Signer.sign()` and checked with `Verifier.verify()`. See the Specification at [vouch-protocol.com/specs/SPEC/](https://vouch-protocol.com/specs/SPEC/) for the full specification.
|
|
333
355
|
|
|
334
356
|
---
|
|
335
357
|
|
|
@@ -356,11 +378,13 @@ Vouch is not one tool, it is a set of them. Here is the whole map.
|
|
|
356
378
|
- **Vouch Shield** a runtime check that inspects every tool call against your rules, like a customs officer at the door.
|
|
357
379
|
- **Continuous trust** heartbeats and session vouchers, so trust is a live signal that has to be renewed, not a badge that is issued once and trusted forever.
|
|
358
380
|
|
|
359
|
-
### Framework integrations (
|
|
360
|
-
Standalone packages that drop Vouch into the agent framework you already use. Each one issues a verifiable credential for a tool call, with optional delegation back to a human principal.
|
|
381
|
+
### Framework integrations (new in v1.6.2)
|
|
382
|
+
Standalone packages that drop Vouch into the agent framework you already use. Each one issues a verifiable credential for a tool call, with optional delegation back to a human principal.
|
|
361
383
|
- **`vouch-langchain`** a LangChain tool that signs each tool call before it leaves the agent.
|
|
384
|
+
- **`vouch-langgraph`** signs LangGraph tool calls and graph nodes, so a signed trail runs across the whole graph.
|
|
362
385
|
- **`vouch-crewai`** a CrewAI tool, with supervisor-to-worker delegation that can only narrow authority, never widen it.
|
|
363
386
|
- **`vouch-a2a`** binds an A2A (Agent2Agent) Agent Card to a Vouch identity, so two agents can verify each other before they collaborate.
|
|
387
|
+
- **`vouch-goose`** registers the Vouch MCP server as an extension for Block's Goose agent, so a Goose session can sign and verify out of the box.
|
|
364
388
|
- **`vouch-mlflow`** signs an MLflow model artifact at registration time, bound to a content digest so any change to the weights breaks the signature.
|
|
365
389
|
- **`vouch-safetensors`** embeds a credential in a `.safetensors` header, complementary to OpenSSF Model Signing, so a model carries who produced it.
|
|
366
390
|
|
|
@@ -370,7 +394,7 @@ The standalone **`vouch-mcp`** package above ships alongside these in v1.6.2.
|
|
|
370
394
|
Python, TypeScript, and Go are the full reference implementations. A Rust core with idiomatic Swift, JVM (Java and Kotlin), .NET, and C wrappers shares one codebase, so every language produces byte-identical output, verified against shared test vectors. A WebAssembly build is included for the browser and the edge. See the table further down for status per language.
|
|
371
395
|
|
|
372
396
|
### Robots and embodied agents
|
|
373
|
-
A robot is an agent with a body, so the same
|
|
397
|
+
A robot is an agent with a body, so identity and accountability matter even more once it can cause physical harm. The `vouch.robotics` module ships six capabilities on the same `eddsa-jcs-2022` credentials as the rest of Vouch: hardware-rooted identity (bound to a TPM or secure element, so it cannot be cloned to other hardware), model and config provenance (re-signable on every OTA update), physical capability scope (force, speed, a tighter cap near humans, allowed zones, and shift windows, checked before each actuation, with narrow-only delegation), a robot-to-robot trust handshake, an encrypted tamper-evident black box with a verifiable kill switch, and a scannable offline passport. All six are implemented in Python, TypeScript, Go, and the Rust core, which flows to the Swift, Kotlin/JVM, .NET, C/C++, and WebAssembly wrappers, so a robotics credential signed in one language verifies in every other. Fourteen further capabilities round out the set: a living-trust heartbeat (a signed per-interval motion summary whose trust decays unless it is renewed in-envelope), two-level credential revocation (per-credential status lists and whole-DID kill), an accountable safety record (a tamper-evident incident ledger summarized into a portable signed record), signed perception provenance (each captured sensor frame's hash bound to the robot's key and hash-linked, so a robot can prove what its sensors saw and a substituted frame is detectable), an offline delegation lease (a short-lived, scope-bounded grant a disconnected robot verifies and acts on with no network call, nesting across vendors), a physical quorum (a cryptographic two-person rule requiring M of N attested approvers for a high-consequence action), lifecycle credentials (ownership transfer that chains into a verifiable chain of custody, key rotation that forms a key history, and a signed decommission that retires the robot), a regulatory conformance profile (a machine-checkable mapping from a robot's credentials to the clauses of ISO 10218 and 15066, the EU Machinery Regulation, the EU AI Act, and UL 3300, with a deterministic checker and a signed conformance attestation), post-quantum signing by default (robot credentials sign with the hybrid classical-plus-ML-DSA-44 cryptosuite, with backward-compatible verification, so a robot stays unforgeable across its decade-long life), and cross-embodiment identity continuity (an agent identity that moves between robot bodies, with an embodiment credential re-binding to each body's hardware root and a continuity chain that proves the same accountable agent persisted, plus a fork check), a physical custody handoff chain (a signed record of who accepted custody of a task or object at each hop across human and robot actors, so an incident traces to the exact hop and an attested condition localizes damage to the holder responsible), bounded infrastructure access (an operator-signed grant naming a resource, its permitted operations, an optional zone, and a time window, which a robot pairs with a signed request the resource authorizes offline, so a robot can open a door or dock at a charger with a tamper-evident, attributable, shrink-only record), fused-sensor provenance (a signed attestation binding a robot's fused world model to the exact set of input frame hashes and the fusion method that produced it, so a manipulated fusion result or a dropped input is detectable and every fused input traces to a frame the robot recorded), and wear and degradation attestation (a robot signs its own wear level bound to its identity and hash-linked over time, and a deterministic rule narrows its physical capability scope as it degrades, so a worn robot operates inside a tighter, verifiable envelope than the static limit it shipped with), implemented across the same languages and pinned by the shared interop vector. See [docs/robotics.md](docs/robotics.md) and the defensive disclosures PAD-064 through PAD-070, PAD-076 through PAD-084, and PAD-087 through PAD-092.
|
|
374
398
|
|
|
375
399
|
### Inside your AI tools
|
|
376
400
|
- **Claude Skill**, **OpenAI Custom GPT**, and **Gemini Gem** packages that teach your AI assistant how to add Vouch to your code, running on your own AI subscription.
|
|
@@ -420,7 +444,6 @@ AI agents are making real-world API calls with **ZERO cryptographic proof** of:
|
|
|
420
444
|
- **Human-readable JSON** (proof attaches as a sibling object, no Base64-wrapped opaque payload)
|
|
421
445
|
- **Framework-agnostic** (works with MCP, LangChain, CrewAI, AutoGPT, AutoGen, Vertex AI)
|
|
422
446
|
- **Cross-language interop** (Python, TypeScript, Go, byte-identical canonical form)
|
|
423
|
-
- **Backward-compatible** (legacy v0.x JWS API still supported during deprecation window)
|
|
424
447
|
- **Open source** (Apache 2.0 license, CC0 prior-art portfolio)
|
|
425
448
|
|
|
426
449
|
**Think of it as:**
|
|
@@ -442,9 +465,9 @@ flowchart LR
|
|
|
442
465
|
V{"✅ Verified"}
|
|
443
466
|
|
|
444
467
|
P -->|"Delegation VC"| A
|
|
445
|
-
A -->|"
|
|
468
|
+
A -->|"sign(intent)"| C
|
|
446
469
|
C -->|"HTTP body<br/>application/vc+vouch"| API
|
|
447
|
-
API -->|"
|
|
470
|
+
API -->|"verify()"| V
|
|
448
471
|
```
|
|
449
472
|
|
|
450
473
|
**4 Simple Steps:**
|
|
@@ -502,6 +525,10 @@ flowchart TB
|
|
|
502
525
|
|
|
503
526
|
### 1. Install
|
|
504
527
|
```bash
|
|
528
|
+
# Linux and macOS: one line
|
|
529
|
+
curl -fsSL https://vouch-protocol.com/install.sh | sh
|
|
530
|
+
|
|
531
|
+
# Or with pip (any platform)
|
|
505
532
|
pip install vouch-protocol
|
|
506
533
|
```
|
|
507
534
|
|
|
@@ -522,19 +549,13 @@ signer = Signer(
|
|
|
522
549
|
did=os.environ['VOUCH_DID']
|
|
523
550
|
)
|
|
524
551
|
|
|
525
|
-
credential = signer.
|
|
552
|
+
credential = signer.sign(intent={
|
|
526
553
|
'action': 'read_database',
|
|
527
554
|
'target': 'users_table',
|
|
528
555
|
'resource': 'https://api.example.com/v1/users',
|
|
529
556
|
})
|
|
530
557
|
# Send credential as the JSON body of the API request, content-type
|
|
531
|
-
# application/vc+vouch
|
|
532
|
-
```
|
|
533
|
-
|
|
534
|
-
**Legacy v0.x path (JWS, still supported):**
|
|
535
|
-
```python
|
|
536
|
-
token = signer.sign({'action': 'read_database', 'target': 'users'})
|
|
537
|
-
# Include token in Vouch-Token header
|
|
558
|
+
# application/vc+vouch
|
|
538
559
|
```
|
|
539
560
|
|
|
540
561
|
### 4. Verify (API Side)
|
|
@@ -551,7 +572,7 @@ async def protected_route(request: Request):
|
|
|
551
572
|
credential = await request.json()
|
|
552
573
|
public_key = '{"kty":"OKP", ...}' # Resolved from did:web or trusted root
|
|
553
574
|
|
|
554
|
-
is_valid, passport = Verifier.
|
|
575
|
+
is_valid, passport = Verifier.verify(credential, public_key=public_key)
|
|
555
576
|
if not is_valid:
|
|
556
577
|
raise HTTPException(status_code=401, detail="Untrusted Agent")
|
|
557
578
|
|
|
@@ -562,18 +583,6 @@ async def protected_route(request: Request):
|
|
|
562
583
|
}
|
|
563
584
|
```
|
|
564
585
|
|
|
565
|
-
**Legacy v0.x path:**
|
|
566
|
-
```python
|
|
567
|
-
from vouch import Verifier
|
|
568
|
-
|
|
569
|
-
@app.post("/api/legacy")
|
|
570
|
-
def legacy_route(vouch_token: str = Header(alias="Vouch-Token")):
|
|
571
|
-
is_valid, passport = Verifier.verify(vouch_token, public_key_jwk=public_key)
|
|
572
|
-
if not is_valid:
|
|
573
|
-
raise HTTPException(status_code=401, detail="Untrusted Agent")
|
|
574
|
-
return {"status": "Verified", "agent": passport.sub}
|
|
575
|
-
```
|
|
576
|
-
|
|
577
586
|
**That's it.** A few lines to sign, a few to verify, on either path.
|
|
578
587
|
|
|
579
588
|
---
|
|
@@ -609,7 +618,7 @@ Works with all major AI frameworks out-of-the-box:
|
|
|
609
618
|
|
|
610
619
|
```python
|
|
611
620
|
# Optional v1.0 profile, requires `pip install pqcrypto`
|
|
612
|
-
credential = signer.
|
|
621
|
+
credential = signer.sign_hybrid(intent={
|
|
613
622
|
'action': 'submit_clinical_finding',
|
|
614
623
|
'target': 'trial:NCT00000001',
|
|
615
624
|
'resource': 'https://fda-submissions.example.com/api/findings',
|
|
@@ -740,7 +749,7 @@ Built by [Ramprasad Gaddam](https://www.linkedin.com/in/rampy) ([Twitter/X](http
|
|
|
740
749
|
|
|
741
750
|
## Contributing
|
|
742
751
|
|
|
743
|
-
Contributions welcome. See [CONTRIBUTING.md](https://github.com/vouch-protocol/vouch/blob/main/CONTRIBUTING.md).
|
|
752
|
+
Contributions welcome. See [CONTRIBUTING.md](https://github.com/vouch-protocol/vouch/blob/main/CONTRIBUTING.md). Looking for a place to start? Browse our [good first issues](https://github.com/vouch-protocol/vouch/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22), and open a ready-made dev environment with one click using the [Open in GitHub Codespaces](https://codespaces.new/vouch-protocol/vouch) badge above.
|
|
744
753
|
|
|
745
754
|
**Areas where help is most useful:**
|
|
746
755
|
- [ ] Additional framework integrations (Haystack, Semantic Kernel, LlamaIndex, others)
|
|
@@ -749,6 +758,20 @@ Contributions welcome. See [CONTRIBUTING.md](https://github.com/vouch-protocol/v
|
|
|
749
758
|
- [ ] Independent security review and audit
|
|
750
759
|
- [ ] Reference implementations in additional languages (Rust, Java, .NET)
|
|
751
760
|
|
|
761
|
+
## Contributors
|
|
762
|
+
|
|
763
|
+
Thanks goes to these wonderful people. This section is maintained automatically by the [all-contributors](https://allcontributors.org/) bot.
|
|
764
|
+
|
|
765
|
+
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
766
|
+
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
767
|
+
|
|
768
|
+
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
|
769
|
+
<!-- prettier-ignore-start -->
|
|
770
|
+
<!-- markdownlint-disable -->
|
|
771
|
+
<!-- markdownlint-restore -->
|
|
772
|
+
<!-- prettier-ignore-end -->
|
|
773
|
+
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
|
774
|
+
|
|
752
775
|
---
|
|
753
776
|
|
|
754
777
|
**Star this repo if you find it useful.**
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<img src="docs/assets/vouch-wordmark.png" alt="Vouch Protocol" width="400">
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
|
-
<sub><em>Vouch Protocol™
|
|
7
|
+
<sub><em>Vouch Protocol™ is a common-law trademark.</em></sub>
|
|
8
8
|
|
|
9
|
-
<p align="center">The Open Standard for Identity & Provenance of AI Agents</strong>
|
|
9
|
+
<p align="center"><strong>The Open Standard for Identity & Provenance of AI Agents</strong>
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
@@ -23,6 +23,10 @@
|
|
|
23
23
|
<a href="https://discord.gg/mMqx5cG9Y"><img src="https://img.shields.io/badge/Discord-Join_Community-7289da?logo=discord&logoColor=white" alt="Discord"></a>
|
|
24
24
|
</p>
|
|
25
25
|
|
|
26
|
+
<p align="center">
|
|
27
|
+
<a href="https://codespaces.new/vouch-protocol/vouch"><img src="https://github.com/codespaces/badge.svg" alt="Open in GitHub Codespaces" height="28"></a>
|
|
28
|
+
</p>
|
|
29
|
+
|
|
26
30
|
<p align="center">
|
|
27
31
|
<a href="https://github.com/vouch-protocol/vouch/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-blue.svg" alt="Apache 2.0 License"></a>
|
|
28
32
|
</p>
|
|
@@ -31,6 +35,16 @@
|
|
|
31
35
|
|
|
32
36
|
## Quick Start
|
|
33
37
|
|
|
38
|
+
```bash
|
|
39
|
+
# Install (Linux and macOS). On Windows, use: pip install vouch-protocol
|
|
40
|
+
curl -fsSL https://vouch-protocol.com/install.sh | sh
|
|
41
|
+
|
|
42
|
+
# Run vouch with no arguments and pick what you want to do
|
|
43
|
+
vouch
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Prefer to do it by hand? It is three commands:
|
|
47
|
+
|
|
34
48
|
```bash
|
|
35
49
|
pip install vouch-protocol
|
|
36
50
|
|
|
@@ -41,6 +55,8 @@ vouch git init
|
|
|
41
55
|
git commit -m "Secure commit"
|
|
42
56
|
```
|
|
43
57
|
|
|
58
|
+
Setting up an agent instead of git signing? `vouch onboard --quick` generates a working identity, allow-list, verifier, and heartbeat config in one command.
|
|
59
|
+
|
|
44
60
|
---
|
|
45
61
|
|
|
46
62
|
## What's New in v1.0
|
|
@@ -53,7 +69,7 @@ Vouch Protocol v1.0 aligns directly with the open standard:
|
|
|
53
69
|
- **Hybrid post-quantum profile** (`hybrid-eddsa-mldsa44-jcs-2026`) as an optional add-on for regulated deployments aligning with NIST CNSA 2.0 / NSM-10 timelines.
|
|
54
70
|
- **Three-way cross-implementation interop** verified across Python, TypeScript, and Go.
|
|
55
71
|
|
|
56
|
-
|
|
72
|
+
Credentials are issued with `Signer.sign()` and checked with `Verifier.verify()`. See the Specification at [vouch-protocol.com/specs/SPEC/](https://vouch-protocol.com/specs/SPEC/) for the full specification.
|
|
57
73
|
|
|
58
74
|
---
|
|
59
75
|
|
|
@@ -80,11 +96,13 @@ Vouch is not one tool, it is a set of them. Here is the whole map.
|
|
|
80
96
|
- **Vouch Shield** a runtime check that inspects every tool call against your rules, like a customs officer at the door.
|
|
81
97
|
- **Continuous trust** heartbeats and session vouchers, so trust is a live signal that has to be renewed, not a badge that is issued once and trusted forever.
|
|
82
98
|
|
|
83
|
-
### Framework integrations (
|
|
84
|
-
Standalone packages that drop Vouch into the agent framework you already use. Each one issues a verifiable credential for a tool call, with optional delegation back to a human principal.
|
|
99
|
+
### Framework integrations (new in v1.6.2)
|
|
100
|
+
Standalone packages that drop Vouch into the agent framework you already use. Each one issues a verifiable credential for a tool call, with optional delegation back to a human principal.
|
|
85
101
|
- **`vouch-langchain`** a LangChain tool that signs each tool call before it leaves the agent.
|
|
102
|
+
- **`vouch-langgraph`** signs LangGraph tool calls and graph nodes, so a signed trail runs across the whole graph.
|
|
86
103
|
- **`vouch-crewai`** a CrewAI tool, with supervisor-to-worker delegation that can only narrow authority, never widen it.
|
|
87
104
|
- **`vouch-a2a`** binds an A2A (Agent2Agent) Agent Card to a Vouch identity, so two agents can verify each other before they collaborate.
|
|
105
|
+
- **`vouch-goose`** registers the Vouch MCP server as an extension for Block's Goose agent, so a Goose session can sign and verify out of the box.
|
|
88
106
|
- **`vouch-mlflow`** signs an MLflow model artifact at registration time, bound to a content digest so any change to the weights breaks the signature.
|
|
89
107
|
- **`vouch-safetensors`** embeds a credential in a `.safetensors` header, complementary to OpenSSF Model Signing, so a model carries who produced it.
|
|
90
108
|
|
|
@@ -94,7 +112,7 @@ The standalone **`vouch-mcp`** package above ships alongside these in v1.6.2.
|
|
|
94
112
|
Python, TypeScript, and Go are the full reference implementations. A Rust core with idiomatic Swift, JVM (Java and Kotlin), .NET, and C wrappers shares one codebase, so every language produces byte-identical output, verified against shared test vectors. A WebAssembly build is included for the browser and the edge. See the table further down for status per language.
|
|
95
113
|
|
|
96
114
|
### Robots and embodied agents
|
|
97
|
-
A robot is an agent with a body, so the same
|
|
115
|
+
A robot is an agent with a body, so identity and accountability matter even more once it can cause physical harm. The `vouch.robotics` module ships six capabilities on the same `eddsa-jcs-2022` credentials as the rest of Vouch: hardware-rooted identity (bound to a TPM or secure element, so it cannot be cloned to other hardware), model and config provenance (re-signable on every OTA update), physical capability scope (force, speed, a tighter cap near humans, allowed zones, and shift windows, checked before each actuation, with narrow-only delegation), a robot-to-robot trust handshake, an encrypted tamper-evident black box with a verifiable kill switch, and a scannable offline passport. All six are implemented in Python, TypeScript, Go, and the Rust core, which flows to the Swift, Kotlin/JVM, .NET, C/C++, and WebAssembly wrappers, so a robotics credential signed in one language verifies in every other. Fourteen further capabilities round out the set: a living-trust heartbeat (a signed per-interval motion summary whose trust decays unless it is renewed in-envelope), two-level credential revocation (per-credential status lists and whole-DID kill), an accountable safety record (a tamper-evident incident ledger summarized into a portable signed record), signed perception provenance (each captured sensor frame's hash bound to the robot's key and hash-linked, so a robot can prove what its sensors saw and a substituted frame is detectable), an offline delegation lease (a short-lived, scope-bounded grant a disconnected robot verifies and acts on with no network call, nesting across vendors), a physical quorum (a cryptographic two-person rule requiring M of N attested approvers for a high-consequence action), lifecycle credentials (ownership transfer that chains into a verifiable chain of custody, key rotation that forms a key history, and a signed decommission that retires the robot), a regulatory conformance profile (a machine-checkable mapping from a robot's credentials to the clauses of ISO 10218 and 15066, the EU Machinery Regulation, the EU AI Act, and UL 3300, with a deterministic checker and a signed conformance attestation), post-quantum signing by default (robot credentials sign with the hybrid classical-plus-ML-DSA-44 cryptosuite, with backward-compatible verification, so a robot stays unforgeable across its decade-long life), and cross-embodiment identity continuity (an agent identity that moves between robot bodies, with an embodiment credential re-binding to each body's hardware root and a continuity chain that proves the same accountable agent persisted, plus a fork check), a physical custody handoff chain (a signed record of who accepted custody of a task or object at each hop across human and robot actors, so an incident traces to the exact hop and an attested condition localizes damage to the holder responsible), bounded infrastructure access (an operator-signed grant naming a resource, its permitted operations, an optional zone, and a time window, which a robot pairs with a signed request the resource authorizes offline, so a robot can open a door or dock at a charger with a tamper-evident, attributable, shrink-only record), fused-sensor provenance (a signed attestation binding a robot's fused world model to the exact set of input frame hashes and the fusion method that produced it, so a manipulated fusion result or a dropped input is detectable and every fused input traces to a frame the robot recorded), and wear and degradation attestation (a robot signs its own wear level bound to its identity and hash-linked over time, and a deterministic rule narrows its physical capability scope as it degrades, so a worn robot operates inside a tighter, verifiable envelope than the static limit it shipped with), implemented across the same languages and pinned by the shared interop vector. See [docs/robotics.md](docs/robotics.md) and the defensive disclosures PAD-064 through PAD-070, PAD-076 through PAD-084, and PAD-087 through PAD-092.
|
|
98
116
|
|
|
99
117
|
### Inside your AI tools
|
|
100
118
|
- **Claude Skill**, **OpenAI Custom GPT**, and **Gemini Gem** packages that teach your AI assistant how to add Vouch to your code, running on your own AI subscription.
|
|
@@ -144,7 +162,6 @@ AI agents are making real-world API calls with **ZERO cryptographic proof** of:
|
|
|
144
162
|
- **Human-readable JSON** (proof attaches as a sibling object, no Base64-wrapped opaque payload)
|
|
145
163
|
- **Framework-agnostic** (works with MCP, LangChain, CrewAI, AutoGPT, AutoGen, Vertex AI)
|
|
146
164
|
- **Cross-language interop** (Python, TypeScript, Go, byte-identical canonical form)
|
|
147
|
-
- **Backward-compatible** (legacy v0.x JWS API still supported during deprecation window)
|
|
148
165
|
- **Open source** (Apache 2.0 license, CC0 prior-art portfolio)
|
|
149
166
|
|
|
150
167
|
**Think of it as:**
|
|
@@ -166,9 +183,9 @@ flowchart LR
|
|
|
166
183
|
V{"✅ Verified"}
|
|
167
184
|
|
|
168
185
|
P -->|"Delegation VC"| A
|
|
169
|
-
A -->|"
|
|
186
|
+
A -->|"sign(intent)"| C
|
|
170
187
|
C -->|"HTTP body<br/>application/vc+vouch"| API
|
|
171
|
-
API -->|"
|
|
188
|
+
API -->|"verify()"| V
|
|
172
189
|
```
|
|
173
190
|
|
|
174
191
|
**4 Simple Steps:**
|
|
@@ -226,6 +243,10 @@ flowchart TB
|
|
|
226
243
|
|
|
227
244
|
### 1. Install
|
|
228
245
|
```bash
|
|
246
|
+
# Linux and macOS: one line
|
|
247
|
+
curl -fsSL https://vouch-protocol.com/install.sh | sh
|
|
248
|
+
|
|
249
|
+
# Or with pip (any platform)
|
|
229
250
|
pip install vouch-protocol
|
|
230
251
|
```
|
|
231
252
|
|
|
@@ -246,19 +267,13 @@ signer = Signer(
|
|
|
246
267
|
did=os.environ['VOUCH_DID']
|
|
247
268
|
)
|
|
248
269
|
|
|
249
|
-
credential = signer.
|
|
270
|
+
credential = signer.sign(intent={
|
|
250
271
|
'action': 'read_database',
|
|
251
272
|
'target': 'users_table',
|
|
252
273
|
'resource': 'https://api.example.com/v1/users',
|
|
253
274
|
})
|
|
254
275
|
# Send credential as the JSON body of the API request, content-type
|
|
255
|
-
# application/vc+vouch
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
**Legacy v0.x path (JWS, still supported):**
|
|
259
|
-
```python
|
|
260
|
-
token = signer.sign({'action': 'read_database', 'target': 'users'})
|
|
261
|
-
# Include token in Vouch-Token header
|
|
276
|
+
# application/vc+vouch
|
|
262
277
|
```
|
|
263
278
|
|
|
264
279
|
### 4. Verify (API Side)
|
|
@@ -275,7 +290,7 @@ async def protected_route(request: Request):
|
|
|
275
290
|
credential = await request.json()
|
|
276
291
|
public_key = '{"kty":"OKP", ...}' # Resolved from did:web or trusted root
|
|
277
292
|
|
|
278
|
-
is_valid, passport = Verifier.
|
|
293
|
+
is_valid, passport = Verifier.verify(credential, public_key=public_key)
|
|
279
294
|
if not is_valid:
|
|
280
295
|
raise HTTPException(status_code=401, detail="Untrusted Agent")
|
|
281
296
|
|
|
@@ -286,18 +301,6 @@ async def protected_route(request: Request):
|
|
|
286
301
|
}
|
|
287
302
|
```
|
|
288
303
|
|
|
289
|
-
**Legacy v0.x path:**
|
|
290
|
-
```python
|
|
291
|
-
from vouch import Verifier
|
|
292
|
-
|
|
293
|
-
@app.post("/api/legacy")
|
|
294
|
-
def legacy_route(vouch_token: str = Header(alias="Vouch-Token")):
|
|
295
|
-
is_valid, passport = Verifier.verify(vouch_token, public_key_jwk=public_key)
|
|
296
|
-
if not is_valid:
|
|
297
|
-
raise HTTPException(status_code=401, detail="Untrusted Agent")
|
|
298
|
-
return {"status": "Verified", "agent": passport.sub}
|
|
299
|
-
```
|
|
300
|
-
|
|
301
304
|
**That's it.** A few lines to sign, a few to verify, on either path.
|
|
302
305
|
|
|
303
306
|
---
|
|
@@ -333,7 +336,7 @@ Works with all major AI frameworks out-of-the-box:
|
|
|
333
336
|
|
|
334
337
|
```python
|
|
335
338
|
# Optional v1.0 profile, requires `pip install pqcrypto`
|
|
336
|
-
credential = signer.
|
|
339
|
+
credential = signer.sign_hybrid(intent={
|
|
337
340
|
'action': 'submit_clinical_finding',
|
|
338
341
|
'target': 'trial:NCT00000001',
|
|
339
342
|
'resource': 'https://fda-submissions.example.com/api/findings',
|
|
@@ -464,7 +467,7 @@ Built by [Ramprasad Gaddam](https://www.linkedin.com/in/rampy) ([Twitter/X](http
|
|
|
464
467
|
|
|
465
468
|
## Contributing
|
|
466
469
|
|
|
467
|
-
Contributions welcome. See [CONTRIBUTING.md](https://github.com/vouch-protocol/vouch/blob/main/CONTRIBUTING.md).
|
|
470
|
+
Contributions welcome. See [CONTRIBUTING.md](https://github.com/vouch-protocol/vouch/blob/main/CONTRIBUTING.md). Looking for a place to start? Browse our [good first issues](https://github.com/vouch-protocol/vouch/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22), and open a ready-made dev environment with one click using the [Open in GitHub Codespaces](https://codespaces.new/vouch-protocol/vouch) badge above.
|
|
468
471
|
|
|
469
472
|
**Areas where help is most useful:**
|
|
470
473
|
- [ ] Additional framework integrations (Haystack, Semantic Kernel, LlamaIndex, others)
|
|
@@ -473,6 +476,20 @@ Contributions welcome. See [CONTRIBUTING.md](https://github.com/vouch-protocol/v
|
|
|
473
476
|
- [ ] Independent security review and audit
|
|
474
477
|
- [ ] Reference implementations in additional languages (Rust, Java, .NET)
|
|
475
478
|
|
|
479
|
+
## Contributors
|
|
480
|
+
|
|
481
|
+
Thanks goes to these wonderful people. This section is maintained automatically by the [all-contributors](https://allcontributors.org/) bot.
|
|
482
|
+
|
|
483
|
+
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
484
|
+
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
485
|
+
|
|
486
|
+
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
|
487
|
+
<!-- prettier-ignore-start -->
|
|
488
|
+
<!-- markdownlint-disable -->
|
|
489
|
+
<!-- markdownlint-restore -->
|
|
490
|
+
<!-- prettier-ignore-end -->
|
|
491
|
+
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
|
492
|
+
|
|
476
493
|
---
|
|
477
494
|
|
|
478
495
|
**Star this repo if you find it useful.**
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "vouch-protocol"
|
|
7
|
-
version = "
|
|
7
|
+
version = "2.0.1"
|
|
8
8
|
description = "The Identity & Reputation Standard for AI Agents"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -43,8 +43,10 @@ dependencies = [
|
|
|
43
43
|
# Framework integrations
|
|
44
44
|
langchain = ["langchain>=0.1.0"]
|
|
45
45
|
crewai = ["crewai>=0.1.0"]
|
|
46
|
+
langgraph = ["langgraph>=0.1.0"]
|
|
47
|
+
goose = ["pyyaml>=6.0"]
|
|
46
48
|
autogen = ["pyautogen>=0.2.0"]
|
|
47
|
-
mcp = ["mcp>=1.
|
|
49
|
+
mcp = ["mcp>=0.1.0"]
|
|
48
50
|
vertex = ["google-cloud-aiplatform>=1.0.0"]
|
|
49
51
|
streamlit = ["streamlit>=1.0.0"]
|
|
50
52
|
|
|
@@ -71,6 +73,11 @@ azure = ["azure-keyvault-keys>=4.0.0"]
|
|
|
71
73
|
# wrote that into a Dockerfile or requirements.txt.
|
|
72
74
|
pq = []
|
|
73
75
|
|
|
76
|
+
# UDNA (Universal DID-Native Addressing) identity-first transport.
|
|
77
|
+
# Distribution `sirraya-udna-sdk` imports as the `udna_sdk` package.
|
|
78
|
+
# Optional: when absent, the hybrid transport stack degrades to HTTP fallback.
|
|
79
|
+
udna = ["sirraya-udna-sdk>=1.0.3"]
|
|
80
|
+
|
|
74
81
|
# OpenTelemetry tracing
|
|
75
82
|
tracing = [
|
|
76
83
|
"opentelemetry-api>=1.20.0",
|
|
@@ -102,7 +109,7 @@ dev = [
|
|
|
102
109
|
|
|
103
110
|
# All optional dependencies
|
|
104
111
|
all = [
|
|
105
|
-
"vouch-protocol[langchain,crewai,autogen,mcp,vertex,streamlit,server,enterprise,tracing,dev]"
|
|
112
|
+
"vouch-protocol[langchain,crewai,langgraph,goose,autogen,mcp,vertex,streamlit,server,enterprise,tracing,dev]"
|
|
106
113
|
]
|
|
107
114
|
|
|
108
115
|
[project.urls]
|