@joe-broadhead/opencode-messaging 0.3.0 → 0.4.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.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,32 @@ All notable changes to `@joe-broadhead/opencode-messaging`. Versions follow
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.4.0] - 2026-11-07
10
+
11
+ Published on npm (public). Built against `@joe-broadhead/messaging` **0.4.0** (vendored, release commit `da50b5d`:
12
+ the release `172a6ba` plus a docs commit), and ships with the 0.4.0 daemon: the five platform packages
13
+ `@joe-broadhead/messaging-bin-{darwin-arm64,darwin-x64,linux-arm64-gnu,linux-x64-gnu,win32-x64}` are pinned at exactly
14
+ 0.4.0, each by the registry's integrity in the lockfile and by its executable's sha256 in the launcher, both equal to the
15
+ release's `SHA256SUMS` and provenance. A 0.3.x daemon is refused at the IPC hello (`daemon_mismatch`).
16
+
17
+ - **Sign in with Jelly** in `/messaging`. In a hosted realm, a device that is no one's yet (the managed
18
+ realm right after "Use Messaging by Jelly" too) is offered **Sign in with Jelly** first and **Link this
19
+ device** second. Sign-in shows Jelly ID's link (with a QR code), the user code and this key's
20
+ fingerprint, with the instruction to approve only if the page shows the same; it opens the browser on
21
+ request (never over SSH), waits with `device.login.status`, can be cancelled (closing the waiting screen
22
+ cancels too), and shows the outcome in fixed text. `login_unsupported` (Jelly ID without contract v1.2,
23
+ production today) is one plain sentence pointing to Link this device, never retried. New console text
24
+ for `login_unsupported` and `login_denied`.
25
+ - **Devices** shows how a Jelly-vouched device signed in (`via`: through the browser, or on a Jelly host).
26
+ A device that signed in through the browser removes another device with a fresh sign-in (`device.login`
27
+ with `remove`); one approved by QR says to do it from Jelly.
28
+ - **`/messaging-status`** shows the binding with `via`, and a sign-in still waiting in the browser.
29
+ - **Tasks name their authors** (core): each text of a task in `tasks` and `read` has `author`
30
+ (`titleAuthor`, `statusAuthor`): `ours`, unfenced and cleaned, or `peer`, fenced. The plugin's
31
+ provenance stopgap of 0.3.0 is gone; its test stays as the guard of core's contract. The skill
32
+ explains the field. Goldens follow.
33
+ - Agent tools never sign in.
34
+
9
35
  ## [0.3.0] - 2026-11-06
10
36
 
11
37
  The first published release (npm, public). It ships with messaging 0.3.0 and pins the five
package/README.md CHANGED
@@ -73,10 +73,10 @@ the executable (without it, the plugin uses the Node fallback):
73
73
 
74
74
  ```bash
75
75
  mkdir -p ~/.local/share/opencode-messaging
76
- tar -xzf joe-broadhead-opencode-messaging-0.3.0.tgz -C ~/.local/share/opencode-messaging --strip-components=1
77
- npm pack @joe-broadhead/messaging-bin-darwin-arm64@0.3.0 # your platform's package
76
+ tar -xzf joe-broadhead-opencode-messaging-0.4.0.tgz -C ~/.local/share/opencode-messaging --strip-components=1
77
+ npm pack @joe-broadhead/messaging-bin-darwin-arm64@0.4.0 # your platform's package
78
78
  mkdir -p ~/.local/share/opencode-messaging/node_modules/@joe-broadhead/messaging-bin-darwin-arm64
79
- tar -xzf joe-broadhead-messaging-bin-darwin-arm64-0.3.0.tgz \
79
+ tar -xzf joe-broadhead-messaging-bin-darwin-arm64-0.4.0.tgz \
80
80
  -C ~/.local/share/opencode-messaging/node_modules/@joe-broadhead/messaging-bin-darwin-arm64 --strip-components=1
81
81
  node ~/.local/share/opencode-messaging/dist/messaging.js --help # the messaging CLI of this version
82
82
  ```
@@ -85,7 +85,7 @@ node ~/.local/share/opencode-messaging/dist/messaging.js --help # the messagi
85
85
  { "plugins": [{ "package": "/Users/you/.local/share/opencode-messaging" }] }
86
86
  ```
87
87
 
88
- `npm install ./joe-broadhead-opencode-messaging-0.3.0.tgz` into a folder OpenCode loads works too: it
88
+ `npm install ./joe-broadhead-opencode-messaging-0.4.0.tgz` into a folder OpenCode loads works too: it
89
89
  adds the package and this machine's platform package, nothing else.
90
90
 
91
91
  ## Install from a local path
@@ -139,15 +139,20 @@ or join a team (self-host)**; nothing is written until you pick. Then:
139
139
  thread. A line of yours that was not delivered can be sent again; a failed send offers Try again
140
140
  and is filed once. Channels: create, open, invite or remove people, leave; a channel held under a
141
141
  local name shows both, for example `#eng-2 (eng)`. Search: every word must match.
142
- - **Devices:** your devices with their vouch. In a hosted realm: **Link this device** (a QR code
143
- and a six-digit code, on the new device), **Approve a new device** (paste its link, then type the
144
- code the new device shows; the approving device never shows it), and remove this device.
142
+ - **Devices:** your devices with their vouch, and for a Jelly-vouched one how it signed in (through
143
+ the browser, or on a Jelly host). In a hosted realm, a device that is no one's yet is offered
144
+ **Sign in with Jelly** first ([below](#sign-in-with-jelly)) and **Link this device** second (a QR
145
+ code and a six-digit code, approved from a device that already has Jelly). A bound device offers
146
+ **Approve a new device** (paste its link, then type the code the new device shows; the approving
147
+ device never shows it) and Remove this device. A device that signed in through the browser removes
148
+ another of yours with a fresh sign-in.
145
149
  - **Notices:** new lines, requests and this device's alarms, with the counts; mark them seen.
146
150
  - **Team** (a team realm): prepare to create (shows this machine's id for a relay that lets only
147
151
  known machines create teams), create, join, ask to join and finish joining, discard pending keys,
148
152
  invite, admit, list and remove members. Pending keys serve one purpose at a time.
149
153
  - **This device**, and the command **`/messaging-status`**: who you are, the realm and binding (the
150
- managed realm by name, "Messaging by Jelly"), the relay, the directory, and any alarm with its
154
+ managed realm by name, "Messaging by Jelly"; how this device signed in; a sign-in still waiting in
155
+ the browser), the relay, the directory, and any alarm with its
151
156
  next step.
152
157
 
153
158
  Every error the console shows reads `<code>: <what happened>. Next: <step>.`
@@ -194,9 +199,10 @@ trusted on first use. In `/messaging`, on a fresh home:
194
199
  reached, the pinned values stand on their own.
195
200
  2. It writes the pinned realm into the home's `config.json` and starts the daemon, which makes this
196
201
  computer's keys.
197
- 3. **Devices → Link this device** opens next: a QR code and a six-digit code. Approve it from a device
198
- that already has Jelly and type the code there. Once it is approved, this computer is one of your
199
- devices. A hosted person's first device is always one that Jelly enrols, so this is the way in.
202
+ 3. **Devices** opens next: **Sign in with Jelly** approves this computer in your browser; **Link this
203
+ device** shows a QR code and a six-digit code to approve from a device that already has Jelly.
204
+ Once it is approved, this computer is one of your devices. A hosted person's first device is
205
+ always Jelly-rooted: signed in through Jelly ID, or enrolled by Jelly.
200
206
 
201
207
  It is offered only to a home with no identity, no realm, no team and no pending join, and it never
202
208
  writes over a realm a `config.json` already has. A home in Messaging by Jelly has no `team.*`: it
@@ -204,6 +210,25 @@ cannot create or join a self-hosted team later. Agent tools never join a realm.
204
210
  the block by hand; [configuration.md](docs/configuration.md#messaging-by-jelly) has it, and
205
211
  [security.md](docs/security.md#messaging-by-jelly-the-pinned-realm) says how to check the key.
206
212
 
213
+ ## Sign in with Jelly
214
+
215
+ In a hosted realm, a device signs in through the browser at Jelly ID, without another device
216
+ (messaging 0.4.0's `device.login`). In `/messaging`, Devices, **Sign in with Jelly**:
217
+
218
+ 1. Choose to open Jelly ID in your browser, or to show the link (with a QR code, for another device),
219
+ copied if you ask. Over SSH the console opens nothing and says to open the link elsewhere.
220
+ 2. The console shows Jelly ID's link, a user code such as `WDJBM-XQ7KP`, and this device's key
221
+ fingerprint such as `3fa9-1c07-e2b4`. Sign in at Jelly ID; approve only if the page shows the same
222
+ code and the same key, else deny it.
223
+ 3. The console waits for the outcome and closes by itself: signed in, denied, expired or cancelled.
224
+ From the waiting screen you can show the link again or cancel; closing it cancels too.
225
+
226
+ A device that signed in this way is Jelly-rooted (vouched by Jelly, `via: browser`). It can remove
227
+ another of your devices with a fresh sign-in (Devices, pick the device). A device approved by QR
228
+ cannot. **Until Jelly ID offers browser sign-in** (Jelly's contract v1.2), the daemon answers
229
+ `login_unsupported`, and the console says so in one sentence and points to Link this device; it never
230
+ retries. Agent tools never sign in: `device.login` is on the daemon's admin socket only.
231
+
207
232
  ## Docs
208
233
 
209
234
  - [Configuration](docs/configuration.md): every option and its default.