Split 1424-line monolith into orac/ package with clean separation: - constants.py — bot identity, radio config, triggers, limits - crypto.py — Ed25519 identity, channel/peer crypto, ECDH - meshcore.py — packet parsing/building, routing, dedup, node registry - ai.py — Claude API integration, query extraction - state.py — JSON persistence, history tracking - bot.py — main loop, packet dispatch, connection management Removed duplicated donglora library code (cobs_frame, read_frame, encode_radio_config, encode_command, decode_response) — now uses donglora.send/recv/connect directly. Added MeshCore Public channel (fixed PSK 8b3387e9...cd72) and expanded built-in hashtag channels: #nodeops, #repeater-ops, #test, #weather, #protest, #general, #bot, #net, #emcomm. Replaced ANSI print() with stdlib logging (color formatter for TTY). Fixed dependency (donglora-python -> donglora). Strict ruff linting. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
36 lines
675 B
TOML
36 lines
675 B
TOML
[project]
|
|
name = "donglora-ai-bot"
|
|
version = "0.1.0"
|
|
description = "MeshCore AI chatbot — default mesh name 'Orac'"
|
|
license = "MIT"
|
|
requires-python = ">=3.10"
|
|
authors = [{ name = "Stephen Waits" }]
|
|
dependencies = [
|
|
"donglora",
|
|
"anthropic",
|
|
"cobs",
|
|
"pyserial",
|
|
"pycryptodome",
|
|
"pynacl",
|
|
]
|
|
|
|
[dependency-groups]
|
|
dev = ["ruff"]
|
|
|
|
[tool.uv]
|
|
package = false
|
|
|
|
[tool.uv.sources]
|
|
donglora = { path = "../client-py", editable = true }
|
|
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py310"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "W", "F", "I", "UP", "B", "C4", "ARG", "SIM", "RUF"]
|
|
ignore = ["E501"]
|
|
|
|
[tool.ruff.lint.isort]
|
|
known-first-party = ["donglora", "orac"]
|