@sym-bot/mesh-channel 0.1.21 → 0.1.23

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