@silicaclaw/cli 2026.3.19-28 → 2026.3.19-29
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 +6 -0
- package/VERSION +1 -1
- package/apps/local-console/dist/apps/local-console/src/server.d.ts +10 -0
- package/apps/local-console/dist/apps/local-console/src/server.js +39 -12
- package/apps/local-console/src/server.ts +42 -12
- 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-cli.mjs +6 -3
- package/scripts/silicaclaw-gateway.mjs +18 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## v1.0 beta - 2026-03-19
|
|
4
4
|
|
|
5
|
+
### 2026.3.19-29
|
|
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.19-28
|
|
6
12
|
|
|
7
13
|
- release build:
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
v2026.3.19-
|
|
1
|
+
v2026.3.19-29
|
|
@@ -191,6 +191,8 @@ export declare class LocalNodeService {
|
|
|
191
191
|
private webrtcSeedPeers;
|
|
192
192
|
private webrtcBootstrapHints;
|
|
193
193
|
private webrtcBootstrapSources;
|
|
194
|
+
private networkStarted;
|
|
195
|
+
private networkStartupError;
|
|
194
196
|
private appVersion;
|
|
195
197
|
constructor(options?: {
|
|
196
198
|
workspaceRoot?: string;
|
|
@@ -269,6 +271,8 @@ export declare class LocalNodeService {
|
|
|
269
271
|
real_preview_transport_stats: any;
|
|
270
272
|
real_preview_discovery_stats: any;
|
|
271
273
|
webrtc_preview: {
|
|
274
|
+
started: boolean;
|
|
275
|
+
startup_error: string | null;
|
|
272
276
|
signaling_url: any;
|
|
273
277
|
signaling_endpoints: any;
|
|
274
278
|
room: any;
|
|
@@ -295,6 +299,8 @@ export declare class LocalNodeService {
|
|
|
295
299
|
limits: any;
|
|
296
300
|
adapter_config: any;
|
|
297
301
|
adapter_extra: {
|
|
302
|
+
started: boolean;
|
|
303
|
+
startup_error: string | null;
|
|
298
304
|
signaling_url: any;
|
|
299
305
|
signaling_endpoints: any;
|
|
300
306
|
room: any;
|
|
@@ -363,6 +369,8 @@ export declare class LocalNodeService {
|
|
|
363
369
|
adapter_transport_stats: any;
|
|
364
370
|
adapter_discovery_stats: any;
|
|
365
371
|
adapter_diagnostics_summary: {
|
|
372
|
+
started: boolean;
|
|
373
|
+
startup_error: string | null;
|
|
366
374
|
signaling_url: any;
|
|
367
375
|
signaling_endpoints: any;
|
|
368
376
|
room: any;
|
|
@@ -406,6 +414,8 @@ export declare class LocalNodeService {
|
|
|
406
414
|
components: any;
|
|
407
415
|
limits: any;
|
|
408
416
|
diagnostics_summary: {
|
|
417
|
+
started: boolean;
|
|
418
|
+
startup_error: string | null;
|
|
409
419
|
signaling_url: any;
|
|
410
420
|
signaling_endpoints: any;
|
|
411
421
|
room: any;
|
|
@@ -734,6 +734,8 @@ class LocalNodeService {
|
|
|
734
734
|
webrtcSeedPeers = [];
|
|
735
735
|
webrtcBootstrapHints = [];
|
|
736
736
|
webrtcBootstrapSources = [];
|
|
737
|
+
networkStarted = false;
|
|
738
|
+
networkStartupError = null;
|
|
737
739
|
appVersion = "unknown";
|
|
738
740
|
constructor(options) {
|
|
739
741
|
this.workspaceRoot = options?.workspaceRoot || resolveWorkspaceRoot();
|
|
@@ -778,9 +780,18 @@ class LocalNodeService {
|
|
|
778
780
|
async start() {
|
|
779
781
|
await this.hydrateFromDisk();
|
|
780
782
|
this.bindNetworkSubscriptions();
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
783
|
+
try {
|
|
784
|
+
await this.network.start();
|
|
785
|
+
this.networkStarted = true;
|
|
786
|
+
this.networkStartupError = null;
|
|
787
|
+
await this.log("info", `Local node started (${this.adapterMode}, mode=${this.networkMode}, signaling=${this.webrtcSignalingUrls[0] || "-"}, room=${this.webrtcRoom})`);
|
|
788
|
+
}
|
|
789
|
+
catch (error) {
|
|
790
|
+
this.networkStarted = false;
|
|
791
|
+
this.networkStartupError = error instanceof Error ? error.message : String(error);
|
|
792
|
+
await this.log("warn", `Network start failed (${this.adapterMode}, mode=${this.networkMode}): ${this.networkStartupError}`);
|
|
793
|
+
}
|
|
794
|
+
if (this.networkStarted && this.profile?.public_enabled && this.broadcastEnabled) {
|
|
784
795
|
try {
|
|
785
796
|
await this.broadcastNow("adapter_start");
|
|
786
797
|
}
|
|
@@ -788,14 +799,19 @@ class LocalNodeService {
|
|
|
788
799
|
await this.log("warn", `Initial broadcast failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
789
800
|
}
|
|
790
801
|
}
|
|
791
|
-
this.
|
|
802
|
+
if (this.networkStarted) {
|
|
803
|
+
this.startBroadcastLoop();
|
|
804
|
+
}
|
|
792
805
|
}
|
|
793
806
|
async stop() {
|
|
794
807
|
if (this.broadcaster) {
|
|
795
808
|
clearInterval(this.broadcaster);
|
|
796
809
|
this.broadcaster = null;
|
|
797
810
|
}
|
|
798
|
-
|
|
811
|
+
if (this.networkStarted) {
|
|
812
|
+
await this.network.stop();
|
|
813
|
+
}
|
|
814
|
+
this.networkStarted = false;
|
|
799
815
|
}
|
|
800
816
|
ensureLocalDirectoryBaseline() {
|
|
801
817
|
if (this.profile) {
|
|
@@ -873,6 +889,8 @@ class LocalNodeService {
|
|
|
873
889
|
real_preview_discovery_stats: diagnostics?.discovery_stats ?? null,
|
|
874
890
|
webrtc_preview: relayCapable
|
|
875
891
|
? {
|
|
892
|
+
started: this.networkStarted,
|
|
893
|
+
startup_error: this.networkStartupError,
|
|
876
894
|
signaling_url: network.signaling_url,
|
|
877
895
|
signaling_endpoints: network.signaling_endpoints,
|
|
878
896
|
room: network.room,
|
|
@@ -911,6 +929,8 @@ class LocalNodeService {
|
|
|
911
929
|
adapter_config: diagnostics?.config ?? null,
|
|
912
930
|
adapter_extra: relayCapable
|
|
913
931
|
? {
|
|
932
|
+
started: this.networkStarted,
|
|
933
|
+
startup_error: this.networkStartupError,
|
|
914
934
|
signaling_url: network.signaling_url,
|
|
915
935
|
signaling_endpoints: network.signaling_endpoints,
|
|
916
936
|
room: network.room,
|
|
@@ -988,6 +1008,8 @@ class LocalNodeService {
|
|
|
988
1008
|
adapter_discovery_stats: diagnostics?.discovery_stats ?? null,
|
|
989
1009
|
adapter_diagnostics_summary: relayCapable || diagnostics
|
|
990
1010
|
? {
|
|
1011
|
+
started: this.networkStarted,
|
|
1012
|
+
startup_error: this.networkStartupError,
|
|
991
1013
|
signaling_url: network.signaling_url,
|
|
992
1014
|
signaling_endpoints: network.signaling_endpoints,
|
|
993
1015
|
room: network.room,
|
|
@@ -1036,6 +1058,8 @@ class LocalNodeService {
|
|
|
1036
1058
|
components: diagnostics.components,
|
|
1037
1059
|
limits: diagnostics.limits,
|
|
1038
1060
|
diagnostics_summary: {
|
|
1061
|
+
started: this.networkStarted,
|
|
1062
|
+
startup_error: this.networkStartupError,
|
|
1039
1063
|
signaling_url: network.signaling_url,
|
|
1040
1064
|
signaling_endpoints: network.signaling_endpoints,
|
|
1041
1065
|
room: network.room,
|
|
@@ -1125,9 +1149,10 @@ class LocalNodeService {
|
|
|
1125
1149
|
}
|
|
1126
1150
|
getIntegrationStatus() {
|
|
1127
1151
|
const runtimeGenerated = Boolean(this.socialRuntime && this.socialRuntime.last_loaded_at > 0);
|
|
1128
|
-
const
|
|
1129
|
-
const
|
|
1130
|
-
const
|
|
1152
|
+
const runtimeReady = this.socialFound && runtimeGenerated && !this.socialParseError;
|
|
1153
|
+
const connected = runtimeReady && this.networkStarted;
|
|
1154
|
+
const configured = runtimeReady && this.socialConfig.enabled;
|
|
1155
|
+
const running = configured && this.broadcastEnabled && this.networkStarted;
|
|
1131
1156
|
const publicEnabled = Boolean(this.profile?.public_enabled);
|
|
1132
1157
|
const discoveryEnabled = this.socialConfig.discovery.discoverable &&
|
|
1133
1158
|
this.socialConfig.discovery.allow_profile_broadcast &&
|
|
@@ -1146,9 +1171,11 @@ class LocalNodeService {
|
|
|
1146
1171
|
? "running"
|
|
1147
1172
|
: !configured
|
|
1148
1173
|
? "not configured"
|
|
1149
|
-
:
|
|
1150
|
-
?
|
|
1151
|
-
:
|
|
1174
|
+
: this.networkStartupError
|
|
1175
|
+
? this.networkStartupError
|
|
1176
|
+
: !this.broadcastEnabled
|
|
1177
|
+
? "broadcast paused"
|
|
1178
|
+
: "not running";
|
|
1152
1179
|
const discoverableReason = discoverable
|
|
1153
1180
|
? "discoverable"
|
|
1154
1181
|
: !running
|
|
@@ -2837,7 +2864,6 @@ async function main() {
|
|
|
2837
2864
|
const staticDir = resolveLocalConsoleStaticDir();
|
|
2838
2865
|
const staticIndexFile = (0, path_1.resolve)(staticDir, "index.html");
|
|
2839
2866
|
const node = new LocalNodeService();
|
|
2840
|
-
await node.start();
|
|
2841
2867
|
app.use((0, cors_1.default)({ origin: true }));
|
|
2842
2868
|
app.use(express_1.default.json());
|
|
2843
2869
|
app.get("/api/identity", (_req, res) => {
|
|
@@ -3093,6 +3119,7 @@ async function main() {
|
|
|
3093
3119
|
// eslint-disable-next-line no-console
|
|
3094
3120
|
console.log(`SilicaClaw local-console running: http://localhost:${port}`);
|
|
3095
3121
|
});
|
|
3122
|
+
await node.start();
|
|
3096
3123
|
process.on("SIGINT", async () => {
|
|
3097
3124
|
await node.stop();
|
|
3098
3125
|
process.exit(0);
|
|
@@ -951,6 +951,8 @@ export class LocalNodeService {
|
|
|
951
951
|
private webrtcSeedPeers: string[] = [];
|
|
952
952
|
private webrtcBootstrapHints: string[] = [];
|
|
953
953
|
private webrtcBootstrapSources: string[] = [];
|
|
954
|
+
private networkStarted = false;
|
|
955
|
+
private networkStartupError: string | null = null;
|
|
954
956
|
private appVersion = "unknown";
|
|
955
957
|
|
|
956
958
|
constructor(options?: { workspaceRoot?: string; projectRoot?: string; storageRoot?: string }) {
|
|
@@ -1001,13 +1003,24 @@ export class LocalNodeService {
|
|
|
1001
1003
|
await this.hydrateFromDisk();
|
|
1002
1004
|
|
|
1003
1005
|
this.bindNetworkSubscriptions();
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1006
|
+
try {
|
|
1007
|
+
await this.network.start();
|
|
1008
|
+
this.networkStarted = true;
|
|
1009
|
+
this.networkStartupError = null;
|
|
1010
|
+
await this.log(
|
|
1011
|
+
"info",
|
|
1012
|
+
`Local node started (${this.adapterMode}, mode=${this.networkMode}, signaling=${this.webrtcSignalingUrls[0] || "-"}, room=${this.webrtcRoom})`
|
|
1013
|
+
);
|
|
1014
|
+
} catch (error) {
|
|
1015
|
+
this.networkStarted = false;
|
|
1016
|
+
this.networkStartupError = error instanceof Error ? error.message : String(error);
|
|
1017
|
+
await this.log(
|
|
1018
|
+
"warn",
|
|
1019
|
+
`Network start failed (${this.adapterMode}, mode=${this.networkMode}): ${this.networkStartupError}`
|
|
1020
|
+
);
|
|
1021
|
+
}
|
|
1009
1022
|
|
|
1010
|
-
if (this.profile?.public_enabled && this.broadcastEnabled) {
|
|
1023
|
+
if (this.networkStarted && this.profile?.public_enabled && this.broadcastEnabled) {
|
|
1011
1024
|
try {
|
|
1012
1025
|
await this.broadcastNow("adapter_start");
|
|
1013
1026
|
} catch (error) {
|
|
@@ -1018,7 +1031,9 @@ export class LocalNodeService {
|
|
|
1018
1031
|
}
|
|
1019
1032
|
}
|
|
1020
1033
|
|
|
1021
|
-
this.
|
|
1034
|
+
if (this.networkStarted) {
|
|
1035
|
+
this.startBroadcastLoop();
|
|
1036
|
+
}
|
|
1022
1037
|
}
|
|
1023
1038
|
|
|
1024
1039
|
async stop(): Promise<void> {
|
|
@@ -1026,7 +1041,10 @@ export class LocalNodeService {
|
|
|
1026
1041
|
clearInterval(this.broadcaster);
|
|
1027
1042
|
this.broadcaster = null;
|
|
1028
1043
|
}
|
|
1029
|
-
|
|
1044
|
+
if (this.networkStarted) {
|
|
1045
|
+
await this.network.stop();
|
|
1046
|
+
}
|
|
1047
|
+
this.networkStarted = false;
|
|
1030
1048
|
}
|
|
1031
1049
|
|
|
1032
1050
|
private ensureLocalDirectoryBaseline(): void {
|
|
@@ -1109,6 +1127,8 @@ export class LocalNodeService {
|
|
|
1109
1127
|
real_preview_discovery_stats: diagnostics?.discovery_stats ?? null,
|
|
1110
1128
|
webrtc_preview: relayCapable
|
|
1111
1129
|
? {
|
|
1130
|
+
started: this.networkStarted,
|
|
1131
|
+
startup_error: this.networkStartupError,
|
|
1112
1132
|
signaling_url: network.signaling_url,
|
|
1113
1133
|
signaling_endpoints: network.signaling_endpoints,
|
|
1114
1134
|
room: network.room,
|
|
@@ -1148,6 +1168,8 @@ export class LocalNodeService {
|
|
|
1148
1168
|
adapter_config: diagnostics?.config ?? null,
|
|
1149
1169
|
adapter_extra: relayCapable
|
|
1150
1170
|
? {
|
|
1171
|
+
started: this.networkStarted,
|
|
1172
|
+
startup_error: this.networkStartupError,
|
|
1151
1173
|
signaling_url: network.signaling_url,
|
|
1152
1174
|
signaling_endpoints: network.signaling_endpoints,
|
|
1153
1175
|
room: network.room,
|
|
@@ -1228,6 +1250,8 @@ export class LocalNodeService {
|
|
|
1228
1250
|
adapter_discovery_stats: diagnostics?.discovery_stats ?? null,
|
|
1229
1251
|
adapter_diagnostics_summary: relayCapable || diagnostics
|
|
1230
1252
|
? {
|
|
1253
|
+
started: this.networkStarted,
|
|
1254
|
+
startup_error: this.networkStartupError,
|
|
1231
1255
|
signaling_url: network.signaling_url,
|
|
1232
1256
|
signaling_endpoints: network.signaling_endpoints,
|
|
1233
1257
|
room: network.room,
|
|
@@ -1277,6 +1301,8 @@ export class LocalNodeService {
|
|
|
1277
1301
|
components: diagnostics.components,
|
|
1278
1302
|
limits: diagnostics.limits,
|
|
1279
1303
|
diagnostics_summary: {
|
|
1304
|
+
started: this.networkStarted,
|
|
1305
|
+
startup_error: this.networkStartupError,
|
|
1280
1306
|
signaling_url: network.signaling_url,
|
|
1281
1307
|
signaling_endpoints: network.signaling_endpoints,
|
|
1282
1308
|
room: network.room,
|
|
@@ -1372,9 +1398,10 @@ export class LocalNodeService {
|
|
|
1372
1398
|
|
|
1373
1399
|
getIntegrationStatus(): IntegrationStatusSummary {
|
|
1374
1400
|
const runtimeGenerated = Boolean(this.socialRuntime && this.socialRuntime.last_loaded_at > 0);
|
|
1375
|
-
const
|
|
1376
|
-
const
|
|
1377
|
-
const
|
|
1401
|
+
const runtimeReady = this.socialFound && runtimeGenerated && !this.socialParseError;
|
|
1402
|
+
const connected = runtimeReady && this.networkStarted;
|
|
1403
|
+
const configured = runtimeReady && this.socialConfig.enabled;
|
|
1404
|
+
const running = configured && this.broadcastEnabled && this.networkStarted;
|
|
1378
1405
|
const publicEnabled = Boolean(this.profile?.public_enabled);
|
|
1379
1406
|
const discoveryEnabled =
|
|
1380
1407
|
this.socialConfig.discovery.discoverable &&
|
|
@@ -1396,6 +1423,8 @@ export class LocalNodeService {
|
|
|
1396
1423
|
? "running"
|
|
1397
1424
|
: !configured
|
|
1398
1425
|
? "not configured"
|
|
1426
|
+
: this.networkStartupError
|
|
1427
|
+
? this.networkStartupError
|
|
1399
1428
|
: !this.broadcastEnabled
|
|
1400
1429
|
? "broadcast paused"
|
|
1401
1430
|
: "not running";
|
|
@@ -3290,7 +3319,6 @@ export async function main() {
|
|
|
3290
3319
|
const staticIndexFile = resolve(staticDir, "index.html");
|
|
3291
3320
|
|
|
3292
3321
|
const node = new LocalNodeService();
|
|
3293
|
-
await node.start();
|
|
3294
3322
|
|
|
3295
3323
|
app.use(cors({ origin: true }));
|
|
3296
3324
|
app.use(express.json());
|
|
@@ -3641,6 +3669,8 @@ export async function main() {
|
|
|
3641
3669
|
console.log(`SilicaClaw local-console running: http://localhost:${port}`);
|
|
3642
3670
|
});
|
|
3643
3671
|
|
|
3672
|
+
await node.start();
|
|
3673
|
+
|
|
3644
3674
|
process.on("SIGINT", async () => {
|
|
3645
3675
|
await node.stop();
|
|
3646
3676
|
process.exit(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
2026.3.19-beta.
|
|
1
|
+
2026.3.19-beta.29
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "silicaclaw-broadcast",
|
|
3
|
-
"version": "2026.3.19-beta.
|
|
3
|
+
"version": "2026.3.19-beta.29",
|
|
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
|
@@ -478,10 +478,13 @@ function update() {
|
|
|
478
478
|
if (hasNewTarget) {
|
|
479
479
|
if (npxRuntime) {
|
|
480
480
|
kv("Update", `next run will use ${targetVersion}`);
|
|
481
|
-
} else if (tryGlobalUpgrade(targetVersion)) {
|
|
482
|
-
kv("Update", `installed ${targetVersion}`);
|
|
483
481
|
} else {
|
|
484
|
-
kv("Update", `
|
|
482
|
+
kv("Update", `command now points to ${targetVersion}`);
|
|
483
|
+
if (tryGlobalUpgrade(targetVersion)) {
|
|
484
|
+
kv("Global", `installed ${targetVersion}`);
|
|
485
|
+
} else {
|
|
486
|
+
kv("Global", `install ${targetVersion} manually if needed`);
|
|
487
|
+
}
|
|
485
488
|
}
|
|
486
489
|
}
|
|
487
490
|
|
|
@@ -639,6 +639,20 @@ async function waitForCurrentAppListener(port, kind, timeoutMs = 5000) {
|
|
|
639
639
|
return lastListener;
|
|
640
640
|
}
|
|
641
641
|
|
|
642
|
+
async function waitForLocalConsoleHealth(timeoutMs = 8000) {
|
|
643
|
+
const startedAt = Date.now();
|
|
644
|
+
while (Date.now() - startedAt < timeoutMs) {
|
|
645
|
+
try {
|
|
646
|
+
const response = await fetch(`${LOCAL_CONSOLE_BASE_URL}/api/health`);
|
|
647
|
+
if (response.ok) return true;
|
|
648
|
+
} catch {
|
|
649
|
+
// ignore transient startup failures
|
|
650
|
+
}
|
|
651
|
+
await sleep(250);
|
|
652
|
+
}
|
|
653
|
+
return false;
|
|
654
|
+
}
|
|
655
|
+
|
|
642
656
|
async function waitForPortToClear(port, timeoutMs = 5000) {
|
|
643
657
|
const startedAt = Date.now();
|
|
644
658
|
while (Date.now() - startedAt < timeoutMs) {
|
|
@@ -999,7 +1013,8 @@ async function main() {
|
|
|
999
1013
|
if (cmd === "start") {
|
|
1000
1014
|
await startAll();
|
|
1001
1015
|
const listener = await waitForCurrentAppListener(LOCAL_CONSOLE_PORT, "local-console", 15000);
|
|
1002
|
-
|
|
1016
|
+
const healthy = listener ? await waitForLocalConsoleHealth(8000) : false;
|
|
1017
|
+
if (!listener || !isCurrentAppListener(listener, "local-console") || !healthy) {
|
|
1003
1018
|
headline();
|
|
1004
1019
|
console.log("");
|
|
1005
1020
|
kv("Status", paint("failed to start", COLOR.red));
|
|
@@ -1027,7 +1042,8 @@ async function main() {
|
|
|
1027
1042
|
if (cmd === "restart") {
|
|
1028
1043
|
await restartAll();
|
|
1029
1044
|
const listener = await waitForCurrentAppListener(LOCAL_CONSOLE_PORT, "local-console", 15000);
|
|
1030
|
-
|
|
1045
|
+
const healthy = listener ? await waitForLocalConsoleHealth(8000) : false;
|
|
1046
|
+
if (!listener || !isCurrentAppListener(listener, "local-console") || !healthy) {
|
|
1031
1047
|
headline();
|
|
1032
1048
|
console.log("");
|
|
1033
1049
|
kv("Status", paint("failed to restart", COLOR.red));
|