How suesxm/villa-session-bridge works
Villa Bridge connects a mobile web client to one persistent local AI session through a controller that enforces single-writer leases. The main flow is browser request → HTTP server/security checks → controller queue and turn processing → selected bridge adapter → existing local runtime; controller events return through server-sent events to the browser. The README also documents recovery, message lifecycle, idempotency, and persistent queue state. Edges reflect explicit README statements or shown calls; adapter protocol details are documented, while browser event and controller wiring are only partly excerpted.
Main entry points: controller.js Session controller · server.js HTTP server · app.js Web interface · http.js HTTP bridge
Components 11
Mobile web
- Web interface
public/app.js - Browser key storage
public/app.js
Bridge service
- HTTP server
src/server.js - Request security
src/security.js
Session control
- Session controller
src/controller.js - Queue and turns
src/controller.js
Bridge adapters
- HTTP bridge
src/adapters/http.js - Demo bridge
src/adapters/mock.js
Persistent state
- JSON state store
src/store.js
Other components
- Phone user
- Local session runtime
Connections 13
- Phone user → Web interface: uses
README.md - Web interface → HTTP server: sends API requests
public/app.js - HTTP server → Request security: checks requests
src/server.js - HTTP server → Session controller: routes actions
src/server.js - Session controller → Queue and turns: queues turns
src/controller.js - Session controller → JSON state store: persists state
README.md - Session controller → HTTP bridge: dispatches turns
src/server.js - Session controller → Demo bridge: selects demo adapter
src/server.js - HTTP bridge → Local session runtime: calls local protocol
README.md - Demo bridge → Local session runtime: simulates replies
src/adapters/mock.js - Session controller → HTTP server: emits events
src/server.js - HTTP server → Web interface: streams events
src/server.js - Web interface → Browser key storage: stores access key
public/app.js