Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,17 +112,15 @@ name is an existing AgentBBS member (registration is off — your BBS account *i
your IRC identity):

```bash
# zero-setup: built-in client over SSH (members only)
ssh -t irc@bbs.profullstack.com
# native client — SASL account = your BBS member name
/connect irc.bbs.profullstack.com 6697
# browser / agent over WebSocket
wss://bbs.profullstack.com/irc
```

`ssh irc@` is a built-in IRC client (`internal/irc`) that authenticates you to
the network automatically — no client to install. Set `IRC=0` to skip the
server. Full details: [`docs/irc.md`](docs/irc.md).
There is no in-BBS `ssh irc@` route; members connect with any IRC client over
native TLS or WebSocket, using their BBS username for SASL. Set `IRC=0` to skip
the server. Full details: [`docs/irc.md`](docs/irc.md).

### News (Usenet) server

Expand Down
6 changes: 3 additions & 3 deletions cmd/agentbbs/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,7 @@ func (a *app) teaHandler(s ssh.Session) (tea.Model, []tea.ProgramOption) {
}

// sessionExec adapts a func to tea.ExecCommand so the hub can run a
// terminal-takeover feature (pod shell, IRC, news, mail, Tor) via tea.Exec and
// terminal-takeover feature (pod shell, news, mail, Tor) via tea.Exec and
// return to the menu afterwards. The feature reads and writes the ssh.Session
// directly, so the stream hooks are no-ops.
type sessionExec struct{ run func() error }
Expand All @@ -431,9 +431,9 @@ func (e sessionExec) SetStdin(io.Reader) {}
func (e sessionExec) SetStdout(io.Writer) {}
func (e sessionExec) SetStderr(io.Writer) {}

// sessionApps builds the hub's terminal-takeover entries (pod, IRC, news, Tor)
// sessionApps builds the hub's terminal-takeover entries (pod, news, mail, Tor)
// so a member reaches everything from one `ssh <name>@host` login instead of
// separate `ssh pod@`/`irc@`/`news@`/`tor@` connections (which still work as
// separate `ssh pod@`/`news@`/`tor@` connections (which still work as
// aliases, mainly for bots). Each entry is gated by membership/verification/plan
// and shown locked with a reason when unavailable.
func (a *app) sessionApps(s ssh.Session, su store.User, guest bool) []hub.SessionApp {
Expand Down
10 changes: 5 additions & 5 deletions internal/hub/hub.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
// reclaiming it when the plugin emits ExitMsg.
//
// Besides in-hub plugins, the hub also lists "session apps" — features that take
// over the whole terminal (a pod shell, the IRC client, the newsreader, the mail
// reader, Tor) rather than rendering inside the hub. Selecting one suspends the
// over the whole terminal (a pod shell, the newsreader, the mail reader, or
// Tor) rather than rendering inside the hub. Selecting one suspends the
// hub via tea.Exec, runs it, and returns to the menu. This is what lets a member
// reach everything from a single `ssh <name>@host` login instead of separate
// `ssh pod@` / `ssh irc@` / `ssh news@` connections.
// `ssh pod@` / `ssh news@` connections.
package hub

import (
Expand All @@ -27,8 +27,8 @@ var (
bannerStyle = lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("#e11d2a"))
)

// SessionApp is a hub entry that takes over the terminal — a pod shell, the IRC
// client, the newsreader, the mail reader, or Tor — instead of running as an
// SessionApp is a hub entry that takes over the terminal — a pod shell, the
// newsreader, the mail reader, or Tor — instead of running as an
// in-hub model. Selecting it suspends the hub (tea.Exec), runs Cmd, then returns
// to the menu.
type SessionApp struct {
Expand Down