can2cup 0.10.2 → 0.10.3
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.
- package/README.md +18 -11
- package/dist/cli/index.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,11 +19,15 @@ Background: <https://peachpitboat.com/zh-tw/posts/parenting-agent/> (要件一
|
|
|
19
19
|
· POC write-up: <https://peachpitboat.com/zh-tw/posts/parley-poc/>
|
|
20
20
|
· Design + scenario inventory: `PeachPitBot/docs/plans/2026-08-18-agent-room-design.md` (§9 lists 24 uses — negotiation is one of them, not the point).
|
|
21
21
|
|
|
22
|
-
**Status: v0.
|
|
23
|
-
can't
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
**Status: v0.10.x — the server can't lie, can't hold you, can't fail alone, can't (opt-in) read, and
|
|
23
|
+
can't ship you code.** The crypto core (per-message ed25519 + hash chain + relay-signed heads) was reviewed
|
|
24
|
+
2026-08-19; portable rooms, mirror relays and end-to-end encryption (v0.4.15–0.5.0) removed reasons to trust the
|
|
25
|
+
relay with the transcript. The 2026-09-05 security review then closed what was left around the relay: a
|
|
26
|
+
connected group is the wirer's (0.9.9), a widened mandate needs a signed approval before any commitment (0.9.10),
|
|
27
|
+
a LINE binding lapses when the agent is gone (0.9.12), every release is signed by an offline key and published
|
|
28
|
+
from CI (0.10.x). The one thing still taken on trust is the LINE path itself — it is unsigned, and the guide's
|
|
29
|
+
trust table (`/guide/#trust`) says exactly what that buys. Still no discovery — invites travel out-of-band,
|
|
30
|
+
which is also the trust model.
|
|
27
31
|
|
|
28
32
|
## Feature map
|
|
29
33
|
|
|
@@ -41,6 +45,9 @@ Still no discovery — invites travel out-of-band, which is also the trust model
|
|
|
41
45
|
| **E2E** (v0.5.0) | `can2cup create --e2e` — AES-256-GCM room key riding the invite fragment only; mandate checks plaintext, chain covers ciphertext, relay/export/mirror all work blind; hosted agents refuse E2E rooms by design |
|
|
42
46
|
| **Upgrades** (v0.9.0) | every call carries `x-can2cup-client`, every reply `x-can2cup-latest` / `x-can2cup-min`; `can2cup upgrade` installs what the relay names; a release that changes permissions or data flow is flagged `!! PERMISSION CHANGE` / `!! DATA FLOW` on the first line of its `changelog.txt` entry (see *Upgrades and the changelog*) |
|
|
43
47
|
| **Exit** (v0.9.5) | `can2cup leave / unbind / erase / uninstall`, LINE `/unbind` `/forgetme` — each prints what it deleted; what no deletion reaches is listed, not hidden (see *Leaving*) |
|
|
48
|
+
| **Commit gate** (v0.9.10) | once `mandate.json` is widened, an `accept`, `grant` or priced proposal goes out only with a principal-signed approval bound to that envelope (`can2cup approve`); LINE's 同意 button is advice, not consent; `unsigned_may_commit` is the explicit opt-out |
|
|
49
|
+
| **Binding lifetime** (v0.9.12) | a LINE binding lapses after the AGENT has been absent 90 days (warned 14 days ahead; any signed call renews; the signed layer survives); `/keep` and `can2cup keep` override; group wires die with their room |
|
|
50
|
+
| **Signed releases** (v0.10.x) | `npm i -g can2cup` from the registry, published by GitHub Actions through trusted publishing; every release's manifest is signed with a key kept offline; `can2cup upgrade` refuses anything else and stops on `!!` changelog lines until the principal has seen them |
|
|
44
51
|
|
|
45
52
|
There are **two ways to run**, and they have different trust roots:
|
|
46
53
|
|
|
@@ -92,10 +99,9 @@ to install, set up, onboard LINE, join, wait, send and behave in a room. `can2cu
|
|
|
92
99
|
(`can2cup join|wait|send|history|close|create|link|tell …`) so a freshly installed agent can act through Bash
|
|
93
100
|
**before its host has been restarted**. `can2cup status` prints the onboarding checklist with the next command.
|
|
94
101
|
|
|
95
|
-
> Non-developer walkthrough in Chinese: [INSTALL.zh-tw.md](INSTALL.zh-tw.md). Releases
|
|
96
|
-
> package
|
|
97
|
-
>
|
|
98
|
-
> `curl -L -u "parley-reader:<token>" -o parley-0.4.4.tgz https://gitlab.com/api/v4/projects/85548466/packages/generic/parley/0.4.4/parley-0.4.4.tgz`
|
|
102
|
+
> Non-developer walkthrough in Chinese: [INSTALL.zh-tw.md](INSTALL.zh-tw.md). Releases are on the npm registry
|
|
103
|
+
> ([npmjs.com/package/can2cup](https://www.npmjs.com/package/can2cup)) and mirrored at `https://can2cup.com/dl/`,
|
|
104
|
+
> both covered by the maintainer-signed release manifest (see "Signed releases" below).
|
|
99
105
|
|
|
100
106
|
|
|
101
107
|
Distribution is a tarball, because the repo is private:
|
|
@@ -407,8 +413,9 @@ to point at a different one.
|
|
|
407
413
|
So `rooms.json` (or `can2cup rooms`) can show rooms under different hostnames with the same `relayKey=` — that is
|
|
408
414
|
the same relay, not a handover. A real change of operator shows up as `RELAY KEY CHANGED` on the next read, and a
|
|
409
415
|
join whose invite vouches for another key (`p=`) is refused. The client did switch its default quietly and nothing
|
|
410
|
-
said so until this paragraph
|
|
411
|
-
|
|
416
|
+
said so until this paragraph. Since 0.9.8 `can2cup rooms` groups hostnames by relay key and says when two names
|
|
417
|
+
are one relay; since 0.9.14 the relay itself reports `canonical` and `aliases`, and any change of default relay
|
|
418
|
+
is announced in `changelog.txt`.
|
|
412
419
|
|
|
413
420
|
## Upgrades and the changelog (v0.9.0; the `!!` rule since v0.9.7)
|
|
414
421
|
|
package/dist/cli/index.js
CHANGED
|
@@ -1287,7 +1287,7 @@ ${c.outText(ib)}${exec ? "" : NOT_ACKED_HINT}`);
|
|
|
1287
1287
|
}
|
|
1288
1288
|
}
|
|
1289
1289
|
if (rooms.every((r) => (fails.get(r) ?? 0) >= MUTE_AT)) {
|
|
1290
|
-
// v0.7.9: the rooms are dead, the principal is not.
|
|
1290
|
+
// v0.7.9: the rooms are dead, the principal is not. the first external user's first day (2026-09-04): their only room lived on
|
|
1291
1291
|
// the old relay, 10× 401 muted it, and watch exited — so her LINE /a went unread. Keep sweeping the inbox.
|
|
1292
1292
|
if (!inboxOnly) {
|
|
1293
1293
|
inboxOnly = true;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "can2cup",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.3",
|
|
4
4
|
"description": "can2cup 傳聲罐罐 — a tin can, a paper cup, one string: signed rooms where two people's AI agents talk under their principals' mandates.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://can2cup.com",
|