Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
a51ef38
docs(readme): tighten, refresh for v0.2.1, add polling flowcharts
mikevitelli Apr 15, 2026
94040b3
Merge branch 'main' into dev
mikevitelli Apr 15, 2026
f131899
backup(device): 2026-04-17 23:22 — 68 file(s)
mikevitelli Apr 18, 2026
22906c1
fix(device/backup): refuse to commit blobs GitHub will reject
mikevitelli Apr 18, 2026
479f4df
feat(packaging): battery-safety units [UNSTABLE, opt-in, default off]
mikevitelli Apr 19, 2026
fdbbf7b
wip(wardrive): GPS-tagged AP map — WIP, feature-flagged, needs polish
mikevitelli Apr 19, 2026
9b826ad
feat(wardrive-tui): OSM street overlay via Overpass API
mikevitelli Apr 19, 2026
bc1d0c6
perf(wardrive-tui): optimize OSM street fetcher for urban density
mikevitelli Apr 19, 2026
31c0e56
feat(tui,device): Meshtastic submenu + meshtasticd wrapper
mikevitelli Apr 20, 2026
5e12998
feat(meshtastic): filter Listen output to one-line packet summaries
mikevitelli Apr 20, 2026
ff0f05d
feat(tui,device): consolidate LoRa + Meshtastic under single HARDWARE…
mikevitelli Apr 20, 2026
a13b2ef
feat(tui): Meshtastic mesh map
mikevitelli Apr 20, 2026
7b650e9
feat(meshtastic): align CLI wrapper + TUI to canonical Meshtastic docs
mikevitelli Apr 20, 2026
fb20167
Merge branch 'feat/meshtastic-tui' into wip/wardrive-map
mikevitelli Apr 20, 2026
efc1a39
docs(spec): MimiClaw WiFi config + ESP32 TUI submenu refactor
mikevitelli Apr 22, 2026
82cbe3f
wip: snapshot in-flight work before wifi-cred history purge
mikevitelli Apr 22, 2026
93b298f
security: remove backup.sh from public tree + gitignore device backups
mikevitelli Apr 22, 2026
0d36d98
console: single source of truth — ~/pkg/lib or /opt/uconsole/lib
mikevitelli Apr 22, 2026
8cdfbc6
Merge branch 'feat/meshtastic-tui' into dev
mikevitelli Apr 22, 2026
2d81b91
tui: read PKG_VERSION from VERSION file, not git describe
mikevitelli Apr 23, 2026
5a16abb
console: back to single runtime source — /opt/uconsole/lib only
mikevitelli Apr 23, 2026
8313364
console-dev: launcher wrapper for the uconsole-cloud dev tree
mikevitelli Apr 23, 2026
ab2a3f6
tui: dev suffix shows NEXT patch version, not current
mikevitelli Apr 23, 2026
c6b6316
docs(contributing): update for current versioning + launcher split
mikevitelli Apr 23, 2026
f2c5c42
docs: add PIPELINE.md + consolidate root (FEATURES, ADSB plan → docs/)
mikevitelli Apr 23, 2026
676f545
feat(esp32): MimiClaw firmware support in ESP32 hub
mikevitelli Apr 23, 2026
7a1c6a2
feat(mimiclaw): serial-based IP discovery with cache (kills MIMI_IP)
mikevitelli Apr 23, 2026
5345632
feat(mimiclaw): WiFi config panel + Settings subfold (spec Part 2)
mikevitelli Apr 23, 2026
67b3e8f
feat(esp32): distill common footer to 4 items
mikevitelli Apr 23, 2026
b91b1bd
feat(esp32): distill MicroPython + Marauder submenus
mikevitelli Apr 23, 2026
d7c4d41
chore: consolidate root — move Dockerfile.test + root scripts/ into h…
mikevitelli Apr 23, 2026
47e5d83
feat(mimiclaw): markdown rendering + cleaner chat UI
mikevitelli Apr 23, 2026
dd7d91f
fix(esp32): detect-hang — quiet open avoiding DTR/RTS reset
mikevitelli Apr 25, 2026
2fcaea0
feat(tui): emoji category icons in tile grid
mikevitelli Apr 25, 2026
72ded06
fix(crash-log): use $HOME for stamp file
mikevitelli Apr 25, 2026
53f824c
merge: wip/wardrive-map → dev
mikevitelli Apr 25, 2026
a38b28e
feat(esp32): post-reset wait + wire mimi/marauder via open_ready
mikevitelli Apr 25, 2026
197d37b
docs(spec): TUI framework refactor design
mikevitelli Apr 25, 2026
c3f5f44
docs(spec): rewrite TUI refactor design — three commits, no transitio…
mikevitelli Apr 25, 2026
ecde0bc
fix(tui): dedupe _ESP32_MIMICLAW_ITEMS
mikevitelli Apr 25, 2026
3b5f467
refactor(tui): extract per-feature flows, plugin handler registry
mikevitelli Apr 26, 2026
34ce1a4
feat(tui): hide menu items whose feature module failed to load
mikevitelli Apr 26, 2026
3007479
feat(console): auto-detect dev source tree, drop the make-install dance
mikevitelli Apr 26, 2026
de20ef7
docs: launcher auto-detects source tree, no make install in edit loop
mikevitelli Apr 26, 2026
ac518d6
docs: cleanup pass — mark shipped specs, consolidate dirs, audit status
mikevitelli Apr 26, 2026
d9ccc2d
docs: trim root .md files, extract ARCHITECTURE / API / SELF-HOSTING
mikevitelli Apr 26, 2026
8cf0398
docs: scrub stale info — paths, counts, FEATURES rewrite
mikevitelli Apr 26, 2026
3ce2c01
docs/fix: backfill v0.2.1 changelog entry, repair integration-test im…
mikevitelli Apr 26, 2026
aa9f3f1
refactor(tests): modernization — rename, fixtures, runtime DYNAMIC_HA…
mikevitelli Apr 26, 2026
e04a712
test(lint): catch undefined-name + duplicate-assignment regressions
mikevitelli Apr 26, 2026
c813f12
feat(tui): per-item color emoji icons across all submenus + marauder
mikevitelli Apr 26, 2026
44f17bd
ci: make pytest green — wire orphan handlers, exempt private scripts,…
mikevitelli Apr 26, 2026
52dabf6
test(frontend): exempt system/backup.sh from devicePaths existence ch…
mikevitelli Apr 26, 2026
a116893
test(frontend): tuiStructure regex accepts 5-tuple menu items (icon)
mikevitelli Apr 26, 2026
ae61f12
test(frontend): handle no-space icons in regex + exempt backup.sh
mikevitelli Apr 26, 2026
f90ee9f
test(frontend): update HARDWARE radio-submenu assertion for sub:lora_…
mikevitelli Apr 26, 2026
59e0eba
ci(install-test): scrub user-specific config from .deb, fix path leaks
mikevitelli Apr 26, 2026
4b1d441
fix(restore): remove persistent dtoverlay=spi1-1cs from BOOT_EXTRAS
mikevitelli Apr 26, 2026
52d1d21
chore(wardrive): retire WiGLE quota-probe cron, restore spec accuracy
mikevitelli Apr 26, 2026
f7e7f15
feat(frontend): 30-day backup view, footer version badge, TokenExpire…
mikevitelli Apr 26, 2026
8798e7f
fix(frontend): rename vitest.config.ts → .mjs to bypass std-env ESM l…
mikevitelli Apr 26, 2026
34c955f
feat(adsb): migrate dump1090-mutability → readsb + viewadsb
mikevitelli Apr 26, 2026
fe5e4e3
fix(lora): TCXO + RF-switch init for AIO board, venv-safe spidev path
mikevitelli Apr 26, 2026
fc35a2e
fix(setup): replace eval-based variable assignment with printf -v (#45)
mikevitelli Apr 26, 2026
fd28652
fix(security): parse env files explicitly instead of source/eval (#46…
mikevitelli Apr 26, 2026
8831326
fix(tui): add timeouts to systemctl calls in trackball-scroll handler…
mikevitelli Apr 26, 2026
e94abbd
fix(power): set -euo pipefail on safety-critical PMU scripts (#49 sub…
mikevitelli Apr 26, 2026
c407b33
docs(release): v0.2.2 changelog, FEATURES update, audit STATUS refresh
mikevitelli Apr 26, 2026
96d861e
feat(wardrive): ship as BETA, strip the opt-in gate
mikevitelli Apr 27, 2026
2579288
fix(frontend): polyfill globalThis.crypto for Node 18 vitest runs
mikevitelli Apr 27, 2026
5584af0
docs(specs): AIO v2 TUI + WiFi radio switcher design
mikevitelli May 2, 2026
7d69f88
docs(specs): match AIO panel UI to TUI conventions
mikevitelli May 3, 2026
cc9d86b
docs(plans): AIO v2 TUI + WiFi radio switcher implementation plan
mikevitelli May 3, 2026
1dcf3d9
fix(push-status): report actual default-route iface, not hardcoded wlan0
mikevitelli May 3, 2026
709315a
feat(frontend): render Ethernet vs WiFi distinctly using new wifi.kin…
mikevitelli May 3, 2026
6a52141
merge: fix/push-status-multi-iface
mikevitelli May 3, 2026
13b6265
merge: dev (picks up push-status multi-iface fix)
mikevitelli May 3, 2026
72fab3c
test(fixtures): capture aiov2_ctl/iw/rfkill outputs from CM5+AIOv2 de…
mikevitelli May 3, 2026
f1d7e2c
feat(tui): aiov2_ctl --status parser with fixture-backed tests
mikevitelli May 3, 2026
cfd101d
feat(tui): AIO board v1/v2 detection with caching
mikevitelli May 3, 2026
719388d
feat(tui): aio.ensure_rail() — auto-power-on rails on v2, no-op on v1
mikevitelli May 3, 2026
0bc8858
feat(tui): AIO v2 dashboard panel — rails, boot defaults, power telem…
mikevitelli May 3, 2026
cb790d0
fix(tui): AIO dashboard — map_y_quit, ImportError guard, dead imports…
mikevitelli May 3, 2026
cb163fa
feat(tui): wifi_radio iw/rfkill parsers with fixture-backed tests
mikevitelli May 3, 2026
3524de4
fix(tui,docs): USB rail label is "AC1200" only, not "AC1200 + ESP32"
mikevitelli May 3, 2026
697753f
feat(tui): wifi radio detection + mode persistence
mikevitelli May 3, 2026
ab6e0fb
fix(tui,docs): brief_radio_summary docstring, +3 wifi_radio tests, sp…
mikevitelli May 3, 2026
986ed19
feat(tui): wifi_radio.set_mode three-mode rfkill switcher
mikevitelli May 3, 2026
9f0cef0
fix(tui,docs): set_mode uses rfkill numeric id, not phy device name
mikevitelli May 3, 2026
661f7cf
feat(tui): wifi radio mode picker — 3-mode rfkill switcher panel
mikevitelli May 3, 2026
49f5e42
feat(tui): wire AIO board + WiFi radio handlers into framework
mikevitelli May 3, 2026
9583f11
release: prep v0.2.2 — version bump, AIO/WiFi changelog
mikevitelli May 4, 2026
76d512f
fix(power): replace cpu-freq-cap.sh with cpu-freq.sh — set min and max
mikevitelli May 4, 2026
49787b0
feat(tui): CPU Freq picker panel — set min/max, presets, live refresh
mikevitelli May 4, 2026
b6b3501
fix(power): cellhealth.sh — Samsung 35E cells (CM4-era Nitecore label…
mikevitelli May 4, 2026
bf451d0
fix(backup,util): REPO_DIR via git rev-parse + util script path bugs
mikevitelli May 5, 2026
2af9ce5
feat(util): backup-restore-smoke.sh — assert backup ↔ restore symmetry
mikevitelli May 5, 2026
f881639
security(build): post-build assertion against private-script leak in …
mikevitelli May 5, 2026
ce6ff1a
fix(packaging): ship debian changelog + copyright per Policy 12.5/12.7
mikevitelli May 5, 2026
a469b87
security(postinst): remove leaky backup.sh on upgrade from 0.1.0–0.2.1
mikevitelli May 5, 2026
4f1a25e
security(scripts): remove leaked sudoers files from public source tree
mikevitelli May 9, 2026
83a2462
fix(restore): drop `local` outside function — would abort with set -e
mikevitelli May 9, 2026
8eee1f7
fix(tui): move CONFIG_FILE to XDG config dir, add legacy migration
mikevitelli May 9, 2026
33b0bc8
security(webdash): kill SSID DOM-XSS in WiFi modal — addEventListener
mikevitelli May 9, 2026
e5b5a1d
security(webdash): SSE POST-only + X-Real-IP pinning + auth rate-limit
mikevitelli May 9, 2026
9e0ee42
security(cloud): validate device-pushed wifi.ip before href interpola…
mikevitelli May 9, 2026
e50749e
security(api): rate-limit + size cap + shape check on /api/device/push
mikevitelli May 9, 2026
db85e39
security(ci): pin third-party actions by SHA + lock ci.yml permissions
mikevitelli May 9, 2026
d87ab0e
test(audit): add regression tests for 2026-03-24 + 2026-05-09 fixes
mikevitelli May 9, 2026
e7552aa
test: replace theater copies with real tui.framework imports
mikevitelli May 9, 2026
2d562a6
fix(github): align scripts manifest path with backup repo
mikevitelli May 9, 2026
dfc919d
fix(version): revert VERSION 0.2.2 → 0.2.1 to match last released tag
mikevitelli May 9, 2026
2064649
fix(tui): port ZMK keyboard reader to evdev, trackball Select → Fn
mikevitelli May 9, 2026
fc48c0a
feat(wifi): WIFI_IFACE override via /etc/uconsole/wifi.conf
mikevitelli May 11, 2026
3e448d7
chore(privacy): remove personal SSIDs, PSK, and SSH key from canonical
mikevitelli May 11, 2026
3b8e3bd
feat(ai): add uconsole-ai offline CLI agent
mikevitelli May 11, 2026
790fac9
fix(trackball): gate debug prints behind TRACKBALL_DEBUG=1
mikevitelli May 11, 2026
de8a023
fix(ai): remove personal-path references from uconsole-ai
mikevitelli May 11, 2026
a3d75d9
fix(tui): show primary interface in monitor NET panel
mikevitelli May 11, 2026
7b12325
feat(tui): configurable live monitor refresh rate
mikevitelli May 11, 2026
cc57dc7
fix(install): chown deployed files to root:root in rsync
mikevitelli May 11, 2026
1185d6a
fix(wifi-fallback): move state to /var/lib, require root for enable/d…
mikevitelli May 11, 2026
9815c21
feat(tui): antenna array braille ribbon monitor (WiFi → Antenna Array)
mikevitelli May 23, 2026
6afa0c0
feat(tui): hostname-aware Live Monitor header
mikevitelli May 26, 2026
2dc6646
chore(repo): remove AI tooling artifacts from OSS source
mikevitelli May 26, 2026
e307c22
chore(repo): strip operator-specific config snapshots
mikevitelli May 26, 2026
9d962d4
refactor(repo): consolidate docs, fix broken symlink, remove dead art…
mikevitelli May 26, 2026
0393cd5
fix(packaging): align copyright Upstream-Contact with control Maintainer
mikevitelli May 26, 2026
f3669d8
docs: refresh README for v0.3.0 and finalize changelog header
mikevitelli May 26, 2026
bc9fdce
docs: reconcile script counts and open v0.4 changelog section
mikevitelli May 26, 2026
cc1e214
docs: add Contributor Covenant code of conduct
mikevitelli May 26, 2026
687ddc0
docs(roadmap): capture v0.3.1 + v0.4 priorities from review audit
mikevitelli May 26, 2026
c76152c
chore(frontend): upgrade next 16.1.6 → 16.2.6
mikevitelli May 26, 2026
67484ab
release: v0.3.0
mikevitelli May 26, 2026
bdeb20b
Revert "chore(frontend): upgrade next 16.1.6 → 16.2.6"
mikevitelli May 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 0 additions & 41 deletions .claude/commands/design-ux.md

This file was deleted.

49 changes: 0 additions & 49 deletions .claude/commands/implement-feature.md

This file was deleted.

42 changes: 0 additions & 42 deletions .claude/commands/ship-phase.md

This file was deleted.

27 changes: 0 additions & 27 deletions .claude/commands/sync-repos.md

This file was deleted.

21 changes: 13 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,19 @@ on:
pull_request:
branches: [main, dev]

# Workflow-level least privilege. CI doesn't need to write to the repo,
# create issues, or push container images — read-only is enough.
permissions:
contents: read

jobs:
ci:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- uses: actions/setup-node@v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
cache: npm
Expand All @@ -27,13 +32,13 @@ jobs:
shellcheck frontend/public/install.sh
shellcheck frontend/public/scripts/uconsole

- uses: actions/setup-python@v5
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: '3.11'

- name: Device tests (pytest)
run: |
pip install pytest
pip install pytest pyflakes
python -m pytest tests/ -v

- name: Shell script checks
Expand All @@ -60,15 +65,15 @@ jobs:
needs: ci

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Set up QEMU (arm64 emulation)
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
with:
platforms: arm64

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3

- name: Build .deb
run: bash packaging/build-deb.sh
Expand All @@ -78,7 +83,7 @@ jobs:
docker buildx build \
--platform linux/arm64 \
--load \
-f Dockerfile.test \
-f packaging/Dockerfile.test \
-t uconsole-test .

- name: Verify test image
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Extract version from tag
id: version
Expand All @@ -29,7 +29,7 @@ jobs:
exit 1
fi

- uses: actions/setup-node@v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
cache: npm
Expand Down Expand Up @@ -69,7 +69,7 @@ jobs:
echo "Built: $DEB ($(du -h "$DEB" | cut -f1))"

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2
with:
files: dist/uconsole-cloud_*.deb
generate_release_notes: true
Expand Down
27 changes: 24 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,17 @@ dist/
# APT repo — pool/ and dists/ are generated by `make publish-apt` but MUST be
# committed so Vercel deploys them. Only the private GPG key is excluded (below).

# GPG private keys (NEVER commit)
# Secrets — defensive patterns. No tracked files match these today; the
# patterns are here so an accidental `git add .` can't drag credentials in.
*-private.gpg
*.pem
*.key
id_*
secrets/
.config/op/

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
Expand All @@ -42,13 +47,29 @@ yarn-error.log*
# vercel
.vercel

# claude code project memory
# AI tooling — not for OSS source. CLAUDE.md and per-IDE Claude/agent
# scratch dirs stay local-only.
CLAUDE.md
AGENTS.md
GEMINI.md
.claude/
.cursor/
.copilot/
.continue/
.aider*

# typescript
*.tsbuildinfo
next-env.d.ts
__pycache__/
.pytest_cache/

# user TUI preferences (theme, view mode)
device/scripts/.console-config.json

# device backups — these live in the private ~/pkg repo, never in this public
# one. If backup.sh ever gets re-introduced or run from the wrong tree, these
# patterns keep credentials out of git.
device/scripts/system/wifi/
device/scripts/system/etc/shadow
device/scripts/system/etc/sudoers.d/
3 changes: 0 additions & 3 deletions .vscode/settings.json

This file was deleted.

Loading
Loading