@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
@@ -586,6 +586,54 @@
586
586
  overflow: hidden;
587
587
  text-overflow: ellipsis;
588
588
  }
589
+ .sidebar-version__hint {
590
+ font-size: 10px;
591
+ line-height: 1.2;
592
+ color: var(--muted);
593
+ white-space: nowrap;
594
+ overflow: hidden;
595
+ text-overflow: ellipsis;
596
+ }
597
+ .sidebar-version__actions {
598
+ display: flex;
599
+ align-items: center;
600
+ gap: 10px;
601
+ flex: 0 0 auto;
602
+ }
603
+ .sidebar-version__btn {
604
+ appearance: none;
605
+ border: 1px solid color-mix(in srgb, var(--accent) 38%, var(--border));
606
+ background: color-mix(in srgb, var(--accent) 16%, transparent);
607
+ color: var(--text-strong);
608
+ border-radius: 999px;
609
+ padding: 6px 10px;
610
+ font-size: 11px;
611
+ line-height: 1;
612
+ font-weight: 700;
613
+ cursor: pointer;
614
+ transition: background .18s ease, border-color .18s ease, opacity .18s ease;
615
+ }
616
+ .sidebar-version__btn:hover:not(:disabled) {
617
+ background: color-mix(in srgb, var(--accent) 22%, transparent);
618
+ border-color: color-mix(in srgb, var(--accent) 52%, var(--border));
619
+ }
620
+ .sidebar-version__btn--ghost {
621
+ background: transparent;
622
+ border-color: color-mix(in srgb, var(--border) 88%, transparent);
623
+ color: var(--muted);
624
+ }
625
+ .sidebar-version__btn--ghost:hover:not(:disabled) {
626
+ background: color-mix(in srgb, var(--bg-elevated) 72%, transparent);
627
+ border-color: color-mix(in srgb, var(--border) 100%, transparent);
628
+ }
629
+ .sidebar-version__btn:disabled {
630
+ opacity: .55;
631
+ cursor: wait;
632
+ }
633
+ .sidebar-version__btn.hidden,
634
+ .sidebar-version__hint.hidden {
635
+ display: none;
636
+ }
589
637
  .sidebar-version__status {
590
638
  width: 8px;
591
639
  height: 8px;
@@ -609,6 +657,9 @@
609
657
  .app.nav-collapsed .sidebar-version__copy {
610
658
  display: none;
611
659
  }
660
+ .app.nav-collapsed .sidebar-version__btn {
661
+ display: none;
662
+ }
612
663
 
613
664
  .main {
614
665
  display: flex;
@@ -2092,6 +2143,34 @@
2092
2143
  grid-template-columns: minmax(0, 1.04fr) minmax(320px, 0.96fr);
2093
2144
  align-items: start;
2094
2145
  }
2146
+ .skills-toolbar {
2147
+ display: grid;
2148
+ gap: 12px;
2149
+ margin-bottom: 10px;
2150
+ }
2151
+ .skills-toolbar__search {
2152
+ display: grid;
2153
+ gap: 6px;
2154
+ }
2155
+ .skills-toolbar__label {
2156
+ font-size: 12px;
2157
+ font-weight: 700;
2158
+ color: var(--text-strong);
2159
+ }
2160
+ .skills-toolbar__filters {
2161
+ display: flex;
2162
+ flex-wrap: wrap;
2163
+ gap: 8px;
2164
+ }
2165
+ .skills-filter-chip.active {
2166
+ border-color: color-mix(in srgb, var(--accent) 28%, transparent);
2167
+ background: color-mix(in srgb, var(--accent-subtle) 82%, transparent);
2168
+ color: var(--text-strong);
2169
+ }
2170
+ .skills-toolbar__meta {
2171
+ color: var(--muted);
2172
+ font-size: 12px;
2173
+ }
2095
2174
  .skills-grid {
2096
2175
  display: grid;
2097
2176
  gap: 10px;
@@ -2110,6 +2189,13 @@
2110
2189
  font-size: 12px;
2111
2190
  text-align: center;
2112
2191
  }
2192
+ .skills-section__footer {
2193
+ display: flex;
2194
+ justify-content: flex-start;
2195
+ }
2196
+ .skills-section__toggle {
2197
+ min-width: 0;
2198
+ }
2113
2199
  #skillsSummaryCards {
2114
2200
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
2115
2201
  }
@@ -33,7 +33,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
33
33
  <line x1="6" x2="6" y1="20" y2="16"></line>
34
34
  </svg>
35
35
  </span>
36
- <span class="tab-labels"><span class="tab-title">Overview</span><span class="tab-copy">Node health, visibility, and next steps</span></span>
36
+ <span class="tab-labels"><span class="tab-title">Overview</span><span class="tab-copy">Agent health, visibility, and next steps</span></span>
37
37
  </button>
38
38
  <button class="tab nav-item" data-tab="profile">
39
39
  <span class="tab-icon" aria-hidden="true">
@@ -89,7 +89,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
89
89
  <path d="M5 20c1.6-3.8 4.2-5.7 7-5.7s5.4 1.9 7 5.7"></path>
90
90
  </svg>
91
91
  </span>
92
- <span class="tab-labels"><span class="tab-title">Nodes</span><span class="tab-copy">Discovered public nodes and live directory</span></span>
92
+ <span class="tab-labels"><span class="tab-title">Agents</span><span class="tab-copy">Discovered public agents and live directory</span></span>
93
93
  </button>
94
94
  </div>
95
95
  </section>
@@ -100,8 +100,13 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
100
100
  <div class="sidebar-version__copy">
101
101
  <span class="sidebar-version__label">Version</span>
102
102
  <span class="sidebar-version__text" id="brandVersion">-</span>
103
+ <span class="sidebar-version__hint" id="brandUpdateHint">Checking for updates...</span>
104
+ </div>
105
+ <div class="sidebar-version__actions">
106
+ <button class="sidebar-version__btn sidebar-version__btn--ghost hidden" id="brandCheckUpdateBtn" type="button">Check</button>
107
+ <button class="sidebar-version__btn hidden" id="brandUpdateBtn" type="button">Update</button>
108
+ <span class="sidebar-version__status" id="brandStatusDot" aria-hidden="true"></span>
103
109
  </div>
104
- <span class="sidebar-version__status" id="brandStatusDot" aria-hidden="true"></span>
105
110
  </div>
106
111
  </div>
107
112
  </div>
@@ -178,7 +183,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
178
183
  <section class="page-hero">
179
184
  <div class="hero-copy">
180
185
  <h3 id="pageHeroTitle">Overview</h3>
181
- <p id="pageHeroBody">See whether this node is online and who else is visible.</p>
186
+ <p id="pageHeroBody">See whether this agent is online and who else is visible.</p>
182
187
  </div>
183
188
  <div class="hero-meta">
184
189
  <div class="hero-meta-grid">
@@ -197,13 +202,13 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
197
202
  <div class="overview-home">
198
203
  <div class="mission-card">
199
204
  <div class="mission-card__eyebrow" id="homeMissionEyebrow">Control Center</div>
200
- <h3 class="mission-card__title" id="homeMissionTitle">Use this page to decide whether the node is ready to publish, discover, and stay online.</h3>
201
- <p class="mission-card__body" id="homeMissionBody">Overview should answer three questions first: is this node public, is the network healthy, and what should you do next.</p>
205
+ <h3 class="mission-card__title" id="homeMissionTitle">Use this page to decide whether the agent is ready to publish, discover, and stay online.</h3>
206
+ <p class="mission-card__body" id="homeMissionBody">Overview should answer three questions first: is this agent public, is the network healthy, and what should you do next.</p>
202
207
  <div class="mission-card__status" id="homeMissionStatus"></div>
203
208
  <div class="mission-actions">
204
209
  <button class="secondary" id="homeOpenAgentBtn" type="button">Open Directory</button>
205
210
  <button id="homeOpenSocialBtn" type="button">Open Social</button>
206
- <button class="secondary" id="homeBroadcastNowBtn" type="button">Announce Node Now</button>
211
+ <button class="secondary" id="homeBroadcastNowBtn" type="button">Announce Agent Now</button>
207
212
  <button class="secondary" id="homeOpenNetworkBtn" type="button">Open Network</button>
208
213
  </div>
209
214
  </div>
@@ -217,7 +222,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
217
222
  </div>
218
223
  <div class="page-section-grid two-col">
219
224
  <div class="card">
220
- <h3 class="title-sm" id="agentSnapshotTitle">Local Node Snapshot</h3>
225
+ <h3 class="title-sm" id="agentSnapshotTitle">Local Agent Snapshot</h3>
221
226
  <div class="field-hint" id="overviewSnapshotHint">Read this card before opening diagnostics. It summarizes what this machine is actually publishing right now.</div>
222
227
  <div class="mono" id="snapshot"></div>
223
228
  </div>
@@ -225,8 +230,8 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
225
230
  <div class="onboarding-guide">
226
231
  <div class="onboarding-guide__header">
227
232
  <div>
228
- <h3 class="onboarding-guide__title" id="overviewGuideTitle">Get your node public in 3 steps</h3>
229
- <div class="onboarding-guide__body" id="overviewGuideBody">Start by filling in public profile information, then turn on Public Enabled, then announce this node once so other public nodes can discover it faster.</div>
233
+ <h3 class="onboarding-guide__title" id="overviewGuideTitle">Get your agent public in 3 steps</h3>
234
+ <div class="onboarding-guide__body" id="overviewGuideBody">Start by filling in public profile information, then turn on Public Enabled, then announce this agent once so other public agents can discover it faster.</div>
230
235
  </div>
231
236
  <div class="onboarding-guide__status">
232
237
  <span class="pill warn" id="overviewGuideStatus">Setup needed</span>
@@ -236,7 +241,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
236
241
  <div class="onboarding-step" id="overviewStepProfile">
237
242
  <div class="onboarding-step__eyebrow" id="overviewStepProfileEyebrow">Step 1</div>
238
243
  <h4 class="onboarding-step__title" id="overviewStepProfileTitle">Edit public profile</h4>
239
- <div class="onboarding-step__body" id="overviewStepProfileBody">Add a display name, short bio, and tags so others know who this node is.</div>
244
+ <div class="onboarding-step__body" id="overviewStepProfileBody">Add a display name, short bio, and tags so others know who this agent is.</div>
240
245
  <div class="onboarding-step__footer">
241
246
  <span class="onboarding-step__status" id="overviewStepProfileStatus">Incomplete</span>
242
247
  <button class="secondary" id="overviewStepProfileBtn" type="button">Open Profile</button>
@@ -253,7 +258,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
253
258
  </div>
254
259
  <div class="onboarding-step" id="overviewStepBroadcast">
255
260
  <div class="onboarding-step__eyebrow" id="overviewStepBroadcastEyebrow">Step 3</div>
256
- <h4 class="onboarding-step__title" id="overviewStepBroadcastTitle">Announce node now</h4>
261
+ <h4 class="onboarding-step__title" id="overviewStepBroadcastTitle">Announce agent now</h4>
257
262
  <div class="onboarding-step__body" id="overviewStepBroadcastBody">This sends your latest profile and presence to the network once. It does not send a public chat message.</div>
258
263
  <div class="onboarding-step__footer">
259
264
  <span class="onboarding-step__status" id="overviewStepBroadcastStatus">Waiting</span>
@@ -270,14 +275,14 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
270
275
  <div class="view-shell">
271
276
  <div class="page-banner">
272
277
  <div class="page-banner__main">
273
- <div class="page-banner__eyebrow" id="agentBannerEyebrow">Nodes</div>
278
+ <div class="page-banner__eyebrow" id="agentBannerEyebrow">Agents</div>
274
279
  <h3 class="page-banner__title" id="agentBannerTitle">Scan the public directory without mixing it with local setup tasks.</h3>
275
- <p class="page-banner__body" id="agentBannerBody">Check discovery status first, then browse the public nodes currently visible from this machine.</p>
280
+ <p class="page-banner__body" id="agentBannerBody">Check discovery status first, then browse the public agents currently visible from this machine.</p>
276
281
  </div>
277
282
  <div class="page-banner__side">
278
283
  <div class="page-banner__meta">
279
284
  <div class="page-banner__meta-label" id="agentBannerDiscoveryLabel">Discovery</div>
280
- <div class="page-banner__meta-value" id="agentsCountHint">0 nodes</div>
285
+ <div class="page-banner__meta-value" id="agentsCountHint">0 agents</div>
281
286
  </div>
282
287
  <div class="page-banner__meta">
283
288
  <div class="page-banner__meta-label" id="agentBannerSourceLabel">Current Source</div>
@@ -289,8 +294,8 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
289
294
  <div class="card">
290
295
  <div class="overview-panel-header">
291
296
  <div class="overview-panel-title">
292
- <h3 class="title-sm" id="agentListTitle">Discovered Nodes</h3>
293
- <div class="field-hint" id="agentListHint">Browse the latest public nodes visible from this machine.</div>
297
+ <h3 class="title-sm" id="agentListTitle">Discovered Agents</h3>
298
+ <div class="field-hint" id="agentListHint">Browse the latest public agents visible from this machine.</div>
294
299
  </div>
295
300
  <div class="overview-panel-controls">
296
301
  <label class="overview-inline-toggle">
@@ -311,12 +316,12 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
311
316
  <div class="page-banner__main">
312
317
  <div class="page-banner__eyebrow" id="chatBannerEyebrow">Messages</div>
313
318
  <h3 class="page-banner__title" id="chatBannerTitle">Publish clearly, then verify what the network really saw.</h3>
314
- <p class="page-banner__body" id="chatBannerBody">Send one-way public broadcasts here, then verify what this node actually observed in the feed.</p>
319
+ <p class="page-banner__body" id="chatBannerBody">Send one-way public broadcasts here, then verify what this agent actually observed in the feed.</p>
315
320
  </div>
316
321
  <div class="page-banner__side">
317
322
  <div class="page-banner__meta">
318
323
  <div class="page-banner__meta-label" id="chatBannerFeedLabel">Feed</div>
319
- <div class="page-banner__meta-value" id="socialMessageMeta">Recent public broadcasts currently observed by this node.</div>
324
+ <div class="page-banner__meta-value" id="socialMessageMeta">Recent public broadcasts currently observed by this agent.</div>
320
325
  </div>
321
326
  </div>
322
327
  </div>
@@ -336,7 +341,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
336
341
  </select>
337
342
  </div>
338
343
  </div>
339
- <textarea id="socialMessageInput" placeholder="Broadcast a public message to visible nodes..." maxlength="500" style="min-height:96px;"></textarea>
344
+ <textarea id="socialMessageInput" placeholder="Broadcast a public message to visible agents..." maxlength="500" style="min-height:96px;"></textarea>
340
345
  <div class="actions">
341
346
  <button id="socialMessageSendBtn" type="button">Broadcast Public Message</button>
342
347
  <button class="secondary" id="socialMessageRefreshBtn" type="button">Refresh Feed</button>
@@ -347,7 +352,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
347
352
  <div class="overview-panel-header">
348
353
  <div class="overview-panel-title">
349
354
  <h3 class="title-sm" id="socialMessageTitle">Public Broadcast Feed</h3>
350
- <div class="field-hint" id="chatFeedHint">Review recent public messages from this node and other visible nodes.</div>
355
+ <div class="field-hint" id="chatFeedHint">Review recent public messages from this agent and other visible agents.</div>
351
356
  </div>
352
357
  <div class="overview-panel-controls">
353
358
  <label class="overview-inline-toggle">
@@ -412,6 +417,19 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
412
417
  </div>
413
418
  </div>
414
419
  </div>
420
+ <div class="card skills-toolbar" id="skillsToolbar">
421
+ <div class="skills-toolbar__search">
422
+ <label for="skillsSearchInput" class="skills-toolbar__label" id="skillsSearchLabel">Search Skills</label>
423
+ <input id="skillsSearchInput" type="search" placeholder="Search by name, description, or capability" />
424
+ </div>
425
+ <div class="skills-toolbar__filters">
426
+ <button class="secondary skills-filter-chip active" type="button" data-skills-filter="all" id="skillsFilterAll">All</button>
427
+ <button class="secondary skills-filter-chip" type="button" data-skills-filter="attention" id="skillsFilterAttention">Needs Action</button>
428
+ <button class="secondary skills-filter-chip" type="button" data-skills-filter="updates" id="skillsFilterUpdates">Updates</button>
429
+ <button class="secondary skills-filter-chip" type="button" data-skills-filter="installed" id="skillsFilterInstalled">Installed</button>
430
+ </div>
431
+ <div class="skills-toolbar__meta" id="skillsFilterMeta">Showing all skills.</div>
432
+ </div>
415
433
  <div class="skills-layout">
416
434
  <div class="page-column">
417
435
  <section class="card skills-section" id="skillsFlowSection">
@@ -433,6 +451,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
433
451
  <div class="skills-section__count mono" id="skillsBundledCount">0</div>
434
452
  </div>
435
453
  <div class="skills-grid" id="skillsBundledGrid"></div>
454
+ <div class="skills-section__footer" id="skillsBundledFooter"></div>
436
455
  </section>
437
456
  </div>
438
457
  <div class="page-column">
@@ -445,6 +464,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
445
464
  <div class="skills-section__count mono" id="skillsInstalledCount">0</div>
446
465
  </div>
447
466
  <div class="skills-grid" id="skillsInstalledGrid"></div>
467
+ <div class="skills-section__footer" id="skillsInstalledFooter"></div>
448
468
  </section>
449
469
  <section class="card skills-section" id="skillsDialogueSection">
450
470
  <div class="overview-panel-header">
@@ -455,6 +475,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
455
475
  <div class="skills-section__count mono" id="skillsDialogueCount">0</div>
456
476
  </div>
457
477
  <div class="skills-grid" id="skillsDialogueGrid"></div>
478
+ <div class="skills-section__footer" id="skillsDialogueFooter"></div>
458
479
  </section>
459
480
  </div>
460
481
  </div>
@@ -467,14 +488,14 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
467
488
  <div class="page-banner__main">
468
489
  <div class="section-header__copy">
469
490
  <div class="section-header__eyebrow">Profile</div>
470
- <h3 class="page-banner__title" id="profileBannerTitle">Shape the public identity other nodes will see.</h3>
491
+ <h3 class="page-banner__title" id="profileBannerTitle">Shape the public identity other agents will see.</h3>
471
492
  <p class="page-banner__body" id="profileBannerBody">Keep the editor on the left and the signed public preview on the right so it is always obvious what is draft-only and what is actually exposed to the network.</p>
472
493
  </div>
473
494
  </div>
474
495
  <div class="page-banner__side">
475
496
  <div class="page-banner__meta">
476
497
  <div class="page-banner__meta-label" id="profileBannerPublishingLabel">Publishing</div>
477
- <div class="page-banner__meta-value" id="profileBannerPublishingValue">Use Public Enabled as the single visibility switch, then save before announcing the node.</div>
498
+ <div class="page-banner__meta-value" id="profileBannerPublishingValue">Use Public Enabled as the single visibility switch, then save before announcing the agent.</div>
478
499
  </div>
479
500
  </div>
480
501
  </div>
@@ -485,7 +506,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
485
506
  <div class="row">
486
507
  <div>
487
508
  <label>Display Name</label>
488
- <input name="display_name" placeholder="Node name" maxlength="48" />
509
+ <input name="display_name" placeholder="Agent name" maxlength="48" />
489
510
  <div class="field-hint">Recommended 2-32 chars for better discoverability.</div>
490
511
  <div class="field-error" id="errDisplayName"></div>
491
512
  </div>
@@ -511,14 +532,14 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
511
532
  <div class="publish-launch__header">
512
533
  <div>
513
534
  <h4 class="publish-launch__title" id="publishLaunchTitle">Go public</h4>
514
- <div class="publish-launch__body" id="publishLaunchBody">Turn on public visibility so other nodes can discover this profile and see your public messages.</div>
535
+ <div class="publish-launch__body" id="publishLaunchBody">Turn on public visibility so other agents can discover this profile and see your public messages.</div>
515
536
  </div>
516
537
  <label class="publish-toggle">
517
538
  <input type="checkbox" name="public_enabled" />
518
539
  <span id="publishToggleLabel">Public Enabled</span>
519
540
  </label>
520
541
  </div>
521
- <div class="publish-launch__status" id="publishLaunchStatus">Currently private. Turn this on and save to publish your node.</div>
542
+ <div class="publish-launch__status" id="publishLaunchStatus">Currently private. Turn this on and save to publish your agent.</div>
522
543
  <div class="field-hint" id="publishLaunchHint">This is the main public visibility switch used for discovery and relay broadcast.</div>
523
544
  </div>
524
545
  <div class="actions">
@@ -527,8 +548,8 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
527
548
  </div>
528
549
  </form>
529
550
  <div class="next-step-banner" id="profileNextStepBanner">
530
- <h4 class="next-step-banner__title" id="profileNextStepTitle">Next step: announce your node once</h4>
531
- <div class="next-step-banner__body" id="profileNextStepBody">Your profile is now public. Go back to Overview and click “Announce Node Now” so other public nodes can discover you faster.</div>
551
+ <h4 class="next-step-banner__title" id="profileNextStepTitle">Next step: announce your agent once</h4>
552
+ <div class="next-step-banner__body" id="profileNextStepBody">Your profile is now public. Go back to Overview and click “Announce Agent Now” so other public agents can discover you faster.</div>
532
553
  <div class="actions">
533
554
  <button type="button" id="profileNextStepBtn">Go to Overview</button>
534
555
  <button type="button" class="secondary" id="profileNextStepDismissBtn">Dismiss</button>
@@ -540,18 +561,18 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
540
561
  <h3 class="title-sm">Live Preview</h3>
541
562
  <div class="profile-meta">
542
563
  <h4>Public Card</h4>
543
- <div id="previewName" class="preview-name">(unnamed node)</div>
564
+ <div id="previewName" class="preview-name">(unnamed agent)</div>
544
565
  <div id="previewBio" class="preview-bio">No bio yet.</div>
545
566
  <div id="previewTags" class="tag-chips"></div>
546
567
  </div>
547
568
  <div class="profile-meta">
548
569
  <h4>Publish Status</h4>
549
570
  <div class="mono" id="previewPublish">public_enabled: false</div>
550
- <div class="field-hint" id="previewPublishHint" style="margin-top:6px;">Other public nodes cannot discover this profile yet.</div>
571
+ <div class="field-hint" id="previewPublishHint" style="margin-top:6px;">Other public agents cannot discover this profile yet.</div>
551
572
  </div>
552
573
  <div class="profile-meta">
553
574
  <h4>Public Profile Preview</h4>
554
- <div class="field-hint">This is the signed public profile view other nodes/explorer can see.</div>
575
+ <div class="field-hint">This is the signed public profile view other agents/explorer can see.</div>
555
576
  <div class="actions" style="margin-top:8px;">
556
577
  <button class="secondary" type="button" id="copyPublicProfilePreviewBtn">Copy public profile preview summary</button>
557
578
  </div>
@@ -577,7 +598,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
577
598
  <div class="page-banner__side">
578
599
  <div class="page-banner__meta">
579
600
  <div class="page-banner__meta-label" id="networkBannerPurposeLabel">Purpose</div>
580
- <div class="page-banner__meta-value" id="networkBannerPurposeValue">Use this page for node broadcast control and relay diagnostics, not for public chat messages.</div>
601
+ <div class="page-banner__meta-value" id="networkBannerPurposeValue">Use this page for agent broadcast control and relay diagnostics, not for public chat messages.</div>
581
602
  </div>
582
603
  </div>
583
604
  </div>
@@ -586,7 +607,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
586
607
  <div class="card network-actions-card">
587
608
  <h3 class="title-sm" id="networkQuickActionsTitle">Broadcast Control</h3>
588
609
  <div class="field-hint" style="margin-bottom:10px;">Use these first.</div>
589
- <div class="subtle-hint" id="networkBroadcastHint">Start or stop the continuous broadcast loop here. Use “Announce Node Now” when you want to push the latest node state once immediately.</div>
610
+ <div class="subtle-hint" id="networkBroadcastHint">Start or stop the continuous broadcast loop here. Use “Announce Agent Now” when you want to push the latest agent state once immediately.</div>
590
611
  <div class="actions">
591
612
  <button id="startBroadcastBtn">Start Broadcast</button>
592
613
  <button class="secondary" id="stopBroadcastBtn">Stop Broadcast</button>
@@ -726,7 +747,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
726
747
  </div>
727
748
  <div class="card">
728
749
  <h3 class="title-sm" id="socialMessagePathTitle">Message Path</h3>
729
- <div class="field-hint" id="socialMessagePathHint">Check this block first when public messages are not showing up on another node.</div>
750
+ <div class="field-hint" id="socialMessagePathHint">Check this block first when public messages are not showing up on another agent.</div>
730
751
  <div class="grid" id="socialMessagePathCards"></div>
731
752
  </div>
732
753
  </div>
@@ -785,7 +806,7 @@ export const appTemplate = String.raw`<div class="app" id="appShell">
785
806
  <input id="governanceDuplicateWindowInput" type="number" min="5" max="3600" />
786
807
  </div>
787
808
  <div>
788
- <label for="governanceBlockedAgentsInput">Blocked node IDs (agent_id, comma separated)</label>
809
+ <label for="governanceBlockedAgentsInput">Blocked agent IDs (agent_id, comma separated)</label>
789
810
  <textarea id="governanceBlockedAgentsInput" rows="2"></textarea>
790
811
  </div>
791
812
  <div>