feat: conformance test runner + protocol fixes
- conformance.py: declarative scenario runner (subset matcher, $kind/$gt/ $enum/$required assertions, call_id/session_id echo checks), reference bridge, CLI entry (python -m aicc.conformance) - bridge.py: protocol version check before parsing (protocol_mismatch), session expiry handling (session_expired), malformed tool_call -> invalid_input, emit_event() for async events - client.py: Self return type - in_process.py: drain bridge event queue after response (event delivery), Self return type - websocket.py: Self return type, best-effort shutdown - tests: 14 passing (incl. conformance scenarios, 9/9 core scenarios) - ruff: all checks pass
This commit is contained in:
@@ -93,12 +93,33 @@ aicc/
|
||||
bridge.py # Bridge — environment side, tool registration
|
||||
tool.py # @tool decorator and tool metadata
|
||||
schema.py # JSON Schema generation utilities
|
||||
conformance.py # declarative scenario runner (AICC conformance tests)
|
||||
transport/
|
||||
base.py # Transport interface
|
||||
in_process.py # In-process transport (tests, embedded)
|
||||
websocket.py # WebSocket transport (client + server)
|
||||
```
|
||||
|
||||
## Conformance
|
||||
|
||||
`aicc-py` ships the reference conformance runner for the AICC protocol.
|
||||
It executes the declarative scenarios from the
|
||||
[AICC-Protocol](https://github.com/emil28092005/AICC-Protocol)
|
||||
`conformance/scenarios/` directory against any bridge:
|
||||
|
||||
```bash
|
||||
python -m aicc.conformance ~/AICC-Protocol/conformance/scenarios
|
||||
```
|
||||
|
||||
Or via pytest (scenarios are loaded automatically if the spec repo is
|
||||
checked out next to `aicc-py`):
|
||||
|
||||
```bash
|
||||
pytest tests/test_conformance.py
|
||||
```
|
||||
|
||||
A bridge is AICC-conformant for `aicc/0.1` when all core scenarios pass.
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user