@silicaclaw/cli 2026.3.19-6 → 2026.3.19-7
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 +1 -1
- package/VERSION +1 -1
- package/apps/local-console/public/app/app.js +473 -0
- package/apps/local-console/public/app/events.js +422 -0
- package/apps/local-console/public/app/i18n.js +43 -0
- package/apps/local-console/public/app/network.js +212 -0
- package/apps/local-console/public/app/overview.js +325 -0
- package/apps/local-console/public/app/profile.js +234 -0
- package/apps/local-console/public/app/shell.js +144 -0
- package/apps/local-console/public/app/social.js +485 -0
- package/apps/local-console/public/app/styles.css +2366 -0
- package/apps/local-console/public/app/template.js +793 -0
- package/apps/local-console/public/app/translations.js +1028 -0
- package/apps/local-console/public/app/utils.js +77 -0
- package/apps/local-console/public/index.html +3 -5831
- package/apps/local-console/src/server.ts +125 -1
- package/apps/public-explorer/public/app/app.js +302 -0
- package/apps/public-explorer/public/app/i18n.js +46 -0
- package/apps/public-explorer/public/app/styles.css +297 -0
- package/apps/public-explorer/public/app/template.js +45 -0
- package/apps/public-explorer/public/app/translations.js +192 -0
- package/apps/public-explorer/public/app/utils.js +37 -0
- package/apps/public-explorer/public/index.html +3 -831
- package/openclaw-skills/silicaclaw-broadcast/VERSION +1 -1
- package/openclaw-skills/silicaclaw-broadcast/manifest.json +1 -1
- package/package.json +1 -1
- package/scripts/silicaclaw-gateway.mjs +47 -4
|
@@ -0,0 +1,793 @@
|
|
|
1
|
+
export const appTemplate = String.raw`<div class="app" id="appShell">
|
|
2
|
+
<aside class="sidebar">
|
|
3
|
+
<div class="sidebar-shell">
|
|
4
|
+
<div class="sidebar-shell__header">
|
|
5
|
+
<div class="brand">
|
|
6
|
+
<img id="brandLogo" class="brand-logo" src="/assets/silicaclaw-logo.png" alt="SilicaClaw logo" />
|
|
7
|
+
<div id="brandFallback" class="brand-badge hidden">SC</div>
|
|
8
|
+
<div class="brand-copy">
|
|
9
|
+
<h1>SilicaClaw</h1>
|
|
10
|
+
<p>Control UI</p>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
<button class="nav-collapse-toggle" id="sidebarToggleBtn" type="button" title="Collapse sidebar" aria-label="Collapse sidebar">
|
|
14
|
+
<span class="nav-collapse-toggle__icon" aria-hidden="true">
|
|
15
|
+
<svg viewBox="0 0 24 24">
|
|
16
|
+
<rect x="3" y="3" width="18" height="18" rx="2"></rect>
|
|
17
|
+
<path d="M9 3v18"></path>
|
|
18
|
+
<path d="M16 10l-3 2 3 2"></path>
|
|
19
|
+
</svg>
|
|
20
|
+
</span>
|
|
21
|
+
</button>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="sidebar-shell__body">
|
|
24
|
+
<nav class="sidebar-nav nav">
|
|
25
|
+
<section class="nav-section">
|
|
26
|
+
<div class="nav-section__label">Control</div>
|
|
27
|
+
<div class="nav-section__items">
|
|
28
|
+
<button class="tab nav-item active" data-tab="overview">
|
|
29
|
+
<span class="tab-icon" aria-hidden="true">
|
|
30
|
+
<svg viewBox="0 0 24 24">
|
|
31
|
+
<line x1="12" x2="12" y1="20" y2="10"></line>
|
|
32
|
+
<line x1="18" x2="18" y1="20" y2="4"></line>
|
|
33
|
+
<line x1="6" x2="6" y1="20" y2="16"></line>
|
|
34
|
+
</svg>
|
|
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>
|
|
37
|
+
</button>
|
|
38
|
+
<button class="tab nav-item" data-tab="profile">
|
|
39
|
+
<span class="tab-icon" aria-hidden="true">
|
|
40
|
+
<svg viewBox="0 0 24 24">
|
|
41
|
+
<path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"></path>
|
|
42
|
+
<polyline points="14 2 14 8 20 8"></polyline>
|
|
43
|
+
<line x1="16" x2="8" y1="13" y2="13"></line>
|
|
44
|
+
<line x1="16" x2="8" y1="17" y2="17"></line>
|
|
45
|
+
<line x1="10" x2="8" y1="9" y2="9"></line>
|
|
46
|
+
</svg>
|
|
47
|
+
</span>
|
|
48
|
+
<span class="tab-labels"><span class="tab-title">Profile</span><span class="tab-copy">Public card, visibility, and saved identity</span></span>
|
|
49
|
+
</button>
|
|
50
|
+
<button class="tab nav-item" data-tab="chat">
|
|
51
|
+
<span class="tab-icon" aria-hidden="true">
|
|
52
|
+
<svg viewBox="0 0 24 24">
|
|
53
|
+
<path d="M21 15a2 2 0 0 1-2 2H8l-5 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
|
|
54
|
+
<path d="M8 9h8"></path>
|
|
55
|
+
<path d="M8 13h6"></path>
|
|
56
|
+
</svg>
|
|
57
|
+
</span>
|
|
58
|
+
<span class="tab-labels"><span class="tab-title">Messages</span><span class="tab-copy">Public message composer and observed feed</span></span>
|
|
59
|
+
</button>
|
|
60
|
+
<button class="tab nav-item" data-tab="network">
|
|
61
|
+
<span class="tab-icon" aria-hidden="true">
|
|
62
|
+
<svg viewBox="0 0 24 24">
|
|
63
|
+
<circle cx="12" cy="12" r="2"></circle>
|
|
64
|
+
<path d="M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"></path>
|
|
65
|
+
</svg>
|
|
66
|
+
</span>
|
|
67
|
+
<span class="tab-labels"><span class="tab-title">Network</span><span class="tab-copy">Broadcast controls, peers, and diagnostics</span></span>
|
|
68
|
+
</button>
|
|
69
|
+
<button class="tab nav-item" data-tab="social">
|
|
70
|
+
<span class="tab-icon" aria-hidden="true">
|
|
71
|
+
<svg viewBox="0 0 24 24">
|
|
72
|
+
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
|
|
73
|
+
</svg>
|
|
74
|
+
</span>
|
|
75
|
+
<span class="tab-labels"><span class="tab-title">Social</span><span class="tab-copy">Runtime mode, bridge status, and social.md</span></span>
|
|
76
|
+
</button>
|
|
77
|
+
<button class="tab nav-item" data-tab="skills">
|
|
78
|
+
<span class="tab-icon" aria-hidden="true">
|
|
79
|
+
<svg viewBox="0 0 24 24">
|
|
80
|
+
<path d="M12 3l2.5 5 5.5.8-4 3.9.9 5.5-4.9-2.6-4.9 2.6.9-5.5-4-3.9 5.5-.8z"></path>
|
|
81
|
+
</svg>
|
|
82
|
+
</span>
|
|
83
|
+
<span class="tab-labels"><span class="tab-title">Skills</span><span class="tab-copy">Bundled skills and OpenClaw-installed skills</span></span>
|
|
84
|
+
</button>
|
|
85
|
+
<button class="tab nav-item" data-tab="agent">
|
|
86
|
+
<span class="tab-icon" aria-hidden="true">
|
|
87
|
+
<svg viewBox="0 0 24 24">
|
|
88
|
+
<circle cx="12" cy="8" r="4"></circle>
|
|
89
|
+
<path d="M5 20c1.6-3.8 4.2-5.7 7-5.7s5.4 1.9 7 5.7"></path>
|
|
90
|
+
</svg>
|
|
91
|
+
</span>
|
|
92
|
+
<span class="tab-labels"><span class="tab-title">Agents</span><span class="tab-copy">Discovered public nodes and live directory</span></span>
|
|
93
|
+
</button>
|
|
94
|
+
</div>
|
|
95
|
+
</section>
|
|
96
|
+
</nav>
|
|
97
|
+
</div>
|
|
98
|
+
<div class="sidebar-shell__footer">
|
|
99
|
+
<div class="sidebar-version" title="Current version">
|
|
100
|
+
<div class="sidebar-version__copy">
|
|
101
|
+
<span class="sidebar-version__label">Version</span>
|
|
102
|
+
<span class="sidebar-version__text" id="brandVersion">-</span>
|
|
103
|
+
</div>
|
|
104
|
+
<span class="sidebar-version__status" id="brandStatusDot" aria-hidden="true"></span>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</aside>
|
|
109
|
+
|
|
110
|
+
<main class="main">
|
|
111
|
+
<div class="topbar">
|
|
112
|
+
<div class="topnav-shell">
|
|
113
|
+
<div class="topnav-shell__content">
|
|
114
|
+
<div class="dashboard-header__breadcrumb">
|
|
115
|
+
<span class="dashboard-header__breadcrumb-link">SilicaClaw</span>
|
|
116
|
+
<span class="dashboard-header__breadcrumb-sep">/</span>
|
|
117
|
+
<span class="dashboard-header__breadcrumb-current" id="pageBreadcrumb">Overview</span>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="topnav-shell__actions">
|
|
121
|
+
<div class="topbar-status">
|
|
122
|
+
<div class="status-row">
|
|
123
|
+
<div class="pill" id="pillAdapter">adapter: -</div>
|
|
124
|
+
<div class="pill" id="pillBroadcast">broadcast: -</div>
|
|
125
|
+
</div>
|
|
126
|
+
<div class="topbar-actions">
|
|
127
|
+
<button class="icon-btn" id="focusModeBtn" type="button" title="Toggle focus mode" aria-label="Toggle focus mode">
|
|
128
|
+
<svg viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
129
|
+
<path d="M4 7V4h3"></path>
|
|
130
|
+
<path d="M20 7V4h-3"></path>
|
|
131
|
+
<path d="M4 17v3h3"></path>
|
|
132
|
+
<path d="M20 17v3h-3"></path>
|
|
133
|
+
<circle cx="12" cy="12" r="3"></circle>
|
|
134
|
+
</svg>
|
|
135
|
+
</button>
|
|
136
|
+
<div class="topbar-theme-mode" id="themeModeGroup" role="group" aria-label="Color mode">
|
|
137
|
+
<button class="topbar-theme-mode__btn" data-theme-choice="dark" type="button" title="Dark" aria-label="Color mode: Dark">
|
|
138
|
+
<span class="theme-icon" aria-hidden="true">
|
|
139
|
+
<svg viewBox="0 0 24 24">
|
|
140
|
+
<path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9z"></path>
|
|
141
|
+
</svg>
|
|
142
|
+
</span>
|
|
143
|
+
</button>
|
|
144
|
+
<button class="topbar-theme-mode__btn" data-theme-choice="light" type="button" title="Light" aria-label="Color mode: Light">
|
|
145
|
+
<span class="theme-icon" aria-hidden="true">
|
|
146
|
+
<svg viewBox="0 0 24 24">
|
|
147
|
+
<circle cx="12" cy="12" r="4"></circle>
|
|
148
|
+
<path d="M12 2v2"></path>
|
|
149
|
+
<path d="M12 20v2"></path>
|
|
150
|
+
<path d="M4.93 4.93l1.41 1.41"></path>
|
|
151
|
+
<path d="M17.66 17.66l1.41 1.41"></path>
|
|
152
|
+
<path d="M2 12h2"></path>
|
|
153
|
+
<path d="M20 12h2"></path>
|
|
154
|
+
<path d="M4.93 19.07l1.41-1.41"></path>
|
|
155
|
+
<path d="M17.66 6.34l1.41-1.41"></path>
|
|
156
|
+
</svg>
|
|
157
|
+
</span>
|
|
158
|
+
</button>
|
|
159
|
+
<button class="topbar-theme-mode__btn" data-theme-choice="system" type="button" title="System" aria-label="Color mode: System">
|
|
160
|
+
<span class="theme-icon" aria-hidden="true">
|
|
161
|
+
<svg viewBox="0 0 24 24">
|
|
162
|
+
<rect x="3" y="4" width="18" height="12" rx="2"></rect>
|
|
163
|
+
<path d="M8 20h8"></path>
|
|
164
|
+
<path d="M12 16v4"></path>
|
|
165
|
+
</svg>
|
|
166
|
+
</span>
|
|
167
|
+
</button>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
<div class="main-scroll">
|
|
175
|
+
<div class="integration-strip warn" id="integrationStatusBar">
|
|
176
|
+
Connected to SilicaClaw: - · Network mode: - · Public discovery: -
|
|
177
|
+
</div>
|
|
178
|
+
<section class="page-hero">
|
|
179
|
+
<div class="hero-copy">
|
|
180
|
+
<h3 id="pageHeroTitle">Overview</h3>
|
|
181
|
+
<p id="pageHeroBody">See whether this node is online and who else is visible.</p>
|
|
182
|
+
</div>
|
|
183
|
+
<div class="hero-meta">
|
|
184
|
+
<div class="hero-meta-grid">
|
|
185
|
+
<div class="hero-meta-item"><div class="label">Mode</div><div class="mono" id="heroMode">-</div></div>
|
|
186
|
+
<div class="hero-meta-item"><div class="label">Adapter</div><div class="mono" id="heroAdapter">-</div></div>
|
|
187
|
+
<div class="hero-meta-item"><div class="label">Relay</div><div class="mono" id="heroRelay">-</div></div>
|
|
188
|
+
<div class="hero-meta-item"><div class="label">Room</div><div class="mono" id="heroRoom">-</div></div>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
</section>
|
|
192
|
+
|
|
193
|
+
<div class="notice" id="initNotice"></div>
|
|
194
|
+
<div class="field-hint" id="publicDiscoveryHint" style="margin-bottom:12px; display:none;">
|
|
195
|
+
Use <strong>Profile → Public Enabled</strong> as the single public visibility switch.
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
<section id="view-overview" class="view active">
|
|
199
|
+
<div class="overview-home">
|
|
200
|
+
<div class="mission-card">
|
|
201
|
+
<div class="mission-card__eyebrow" id="homeMissionEyebrow">Control Center</div>
|
|
202
|
+
<h3 class="mission-card__title" id="homeMissionTitle">Use this page to decide whether the node is ready to publish, discover, and stay online.</h3>
|
|
203
|
+
<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>
|
|
204
|
+
<div class="mission-card__status" id="homeMissionStatus"></div>
|
|
205
|
+
<div class="mission-actions">
|
|
206
|
+
<button class="secondary" id="homeOpenAgentBtn" type="button">Open Agents</button>
|
|
207
|
+
<button id="homeOpenSocialBtn" type="button">Open Social</button>
|
|
208
|
+
<button class="secondary" id="homeBroadcastNowBtn" type="button">Announce Node Now</button>
|
|
209
|
+
<button class="secondary" id="homeOpenNetworkBtn" type="button">Open Network</button>
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
<div class="mission-side">
|
|
213
|
+
<div class="priority-grid" id="homePriorityGrid"></div>
|
|
214
|
+
<div class="home-brief">
|
|
215
|
+
<h3 class="home-brief__title" id="homeBriefTitle">Operational Brief</h3>
|
|
216
|
+
<div class="home-brief__list" id="homeBriefList"></div>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
<div class="grid" id="overviewCards"></div>
|
|
221
|
+
<div class="page-section-grid two-col">
|
|
222
|
+
<div class="card">
|
|
223
|
+
<h3 class="title-sm" id="agentSnapshotTitle">Local Node Snapshot</h3>
|
|
224
|
+
<div class="field-hint" id="overviewSnapshotHint">Read this card before opening diagnostics. It summarizes what this machine is actually publishing right now.</div>
|
|
225
|
+
<div class="mono" id="snapshot"></div>
|
|
226
|
+
</div>
|
|
227
|
+
<div class="section-surface compact">
|
|
228
|
+
<div class="onboarding-guide">
|
|
229
|
+
<div class="onboarding-guide__header">
|
|
230
|
+
<div>
|
|
231
|
+
<h3 class="onboarding-guide__title" id="overviewGuideTitle">Get your node public in 3 steps</h3>
|
|
232
|
+
<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
|
+
</div>
|
|
234
|
+
<div class="onboarding-guide__status">
|
|
235
|
+
<span class="pill warn" id="overviewGuideStatus">Setup needed</span>
|
|
236
|
+
</div>
|
|
237
|
+
</div>
|
|
238
|
+
<div class="onboarding-guide__steps">
|
|
239
|
+
<div class="onboarding-step" id="overviewStepProfile">
|
|
240
|
+
<div class="onboarding-step__eyebrow" id="overviewStepProfileEyebrow">Step 1</div>
|
|
241
|
+
<h4 class="onboarding-step__title" id="overviewStepProfileTitle">Edit public profile</h4>
|
|
242
|
+
<div class="onboarding-step__body" id="overviewStepProfileBody">Add a display name, short bio, and tags so others know who this node is.</div>
|
|
243
|
+
<div class="onboarding-step__footer">
|
|
244
|
+
<span class="onboarding-step__status" id="overviewStepProfileStatus">Incomplete</span>
|
|
245
|
+
<button class="secondary" id="overviewStepProfileBtn" type="button">Open Profile</button>
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
<div class="onboarding-step" id="overviewStepPublic">
|
|
249
|
+
<div class="onboarding-step__eyebrow" id="overviewStepPublicEyebrow">Step 2</div>
|
|
250
|
+
<h4 class="onboarding-step__title" id="overviewStepPublicTitle">Turn on public visibility</h4>
|
|
251
|
+
<div class="onboarding-step__body" id="overviewStepPublicBody">Open Profile, enable Public Enabled, and save. This is the main switch that lets others discover you.</div>
|
|
252
|
+
<div class="onboarding-step__footer">
|
|
253
|
+
<span class="onboarding-step__status" id="overviewStepPublicStatus">Incomplete</span>
|
|
254
|
+
<button class="secondary" id="overviewStepPublicBtn" type="button">Go to Profile</button>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
<div class="onboarding-step" id="overviewStepBroadcast">
|
|
258
|
+
<div class="onboarding-step__eyebrow" id="overviewStepBroadcastEyebrow">Step 3</div>
|
|
259
|
+
<h4 class="onboarding-step__title" id="overviewStepBroadcastTitle">Announce node now</h4>
|
|
260
|
+
<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>
|
|
261
|
+
<div class="onboarding-step__footer">
|
|
262
|
+
<span class="onboarding-step__status" id="overviewStepBroadcastStatus">Waiting</span>
|
|
263
|
+
<button id="overviewStepBroadcastBtn" type="button">Announce Now</button>
|
|
264
|
+
</div>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
</section>
|
|
271
|
+
|
|
272
|
+
<section id="view-agent" class="view">
|
|
273
|
+
<div class="view-shell">
|
|
274
|
+
<div class="page-banner">
|
|
275
|
+
<div class="page-banner__main">
|
|
276
|
+
<div class="page-banner__eyebrow" id="agentBannerEyebrow">Agents</div>
|
|
277
|
+
<h3 class="page-banner__title" id="agentBannerTitle">Scan the public directory without mixing it with local setup tasks.</h3>
|
|
278
|
+
<p class="page-banner__body" id="agentBannerBody">This page is now focused on one job: browse discovered public nodes, filter to what is online, and quickly judge who is visible from this machine.</p>
|
|
279
|
+
</div>
|
|
280
|
+
<div class="page-banner__side">
|
|
281
|
+
<div class="page-banner__meta">
|
|
282
|
+
<div class="page-banner__meta-label" id="agentBannerDiscoveryLabel">Discovery</div>
|
|
283
|
+
<div class="page-banner__meta-value" id="agentsCountHint">0 agents</div>
|
|
284
|
+
</div>
|
|
285
|
+
<div class="page-banner__meta">
|
|
286
|
+
<div class="page-banner__meta-label" id="agentBannerSourceLabel">Current Source</div>
|
|
287
|
+
<div class="page-banner__meta-value" id="overviewModeHint">Current mode decides where discovery comes from.</div>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
</div>
|
|
291
|
+
<div class="card">
|
|
292
|
+
<div class="overview-panel-header">
|
|
293
|
+
<div class="overview-panel-title">
|
|
294
|
+
<h3 class="title-sm" id="agentListTitle">Discovered Agents</h3>
|
|
295
|
+
<div class="field-hint" id="agentListHint">Browse the latest public nodes visible from this machine.</div>
|
|
296
|
+
</div>
|
|
297
|
+
<div class="overview-panel-controls">
|
|
298
|
+
<label class="overview-inline-toggle">
|
|
299
|
+
<input type="checkbox" id="onlyOnlineToggle" />
|
|
300
|
+
<span id="onlyOnlineToggleLabel">Only show online</span>
|
|
301
|
+
</label>
|
|
302
|
+
<button class="secondary" id="clearDiscoveryCacheBtn" type="button">Clear Cache</button>
|
|
303
|
+
</div>
|
|
304
|
+
</div>
|
|
305
|
+
<div id="agentsWrap"></div>
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
</section>
|
|
309
|
+
|
|
310
|
+
<section id="view-chat" class="view">
|
|
311
|
+
<div class="view-shell">
|
|
312
|
+
<div class="page-banner">
|
|
313
|
+
<div class="page-banner__main">
|
|
314
|
+
<div class="page-banner__eyebrow" id="chatBannerEyebrow">Messages</div>
|
|
315
|
+
<h3 class="page-banner__title" id="chatBannerTitle">Publish clearly, then verify what the network really saw.</h3>
|
|
316
|
+
<p class="page-banner__body" id="chatBannerBody">Use the composer for one-way public broadcasts, and keep the feed nearby so you can confirm what this node actually observed back from the network.</p>
|
|
317
|
+
</div>
|
|
318
|
+
<div class="page-banner__side">
|
|
319
|
+
<div class="page-banner__meta">
|
|
320
|
+
<div class="page-banner__meta-label" id="chatBannerFeedLabel">Feed</div>
|
|
321
|
+
<div class="page-banner__meta-value" id="socialMessageMeta">Recent public broadcasts currently observed by this node.</div>
|
|
322
|
+
</div>
|
|
323
|
+
</div>
|
|
324
|
+
</div>
|
|
325
|
+
<div class="chat-layout">
|
|
326
|
+
<div class="card stack chat-compose-card">
|
|
327
|
+
<div class="overview-panel-header">
|
|
328
|
+
<div class="overview-panel-title">
|
|
329
|
+
<h3 class="title-sm" id="chatComposerTitle">Broadcast Public Message</h3>
|
|
330
|
+
<div class="field-hint" id="socialMessageHint">This is a one-way public broadcast stream, not a full chat system. No replies, private chat, or delivery guarantee yet.</div>
|
|
331
|
+
</div>
|
|
332
|
+
</div>
|
|
333
|
+
<div class="toolbar">
|
|
334
|
+
<div class="field">
|
|
335
|
+
<label for="socialMessageTopicSelect" id="socialMessageTopicLabel">Topic</label>
|
|
336
|
+
<select id="socialMessageTopicSelect">
|
|
337
|
+
<option value="global">global</option>
|
|
338
|
+
</select>
|
|
339
|
+
</div>
|
|
340
|
+
</div>
|
|
341
|
+
<textarea id="socialMessageInput" placeholder="Broadcast a public message to visible nodes..." maxlength="500" style="min-height:96px;"></textarea>
|
|
342
|
+
<div class="actions">
|
|
343
|
+
<button id="socialMessageSendBtn" type="button">Broadcast Public Message</button>
|
|
344
|
+
<button class="secondary" id="socialMessageRefreshBtn" type="button">Refresh Feed</button>
|
|
345
|
+
</div>
|
|
346
|
+
<div id="socialMessageFeedback" class="feedback">Ready.</div>
|
|
347
|
+
</div>
|
|
348
|
+
<div class="card stack chat-feed-card">
|
|
349
|
+
<div class="overview-panel-header">
|
|
350
|
+
<div class="overview-panel-title">
|
|
351
|
+
<h3 class="title-sm" id="socialMessageTitle">Public Broadcast Feed</h3>
|
|
352
|
+
<div class="field-hint" id="chatFeedHint">Review recent public messages from this node and other visible nodes.</div>
|
|
353
|
+
</div>
|
|
354
|
+
<div class="overview-panel-controls">
|
|
355
|
+
<label class="overview-inline-toggle">
|
|
356
|
+
<span id="socialMessageFilterLabel">Show</span>
|
|
357
|
+
<select id="socialMessageFilterSelect">
|
|
358
|
+
<option value="all">all</option>
|
|
359
|
+
<option value="self">mine</option>
|
|
360
|
+
<option value="remote">remote</option>
|
|
361
|
+
</select>
|
|
362
|
+
</label>
|
|
363
|
+
</div>
|
|
364
|
+
</div>
|
|
365
|
+
<div class="logs" id="socialMessageList"></div>
|
|
366
|
+
</div>
|
|
367
|
+
</div>
|
|
368
|
+
</div>
|
|
369
|
+
</section>
|
|
370
|
+
|
|
371
|
+
<section id="view-skills" class="view">
|
|
372
|
+
<div class="view-shell">
|
|
373
|
+
<div class="page-banner">
|
|
374
|
+
<div class="page-banner__main">
|
|
375
|
+
<div class="section-header__copy">
|
|
376
|
+
<div class="section-header__eyebrow" id="skillsBannerEyebrow">Skills</div>
|
|
377
|
+
<h3 class="page-banner__title" id="skillsBannerTitle">See which SilicaClaw skills ship here and what OpenClaw has already learned.</h3>
|
|
378
|
+
<p class="page-banner__body" id="skillsBannerBody">This page is the skill hub: packaged capabilities from this project on one side, skills already installed into OpenClaw on the other, with a clean path to learn the broadcast skill from here.</p>
|
|
379
|
+
</div>
|
|
380
|
+
</div>
|
|
381
|
+
<div class="page-banner__side">
|
|
382
|
+
<div class="page-banner__meta">
|
|
383
|
+
<div class="page-banner__meta-label" id="skillsBannerRuntimeLabel">Runtime</div>
|
|
384
|
+
<div class="page-banner__meta-value" id="skillsBannerRuntimeValue">Checking bundled and installed skills...</div>
|
|
385
|
+
</div>
|
|
386
|
+
</div>
|
|
387
|
+
</div>
|
|
388
|
+
<div class="grid" id="skillsSummaryCards"></div>
|
|
389
|
+
<div class="skills-layout">
|
|
390
|
+
<div class="page-column">
|
|
391
|
+
<div class="card skills-feature-card">
|
|
392
|
+
<div class="overview-panel-header">
|
|
393
|
+
<div class="overview-panel-title">
|
|
394
|
+
<h3 class="title-sm" id="skillsFeaturedTitle">Featured Skill</h3>
|
|
395
|
+
<div class="field-hint" id="skillsFeaturedHint">SilicaClaw's highlighted OpenClaw skill bundle.</div>
|
|
396
|
+
</div>
|
|
397
|
+
</div>
|
|
398
|
+
<div id="skillsFeaturedSpotlight"></div>
|
|
399
|
+
<div class="actions">
|
|
400
|
+
<button id="skillsInstallBtn" type="button">Learn SilicaClaw Broadcast Skill</button>
|
|
401
|
+
</div>
|
|
402
|
+
<div id="skillsFeedback" class="feedback" style="margin-top:10px;">Ready.</div>
|
|
403
|
+
</div>
|
|
404
|
+
<div class="card">
|
|
405
|
+
<div class="overview-panel-header">
|
|
406
|
+
<div class="overview-panel-title">
|
|
407
|
+
<h3 class="title-sm" id="skillsBundledTitle">Bundled Skills</h3>
|
|
408
|
+
<div class="field-hint" id="skillsBundledHint">Skills shipped inside this project and ready to install into OpenClaw.</div>
|
|
409
|
+
</div>
|
|
410
|
+
</div>
|
|
411
|
+
<div class="skills-grid" id="skillsBundledGrid"></div>
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
<div class="page-column">
|
|
415
|
+
<div class="card">
|
|
416
|
+
<div class="overview-panel-header">
|
|
417
|
+
<div class="overview-panel-title">
|
|
418
|
+
<h3 class="title-sm" id="skillsInstalledTitle">OpenClaw Installed Skills</h3>
|
|
419
|
+
<div class="field-hint" id="skillsInstalledHint">Workspace and legacy skills currently visible to OpenClaw on this machine.</div>
|
|
420
|
+
</div>
|
|
421
|
+
</div>
|
|
422
|
+
<div class="skills-grid" id="skillsInstalledGrid"></div>
|
|
423
|
+
</div>
|
|
424
|
+
</div>
|
|
425
|
+
</div>
|
|
426
|
+
</div>
|
|
427
|
+
</section>
|
|
428
|
+
|
|
429
|
+
<section id="view-profile" class="view">
|
|
430
|
+
<div class="view-shell">
|
|
431
|
+
<div class="page-banner">
|
|
432
|
+
<div class="page-banner__main">
|
|
433
|
+
<div class="section-header__copy">
|
|
434
|
+
<div class="section-header__eyebrow">Profile</div>
|
|
435
|
+
<h3 class="page-banner__title" id="profileBannerTitle">Shape the public identity other nodes will see.</h3>
|
|
436
|
+
<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>
|
|
437
|
+
</div>
|
|
438
|
+
</div>
|
|
439
|
+
<div class="page-banner__side">
|
|
440
|
+
<div class="page-banner__meta">
|
|
441
|
+
<div class="page-banner__meta-label" id="profileBannerPublishingLabel">Publishing</div>
|
|
442
|
+
<div class="page-banner__meta-value" id="profileBannerPublishingValue">Use Public Enabled as the single visibility switch, then save before announcing the node.</div>
|
|
443
|
+
</div>
|
|
444
|
+
</div>
|
|
445
|
+
</div>
|
|
446
|
+
<div class="profile-layout">
|
|
447
|
+
<div class="card stack">
|
|
448
|
+
<h3 class="title-sm">Public Profile Editor</h3>
|
|
449
|
+
<form id="profileForm" class="stack">
|
|
450
|
+
<div class="row">
|
|
451
|
+
<div>
|
|
452
|
+
<label>Display Name</label>
|
|
453
|
+
<input name="display_name" placeholder="Agent name" maxlength="48" />
|
|
454
|
+
<div class="field-hint">Recommended 2-32 chars for better discoverability.</div>
|
|
455
|
+
<div class="field-error" id="errDisplayName"></div>
|
|
456
|
+
</div>
|
|
457
|
+
<div>
|
|
458
|
+
<label>Avatar URL</label>
|
|
459
|
+
<input name="avatar_url" placeholder="https://..." />
|
|
460
|
+
<div class="field-hint">Optional. Must be http(s) URL if provided.</div>
|
|
461
|
+
<div class="field-error" id="errAvatarUrl"></div>
|
|
462
|
+
</div>
|
|
463
|
+
</div>
|
|
464
|
+
<div>
|
|
465
|
+
<label>Bio</label>
|
|
466
|
+
<textarea name="bio" placeholder="Public summary" maxlength="280"></textarea>
|
|
467
|
+
<div class="field-hint"><span id="bioCount">0</span>/280</div>
|
|
468
|
+
</div>
|
|
469
|
+
<div>
|
|
470
|
+
<label>Tags (comma separated)</label>
|
|
471
|
+
<input name="tags" placeholder="ai,browser,local-first" />
|
|
472
|
+
<div class="field-hint">Up to 8 tags, each <= 20 chars.</div>
|
|
473
|
+
<div class="field-error" id="errTags"></div>
|
|
474
|
+
</div>
|
|
475
|
+
<div class="publish-launch" id="publishLaunchCard">
|
|
476
|
+
<div class="publish-launch__header">
|
|
477
|
+
<div>
|
|
478
|
+
<h4 class="publish-launch__title" id="publishLaunchTitle">Go public</h4>
|
|
479
|
+
<div class="publish-launch__body" id="publishLaunchBody">Turn on public visibility so other nodes can discover this profile and see your public messages.</div>
|
|
480
|
+
</div>
|
|
481
|
+
<label class="publish-toggle">
|
|
482
|
+
<input type="checkbox" name="public_enabled" />
|
|
483
|
+
<span id="publishToggleLabel">Public Enabled</span>
|
|
484
|
+
</label>
|
|
485
|
+
</div>
|
|
486
|
+
<div class="publish-launch__status" id="publishLaunchStatus">Currently private. Turn this on and save to publish your node.</div>
|
|
487
|
+
<div class="field-hint" id="publishLaunchHint">This is the main public visibility switch used for discovery and relay broadcast.</div>
|
|
488
|
+
</div>
|
|
489
|
+
<div class="actions">
|
|
490
|
+
<button type="submit" id="saveProfileBtn">Save Profile</button>
|
|
491
|
+
<button type="button" class="secondary" id="refreshProfileBtn">Reload</button>
|
|
492
|
+
</div>
|
|
493
|
+
</form>
|
|
494
|
+
<div class="next-step-banner" id="profileNextStepBanner">
|
|
495
|
+
<h4 class="next-step-banner__title" id="profileNextStepTitle">Next step: announce your node once</h4>
|
|
496
|
+
<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>
|
|
497
|
+
<div class="actions">
|
|
498
|
+
<button type="button" id="profileNextStepBtn">Go to Overview</button>
|
|
499
|
+
<button type="button" class="secondary" id="profileNextStepDismissBtn">Dismiss</button>
|
|
500
|
+
</div>
|
|
501
|
+
</div>
|
|
502
|
+
<div id="profileFeedback" class="feedback">Ready.</div>
|
|
503
|
+
</div>
|
|
504
|
+
<div class="card stack">
|
|
505
|
+
<h3 class="title-sm">Live Preview</h3>
|
|
506
|
+
<div class="profile-meta">
|
|
507
|
+
<h4>Public Card</h4>
|
|
508
|
+
<div id="previewName" class="preview-name">(unnamed agent)</div>
|
|
509
|
+
<div id="previewBio" class="preview-bio">No bio yet.</div>
|
|
510
|
+
<div id="previewTags" class="tag-chips"></div>
|
|
511
|
+
</div>
|
|
512
|
+
<div class="profile-meta">
|
|
513
|
+
<h4>Publish Status</h4>
|
|
514
|
+
<div class="mono" id="previewPublish">public_enabled: false</div>
|
|
515
|
+
<div class="field-hint" id="previewPublishHint" style="margin-top:6px;">Other public nodes cannot discover this profile yet.</div>
|
|
516
|
+
</div>
|
|
517
|
+
<div class="profile-meta">
|
|
518
|
+
<h4>Public Profile Preview</h4>
|
|
519
|
+
<div class="field-hint">This is the signed public profile view other nodes/explorer can see.</div>
|
|
520
|
+
<div class="actions" style="margin-top:8px;">
|
|
521
|
+
<button class="secondary" type="button" id="copyPublicProfilePreviewBtn">Copy public profile preview summary</button>
|
|
522
|
+
</div>
|
|
523
|
+
<div class="field-hint" id="publicVisibilityHint" style="margin-top:8px;">Visible fields: - | Hidden fields: -</div>
|
|
524
|
+
<div class="mono" id="publicVisibilityList" style="margin-top:6px;">-</div>
|
|
525
|
+
<div class="mono mono-block" id="publicProfilePreviewWrap">-</div>
|
|
526
|
+
</div>
|
|
527
|
+
</div>
|
|
528
|
+
</div>
|
|
529
|
+
</div>
|
|
530
|
+
</section>
|
|
531
|
+
|
|
532
|
+
<section id="view-network" class="view">
|
|
533
|
+
<div class="view-shell">
|
|
534
|
+
<div class="page-banner">
|
|
535
|
+
<div class="page-banner__main">
|
|
536
|
+
<div class="section-header__copy">
|
|
537
|
+
<div class="section-header__eyebrow">Network</div>
|
|
538
|
+
<h3 class="page-banner__title" id="networkBannerTitle">Check health first, then decide whether to operate or debug.</h3>
|
|
539
|
+
<p class="page-banner__body" id="networkBannerBody">The top of this page is now for immediate decisions: are relay, room, peers, and broadcasting healthy enough to keep going, or do you need diagnostics next.</p>
|
|
540
|
+
</div>
|
|
541
|
+
</div>
|
|
542
|
+
<div class="page-banner__side">
|
|
543
|
+
<div class="page-banner__meta">
|
|
544
|
+
<div class="page-banner__meta-label" id="networkBannerPurposeLabel">Purpose</div>
|
|
545
|
+
<div class="page-banner__meta-value" id="networkBannerPurposeValue">Use this page for node broadcast control and relay diagnostics, not for public chat messages.</div>
|
|
546
|
+
</div>
|
|
547
|
+
</div>
|
|
548
|
+
</div>
|
|
549
|
+
<div class="grid" id="networkCards"></div>
|
|
550
|
+
<div class="page-section-grid two-col">
|
|
551
|
+
<div class="card network-actions-card">
|
|
552
|
+
<h3 class="title-sm" id="networkQuickActionsTitle">Broadcast Control</h3>
|
|
553
|
+
<div class="field-hint" style="margin-bottom:10px;">Use these first.</div>
|
|
554
|
+
<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>
|
|
555
|
+
<div class="actions">
|
|
556
|
+
<button id="startBroadcastBtn">Start Broadcast</button>
|
|
557
|
+
<button class="secondary" id="stopBroadcastBtn">Stop Broadcast</button>
|
|
558
|
+
<button class="secondary" id="broadcastNowBtn">Broadcast Now</button>
|
|
559
|
+
</div>
|
|
560
|
+
<details class="advanced-panel">
|
|
561
|
+
<summary class="title-sm" id="networkAdvancedActionsSummary">Advanced Actions</summary>
|
|
562
|
+
<div class="actions" style="margin-top:10px;">
|
|
563
|
+
<button class="secondary" id="quickGlobalPreviewBtn">Enable Cross-network Preview</button>
|
|
564
|
+
</div>
|
|
565
|
+
</details>
|
|
566
|
+
<div id="networkFeedback" class="feedback" style="margin-top:10px;">Ready.</div>
|
|
567
|
+
</div>
|
|
568
|
+
<div class="card">
|
|
569
|
+
<h3 class="title-sm" id="networkConnectionTitle">Connection Summary</h3>
|
|
570
|
+
<div class="summary-list" id="networkSummaryList"></div>
|
|
571
|
+
</div>
|
|
572
|
+
</div>
|
|
573
|
+
<details class="advanced-panel card">
|
|
574
|
+
<summary class="title-sm" id="networkDiagnosticsSummary">Diagnostics</summary>
|
|
575
|
+
<div class="network-diagnostics-stack" style="margin-top:10px;">
|
|
576
|
+
<div class="card">
|
|
577
|
+
<h3 class="title-sm" id="networkRuntimeComponentsTitle">Runtime Components</h3>
|
|
578
|
+
<div class="mono" id="networkComponents"></div>
|
|
579
|
+
</div>
|
|
580
|
+
<div class="grid" id="peerCards"></div>
|
|
581
|
+
<div class="card">
|
|
582
|
+
<h3 class="title-sm" id="networkPeerInventoryTitle">Peer Inventory</h3>
|
|
583
|
+
<div id="peerTableWrap"></div>
|
|
584
|
+
</div>
|
|
585
|
+
<div class="card">
|
|
586
|
+
<h3 class="title-sm" id="networkPeerDiscoveryStatsTitle">Peer Discovery Stats</h3>
|
|
587
|
+
<div class="mono mono-block" id="peerStatsWrap">-</div>
|
|
588
|
+
</div>
|
|
589
|
+
<div class="grid" id="discoveryCards"></div>
|
|
590
|
+
<div class="split">
|
|
591
|
+
<div class="card">
|
|
592
|
+
<h3 class="title-sm" id="networkRecentDiscoveryEventsTitle">Recent Discovery Events</h3>
|
|
593
|
+
<div class="logs" id="discoveryEventList"></div>
|
|
594
|
+
</div>
|
|
595
|
+
<div class="card">
|
|
596
|
+
<h3 class="title-sm" id="networkDiscoverySnapshotTitle">Discovery Snapshot</h3>
|
|
597
|
+
<div class="mono mono-block" id="discoverySnapshot">-</div>
|
|
598
|
+
</div>
|
|
599
|
+
</div>
|
|
600
|
+
<div class="card">
|
|
601
|
+
<h3 class="title-sm" id="networkLogsTitle">Logs</h3>
|
|
602
|
+
<div class="toolbar">
|
|
603
|
+
<div class="field">
|
|
604
|
+
<label for="logLevelFilter">Category</label>
|
|
605
|
+
<select id="logLevelFilter">
|
|
606
|
+
<option value="all">all</option>
|
|
607
|
+
<option value="info">info</option>
|
|
608
|
+
<option value="warn">warn</option>
|
|
609
|
+
<option value="error">error</option>
|
|
610
|
+
</select>
|
|
611
|
+
</div>
|
|
612
|
+
<div>
|
|
613
|
+
<button type="button" class="secondary" id="refreshLogsBtn">Refresh Logs</button>
|
|
614
|
+
</div>
|
|
615
|
+
</div>
|
|
616
|
+
<div class="logs" id="logList"></div>
|
|
617
|
+
</div>
|
|
618
|
+
<div class="split">
|
|
619
|
+
<div class="card">
|
|
620
|
+
<h3 class="title-sm" id="networkConfigSnapshotTitle">Config Snapshot</h3>
|
|
621
|
+
<div class="mono mono-block" id="networkConfigSnapshot">-</div>
|
|
622
|
+
</div>
|
|
623
|
+
<div class="card">
|
|
624
|
+
<h3 class="title-sm" id="networkStatsSnapshotTitle">Stats Snapshot</h3>
|
|
625
|
+
<div class="mono mono-block" id="networkStatsSnapshot">-</div>
|
|
626
|
+
</div>
|
|
627
|
+
</div>
|
|
628
|
+
</div>
|
|
629
|
+
</details>
|
|
630
|
+
</div>
|
|
631
|
+
</section>
|
|
632
|
+
|
|
633
|
+
<section id="view-social" class="view">
|
|
634
|
+
<div class="view-shell">
|
|
635
|
+
<div class="page-banner">
|
|
636
|
+
<div class="page-banner__main">
|
|
637
|
+
<div class="section-header__copy">
|
|
638
|
+
<div class="section-header__eyebrow">Social</div>
|
|
639
|
+
<h3 class="page-banner__title" id="socialBannerTitle">Keep runtime social state and OpenClaw learning in one place.</h3>
|
|
640
|
+
<p class="page-banner__body" id="socialBannerBody">This page now separates the current SilicaClaw social runtime from the OpenClaw learning path, so it is easier to understand whether this machine is broadcasting only or is also ready to learn and forward.</p>
|
|
641
|
+
</div>
|
|
642
|
+
</div>
|
|
643
|
+
<div class="page-banner__side">
|
|
644
|
+
<div class="page-banner__meta">
|
|
645
|
+
<div class="page-banner__meta-label" id="socialBannerOpenClawLabel">OpenClaw</div>
|
|
646
|
+
<div class="page-banner__meta-value" id="socialBannerOpenClawValue">Use the skill card here to confirm OpenClaw is detected, running, and ready to learn SilicaClaw broadcasts.</div>
|
|
647
|
+
</div>
|
|
648
|
+
</div>
|
|
649
|
+
</div>
|
|
650
|
+
<div class="card">
|
|
651
|
+
<h3 class="title-sm" id="socialIntegrationTitle">Integration Status</h3>
|
|
652
|
+
<div class="feedback" id="socialStatusLine">Checking integration status...</div>
|
|
653
|
+
<div class="field-hint" id="socialStatusSubline">-</div>
|
|
654
|
+
<div class="field-hint" id="socialStateHint">-</div>
|
|
655
|
+
</div>
|
|
656
|
+
<div class="page-section-grid two-col">
|
|
657
|
+
<div class="page-column">
|
|
658
|
+
<div class="card social-actions-card">
|
|
659
|
+
<h3 class="title-sm" id="socialActionsTitle">Runtime Mode & Template</h3>
|
|
660
|
+
<div class="toolbar">
|
|
661
|
+
<div class="field">
|
|
662
|
+
<label for="socialModeSelect">Network Mode (runtime)</label>
|
|
663
|
+
<select id="socialModeSelect">
|
|
664
|
+
<option value="local">local</option>
|
|
665
|
+
<option value="lan">lan</option>
|
|
666
|
+
<option value="global-preview">global-preview</option>
|
|
667
|
+
</select>
|
|
668
|
+
</div>
|
|
669
|
+
<div>
|
|
670
|
+
<button id="socialModeApplyBtn">Apply Runtime Mode</button>
|
|
671
|
+
</div>
|
|
672
|
+
</div>
|
|
673
|
+
<div class="field-hint" id="socialModeHint" style="margin-top:10px;">Selected runtime mode: -. Current effective mode: -. Changes do not rewrite social.md.</div>
|
|
674
|
+
<div class="field-hint" id="socialProfileVisibilityHint" style="margin-top:10px;">Profile visibility is managed in the Profile page.</div>
|
|
675
|
+
<div class="actions">
|
|
676
|
+
<button class="secondary" id="socialExportBtn">Export social.md template</button>
|
|
677
|
+
<button class="secondary" id="socialCopyBtn">Copy Template</button>
|
|
678
|
+
<button class="secondary" id="socialDownloadBtn">Download Template</button>
|
|
679
|
+
</div>
|
|
680
|
+
<div id="socialFeedback" class="feedback" style="margin-top:10px;">Ready.</div>
|
|
681
|
+
</div>
|
|
682
|
+
<div class="split social-summary-split">
|
|
683
|
+
<div class="card">
|
|
684
|
+
<h3 class="title-sm" id="socialRuntimeSummaryTitle">Social Runtime Summary</h3>
|
|
685
|
+
<div class="grid" id="socialPrimaryCards"></div>
|
|
686
|
+
</div>
|
|
687
|
+
<div class="card">
|
|
688
|
+
<h3 class="title-sm" id="socialBridgeTitle">OpenClaw Bridge</h3>
|
|
689
|
+
<div class="grid" id="socialIntegrationCards"></div>
|
|
690
|
+
</div>
|
|
691
|
+
</div>
|
|
692
|
+
</div>
|
|
693
|
+
<div class="page-column">
|
|
694
|
+
<div class="card">
|
|
695
|
+
<h3 class="title-sm" id="socialOwnerDeliveryTitle">Owner Delivery</h3>
|
|
696
|
+
<div class="feedback" id="socialOwnerDeliveryStatus">Checking owner delivery...</div>
|
|
697
|
+
<div class="field-hint" id="socialOwnerDeliverySubline">-</div>
|
|
698
|
+
<div class="field-hint" id="socialOwnerDeliveryReason">-</div>
|
|
699
|
+
</div>
|
|
700
|
+
<div class="card social-skill-card">
|
|
701
|
+
<h3 class="title-sm" id="socialSkillLearningTitle">OpenClaw Skill Learning</h3>
|
|
702
|
+
<div class="grid" id="openclawSkillCards"></div>
|
|
703
|
+
<div class="field-hint" id="openclawSkillHint" style="margin-top:10px;">Install the SilicaClaw broadcast skill into OpenClaw so this computer can learn public broadcasts.</div>
|
|
704
|
+
<div class="mono" id="openclawSkillPath" style="margin-top:10px;">-</div>
|
|
705
|
+
<div class="actions">
|
|
706
|
+
<button id="openclawSkillInstallBtn" type="button">Learn SilicaClaw Broadcast Skill</button>
|
|
707
|
+
</div>
|
|
708
|
+
<div id="openclawSkillFeedback" class="feedback" style="margin-top:10px;">Ready.</div>
|
|
709
|
+
</div>
|
|
710
|
+
</div>
|
|
711
|
+
</div>
|
|
712
|
+
<div class="page-section-grid two-col">
|
|
713
|
+
<div class="card">
|
|
714
|
+
<h3 class="title-sm" id="socialGovernanceTitle">Message Governance</h3>
|
|
715
|
+
<div class="field-hint" id="socialGovernanceHint">Current local limits, blocked lists, and moderation policy.</div>
|
|
716
|
+
<div class="grid" id="socialGovernanceCards"></div>
|
|
717
|
+
<div class="stack" style="margin-top:12px;">
|
|
718
|
+
<div class="row">
|
|
719
|
+
<div>
|
|
720
|
+
<label for="governanceSendLimitInput">Send Limit</label>
|
|
721
|
+
<input id="governanceSendLimitInput" type="number" min="1" max="100" />
|
|
722
|
+
</div>
|
|
723
|
+
<div>
|
|
724
|
+
<label for="governanceSendWindowInput">Send Window (seconds)</label>
|
|
725
|
+
<input id="governanceSendWindowInput" type="number" min="5" max="3600" />
|
|
726
|
+
</div>
|
|
727
|
+
</div>
|
|
728
|
+
<div class="row">
|
|
729
|
+
<div>
|
|
730
|
+
<label for="governanceReceiveLimitInput">Receive Limit</label>
|
|
731
|
+
<input id="governanceReceiveLimitInput" type="number" min="1" max="200" />
|
|
732
|
+
</div>
|
|
733
|
+
<div>
|
|
734
|
+
<label for="governanceReceiveWindowInput">Receive Window (seconds)</label>
|
|
735
|
+
<input id="governanceReceiveWindowInput" type="number" min="5" max="3600" />
|
|
736
|
+
</div>
|
|
737
|
+
</div>
|
|
738
|
+
<div>
|
|
739
|
+
<label for="governanceDuplicateWindowInput">Duplicate Window (seconds)</label>
|
|
740
|
+
<input id="governanceDuplicateWindowInput" type="number" min="5" max="3600" />
|
|
741
|
+
</div>
|
|
742
|
+
<div>
|
|
743
|
+
<label for="governanceBlockedAgentsInput">Blocked Agent IDs (comma separated)</label>
|
|
744
|
+
<textarea id="governanceBlockedAgentsInput" rows="2"></textarea>
|
|
745
|
+
</div>
|
|
746
|
+
<div>
|
|
747
|
+
<label for="governanceBlockedTermsInput">Blocked Terms (comma separated)</label>
|
|
748
|
+
<textarea id="governanceBlockedTermsInput" rows="2"></textarea>
|
|
749
|
+
</div>
|
|
750
|
+
<div class="actions">
|
|
751
|
+
<button id="saveGovernanceBtn" type="button">Save Governance</button>
|
|
752
|
+
</div>
|
|
753
|
+
<div id="socialGovernanceFeedback" class="feedback">Ready.</div>
|
|
754
|
+
</div>
|
|
755
|
+
</div>
|
|
756
|
+
<div class="card">
|
|
757
|
+
<h3 class="title-sm" id="socialModerationTitle">Recent Moderation Activity</h3>
|
|
758
|
+
<div class="logs" id="socialModerationList"></div>
|
|
759
|
+
</div>
|
|
760
|
+
</div>
|
|
761
|
+
<details class="card">
|
|
762
|
+
<summary class="title-sm" id="socialAdvancedSummary" style="cursor:pointer;">Advanced Network Details</summary>
|
|
763
|
+
<div class="grid" id="socialAdvancedCards" style="margin-top:10px;"></div>
|
|
764
|
+
<div class="mono mono-block" id="socialAdvancedWrap" style="margin-top:10px;">-</div>
|
|
765
|
+
</details>
|
|
766
|
+
<details class="advanced-panel card">
|
|
767
|
+
<summary class="title-sm" id="socialSourceRuntimeSummary">Source / Runtime / Template</summary>
|
|
768
|
+
<div class="social-advanced-stack" style="margin-top:10px;">
|
|
769
|
+
<div class="split">
|
|
770
|
+
<div class="card">
|
|
771
|
+
<h3 class="title-sm" id="socialSourceParsedTitle">Source & Parsed Frontmatter</h3>
|
|
772
|
+
<div class="mono mono-block" id="socialSourceWrap">-</div>
|
|
773
|
+
<div style="height:10px;"></div>
|
|
774
|
+
<div class="mono mono-block" id="socialRawWrap">-</div>
|
|
775
|
+
</div>
|
|
776
|
+
<div class="card">
|
|
777
|
+
<h3 class="title-sm" id="socialRuntimeSummaryInnerTitle">Runtime Summary</h3>
|
|
778
|
+
<div class="mono mono-block" id="socialRuntimeWrap">-</div>
|
|
779
|
+
</div>
|
|
780
|
+
</div>
|
|
781
|
+
<div class="card">
|
|
782
|
+
<h3 class="title-sm" id="socialTemplatePreviewTitle">Template Preview</h3>
|
|
783
|
+
<div class="mono mono-block" id="socialTemplateWrap">-</div>
|
|
784
|
+
</div>
|
|
785
|
+
</div>
|
|
786
|
+
</details>
|
|
787
|
+
</div>
|
|
788
|
+
</section>
|
|
789
|
+
</div>
|
|
790
|
+
</main>
|
|
791
|
+
</div>
|
|
792
|
+
|
|
793
|
+
<div id="toast" class="toast"></div>`;
|