mirror of
https://github.com/ruvnet/RuView.git
synced 2026-10-18 21:00:22 -05:00
feat(npm): host device + SSH remote access — ESP32, 60/24 GHz mmWave, LiDAR (ADR-373/374)
@ruvnet/ruview 0.7.0 gives CLI, MCP, and SDK access to RuView sensing hardware on the machine it is attached to, and to other machines over SSH. Devices (ADR-373, src/devices/): - ruview_devices_scan: pyserial port list classified by USB VID:PID (Espressif native USB, CP210x, CH34x, FTDI) into ESP32 / mmWave / RPLIDAR roles with the command that confirms each. - ruview_esp32_capture: receive-only UDP listener parsing ADR-018 CSI frames, vitals, and the other 0xC511000x packets per node: rate, sequence loss, RSSI, subcarriers, frequency, device vitals. - ruview_mmwave_read: MR60BHA2 (60 GHz) and LD2410 (24 GHz) parsers ported byte-for-byte from firmware mmwave_sensor.c; baud/frame auto-detect. - ruview_lidar_read: RPLIDAR SCAN over serial (start/stop, DTR best-effort) and the iPhone LiDAR relay as a WebSocket client (token only via RUVIEW_LIDAR_TOKEN; statistics only, never raw depth). - Dependency-free serial via a fixed pyserial pump (argv-only, bounded, hex output immune to secret redaction). Schema-level port pattern validation added to the policy validator. - All device tools require the new `device-access` MCP grant. Remote hosts (ADR-374, src/remote.js): - ~/.config/ruview/hosts.json (0600), CLI-only `hosts add`; strict name/target validation against ssh option and shell injection. - `ssh -o BatchMode=yes -o StrictHostKeyChecking=yes -- <target>` running a version-pinned `ruview call <tool> --read-only`, every token single-quoted; read-only enforced locally and remotely; no mutations, credentialed reads, or host hopping. MCP needs `remote-host` plus the remote tool's grant. Also: device-access skill, doctor `devices`/`remote` groups, SDK `devices.*`/`hosts.*` with types, generic `ruview call` verb, guidance capability, 320 KiB package budget, CI smoke expects 22 tools. Co-Authored-By: claude-flow <ruv@ruv.net> Claude-Session: https://claude.ai/code/session_015H55jmprfz4oHWXSFbX5rf
This commit is contained in:
34 files changed
+1758
-50
No files matched your search
@@ -41,9 +41,10 @@ jobs:
|
||||
build: false
|
||||
publishable: true
|
||||
# ADR-283/325: brain + local hosts + replay assets + guarded Spaces OAuth adapter;
|
||||
# still runtime-dependency-free. ADR-369..372 add the SDK, firmware
|
||||
# flashing, training runner/gate, and doctor: 224 KiB reviewed ceiling.
|
||||
unpacked_budget: 229376
|
||||
# still runtime-dependency-free. ADR-369..374 add the SDK, firmware
|
||||
# flashing, training runner/gate, doctor, device access, and SSH
|
||||
# hosts: 320 KiB reviewed ceiling.
|
||||
unpacked_budget: 327680
|
||||
- dir: harness/homecore
|
||||
build: false
|
||||
publishable: true
|
||||
@@ -140,7 +141,7 @@ jobs:
|
||||
fi
|
||||
node --input-type=module -e "const m = await import('@ruvnet/ruview'); if (!m.TOOLS) process.exit(1);"
|
||||
# ADR-369: the typed SDK resolves and the evidence gate refuses a baseline-free score
|
||||
node --input-type=module -e "const { createRuView } = await import('@ruvnet/ruview/sdk'); const r = createRuView(); if (r.tools().length < 16) process.exit(1); const g = await r.training.gate({ model_score: 0.93 }); if (g.verdict !== 'FAIL') process.exit(1);"
|
||||
node --input-type=module -e "const { createRuView } = await import('@ruvnet/ruview/sdk'); const r = createRuView(); if (r.tools().length < 22) process.exit(1); const g = await r.training.gate({ model_score: 0.93 }); if (g.verdict !== 'FAIL') process.exit(1);"
|
||||
./node_modules/.bin/ruview doctor --json --group runtime,harness,firmware > doctor.json
|
||||
if ./node_modules/.bin/ruview train-gate --model-score 0.93 > /dev/null; then
|
||||
echo 'train-gate passed without a baseline'; exit 1
|
||||
|
||||
@@ -104,9 +104,9 @@ jobs:
|
||||
run: |
|
||||
set -euo pipefail
|
||||
case "${{ inputs.package }}" in
|
||||
# ADR-283/325/369-372: brain + hosts + replay + Spaces OAuth + SDK,
|
||||
# flashing, training, doctor; no runtime deps.
|
||||
harness/ruview) export UNPACKED_BUDGET=229376 ;;
|
||||
# ADR-283/325/369-374: brain + hosts + replay + Spaces OAuth + SDK,
|
||||
# flashing, training, doctor, device access, SSH hosts; no runtime deps.
|
||||
harness/ruview) export UNPACKED_BUDGET=327680 ;;
|
||||
# ADR-285: CLI + MCP + reviewed brain + WASM-kernel adapter.
|
||||
harness/homecore) export UNPACKED_BUDGET=180000 ;;
|
||||
# ADR-264 O2: map-free tarball (was 188 kB with maps).
|
||||
|
||||
Reference in new issue
Block a user