@sym-bot/mesh-channel 0.3.17 → 0.3.19

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sym-mesh-channel",
3
- "version": "0.3.17",
3
+ "version": "0.3.19",
4
4
  "description": "Real-time Claude-to-Claude mesh. Agent-to-agent cognitive signals over Bonjour LAN or WebSocket relay.",
5
5
  "author": {
6
6
  "name": "Hongwei Xu",
package/.mcp.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "command": "npx",
5
5
  "args": [
6
6
  "-y",
7
- "@sym-bot/mesh-channel@0.3.17"
7
+ "@sym-bot/mesh-channel@0.3.19"
8
8
  ],
9
9
  "env": {
10
10
  "SYM_RELAY_URL": "${user_config.relay_url}",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.19
4
+
5
+ ### Added
6
+
7
+ - **Signed CMBs (MMP §8.3) — authenticity + integrity.** Pins `@sym-bot/sym` to `^0.7.10`: every CMB is now Ed25519-signed by its author and verified receiver-side against the sending peer's handshake-announced identity key **and** its content hash. A forged, tampered, or content-swapped CMB is rejected before it can reach Claude's context (audit-metered). Unsigned CMBs are allowed for interop unless `SYM_REQUIRE_SIGNED_CMB` is set. This is the cryptographic layer above the existing Ed25519 transport identity + SVAF relevance gate + prompt-injection filter. Version-bumped (plugin + `.mcp.json` pin) so installed plugins reinstall and pick up signing on restart.
8
+
9
+ ## 0.3.18
10
+
11
+ ### Added
12
+
13
+ - **Directed-delivery indicators in the channel header (MMP §9.2.2).** Pins `@sym-bot/sym` to `^0.7.9`, which adds an ingestion flag to surfaced CMBs. A CMB sent directly to this node now reads as `[peer →you]`; if SVAF delivered it but did not store it (`remixed:false`), the header adds `·not-stored` so the agent knows the directed request is transient, not recallable from mesh memory later. Broadcast CMBs are unaffected.
14
+
3
15
  ## 0.3.17
4
16
 
5
17
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sym-bot/mesh-channel",
3
- "version": "0.3.17",
3
+ "version": "0.3.19",
4
4
  "description": "MCP server — real-time agent-to-agent cognition for Claude Code remote teams via the SYM mesh.",
5
5
  "main": "server.js",
6
6
  "bin": {
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "dependencies": {
24
24
  "@modelcontextprotocol/sdk": "^1.12.1",
25
- "@sym-bot/sym": "^0.7.8",
25
+ "@sym-bot/sym": "^0.7.10",
26
26
  "bonjour-service": "^1.3.0"
27
27
  },
28
28
  "engines": {
package/server.js CHANGED
@@ -317,8 +317,15 @@ function registerNodeHandlers(n) {
317
317
  body = `${body}\n\n---PAYLOAD---\n${serialized}`;
318
318
  payloadSuffix = ` [+payload ${serialized.length}b]`;
319
319
  }
320
+ // Directed (peer-bound) delivery indicator (MMP §9.2.2). A directed CMB was
321
+ // addressed to THIS node — surface it as sent-to-you so the agent knows to
322
+ // respond. `remixed:false` means SVAF delivered it but did not ingest it
323
+ // into memory (transient request, not stored) — flag it so the agent does
324
+ // not assume it is recallable later.
325
+ const dirTag = entry.directed ? ' →you' : '';
326
+ const memTag = entry.directed && entry.remixed === false ? ' ·not-stored' : '';
320
327
  const msgId = storeMessage(source, body);
321
- pushChannel('cmb', `[${source}] ${focus}${moodSuffix}${payloadSuffix} [${msgId}]`);
328
+ pushChannel('cmb', `[${source}${dirTag}] ${focus}${moodSuffix}${memTag}${payloadSuffix} [${msgId}]`);
322
329
  });
323
330
 
324
331
  n.on('message', (from, content) => {