Commit Graph

171 Commits

Author SHA1 Message Date
niccellular
8cab967c14 feat(lockdown): gate toggle on Capabilities.supportsLockdown; soften enable warning
- Add Capabilities.supportsLockdown (atLeast V2_8_0) and gate the security-screen
  lockdown toggle visibility on it, consistent with the other firmware-version
  capability flags. SecurityConfigScreen computes Capabilities from the connected
  node's firmware_version; LockdownModeSetting takes a `supported` flag.
- Reword the enable-lockdown warning: it's reversible (disable with passphrase, or
  a full erase), so drop the inaccurate "permanent/irreversible" framing and the
  red error styling; rename strings lockdown_irreversible_* -> lockdown_enable_*.
- Update CapabilitiesTest for the V2_8_0 floor.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 18:36:20 -04:00
niccellular
d0857ef278 feat(lockdown): runtime enable/disable toggle and DISABLED state
Make lockdown a runtime, user-toggleable setting rather than a one-way lock:

- Thread a `disable` flag through the lockdown send path (CommandSender,
  LockdownCoordinator, MeshActionHandler, RadioController, AIDL, UIViewModel)
  so the app can send LockdownAuth{passphrase, disable=true} to decrypt
  storage and leave lockdown.
- Add LockdownState.Disabled and map LockdownStatus.State.DISABLED; clear the
  stored passphrase and session authorization when a device reports DISABLED
  (or when the user disables it), so we never auto-unlock a disabled device.
- Add a "Lockdown mode" switch to the security settings screen
  (LockdownModeSetting): enable from DISABLED via a set-passphrase dialog with
  a one-time irreversible-SWD warning + explicit confirm; disable from UNLOCKED
  via a passphrase prompt; "Lock now" and session info while unlocked. The
  setting is hidden when the device never reports lockdown_status (non-capable).
- Tests for the disable round-trip and DISABLED mapping; refresh fakes/strings.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 16:30:37 -04:00
niccellular
2f6c8288c4 Merge remote-tracking branch 'origin/main' into features/lockdown-v2
# Conflicts:
#	.specify/feature.json
#	AGENTS.md
#	core/proto/src/main/proto
#	feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/component/SecurityConfigScreen.kt
2026-05-28 15:13:33 -04:00
James Rich
a79e30e698 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5631)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-28 03:42:49 -07:00
James Rich
2277aae6e9 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5625)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-28 00:34:34 +00:00
James Rich
562ac73901 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5616) 2026-05-27 12:04:04 -05:00
James Rich
a95cfdfb72 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5604)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-26 08:04:24 -05:00
James Rich
184d547c78 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5598)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-25 16:25:01 -05:00
James Rich
4b42e2c76c chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5577)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-22 19:07:46 -07:00
James Rich
d870141b7c feat(ai): upgrade Chirpy on-device AI with proper APIs, download UX, and streaming (#5579)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-22 23:51:02 +00:00
James Rich
5ec6d80f61 docs: comprehensive documentation audit and refresh (#5572)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-21 20:50:01 -05:00
James Rich
479ed4f7fc chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5563) 2026-05-21 18:19:39 -05:00
James Rich
5d9e71da39 feat: node list density switching with compact layout and field toggles (#5444)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-21 17:44:48 -05:00
niccellular
3b02df3e67 Merge remote-tracking branch 'origin/main' into features/lockdown-v2
# Conflicts:
#	.specify/feature.json
#	AGENTS.md
#	core/proto/src/main/proto
2026-05-21 14:01:47 -04:00
James Rich
c26ef946b1 feat(docs): upgrade Chirpy assistant with streaming and live diagnostics (#5564) 2026-05-21 10:25:19 -05:00
James Rich
4eae950ba1 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5537) 2026-05-20 18:26:01 -05:00
James Rich
9d5e20c742 feat: align node list context menu to canonical 6-item order (#5548)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-20 22:31:35 +00:00
James Rich
4c588b73f8 fix(settings): rename UDP toggle label for cross-platform audit alignment (#5549)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-20 21:51:29 +00:00
James Rich
0076be3a24 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5532)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-20 09:11:32 -05:00
James Rich
83bb1a31f7 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5465) 2026-05-19 10:12:04 -05:00
James Rich
fc0df1a79a feat(docs): In-app documentation browser with Jekyll site and Docusaurus sync (#5445)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-19 04:00:22 +00:00
niccellular
6ce565f16c feat(lockdown): thread max_session_seconds through coordinator and UI
End-to-end plumbing for LockdownAuth.max_session_seconds (per-boot
uptime cap on the unlocked session; 0 = unlimited).

Wire:
- CommandSenderImpl populates LockdownAuth.max_session_seconds in the
  outbound admin packet (clamped non-negative).

Coordinator + persistence:
- LockdownCoordinator.submitPassphrase gains optional maxSessionSeconds
  (default 0); persisted alongside boots/hours and replayed by
  auto-unlock so cached sessions keep the operator's cap on reconnect.
- StoredPassphrase gains a new field with a default of 0 so existing
  call sites stay source-compatible.
- LockdownPassphraseStore (Android EncryptedSharedPreferences impl):
  reads/writes the new field with a `_maxSessionSeconds` key suffix;
  legacy entries decode to 0.
- LockdownPassphraseStore (JVM file-backed impl): bumps the per-entry
  on-disk serialization from 3-line to 4-line; legacy 3-line entries
  still decode (treated as maxSessionSeconds=0).

IPC + radio plumbing:
- IMeshService.sendLockdownUnlock AIDL gains a 4th int parameter.
- MeshService stub, MeshActionHandler, RadioController interface, and
  both impls (AndroidRadioControllerImpl, DirectRadioControllerImpl)
  thread the field through.
- FakeIMeshService, FakeRadioController, FakeLockdownCoordinator
  updated to match.

UI:
- LockdownDialog adds a single optional "Session cap (minutes)" field
  below the boots/hours row. Operators enter minutes for ergonomics;
  the dialog multiplies by 60 before passing to the coordinator. Blank
  or 0 = unlimited (firmware default).
- UIViewModel.sendLockdownUnlock gains the new param with default 0.
- New string resources: lockdown_session_minutes,
  lockdown_session_minutes_help. Strings re-sorted via
  scripts/sort-strings.py.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 16:57:49 -04:00
James Rich
f4b6b02ace refactor(build): rename entry modules and remove DESKTOP_ONLY mode (#5476)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-18 12:44:12 +00:00
James Rich
b32aa1b9f2 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5460)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-14 16:34:40 -05:00
James Rich
33184fef99 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5455)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-14 12:17:20 -05:00
Ben Meadors
a04a261b80 feat: TAK v2 protocol integration with zstd compression and full CoT type support (#5434)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jamesarich <2199651+jamesarich@users.noreply.github.com>
Co-authored-by: James Rich <james.a.rich@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-14 12:50:01 +00:00
James Rich
13865e7c8b chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5438)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-14 06:10:23 -05:00
James Rich
d3324b1b12 fix: use positional format specifiers and show TTL fields in unlock mode
Compose Multiplatform stringResource requires positional specifiers
(%1$s, %1$d) — plain %s/%d renders literal format tokens.

Boot TTL and Hour TTL fields are now shown for both provision and
unlock, matching the original implementation. Confirm passphrase
field remains provisioning-only.
2026-05-13 12:44:22 -05:00
James Rich
7beb639761 feat: implement lockdown mode authentication
- Add LockdownCoordinator state machine with auto-replay, lock-now,
  and error-resilient passphrase store calls
- Add EncryptedSharedPreferences-backed Android passphrase store
  with nullable fallback on crypto init failure
- Add LockdownDialog (provision/unlock/backoff) with byte-length
  passphrase validation and string resources
- Add LockdownSessionStatus composable for token info display
- Gate region-unset banner on sessionAuthorized in ConnectionsScreen
- Wire Lock Now button in SecurityConfigScreen
- Add LockdownCoordinatorImplTest covering all state transitions,
  auto-replay, lock-now, error paths, and uint32 overflow
- Add FakeLockdownCoordinator and update test fakes
- Delete unused LockdownUnlockDialog.kt
2026-05-13 10:49:50 -05:00
James Rich
09a0d123be chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5416)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-12 06:21:59 -05:00
James Rich
313dc1c2f7 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5400) 2026-05-11 17:28:06 -05:00
James Rich
95c3bc0bce Brownfield gap remediation: 28 tasks + intro commonMain migration (#5401)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-11 20:10:23 +00:00
James Rich
443de4a34d chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5383)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-10 05:57:23 -05:00
James Rich
924f8a507b chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5378)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-07 07:34:30 -05:00
James Rich
3c75510f01 fix(mqtt): harden TLS enforcement, add user CA trust, and improve error diagnostics (#5365)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-06 12:09:49 -05:00
James Rich
3e55579250 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5357)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-06 12:02:01 -05:00
James Rich
82926fd734 feat: event firmware easter egg with ambient branding (#5354)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-04 19:37:47 +00:00
James Rich
fa3437b147 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5349)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-04 11:45:11 -05:00
James Rich
26c50258da chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5347)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-04 11:30:59 -05:00
James Rich
f1423e4ee2 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5339)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-05-03 14:51:57 -05:00
James Rich
9e396cdecc chore: optimize AI agent context and implement CI cost controls (#5335)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-05-02 13:19:11 -05:00
James Rich
2822290908 refactor(build): build-logic cleanup, CC safety, and detekt 2.0 upgrade (#5311) 2026-05-01 02:48:37 +00:00
James Rich
9d64dd697e chore: Scheduled updates (Firmware, Hardware, Translations, Graphs, Licenses) (#5298) 2026-04-29 14:02:03 -05:00
James Rich
7f578906fa revert: replace extra newline on traceroute route strings
fix translations?
2026-04-29 13:48:26 -05:00
James Rich
3d2b21843e refactor: update user lookups and localize traceroute responses (#5294) 2026-04-29 16:42:02 +00:00
James Rich
9e0ad369dd fix: update notification icon (#5293) 2026-04-29 16:02:41 +00:00
James Rich
5e415120d0 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs, Licenses) (#5273) 2026-04-29 06:49:14 -05:00
James Rich
0f2730d86d fix: remove slashes from strings.xml 2026-04-26 15:18:35 -05:00
James Rich
d4eadee500 chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5247)
Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com>
2026-04-26 15:11:12 -05:00
James Rich
a035fedcdf chore: Scheduled updates (Firmware, Hardware, Translations, Graphs) (#5244) 2026-04-25 18:39:06 +00:00