From 3b1a2925070603c320bdc660c50da120e21aa2bd Mon Sep 17 00:00:00 2001 From: Jack Kingsman Date: Fri, 10 Apr 2026 15:57:47 -0700 Subject: [PATCH] Docs updates and be consistent about node >=20 --- AGENTS.md | 4 ++-- README.md | 2 ++ app/AGENTS.md | 8 +++++--- frontend/AGENTS.md | 4 ++-- scripts/setup/install_service.sh | 2 +- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 6fcdca7..64659a8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -373,7 +373,7 @@ All endpoints are prefixed with `/api` (e.g., `/api/health`). | POST | `/api/settings/favorites/toggle` | Toggle favorite status | | POST | `/api/settings/blocked-keys/toggle` | Toggle blocked key | | POST | `/api/settings/blocked-names/toggle` | Toggle blocked name | -| POST | `/api/settings/migrate` | One-time migration from frontend localStorage | +| POST | `/api/settings/tracked-telemetry/toggle` | Toggle tracked telemetry repeater | | GET | `/api/fanout` | List all fanout configs | | POST | `/api/fanout` | Create new fanout config | | PATCH | `/api/fanout/{id}` | Update fanout config (triggers module reload) | @@ -480,7 +480,7 @@ mc.subscribe(EventType.ACK, handler) | `MESHCORE_ENABLE_MESSAGE_POLL_FALLBACK` | `false` | Switch the always-on radio audit task from hourly checks to aggressive 10-second polling; the audit checks both missed message drift and channel-slot cache drift | | `MESHCORE_FORCE_CHANNEL_SLOT_RECONFIGURE` | `false` | Disable channel-slot reuse and force `set_channel(...)` before every channel send, even on serial/BLE | -**Note:** Runtime app settings are stored in the database (`app_settings` table), not environment variables. These include `max_radio_contacts`, `auto_decrypt_dm_on_advert`, `advert_interval`, `last_advert_time`, `favorites`, `last_message_times`, `flood_scope`, `blocked_keys`, `blocked_names`, and `discovery_blocked_types`. `max_radio_contacts` is the configured radio contact capacity baseline used by background maintenance: favorites reload first, non-favorite fill targets about 80% of that value, and full offload/reload triggers around 95% occupancy. They are configured via `GET/PATCH /api/settings`. MQTT, bot, webhook, Apprise, and SQS configs are stored in the `fanout_configs` table, managed via `/api/fanout`. If the radio's channel slots appear unstable or another client is mutating them underneath this app, operators can force the old always-reconfigure send path with `MESHCORE_FORCE_CHANNEL_SLOT_RECONFIGURE=true`. +**Note:** Runtime app settings are stored in the database (`app_settings` table), not environment variables. These include `max_radio_contacts`, `auto_decrypt_dm_on_advert`, `advert_interval`, `last_advert_time`, `last_message_times`, `flood_scope`, `blocked_keys`, `blocked_names`, `discovery_blocked_types`, `tracked_telemetry_repeaters`, and `auto_resend_channel`. `max_radio_contacts` is the configured radio contact capacity baseline used by background maintenance: favorites reload first, non-favorite fill targets about 80% of that value, and full offload/reload triggers around 95% occupancy. They are configured via `GET/PATCH /api/settings`. MQTT, bot, webhook, Apprise, and SQS configs are stored in the `fanout_configs` table, managed via `/api/fanout`. If the radio's channel slots appear unstable or another client is mutating them underneath this app, operators can force the old always-reconfigure send path with `MESHCORE_FORCE_CHANNEL_SLOT_RECONFIGURE=true`. Byte-perfect channel retries are user-triggered via `POST /api/messages/channel/{message_id}/resend` and are allowed for 30 seconds after the original send. diff --git a/README.md b/README.md index 2b1a3ed..e207ccc 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,8 @@ cp docker-compose.example.yml docker-compose.yml bash scripts/setup/install_docker.sh ``` +> The interactive generator enables a self-signed (snakeoil) TLS certificate by default. If you accept the default, the app will be served over HTTPS and the generated compose file will include certificate mounts and an SSL command override. Decline if you prefer plain HTTP or plan to terminate TLS externally. + Your local `docker-compose.yml` is gitignored so future pulls do not overwrite your Docker settings. The guided Docker flow can collect BLE settings, but BLE access from Docker still needs manual compose customization such as Bluetooth passthrough and possibly privileged mode or host networking. If you want the simpler path for BLE, use the regular Python launch flow instead. diff --git a/app/AGENTS.md b/app/AGENTS.md index 1bc77bd..6021c85 100644 --- a/app/AGENTS.md +++ b/app/AGENTS.md @@ -246,7 +246,7 @@ app/ - `POST /settings/favorites/toggle` - `POST /settings/blocked-keys/toggle` - `POST /settings/blocked-names/toggle` -- `POST /settings/migrate` +- `POST /settings/tracked-telemetry/toggle` ### Fanout - `GET /fanout` — list all fanout configs @@ -288,6 +288,8 @@ Main tables: - `raw_packets` - `contact_advert_paths` (recent unique advertisement paths per contact, keyed by contact + path bytes + hop count) - `contact_name_history` (tracks name changes over time) +- `repeater_telemetry_history` (time-series telemetry snapshots for tracked repeaters) +- `fanout_configs` (MQTT, bot, webhook, Apprise, SQS integration configs) - `app_settings` Contact route state is canonicalized on the backend: @@ -303,14 +305,14 @@ Repository writes should prefer typed models such as `ContactUpsert` over ad hoc `app_settings` fields in active model: - `max_radio_contacts` -- `favorites` - `auto_decrypt_dm_on_advert` - `last_message_times` -- `preferences_migrated` - `advert_interval` - `last_advert_time` - `flood_scope` - `blocked_keys`, `blocked_names`, `discovery_blocked_types` +- `tracked_telemetry_repeaters` +- `auto_resend_channel` Note: MQTT, community MQTT, and bot configs were migrated to the `fanout_configs` table (migrations 36-38). diff --git a/frontend/AGENTS.md b/frontend/AGENTS.md index cf417b0..32ac676 100644 --- a/frontend/AGENTS.md +++ b/frontend/AGENTS.md @@ -348,14 +348,14 @@ LocalStorage migration helpers for favorites; canonical favorites are server-sid `AppSettings` currently includes: - `max_radio_contacts` -- `favorites` - `auto_decrypt_dm_on_advert` - `last_message_times` -- `preferences_migrated` - `advert_interval` - `last_advert_time` - `flood_scope` - `blocked_keys`, `blocked_names`, `discovery_blocked_types` +- `tracked_telemetry_repeaters` +- `auto_resend_channel` Note: MQTT, bot, and community MQTT settings were migrated to the `fanout_configs` table (managed via `/api/fanout`). They are no longer part of `AppSettings`. diff --git a/scripts/setup/install_service.sh b/scripts/setup/install_service.sh index 7a140f8..009a258 100755 --- a/scripts/setup/install_service.sh +++ b/scripts/setup/install_service.sh @@ -241,7 +241,7 @@ if [ "$FRONTEND_MODE" = "build" ]; then NODE_VERSION="$(node -v)" NPM_VERSION="$(npm -v)" - require_minimum_version "Node.js" "$NODE_VERSION" 18 + require_minimum_version "Node.js" "$NODE_VERSION" 20 require_minimum_version "npm" "$NPM_VERSION" 9 echo -e "${YELLOW}Building frontend locally with Node ${NODE_VERSION} and npm ${NPM_VERSION}...${NC}"