Commit Graph

6 Commits

Author SHA1 Message Date
Reuven 285bb0ad37 feat(desktop): v0.4.4 - WiFi configuration via serial port
## New Features
- WiFi Configuration Modal: Configure ESP32 WiFi credentials directly from the desktop app
- Serial port WiFi commands: Sends wifi_config/wifi/set ssid commands via serial
- Improved feedback UI with status indicators (Success/Commands Sent/Error)

## API Improvements
- New Tauri command: configure_esp32_wifi(port, ssid, password)
- 21 new integration tests covering all API functionality
- ESP32 VID/PID detection for CP210x, CH340, FTDI, and native USB

## UI Enhancements
- WiFi button in Serial Ports table for ESP32-compatible devices
- Modal with SSID/password inputs and clear status feedback
- "Done" button after configuration with "Try Again" option

## Testing
- 18 unit tests + 21 integration tests = 39 total tests passing
- Tests cover: discovery, settings, server, flash, OTA, provision, WASM, state, domain models

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-10 10:35:30 -04:00
Reuven 21aba2df8d feat(desktop): v0.4.3 - USB device discovery and data source toggle
## Changes
- Auto-scan serial ports on Discovery page load (not just Serial tab)
- Show USB device hint when no network nodes found but USB devices detected
- Add "Flash →" button in Serial Ports table for quick navigation
- Fix server stop: proper SIGTERM/SIGKILL with process group handling
- Add data source selector on Sensing page (simulate/auto/wifi/esp32)
- Fix log viewer scroll (use containerRef.scrollTop instead of scrollIntoView)
- Add fallback serial port scanning for macOS when tokio_serial fails

## Fixes
- ESP32 USB devices now visible immediately on Discovery page
- Server processes properly terminated on stop
- Log viewer no longer scrolls entire page

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-10 09:59:46 -04:00
Reuven e12749bf68 feat(desktop): v0.4.2 - Integrated sensing server with real WebSocket data
- Bundle sensing-server binary in app resources (bin/sensing-server)
- Add find_server_binary() for multi-path binary discovery
- Connect Sensing page to real WebSocket endpoint (ws://localhost:8765/ws/sensing)
- Add DataSource type and source config for data source selection
- Default to simulate mode when no ESP32 hardware present
- Add ADR-055: Integrated Sensing Server architecture
- Add ADR-056: Complete RuView Desktop Capabilities Reference

Closes integration of sensing server as single-package distribution.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-10 00:08:31 -04:00
Reuven 3b37aaf460 fix(desktop): v0.4.1 - Fix Dashboard Quick Actions and Scan Network
- Add navigation to Quick Actions (Flash, OTA, WASM buttons now work)
- Add error feedback for Scan Network failures
- Create version.ts as single source of truth for version
- Switch reqwest from rustls-tls to native-tls for Windows compatibility
- Version bump to 0.4.1

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-09 23:46:29 -04:00
rUv 0b98917dff
feat(desktop): RuView Desktop v0.4.0 - Full ADR-054 Implementation (#212)
* fix(desktop): implement save_settings and get_settings commands

Fixes #206 - Settings can now be saved and loaded in Desktop v0.3.0

- Add commands/settings.rs with get_settings and save_settings Tauri commands
- Settings persisted to app data directory as settings.json
- Supports all AppSettings fields: ports, bind address, OTA PSK, discovery, theme
- Add unit tests for serialization and defaults

Settings are stored at:
- macOS: ~/Library/Application Support/net.ruv.ruview/settings.json
- Windows: %APPDATA%/net.ruv.ruview/settings.json
- Linux: ~/.config/net.ruv.ruview/settings.json

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(desktop): RuView Desktop v0.4.0 - Full ADR-054 Implementation

This release completes all 14 Tauri commands specified in ADR-054,
making the desktop app fully production-ready for ESP32 node management.

## New Features

### Discovery Module
- Real mDNS discovery (_ruview._udp.local)
- UDP broadcast probe on port 5006
- Serial port enumeration with ESP32 chip detection

### Flash Module
- Full espflash CLI integration
- Real-time progress streaming via Tauri events
- SHA-256 firmware verification
- Support for ESP32, S2, S3, C3, C6 chips

### OTA Module
- HTTP multipart firmware upload
- HMAC-SHA256 signature with PSK authentication
- Sequential and parallel batch update strategies
- Reboot confirmation polling

### WASM Module
- 67 edge modules across 14 categories
- App-store style module library with ratings/downloads
- Full module lifecycle (upload/start/stop/unload)
- RVF format deployment paths

### Server Module
- Child process spawn with config
- Graceful SIGTERM + SIGKILL fallback
- Memory/CPU monitoring via sysinfo

### Provision Module
- NVS binary serial protocol
- Read/write/erase operations
- Mesh config generation for multi-node setup

## Security
- Input validation (IP, port, path)
- Binary validation (ESP/WASM magic bytes)
- PSK authentication for OTA

## Breaking Changes
None - backwards compatible with v0.3.0

Co-Authored-By: claude-flow <ruv@ruv.net>

---------

Co-authored-by: Reuven <cohen@ruv-mac-mini.local>
2026-03-09 21:58:06 -04:00
rUv bc5408bd80
feat: complete Tauri desktop frontend with all pages and enhanced design (#198)
* docs: add ADR-052 Tauri desktop frontend with DDD bounded contexts

Proposes a Tauri v2 desktop application as the primary UI for RuView,
replacing 6+ CLI tools with a single cross-platform app. Covers hardware
discovery, firmware flashing (espflash), OTA updates, WASM module
management, sensing server control, and live visualization.

Includes DDD domain model with 6 bounded contexts, aggregate definitions,
domain events, and anti-corruption layers for ESP32 firmware APIs.

Closes #177

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: add persistent node registry, OTA safety gate, plugin architecture to ADR-052

Incorporates engineering review feedback:
- Persistent node registry (~/.ruview/nodes.db) — discovery becomes reconciliation
- BatchOtaSession aggregate with TdmSafe rolling update strategy
- Plugin architecture section — control plane extensibility trajectory
- Renumbered sections for new content (9-12 added, impl phases now section 13)

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: add ADR-053 UI design system — Foundation Book + Unity-inspired interface

- Dark professional theme with rUv purple accent (#7c3aed)
- Foundation Book typographic hierarchy (heading-xl through body-sm)
- Unity Editor-inspired panel layout (sidebar + list/detail split + inspector)
- 6 component specs: NodeCard, FlashProgress, MeshGraph, PropertyGrid, StatusBadge, LogViewer
- Color system with status indicators (online/warning/error/info)
- 4px base grid spacing system
- Branding: splash screen, status bar, about dialog

Refs #177

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix: rewrite ADR-053 UI design system with practical terminology

Replace sci-fi themed language (Asimov Foundation references, Prime Radiant,
Encyclopedia Galactica, Terminus, Seldon Crisis) with clear, practical
terminology that engineers and operators can immediately understand.

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix: specify Three.js for mesh topology visualization in ADR-053

Use Three.js for the mesh topology view, consistent with existing
visualization patterns in ui/observatory/js/ and ui/components/.
Includes implementation details: MeshPhongMaterial for node status,
BufferGeometry for dynamic updates, OrbitControls, raycasting.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat: add Tauri v2 desktop crate with React frontend (Phase 1 skeleton)

Rust backend (wifi-densepose-desktop):
- 14 Tauri commands across 6 groups: discovery, flash, OTA, WASM, server, provision
- Domain types: Node, NodeRegistry, FlashSession, OtaSession, BatchOtaSession
- AppState with DiscoveryState and ServerState behind Mutex
- Workspace Cargo.toml updated with new member
- cargo check passes cleanly

React/TypeScript frontend:
- TypeScript types matching Rust domain model
- Hooks: useNodes (discovery polling), useServer (start/stop/status)
- Components: StatusBadge, NodeCard, Sidebar
- Pages: Dashboard, Nodes (table + expandable details), FlashFirmware
  (3-step wizard with progress bar), Settings (server/security/discovery)
- App.tsx with sidebar navigation routing
- Vite 6 + React 18 + @tauri-apps/api v2

Implements ADR-052 Phase 1 skeleton. All commands return stub data.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat: implement ADR-053 design system across all frontend components

Create design-system.css with all ADR-053 tokens:
- CSS custom properties: colors, spacing, fonts, panel dimensions
- Typography scale classes (heading-xl through data-lg)
- Form control and button base styles
- Custom scrollbar, selection highlight, animations

Update all components to use design system tokens:
- Replace hardcoded colors with var(--bg-surface), var(--border), etc.
- Replace generic monospace with var(--font-mono) (JetBrains Mono)
- Replace system font stack with var(--font-sans) (Inter)
- Replace spacing values with var(--space-N) tokens
- StatusBadge: use var(--status-online/warning/error/info)
- Dashboard: add stat cards with data-lg class, use StatusBadge
- FlashFirmware: pulse animation on progress bar during writes
- Settings: default bind_address 127.0.0.1 (matches ADR-050)

Add status bar footer with "Powered by rUv", node count, server status.
Load Inter + JetBrains Mono from Google Fonts in index.html.
Update ADR-053 status from Proposed to Accepted.

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix: add missing @tauri-apps/plugin-dialog and plugin-shell dependencies

Required for firmware file picker in FlashFirmware page and
shell sidecar support. Fixes Vite build failure.

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix: add defensive optional chaining for node.chip access

Rust DiscoveredNode stub doesn't include chip field yet.
Use optional chaining (node.chip?.toUpperCase()) to prevent
TypeError at runtime.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat: add OTA, Edge Modules, Sensing, Mesh View pages with enhanced design system

Implement all 4 remaining pages (OtaUpdate, EdgeModules, Sensing, MeshView)
and enhance the design system with glassmorphism cards, count-up animations,
page transitions, gradient accents, live status bar, and consistent status
dot glows across the UI.

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: add desktop crate README and link from main README

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: add download/run instructions to desktop README

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-08 23:31:18 -04:00