claudemesh-cli 1.31.3 → 1.31.5

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.
@@ -104,7 +104,7 @@ __export(exports_urls, {
104
104
  VERSION: () => VERSION,
105
105
  URLS: () => URLS
106
106
  });
107
- var URLS, VERSION = "1.31.3", env;
107
+ var URLS, VERSION = "1.31.5", env;
108
108
  var init_urls = __esm(() => {
109
109
  URLS = {
110
110
  BROKER: process.env.CLAUDEMESH_BROKER_URL ?? "wss://ic.claudemesh.com/ws",
@@ -7896,7 +7896,8 @@ async function listPeersForMesh(slug) {
7896
7896
  function annotateSelf(peer, selfMemberPubkey, selfSessionPubkey) {
7897
7897
  const isSelf = !!(selfMemberPubkey && peer.memberPubkey && peer.memberPubkey === selfMemberPubkey);
7898
7898
  const isThisSession = !!(isSelf && selfSessionPubkey && peer.pubkey === selfSessionPubkey);
7899
- return { ...peer, isSelf, isThisSession };
7899
+ const role = peer.profile?.role?.trim() || undefined;
7900
+ return { ...peer, ...role ? { role } : {}, isSelf, isThisSession };
7900
7901
  }
7901
7902
  async function runPeers(flags) {
7902
7903
  const config = readConfig();
@@ -7930,7 +7931,6 @@ async function runPeers(flags) {
7930
7931
  continue;
7931
7932
  }
7932
7933
  for (const p of peers) {
7933
- const groups = p.groups.length ? " [" + p.groups.map((g) => `@${g.name}${g.role ? `:${g.role}` : ""}`).join(", ") + "]" : "";
7934
7934
  const statusDot = p.status === "working" ? yellow("●") : green("●");
7935
7935
  const name = bold(p.displayName);
7936
7936
  const meta = [];
@@ -7944,9 +7944,20 @@ async function runPeers(flags) {
7944
7944
  const summary = p.summary ? dim(` — ${p.summary}`) : "";
7945
7945
  const pubkeyTag = dim(` · ${p.pubkey.slice(0, 16)}…`);
7946
7946
  const selfTag = p.isThisSession ? dim(" ") + yellow("(this session)") : p.isSelf ? dim(" ") + yellow("(your other session)") : "";
7947
- render.info(`${statusDot} ${name}${selfTag}${groups}${metaStr}${pubkeyTag}${summary}`);
7947
+ const inlineTags = [];
7948
+ const peerRole = p.profile?.role?.trim();
7949
+ if (peerRole)
7950
+ inlineTags.push(`role:${peerRole}`);
7951
+ if (p.groups.length) {
7952
+ inlineTags.push(...p.groups.map((g) => `@${g.name}${g.role ? `:${g.role}` : ""}`));
7953
+ }
7954
+ const tagsStr = inlineTags.length ? " [" + inlineTags.join(", ") + "]" : "";
7955
+ render.info(`${statusDot} ${name}${selfTag}${tagsStr}${metaStr}${pubkeyTag}${summary}`);
7948
7956
  if (p.cwd)
7949
7957
  render.info(dim(` cwd: ${p.cwd}`));
7958
+ if (!peerRole && p.groups.length === 0) {
7959
+ render.info(dim(" role: (none) groups: (none)"));
7960
+ }
7950
7961
  }
7951
7962
  } catch (e) {
7952
7963
  render.err(`${slug}: ${e instanceof Error ? e.message : String(e)}`);
@@ -15642,22 +15653,36 @@ claudemesh peer bans # list banned members
15642
15653
  claudemesh peer verify [peer] # 6×5-digit safety numbers
15643
15654
  \`\`\`
15644
15655
 
15645
- JSON shape (per peer):
15656
+ JSON shape (per peer) — **render \`role\` and \`groups\` whenever you build a table for the user**, they're the highest-signal fields after \`displayName\`:
15646
15657
  \`\`\`json
15647
15658
  {
15648
15659
  "displayName": "Mou",
15649
- "pubkey": "abc123...",
15660
+ "pubkey": "abc123...", // session pubkey (rotates per claudemesh launch)
15661
+ "memberPubkey": "def456...", // stable identity (same across all sibling sessions)
15662
+ "sessionId": "uuid",
15650
15663
  "status": "idle | working | dnd",
15651
15664
  "summary": "string or null",
15665
+ "role": "lead | reviewer | bot | ...", // 1.31.5+: top-level alias of profile.role
15652
15666
  "groups": [{ "name": "reviewers", "role": "lead" }],
15653
- "peerType": "claude | telegram | ...",
15667
+ "profile": {
15668
+ "role": "lead",
15669
+ "title": "string or null",
15670
+ "bio": "string or null",
15671
+ "avatar": "emoji or null",
15672
+ "capabilities": ["..."]
15673
+ },
15674
+ "peerType": "claude | telegram | ai | human | connector | ...",
15654
15675
  "channel": "claude-code | api | ...",
15655
15676
  "model": "claude-opus-4-7 | ...",
15656
15677
  "cwd": "/path/to/working/dir or null",
15678
+ "isSelf": true, // peer is one of the caller's own sessions
15679
+ "isThisSession": false, // peer is the exact session running the cli
15657
15680
  "stats": { "messagesIn": 0, "messagesOut": 0, "toolCalls": 0, "errors": 0, "uptime": 1200 }
15658
15681
  }
15659
15682
  \`\`\`
15660
15683
 
15684
+ **When asked to "list peers" inside a launched session, prefer the human renderer (\`claudemesh peer list\`, no \`--json\`) — it already prints role + groups inline next to the name with an explicit \`(none)\` footer when both are absent. If you do need JSON for parsing, always include \`role\` and \`groups\` columns in any rendered table; the user's primary question is usually "who's in what role" and dropping those fields hides the answer.**
15685
+
15661
15686
  ### \`message\` — send and inspect messages
15662
15687
 
15663
15688
  \`\`\`bash
@@ -20041,4 +20066,4 @@ main().catch((err) => {
20041
20066
  process.exit(EXIT.INTERNAL_ERROR);
20042
20067
  });
20043
20068
 
20044
- //# debugId=8FE49D7349A15CB764756E2164756E21
20069
+ //# debugId=23383F2CEE3C764664756E2164756E21