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" },