- Copy working src/frontend code into packages/frontend/src
- Add vite.config.js and index.html to packages/frontend
- Add real backend WebSocket server source
- Switch flake from pnpm to npm builds
- Force-add npm lockfiles (gitignored) for Nix source inclusion
- Set correct npmDepsHash for both packages
Implements packages/backend/src/index.ts:
- Creates WebSocket server on port 18790 (configurable via WS_PORT)
- Instantiates OpenClawBridge and connects to OpenClaw GW
- Transforms bridge agentStateChanged events into frontend-compatible state.diff messages (agent.activity / agent.position ops)
- Sends state.full snapshot on new client connection
- Broadcasts heartbeat pings every 15 seconds
- Handles graceful shutdown on SIGINT/SIGTERM
- React + @react-three/fiber + Zustand frontend
- Isometric tile grid with 6 colored zones
- Agent sprites as colored cubes with glow effects
- Smooth movement animation via lerp
- Zone labels (HTML overlay)
- Hover tooltips with agent activity/task
- WebSocket client with reconnect backoff
- Mock mode for standalone operation (no backend needed)
- Orthographic camera setup for true isometric projection
- Vite build configuration (port 18790)