You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Child of #687. Server-side counterpart of the room. Reuses the existing SwiftNIO HTTP server, the parser, the LSP wrapper, and the JSONL runtime recorder — all that already exists in this repo.
Surface
```
aro room ./MyApp # bind 127.0.0.1:PORT, print share URL
aro room ./MyApp --listen 0.0.0.0:8090 # explicit
aro room ./MyApp --token READONLY # read-only invite
```
Watch the directory — reuse `FileMonitor` (`Sources/ARORuntime/FileSystem/FileMonitor.swift`) to detect external edits and broadcast `file-changed`.
Tail the JSONL recorder — the runtime already writes one event per line during a recorded run (`Sources/ARORuntime/Recorder/...`). Stream those frames out as `runtime-event` messages.
Spawn and proxy `aro lsp` — one instance per room (not per client). `lsp` frames bounce through.
Persist last-seen rev per client in `~/.local/share/aro/rooms/{room-id}/state.json` so a reconnect after a disconnect skips the resend.
Things to NOT do in v1
No multi-room. One `aro room` invocation = one project = one logical room. Multi-room is a separate process per project.
No HTTPS / WSS termination — assume reverse proxy in production. Localhost-only by default for safety.
No write throttling. The protocol is naive; a misbehaving client can flood — fine for the trusted-network MVP.
Files
`Sources/AROCLI/Commands/RoomCommand.swift` (new)
`Sources/ARORuntime/Room/RoomHub.swift` (new — owns the WebSocket fan-out, presence list, file cache)
Context
Child of #687. Server-side counterpart of the room. Reuses the existing SwiftNIO HTTP server, the parser, the LSP wrapper, and the JSONL runtime recorder — all that already exists in this repo.
Surface
```
aro room ./MyApp # bind 127.0.0.1:PORT, print share URL
aro room ./MyApp --listen 0.0.0.0:8090 # explicit
aro room ./MyApp --token READONLY # read-only invite
```
Prints:
```
SOLARO room ready:
http://localhost:8090/?token=ab12cd34
ws://localhost:8090/rooms/main?token=ab12cd34
```
What the hub does
aro roomserver subcommand (hub) #689 / Web client: "Share room" command in SOLARO #692). Falls back to a "build the web client first" page when the bundle isn't shipped.Things to NOT do in v1
Files
Acceptance