From 72dd8fefc47b61e77d20713e52b5e67c3b828e0b Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Wed, 22 Apr 2026 09:57:01 -0600 Subject: [PATCH] chore: release 1.0.0 Bump version to 1.0.0 and pin the donglora dep to >=1.0.0,<2.0.0 (PyPI), matching the freshly-published donglora 1.0.0 client. Also knock out two preexisting lint failures surfaced by the release-time `just check` gauntlet: * orac/crypto.py: drop the redundant int() wrap around round() (RUF046). * orac/state.py: widen _state value type to include list[list[float]] so heard_positions type-checks under pyright. --- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ orac/crypto.py | 4 ++-- orac/state.py | 2 +- pyproject.toml | 4 ++-- uv.lock | 4 ++-- 5 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..a195f51 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,28 @@ +# Changelog + +## 1.0.0 — 2026-04-22 + +Initial public release. Orac is a MeshCore chatbot that uses the +`donglora` client to bridge a LoRa dongle to an Anthropic model. + +### Added + +- `BotRuntime` orchestrating IO, worker, and log threads against a + `donglora.Dongle` instance. +- ADVERT scheduler with IQR-trimmed mean position derived from heard + repeater adverts. +- Typed `TxQueue` with retry / ack tracking against MeshCore message + IDs. +- DM reply pipeline that calls Claude off the IO loop and enqueues + reply packets at the right priority. +- Structured JSONL event log at `~/.donglora/orac-events.jsonl`. +- `just run` / `just check` / `just events` developer ergonomics. +- `donglora>=1.0.0,<2.0.0` declared as the registry dep; local dev + uses the `[tool.uv.sources]` editable-path override. + +### Notes + +- Not published to PyPI. Installed from a local checkout only; this + 1.0.0 tag captures the point at which the bot runs against the + Protocol v2 stack (`donglora` 1.0 / `donglora-mux` 1.0 / + `donglora-protocol` 1.0). diff --git a/orac/crypto.py b/orac/crypto.py index 2885a70..021c5a7 100644 --- a/orac/crypto.py +++ b/orac/crypto.py @@ -310,8 +310,8 @@ def build_advert_payload() -> bytes: timestamp = struct.pack("= 5 and (avg := average_heard_position()) is not None: - lat_i = int(round(avg[0] * 1_000_000)) - lon_i = int(round(avg[1] * 1_000_000)) + lat_i = round(avg[0] * 1_000_000) + lon_i = round(avg[1] * 1_000_000) # flags: has_name (0x80) | has_location (0x10) | chat node (0x01) app_data = bytes([0x91]) + struct.pack(" list of messages "dm_history": {}, # peer_pubkey_hex -> list of messages "known_nodes": {}, # pubkey_hex -> {"name": str, "seen": float} diff --git a/pyproject.toml b/pyproject.toml index 72be85b..aa9df98 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,12 +1,12 @@ [project] name = "donglora-ai-bot" -version = "0.1.0" +version = "1.0.0" description = "MeshCore AI chatbot — default mesh name 'Orac'" license = "MIT" requires-python = ">=3.10" authors = [{ name = "Stephen Waits" }] dependencies = [ - "donglora", + "donglora>=1.0.0,<2.0.0", "anthropic", "cobs", "pyserial", diff --git a/uv.lock b/uv.lock index 95f0c78..9a031c3 100644 --- a/uv.lock +++ b/uv.lock @@ -178,7 +178,7 @@ wheels = [ [[package]] name = "donglora" -version = "0.2.0" +version = "1.0.0" source = { editable = "../client-py" } dependencies = [ { name = "cobs" }, @@ -206,7 +206,7 @@ dev = [ [[package]] name = "donglora-ai-bot" -version = "0.1.0" +version = "1.0.0" source = { virtual = "." } dependencies = [ { name = "anthropic" },