feat(protobufs): sync to firmware-current and consume workspace package (#1097)

* feat(protobufs): sync to firmware-current and consume workspace package

Sync the vendored .proto sources to firmware-current (v2.7.25+48), regenerate the v2 TS bindings, and consume the workspace @meshtastic/protobufs (workspace:*) in place of the stale JSR 2.7.20 — finishing the monorepo migration (core was already workspace:*).

Includes the one required breaking-change fix: admin nodedb_reset changed int32 to bool, so resetNodes() now sends value: true.

* build(protobufs): vendor generated bindings for workspace consumers

The package is consumed via workspace:* — its exports point at the TS source, which imports ./dist/meshtastic/*_pb.ts — so the generated output must exist at build time. CI builds web/core with no codegen step and the runners have no buf CLI, so the bindings are vendored here (kept gitignored; lint/format skip them). Regenerate with: pnpm --filter @meshtastic/protobufs gen

* fix(protobufs): clean script removes the actual generated output dir

buf writes bindings to packages/ts/dist, but clean was removing a non-existent root dist — so it never cleaned stale output. Addresses Copilot review feedback.

* refactor: move web app packages/web -> apps/web

Aligns the web app with the apps/web layout (matching the Vercel web-test Root Directory and the SDK-migration direction). Pure directory move plus root config: pnpm-workspace (adds apps/*), vitest projects, root tsconfig reference, and the pr/release-web/nightly workflows. vercel.json moved with the app. Build + 36 validation tests green.

* feat: config fields, module pages, key verification, telemetry capture

Incorporates the firmware-current feature work onto the protobuf foundation: new config fields (Display message bubbles; LoRa fem_lna_mode + serial_hal_only; Telemetry air_quality_screen_enabled); 4 new ModuleConfig pages (TrafficManagement, StatusMessage, TAK, RemoteHardware); the manual Key Verification flow (sendKeyVerification + ClientNotificationDialog stages + Verify Key button); live telemetry capture (nodeDB addDeviceMetrics) and admin hardening (toggleMutedNode, graceful PortNum default); plus the sdk-preview ConfigEditor demo and store/config tests. Build + lint + format + 131 tests green.

* chore: drop #1062 (unsaved-change-detection) to match upstream revert

#1062 was merged to main by accident (per @danditomaso) and is being reverted. Reverse-applied its diff here via 3-way so #1097 stays consistent with where main is headed, while keeping the feature changes layered on the same files (deviceStore/changeRegistry). Build + 131 tests + lint + format green.

* fix(nodes): clean up SNR display in node table and map popup

SNR is a ratio measured in dB, not dBm (which is absolute power); the
node table and map popup both mislabeled it and crammed three values
together: '0dBm/50%/50raw'. The trailing '%/raw' pair was the same
heuristic ((snr+10)*5) shown twice — once clamped, once not.

Render SNR in dB rounded to one decimal, color-coded by a 0-100%
signal-quality heuristic (green/yellow/red), with the quality percentage
as a muted secondary. Drop the redundant raw value. Adds unit.db; this
matches the existing SNRTooltip, which already renders dB.
This commit is contained in:
Ben Meadors
2026-06-15 13:23:28 -05:00
committed by GitHub
parent 7a8529b841
commit bbe9a0d5cd
695 changed files with 27038 additions and 786 deletions
+152 -3
View File
@@ -7,7 +7,7 @@ import "meshtastic/device_ui.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ConfigProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
message Config {
@@ -111,7 +111,7 @@ message Config {
ROUTER_LATE = 11;
/*
* Description: Treats packets from or to favorited nodes as ROUTER, and all other packets as CLIENT.
* Description: Treats packets from or to favorited nodes as ROUTER_LATE, and all other packets as CLIENT.
* Technical Details: Used for stronger attic/roof nodes to distribute messages more widely
* from weaker, indoor, or less-well-positioned nodes. Recommended for users with multiple nodes
* where one CLIENT_BASE acts as a more powerful base station, such as an attic/roof node.
@@ -648,6 +648,11 @@ message Config {
* Can not be auto detected but set by proto. Used for 128x128 screens
*/
OLED_SH1107_128_128 = 4;
/*
* Can not be auto detected but set by proto. Used for 64x128 rotated screens
*/
OLED_SH1107_ROTATED = 5;
}
/*
@@ -783,6 +788,11 @@ message Config {
* If true, node names will show in long format
*/
bool use_long_node_name = 13;
/*
* If true, the device will display message bubbles on screen.
*/
bool enable_message_bubbles = 14;
}
/*
@@ -924,6 +934,62 @@ message Config {
* Brazil 902MHz
*/
BR_902 = 26;
/*
* ITU Region 1 Amateur Radio 2m band (144-146 MHz)
*/
ITU1_2M = 27;
/*
* ITU Region 2 Amateur Radio 2m band (144-148 MHz)
*/
ITU2_2M = 28;
/*
* EU 866MHz band (Band no. 47b of 2006/771/EC and subsequent amendments) for Non-specific short-range devices (SRD)
*/
EU_866 = 29;
/*
* EU 874MHz and 917MHz bands (Band no. 1 and 4 of 2022/172/EC and subsequent amendments) for Non-specific short-range devices (SRD)
*/
EU_874 = 30;
EU_917 = 31;
/*
* EU 868MHz band, with narrow presets
*/
EU_N_868 = 32;
/*
* ITU Region 3 Amateur Radio 2m band (144-148 MHz)
*/
ITU3_2M = 33;
/*
* ITU Region 1 Amateur Radio 70cm band (430-440 MHz)
*/
ITU1_70CM = 34;
/*
* ITU Region 2 Amateur Radio 70cm band (420-450 MHz)
* Note: Some countries do not allocate 420-430 MHz or 440-450 MHz.
* Check local law!
*/
ITU2_70CM = 35;
/*
* ITU Region 3 Amateur Radio 70cm band (430-450 MHz)
* Note: Some countries do not allocate 440-450 MHz. Check local law!
*/
ITU3_70CM = 36;
/*
* ITU Region 2 Amateur Radio 1.25m '125cm' band (220-225 MHz)
* Note: Some countries do not allocate 220-222 MHz (Ex: USA/Canada).
* Check local law!
*/
ITU2_125CM = 37;
}
/*
@@ -938,8 +1004,9 @@ message Config {
/*
* Long Range - Slow
* Deprecated in 2.7: Unpopular slow preset.
*/
LONG_SLOW = 1;
LONG_SLOW = 1 [deprecated = true];
/*
* Very Long Range - Slow
@@ -978,6 +1045,78 @@ message Config {
* It is not legal to use in all regions due to this wider bandwidth.
*/
SHORT_TURBO = 8;
/*
* Long Range - Turbo
* This preset performs similarly to LongFast, but with 500Khz bandwidth.
*/
LONG_TURBO = 9;
/*
* Lite Fast
* Medium range preset optimized for EU 866MHz SRD band with 125kHz bandwidth.
* Comparable link budget to MEDIUM_FAST but compliant with Band no. 47b of 2006/771/EC.
*/
LITE_FAST = 10;
/*
* Lite Slow
* Medium-to-moderate range preset optimized for EU 866MHz SRD band with 125kHz bandwidth.
* Comparable link budget to LONG_FAST but compliant with Band no. 47b of 2006/771/EC.
*/
LITE_SLOW = 11;
/*
* Narrow Fast
* Medium-to-moderate range preset optimized for EU 868MHz band with 62.5kHz bandwidth.
* Comparable link budget to SHORT_SLOW, but with half the data rate.
* Intended to avoid interference with other devices.
*/
NARROW_FAST = 12;
/*
* Narrow Slow
* Moderate range preset optimized for EU 868MHz band with 62.5kHz bandwidth.
* Comparable link budget and data rate to LONG_FAST.
*/
NARROW_SLOW = 13;
/*
* Tiny Fast
* Preset optimized for compliance with Amateur Radio restrictions with 20kHz bandwidth.
* Many regions limit data transmission bandwidth in lower amateur bands (2 Meter).
* Note: TCXO with tight tolerances (±5 ppm or better) is *absolutely required* at these narrow bandwidths.
* Only compatible with SX127x and SX126x chipsets.
* Comparable link budget and data rate to LONG_FAST.
*/
TINY_FAST = 14;
/*
* Tiny Slow
* Preset optimized for compliance with Amateur Radio restrictions with 20kHz bandwidth.
* Many regions limit data transmission bandwidth in lower amateur bands (2 Meter).
* Note: TCXO with tight tolerances (±5 ppm or better) is *absolutely required* at these narrow bandwidths.
* Only compatible with SX127x and SX126x chipsets.
* Comparable link budget and data rate to LONG_MODERATE.
*/
TINY_SLOW = 15;
}
enum FEM_LNA_Mode {
/*
* FEM_LNA is present but disabled
*/
DISABLED = 0;
/*
* FEM_LNA is present and enabled
*/
ENABLED = 1;
/*
* FEM_LNA is not present on the device
*/
NOT_PRESENT = 2;
}
/*
@@ -1100,6 +1239,16 @@ message Config {
* Sets the ok_to_mqtt bit on outgoing packets
*/
bool config_ok_to_mqtt = 105;
/*
* Set where LORA FEM is enabled, disabled, or not present
*/
FEM_LNA_Mode fem_lna_mode = 106;
/*
* Don't use radiolib to initialize the radio, instead listen for a serialHal connection
*/
bool serial_hal_only = 107;
}
message BluetoothConfig {