claudemesh-cli 1.3.0 → 1.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.
@@ -88,7 +88,7 @@ __export(exports_urls, {
88
88
  VERSION: () => VERSION,
89
89
  URLS: () => URLS
90
90
  });
91
- var URLS, VERSION = "1.3.0", env;
91
+ var URLS, VERSION = "1.4.0", env;
92
92
  var init_urls = __esm(() => {
93
93
  URLS = {
94
94
  BROKER: process.env.CLAUDEMESH_BROKER_URL ?? "wss://ic.claudemesh.com/ws",
@@ -6817,26 +6817,27 @@ __export(exports_remember, {
6817
6817
  remember: () => remember
6818
6818
  });
6819
6819
  async function remember(content, opts = {}) {
6820
- const client = allClients()[0];
6821
- if (!client) {
6822
- render.err("Not connected to any mesh.");
6823
- return EXIT.NETWORK_ERROR;
6820
+ if (!content) {
6821
+ render.err("Usage: claudemesh remember <text>");
6822
+ return EXIT.INVALID_ARGS;
6824
6823
  }
6825
6824
  const tags = opts.tags?.split(",").map((t) => t.trim()).filter(Boolean);
6826
- const id = await client.remember(content, tags);
6827
- if (opts.json) {
6828
- console.log(JSON.stringify({ id, content, tags }));
6829
- return EXIT.SUCCESS;
6830
- }
6831
- if (id) {
6832
- render.ok("remembered", dim(id.slice(0, 8)));
6833
- return EXIT.SUCCESS;
6834
- }
6835
- render.err("failed to store memory");
6836
- return EXIT.INTERNAL_ERROR;
6825
+ return await withMesh({ meshSlug: opts.mesh ?? null }, async (client) => {
6826
+ const id = await client.remember(content, tags);
6827
+ if (opts.json) {
6828
+ console.log(JSON.stringify({ id, content, tags }));
6829
+ return EXIT.SUCCESS;
6830
+ }
6831
+ if (id) {
6832
+ render.ok("remembered", dim(id.slice(0, 8)));
6833
+ return EXIT.SUCCESS;
6834
+ }
6835
+ render.err("failed to store memory");
6836
+ return EXIT.INTERNAL_ERROR;
6837
+ });
6837
6838
  }
6838
6839
  var init_remember = __esm(() => {
6839
- init_facade8();
6840
+ init_connect();
6840
6841
  init_render();
6841
6842
  init_styles();
6842
6843
  init_exit_codes();
@@ -6848,35 +6849,36 @@ __export(exports_recall, {
6848
6849
  recall: () => recall
6849
6850
  });
6850
6851
  async function recall(query, opts = {}) {
6851
- const client = allClients()[0];
6852
- if (!client) {
6853
- render.err("Not connected to any mesh.");
6854
- return EXIT.NETWORK_ERROR;
6855
- }
6856
- const memories = await client.recall(query);
6857
- if (opts.json) {
6858
- console.log(JSON.stringify(memories, null, 2));
6859
- return EXIT.SUCCESS;
6860
- }
6861
- if (memories.length === 0) {
6862
- render.info(dim("no memories found."));
6863
- return EXIT.SUCCESS;
6852
+ if (!query) {
6853
+ render.err("Usage: claudemesh recall <query>");
6854
+ return EXIT.INVALID_ARGS;
6864
6855
  }
6865
- render.section(`memories (${memories.length})`);
6866
- for (const m of memories) {
6867
- const tags = m.tags.length ? dim(` [${m.tags.map((t) => clay(t)).join(dim(", "))}]`) : "";
6868
- process.stdout.write(` ${bold(m.id.slice(0, 8))}${tags}
6856
+ return await withMesh({ meshSlug: opts.mesh ?? null }, async (client) => {
6857
+ const memories = await client.recall(query);
6858
+ if (opts.json) {
6859
+ console.log(JSON.stringify(memories, null, 2));
6860
+ return EXIT.SUCCESS;
6861
+ }
6862
+ if (memories.length === 0) {
6863
+ render.info(dim("no memories found."));
6864
+ return EXIT.SUCCESS;
6865
+ }
6866
+ render.section(`memories (${memories.length})`);
6867
+ for (const m of memories) {
6868
+ const tags = m.tags.length ? dim(` [${m.tags.map((t) => clay(t)).join(dim(", "))}]`) : "";
6869
+ process.stdout.write(` ${bold(m.id.slice(0, 8))}${tags}
6869
6870
  `);
6870
- process.stdout.write(` ${m.content}
6871
+ process.stdout.write(` ${m.content}
6871
6872
  `);
6872
- process.stdout.write(` ${dim(m.rememberedBy + " · " + new Date(m.rememberedAt).toLocaleString())}
6873
+ process.stdout.write(` ${dim(m.rememberedBy + " · " + new Date(m.rememberedAt).toLocaleString())}
6873
6874
 
6874
6875
  `);
6875
- }
6876
- return EXIT.SUCCESS;
6876
+ }
6877
+ return EXIT.SUCCESS;
6878
+ });
6877
6879
  }
6878
6880
  var init_recall = __esm(() => {
6879
- init_facade8();
6881
+ init_connect();
6880
6882
  init_render();
6881
6883
  init_styles();
6882
6884
  init_exit_codes();
@@ -7330,92 +7332,6 @@ var init_remind = __esm(() => {
7330
7332
  init_styles();
7331
7333
  });
7332
7334
 
7333
- // src/commands/profile.ts
7334
- var exports_profile = {};
7335
- __export(exports_profile, {
7336
- runProfile: () => runProfile
7337
- });
7338
- async function runProfile(flags) {
7339
- const useColor = !process.env.NO_COLOR && process.env.TERM !== "dumb" && process.stdout.isTTY;
7340
- const dim2 = (s) => useColor ? `\x1B[2m${s}\x1B[22m` : s;
7341
- const green3 = (s) => useColor ? `\x1B[32m${s}\x1B[39m` : s;
7342
- const config = readConfig();
7343
- if (config.meshes.length === 0) {
7344
- console.error("No meshes joined. Run `claudemesh join <url>` first.");
7345
- process.exit(1);
7346
- }
7347
- const mesh = flags.mesh ? config.meshes.find((m) => m.slug === flags.mesh) : config.meshes[0];
7348
- if (!mesh) {
7349
- console.error(`Mesh "${flags.mesh}" not found. Joined: ${config.meshes.map((m) => m.slug).join(", ")}`);
7350
- process.exit(1);
7351
- }
7352
- const brokerUrl = mesh.brokerUrl.replace("wss://", "https://").replace("ws://", "http://").replace(/\/ws\/?$/, "");
7353
- const hasEdits = flags["role-tag"] !== undefined || flags.groups !== undefined || flags["message-mode"] !== undefined || flags.name !== undefined;
7354
- if (hasEdits) {
7355
- const targetMemberId = flags.member ?? mesh.memberId;
7356
- const body = {};
7357
- if (flags.name !== undefined)
7358
- body.displayName = flags.name;
7359
- if (flags["role-tag"] !== undefined)
7360
- body.roleTag = flags["role-tag"];
7361
- if (flags.groups !== undefined) {
7362
- body.groups = flags.groups.split(",").map((s) => {
7363
- const [name, role] = s.trim().split(":");
7364
- return role ? { name, role } : { name };
7365
- });
7366
- }
7367
- if (flags["message-mode"] !== undefined)
7368
- body.messageMode = flags["message-mode"];
7369
- const res = await fetch(`${brokerUrl}/mesh/${mesh.meshId}/member/${targetMemberId}`, {
7370
- method: "PATCH",
7371
- headers: {
7372
- "Content-Type": "application/json",
7373
- "X-Member-Id": mesh.memberId
7374
- },
7375
- body: JSON.stringify(body)
7376
- });
7377
- const result = await res.json();
7378
- if (flags.json) {
7379
- console.log(JSON.stringify(result, null, 2));
7380
- } else if (result.ok) {
7381
- console.log(green3("✓ Profile updated"));
7382
- const member = result.member;
7383
- printProfile(member, dim2);
7384
- } else {
7385
- console.error(`Error: ${result.error}`);
7386
- process.exit(1);
7387
- }
7388
- } else {
7389
- const res = await fetch(`${brokerUrl}/mesh/${mesh.meshId}/members`);
7390
- const result = await res.json();
7391
- if (!result.ok) {
7392
- console.error(`Error: ${result.error}`);
7393
- process.exit(1);
7394
- }
7395
- const me = result.members?.find((m) => m.id === mesh.memberId);
7396
- if (flags.json) {
7397
- console.log(JSON.stringify(me ?? {}, null, 2));
7398
- } else if (me) {
7399
- printProfile(me, dim2);
7400
- } else {
7401
- console.log("Member not found in mesh.");
7402
- }
7403
- }
7404
- }
7405
- function printProfile(member, dim2) {
7406
- const groups = member.groups;
7407
- const groupStr = groups?.length ? groups.map((g) => g.role ? `${g.name} (${g.role})` : g.name).join(", ") : dim2("(none)");
7408
- console.log(` Name: ${member.displayName ?? dim2("(not set)")}`);
7409
- console.log(` Role: ${member.roleTag ?? dim2("(not set)")}`);
7410
- console.log(` Groups: ${groupStr}`);
7411
- console.log(` Messages: ${member.messageMode ?? "push"}`);
7412
- console.log(` Access: ${member.permission ?? "member"}`);
7413
- console.log(` Mesh: ${dim2(String(member.id ?? ""))}`);
7414
- }
7415
- var init_profile = __esm(() => {
7416
- init_facade();
7417
- });
7418
-
7419
7335
  // src/commands/register.ts
7420
7336
  var exports_register = {};
7421
7337
  __export(exports_register, {
@@ -9638,6 +9554,92 @@ var init_grants = __esm(() => {
9638
9554
  GRANT_FILE = join11(homedir10(), ".claudemesh", "grants.json");
9639
9555
  });
9640
9556
 
9557
+ // src/commands/profile.ts
9558
+ var exports_profile = {};
9559
+ __export(exports_profile, {
9560
+ runProfile: () => runProfile
9561
+ });
9562
+ async function runProfile(flags) {
9563
+ const useColor = !process.env.NO_COLOR && process.env.TERM !== "dumb" && process.stdout.isTTY;
9564
+ const dim2 = (s) => useColor ? `\x1B[2m${s}\x1B[22m` : s;
9565
+ const green3 = (s) => useColor ? `\x1B[32m${s}\x1B[39m` : s;
9566
+ const config = readConfig();
9567
+ if (config.meshes.length === 0) {
9568
+ console.error("No meshes joined. Run `claudemesh join <url>` first.");
9569
+ process.exit(1);
9570
+ }
9571
+ const mesh = flags.mesh ? config.meshes.find((m) => m.slug === flags.mesh) : config.meshes[0];
9572
+ if (!mesh) {
9573
+ console.error(`Mesh "${flags.mesh}" not found. Joined: ${config.meshes.map((m) => m.slug).join(", ")}`);
9574
+ process.exit(1);
9575
+ }
9576
+ const brokerUrl = mesh.brokerUrl.replace("wss://", "https://").replace("ws://", "http://").replace(/\/ws\/?$/, "");
9577
+ const hasEdits = flags["role-tag"] !== undefined || flags.groups !== undefined || flags["message-mode"] !== undefined || flags.name !== undefined;
9578
+ if (hasEdits) {
9579
+ const targetMemberId = flags.member ?? mesh.memberId;
9580
+ const body = {};
9581
+ if (flags.name !== undefined)
9582
+ body.displayName = flags.name;
9583
+ if (flags["role-tag"] !== undefined)
9584
+ body.roleTag = flags["role-tag"];
9585
+ if (flags.groups !== undefined) {
9586
+ body.groups = flags.groups.split(",").map((s) => {
9587
+ const [name, role] = s.trim().split(":");
9588
+ return role ? { name, role } : { name };
9589
+ });
9590
+ }
9591
+ if (flags["message-mode"] !== undefined)
9592
+ body.messageMode = flags["message-mode"];
9593
+ const res = await fetch(`${brokerUrl}/mesh/${mesh.meshId}/member/${targetMemberId}`, {
9594
+ method: "PATCH",
9595
+ headers: {
9596
+ "Content-Type": "application/json",
9597
+ "X-Member-Id": mesh.memberId
9598
+ },
9599
+ body: JSON.stringify(body)
9600
+ });
9601
+ const result = await res.json();
9602
+ if (flags.json) {
9603
+ console.log(JSON.stringify(result, null, 2));
9604
+ } else if (result.ok) {
9605
+ console.log(green3("✓ Profile updated"));
9606
+ const member = result.member;
9607
+ printProfile(member, dim2);
9608
+ } else {
9609
+ console.error(`Error: ${result.error}`);
9610
+ process.exit(1);
9611
+ }
9612
+ } else {
9613
+ const res = await fetch(`${brokerUrl}/mesh/${mesh.meshId}/members`);
9614
+ const result = await res.json();
9615
+ if (!result.ok) {
9616
+ console.error(`Error: ${result.error}`);
9617
+ process.exit(1);
9618
+ }
9619
+ const me = result.members?.find((m) => m.id === mesh.memberId);
9620
+ if (flags.json) {
9621
+ console.log(JSON.stringify(me ?? {}, null, 2));
9622
+ } else if (me) {
9623
+ printProfile(me, dim2);
9624
+ } else {
9625
+ console.log("Member not found in mesh.");
9626
+ }
9627
+ }
9628
+ }
9629
+ function printProfile(member, dim2) {
9630
+ const groups = member.groups;
9631
+ const groupStr = groups?.length ? groups.map((g) => g.role ? `${g.name} (${g.role})` : g.name).join(", ") : dim2("(none)");
9632
+ console.log(` Name: ${member.displayName ?? dim2("(not set)")}`);
9633
+ console.log(` Role: ${member.roleTag ?? dim2("(not set)")}`);
9634
+ console.log(` Groups: ${groupStr}`);
9635
+ console.log(` Messages: ${member.messageMode ?? "push"}`);
9636
+ console.log(` Access: ${member.permission ?? "member"}`);
9637
+ console.log(` Mesh: ${dim2(String(member.id ?? ""))}`);
9638
+ }
9639
+ var init_profile = __esm(() => {
9640
+ init_facade();
9641
+ });
9642
+
9641
9643
  // src/commands/platform-actions.ts
9642
9644
  var exports_platform_actions = {};
9643
9645
  __export(exports_platform_actions, {
@@ -14059,37 +14061,45 @@ Mesh
14059
14061
  claudemesh delete [slug] delete a mesh (alias: rm)
14060
14062
  claudemesh rename <slug> <name> rename a mesh
14061
14063
  claudemesh share [email] share mesh (invite link / send email)
14062
- claudemesh disconnect <peer> soft disconnect (peer auto-reconnects)
14063
- claudemesh kick <peer> end session (peer must manually rejoin)
14064
- claudemesh kick --stale 30m kick peers idle > duration
14065
- claudemesh kick --all kick everyone except yourself
14066
- claudemesh ban <peer> kick + permanently revoke (can't rejoin)
14067
- claudemesh unban <peer> lift a ban
14068
- claudemesh bans list banned members
14069
-
14070
- Messaging
14071
- claudemesh peers see who's online
14072
- claudemesh send <to> <msg> send a message
14073
- claudemesh inbox drain pending messages
14074
- claudemesh msg-status <id> check delivery status
14064
+
14065
+ Peer (resource form, recommended)
14066
+ claudemesh peer list see who's online (alias: peers)
14067
+ claudemesh peer kick <p> end session (alias: kick)
14068
+ claudemesh peer disconnect <p> soft disconnect (alias: disconnect)
14069
+ claudemesh peer ban <p> ban + revoke (alias: ban)
14070
+ claudemesh peer unban <p> lift a ban (alias: unban)
14071
+ claudemesh peer bans list banned members (alias: bans)
14072
+ claudemesh peer verify [p] safety numbers (alias: verify)
14073
+
14074
+ Message (resource form)
14075
+ claudemesh message send <to> <m> send a message (alias: send)
14076
+ claudemesh message inbox drain pending (alias: inbox)
14077
+ claudemesh message status <id> delivery status (alias: msg-status)
14078
+
14079
+ Memory (resource form)
14080
+ claudemesh memory remember <txt> store a memory (alias: remember)
14081
+ claudemesh memory recall <q> search memories (alias: recall)
14082
+ claudemesh memory forget <id> remove a memory (alias: forget)
14083
+
14084
+ Profile / presence (resource form)
14085
+ claudemesh profile view or edit profile
14086
+ claudemesh profile summary <txt> broadcast summary (alias: summary)
14087
+ claudemesh profile visible y|n toggle visibility (alias: visible)
14088
+ claudemesh profile status set X set status idle/working/dnd (alias: status set)
14089
+ claudemesh group join @<name> join a group (--role X)
14090
+ claudemesh group leave @<name> leave a group
14091
+
14092
+ Schedule (resource form)
14093
+ claudemesh schedule msg <m> one-shot or recurring (alias: remind)
14094
+ claudemesh schedule list list pending
14095
+ claudemesh schedule cancel <id> remove a scheduled item
14096
+
14097
+ State / mesh introspection
14075
14098
  claudemesh state get|set|list shared state
14076
- claudemesh remember <text> store a memory
14077
- claudemesh recall <query> search memories
14078
- claudemesh forget <id> remove a memory
14079
- claudemesh remind ... schedule a reminder
14080
- claudemesh profile view or edit your profile
14081
14099
  claudemesh info mesh overview
14082
14100
  claudemesh stats per-peer activity counters
14083
- claudemesh clock mesh logical clock state
14084
14101
  claudemesh ping diagnostic round-trip
14085
14102
 
14086
- Identity / presence
14087
- claudemesh status set <state> set peer status (idle | working | dnd)
14088
- claudemesh summary <text> broadcast 1-2 sentence work summary
14089
- claudemesh visible <true|false> toggle peer visibility
14090
- claudemesh group join @<name> join a group (--role X optional)
14091
- claudemesh group leave @<name> leave a group
14092
-
14093
14103
  Tasks
14094
14104
  claudemesh task create <title> create a new task [--assignee --priority --tags]
14095
14105
  claudemesh task list list tasks [--status --assignee]
@@ -14297,12 +14307,12 @@ async function main() {
14297
14307
  }
14298
14308
  case "remember": {
14299
14309
  const { remember: remember2 } = await Promise.resolve().then(() => (init_remember(), exports_remember));
14300
- process.exit(await remember2(positionals.join(" "), { tags: flags.tags, json: !!flags.json }));
14310
+ process.exit(await remember2(positionals.join(" "), { mesh: flags.mesh, tags: flags.tags, json: !!flags.json }));
14301
14311
  break;
14302
14312
  }
14303
14313
  case "recall": {
14304
14314
  const { recall: recall2 } = await Promise.resolve().then(() => (init_recall(), exports_recall));
14305
- process.exit(await recall2(positionals.join(" "), { json: !!flags.json }));
14315
+ process.exit(await recall2(positionals.join(" "), { mesh: flags.mesh, json: !!flags.json }));
14306
14316
  break;
14307
14317
  }
14308
14318
  case "forget": {
@@ -14315,11 +14325,6 @@ async function main() {
14315
14325
  await runRemind2({ mesh: flags.mesh }, positionals);
14316
14326
  break;
14317
14327
  }
14318
- case "profile": {
14319
- const { runProfile: runProfile2 } = await Promise.resolve().then(() => (init_profile(), exports_profile));
14320
- await runProfile2(flags);
14321
- break;
14322
- }
14323
14328
  case "summary": {
14324
14329
  const { runSummary: runSummary2 } = await Promise.resolve().then(() => (init_broker_actions(), exports_broker_actions));
14325
14330
  process.exit(await runSummary2(positionals.join(" "), { mesh: flags.mesh, json: !!flags.json }));
@@ -14470,6 +14475,112 @@ async function main() {
14470
14475
  process.exit(await runGrants2({ mesh: flags.mesh, json: !!flags.json }));
14471
14476
  break;
14472
14477
  }
14478
+ case "peer": {
14479
+ const sub = positionals[0];
14480
+ const f = { mesh: flags.mesh, json: flags.json };
14481
+ const id = positionals[1] ?? "";
14482
+ if (sub === "list") {
14483
+ const { runPeers: runPeers2 } = await Promise.resolve().then(() => (init_peers(), exports_peers));
14484
+ await runPeers2(f);
14485
+ } else if (sub === "kick") {
14486
+ const { runKick: runKick2 } = await Promise.resolve().then(() => (init_kick(), exports_kick));
14487
+ process.exit(await runKick2(id, { mesh: flags.mesh, stale: flags.stale, all: !!flags.all }));
14488
+ } else if (sub === "disconnect") {
14489
+ const { runDisconnect: runDisconnect2 } = await Promise.resolve().then(() => (init_kick(), exports_kick));
14490
+ process.exit(await runDisconnect2(id, { mesh: flags.mesh, stale: flags.stale, all: !!flags.all }));
14491
+ } else if (sub === "ban") {
14492
+ const { runBan: runBan2 } = await Promise.resolve().then(() => (init_ban(), exports_ban));
14493
+ process.exit(await runBan2(id, { mesh: flags.mesh }));
14494
+ } else if (sub === "unban") {
14495
+ const { runUnban: runUnban2 } = await Promise.resolve().then(() => (init_ban(), exports_ban));
14496
+ process.exit(await runUnban2(id, { mesh: flags.mesh }));
14497
+ } else if (sub === "bans") {
14498
+ const { runBans: runBans2 } = await Promise.resolve().then(() => (init_ban(), exports_ban));
14499
+ process.exit(await runBans2({ mesh: flags.mesh, json: !!flags.json }));
14500
+ } else if (sub === "verify") {
14501
+ const { runVerify: runVerify2 } = await Promise.resolve().then(() => (init_verify(), exports_verify));
14502
+ process.exit(await runVerify2(id || undefined, { mesh: flags.mesh, json: !!flags.json }));
14503
+ } else {
14504
+ console.error("Usage: claudemesh peer <list|kick|disconnect|ban|unban|bans|verify>");
14505
+ process.exit(EXIT.INVALID_ARGS);
14506
+ }
14507
+ break;
14508
+ }
14509
+ case "message": {
14510
+ const sub = positionals[0];
14511
+ if (sub === "send") {
14512
+ const { runSend: runSend2 } = await Promise.resolve().then(() => (init_send(), exports_send));
14513
+ await runSend2({ mesh: flags.mesh, priority: flags.priority, json: !!flags.json }, positionals[1] ?? "", positionals.slice(2).join(" "));
14514
+ } else if (sub === "inbox") {
14515
+ const { runInbox: runInbox2 } = await Promise.resolve().then(() => (init_inbox(), exports_inbox));
14516
+ await runInbox2({ json: !!flags.json });
14517
+ } else if (sub === "status") {
14518
+ const { runMsgStatus: runMsgStatus2 } = await Promise.resolve().then(() => (init_broker_actions(), exports_broker_actions));
14519
+ process.exit(await runMsgStatus2(positionals[1], { mesh: flags.mesh, json: !!flags.json }));
14520
+ } else {
14521
+ console.error("Usage: claudemesh message <send|inbox|status>");
14522
+ process.exit(EXIT.INVALID_ARGS);
14523
+ }
14524
+ break;
14525
+ }
14526
+ case "memory": {
14527
+ const sub = positionals[0];
14528
+ const f = { mesh: flags.mesh, json: !!flags.json };
14529
+ if (sub === "remember") {
14530
+ const { remember: remember2 } = await Promise.resolve().then(() => (init_remember(), exports_remember));
14531
+ process.exit(await remember2(positionals.slice(1).join(" "), { ...f, tags: flags.tags }));
14532
+ } else if (sub === "recall") {
14533
+ const { recall: recall2 } = await Promise.resolve().then(() => (init_recall(), exports_recall));
14534
+ process.exit(await recall2(positionals.slice(1).join(" "), f));
14535
+ } else if (sub === "forget") {
14536
+ const { runForget: runForget2 } = await Promise.resolve().then(() => (init_broker_actions(), exports_broker_actions));
14537
+ process.exit(await runForget2(positionals[1], f));
14538
+ } else {
14539
+ console.error("Usage: claudemesh memory <remember|recall|forget>");
14540
+ process.exit(EXIT.INVALID_ARGS);
14541
+ }
14542
+ break;
14543
+ }
14544
+ case "profile": {
14545
+ const sub = positionals[0];
14546
+ if (!sub) {
14547
+ const { runProfile: runProfile2 } = await Promise.resolve().then(() => (init_profile(), exports_profile));
14548
+ await runProfile2(flags);
14549
+ } else if (sub === "summary") {
14550
+ const { runSummary: runSummary2 } = await Promise.resolve().then(() => (init_broker_actions(), exports_broker_actions));
14551
+ process.exit(await runSummary2(positionals.slice(1).join(" "), { mesh: flags.mesh, json: !!flags.json }));
14552
+ } else if (sub === "visible") {
14553
+ const { runVisible: runVisible2 } = await Promise.resolve().then(() => (init_broker_actions(), exports_broker_actions));
14554
+ process.exit(await runVisible2(positionals[1], { mesh: flags.mesh, json: !!flags.json }));
14555
+ } else if (sub === "status") {
14556
+ if (positionals[1] === "set") {
14557
+ const { runStatusSet: runStatusSet2 } = await Promise.resolve().then(() => (init_broker_actions(), exports_broker_actions));
14558
+ process.exit(await runStatusSet2(positionals[2] ?? "", { mesh: flags.mesh, json: !!flags.json }));
14559
+ } else {
14560
+ const { runStatus: runStatus2 } = await Promise.resolve().then(() => (init_status(), exports_status));
14561
+ await runStatus2();
14562
+ }
14563
+ } else {
14564
+ console.error("Usage: claudemesh profile [summary|visible|status]");
14565
+ process.exit(EXIT.INVALID_ARGS);
14566
+ }
14567
+ break;
14568
+ }
14569
+ case "schedule": {
14570
+ const sub = positionals[0];
14571
+ if (sub === "msg" || sub === "remind" || sub === undefined || sub === "list" || sub === "cancel") {
14572
+ const { runRemind: runRemind2 } = await Promise.resolve().then(() => (init_remind(), exports_remind));
14573
+ const remindPositionals = sub === "msg" ? positionals.slice(1) : sub === "remind" ? positionals.slice(1) : positionals;
14574
+ await runRemind2({ mesh: flags.mesh, in: flags.in, at: flags.at, cron: flags.cron, to: flags.to, json: !!flags.json }, remindPositionals);
14575
+ } else if (sub === "webhook" || sub === "tool") {
14576
+ console.error(` schedule ${sub} arrives in a later release — broker primitive not yet shipped`);
14577
+ process.exit(EXIT.INVALID_ARGS);
14578
+ } else {
14579
+ console.error("Usage: claudemesh schedule <msg|list|cancel>");
14580
+ process.exit(EXIT.INVALID_ARGS);
14581
+ }
14582
+ break;
14583
+ }
14473
14584
  case "vector": {
14474
14585
  const sub = positionals[0];
14475
14586
  const f = { mesh: flags.mesh, json: !!flags.json };
@@ -14725,4 +14836,4 @@ main().catch((err) => {
14725
14836
  process.exit(EXIT.INTERNAL_ERROR);
14726
14837
  });
14727
14838
 
14728
- //# debugId=B4AA59318D3B1FB264756E2164756E21
14839
+ //# debugId=4E4265490A3D56F164756E2164756E21