Metadata-Version: 2.4
Name: ap3
Version: 1.0.0
Summary: Agent Privacy-Preserving Protocol - AP3
License: Apache-2.0
License-File: LICENSE
Requires-Python: <3.14,>=3.11
Requires-Dist: cryptography>=42.0.0
Requires-Dist: httpx>=0.27.0
Requires-Dist: protobuf<6,>=5.29.5
Requires-Dist: pydantic>=2.0
Provides-Extra: a2a
Requires-Dist: a2a-sdk[http-server]>=1.0.2; extra == 'a2a'
Requires-Dist: grpcio>=1.60.0; extra == 'a2a'
Requires-Dist: protobuf<6,>=5.29.5; extra == 'a2a'
Requires-Dist: starlette>=0.37.0; extra == 'a2a'
Requires-Dist: uvicorn>=0.30.0; extra == 'a2a'
Provides-Extra: dev
Requires-Dist: mypy>=1.5.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
Requires-Dist: pytest-mock>=3.11.0; extra == 'dev'
Requires-Dist: pytest>=7.4.0; extra == 'dev'
Requires-Dist: ruff>=0.1.0; extra == 'dev'
Provides-Extra: test
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'test'
Requires-Dist: pytest-cov>=4.1.0; extra == 'test'
Requires-Dist: pytest-mock>=3.11.0; extra == 'test'
Requires-Dist: pytest>=7.4.0; extra == 'test'
Description-Content-Type: text/markdown

# AP3 - Agent Privacy-Preserving Protocol

AP3 is a protocol for privacy-preserving computation between autonomous agents

## What is AP3?

AP3 is designed to solve a critical challenge in the emerging agentic economy: <br/> **How can AI agents collaborate on sensitive computations while maintaining data confidentiality and competitive advantage?**

Traditional agent communication requires data sharing, which creates risks:

- **Competitive Intelligence Leakage**: Proprietary algorithms, cost structures, and business strategies could be exposed
- **Regulatory Compliance Issues**: Data sharing may violate privacy regulations like GDPR and CCPA
- **Trust Barriers**: Parties are reluctant to collaborate without cryptographic privacy guarantees

AP3 addresses these challenges by providing a standardized framework for privacy-preserving computation using advanced cryptographic techniques.

As the agentic economy grows, AP3 will become essential infrastructure for trusted, privacy-preserving computation between autonomous agents, enabling a new generation of collaborative AI applications that respect data sovereignty and competitive advantage.

## Examples

| Example | Framework | Description |
|---------|-----------|-------------|
| [psi](examples/psi/) | Google ADK | Private Set Intersection for sanctions screening |

See [examples/psi/README.md](examples/psi/README.md) for full setup, Docker, and UI instructions.

## View Documentation

Install the docs dependencies and run `mkdocs serve` to view the documentation locally:

```bash
uv sync
uv pip install -r requirements-docs.txt
uv run mkdocs serve
```

Build the static site into `site/`:

```bash
uv run mkdocs build --clean
```


# AP3 SDK

### Key Docs:
- [Installation Guide](docs/sdk/installation.md) - Setup instructions
- [Configuration](docs/sdk/configuration.md) - Environment setup
- [Quick Start](docs/sdk/quickstart.md) - First steps
- [API Reference](docs/sdk/api-reference.md) - Complete API docs
- [Troubleshooting](docs/sdk/troubleshooting.md) - Common issues

## Features

- **Private Set Intersection (PSI)** - Check memberships without revealing sets
- **Commitment System** - Cryptographic data commitments
- **Agent Integration** - Works with Google ADK, A2A protocol
- **Experimental proof fields** - Result directives include placeholder `OperationProofs` fields for wiring/testing only (not cryptographic proofs yet)

## Installation

Requires Python 3.11+.

```bash
uv sync && source .venv/bin/activate
```

## Usage

### Private Set Intersection

> **Note:** PSI calls a native binary (`libsanction_check_lib`) bundled in `packages/ap3-functions/ap3_functions/psi/binaries/`. macOS (`.dylib`) and Linux (`.so`) are supported natively.

```python
from ap3_functions import PSIOperation

initiator = PSIOperation()
receiver = PSIOperation()

sanction_list = ["Jane Smith,S001,456 Elm St", "Bob Brown,S002,789 Oak Ave"]

# Initiator starts the protocol
init_result = initiator.start(role="initiator", inputs={"customer_data": "John Doe,ID123,123 Main St"})
session_id = init_result["session_id"]

# Receiver processes msg1 against its sanction list
recv_result = receiver.receive(
    role="receiver",
    message=init_result["outgoing"],
    config={"sanction_list": sanction_list},
)

# Initiator processes msg2 and gets the result
final = initiator.process(session_id, recv_result["outgoing"])
is_match = final["result"]["is_match"]
```

## 🏗️ Architecture

```
ap3/
├── src/ap3/                          # Core SDK (publishes as `ap3`)
│   ├── types/                        # Pydantic models
│   ├── services/                     # Commitment & discovery services
│   ├── integrations/                 # LangChain, Google ADK adapters
│   └── crypto/                       # Cryptographic primitives
├── packages/
│   └── ap3-functions/                # Distribution: `ap3-functions`, import: `ap3_functions`
│       └── ap3_functions/            # Protocol implementations (FFI to Rust)
│           └── psi/                  # Private Set Intersection
└── examples/                         # Example agents
    └── psi_adk_simple/               # PSI sanctions screening with Google ADK
```

## License

Licensed under the **Apache License, Version 2.0**. See [`LICENSE`](LICENSE).
