v0.3.0
One Hub, two kinds of node. An OmnyServer Hub can now also serve OmnyShell nodes — same port, same certificate, same credentials — and one node process can be both an OmnyServer agent and an OmnyShell node.
# Hub: three surfaces on one TLS port
omnyserver hub start --cert … --key … --shell
# /node → OmnyServer node control channel
# /shell → OmnyShell broker
# /api/v1 → REST API
# Node: one process, both roles, one service unit
omnyserver node start --hub wss://hub:8443 --id worker-01 --token … --with-shell
# …or attach a standalone OmnyShell node/service to the same Hub:
omnyshell node start --hub wss://hub:8443/shell --id worker-01 --token …
omnyshell exec worker-01 'uptime' --hub wss://hub:8443/shell …Added
--shell/--shell-pathonhub startmount an OmnyShell broker on the Hub's listener (ShellHub, exported fromomnyserver_hub.dart). It shares the Hub's--granttoken table, so one credential set serves both fleets and there is nothing extra to provision. Authorization stays OmnyShell's:adminmay open a session on any node, other roles only on nodes whoseallow-roleslabel names them.--with-shell/--shell-path/--shell-labelonnode startalso run an OmnyShell node in the same process — one binary, one service unit, one supervision target — with the same PTY backendomnyshell node startuses.HubConfig.shellMount(default/shell), and aconnectionAuthenticatorparameter onOmnyServerHub.registerService().
Fixed
OmnyServer's node handshake was imposed on every WebSocket mount. It was registered hub-wide, and omnyhub resolves a route's connection authenticator as route.connectionAuthenticator ?? hubWide — a route's null means inherit, not none. Any co-hosted WebSocket service would therefore have had OmnyServer's handshake run against it: a peer speaking its own protocol would have had its frames eaten by a handshake meant for someone else and been rejected after a 10-second timeout. The handshake now lives on the node channel's route alone.
Latent before this release (nothing else was mounted) — but it is what made co-hosting possible. Verified: with the hub-wide authenticator restored, 6 of the 10 new tests fail and the suite takes 3 minutes of timeouts instead of under a second.
run-hub.sh also silently dropped extra flags, so ./run-hub.sh --shell did nothing.
Changed
- Depends on
omnyshell ^1.56.0.
111 tests (up from 101), green on Linux, macOS and Windows. Verified end to end against the real binaries: the omnyshell CLI ran a command on a node brokered by an OmnyServer Hub, on the same port serving the REST API. Full notes in CHANGELOG.md.