···32083208 echo " nc -lu 7777 | while read line; do echo \"\$(date '+%H:%M:%S') \$line\"; done"
32093209end
3210321032113211-# 🖥️ Machine Info / SSH Helpers
32123212-# Read machine configs from vault/machines.json
32133213-32143214-function ac-host --description "Show current host SSH config from machines.json"
32153215- set -l machines_file "/workspaces/aesthetic-computer/aesthetic-computer-vault/machines.json"
32163216-32173217- if not test -f $machines_file
32183218- echo "❌ machines.json not found at $machines_file"
32193219- return 1
32203220- end
32113211+# 🖥️ Machine Info / SSH Helpers
32123212+# Read machine configs from vault/machines.json
32133213+32143214+function __ac_machines_file --description "Resolve machines.json with local cache fallback"
32153215+ set -l machines_file "/workspaces/aesthetic-computer/aesthetic-computer-vault/machines.json"
32163216+ set -l machines_cache "$HOME/.cache/ac/machines.json"
32173217+32183218+ if test -f $machines_file
32193219+ mkdir -p (dirname $machines_cache)
32203220+ cp $machines_file $machines_cache 2>/dev/null
32213221+ echo $machines_file
32223222+ return 0
32233223+ end
32243224+32253225+ if test -f $machines_cache
32263226+ echo $machines_cache
32273227+ return 0
32283228+ end
32293229+32303230+ return 1
32313231+end
32323232+32333233+function ac-host --description "Show current host SSH config from machines.json"
32343234+ set -l machines_file (__ac_machines_file)
32353235+32363236+ if test $status -ne 0 -o -z "$machines_file"
32373237+ echo "❌ machines.json not found in vault or local cache"
32383238+ return 1
32393239+ end
3221324032223241 set -l machine_key $argv[1]
32233242···33203339 ac-host
33213340end
3322334133233323-function ac-host-nmap --description "Run nmap scan on local network via current host"
33243324- set -l machines_file "/workspaces/aesthetic-computer/aesthetic-computer-vault/machines.json"
33253325- set -l search_term $argv[1]
33423342+function ac-host-nmap --description "Run nmap scan on local network via current host"
33433343+ set -l machines_file (__ac_machines_file)
33443344+ if test $status -ne 0 -o -z "$machines_file"
33453345+ echo "❌ machines.json not found in vault or local cache"
33463346+ return 1
33473347+ end
33483348+ set -l search_term $argv[1]
3326334933273350 set -l hosts_to_try (jq -r '
33283351 .machines
+13-10
.devcontainer/devcontainer.json
···248248 //
249249 // --tmpfs: In-memory /tmp for faster temp file operations
250250 //
251251- // --ulimit nofile: Raise open file limit for Vite's many watchers
252252- //
253253- // NOTE: Explicit -p port mappings removed - forwardPorts handles this
254254- // and avoids "port already in use" errors on restart
255255- "runArgs": [
256256- "-v", "/tmp/.X11-unix:/tmp/.X11-unix",
257257- "-q",
258258- "--cap-add=SYS_PTRACE",
259259- "--security-opt=apparmor=unconfined",
260260- "--security-opt", "label:disable",
251251+ // --ulimit nofile: Raise open file limit for Vite's many watchers
252252+ // --add-host: Force Docker host alias inside the container
253253+ // Needed when Docker Desktop doesn't inject host.docker.internal
254254+ //
255255+ // NOTE: Explicit -p port mappings removed - forwardPorts handles this
256256+ // and avoids "port already in use" errors on restart
257257+ "runArgs": [
258258+ "-v", "/tmp/.X11-unix:/tmp/.X11-unix",
259259+ "-q",
260260+ "--add-host=host.docker.internal:host-gateway",
261261+ "--cap-add=SYS_PTRACE",
262262+ "--security-opt=apparmor=unconfined",
263263+ "--security-opt", "label:disable",
261264 "--name", "aesthetic",
262265 "--hostname", "aesthetic",
263266 "--init",
+7
lith/.env.example
···11+# Production monolith env for lith deploys.
22+# This file is copied to /opt/ac/system/.env on the remote host.
33+44+NODE_ENV=production
55+CONTEXT=production
66+PORT=8888
77+DEPLOY_SECRET=replace-with-production-secret
+24
lith/README.md
···11+# lith
22+33+Secrets and runtime env for the Aesthetic Computer monolith deploy.
44+55+`lith/deploy.fish` expects:
66+- `aesthetic-computer-vault/lith/.env`
77+88+That file is uploaded to:
99+- `/opt/ac/system/.env`
1010+1111+Why `system/.env` on the server:
1212+- [`lith.service`](/workspaces/aesthetic-computer/lith/lith.service) uses `EnvironmentFile=/opt/ac/system/.env`
1313+- The monolith serves the main site and API from the shared `system/` tree
1414+1515+Minimum required keys:
1616+- `NODE_ENV=production`
1717+- `CONTEXT=production`
1818+- `DEPLOY_SECRET=...`
1919+2020+Recommended workflow:
2121+1. Copy `.env.example` to `.env`
2222+2. Fill in the real production values
2323+3. Re-run `fish vault-tool.fish status` to confirm `lith/.env` is tracked
2424+4. Deploy with `fish /workspaces/aesthetic-computer/lith/deploy.fish`