Metadata-Version: 2.5
Name: meshcorectl
Version: 0.1.0
Summary: A kubectl-style command line interface for MeshCore companion radios
Project-URL: Homepage, https://github.com/Faradome/meshcorectl
Project-URL: Issues, https://github.com/Faradome/meshcorectl/issues
Author-email: William Canterbury <william.canterbury@gmail.com>
License-Expression: MIT
License-File: LICENSE
Classifier: Environment :: Console
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Communications :: Ham Radio
Requires-Python: >=3.10
Requires-Dist: bleak>=0.22
Requires-Dist: click>=8.1
Requires-Dist: meshcore>=2.3.9
Requires-Dist: pyserial>=3.5
Requires-Dist: pyyaml>=6.0
Provides-Extra: dev
Requires-Dist: build>=1.0; extra == 'dev'
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Requires-Dist: types-pyserial; extra == 'dev'
Requires-Dist: types-pyyaml; extra == 'dev'
Description-Content-Type: text/markdown

# meshcorectl

> **This is an AI-generated application.** The design, code, tests, and documentation in this
> repository were produced by an AI coding agent (Claude), directed and reviewed by a human
> maintainer.

A non-interactive, kubectl-style CLI for MeshCore companion radios:
`meshcorectl VERB [TYPE] [NAME] [flags]`, named connection contexts (BLE/serial/TCP), and
`-o table|json|yaml|wide|name` output on every read command.

For design rationale and architecture, see [PLAN.md](PLAN.md).

## Install

```bash
pip install -e ".[dev]"    # from a checkout, until this is published
```

## Quickstart

```bash
# Point a named context at your device (BLE, serial, or TCP)
meshcorectl config set-context home --ble-address AA:BB:CC:DD:EE:FF
meshcorectl config use-context home

# Read
meshcorectl get contacts
meshcorectl get contact alice -o yaml
meshcorectl describe device
meshcorectl logs -f

# Write
meshcorectl send message alice "hello"
meshcorectl create channel 1 "#general"
meshcorectl delete contact -l 't=client,u>30d'   # -l selectors batch across matches

# Shell completion
source <(meshcorectl completion bash)   # or zsh / fish
```

Every command has real `--help` text; [docs/command-reference.md](docs/command-reference.md) is
the same text generated into one file. Nothing here is interactive — no REPL, no prompts on the
happy path (an exception: `login` without `--password`/`--password-stdin` prompts securely for
one, the same as `ssh` or `git`) — every command is a single invocation that connects, does one
thing, and exits, which is what makes it scriptable.

## Status

Every command in this README is implemented and tested. A background-agent daemon for
low-latency repeated invocations (`meshcored`) is planned but not yet built.

## Development

```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest                # 100% line+branch coverage enforced
ruff check .
mypy
```

After adding or changing a command, regenerate the reference doc:

```bash
python3 scripts/generate_command_reference.py
```

A test (`tests/unit/test_command_reference.py`) fails if it's out of date.

## License

[MIT](LICENSE) — same license as the original
[meshcore-cli](https://github.com/meshcore-dev/meshcore-cli).
