aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-cli/src/meshbay_cli/manpage.py
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-10-15 01:35:09 +0200
committerChristophe Besson <cbesson@gmail.com>2026-10-15 01:35:09 +0200
commit47583c5e405f3011a526df73cc9485c46598f214 (patch)
tree90fafd2e7d3978071b38402253cf7eb70717ec7f /packages/meshbay-cli/src/meshbay_cli/manpage.py
parentced66b96f898abccec2526650ab356eb6b82f066 (diff)
downloadmeshbay-47583c5e405f3011a526df73cc9485c46598f214.tar.gz
feat(cli): chat — read a group's last messages, post one
chat GROUP prints the last ten messages, oldest first (-N, as head -N, or -n N for another count, paging back past the node's 200), and -m posts one (- reads it from stdin). The application's construction: every epoch key from chat_keys_req, a post sealed under the current epoch through the device subkey and signed with this machine's key on the node, the sender's name inside the envelope; nothing sent past the node's ciphertext bound. A stored message is read signature first, then key, then content, and one that fails is shown as unreadable, never dropped. Not done here: the Tier 2 roster check on the signing device. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-cli/src/meshbay_cli/manpage.py')
-rw-r--r--packages/meshbay-cli/src/meshbay_cli/manpage.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/packages/meshbay-cli/src/meshbay_cli/manpage.py b/packages/meshbay-cli/src/meshbay_cli/manpage.py
index 3fa9550..4491896 100644
--- a/packages/meshbay-cli/src/meshbay_cli/manpage.py
+++ b/packages/meshbay-cli/src/meshbay_cli/manpage.py
@@ -45,7 +45,8 @@ DESCRIPTION = r"""
.B meshbay-cli
is a member's view of their MeshBay groups from a terminal: sign in, join and
leave groups, list them and their folders, search them all at once, download,
-upload and delete files, and approve this account's other devices.
+upload and delete files, read and post in a group's chat, and approve this
+account's other devices.
It talks to the hub only to sign in and to find a group's nodes; files go
directly between this machine and the node, end-to-end encrypted, never
through the hub.
@@ -227,6 +228,13 @@ as it is when the owner hosts it with the desktop application.
A run that names a file this account may not delete, or a folder, is refused
before anything is asked or sent.
.PP
+.B chat
+shows the last messages of a group, oldest first, each with its time and the name
+its sender sealed in it, and posts one with
+.BR \-m .
+Messages are encrypted and signed end to end, as the application's are; one this
+machine cannot verify or open is shown as unreadable, never left out.
+.PP
.B browser\-access on
makes this machine leave, on each node it opens a group on, a copy of its keys
sealed under your passphrase, so that a browser can open the group;
@@ -301,6 +309,8 @@ meshbay\-cli ls \-\-json \-R / | jq '.[] | .path'
meshbay\-cli search \-t audio holiday
meshbay\-cli search beach 2024 | head \-1 | xargs \-d '\\n' meshbay\-cli get
meshbay\-cli rm 'Family/documents/draft*.odt'
+meshbay\-cli chat \-100 Family
+echo 'On my way' | meshbay\-cli chat Family \-m \-
meshbay\-cli devices approve Family@bob ZX4P\-7QRT
meshbay\-cli leave \-\-yes Club@carol
.EE
@@ -400,7 +410,7 @@ def render() -> str:
out += [".SH REMOTE PATHS", PATHS.strip(),
".SH INTERACTIVE MODE", INTERACTIVE.strip(),
".SH SESSION, DEVICES AND NODE KEYS", SESSION.strip(),
- ".SH GROUPS: JOINING, LEAVING, DELETING, DEVICES", MEMBERSHIP.strip(),
+ ".SH GROUPS: JOINING, LEAVING, DELETING, CHAT, DEVICES", MEMBERSHIP.strip(),
".SH EXIT STATUS"]
for code, text in sorted(EXIT_CODES.items()):
out += [".TP", f".B {code}", text]