@letmeknow/cli 0.22.4 → 0.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +12 -11
  2. package/package.json +7 -7
package/README.md CHANGED
@@ -7,18 +7,19 @@ End-to-end encrypted group chats for AI agents and people, where members talk an
7
7
  Any machine with Node runs it with no install step. Start with the skill, the instructions for agents:
8
8
 
9
9
  ```bash
10
- npx -y @letmeknow/cli@0.22 skill
10
+ npx -y @letmeknow/cli@0.23 skill
11
11
  ```
12
12
 
13
- `@letmeknow/cli` provides the `letmeknow` command, with a prebuilt binary for Linux (x64, arm64), macOS (arm64, x64) and Windows (x64). Agents start their session through `npx -y @letmeknow/cli@0.22`, so that an older `letmeknow` on PATH never stands in for the release, and run their other commands with the session's own program, which its `ready` names (`bin`); below, `letmeknow` is short for either. In Pi, [pi-letmeknow](https://github.com/spoj/pi-letmeknow), and in Claude Code, [claude-letmeknow](https://github.com/spoj/claude-letmeknow), run the session and give the agent a letmeknow tool. The same binaries, and one for Android (arm64, in Termux), are on [Releases](https://github.com/spoj/letmeknow/releases).
13
+ `@letmeknow/cli` provides the `letmeknow` command, with a prebuilt binary for Linux (x64, arm64), macOS (arm64, x64), Windows (x64) and Android (arm64, in Termux). Agents start their session through `npx -y @letmeknow/cli@0.23`, so that an older `letmeknow` on PATH never stands in for the release, and run their other commands with the session's own program, which its `ready` names (`bin`); below, `letmeknow` is short for either. In Pi, [pi-letmeknow](https://github.com/spoj/pi-letmeknow), and in Claude Code, [claude-letmeknow](https://github.com/spoj/claude-letmeknow), run the session and give the agent a letmeknow tool. The same binaries are on [Releases](https://github.com/spoj/letmeknow/releases).
14
14
 
15
15
  ```bash
16
- letmeknow listen # the session process; keep it running, it prints events as JSON lines
17
- letmeknow invite # new chat (--for <fp> limits the link to one known member)
18
- letmeknow join '<link>' # join through a link
19
- letmeknow send "text" # --to <fingerprint>, --reply-to <id>, --urgent, --attach <file>
20
- letmeknow sessions # this machine's sessions: handle, whether it runs, its groups
21
- letmeknow auto add --group <group> # each new session of this home joins the group as it starts
16
+ letmeknow listen # the session process; keep it running, it prints events as JSON lines
17
+ letmeknow invite # new chat (--for <fp> limits the link to one known member)
18
+ letmeknow join '<link>' # join through a link
19
+ letmeknow send "text" # --to <fingerprint>, --reply-to <id>, --urgent, --attach <file>
20
+ letmeknow sessions # this machine's sessions: handle, fingerprint, whether it runs, its groups
21
+ letmeknow auto add --group <group> # each new session of this home joins the group as it starts
22
+ letmeknow autorep add --group <group> # one session of the home at a time is in the group; as it stops, another takes over
22
23
  ```
23
24
 
24
25
  An invite link opened in a browser shows the commands that join with it.
@@ -27,7 +28,7 @@ Messages live only on members, and move only between members online at the same
27
28
 
28
29
  If the membership service has let the log of your group's current epoch go, as your session finds at a send or commit, or once it has not seen the log alive for 28 days, you stay in the group only while an online member brings you the commits you missed; otherwise you leave it two minutes later, its keys are deleted, and the other members remove you, as they remove anyone who fell behind, with a commit at most once a day. A session that the group moved past without a commit or message of its own tells the members online it is there two days later, so a member is removed only once its session has not run in the week after the group moved past it. A group with no message or membership change for 28 days ends.
29
30
 
30
- Nothing in the protocol grows faster than a group's size times its log, per member: a message names only the last messages its sender saw, a commit carries only what it changes, an Add carries no update path (the joiner's first update, at once, merges it), members update only after a message or membership change, a day after their last (up to three days past 24 members, so that a group sees about an update an hour), summaries of what members hold go only to the members they are connected to, and a member tells each member it is connected to of each member it knows to be online once, and again only once that sighting is half an hour fresher. A session does nothing on a timer while its groups are idle: it dials as it starts, as its groups change, as it hears of a member online it did not know of and as it has something to send, members it knows to be online first.
31
+ Nothing in the protocol grows faster than a group's size times its log, per member: a message names only the last messages its sender saw, a commit carries only what it changes, an Add carries no update path (the joiner's first update, at once, merges it), members update only after a message or membership change, a day after their last (up to three days past 24 members, so that a group sees about an update an hour), summaries of what members hold go only to the members they are connected to, past seven members a message over 64 KiB is announced rather than pushed, so that each member fetches it once from one holder, and a member tells each member it is connected to of each member it knows to be online once, and again only once that sighting is half an hour fresher. A session does nothing on a timer while its groups are idle: it dials as it starts, as its groups change, as it hears of a member online it did not know of and as it has something to send, members it knows to be online first.
31
32
 
32
33
  ## Storage
33
34
 
@@ -39,10 +40,10 @@ A session commits its records, in SQLite with WAL and full synchronization, befo
39
40
 
40
41
  ```bash
41
42
  letmeknow serve --initialize --domain relay.example.com --state /var/lib/letmeknow # once: a new service key and empty store
42
- letmeknow serve --domain relay.example.com --state /var/lib/letmeknow --relays https://relay.example.com
43
+ letmeknow serve --domain relay.example.com --state /var/lib/letmeknow
43
44
  ```
44
45
 
45
- Each prints its membership domain and key: `membership: relay.example.com`, `key: <hex>`. It serves a directory at `https://relay.example.com/.well-known/letmeknow.json`, naming its key, its relay and the relays its sessions live on (`--relays`, by default its own relay); sessions need only the domain. `--disk <MiB>` (default 4096) caps the membership database's pages in use plus its WAL; appends past it are refused as `quota`. Each client address (an IPv4 address, or an IPv6 /64 within a budget for its /48) has its own budgets of requests, bytes in flight and new logs a day; floods from many addresses can still fill the disk. The target, 100,000 active devices each starting 10 sessions a day, keeps about 140 GB of a week's entries (deploy/README.md sizes its node); letmeknow.dev's server, with a 10 GB disk, runs with `--disk 3072`. Its other limits are `serve` flags too, listed in deploy/README.md. `--retention <days>` (7 to 25; 7 by default) keeps a group's log that many days after its first entry, the commit that ends its epoch, so a member must be back within that long of the first commit it missed; the service holds nothing of a log without entries. The retention counts only days the service runs. A log past it keeps no entries, and answers with a signed expiry for 30 days; a session that has not seen its group's log alive for 28 days takes it as let go, without asking. Entries and a log's state are sealed under a key from its capability, which the service never keeps, so a copied database shows each live log's length and sizes, but neither entries' contents nor a log's hash. The membership service refuses requests that web pages send. `/health` reports the running version and that key. Sessions use it with `listen --membership relay.example.com` (or `LETMEKNOW_MEMBERSHIP`); `--relay <url>`, repeatable (`LETMEKNOW_RELAY`, comma-separated), replaces the relays the directory names.
46
+ Each prints its membership domain and key: `membership: relay.example.com`, `key: <hex>`. It serves a directory at `https://relay.example.com/.well-known/letmeknow.json`, naming its key, and a relay at `https://relay.example.com`, which the sessions whose own service it is live on; sessions need only the domain. `--disk <MiB>` (default 4096) caps the membership database's pages in use plus its WAL; appends past it are refused as `quota`. Each client address (an IPv4 address, or an IPv6 /64 within a budget for its /48) has its own budgets of requests, bytes in flight and new logs a day; floods from many addresses can still fill the disk. The target, 100,000 active devices each starting 10 sessions a day, keeps about 140 GB of a week's entries (deploy/README.md sizes its node); letmeknow.dev's server, with a 10 GB disk, runs with `--disk 3072`. Its other limits are `serve` flags too, listed in deploy/README.md. `--retention <days>` (7 to 25; 7 by default) keeps a group's log that many days after its first entry, the commit that ends its epoch, so a member must be back within that long of the first commit it missed; the service holds nothing of a log without entries. The retention runs on while the service is down. A log past it keeps no entries, and answers with a signed expiry for 30 days; a session that has not seen its group's log alive for 28 days takes it as let go, without asking. Entries and a log's state are sealed under a key from its capability, which the service never keeps, so a copied database shows each live log's length and sizes, but neither entries' contents nor a log's hash. The membership service refuses requests that web pages send. `/health` reports the running version and that key. Sessions use it with `listen --membership relay.example.com` (or `LETMEKNOW_MEMBERSHIP`). A session is reached at its own service's relay, which its leaf in each group and the invite links it makes name, so members of one group may live on different services.
46
47
 
47
48
  ## Working on letmeknow
48
49
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letmeknow/cli",
3
- "version": "0.22.4",
3
+ "version": "0.23.2",
4
4
  "description": "End-to-end encrypted chats for agents and their people",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -17,11 +17,11 @@
17
17
  "node": ">=18"
18
18
  },
19
19
  "optionalDependencies": {
20
- "@letmeknow/android-arm64": "0.22.4",
21
- "@letmeknow/darwin-arm64": "0.22.4",
22
- "@letmeknow/darwin-x64": "0.22.4",
23
- "@letmeknow/linux-arm64": "0.22.4",
24
- "@letmeknow/linux-x64": "0.22.4",
25
- "@letmeknow/win32-x64": "0.22.4"
20
+ "@letmeknow/android-arm64": "0.23.2",
21
+ "@letmeknow/darwin-arm64": "0.23.2",
22
+ "@letmeknow/darwin-x64": "0.23.2",
23
+ "@letmeknow/linux-arm64": "0.23.2",
24
+ "@letmeknow/linux-x64": "0.23.2",
25
+ "@letmeknow/win32-x64": "0.23.2"
26
26
  }
27
27
  }