From 5676216a2f14d540c1636ff31f2060b0d6ae005b Mon Sep 17 00:00:00 2001 From: leetcrypt Date: Thu, 4 Jun 2026 22:56:10 -0700 Subject: [PATCH] feat(ui): stacking role badges in roster + chat; drop default pentagram MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - introduce a Role model + App::host()/roles_of(): the host is the first occupant of the roster (shown the moment they join, no sandbox required), and roles are additive — a host who summoned a sandbox and can drive reads ✝⚡◆. Badges read the same ACL the broker enforces, so they can never advertise a power the room won't honour - render the stacked badge in the clergy panel and inline next to the author on every chat message; split VirtualBox commands into their own help cluster - default styling: the startup handle prompt now prints ✝ (crypt sigil) instead of the inverted pentagram - README: document VirtualBox VMs, snapshot save/load, AI streaming + recall, the badge system, and the expanded theme set - gitignore out-of-tree experiments, the heavy demo-build kit, and logs Co-Authored-By: Claude Opus 4.6 --- .gitignore | 11 + README.MD | 44 +++- hh/film-virtualbox.sh | 297 +++++++++++++++++++++++++ hh/src/app.rs | 496 ++++++++++++++++++++++++++++++++++++++---- hh/src/main.rs | 6 +- hh/src/theme.rs | 43 +++- hh/src/ui.rs | 174 +++++++++++---- 7 files changed, 970 insertions(+), 101 deletions(-) create mode 100755 hh/film-virtualbox.sh diff --git a/.gitignore b/.gitignore index 990493a..e06a1a0 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,17 @@ secured_console_chat.egg-info/ # Editor / OS .idea/ +# Logs / runtime scratch +*.log +err.log + +# Out-of-tree experiments (not part of hack-house) +/experiments/ +/headroom/ + +# Heavy / superseded demo-build kit (real demos live in video-toolkit) +/docs/demo/ + # Project scratch /i-try/ test_rsa.py diff --git a/README.MD b/README.MD index 6285ea8..5d2c6e9 100644 --- a/README.MD +++ b/README.MD @@ -33,11 +33,13 @@ Encrypted chat that runs in your terminal. You host the server, you control the - **Zero-knowledge server** — relays only ciphertext; cannot read messages, files, or terminal output - **RAM only** — nothing persisted on the server; close it and history is gone - **Shared sandbox** — summon a disposable `local` / `docker` / `multipass` box the whole room can watch and drive -- **Real permissions** — the sandbox owner grants/revokes *drive* (keyboard) and *sudo* (VM superuser) per user -- **Local-first AI agent** — `/ai start` summons an in-room AI that runs against *your own* [Ollama](https://ollama.com) (no API key, nothing leaves your machine); model-agnostic, addressed-only, end-to-end encrypted like every other client +- **Snapshot save/load** — freeze a sandbox to a named snapshot and restore it later (`/sbx save` · `/sbx load` · `/sbx snaps`) +- **Local VirtualBox VMs** — `/sbx vms` detects VirtualBox and lists your VMs; `/sbx gui ` opens a desktop VM locally for the room to gather around — per-user consent gate, with automatic resolution of VT-x conflicts (Docker Desktop / multipass) +- **Real permissions** — the host grants/revokes *drive* (keyboard) and *sudo* (VM superuser) per user; **stacking roster badges** show exactly who holds what, both in the clergy panel and inline on every chat message +- **Local-first AI agent** — `/ai start` summons an in-room AI that runs against *your own* [Ollama](https://ollama.com) (no API key, nothing leaves your machine); replies **stream token-by-token** with **in-RAM semantic recall** of the conversation for context; model-agnostic, addressed-only, end-to-end encrypted like every other client - **Encrypted file transfer** — `/send` → `/accept` with SHA-256 verification - **TLS** — self-signed by default, or bring your own cert; `--no-tls` for local/Tailscale use -- **Themes** — switchable "vestments" (`church` · `neon` · `crypt`) +- **Themes** — seven switchable "vestments" (`crypt` default · `church` · `neon` · `blush` · `matrix` · `wraith` · `goldcrypt`), plus a live randomizer ## Layout @@ -157,6 +159,9 @@ Type to chat. Slash commands and keys: | `/ai models` | Models the active agent can serve — or, with no agent, your local Ollama tags | | `/sbx launch [local\|docker\|multipass] [image]` | Summon the shared sandbox | | `/sbx stop` | Tear down the sandbox you host | +| `/sbx save [label]` · `/sbx load