@sym-bot/mesh-channel 0.1.20 → 0.1.22

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
@@ -1,207 +1,292 @@
1
- # Changelog
2
-
3
- ## 0.1.20
4
-
5
- ### Added
6
-
7
- - **`sym-mesh-channel init --project`** — new flag to install the MCP
8
- server at project scope (`<cwd>/.mcp.json` + merged
9
- `<cwd>/.claude/settings.local.json`) instead of global
10
- `~/.claude.json`. Enables multi-identity-per-machine workflows where
11
- several Claude Code sessions run in parallel from distinct project
12
- directories and each appears as its own peer on the mesh. Project
13
- `.mcp.json` entries override the global `mcpServers` entry when
14
- Claude Code launches from that directory, so `SYM_NODE_NAME` can
15
- differ per project without siblings stepping on each other.
16
- - Project mode supports the same `--force` semantics as global install:
17
- backs up existing `.mcp.json` and `settings.local.json` next to
18
- themselves (`*.bak-<timestamp>`), merges `settings.local.json` so
19
- unrelated keys (permissions, custom settings) are preserved, atomic
20
- writes via tmp+rename, refuses to overwrite an existing
21
- `claude-sym-mesh` entry without `--force`.
22
- - `--postinstall` always runs global install regardless of `--project`
23
- (npm postinstall runs from npm's staging dir, not the user's
24
- project). Keeps `npm install -g` auto-configure behavior unchanged.
25
- - **5 new tests** covering project-mode install: writes `.mcp.json`
26
- and `settings.local.json`, merge preserves existing keys, refusal
27
- path exits 2, `--force` overwrite creates backup, postinstall
28
- fallback ignores `--project`. Test suite now 22 tests total.
29
-
30
- ### Why
31
-
32
- Default mode (single mesh identity per machine, global install) is
33
- correct for most users and unchanged. `--project` exists for the
34
- small but real set of users who run multiple Claude Code sessions
35
- in parallel from distinct project directories and want each session
36
- to show up as its own peer on the mesh. Previously this workflow
37
- required hand-editing `.mcp.json` and `.claude/settings.local.json`
38
- per project; now it's one command per project.
39
-
40
- ## 0.1.19
41
-
42
- ### Added
43
-
44
- - **Claude Code plugin manifest** for Anthropic Channels allowlist
45
- submission. `.claude-plugin/plugin.json` + `.mcp.json` following the
46
- official single-repo pattern (Telegram/Discord). Submitted to
47
- Anthropic Plugin Directory 10 Apr 2026.
48
- - **`SYM_ALLOWED_PEERS`** optional peer allowlist (defense-in-depth).
49
- Comma-separated node names; only listed peers can push to Claude's
50
- context. Empty = accept all authenticated peers. SVAF still gates on
51
- content relevance regardless.
52
- - **`SECURITY.md`** — 3-layer defense model documentation (transport
53
- auth + SVAF content gate + peer allowlist) for Anthropic review.
54
- - **17 plugin tests** covering manifest validation, security checks
55
- (no permission relay, no code execution, self-echo filtering, peer
56
- allowlist), and lifecycle (shutdown handlers, identity collision).
57
-
58
- ## 0.1.18
59
-
60
- ### Changed
61
-
62
- - **Auto-configure on install.** `npm install -g` now runs `postinstall`
63
- that writes the MCP server config to global `mcpServers` in
64
- `~/.claude.json` automatically. No separate `sym-mesh-channel init`
65
- step needed two commands to mesh: install + launch.
66
- - **Global MCP config** server entry is now written to top-level
67
- `mcpServers` (available in all Claude Code sessions), not
68
- project-scoped.
69
- - **Windows postinstall fixes**`require.resolve` for server.js path
70
- (handles npm staging directory on Windows), EBUSY handling when
71
- Claude Code has `~/.claude.json` locked, graceful skip if Claude
72
- Code not yet installed.
73
- - **README repositioned** lead with capability ("first non-Anthropic
74
- Claude Code Channels implementation"), not use case. Simplified
75
- Quick Start to two commands.
76
- - **0 vulnerabilities** — fresh dependency rebuild resolves all 6
77
- moderate hono/node-server advisories.
78
- - Windows mDNS: built-in on Windows 10+, no Bonjour install needed.
79
-
80
- ## 0.1.7
81
-
82
- ### Added
83
-
84
- - **`npx @sym-bot/mesh-channel init`** interactive installer that
85
- writes `~/.claude.json` for the current project, picks a sensible
86
- default `SYM_NODE_NAME` (`claude-mac` / `claude-win` / `claude-linux`),
87
- resolves the absolute path to `server.js`, and prints the launch
88
- command including the `--dangerously-load-development-channels` flag.
89
- Backs up the existing config to `~/.claude.json.bak-<timestamp>`,
90
- validates JSON round-trip, atomic write via tmp+rename. Refuses to
91
- overwrite an existing entry without `--force`.
92
- - **README rewritten for LAN-first install.** Quick start is two
93
- minutes: install, init, launch. No relay required. Bonjour/mDNS
94
- is the default discovery path. Cross-network setup (relay) is now
95
- the optional advanced section.
96
-
97
- ### Changed
98
-
99
- - `package.json` `bin` now exposes both `sym-mesh-channel` (server
100
- entrypoint) and `sym-mesh-channel-init` (installer). The package
101
- description leads with "LAN-first via Bonjour, no relay required."
102
-
103
- ### Why
104
-
105
- The 0.1.5/0.1.6 install path required users to manually edit
106
- `~/.claude.json`, know about the Channels dev flag, set up a relay,
107
- and obtain a relay token. That gated the demo behind real friction.
108
- LAN-only mode has worked since day one in the underlying SymNode
109
- (`sym/lib/node.js:509-511` only connects to the relay if `SYM_RELAY_URL`
110
- is set; Bonjour discovery starts unconditionally), but no documentation
111
- or installer surfaced it. This release closes that gap: two users on
112
- the same wifi can join the same mesh in two minutes with three commands.
113
-
114
- ## 0.1.6
115
-
116
- ### Fixed
117
-
118
- - `sym_send` no longer double-delivers. Previously called both
119
- `node.send()` (broadcast as `event_type=message`) AND `node.remember()`
120
- (persist as CMB which gets gossiped as `event_type=cmb`), causing
121
- the same payload to arrive twice on receivers and double the
122
- context-window cost. Now broadcasts the message frame only. Hosts
123
- that want CMB persistence should call `sym_observe` separately
124
- with proper CAT7 fields.
125
- - `sym_send` now reports the actual delivered count, not
126
- `peers().length`. Requires `@sym-bot/sym >= 0.3.70` where `send()`
127
- returns the count of peer transports that successfully accepted
128
- the broadcast. The two can disagree when peers are tracked but
129
- have broken transports the delivered count is the truth about
130
- what was actually sent.
131
-
132
- ### Changed
133
-
134
- - Bumped `@sym-bot/sym` dep `^0.3.69` `^0.3.70`. 0.3.70 ships the
135
- identity lockfile that prevents two SymNode processes from
136
- claiming the same nodeId on a host (the cliHostMode-vs-MCP
137
- collision that broke real-time push on Windows during the
138
- 2026-04-09 round-trip test).
139
-
140
- ## 0.1.5
141
-
142
- ### Changed
143
-
144
- - Bumped `@sym-bot/sym` dep `^0.3.68` → `^0.3.69` (0.3.68 deprecated;
145
- same code in 0.3.69 with a cleaner published tarball).
146
- - Added `files` whitelist to `package.json` and `.npmignore` for
147
- `*.bak`, `*.swp`, `.DS_Store` so future publishes can't accidentally
148
- ship local backup files. First NPM publish of this package.
149
-
150
- ## 0.1.4
151
-
152
- ### Changed
153
-
154
- - Bumped `@sym-bot/sym` dep `^0.3.43` `^0.3.68` to pick up
155
- duplicate-identity refusal (close code 4004) and the new
156
- `identity-collision` event.
157
-
158
- ### Added
159
-
160
- - Wired `node.on('identity-collision', ...)` to `process.exit(2)` so
161
- the MCP dies cleanly when the relay reports a duplicate-identity
162
- race. Together with v0.1.3's clean shutdown, this fully resolves
163
- the host-side half of the duplicate-identity bug.
164
-
165
- ## 0.1.3
166
-
167
- ### Added
168
-
169
- - Clean shutdown handlers (SIGTERM/SIGINT/SIGHUP) that call
170
- `node.stop()` before exiting, so the SymNode disconnects from the
171
- relay before the process dies. Without this, restarts left zombie
172
- registrations on the relay until the next heartbeat tick (up to
173
- 30s), creating a duplicate-identity race window for the next MCP
174
- spawn. Idempotent re-entry guard.
175
-
176
- ## 0.1.2
177
-
178
- ### Fixed
179
-
180
- - Suppressed `peer-joined` / `peer-left` events from being pushed to
181
- Claude's context as `<channel>` notifications. Presence is high-
182
- frequency and low-signal — a relay reconnect could fire one event
183
- per peer per cycle, flooding the context window. CMBs and direct
184
- messages still flow through.
185
-
186
- ## 0.1.1
187
-
188
- ### Changed
189
-
190
- - Replaced hardcoded `claude-code` / `claude-code-mac` literals with
191
- a single `NODE_NAME` constant sourced from `process.env.SYM_NODE_NAME`
192
- (default `claude-code-mac`). Enables platform-scoped naming per
193
- MMP §3.1.2 without source edits. Fixed stale display strings in
194
- the MCP instructions, `sym_send` perspective, `sym_status` header,
195
- and the self-echo dedup filter.
196
-
197
- ## 0.1.0
198
-
199
- ### Added
200
-
201
- - Initial release. MCP server that runs a `SymNode` peer node inside
202
- a Claude Code session — own identity, own relay connection, own
203
- SVAF evaluation. Tools: `sym_send`, `sym_observe`, `sym_recall`,
204
- `sym_peers`, `sym_status`. Mesh events arrive as `<channel>`
205
- notifications when launched with
206
- `claude --dangerously-load-development-channels server:claude-sym-mesh`
207
- (allowlisted server name required by Claude Code Channels).
1
+ # Changelog
2
+
3
+ ## 0.1.22
4
+
5
+ ### Added
6
+
7
+ - **Plugin marketplace distribution**: `.claude-plugin/marketplace.json`
8
+ enables direct install via the Claude Code plugin marketplace without
9
+ waiting on the Anthropic Plugin Directory propagation pipeline:
10
+
11
+ ```
12
+ /plugin marketplace add sym-bot/sym-mesh-channel
13
+ /plugin install sym-mesh-channel@sym-mesh-channel
14
+ ```
15
+
16
+ Validates cleanly with `claude plugin validate .` and installs
17
+ end-to-end with no manual steps.
18
+
19
+ - **`LICENSE`** file (Apache-2.0). `package.json` already declared
20
+ Apache-2.0 but no LICENSE text was present in the repo; this
21
+ aligns the distribution with SPDX expectations.
22
+
23
+ - **MMP §5.8 mesh-group support** LAN isolation via Bonjour service
24
+ type so Claude Code sessions can join app-specific meshes (e.g.
25
+ MeloTune mood rooms on `_melotune._tcp`) instead of the global
26
+ `_sym._tcp` mesh. Enables cross-app CMB delivery without cross-app
27
+ noise: nodes in different groups never discover each other at mDNS.
28
+
29
+ Config surface (two equivalent paths):
30
+ - `SYM_GROUP=<name>` → service type `_<name>._tcp`
31
+ - `SYM_SERVICE_TYPE=<st>` → explicit override (`_foo._tcp` form)
32
+
33
+ Default remains `_sym._tcp` / `group=default` backward compatible.
34
+
35
+ - **Two new MCP tools for mesh-group operations**:
36
+ - `sym_group_info` reports current group + service type + peer
37
+ roster scoped to this group.
38
+ - `sym_invite_info` parses app-specific invite URLs
39
+ (`melotune://room/{id}/{name}`, `sym://group/{name}`) into service
40
+ type + group + room name. Read-only inspection; caller opens a
41
+ new session/env to join.
42
+
43
+ `sym_status` output now includes `Group` + service type.
44
+
45
+ ### Fixed
46
+
47
+ - **`plugin.json` validation failure on install.** The three
48
+ `channels[0].userConfig` entries (`relay_url`, `relay_token`,
49
+ `allowed_peers`) were missing the required `type` and `title`
50
+ fields per the Claude Code plugin schema. Install failed with:
51
+
52
+ ```
53
+ channels.0.userConfig.relay_url.type: Invalid option
54
+ channels.0.userConfig.relay_url.title: expected string, received undefined
55
+ ```
56
+
57
+ Added `type: "string"` and a human-readable `title` to all three.
58
+ Likely one of the root causes of the 10 Apr 2026 submission
59
+ showing "Published" on the Anthropic submissions portal but not
60
+ propagating to the public `claude-plugins-official` marketplace.
61
+
62
+ ### Changed
63
+
64
+ - **README**: self-hosted plugin-marketplace install path promoted to
65
+ the primary install recommendation (works today, independent of
66
+ Anthropic directory propagation). npm path kept as alternative.
67
+ Tool table updated 5 8 entries to reflect the current surface.
68
+ Clarified that plugin-directory approval and Channels-allowlist
69
+ inclusion are independent gatesthe MCP tools work without the
70
+ `--dangerously-load-development-channels` flag; the flag is only
71
+ needed for the `<channel>` async-push behaviour.
72
+
73
+ - Pairs with `@sym-bot/sym` 0.3.78 which added the
74
+ `discoveryServiceType` and `group` constructor params consumed by
75
+ the mesh-group tools.
76
+
77
+ ## 0.1.21
78
+
79
+ ### Changed
80
+
81
+ - **README: accurate `sym_status` / `sym_peers` example output.** The
82
+ Quick Start sample output was a stylized one-line compression; the
83
+ real output is multi-line with additional fields (nodeId suffix,
84
+ Relay, Memories, one peer per line). Updated so users see in the
85
+ README exactly what their terminal will show. Doc-only — no code
86
+ changes.
87
+
88
+ ## 0.1.20
89
+
90
+ ### Added
91
+
92
+ - **`sym-mesh-channel init --project`** new flag to install the MCP
93
+ server at project scope (`<cwd>/.mcp.json` + merged
94
+ `<cwd>/.claude/settings.local.json`) instead of global
95
+ `~/.claude.json`. Enables multi-identity-per-machine workflows where
96
+ several Claude Code sessions run in parallel from distinct project
97
+ directories and each appears as its own peer on the mesh. Project
98
+ `.mcp.json` entries override the global `mcpServers` entry when
99
+ Claude Code launches from that directory, so `SYM_NODE_NAME` can
100
+ differ per project without siblings stepping on each other.
101
+ - Project mode supports the same `--force` semantics as global install:
102
+ backs up existing `.mcp.json` and `settings.local.json` next to
103
+ themselves (`*.bak-<timestamp>`), merges `settings.local.json` so
104
+ unrelated keys (permissions, custom settings) are preserved, atomic
105
+ writes via tmp+rename, refuses to overwrite an existing
106
+ `claude-sym-mesh` entry without `--force`.
107
+ - `--postinstall` always runs global install regardless of `--project`
108
+ (npm postinstall runs from npm's staging dir, not the user's
109
+ project). Keeps `npm install -g` auto-configure behavior unchanged.
110
+ - **5 new tests** covering project-mode install: writes `.mcp.json`
111
+ and `settings.local.json`, merge preserves existing keys, refusal
112
+ path exits 2, `--force` overwrite creates backup, postinstall
113
+ fallback ignores `--project`. Test suite now 22 tests total.
114
+
115
+ ### Why
116
+
117
+ Default mode (single mesh identity per machine, global install) is
118
+ correct for most users and unchanged. `--project` exists for the
119
+ small but real set of users who run multiple Claude Code sessions
120
+ in parallel from distinct project directories and want each session
121
+ to show up as its own peer on the mesh. Previously this workflow
122
+ required hand-editing `.mcp.json` and `.claude/settings.local.json`
123
+ per project; now it's one command per project.
124
+
125
+ ## 0.1.19
126
+
127
+ ### Added
128
+
129
+ - **Claude Code plugin manifest** for Anthropic Channels allowlist
130
+ submission. `.claude-plugin/plugin.json` + `.mcp.json` following the
131
+ official single-repo pattern (Telegram/Discord). Submitted to
132
+ Anthropic Plugin Directory 10 Apr 2026.
133
+ - **`SYM_ALLOWED_PEERS`** — optional peer allowlist (defense-in-depth).
134
+ Comma-separated node names; only listed peers can push to Claude's
135
+ context. Empty = accept all authenticated peers. SVAF still gates on
136
+ content relevance regardless.
137
+ - **`SECURITY.md`** 3-layer defense model documentation (transport
138
+ auth + SVAF content gate + peer allowlist) for Anthropic review.
139
+ - **17 plugin tests** covering manifest validation, security checks
140
+ (no permission relay, no code execution, self-echo filtering, peer
141
+ allowlist), and lifecycle (shutdown handlers, identity collision).
142
+
143
+ ## 0.1.18
144
+
145
+ ### Changed
146
+
147
+ - **Auto-configure on install.** `npm install -g` now runs `postinstall`
148
+ that writes the MCP server config to global `mcpServers` in
149
+ `~/.claude.json` automatically. No separate `sym-mesh-channel init`
150
+ step needed — two commands to mesh: install + launch.
151
+ - **Global MCP config** — server entry is now written to top-level
152
+ `mcpServers` (available in all Claude Code sessions), not
153
+ project-scoped.
154
+ - **Windows postinstall fixes** — `require.resolve` for server.js path
155
+ (handles npm staging directory on Windows), EBUSY handling when
156
+ Claude Code has `~/.claude.json` locked, graceful skip if Claude
157
+ Code not yet installed.
158
+ - **README repositioned** — lead with capability ("first non-Anthropic
159
+ Claude Code Channels implementation"), not use case. Simplified
160
+ Quick Start to two commands.
161
+ - **0 vulnerabilities** fresh dependency rebuild resolves all 6
162
+ moderate hono/node-server advisories.
163
+ - Windows mDNS: built-in on Windows 10+, no Bonjour install needed.
164
+
165
+ ## 0.1.7
166
+
167
+ ### Added
168
+
169
+ - **`npx @sym-bot/mesh-channel init`** interactive installer that
170
+ writes `~/.claude.json` for the current project, picks a sensible
171
+ default `SYM_NODE_NAME` (`claude-mac` / `claude-win` / `claude-linux`),
172
+ resolves the absolute path to `server.js`, and prints the launch
173
+ command including the `--dangerously-load-development-channels` flag.
174
+ Backs up the existing config to `~/.claude.json.bak-<timestamp>`,
175
+ validates JSON round-trip, atomic write via tmp+rename. Refuses to
176
+ overwrite an existing entry without `--force`.
177
+ - **README rewritten for LAN-first install.** Quick start is two
178
+ minutes: install, init, launch. No relay required. Bonjour/mDNS
179
+ is the default discovery path. Cross-network setup (relay) is now
180
+ the optional advanced section.
181
+
182
+ ### Changed
183
+
184
+ - `package.json` `bin` now exposes both `sym-mesh-channel` (server
185
+ entrypoint) and `sym-mesh-channel-init` (installer). The package
186
+ description leads with "LAN-first via Bonjour, no relay required."
187
+
188
+ ### Why
189
+
190
+ The 0.1.5/0.1.6 install path required users to manually edit
191
+ `~/.claude.json`, know about the Channels dev flag, set up a relay,
192
+ and obtain a relay token. That gated the demo behind real friction.
193
+ LAN-only mode has worked since day one in the underlying SymNode
194
+ (`sym/lib/node.js:509-511` only connects to the relay if `SYM_RELAY_URL`
195
+ is set; Bonjour discovery starts unconditionally), but no documentation
196
+ or installer surfaced it. This release closes that gap: two users on
197
+ the same wifi can join the same mesh in two minutes with three commands.
198
+
199
+ ## 0.1.6
200
+
201
+ ### Fixed
202
+
203
+ - `sym_send` no longer double-delivers. Previously called both
204
+ `node.send()` (broadcast as `event_type=message`) AND `node.remember()`
205
+ (persist as CMB which gets gossiped as `event_type=cmb`), causing
206
+ the same payload to arrive twice on receivers and double the
207
+ context-window cost. Now broadcasts the message frame only. Hosts
208
+ that want CMB persistence should call `sym_observe` separately
209
+ with proper CAT7 fields.
210
+ - `sym_send` now reports the actual delivered count, not
211
+ `peers().length`. Requires `@sym-bot/sym >= 0.3.70` where `send()`
212
+ returns the count of peer transports that successfully accepted
213
+ the broadcast. The two can disagree when peers are tracked but
214
+ have broken transports — the delivered count is the truth about
215
+ what was actually sent.
216
+
217
+ ### Changed
218
+
219
+ - Bumped `@sym-bot/sym` dep `^0.3.69` → `^0.3.70`. 0.3.70 ships the
220
+ identity lockfile that prevents two SymNode processes from
221
+ claiming the same nodeId on a host (the cliHostMode-vs-MCP
222
+ collision that broke real-time push on Windows during the
223
+ 2026-04-09 round-trip test).
224
+
225
+ ## 0.1.5
226
+
227
+ ### Changed
228
+
229
+ - Bumped `@sym-bot/sym` dep `^0.3.68` → `^0.3.69` (0.3.68 deprecated;
230
+ same code in 0.3.69 with a cleaner published tarball).
231
+ - Added `files` whitelist to `package.json` and `.npmignore` for
232
+ `*.bak`, `*.swp`, `.DS_Store` so future publishes can't accidentally
233
+ ship local backup files. First NPM publish of this package.
234
+
235
+ ## 0.1.4
236
+
237
+ ### Changed
238
+
239
+ - Bumped `@sym-bot/sym` dep `^0.3.43` → `^0.3.68` to pick up
240
+ duplicate-identity refusal (close code 4004) and the new
241
+ `identity-collision` event.
242
+
243
+ ### Added
244
+
245
+ - Wired `node.on('identity-collision', ...)` to `process.exit(2)` so
246
+ the MCP dies cleanly when the relay reports a duplicate-identity
247
+ race. Together with v0.1.3's clean shutdown, this fully resolves
248
+ the host-side half of the duplicate-identity bug.
249
+
250
+ ## 0.1.3
251
+
252
+ ### Added
253
+
254
+ - Clean shutdown handlers (SIGTERM/SIGINT/SIGHUP) that call
255
+ `node.stop()` before exiting, so the SymNode disconnects from the
256
+ relay before the process dies. Without this, restarts left zombie
257
+ registrations on the relay until the next heartbeat tick (up to
258
+ 30s), creating a duplicate-identity race window for the next MCP
259
+ spawn. Idempotent re-entry guard.
260
+
261
+ ## 0.1.2
262
+
263
+ ### Fixed
264
+
265
+ - Suppressed `peer-joined` / `peer-left` events from being pushed to
266
+ Claude's context as `<channel>` notifications. Presence is high-
267
+ frequency and low-signal — a relay reconnect could fire one event
268
+ per peer per cycle, flooding the context window. CMBs and direct
269
+ messages still flow through.
270
+
271
+ ## 0.1.1
272
+
273
+ ### Changed
274
+
275
+ - Replaced hardcoded `claude-code` / `claude-code-mac` literals with
276
+ a single `NODE_NAME` constant sourced from `process.env.SYM_NODE_NAME`
277
+ (default `claude-code-mac`). Enables platform-scoped naming per
278
+ MMP §3.1.2 without source edits. Fixed stale display strings in
279
+ the MCP instructions, `sym_send` perspective, `sym_status` header,
280
+ and the self-echo dedup filter.
281
+
282
+ ## 0.1.0
283
+
284
+ ### Added
285
+
286
+ - Initial release. MCP server that runs a `SymNode` peer node inside
287
+ a Claude Code session — own identity, own relay connection, own
288
+ SVAF evaluation. Tools: `sym_send`, `sym_observe`, `sym_recall`,
289
+ `sym_peers`, `sym_status`. Mesh events arrive as `<channel>`
290
+ notifications when launched with
291
+ `claude --dangerously-load-development-channels server:claude-sym-mesh`
292
+ (allowlisted server name required by Claude Code Channels).