Conversation UI widget sandbox

Agent connection idle

The Project ID becomes the JWT iss; the key signs it in-browser (ES256). The key is kept in this browser's localStorage only — never sent anywhere, never committed. Locally it falls back to /dev-private.pem, which the deployed build does not ship. Project ID is also settable as ?projectId=, and retrieval as ?retrievalMode=vector|pageindex — the switch the answer-quality suite flips to score one strategy against the other. Connect remounts the widget against these values; opening, closing and ending a conversation are the widget's own controls — the FAB, and the panel's minimize and End buttons. Every minted token's claims are logged to the console, since a 403 from the backend doesn't say whether it rejected the claims or the signature.

Appearance (applied on reload — the load-time install model)