Web frontend for ECA β observe and control chat sessions from a browser via the ECA remote server.
Hosted at web.eca.dev and deployed automatically via GitHub Pages.
ββββββββββββββββ REST + SSE βββββββββββββββββββ stdio JSON-RPC ββββββββββ
β web.eca.dev β βββββββββββββββΊ β ECA process β ββββββββββββββββββΊ β Editor β
β (browser) β HTTP over LAN β (embedded HTTP)β β β
ββββββββββββββββ βββββββββββββββββββ ββββββββββ
- ECA starts with
remote.enabled: trueand prints a URL to stderr. - Open the URL β it loads
web.eca.devwith connection params in the query string. - The frontend connects to the ECA process via REST (commands) and SSE (live updates).
- Both the editor and the web UI can send prompts, approve tool calls, and control chat β first response wins.
The web app is a thin shell around the shared webview UI (eca-webview/ git submodule) β the same chat UI used in VS Code and IntelliJ. A bridge layer (src/bridge/) fakes the editor environment by:
- Inbound: SSE events from the server are dispatched as
window.postMessagecalls, matching the message types the editor extensions use. - Outbound: The webview's
webviewSend()calls are intercepted viawindow.__ecaWebTransportand mapped to REST API calls.
This means the chat UI, Redux store, and all components work identically across editors β only the transport layer differs.
All requests use Authorization: Bearer <token> headers β no cookies. SSE is consumed via fetch() + ReadableStream (not EventSource) to support custom auth headers.
git clone --recurse-submodules https://github.com/editor-code-assistant/eca-web.git
cd eca-web
npm install
npm run dev # Dev server on http://localhost:8080If you already cloned without --recurse-submodules:
git submodule update --initOther commands:
npm run build # Type-check + production build β dist/
npm run preview # Serve the production build locallyRun eca-web without Node.js:
docker run -p 8080:80 ghcr.io/editor-code-assistant/eca-webThen open http://localhost:8080.
For full remote configuration options (host, port, password, etc.), see the Remote Configuration docs.
ECA logs a URL like:
π https://web.eca.dev?host=192.168.1.42:7888&token=a3f8b2...
Click it β the frontend auto-connects, strips the token from the URL, and saves the connection to localStorage.
Go to web.eca.dev, enter the host IP and password, and hit Discover & Connect β it scans ports 7777β7787 and connects to any running ECA sessions automatically.
Apache-2.0