feat(maestro): serve the web UI from the daemon
The browser reached the daemon through maestro-web, a second binary that served the SPA and reverse-proxied /api/* — two TCP connections and a WebSocket frame re-encode on every keystroke and every byte of PTY output. On one machine that hop buys nothing. The daemon now embeds the bundle and serves it off its own listener, behind a default-on `web` feature. `--no-default-features` builds without pnpm or node; MAESTRO_WEB_DIST still takes a prebuilt bundle. The router's fallback answers an unmatched /api/* with 404 rather than the SPA shell, so a client expecting JSON gets a status it can read instead of HTML. Removes maestro-web and the [web] config section. An existing [web] block is ignored, not rejected. The installer deletes a leftover maestro-web.service on upgrade. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2ad2858fd5
commit
4fc90aabfb
@@ -8,7 +8,8 @@ persistence, WebSocket for transport.
|
||||
## Architecture
|
||||
|
||||
```
|
||||
maestro daemon tmux wrapper + session API on 127.0.0.1:7070
|
||||
maestro daemon tmux wrapper + session API + SPA on 127.0.0.1:7070
|
||||
├── GET / browser SPA, embedded (feature `web`)
|
||||
├── GET/POST /api/sessions list / spawn
|
||||
├── DELETE /api/sessions/:id kill
|
||||
├── POST /api/sessions/:id/input type text into a session
|
||||
@@ -21,7 +22,7 @@ maestro daemon tmux wrapper + session API on 127.0.0.1:7070
|
||||
|
||||
maestro list/spawn/attach/kill/send CLI client
|
||||
maestro tui ratatui client
|
||||
maestro-web serves the SPA, reverse-proxies /api/* to the daemon
|
||||
browser loads the SPA from the daemon, same port
|
||||
```
|
||||
|
||||
**No authentication layer, no registry, no peer-to-peer.** Whoever can reach the
|
||||
@@ -43,7 +44,7 @@ Linear project **Maestro** under team **Naps62**.
|
||||
|
||||
Cargo workspace. NAP-245 unified the per-binary crates behind a single
|
||||
`crates/maestro/` umbrella that ships the `maestro` binary with feature gates
|
||||
(`cli` / `daemon` / `tui`, default = all three).
|
||||
(`cli` / `daemon` / `tui` / `web`, default = all four).
|
||||
|
||||
```
|
||||
crates/
|
||||
@@ -51,12 +52,11 @@ crates/
|
||||
├── maestro-protocol/ # shared wire types (NAP-211)
|
||||
├── maestro-config/ # shared on-disk config schema (NAP-233)
|
||||
├── maestro-cli/ # `maestro list/spawn/attach/kill` dispatch (NAP-216)
|
||||
├── maestro-daemon/ # `maestro daemon` — tmux wrapper + HTTP/WS API (NAP-212, NAP-214)
|
||||
├── maestro-web/ # standalone `maestro-web` browser UI (NAP-241, NAP-249)
|
||||
├── maestro-daemon/ # `maestro daemon` — tmux wrapper + HTTP/WS API + SPA (NAP-212, NAP-214)
|
||||
├── maestro-tui/ # `maestro tui` — ratatui session manager (NAP-275 epic)
|
||||
├── maestro-installer/ # `maestro-install` wizard: cargo install + systemd (NAP-225)
|
||||
└── maestro-e2e/ # cross-process integration tests (NAP-217)
|
||||
web/ # browser SPA (NAP-218)
|
||||
web/ # browser SPA (NAP-218), embedded by the daemon's `web` feature
|
||||
flake.nix # Nix flake: packages, checks, dev shell, `nix run .#dev`
|
||||
nix/ # Home Manager module (`services.maestro`)
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user