vouch-protocol 2.0.2__tar.gz → 2.2.0__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-2.0.2/vouch_protocol.egg-info → vouch_protocol-2.2.0}/PKG-INFO +29 -19
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/README.md +18 -16
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/pyproject.toml +30 -6
- vouch_protocol-2.2.0/tests/test_agent_enroll.py +302 -0
- vouch_protocol-2.2.0/tests/test_authority_state.py +464 -0
- vouch_protocol-2.2.0/tests/test_authority_state_vectors.py +77 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_cli_init.py +25 -0
- vouch_protocol-2.2.0/tests/test_cli_root.py +266 -0
- vouch_protocol-2.2.0/tests/test_data_integrity.py +258 -0
- vouch_protocol-2.2.0/tests/test_delegation_attenuation.py +30 -0
- vouch_protocol-2.2.0/tests/test_disconnected_edge.py +239 -0
- vouch_protocol-2.2.0/tests/test_dtn_pads.py +429 -0
- vouch_protocol-2.2.0/tests/test_examples_robotics.py +397 -0
- vouch_protocol-2.2.0/tests/test_halos_evidence.py +161 -0
- vouch_protocol-2.2.0/tests/test_hardware_seam.py +183 -0
- vouch_protocol-2.2.0/tests/test_hybrid.py +697 -0
- vouch_protocol-2.2.0/tests/test_intent_recheck.py +151 -0
- vouch_protocol-2.2.0/tests/test_mcp_server_shield.py +139 -0
- vouch_protocol-2.2.0/tests/test_mint_contributor_credential.py +95 -0
- vouch_protocol-2.2.0/tests/test_orbital_accumulator.py +192 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_conformance.py +135 -2
- vouch_protocol-2.2.0/tests/test_robot_handover.py +118 -0
- vouch_protocol-2.2.0/tests/test_robot_odd.py +128 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_pq.py +71 -2
- vouch_protocol-2.2.0/tests/test_robot_root_identity.py +177 -0
- vouch_protocol-2.2.0/tests/test_robot_swarm.py +103 -0
- vouch_protocol-2.2.0/tests/test_robot_teleop.py +180 -0
- vouch_protocol-2.2.0/tests/test_root_of_trust.py +403 -0
- vouch_protocol-2.2.0/tests/test_root_of_trust_vectors.py +70 -0
- vouch_protocol-2.2.0/tests/test_ros2_action_gate.py +467 -0
- vouch_protocol-2.2.0/tests/test_runtime_vectors.py +56 -0
- vouch_protocol-2.2.0/tests/test_shield_rules.py +356 -0
- vouch_protocol-2.2.0/tests/test_shield_vectors.py +90 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_signer_vc.py +43 -9
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_status_list.py +107 -0
- vouch_protocol-2.2.0/tests/test_threshold_loader.py +132 -0
- vouch_protocol-2.2.0/tests/test_vouch_mcp.py +443 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/__init__.py +85 -1
- vouch_protocol-2.2.0/vouch/attenuation.py +287 -0
- vouch_protocol-2.2.0/vouch/authority_state.py +697 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/cli.py +634 -3
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/conformance.py +85 -31
- vouch_protocol-2.2.0/vouch/data_integrity.py +184 -0
- vouch_protocol-2.2.0/vouch/data_integrity_hybrid.py +407 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/heartbeat.py +30 -0
- vouch_protocol-2.2.0/vouch/integrations/mcp/__init__.py +5 -0
- vouch_protocol-2.2.0/vouch/integrations/mcp/server.py +1384 -0
- vouch_protocol-2.2.0/vouch/integrations/openai.py +198 -0
- vouch_protocol-2.2.0/vouch/intent_recheck.py +241 -0
- vouch_protocol-2.2.0/vouch/mcp/__init__.py +251 -0
- vouch_protocol-2.2.0/vouch/mcp/_guard.py +420 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/reasoning.py +8 -0
- vouch_protocol-2.2.0/vouch/robotics/__init__.py +634 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/_signing.py +12 -4
- vouch_protocol-2.2.0/vouch/robotics/_verify.py +43 -0
- vouch_protocol-2.2.0/vouch/robotics/accumulator.py +147 -0
- vouch_protocol-2.2.0/vouch/robotics/bundle.py +128 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/conformance.py +159 -19
- vouch_protocol-2.2.0/vouch/robotics/dtn_revocation.py +265 -0
- vouch_protocol-2.2.0/vouch/robotics/edge_trust.py +255 -0
- vouch_protocol-2.2.0/vouch/robotics/freshness.py +173 -0
- vouch_protocol-2.2.0/vouch/robotics/geoscope.py +214 -0
- vouch_protocol-2.2.0/vouch/robotics/halos.py +231 -0
- vouch_protocol-2.2.0/vouch/robotics/handover.py +194 -0
- vouch_protocol-2.2.0/vouch/robotics/hardware.py +352 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/identity.py +3 -1
- vouch_protocol-2.2.0/vouch/robotics/localization.py +284 -0
- vouch_protocol-2.2.0/vouch/robotics/odd.py +241 -0
- vouch_protocol-2.2.0/vouch/robotics/orbital.py +164 -0
- vouch_protocol-2.2.0/vouch/robotics/perception_consensus.py +182 -0
- vouch_protocol-2.2.0/vouch/robotics/pq.py +182 -0
- vouch_protocol-2.2.0/vouch/robotics/presence.py +206 -0
- vouch_protocol-2.2.0/vouch/robotics/quorum_trust.py +269 -0
- vouch_protocol-2.2.0/vouch/robotics/root_identity.py +201 -0
- vouch_protocol-2.2.0/vouch/robotics/swarm.py +201 -0
- vouch_protocol-2.2.0/vouch/robotics/teleop.py +233 -0
- vouch_protocol-2.2.0/vouch/root_of_trust.py +671 -0
- vouch_protocol-2.2.0/vouch/shield/__init__.py +55 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/shield/demo.py +19 -16
- vouch_protocol-2.2.0/vouch/shield/rules.py +413 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/shield/shield.py +134 -32
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/shield/trust_registry.py +42 -28
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/signer.py +74 -21
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/status_list.py +190 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/threshold.py +34 -9
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/trust_check.py +75 -3
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/vc.py +21 -7
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/verifier.py +17 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0/vouch_protocol.egg-info}/PKG-INFO +29 -19
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch_protocol.egg-info/SOURCES.txt +54 -1
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch_protocol.egg-info/requires.txt +11 -2
- vouch_protocol-2.0.2/tests/test_data_integrity.py +0 -102
- vouch_protocol-2.0.2/tests/test_hybrid.py +0 -282
- vouch_protocol-2.0.2/vouch/data_integrity.py +0 -130
- vouch_protocol-2.0.2/vouch/data_integrity_hybrid.py +0 -214
- vouch_protocol-2.0.2/vouch/integrations/mcp/__init__.py +0 -5
- vouch_protocol-2.0.2/vouch/integrations/mcp/server.py +0 -267
- vouch_protocol-2.0.2/vouch/robotics/__init__.py +0 -319
- vouch_protocol-2.0.2/vouch/robotics/pq.py +0 -146
- vouch_protocol-2.0.2/vouch/shield/__init__.py +0 -34
- vouch_protocol-2.0.2/vouch/shield/permissions.py +0 -224
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/LICENSE +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/MANIFEST.in +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/setup.cfg +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_accountability.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_attribution.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_audio_bridge.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_audit_trail.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_auditor.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_autosign.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_behavioral_attestation.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_bridge.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_budget.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_c2pa_formats.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_cache.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_canary.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_caveats.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_conformance.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_credential_gate.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_deliberation.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_dx_sugar.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_fastapi_credential_gate.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_fleet.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_git_workflow.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_grade.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_hasura_integration.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_heartbeat.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_hybrid_interop.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_jcs.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_jcs_interop.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_liveness_conformance.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_media_badge.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_media_native.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_merkle.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_multikey.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_nonce.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_proof_of_integration.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_provenance.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_quorum.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_reasoning.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_receipts.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_recovery.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_reputation.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_reputation_aggregate.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_reputation_disputes.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_reputation_ledger.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_reputation_policy.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_reputation_portability.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_revocation.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_access.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_consent.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_custody.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_embodiment.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_fusion.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_handshake_blackbox_passport.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_identity.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_lease_quorum.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_lifecycle.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_liveness_revocation.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_perception.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_provenance_capability.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_safety_record.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_robot_wear.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_scan.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_secure_key_custody.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_security_hardening.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_shield_guard.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_threshold.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_tool_registry.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_transparency.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_transport.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_transport_http_rendezvous.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_transport_rendezvous.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_transport_udna_sdk.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_trifecta.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_trust_check.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_trust_entropy.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_validator_server.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_vc.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/tests/test_verifier_vc.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/accountability.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/agent.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/async_verifier.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/attribution.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/attribution_cli.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/audio.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/audit_trail.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/auditor.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/autosign.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/behavioral_attestation.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/bridge/__init__.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/bridge/audio_routes.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/bridge/config.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/bridge/server.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/budget.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/cache.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/canary.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/caveats.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/config.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/credential.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/deliberation.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/did_web.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/fleet.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/gate.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/grade.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/_common.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/a2a.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/adk.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/amnesia.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/autogen/__init__.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/autogpt/__init__.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/autogpt/commands.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/claude-code/settings.hooks.json +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/crewai/__init__.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/crewai/tool.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/fastapi.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/google.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/goose.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/hasura/__init__.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/hasura/webhook.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/langchain/__init__.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/langchain/tool.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/langgraph.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/mlflow.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/n8n.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/safetensors.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/streamlit/__init__.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/streamlit/seal.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/integrations/vertex_ai/__init__.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/jcs.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/keys.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/keystore.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/kms.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/liveness_conformance.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/mcp_guard.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/media/__init__.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/media/badge.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/media/c2pa.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/media/native.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/merkle.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/metrics.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/multikey.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/nonce.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/onboard.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/proof_of_integration.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/provenance.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/quorum.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/ratelimit.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/receipts.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/recovery.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/registry.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/reputation.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/reputation_aggregate.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/reputation_disputes.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/reputation_ledger.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/reputation_policy.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/reputation_portability.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/revocation.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/access.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/blackbox.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/capability.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/consent.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/custody.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/embodiment.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/fusion.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/handshake.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/lease.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/lifecycle.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/liveness.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/passport.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/perception.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/physical_quorum.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/provenance.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/revocation.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/safety_record.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/robotics/wear.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/scan/__init__.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/scan/detector.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/scan/patterns.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/seal.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/shield/flight_recorder.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/ssrf.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/status_list_fetcher.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/tool_registry.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/transparency.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/transport/__init__.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/transport/base.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/transport/did_key.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/transport/envelope.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/transport/http_rendezvous.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/transport/http_transport.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/transport/manager.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/transport/rendezvous.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/transport/udna.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/trifecta.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/trust_entropy.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/validator_server.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch/verification.py +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch_protocol.egg-info/dependency_links.txt +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/vouch_protocol.egg-info/entry_points.txt +0 -0
- {vouch_protocol-2.0.2 → vouch_protocol-2.2.0}/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: 2.0
|
|
3
|
+
Version: 2.2.0
|
|
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
|
|
@@ -224,7 +224,7 @@ Requires-Dist: python-dateutil
|
|
|
224
224
|
Requires-Dist: cryptography
|
|
225
225
|
Requires-Dist: pydantic>=2.0.0
|
|
226
226
|
Requires-Dist: httpx>=0.24.0
|
|
227
|
-
Requires-Dist: pqcrypto
|
|
227
|
+
Requires-Dist: pqcrypto<2.0.0,>=0.4.0
|
|
228
228
|
Provides-Extra: langchain
|
|
229
229
|
Requires-Dist: langchain>=0.1.0; extra == "langchain"
|
|
230
230
|
Provides-Extra: crewai
|
|
@@ -236,7 +236,7 @@ Requires-Dist: pyyaml>=6.0; extra == "goose"
|
|
|
236
236
|
Provides-Extra: autogen
|
|
237
237
|
Requires-Dist: pyautogen>=0.2.0; extra == "autogen"
|
|
238
238
|
Provides-Extra: mcp
|
|
239
|
-
Requires-Dist: mcp>=
|
|
239
|
+
Requires-Dist: mcp>=1.2.0; extra == "mcp"
|
|
240
240
|
Provides-Extra: vertex
|
|
241
241
|
Requires-Dist: google-cloud-aiplatform>=1.0.0; extra == "vertex"
|
|
242
242
|
Provides-Extra: streamlit
|
|
@@ -265,6 +265,14 @@ Requires-Dist: Pillow>=10.0.0; extra == "media"
|
|
|
265
265
|
Requires-Dist: base58>=2.1.0; extra == "media"
|
|
266
266
|
Requires-Dist: qrcode>=7.4.0; extra == "media"
|
|
267
267
|
Requires-Dist: c2pa-python>=0.5.0; extra == "media"
|
|
268
|
+
Provides-Extra: openvla
|
|
269
|
+
Requires-Dist: torch>=2.2.0; extra == "openvla"
|
|
270
|
+
Requires-Dist: transformers==4.40.1; extra == "openvla"
|
|
271
|
+
Requires-Dist: tokenizers==0.19.1; extra == "openvla"
|
|
272
|
+
Requires-Dist: timm==0.9.10; extra == "openvla"
|
|
273
|
+
Requires-Dist: accelerate>=0.25.0; extra == "openvla"
|
|
274
|
+
Requires-Dist: huggingface-hub>=0.23.0; extra == "openvla"
|
|
275
|
+
Requires-Dist: Pillow>=10.0.0; extra == "openvla"
|
|
268
276
|
Provides-Extra: dev
|
|
269
277
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
270
278
|
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
@@ -348,7 +356,7 @@ Vouch Protocol v1.0 aligns directly with the open standard:
|
|
|
348
356
|
- **Verifiable Credentials** as the credential format (replacing v0.x JWS tokens).
|
|
349
357
|
- **Data Integrity proofs** with the `eddsa-jcs-2022` cryptosuite (no JOSE, no Base64-wrapped payload, the credential remains human-readable JSON).
|
|
350
358
|
- **Multikey verification methods** in DID Documents (algorithm-agnostic, ML-DSA-44 ready).
|
|
351
|
-
- **
|
|
359
|
+
- **Post-quantum profile** as a Data Integrity proof set: the credential carries two independent proofs, `eddsa-jcs-2022` and `mldsa44-jcs-2024`, an optional add-on for regulated deployments aligning with NIST CNSA 2.0 / NSM-10 timelines.
|
|
352
360
|
- **Three-way cross-implementation interop** verified across Python, TypeScript, and Go.
|
|
353
361
|
|
|
354
362
|
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.
|
|
@@ -377,8 +385,9 @@ Vouch is not one tool, it is a set of them. Here is the whole map.
|
|
|
377
385
|
- **Identity Sidecar** keeps signing keys out of the model's context, so a prompt injection cannot read them.
|
|
378
386
|
- **Vouch Shield** a runtime check that inspects every tool call against your rules, like a customs officer at the door.
|
|
379
387
|
- **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.
|
|
388
|
+
- **Authority freshness** a signed authority state with a counter that only goes up, so a state change (a fraud signal, a suspended mandate) collapses the acceptable freshness window to now for a high-consequence action, even when time-decay trust still passes. See [docs/authority-freshness.md](docs/authority-freshness.md).
|
|
380
389
|
|
|
381
|
-
### Framework integrations
|
|
390
|
+
### Framework integrations
|
|
382
391
|
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.
|
|
383
392
|
- **`vouch-langchain`** a LangChain tool that signs each tool call before it leaves the agent.
|
|
384
393
|
- **`vouch-langgraph`** signs LangGraph tool calls and graph nodes, so a signed trail runs across the whole graph.
|
|
@@ -388,13 +397,13 @@ Standalone packages that drop Vouch into the agent framework you already use. Ea
|
|
|
388
397
|
- **`vouch-mlflow`** signs an MLflow model artifact at registration time, bound to a content digest so any change to the weights breaks the signature.
|
|
389
398
|
- **`vouch-safetensors`** embeds a credential in a `.safetensors` header, complementary to OpenSSF Model Signing, so a model carries who produced it.
|
|
390
399
|
|
|
391
|
-
The standalone **`vouch-mcp`** package above ships alongside these
|
|
400
|
+
The standalone **`vouch-mcp`** package above ships alongside these.
|
|
392
401
|
|
|
393
402
|
### SDKs, in the language you use
|
|
394
403
|
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.
|
|
395
404
|
|
|
396
405
|
### Robots and embodied agents
|
|
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. Fifteen 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
|
|
406
|
+
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. Fifteen 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 carry a proof set with an Ed25519 proof and an ML-DSA-44 proof, 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), 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), and bystander-consent evidence (a robot binds the basis for capturing people, an explicit token, posted notice, a legitimate interest, or a redaction it applied, to the capture itself by its hash, holding only hashes and never anyone's identifying data, and a bystander can sign consent bound to one capture so it cannot be replayed to another), 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-094.
|
|
398
407
|
|
|
399
408
|
### Inside your AI tools
|
|
400
409
|
- **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.
|
|
@@ -440,7 +449,7 @@ AI agents are making real-world API calls with **ZERO cryptographic proof** of:
|
|
|
440
449
|
- **Data Integrity proofs** (`eddsa-jcs-2022` cryptosuite, no JOSE/JWS dependency)
|
|
441
450
|
- **Decentralized Identifiers** (`did:web`, `did:key`)
|
|
442
451
|
- **Multikey verification methods** (algorithm-agnostic, post-quantum ready)
|
|
443
|
-
- **
|
|
452
|
+
- **Post-quantum profile** (optional proof set: `eddsa-jcs-2022` + `mldsa44-jcs-2024`)
|
|
444
453
|
- **Human-readable JSON** (proof attaches as a sibling object, no Base64-wrapped opaque payload)
|
|
445
454
|
- **Framework-agnostic** (works with MCP, LangChain, CrewAI, AutoGPT, AutoGen, Vertex AI)
|
|
446
455
|
- **Cross-language interop** (Python, TypeScript, Go, byte-identical canonical form)
|
|
@@ -491,15 +500,15 @@ flowchart TB
|
|
|
491
500
|
subgraph CRYPTO["Cryptographic Proof"]
|
|
492
501
|
JCS["JCS canonicalization (RFC 8785)"]
|
|
493
502
|
DEFAULT["eddsa-jcs-2022<br/>(Ed25519, default)"]
|
|
494
|
-
|
|
503
|
+
PQ["mldsa44-jcs-2024<br/>(ML-DSA-44, optional second proof)"]
|
|
495
504
|
end
|
|
496
505
|
IDENTITY --> FORMAT
|
|
497
506
|
FORMAT --> CRYPTO
|
|
498
507
|
JCS --> DEFAULT
|
|
499
|
-
JCS -->
|
|
508
|
+
JCS --> PQ
|
|
500
509
|
```
|
|
501
510
|
|
|
502
|
-
**Trust = Verifiable Credentials + Data Integrity + Decentralized Identifiers + Multikey, with optional
|
|
511
|
+
**Trust = Verifiable Credentials + Data Integrity + Decentralized Identifiers + Multikey, with an optional post-quantum proof set.** The same math that secures SSL/TLS, plus the standardized primitives that secure verifiable credentials elsewhere on the web, applied to AI agents.
|
|
503
512
|
|
|
504
513
|
---
|
|
505
514
|
|
|
@@ -515,7 +524,7 @@ flowchart TB
|
|
|
515
524
|
| **Audit trail format** | ✅ (VC standardized) | ❌ (custom) |
|
|
516
525
|
| **standards-aligned** | ✅ (`eddsa-jcs-2022` Data Integrity) | ❌ |
|
|
517
526
|
| **Multikey verification methods** | ✅ (algorithm-agnostic) | ❌ |
|
|
518
|
-
| **
|
|
527
|
+
| **Post-quantum signatures** | ✅ (`mldsa44-jcs-2024` proof set) | ❌ |
|
|
519
528
|
| **Cross-implementation interop tests** | ✅ (Python, TypeScript, Go) | ❌ |
|
|
520
529
|
| **Security best practices** | ✅ (built-in) | ⚠️ (easy to mess up) |
|
|
521
530
|
|
|
@@ -612,18 +621,19 @@ Works with all major AI frameworks out-of-the-box:
|
|
|
612
621
|
- **Reputation Scoring**: track agent behavior over time
|
|
613
622
|
- **Revocation Registry**: blacklist compromised keys
|
|
614
623
|
- **Redis Caching**: production-scale verification
|
|
615
|
-
- **
|
|
624
|
+
- **Post-Quantum Profile**: an optional proof set carrying an `eddsa-jcs-2022` proof and an `mldsa44-jcs-2024` proof for regulated deployments aligning with NIST CNSA 2.0 / NSM-10 migration timelines
|
|
616
625
|
|
|
617
|
-
###
|
|
626
|
+
### Post-Quantum Example
|
|
618
627
|
|
|
619
628
|
```python
|
|
620
|
-
# Optional
|
|
629
|
+
# Optional profile, requires `pip install pqcrypto`
|
|
621
630
|
credential = signer.sign_hybrid(intent={
|
|
622
631
|
'action': 'submit_clinical_finding',
|
|
623
632
|
'target': 'trial:NCT00000001',
|
|
624
633
|
'resource': 'https://fda-submissions.example.com/api/findings',
|
|
625
634
|
})
|
|
626
|
-
#
|
|
635
|
+
# The credential's `proof` is an array of two independent Data Integrity proofs,
|
|
636
|
+
# eddsa-jcs-2022 and mldsa44-jcs-2024, over the same document.
|
|
627
637
|
# Verification REQUIRES both to validate.
|
|
628
638
|
```
|
|
629
639
|
|
|
@@ -668,7 +678,7 @@ To keep this space free from patent capture, the project publishes **61 defensiv
|
|
|
668
678
|
|
|
669
679
|
- [Quick Start](https://github.com/vouch-protocol/vouch#quick-start)
|
|
670
680
|
- [Vouch Specification (v1.6 normative)](https://vouch-protocol.com/specs/)
|
|
671
|
-
- [
|
|
681
|
+
- [Post-Quantum Implementation Guide](https://github.com/vouch-protocol/vouch/blob/main/docs/hybrid-pq-implementation-guide.md)
|
|
672
682
|
- [Protocol Specification (developer guide)](https://github.com/vouch-protocol/vouch/blob/main/docs/vouch_guide.md)
|
|
673
683
|
- [Integration Guides](https://github.com/vouch-protocol/vouch/tree/main/vouch/integrations)
|
|
674
684
|
- [Threat Model and Security Considerations](https://github.com/vouch-protocol/vouch/blob/main/docs/THREAT_MODEL.md)
|
|
@@ -691,7 +701,7 @@ To keep this space free from patent capture, the project publishes **61 defensiv
|
|
|
691
701
|
|
|
692
702
|
- [x] **Verifiable Credentials + Data Integrity** (`eddsa-jcs-2022` cryptosuite)
|
|
693
703
|
- [x] **Multikey verification methods** (algorithm-agnostic, multibase + multicodec)
|
|
694
|
-
- [x] **
|
|
704
|
+
- [x] **Post-quantum profile** (`eddsa-jcs-2022` + `mldsa44-jcs-2024` proof set, NIST CNSA 2.0 / NSM-10 aligned)
|
|
695
705
|
- [x] **Three-language reference implementation** (Python, TypeScript, Go) with byte-identical canonical form via RFC 8785 JCS, verified against shared test vectors
|
|
696
706
|
- [x] **Specification drafted** and submitted to the open standards group for incubation
|
|
697
707
|
- [x] **55 Prior Art Disclosures** (CC0 defensive publications)
|
|
@@ -753,7 +763,7 @@ Contributions welcome. See [CONTRIBUTING.md](https://github.com/vouch-protocol/v
|
|
|
753
763
|
|
|
754
764
|
**Areas where help is most useful:**
|
|
755
765
|
- [ ] Additional framework integrations (Haystack, Semantic Kernel, LlamaIndex, others)
|
|
756
|
-
- [ ] Cross-implementation interop test vectors (additional edge cases for JCS, VC,
|
|
766
|
+
- [ ] Cross-implementation interop test vectors (additional edge cases for JCS, VC, post-quantum proof sets)
|
|
757
767
|
- [ ] Tutorials and worked examples for regulated-sector deployments
|
|
758
768
|
- [ ] Independent security review and audit
|
|
759
769
|
- [ ] Reference implementations in additional languages (Rust, Java, .NET)
|
|
@@ -66,7 +66,7 @@ Vouch Protocol v1.0 aligns directly with the open standard:
|
|
|
66
66
|
- **Verifiable Credentials** as the credential format (replacing v0.x JWS tokens).
|
|
67
67
|
- **Data Integrity proofs** with the `eddsa-jcs-2022` cryptosuite (no JOSE, no Base64-wrapped payload, the credential remains human-readable JSON).
|
|
68
68
|
- **Multikey verification methods** in DID Documents (algorithm-agnostic, ML-DSA-44 ready).
|
|
69
|
-
- **
|
|
69
|
+
- **Post-quantum profile** as a Data Integrity proof set: the credential carries two independent proofs, `eddsa-jcs-2022` and `mldsa44-jcs-2024`, an optional add-on for regulated deployments aligning with NIST CNSA 2.0 / NSM-10 timelines.
|
|
70
70
|
- **Three-way cross-implementation interop** verified across Python, TypeScript, and Go.
|
|
71
71
|
|
|
72
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.
|
|
@@ -95,8 +95,9 @@ Vouch is not one tool, it is a set of them. Here is the whole map.
|
|
|
95
95
|
- **Identity Sidecar** keeps signing keys out of the model's context, so a prompt injection cannot read them.
|
|
96
96
|
- **Vouch Shield** a runtime check that inspects every tool call against your rules, like a customs officer at the door.
|
|
97
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.
|
|
98
|
+
- **Authority freshness** a signed authority state with a counter that only goes up, so a state change (a fraud signal, a suspended mandate) collapses the acceptable freshness window to now for a high-consequence action, even when time-decay trust still passes. See [docs/authority-freshness.md](docs/authority-freshness.md).
|
|
98
99
|
|
|
99
|
-
### Framework integrations
|
|
100
|
+
### Framework integrations
|
|
100
101
|
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.
|
|
101
102
|
- **`vouch-langchain`** a LangChain tool that signs each tool call before it leaves the agent.
|
|
102
103
|
- **`vouch-langgraph`** signs LangGraph tool calls and graph nodes, so a signed trail runs across the whole graph.
|
|
@@ -106,13 +107,13 @@ Standalone packages that drop Vouch into the agent framework you already use. Ea
|
|
|
106
107
|
- **`vouch-mlflow`** signs an MLflow model artifact at registration time, bound to a content digest so any change to the weights breaks the signature.
|
|
107
108
|
- **`vouch-safetensors`** embeds a credential in a `.safetensors` header, complementary to OpenSSF Model Signing, so a model carries who produced it.
|
|
108
109
|
|
|
109
|
-
The standalone **`vouch-mcp`** package above ships alongside these
|
|
110
|
+
The standalone **`vouch-mcp`** package above ships alongside these.
|
|
110
111
|
|
|
111
112
|
### SDKs, in the language you use
|
|
112
113
|
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.
|
|
113
114
|
|
|
114
115
|
### Robots and embodied agents
|
|
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. Fifteen 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
|
|
116
|
+
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. Fifteen 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 carry a proof set with an Ed25519 proof and an ML-DSA-44 proof, 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), 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), and bystander-consent evidence (a robot binds the basis for capturing people, an explicit token, posted notice, a legitimate interest, or a redaction it applied, to the capture itself by its hash, holding only hashes and never anyone's identifying data, and a bystander can sign consent bound to one capture so it cannot be replayed to another), 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-094.
|
|
116
117
|
|
|
117
118
|
### Inside your AI tools
|
|
118
119
|
- **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.
|
|
@@ -158,7 +159,7 @@ AI agents are making real-world API calls with **ZERO cryptographic proof** of:
|
|
|
158
159
|
- **Data Integrity proofs** (`eddsa-jcs-2022` cryptosuite, no JOSE/JWS dependency)
|
|
159
160
|
- **Decentralized Identifiers** (`did:web`, `did:key`)
|
|
160
161
|
- **Multikey verification methods** (algorithm-agnostic, post-quantum ready)
|
|
161
|
-
- **
|
|
162
|
+
- **Post-quantum profile** (optional proof set: `eddsa-jcs-2022` + `mldsa44-jcs-2024`)
|
|
162
163
|
- **Human-readable JSON** (proof attaches as a sibling object, no Base64-wrapped opaque payload)
|
|
163
164
|
- **Framework-agnostic** (works with MCP, LangChain, CrewAI, AutoGPT, AutoGen, Vertex AI)
|
|
164
165
|
- **Cross-language interop** (Python, TypeScript, Go, byte-identical canonical form)
|
|
@@ -209,15 +210,15 @@ flowchart TB
|
|
|
209
210
|
subgraph CRYPTO["Cryptographic Proof"]
|
|
210
211
|
JCS["JCS canonicalization (RFC 8785)"]
|
|
211
212
|
DEFAULT["eddsa-jcs-2022<br/>(Ed25519, default)"]
|
|
212
|
-
|
|
213
|
+
PQ["mldsa44-jcs-2024<br/>(ML-DSA-44, optional second proof)"]
|
|
213
214
|
end
|
|
214
215
|
IDENTITY --> FORMAT
|
|
215
216
|
FORMAT --> CRYPTO
|
|
216
217
|
JCS --> DEFAULT
|
|
217
|
-
JCS -->
|
|
218
|
+
JCS --> PQ
|
|
218
219
|
```
|
|
219
220
|
|
|
220
|
-
**Trust = Verifiable Credentials + Data Integrity + Decentralized Identifiers + Multikey, with optional
|
|
221
|
+
**Trust = Verifiable Credentials + Data Integrity + Decentralized Identifiers + Multikey, with an optional post-quantum proof set.** The same math that secures SSL/TLS, plus the standardized primitives that secure verifiable credentials elsewhere on the web, applied to AI agents.
|
|
221
222
|
|
|
222
223
|
---
|
|
223
224
|
|
|
@@ -233,7 +234,7 @@ flowchart TB
|
|
|
233
234
|
| **Audit trail format** | ✅ (VC standardized) | ❌ (custom) |
|
|
234
235
|
| **standards-aligned** | ✅ (`eddsa-jcs-2022` Data Integrity) | ❌ |
|
|
235
236
|
| **Multikey verification methods** | ✅ (algorithm-agnostic) | ❌ |
|
|
236
|
-
| **
|
|
237
|
+
| **Post-quantum signatures** | ✅ (`mldsa44-jcs-2024` proof set) | ❌ |
|
|
237
238
|
| **Cross-implementation interop tests** | ✅ (Python, TypeScript, Go) | ❌ |
|
|
238
239
|
| **Security best practices** | ✅ (built-in) | ⚠️ (easy to mess up) |
|
|
239
240
|
|
|
@@ -330,18 +331,19 @@ Works with all major AI frameworks out-of-the-box:
|
|
|
330
331
|
- **Reputation Scoring**: track agent behavior over time
|
|
331
332
|
- **Revocation Registry**: blacklist compromised keys
|
|
332
333
|
- **Redis Caching**: production-scale verification
|
|
333
|
-
- **
|
|
334
|
+
- **Post-Quantum Profile**: an optional proof set carrying an `eddsa-jcs-2022` proof and an `mldsa44-jcs-2024` proof for regulated deployments aligning with NIST CNSA 2.0 / NSM-10 migration timelines
|
|
334
335
|
|
|
335
|
-
###
|
|
336
|
+
### Post-Quantum Example
|
|
336
337
|
|
|
337
338
|
```python
|
|
338
|
-
# Optional
|
|
339
|
+
# Optional profile, requires `pip install pqcrypto`
|
|
339
340
|
credential = signer.sign_hybrid(intent={
|
|
340
341
|
'action': 'submit_clinical_finding',
|
|
341
342
|
'target': 'trial:NCT00000001',
|
|
342
343
|
'resource': 'https://fda-submissions.example.com/api/findings',
|
|
343
344
|
})
|
|
344
|
-
#
|
|
345
|
+
# The credential's `proof` is an array of two independent Data Integrity proofs,
|
|
346
|
+
# eddsa-jcs-2022 and mldsa44-jcs-2024, over the same document.
|
|
345
347
|
# Verification REQUIRES both to validate.
|
|
346
348
|
```
|
|
347
349
|
|
|
@@ -386,7 +388,7 @@ To keep this space free from patent capture, the project publishes **61 defensiv
|
|
|
386
388
|
|
|
387
389
|
- [Quick Start](https://github.com/vouch-protocol/vouch#quick-start)
|
|
388
390
|
- [Vouch Specification (v1.6 normative)](https://vouch-protocol.com/specs/)
|
|
389
|
-
- [
|
|
391
|
+
- [Post-Quantum Implementation Guide](https://github.com/vouch-protocol/vouch/blob/main/docs/hybrid-pq-implementation-guide.md)
|
|
390
392
|
- [Protocol Specification (developer guide)](https://github.com/vouch-protocol/vouch/blob/main/docs/vouch_guide.md)
|
|
391
393
|
- [Integration Guides](https://github.com/vouch-protocol/vouch/tree/main/vouch/integrations)
|
|
392
394
|
- [Threat Model and Security Considerations](https://github.com/vouch-protocol/vouch/blob/main/docs/THREAT_MODEL.md)
|
|
@@ -409,7 +411,7 @@ To keep this space free from patent capture, the project publishes **61 defensiv
|
|
|
409
411
|
|
|
410
412
|
- [x] **Verifiable Credentials + Data Integrity** (`eddsa-jcs-2022` cryptosuite)
|
|
411
413
|
- [x] **Multikey verification methods** (algorithm-agnostic, multibase + multicodec)
|
|
412
|
-
- [x] **
|
|
414
|
+
- [x] **Post-quantum profile** (`eddsa-jcs-2022` + `mldsa44-jcs-2024` proof set, NIST CNSA 2.0 / NSM-10 aligned)
|
|
413
415
|
- [x] **Three-language reference implementation** (Python, TypeScript, Go) with byte-identical canonical form via RFC 8785 JCS, verified against shared test vectors
|
|
414
416
|
- [x] **Specification drafted** and submitted to the open standards group for incubation
|
|
415
417
|
- [x] **55 Prior Art Disclosures** (CC0 defensive publications)
|
|
@@ -471,7 +473,7 @@ Contributions welcome. See [CONTRIBUTING.md](https://github.com/vouch-protocol/v
|
|
|
471
473
|
|
|
472
474
|
**Areas where help is most useful:**
|
|
473
475
|
- [ ] Additional framework integrations (Haystack, Semantic Kernel, LlamaIndex, others)
|
|
474
|
-
- [ ] Cross-implementation interop test vectors (additional edge cases for JCS, VC,
|
|
476
|
+
- [ ] Cross-implementation interop test vectors (additional edge cases for JCS, VC, post-quantum proof sets)
|
|
475
477
|
- [ ] Tutorials and worked examples for regulated-sector deployments
|
|
476
478
|
- [ ] Independent security review and audit
|
|
477
479
|
- [ ] Reference implementations in additional languages (Rust, Java, .NET)
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "vouch-protocol"
|
|
7
|
-
version = "2.0
|
|
7
|
+
version = "2.2.0"
|
|
8
8
|
description = "The Identity & Reputation Standard for AI Agents"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -32,11 +32,16 @@ dependencies = [
|
|
|
32
32
|
"cryptography",
|
|
33
33
|
"pydantic>=2.0.0",
|
|
34
34
|
"httpx>=0.24.0",
|
|
35
|
-
#
|
|
36
|
-
# `
|
|
35
|
+
# Post-quantum profile (Specification 13.2): a Data Integrity proof set,
|
|
36
|
+
# an `eddsa-jcs-2022` proof plus an `mldsa44-jcs-2024` proof on the same
|
|
37
|
+
# credential. Bundled by default: pqcrypto ships
|
|
37
38
|
# prebuilt wheels for all mainstream platforms (~80 KB, no compiler needed)
|
|
38
39
|
# and the PQ story is core to Vouch, so we do not gate it behind an extra.
|
|
39
|
-
|
|
40
|
+
# 0.4.x and 1.0.x are both supported: they differ in the ML-DSA-44 entry
|
|
41
|
+
# point names and in how verify() reports a verdict, and
|
|
42
|
+
# vouch/data_integrity_hybrid.py handles both. The major version is capped
|
|
43
|
+
# so a future release cannot change those contracts underneath a verifier.
|
|
44
|
+
"pqcrypto>=0.4.0,<2.0.0",
|
|
40
45
|
]
|
|
41
46
|
|
|
42
47
|
[project.optional-dependencies]
|
|
@@ -46,7 +51,9 @@ crewai = ["crewai>=0.1.0"]
|
|
|
46
51
|
langgraph = ["langgraph>=0.1.0"]
|
|
47
52
|
goose = ["pyyaml>=6.0"]
|
|
48
53
|
autogen = ["pyautogen>=0.2.0"]
|
|
49
|
-
mcp
|
|
54
|
+
# mcp 1.2 is the first release with the FastMCP high-level API; the server
|
|
55
|
+
# also supports mcp 2.x (the 2026-07-28 stateless protocol revision).
|
|
56
|
+
mcp = ["mcp>=1.2.0"]
|
|
50
57
|
vertex = ["google-cloud-aiplatform>=1.0.0"]
|
|
51
58
|
streamlit = ["streamlit>=1.0.0"]
|
|
52
59
|
|
|
@@ -67,7 +74,7 @@ aws = ["aioboto3>=12.0.0"]
|
|
|
67
74
|
gcp = ["google-cloud-kms>=2.0.0"]
|
|
68
75
|
azure = ["azure-keyvault-keys>=4.0.0"]
|
|
69
76
|
|
|
70
|
-
#
|
|
77
|
+
# The post-quantum profile is bundled by default (see required
|
|
71
78
|
# `dependencies` above). The `pq` extra is retained as a no-op alias so
|
|
72
79
|
# `pip install 'vouch-protocol[pq]'` keeps working for anyone who already
|
|
73
80
|
# wrote that into a Dockerfile or requirements.txt.
|
|
@@ -93,6 +100,23 @@ media = [
|
|
|
93
100
|
"c2pa-python>=0.5.0",
|
|
94
101
|
]
|
|
95
102
|
|
|
103
|
+
# Real vision-language-action model (OpenVLA, open weights) for
|
|
104
|
+
# examples/robotics_openvla_gated_loop.py. Heavy: torch plus a ~16 GB 7B
|
|
105
|
+
# checkpoint, so it is never installed by default and is deliberately left out
|
|
106
|
+
# of `all` -- CI exercises the example's skip path instead. transformers,
|
|
107
|
+
# tokenizers, and timm are pinned to the versions OpenVLA's model card
|
|
108
|
+
# specifies, because the checkpoint ships its own modelling code
|
|
109
|
+
# (trust_remote_code) that is written against exactly those APIs.
|
|
110
|
+
openvla = [
|
|
111
|
+
"torch>=2.2.0",
|
|
112
|
+
"transformers==4.40.1",
|
|
113
|
+
"tokenizers==0.19.1",
|
|
114
|
+
"timm==0.9.10",
|
|
115
|
+
"accelerate>=0.25.0",
|
|
116
|
+
"huggingface-hub>=0.23.0",
|
|
117
|
+
"Pillow>=10.0.0",
|
|
118
|
+
]
|
|
119
|
+
|
|
96
120
|
# Development dependencies
|
|
97
121
|
dev = [
|
|
98
122
|
"pytest>=7.0.0",
|