Metadata-Version: 2.4
Name: maestro-framework
Version: 0.2.0
Summary: MAESTRO — Modular Automotive Embedded System Test, Reporting & Orchestration (web dashboard + manifest-driven adapters: SSH/ADB/power/DLT/ETFW)
Author-email: Naveen Daniel Kennedy <nvnkennedy@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/NVNKENNEDY/maestro-framework
Project-URL: Source, https://github.com/NVNKENNEDY/maestro-framework
Keywords: test-automation,automotive,hil,embedded,ssh,adb,dlt,ecu,fastapi
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: OS Independent
Classifier: Framework :: FastAPI
Classifier: Topic :: Software Development :: Testing
Classifier: Intended Audience :: Developers
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: fastapi>=0.110
Requires-Dist: uvicorn[standard]>=0.29
Requires-Dist: sqlalchemy>=2.0
Requires-Dist: pydantic>=2.5
Requires-Dist: apscheduler<4,>=3.10
Requires-Dist: paramiko>=2.11
Requires-Dist: cryptography>=42.0
Requires-Dist: websockets>=11.0
Requires-Dist: pyserial>=3.5
Requires-Dist: structlog>=24.1
Requires-Dist: prometheus-client>=0.20
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Requires-Dist: httpx>=0.27; extra == "dev"
Requires-Dist: ruff>=0.5; extra == "dev"
Requires-Dist: build; extra == "dev"
Requires-Dist: twine; extra == "dev"
Dynamic: license-file

<div align="center">

# MAESTRO

**Modular Automotive Embedded System Test, Reporting & Orchestration**

A web-dashboard test-automation framework for automotive Hardware-in-the-Loop
(HIL) and embedded device testing. Published on PyPI as
[`maestro-framework`](https://pypi.org/project/maestro-framework/) — `pip install maestro-framework`.

</div>

---

MAESTRO is a **FastAPI backend + React dashboard** built around a
**manifest-driven adapter system**. Each adapter wraps one bench tool and
exposes a uniform set of *actions*; a generic execution engine runs a test case
(an ordered list of `adapter.action` steps) in serial, parallel or step-by-step
mode, with retries, loops, conditionals, parallel groups, per-device locking and
live streaming. Connection secrets are kept in an encrypted vault, runs produce
self-contained HTML reports, and everything works offline.

## Built-in adapters

| Adapter | Wraps | Example actions |
|---------|-------|-----------------|
| `ssh` | Paramiko (Linux/QNX/embedded, slog2/journal) | `execute_command`, `upload_file`, `download_file`, `reboot` |
| `adb` | Android Debug Bridge (bundled platform-tools) | `shell`, `push`/`pull`, `install_apk`, `logcat_dump`, `screenshot` |
| `power` | Your bench power script (`power.ps1`/`power.py`) | `power_on`, `power_off`, `power_cycle`, `enter_edl` |
| `dlt` | DLT log capture over TCP | `start_capture`, `stop_capture`, `verify_pattern` |
| `etfw` | ETFW bus/ECU tooling | `bus_sleep_on`, `bus_sleep_off`, `set_state`, `get_state` |
| `serial` | Serial console (`pyserial`) | `monitor`, `wait_for_pattern`, `send`, `list_ports` |
| `camera` | Desktop/webcam capture (PowerShell + ffmpeg) | `screenshot`, `capture_webcam`, `record_video` |
| `system` | Local control + your own scripts | `wait`, `echo`, `assert_contains`, `run_file`, `run_command` |

New adapters are just a folder under `backend/adapters/` with a `manifest.json`
and an `adapter.py` — or drop a plugin into `data/plugins/` at runtime.

## Run it

```bash
# From source (installs deps + builds the UI on first run):
python app.py

# Or from PyPI:
pip install maestro-framework
maestro                 # starts the API + dashboard and opens the browser
maestro setup           # optional: install into a dedicated folder (own venv + data)
```

The dashboard is at `http://localhost:8000`, the API docs at `/api/docs`.

## Repository layout

```
maestro-framework/
├─ app.py                 # single-command dev launcher
├─ backend/               # FastAPI application
│  ├─ adapters/           # base + registry + one folder per adapter (manifest.json)
│  ├─ services/           # execution engine, scheduler, reports, ws, plugins, ...
│  ├─ api/                # REST + WebSocket routers
│  ├─ models/             # SQLAlchemy models
│  ├─ security/           # vault, credentials, RBAC, audit
│  ├─ templates/          # step palette templates (JSON)
│  ├─ config.py · database.py · main.py · cli.py · installer.py
├─ frontend/              # React + Vite + TypeScript + Tailwind dashboard
└─ bin/                   # bundled binaries (adb platform-tools, ...)
```

## Configuration

All settings have defaults; override via environment (or a `.env` file):
`MAESTRO_HOST`, `MAESTRO_PORT`, `MAESTRO_API_TOKEN` (shared bearer token),
`DATABASE_URL`, `LOG_LEVEL`, `MAESTRO_DATA_DIR`. Runtime data (SQLite DB, logs,
reports, artifacts, vault key) lives under `data/` in a source checkout, or
`~/.maestro` when pip-installed.

## License

MIT © 2026 Naveen Daniel Kennedy
