@silicaclaw/cli 2026.3.20-1 → 2026.3.20-2

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
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## v1.0 beta - 2026-03-20
4
4
 
5
+ ### 2026.3.20-2
6
+
7
+ - release build:
8
+ - prepared another fresh latest-channel package build without publishing
9
+ - regenerated the npm tarball through the verified release packing workflow
10
+
5
11
  ### 2026.3.20-1
6
12
 
7
13
  - release build:
package/VERSION CHANGED
@@ -1 +1 @@
1
- v2026.3.20-1
1
+ v2026.3.20-2
@@ -83,37 +83,15 @@ export function createOverviewController({
83
83
  const bridge = bridgeRes.status === "fulfilled" ? bridgeRes.value.data || {} : {};
84
84
  const networkCfg = networkCfgRes.status === "fulfilled" ? networkCfgRes.value.data || {} : {};
85
85
  const networkStats = networkStatsRes.status === "fulfilled" ? networkStatsRes.value.data || {} : {};
86
- const peerItems = peers.items || [];
87
- const mergedById = new Map();
88
-
89
- for (const agent of allProfiles) mergedById.set(agent.agent_id, agent);
90
-
91
- for (const peer of peerItems) {
92
- const existing = mergedById.get(peer.peer_id);
93
- if (existing) {
94
- if (peer.status && !existing.online) existing.online = peer.status === "online";
95
- if (peer.last_seen_at && (!existing.updated_at || peer.last_seen_at > existing.updated_at)) {
96
- existing.updated_at = peer.last_seen_at;
97
- }
98
- continue;
99
- }
100
- mergedById.set(peer.peer_id, {
101
- agent_id: peer.peer_id,
102
- display_name: shortId(peer.peer_id),
103
- online: peer.status === "online",
104
- updated_at: peer.last_seen_at || peer.first_seen_at || 0,
105
- });
106
- }
107
-
108
- const all = Array.from(mergedById.values());
86
+ const all = Array.isArray(allProfiles) ? allProfiles.slice() : [];
109
87
  const filtered = getOnlyShowOnline() ? all.filter((agent) => agent.online) : all;
110
88
  setVisibleRemotePublicCount(all.filter((agent) => !agent.is_self && agent.online).length);
111
89
  const totalAgentPages = Math.max(1, Math.ceil(filtered.length / 10));
112
90
  let agentsPage = Math.min(Math.max(1, getAgentsPage()), totalAgentPages);
113
91
  onPageChange(agentsPage);
114
92
  const pagedAgents = filtered.slice((agentsPage - 1) * 10, agentsPage * 10);
115
- const discoveredCount = Math.max(Number(o.discovered_count || 0), Number(peers.total || 0), all.length);
116
- const onlineCount = Math.max(Number(o.online_count || 0), Number(peers.online || 0), all.filter((agent) => agent.online).length);
93
+ const discoveredCount = Math.max(Number(o.discovered_count || 0), all.length);
94
+ const onlineCount = Math.max(Number(o.online_count || 0), all.filter((agent) => agent.online).length);
117
95
  const offlineCount = Math.max(0, discoveredCount - onlineCount);
118
96
 
119
97
  const overviewCardsHtml = [
@@ -1 +1 @@
1
- 2026.3.20-beta.1
1
+ 2026.3.20-beta.2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "silicaclaw-broadcast",
3
- "version": "2026.3.20-beta.1",
3
+ "version": "2026.3.20-beta.2",
4
4
  "display_name": "SilicaClaw Broadcast",
5
5
  "description": "OpenClaw skill for reading SilicaClaw public broadcasts, publishing public broadcasts, and forwarding relevant updates to the owner through OpenClaw's native social channel.",
6
6
  "entrypoints": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@silicaclaw/cli",
3
- "version": "2026.3.20-1",
3
+ "version": "2026.3.20-2",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -10,6 +10,7 @@ const __filename = fileURLToPath(import.meta.url);
10
10
  const __dirname = dirname(__filename);
11
11
  const ROOT_DIR = resolve(__dirname, "..");
12
12
  const INVOCATION_CWD = process.cwd();
13
+ const LOCAL_CONSOLE_BASE_URL = "http://localhost:4310";
13
14
 
14
15
  const COLOR = {
15
16
  reset: "\x1b[0m",
@@ -109,6 +110,10 @@ function compactOutput(text, limit = 18) {
109
110
  return lines.slice(-limit).join("\n");
110
111
  }
111
112
 
113
+ function sleep(ms) {
114
+ return new Promise((resolve) => setTimeout(resolve, ms));
115
+ }
116
+
112
117
  function readVersion() {
113
118
  return readPackageVersion();
114
119
  }
@@ -416,7 +421,7 @@ function restartGatewayIfRunning(options = {}) {
416
421
  const localRunning = Boolean(status?.local_console?.running);
417
422
  const signalingRunning = Boolean(status?.signaling?.running);
418
423
  if (!localRunning && !signalingRunning) {
419
- return;
424
+ return { restarted: false };
420
425
  }
421
426
 
422
427
  const mode = String(status?.mode || "local");
@@ -438,12 +443,51 @@ function restartGatewayIfRunning(options = {}) {
438
443
 
439
444
  if (canUseUpdatedShim) {
440
445
  runInherit(shimPath, gatewayArgs, { cwd: process.cwd() });
441
- return;
446
+ return { restarted: true, usedUpdatedShim: true };
442
447
  }
443
448
 
444
449
  runInherit("node", [resolve(ROOT_DIR, "scripts", "silicaclaw-gateway.mjs"), ...gatewayArgs.slice(1)], {
445
450
  cwd: process.cwd(),
446
451
  });
452
+ return { restarted: true, usedUpdatedShim: false };
453
+ }
454
+
455
+ function readLocalConsoleAppVersion() {
456
+ try {
457
+ const result = runCapture("curl", ["-sS", `${LOCAL_CONSOLE_BASE_URL}/api/overview`], {
458
+ cwd: process.cwd(),
459
+ });
460
+ if ((result.status ?? 1) !== 0) return "";
461
+ const text = String(result.stdout || "").trim();
462
+ if (!text) return "";
463
+ const payload = JSON.parse(text);
464
+ return String(payload?.data?.app_version || "").trim();
465
+ } catch {
466
+ return "";
467
+ }
468
+ }
469
+
470
+ async function waitForLocalConsoleVersion(targetVersion, timeoutMs = 15000) {
471
+ const startedAt = Date.now();
472
+ while (Date.now() - startedAt < timeoutMs) {
473
+ const version = readLocalConsoleAppVersion();
474
+ if (version === targetVersion) return version;
475
+ await sleep(400);
476
+ }
477
+ return readLocalConsoleAppVersion();
478
+ }
479
+
480
+ async function ensureRefreshedConsoleVersion(targetVersion) {
481
+ if (!targetVersion) return "";
482
+ let observed = await waitForLocalConsoleVersion(targetVersion, 12000);
483
+ if (observed === targetVersion) return observed;
484
+
485
+ const shimPath = userShimPath();
486
+ if (!existsSync(shimPath)) return observed;
487
+
488
+ runInherit(shimPath, ["gateway", "restart"], { cwd: process.cwd() });
489
+ observed = await waitForLocalConsoleVersion(targetVersion, 12000);
490
+ return observed;
447
491
  }
448
492
 
449
493
  function tryGlobalUpgrade(version) {
@@ -471,7 +515,7 @@ function tryGlobalUpgrade(version) {
471
515
  return false;
472
516
  }
473
517
 
474
- function update() {
518
+ async function update() {
475
519
  const current = readPackageVersion();
476
520
  try {
477
521
  const registry = preferredRegistryRelease(current);
@@ -502,7 +546,13 @@ function update() {
502
546
  }
503
547
  }
504
548
 
505
- restartGatewayIfRunning({ preferredSpecifier: hasNewTarget ? targetVersion : "" });
549
+ const restartResult = restartGatewayIfRunning({ preferredSpecifier: hasNewTarget ? targetVersion : "" });
550
+ if (hasNewTarget && restartResult?.restarted) {
551
+ const observedVersion = await ensureRefreshedConsoleVersion(targetVersion);
552
+ if (observedVersion && observedVersion !== targetVersion) {
553
+ kv("Verify", `local console still reports ${observedVersion}`);
554
+ }
555
+ }
506
556
  process.exit(0);
507
557
  } catch (error) {
508
558
  headline();
@@ -586,7 +636,7 @@ switch (cmd) {
586
636
  });
587
637
  break;
588
638
  case "update":
589
- update();
639
+ await update();
590
640
  break;
591
641
  case "install":
592
642
  {