Files
meshtastic-web/apps/web/public/devices/rak-wismeshtap.svg
T
Ben MeadorsandGitHub bbe9a0d5cd 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.
2026-06-15 13:23:28 -05:00

265 lines
6.8 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="663.59 325.94 640.35 1015.71">
<defs><style>
.cls-1 {
fill: #353535;
}
.cls-2 {
fill: #1d1e1e;
}
.cls-3 {
fill: #9f9f9e;
}
.cls-4 {
fill: #434343;
}
.cls-5, .cls-7 {
fill: none;
stroke: #050606;
stroke-miterlimit: 10;
}
.cls-5 {
stroke-width: 2px;
}
.cls-6 {
fill: #b1a368;
}
</style></defs><g id="Layer_7" data-name="Layer 7"><rect
class="cls-1"
x="1079.47"
y="834.15"
width="56.53"
height="9.97"
></rect><rect
class="cls-1"
x="1075.53"
y="800.89"
width="63.83"
height="33.26"
></rect><path
class="cls-1"
d="M1079.93,800.89v-5.28a2.81,2.81,0,0,1,2.81-2.81h50.45a2.81,2.81,0,0,1,2.82,2.81v5.28"
></path><rect
class="cls-1"
x="1076.7"
y="718.27"
width="62.66"
height="70.68"
rx="3.45"
></rect><rect
class="cls-1"
x="1082.84"
y="788.94"
width="50.73"
height="3.86"
></rect><path
class="cls-2"
d="M1085.24,695.85s-2.75-3.82-4.5-3.27-3.94.3-1.53,2.72l12.9,13s.75.76.61,3.43.07,5.63.65,5.91,30.43,1.59,30.64-.79.67-6.25-.74-5.68-11.35,4.43-19.55.05S1085.24,695.85,1085.24,695.85Z"
></path><path
class="cls-1"
d="M1282,938.23v321.64a59.85,59.85,0,0,1-59.78,59.78H745.37a59.84,59.84,0,0,1-59.78-59.78V938.23a59.84,59.84,0,0,1,59.78-59.78h476.8A59.84,59.84,0,0,1,1282,938.23Z"
></path><path
class="cls-3"
d="M1222.17,857.45H745.37a80.77,80.77,0,0,0-80.78,80.78v321.64a80.77,80.77,0,0,0,80.78,80.78h476.8a80.78,80.78,0,0,0,80.78-80.78V938.23A80.78,80.78,0,0,0,1222.17,857.45ZM1282,1259.87a59.85,59.85,0,0,1-59.78,59.78H745.37a59.84,59.84,0,0,1-59.78-59.78V938.23a59.84,59.84,0,0,1,59.78-59.78h476.8A59.84,59.84,0,0,1,1282,938.23Z"
></path><rect
class="cls-4"
x="819.33"
y="971.15"
width="328.86"
height="250.93"
></rect><path
class="cls-5"
d="M1222.17,878.45a59.83,59.83,0,0,1,59.77,59.77v321.65a59.84,59.84,0,0,1-59.77,59.78H745.36a59.84,59.84,0,0,1-59.77-59.78V938.22a59.83,59.83,0,0,1,59.77-59.77h476.81m0-21H745.36a80.77,80.77,0,0,0-80.77,80.77v321.65a80.78,80.78,0,0,0,80.77,80.78h476.81a80.78,80.78,0,0,0,80.77-80.78V938.22a80.77,80.77,0,0,0-80.77-80.77Z"
></path><rect
class="cls-5"
x="819.33"
y="971.15"
width="328.86"
height="250.93"
></rect><rect
class="cls-6"
x="1080.45"
y="847.88"
width="55.55"
height="9.57"
></rect><rect
class="cls-5"
x="1080.45"
y="847.88"
width="55.55"
height="9.57"
></rect><rect
class="cls-5"
x="1079.47"
y="834.15"
width="56.53"
height="9.97"
></rect><rect
class="cls-5"
x="1075.53"
y="800.89"
width="63.83"
height="33.26"
></rect><path
class="cls-5"
d="M1079.93,800.89v-5.28a2.81,2.81,0,0,1,2.81-2.81h50.45a2.81,2.81,0,0,1,2.82,2.81v5.28"
></path><rect
class="cls-5"
x="1076.7"
y="718.27"
width="62.66"
height="70.68"
rx="3.45"
></rect><rect
class="cls-5"
x="1082.84"
y="788.94"
width="50.73"
height="3.86"
></rect><line
class="cls-5"
x1="1093.01"
y1="718.27"
x2="1093.01"
y2="703.17"
></line><line
class="cls-5"
x1="1124.56"
y1="718.27"
x2="1124.56"
y2="710.55"
></line><path
class="cls-1"
d="M784.41,333.86l363.94,355.78-18.09,16.92a24.62,24.62,0,0,1-33.69,0l-14.9-14a.44.44,0,0,0-.5-.09h0a13.35,13.35,0,0,1-14.85-2.89L750.32,368a24.13,24.13,0,0,1,1.18-35h0A24.13,24.13,0,0,1,784.41,333.86Z"
></path><path
class="cls-2"
d="M818.35,367.13c-2.26-2.12-11.86,3.59-21.07,13.42s-15.34,19.55-13.08,21.67l-2.53-2.8c-2.26-2.12,3.87-11.84,13.08-21.67s18.8-15.54,21.07-13.42l-4.24-3.58c-2.27-2.12-11.86,3.6-21.07,13.42s-15.34,19.56-13.08,21.68l-2.53-2.8c-2.26-2.12,3.87-11.85,13.08-21.68s18.8-15.54,21.07-13.42"
></path><path
class="cls-5"
d="M784.41,333.86l363.94,355.78-18.09,16.92a24.62,24.62,0,0,1-33.69,0l-14.9-14a.44.44,0,0,0-.5-.09h0a13.35,13.35,0,0,1-14.85-2.89L750.32,368a24.13,24.13,0,0,1,1.18-35h0A24.13,24.13,0,0,1,784.41,333.86Z"
></path><line
class="cls-5"
x1="1077.35"
y1="693.43"
x2="1093.01"
y2="709.21"
></line><circle
class="cls-2"
cx="1111.17"
cy="687.29"
r="6"
></circle><circle
class="cls-5"
cx="1111.17"
cy="687.29"
r="6"
></circle><path
class="cls-7"
d="M774.9,393.05c-2.26-2.12,3.87-11.85,13.08-21.68s18.8-15.54,21.07-13.42"
></path><path
class="cls-7"
d="M777.43,395.85c-2.26-2.12,3.87-11.85,13.08-21.68s18.8-15.54,21.07-13.42"
></path><path
class="cls-7"
d="M781.67,399.42c-2.26-2.12,3.87-11.84,13.08-21.67s18.8-15.54,21.07-13.42"
></path><path
class="cls-7"
d="M784.2,402.22c-2.26-2.12,3.87-11.84,13.08-21.67s18.81-15.54,21.07-13.42"
></path><rect
class="cls-6"
x="1086.52"
y="844.12"
width="41.63"
height="3.76"
></rect><rect
class="cls-5"
x="1086.52"
y="844.12"
width="41.63"
height="3.76"
></rect><rect
class="cls-2"
x="1079.47"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1083.7"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1087.92"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1092.15"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1096.38"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1100.6"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1104.83"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1109.05"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1113.28"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1117.51"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1121.73"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1125.96"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1130.18"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1134.41"
y="805.49"
width="1.59"
height="25.02"
></rect></g>
</svg>