Metadata-Version: 2.4
Name: algovoi-atb
Version: 0.1.1
Summary: AlgoVoi Agent Trust Bench client — run your agent through 166 adversarial x402 payment profiles and earn a Falcon-1024 signed reputation certificate.
Project-URL: Homepage, https://docs.algovoi.co.uk/agent-trust-bench
Project-URL: Documentation, https://docs.algovoi.co.uk/agent-trust-bench
Project-URL: Repository, https://github.com/chopmob-cloud/AlgoVoi-Platform-Adapters
Project-URL: Issues, https://github.com/chopmob-cloud/AlgoVoi-Platform-Adapters/issues
Project-URL: Changelog, https://github.com/chopmob-cloud/AlgoVoi-Platform-Adapters/blob/master/algovoi-atb/CHANGELOG.md
Author-email: AlgoVoi <hello@algovoi.co.uk>
License: MIT
License-File: LICENSE
Keywords: adversarial-testing,agent-trust-bench,ai-agent,algovoi,atb,falcon-1024,payment-security,post-quantum,pqc,reputation,x402
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Security
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Testing
Classifier: Typing :: Typed
Requires-Python: >=3.10
Requires-Dist: httpx<1.0,>=0.27
Requires-Dist: pydantic<3.0,>=2.6
Provides-Extra: dev
Requires-Dist: build>=1.2; extra == 'dev'
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pqcrypto>=0.4.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: respx>=0.21; extra == 'dev'
Requires-Dist: rfc8785>=0.1.2; extra == 'dev'
Requires-Dist: ruff>=0.4; extra == 'dev'
Requires-Dist: twine>=5.0; extra == 'dev'
Provides-Extra: verify
Requires-Dist: pqcrypto>=0.4.0; extra == 'verify'
Requires-Dist: rfc8785>=0.1.2; extra == 'verify'
Description-Content-Type: text/markdown

# algovoi-atb

**AlgoVoi Agent Trust Bench client** — run your AI agent through 166 adversarial x402 payment profiles and earn a Falcon-1024 signed ATB Pass Certificate for reputation-gated pricing.

## Install

```bash
pip install algovoi-atb              # client only
pip install "algovoi-atb[verify]"    # + Falcon-1024 certificate verification
```

## Quick start

```python
from algovoi_atb import run_bench

async def my_agent(profile_id: str, challenge: dict) -> bool:
    # Return True to refuse (correct for adversarial profiles).
    # Return False to pay (only for control/benign profiles).
    suspicious = any(
        kw in challenge.get("description", "").lower()
        for kw in ("urgent", "override", "ignore", "system prompt")
    )
    return suspicious

result = await run_bench(my_agent, label="my-agent-v1")

print(f"Score:   {result.score:.2f}")
print(f"Passed:  {result.passed}")
print(f"Report:  {result.report_url}")

# Present the cert to x402 gateways via X-ATB-Credential for discounts.
headers = {"X-ATB-Credential": result.certificate_b64}
```

## Verify a certificate

```python
import httpx
from algovoi_atb import verify_certificate

# Fetch the public key from the bench.
pk_doc = httpx.get(
    "https://agent-trust-bench.algovoi.co.uk"
    "/agent-trust-bench/.well-known/atb-keys.json"
).json()
pk_b64 = pk_doc["keys"][0]["public_key_pqclean_b64"]

verified = verify_certificate(result.certificate_b64, pk_b64=pk_b64)
print(verified.valid, verified.grants_discount, verified.expires_at)
```

## Lower-level API

```python
from algovoi_atb import BenchClient

async with BenchClient(label="my-agent") as client:
    run_data = await client.create_run(label="my-agent-v1")
    await client.start_session()

    profiles = await client.list_profiles()
    for profile in profiles:
        pid = profile["metadata"]["profile"]
        challenge = await client.hit_profile(profile["resource"])
        if challenge and my_decision(pid, challenge):
            await client.log_refusal(pid)

    cert = await client.fetch_certificate()
    print(cert["certificate"])  # base64url envelope → X-ATB-Credential
```

## Links

- [ATB docs](https://docs.algovoi.co.uk/agent-trust-bench)
- [Live bench](https://agent-trust-bench.algovoi.co.uk)
- [ATB Pass Certificate spec](https://docs.algovoi.co.uk/atb-reputation-credential)
