@silicaclaw/cli 2026.3.20-2 → 2026.3.20-4

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.
Files changed (50) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/INSTALL.md +13 -7
  3. package/README.md +60 -12
  4. package/VERSION +1 -1
  5. package/apps/local-console/dist/apps/local-console/src/server.d.ts +39 -0
  6. package/apps/local-console/dist/apps/local-console/src/server.js +220 -0
  7. package/apps/local-console/dist/packages/network/src/relayPreview.d.ts +1 -0
  8. package/apps/local-console/dist/packages/network/src/relayPreview.js +17 -0
  9. package/apps/local-console/public/app/app.js +274 -3
  10. package/apps/local-console/public/app/events.js +21 -0
  11. package/apps/local-console/public/app/network.js +111 -30
  12. package/apps/local-console/public/app/overview.js +49 -21
  13. package/apps/local-console/public/app/social.js +315 -93
  14. package/apps/local-console/public/app/styles.css +86 -0
  15. package/apps/local-console/public/app/template.js +56 -35
  16. package/apps/local-console/public/app/translations.js +394 -312
  17. package/apps/local-console/src/server.ts +251 -1
  18. package/apps/public-explorer/public/app/template.js +2 -2
  19. package/apps/public-explorer/public/app/translations.js +36 -36
  20. package/docs/NEW_USER_OPERATIONS.md +5 -5
  21. package/docs/OPENCLAW_BRIDGE.md +7 -7
  22. package/docs/OPENCLAW_BRIDGE_ZH.md +6 -6
  23. package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.d.ts +1 -0
  24. package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.js +17 -0
  25. package/node_modules/@silicaclaw/network/src/relayPreview.ts +17 -0
  26. package/openclaw-skills/silicaclaw-bridge-setup/SKILL.md +18 -0
  27. package/openclaw-skills/silicaclaw-bridge-setup/VERSION +1 -1
  28. package/openclaw-skills/silicaclaw-bridge-setup/manifest.json +2 -2
  29. package/openclaw-skills/silicaclaw-broadcast/SKILL.md +18 -0
  30. package/openclaw-skills/silicaclaw-broadcast/VERSION +1 -1
  31. package/openclaw-skills/silicaclaw-broadcast/manifest.json +2 -2
  32. package/openclaw-skills/silicaclaw-network-config/SKILL.md +158 -0
  33. package/openclaw-skills/silicaclaw-network-config/VERSION +1 -0
  34. package/openclaw-skills/silicaclaw-network-config/agents/openai.yaml +6 -0
  35. package/openclaw-skills/silicaclaw-network-config/manifest.json +27 -0
  36. package/openclaw-skills/silicaclaw-network-config/references/network-modes.md +22 -0
  37. package/openclaw-skills/silicaclaw-network-config/references/owner-dialogue-cheatsheet-zh.md +47 -0
  38. package/openclaw-skills/silicaclaw-network-config/references/public-discovery.md +22 -0
  39. package/openclaw-skills/silicaclaw-owner-push/SKILL.md +18 -0
  40. package/openclaw-skills/silicaclaw-owner-push/VERSION +1 -1
  41. package/openclaw-skills/silicaclaw-owner-push/manifest.json +2 -2
  42. package/openclaw-skills/silicaclaw-owner-push/references/runtime-setup.md +3 -0
  43. package/openclaw-skills/silicaclaw-owner-push/scripts/owner-push-forwarder.mjs +67 -8
  44. package/package.json +1 -1
  45. package/packages/network/dist/packages/network/src/relayPreview.d.ts +1 -0
  46. package/packages/network/dist/packages/network/src/relayPreview.js +17 -0
  47. package/packages/network/src/relayPreview.ts +17 -0
  48. package/scripts/silicaclaw-cli.mjs +4 -1
  49. package/scripts/silicaclaw-gateway.mjs +108 -0
  50. package/scripts/validate-openclaw-skill.mjs +19 -0
@@ -7,6 +7,8 @@ export function createOverviewController({
7
7
  t,
8
8
  writeUiCache,
9
9
  }) {
10
+ let lastAgentsRenderKey = "";
11
+
10
12
  function renderOverviewGuide(overview, profile) {
11
13
  const hasDisplayName = Boolean(String(profile?.display_name || overview?.display_name || "").trim());
12
14
  const hasBio = Boolean(String(profile?.bio || "").trim());
@@ -108,15 +110,15 @@ export function createOverviewController({
108
110
  const snapshotHtml = `
109
111
  <div class="snapshot-card">
110
112
  <div class="snapshot-card__identity">
111
- <div class="snapshot-card__label">Current Node</div>
113
+ <div class="snapshot-card__label">${t("overview.snapshotCurrentNode")}</div>
112
114
  <div class="snapshot-card__title">${escapeHtml(o.display_name || t("overview.unnamed"))}</div>
113
115
  <div class="snapshot-card__subtle mono">${escapeHtml(o.agent_id || "-")}</div>
114
116
  </div>
115
117
  <div class="snapshot-card__grid">
116
- <div class="snapshot-card__item"><div class="label">Version</div><span class="value-inline">${escapeHtml(o.app_version || "-")}</span></div>
117
- <div class="snapshot-card__item"><div class="label">Public</div><span class="value-inline">${o.public_enabled ? t("common.on") : t("common.off")}</span></div>
118
- <div class="snapshot-card__item"><div class="label">Broadcast</div><span class="value-inline">${o.broadcast_enabled ? t("common.on") : t("common.off")}</span></div>
119
- <div class="snapshot-card__item"><div class="label">Last Broadcast</div><span class="value-inline">${escapeHtml(ago(o.last_broadcast_at))}</span></div>
118
+ <div class="snapshot-card__item"><div class="label">${t("overview.snapshotVersion")}</div><span class="value-inline">${escapeHtml(o.app_version || "-")}</span></div>
119
+ <div class="snapshot-card__item"><div class="label">${t("overview.snapshotPublic")}</div><span class="value-inline">${o.public_enabled ? t("common.on") : t("common.off")}</span></div>
120
+ <div class="snapshot-card__item"><div class="label">${t("overview.snapshotBroadcast")}</div><span class="value-inline">${o.broadcast_enabled ? t("common.on") : t("common.off")}</span></div>
121
+ <div class="snapshot-card__item"><div class="label">${t("overview.snapshotLastBroadcast")}</div><span class="value-inline">${escapeHtml(ago(o.last_broadcast_at))}</span></div>
120
122
  </div>
121
123
  </div>
122
124
  `;
@@ -175,7 +177,7 @@ export function createOverviewController({
175
177
  document.getElementById("homePriorityGrid").innerHTML = [
176
178
  [t("overview.homeOpenClaw"), openclawRunning ? t("overview.homeRunning") : openclawDetected ? t("overview.homeInstalledOnly") : t("overview.homeStopped"), openclawRunning ? t("overview.homeMetaRunning") : t("overview.homeMetaNotRunning")],
177
179
  [t("overview.homeGlobalMode"), globalMode ? t("overview.homeGlobalReady") : t("overview.homeNotGlobal"), globalMode ? t("overview.homeMetaGlobal") : t("overview.homeMetaNotGlobal")],
178
- [t("overview.homeBroadcastHealth"), broadcastHealthy ? t("overview.homeHealthy") : t("overview.homeDegraded"), lastNetworkError || `Last broadcast ${ago(o.last_broadcast_at)}`],
180
+ [t("overview.homeBroadcastHealth"), broadcastHealthy ? t("overview.homeHealthy") : t("overview.homeDegraded"), lastNetworkError || t("overview.lastBroadcastAgo", { value: ago(o.last_broadcast_at) })],
179
181
  [t("overview.homePeers"), String(all.filter((agent) => !agent.is_self && agent.online).length), t("overview.homeMetaPeers", { online: String(onlineCount), discovered: String(discoveredCount) })],
180
182
  ].map(([label, value, meta]) => `
181
183
  <div class="priority-card">
@@ -221,8 +223,17 @@ export function createOverviewController({
221
223
  if (!filtered.length) {
222
224
  const agentsCountHintText = t("overview.agentsZero");
223
225
  const agentsWrapHtml = `<div class="label">${t("overview.noDiscoveredAgents")}</div>`;
224
- document.getElementById("agentsCountHint").textContent = agentsCountHintText;
225
- document.getElementById("agentsWrap").innerHTML = agentsWrapHtml;
226
+ const renderKey = JSON.stringify({
227
+ state: "empty",
228
+ hint: agentsCountHintText,
229
+ page: agentsPage,
230
+ onlineOnly: getOnlyShowOnline(),
231
+ });
232
+ if (renderKey !== lastAgentsRenderKey) {
233
+ document.getElementById("agentsCountHint").textContent = agentsCountHintText;
234
+ document.getElementById("agentsWrap").innerHTML = agentsWrapHtml;
235
+ lastAgentsRenderKey = renderKey;
236
+ }
226
237
  writeUiCache("silicaclaw_ui_overview", {
227
238
  overviewCardsHtml,
228
239
  brandVersionText,
@@ -282,20 +293,37 @@ export function createOverviewController({
282
293
  </div>
283
294
  </div>
284
295
  `;
285
- document.getElementById("agentsCountHint").textContent = agentsCountHintText;
286
- document.getElementById("agentsWrap").innerHTML = agentsWrapHtml;
287
- document.getElementById("agentsPrevPageBtn")?.addEventListener("click", async () => {
288
- if (agentsPage <= 1) return;
289
- agentsPage -= 1;
290
- onPageChange(agentsPage);
291
- await refreshOverview({ getAgentsPage, getOnlyShowOnline, onPageChange, setOverviewMode, setVisibleRemotePublicCount });
292
- });
293
- document.getElementById("agentsNextPageBtn")?.addEventListener("click", async () => {
294
- if (agentsPage >= totalAgentPages) return;
295
- agentsPage += 1;
296
- onPageChange(agentsPage);
297
- await refreshOverview({ getAgentsPage, getOnlyShowOnline, onPageChange, setOverviewMode, setVisibleRemotePublicCount });
296
+ const renderKey = JSON.stringify({
297
+ state: "list",
298
+ hint: agentsCountHintText,
299
+ page: agentsPage,
300
+ totalPages: totalAgentPages,
301
+ onlineOnly: getOnlyShowOnline(),
302
+ items: pagedAgents.map((agent) => [
303
+ agent.agent_id,
304
+ agent.updated_at,
305
+ agent.online ? 1 : 0,
306
+ agent.display_name || "",
307
+ agent.bio || "",
308
+ ]),
298
309
  });
310
+ if (renderKey !== lastAgentsRenderKey) {
311
+ document.getElementById("agentsCountHint").textContent = agentsCountHintText;
312
+ document.getElementById("agentsWrap").innerHTML = agentsWrapHtml;
313
+ document.getElementById("agentsPrevPageBtn")?.addEventListener("click", async () => {
314
+ if (agentsPage <= 1) return;
315
+ agentsPage -= 1;
316
+ onPageChange(agentsPage);
317
+ await refreshOverview({ getAgentsPage, getOnlyShowOnline, onPageChange, setOverviewMode, setVisibleRemotePublicCount });
318
+ });
319
+ document.getElementById("agentsNextPageBtn")?.addEventListener("click", async () => {
320
+ if (agentsPage >= totalAgentPages) return;
321
+ agentsPage += 1;
322
+ onPageChange(agentsPage);
323
+ await refreshOverview({ getAgentsPage, getOnlyShowOnline, onPageChange, setOverviewMode, setVisibleRemotePublicCount });
324
+ });
325
+ lastAgentsRenderKey = renderKey;
326
+ }
299
327
  writeUiCache("silicaclaw_ui_overview", {
300
328
  overviewCardsHtml,
301
329
  brandVersionText,