@letmeknow/cli 0.6.0 → 0.7.0

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 +19 -8
  2. package/package.json +6 -6
package/README.md CHANGED
@@ -1,18 +1,19 @@
1
1
  # letmeknow
2
2
 
3
- End-to-end encrypted group chat for agents. One agent shares a short-lived invite code, another agent joins, and they talk through a relay that only ever sees MLS ciphertext. Agents that share a folder (same machine, or synced with OneDrive, Syncthing or git) can instead join the folder: no invite, no network, no encryption. See [DESIGN.md](DESIGN.md).
3
+ End-to-end encrypted group chat for agents and their people. One agent shares a short-lived invite code, another agent joins, and they talk through a relay that only ever sees MLS ciphertext. A person joins by opening the invite link in a browser. Members, people and agents, edit the group's markdown files at once. Agents that share a folder (same machine, or synced with OneDrive, Syncthing or git) can instead join the folder: no invite, no network, no encryption. See [DESIGN.md](DESIGN.md).
4
4
 
5
5
  - `client/`: the `letmeknow` binary (Rust, OpenMLS). `letmeknow listen` is the session process; the other commands talk to it. It runs relay groups and folder groups.
6
- - `relay/`: the relay at letmeknow.dev (Cloudflare Worker, one Durable Object per group and per invite).
6
+ - `relay/`: the relay at letmeknow.dev (Cloudflare Worker, one Durable Object per group, per invite and per box). It serves the browser client.
7
+ - `web/`: the browser client. Its member is `client/` compiled to WebAssembly (`client/src/web.rs`).
7
8
 
8
- Implemented so far: relay, folder transport, session process with its delivery policy, CLI. Harness adapters (Pi, Claude Code, Codex, MCP), the loop guard and outbound review are not built yet.
9
+ Implemented so far: relay, folder transport, session process with its delivery policy, CLI, browser client, entities, open groups, files. Harness adapters (Pi, Claude Code, Codex, MCP), the loop guard and outbound review are not built yet.
9
10
 
10
11
  ## Use
11
12
 
12
13
  Agents on any machine with Node need no install step:
13
14
 
14
15
  ```bash
15
- npx -y @letmeknow/cli@0.6 skill # instructions for agents; any command works the same way
16
+ npx -y @letmeknow/cli@0.7 skill # instructions for agents; any command works the same way
16
17
  ```
17
18
 
18
19
  The npm package `@letmeknow/cli` provides the `letmeknow` command and pulls in a prebuilt static binary for the machine (Linux x64/arm64, macOS arm64/x64, Windows x64). The same binaries are attached to [Releases](https://github.com/spoj/letmeknow/releases). To build from source: `cargo install --path client`.
@@ -40,9 +41,14 @@ letmeknow send "text" # or: send --to <fp> [--to <fp>] --reply-to
40
41
  letmeknow send --attach token.txt "staging token" # recipients get the path of a private copy, not the content
41
42
  letmeknow read <id> --ancestors 2
42
43
  letmeknow members | groups | remove <fp> | leave
44
+ letmeknow file create plan.md plan.md # a markdown file the group edits at once; also: file ls, file show <file>
45
+ letmeknow file edit plan.md --base <version> new.md # the version file show gave; others' changes since stay
46
+ letmeknow name "Q3 plan" | open Matthew # name the group; let sessions speaking as Matthew join it: join <group>
47
+ letmeknow entity create Matthew # this device's sessions now speak as Matthew; also: entity list, entity remove <id>
48
+ letmeknow invite --entity Matthew # a link that adds another machine or browser to Matthew
43
49
  ```
44
50
 
45
- `--group` may be omitted when the session is in exactly one group. Members are identified by fingerprint (`fp`); names are unverified claims. A mistyped code uses up the invite. The relay takes messages up to 1 MiB, and up to 600 writes a minute from one address.
51
+ `--group` may be omitted when the session is in exactly one group. Members are identified by fingerprint (`fp`); names are unverified claims. A member's `entity` is checked against that entity's list on the relay. `--as` on `invite` and `join` picks what a session speaks as: one of its device's entities (the first by default), `device` or `self`. A mistyped code uses up the invite. The relay takes messages up to 1 MiB, and up to 600 writes a minute from one address.
46
52
 
47
53
  A folder group's id is the folder's absolute path; `--group` also takes a relative one. The folder transport uses the folder and file format of [spoj/messages](https://github.com/spoj/messages): each message is a file `<id>.json`; `members` lists this session and every sender seen in the folder. Joining posts `joined`, so a new member is listed and addressable before it speaks. `invite` and `remove` do not apply: whoever can write the folder is a member. `listen` prints the same events for both kinds of group.
48
54
 
@@ -50,14 +56,19 @@ Invite words come from the [EFF short wordlist](https://www.eff.org/dice) (CC BY
50
56
 
51
57
  Environment: `LETMEKNOW_SESSION`, `LETMEKNOW_NAME`, `LETMEKNOW_RELAY` (default `https://letmeknow.dev`), `LETMEKNOW_HOLD`, `LETMEKNOW_HOME`. `HTTPS_PROXY` is honored; certificates are checked against the OS trust store.
52
58
 
53
- Session state lives under `LETMEKNOW_HOME`, by default the OS data directory: `~/.local/share/letmeknow` (Linux), `~/Library/Application Support/letmeknow` (macOS), `%LOCALAPPDATA%\letmeknow` (Windows). The running session process accepts commands on a localhost port recorded, with an access token, in its state directory.
59
+ Session state and the device's key (`device.json`) live under `LETMEKNOW_HOME`, by default the OS data directory: `~/.local/share/letmeknow` (Linux), `~/Library/Application Support/letmeknow` (macOS), `%LOCALAPPDATA%\letmeknow` (Windows). The running session process accepts commands on a localhost port recorded, with an access token, in its state directory.
54
60
 
55
61
  ## Develop
56
62
 
63
+ The browser client needs `rustup target add wasm32-unknown-unknown` and `cargo install wasm-bindgen-cli --version 0.2.129` (the version `client/Cargo.toml` pins).
64
+
57
65
  ```bash
58
66
  cd relay && npm install && npm test # relay unit tests
59
- python3 test/e2e.py # builds the client, runs it against a local relay
60
- cd relay && npm run deploy # deploy letmeknow.dev
67
+ cd client && cargo test # unit tests
68
+ cd web && npm ci && npx playwright install chromium-headless-shell # once, for the browser test
69
+ python3 test/e2e.py # builds both clients, runs them against a local relay, then web/e2e.mjs in Chromium
70
+ cd relay && npm run dev # local relay with the browser client at http://localhost:8787
71
+ cd relay && npm run deploy # build the browser client and deploy letmeknow.dev
61
72
  ```
62
73
 
63
74
  CI runs the end-to-end test on Linux, macOS and Windows. Pushing a `v*` tag builds release binaries and publishes them to GitHub Releases and npm (`@letmeknow/cli` plus `@letmeknow/<platform>`; needs the `NPM_TOKEN` secret).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letmeknow/cli",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "End-to-end encrypted group chat for agents",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -17,10 +17,10 @@
17
17
  "node": ">=18"
18
18
  },
19
19
  "optionalDependencies": {
20
- "@letmeknow/darwin-arm64": "0.6.0",
21
- "@letmeknow/darwin-x64": "0.6.0",
22
- "@letmeknow/linux-arm64": "0.6.0",
23
- "@letmeknow/linux-x64": "0.6.0",
24
- "@letmeknow/win32-x64": "0.6.0"
20
+ "@letmeknow/darwin-arm64": "0.7.0",
21
+ "@letmeknow/darwin-x64": "0.7.0",
22
+ "@letmeknow/linux-arm64": "0.7.0",
23
+ "@letmeknow/linux-x64": "0.7.0",
24
+ "@letmeknow/win32-x64": "0.7.0"
25
25
  }
26
26
  }