feat: add tactility controls and notes CRUD

This commit is contained in:
Adolfo Reyna
2026-08-17 13:19:36 -04:00
parent c445093186
commit 1996a123d9
7 changed files with 426 additions and 18 deletions
+39 -13
View File
@@ -4,16 +4,15 @@ On-demand CLI façade for Reyna family MCP services and LAN devices. The goal is
## Phase 2 scope
- **Devices parent command**: All local devices are now under `reyna-cli devices`.
- **Devices parent command**: Non-Tactility local devices remain under `reyna-cli devices`; ESP32 boards use the dedicated `reyna-cli tactility` command group.
- `reyna-cli devices screen ...` (ESP32 screen)
- `reyna-cli devices laptop ...` (personal laptop MCP screen)
- `reyna-cli devices computer ...` (this computer's desktop companion client)
- `reyna-cli devices iphone ...` (iPhone app)
- `reyna-cli devices arm ...` (Robot arm)
- **Robot Arm**: Dynamic tool resolution for `state`, `home`, `wave`, `battery`.
- **Tactility boards**: mDNS-first discovery with reserved-IP fallback, plus direct web API access for sysinfo, apps, app installation/run, and filesystem operations.
- **Immich**: On-demand MCP bridge at `http://127.0.0.1:8626/mcp`.
- **MongoDB**: On-demand MCP bridge at `http://127.0.0.1:8630/mcp`.
- **Top-level aliases**: `reyna-cli screen`, `reyna-cli laptop`, `reyna-cli iphone`, `reyna-cli arm` still work for compatibility.
- **Top-level aliases**: `reyna-cli screen`, `reyna-cli laptop`, and `reyna-cli iphone` still work for compatibility.
## Install / run
@@ -22,6 +21,23 @@ uv sync
uv run reyna-cli doctor
```
## Signed Python launcher (macOS permissions)
The manually built, signed **Reyna CLI.app** owns the macOS privacy identity. Use the `signed` wrapper to launch the current Python CLI through that app:
```bash
# Optional: use a different active checkout or interpreter without rebuilding the app.
cat > ~/.reyna-cli.env <<'EOF'
REYNA_CLI_DIR=/Users/adolforeyna/Projects/platform/reyna-cli
REYNA_CLI_PYTHON=/Users/adolforeyna/Projects/platform/reyna-cli/.venv/bin/python
EOF
uv run reyna-cli signed doctor
uv run reyna-cli signed local-services speech transcribe-file ./sample.wav --json
```
The signed launcher reads `~/.reyna-cli.env`, then `~/.config/reyna-cli/env`; `REYNA_CLI_DIR` and `REYNA_CLI_PYTHON` environment variables override those values. Python-only edits take effect on the next `signed` run—**do not rebuild or re-sign the app for those edits**. Changes to Swift sources, `Info.plist`, or app signing require a new manual signed Xcode build before they can be used by `signed`.
## Device discovery
```bash
@@ -29,6 +45,25 @@ uv run reyna-cli devices list --json
uv run reyna-cli devices ping esp32_screen --json
uv run reyna-cli devices tools esp32_screen --json
uv run reyna-cli devices describe esp32_screen --for-hermes
# Tactility fleet discovery; offline boards remain visible in the JSON report
uv run reyna-cli tactility discover --json
uv run reyna-cli tactility sysinfo kidsos1 --json
uv run reyna-cli tactility apps kidsos1 --json
uv run reyna-cli tactility tools Grace --json
uv run reyna-cli tactility describe Grace --json
uv run reyna-cli tactility call Grace get_screenshot --args '{}' --json
uv run reyna-cli tactility call Grace draw_color_bmp --args '{"bmp_base64":"...","x":0,"y":0}' --json
uv run reyna-cli tactility call Grace play_tone --args '{"frequency":440,"duration_ms":500,"volume":40}' --json
uv run reyna-cli tactility call Grace get_sensors --args '{}' --json
uv run reyna-cli tactility install kidsos1 ./build/my.app --json
uv run reyna-cli tactility run kidsos1 one.tactility.myapp --json
uv run reyna-cli tactility report kidsos1 --json
uv run reyna-cli tactility screen clear kidsos1 --width 320 --height 240 --json
uv run reyna-cli tactility screen text kidsos1 "Grace\\nReady" --json
uv run reyna-cli tactility screen text kidsos1 "Layer intentionally" --no-clear-first --json
uv run reyna-cli tactility fs list kidsos1 --path /sdcard --json
uv run reyna-cli tactility fs upload kidsos1 ./manifest.json /sdcard/manifest.json --json
```
## Generic MCP calls
@@ -37,15 +72,6 @@ uv run reyna-cli devices describe esp32_screen --for-hermes
uv run reyna-cli devices call esp32_screen draw_text --args '{"text":"Hello","x":10,"y":20,"size":2}' --json
```
## Robot Arm
```bash
uv run reyna-cli devices arm state
uv run reyna-cli devices arm home
uv run reyna-cli devices arm wave
uv run reyna-cli devices arm battery --json
```
## ESP32 screen, laptop screen, this computer & iPhone
```bash