Concepts
Adapters
An adapter is the bridge between ARIA and the agent you're testing. It speaks the agent's protocol so the conversation runner doesn't have to.
The contract
Every adapter implements a small BaseAdapter lifecycle:
connect() → open a session with the agent
sendMessage() → send the customer's message
receive() → get the agent's reply (null on timeout)
disconnect() → close the sessionreceive() returns an AdapterMessage (role, content, and metadata), returns null on timeout, and throws a SessionEndedError when the agent closes the session. That’s the whole surface — everything else (scoring, transcripts, reports) is handled for you.
Built-in adapters
| Provider | Channel |
|---|---|
| Amazon Connect (chat & voice / WebRTC) | chat, voice |
| AWS Lex V2 | chat |
| Azure Direct Line / GitHub Copilot Chat | chat |
| Azure OpenAI Agents Runtime | chat |
| Strands / AgentCore | chat |
| OpenAPI 3.x HTTP endpoint | chat |
| Generic HTTP / WebSocket | chat, voice |
Adding a new adapter
- Create
src/adapters/my-platform.tsimplementingBaseAdapter(connect → sendMessage → receive → disconnect). - Return an
AdapterMessagefromreceive(); throwSessionEndedErroron close and returnnullon timeout. - Register the provider in
src/conversation/runner.ts(normalizeProvider()). - Add a CLI wrapper at
src/cli/run-my-platform.tsso it gets annpm run cli:*entry.
Contributions are welcome — see the contributing guide.