Metadata-Version: 2.4
Name: aer1-openai-agents
Version: 0.1.1
Summary: AER-1 verifiable workflow receipts for the OpenAI Agents SDK
License-Expression: Apache-2.0
Project-URL: Homepage, https://datatracker.ietf.org/doc/draft-zambo-aer1/
Keywords: aer-1,openai-agents,receipts,verifiable,tracing,agents
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: openai-agents>=0.1.0

# aer1-openai-agents

AER-1 verifiable workflow receipts for the OpenAI Agents SDK. One line of
integration turns any traced agent run into an offline-verifiable receipt
(draft-zambo-aer1, Section 8) covering every model call, tool call, and
agent step.

## Install

```bash
pip install aer1-openai-agents
```

## Use

```python
import asyncio
from agents import Agent, Runner
from agents.tracing import add_trace_processor
from aer1_openai_agents import AER1TracingProcessor

processor = AER1TracingProcessor(goal="Summarize the quarterly report")
add_trace_processor(processor)

agent = Agent(name="analyst", instructions="Be concise.", tools=[...])

async def main():
    result = await Runner.run(agent, "Summarize the quarterly report")
    receipt = processor.finalize(final_answer=result.final_output)
    assert processor.verify(receipt) == []  # VALID
    processor.save("receipt.json", receipt)

asyncio.run(main())
```

That is the whole integration: register the processor, run the agent,
finalize. The processor implements the SDK's `TracingProcessor` interface,
the same pattern other observability integrations use.

## What you get

A JSON receipt with the AER-1 Section 8 workflow members:

- `type`, `version`, `workflow_id`, `receipt_id`, `session_id`
- `goal`, `status`, `output_hash`, `verify_url`
- `steps`: one per ended SDK span (model calls, tool calls, agent
  boundaries, handoffs), each with `seq`, `receipt_id`, `tool`,
  `receipt_hash`, `started_at`, `ended_at`, `status`
- `merkle_root`: the Section 8.1 root over the ordered step receipt ids

Each step's `receipt_hash` is SHA-256 over the canonical JSON of the
span's observed content, so the hash commits to what the agent actually
did. `verify()` re-checks everything offline: all 14 Table 2/3 member
requirements, seq ordering 1..n, no duplicate step receipt ids, and the
Merkle root recomputed.

## Verify

```python
from aer1_openai_agents import verify_workflow_receipt

failures = verify_workflow_receipt(receipt)
assert failures == []  # empty means valid
```

The processor never touches the network and never changes agent behavior.
It only observes.

## Spec

Based on draft-zambo-aer1, Section 8 (verifiable workflow receipts).
Verification procedure documented at
https://datatracker.ietf.org/doc/draft-zambo-aer1/
