Metadata-Version: 2.4
Name: boardex-core
Version: 0.1.0
Summary: Shared interfaces, result types, errors, and backend registry for Boardex MCP servers.
Project-URL: Homepage, https://github.com/ankayca/boardex
Project-URL: Source, https://github.com/ankayca/boardex
Author: Boardex contributors
License-Expression: Apache-2.0
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
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 :: Software Development :: Embedded Systems
Requires-Python: >=3.10
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == 'dev'
Description-Content-Type: text/markdown

# boardex-core

Shared foundation for every Boardex MCP server. **Zero hardware dependencies** —
just the contracts that keep the whole system decoupled.

## What's inside

| Module | Purpose | Pattern |
|---|---|---|
| `interfaces.py` | Abstract base classes (`TargetController`, `LogicAnalyzer`, `Backend`) + `DeviceInfo` | Dependency Inversion |
| `capabilities.py` | Opt-in adapter capabilities (`SupportsSessions`, `NativeSession`, ...) | runtime-checkable Protocols |
| `results.py` | `OperationResult` + `Verdict` — the uniform, agent-friendly return shape | — |
| `errors.py` | Typed exception hierarchy (`DeviceNotFoundError`, ...) | — |
| `registry.py` | `BackendRegistry` — owns backends, resolves `device_id` → adapter, and discovers third-party adapters via entry points (`load_plugins`) | Registry + Factory + Plugin |
| `facade.py` | Shared MCP-facade plumbing (`guard`, `list_devices_result`) | — |
| `evidence.py` | `EvidenceBundle` / `WorkflowStep` for composite workflows | — |
| `testing/` | Reference fakes + reusable adapter **conformance suites** | — |

Upper layers depend **only** on these abstractions, never on a vendor SDK. That's
what lets a contributor add a new probe or instrument by writing a single adapter
package — see [`../CONTRIBUTING.md`](../CONTRIBUTING.md).

See [`../../docs/ARCHITECTURE.md`](../../docs/ARCHITECTURE.md) for the full design.

## Develop

```bash
pip install -e ".[dev]"
pytest
```

The tests use an in-memory fake backend, so they run with no bench attached.
