@silicaclaw/cli 2026.3.19-15 → 2026.3.19-16
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/INSTALL.md +44 -11
- package/README.md +53 -19
- package/VERSION +1 -1
- package/apps/local-console/dist/apps/local-console/src/server.d.ts +30 -12
- package/apps/local-console/dist/apps/local-console/src/server.js +265 -48
- package/apps/local-console/dist/config/silicaclaw-defaults.json +19 -0
- package/apps/local-console/dist/packages/core/src/socialConfig.js +9 -5
- package/apps/local-console/dist/packages/network/src/realPreview.js +6 -2
- package/apps/local-console/dist/packages/network/src/relayPreview.js +8 -2
- package/apps/local-console/dist/packages/network/src/transport/udpLanBroadcastTransport.js +2 -1
- package/apps/local-console/dist/packages/network/src/webrtcPreview.js +5 -1
- package/apps/local-console/dist/packages/storage/src/socialRuntimeRepo.js +8 -4
- package/apps/local-console/public/app/app.js +17 -1
- package/apps/local-console/public/app/events.js +38 -2
- package/apps/local-console/public/app/network.js +32 -3
- package/apps/local-console/public/app/overview.js +4 -2
- package/apps/local-console/public/app/social.js +175 -26
- package/apps/local-console/public/app/styles.css +182 -14
- package/apps/local-console/public/app/template.js +70 -30
- package/apps/local-console/public/app/translations.js +131 -43
- package/apps/local-console/src/server.ts +281 -50
- package/apps/public-explorer/dist/apps/public-explorer/src/server.d.ts +1 -0
- package/apps/public-explorer/dist/apps/public-explorer/src/server.js +41 -0
- package/apps/public-explorer/dist/config/silicaclaw-defaults.json +19 -0
- package/apps/public-explorer/public/app/app.js +22 -2
- package/apps/public-explorer/public/app/template.js +4 -4
- package/apps/public-explorer/public/app/translations.js +15 -15
- package/apps/public-explorer/src/server.ts +11 -1
- package/docs/NEW_USER_INSTALL.md +14 -10
- package/docs/NEW_USER_OPERATIONS.md +3 -3
- package/docs/OPENCLAW_BRIDGE.md +15 -0
- package/docs/OPENCLAW_BRIDGE_ZH.md +15 -0
- package/node_modules/@silicaclaw/core/dist/config/silicaclaw-defaults.json +19 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/crypto.d.ts +6 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/crypto.js +50 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/directory.d.ts +17 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/directory.js +145 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/identity.d.ts +2 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/identity.js +18 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/index.d.ts +12 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/index.js +28 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/indexing.d.ts +6 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/indexing.js +43 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/presence.d.ts +4 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/presence.js +23 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/profile.d.ts +4 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/profile.js +39 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.js +103 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/socialConfig.d.ts +100 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/socialConfig.js +300 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/socialMessage.d.ts +19 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/socialMessage.js +69 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/socialResolver.d.ts +46 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/socialResolver.js +237 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/socialTemplate.d.ts +2 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/socialTemplate.js +90 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/types.d.ts +59 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/types.js +2 -0
- package/node_modules/@silicaclaw/core/src/socialConfig.ts +7 -5
- package/node_modules/@silicaclaw/network/dist/config/silicaclaw-defaults.json +19 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/messageEnvelope.d.ts +28 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/messageEnvelope.js +36 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/peerDiscovery.d.ts +43 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/peerDiscovery.js +2 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/topicCodec.d.ts +4 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/topicCodec.js +2 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/transport.d.ts +36 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/transport.js +2 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.js +24 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonTopicCodec.d.ts +5 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonTopicCodec.js +12 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.d.ts +28 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.js +144 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/index.d.ts +14 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/index.js +30 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/localEventBus.d.ts +9 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/localEventBus.js +47 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/mock.d.ts +8 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/mock.js +24 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/realPreview.d.ts +105 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/realPreview.js +331 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.d.ts +166 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.js +448 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/transport/udpLanBroadcastTransport.d.ts +23 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/transport/udpLanBroadcastTransport.js +154 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/types.d.ts +6 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/types.js +2 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/webrtcPreview.d.ts +163 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/webrtcPreview.js +848 -0
- package/node_modules/@silicaclaw/network/src/realPreview.ts +3 -2
- package/node_modules/@silicaclaw/network/src/relayPreview.ts +5 -2
- package/node_modules/@silicaclaw/network/src/transport/udpLanBroadcastTransport.ts +2 -1
- package/node_modules/@silicaclaw/network/src/webrtcPreview.ts +2 -1
- package/node_modules/@silicaclaw/storage/dist/socialRuntimeRepo.js +8 -4
- package/node_modules/@silicaclaw/storage/src/socialRuntimeRepo.ts +5 -4
- package/openclaw-skills/silicaclaw-bridge-setup/SKILL.md +147 -0
- package/openclaw-skills/silicaclaw-bridge-setup/VERSION +1 -0
- package/openclaw-skills/silicaclaw-bridge-setup/agents/openai.yaml +6 -0
- package/openclaw-skills/silicaclaw-bridge-setup/manifest.json +27 -0
- package/openclaw-skills/silicaclaw-bridge-setup/references/owner-dialogue-cheatsheet-zh.md +58 -0
- package/openclaw-skills/silicaclaw-bridge-setup/references/runtime-setup.md +43 -0
- package/openclaw-skills/silicaclaw-bridge-setup/references/troubleshooting.md +24 -0
- package/openclaw-skills/silicaclaw-broadcast/SKILL.md +132 -0
- package/openclaw-skills/silicaclaw-broadcast/VERSION +1 -1
- package/openclaw-skills/silicaclaw-broadcast/agents/openai.yaml +2 -2
- package/openclaw-skills/silicaclaw-broadcast/manifest.json +3 -2
- package/openclaw-skills/silicaclaw-broadcast/references/owner-dialogue-cheatsheet-zh.md +81 -0
- package/openclaw-skills/silicaclaw-owner-push/SKILL.md +217 -0
- package/openclaw-skills/silicaclaw-owner-push/VERSION +1 -0
- package/openclaw-skills/silicaclaw-owner-push/agents/openai.yaml +6 -0
- package/openclaw-skills/silicaclaw-owner-push/manifest.json +30 -0
- package/openclaw-skills/silicaclaw-owner-push/references/owner-dialogue-cheatsheet-zh.md +87 -0
- package/openclaw-skills/silicaclaw-owner-push/references/push-routing-policy.md +43 -0
- package/openclaw-skills/silicaclaw-owner-push/references/runtime-setup.md +41 -0
- package/openclaw-skills/silicaclaw-owner-push/scripts/owner-push-forwarder.mjs +214 -0
- package/openclaw-skills/silicaclaw-owner-push/scripts/send-to-owner-via-openclaw.mjs +69 -0
- package/package.json +1 -1
- package/packages/core/dist/config/silicaclaw-defaults.json +19 -0
- package/packages/core/dist/packages/core/src/crypto.d.ts +6 -0
- package/packages/core/dist/packages/core/src/crypto.js +50 -0
- package/packages/core/dist/packages/core/src/directory.d.ts +17 -0
- package/packages/core/dist/packages/core/src/directory.js +145 -0
- package/packages/core/dist/packages/core/src/identity.d.ts +2 -0
- package/packages/core/dist/packages/core/src/identity.js +18 -0
- package/packages/core/dist/packages/core/src/index.d.ts +12 -0
- package/packages/core/dist/packages/core/src/index.js +28 -0
- package/packages/core/dist/packages/core/src/indexing.d.ts +6 -0
- package/packages/core/dist/packages/core/src/indexing.js +43 -0
- package/packages/core/dist/packages/core/src/presence.d.ts +4 -0
- package/packages/core/dist/packages/core/src/presence.js +23 -0
- package/packages/core/dist/packages/core/src/profile.d.ts +4 -0
- package/packages/core/dist/packages/core/src/profile.js +39 -0
- package/packages/core/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
- package/packages/core/dist/packages/core/src/publicProfileSummary.js +103 -0
- package/packages/core/dist/packages/core/src/socialConfig.d.ts +100 -0
- package/packages/core/dist/packages/core/src/socialConfig.js +300 -0
- package/packages/core/dist/packages/core/src/socialMessage.d.ts +19 -0
- package/packages/core/dist/packages/core/src/socialMessage.js +69 -0
- package/packages/core/dist/packages/core/src/socialResolver.d.ts +46 -0
- package/packages/core/dist/packages/core/src/socialResolver.js +237 -0
- package/packages/core/dist/packages/core/src/socialTemplate.d.ts +2 -0
- package/packages/core/dist/packages/core/src/socialTemplate.js +90 -0
- package/packages/core/dist/packages/core/src/types.d.ts +59 -0
- package/packages/core/dist/packages/core/src/types.js +2 -0
- package/packages/core/src/socialConfig.ts +7 -5
- package/packages/network/dist/config/silicaclaw-defaults.json +19 -0
- package/packages/network/dist/packages/network/src/abstractions/messageEnvelope.d.ts +28 -0
- package/packages/network/dist/packages/network/src/abstractions/messageEnvelope.js +36 -0
- package/packages/network/dist/packages/network/src/abstractions/peerDiscovery.d.ts +43 -0
- package/packages/network/dist/packages/network/src/abstractions/peerDiscovery.js +2 -0
- package/packages/network/dist/packages/network/src/abstractions/topicCodec.d.ts +4 -0
- package/packages/network/dist/packages/network/src/abstractions/topicCodec.js +2 -0
- package/packages/network/dist/packages/network/src/abstractions/transport.d.ts +36 -0
- package/packages/network/dist/packages/network/src/abstractions/transport.js +2 -0
- package/packages/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
- package/packages/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.js +24 -0
- package/packages/network/dist/packages/network/src/codec/jsonTopicCodec.d.ts +5 -0
- package/packages/network/dist/packages/network/src/codec/jsonTopicCodec.js +12 -0
- package/packages/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.d.ts +28 -0
- package/packages/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.js +144 -0
- package/packages/network/dist/packages/network/src/index.d.ts +14 -0
- package/packages/network/dist/packages/network/src/index.js +30 -0
- package/packages/network/dist/packages/network/src/localEventBus.d.ts +9 -0
- package/packages/network/dist/packages/network/src/localEventBus.js +47 -0
- package/packages/network/dist/packages/network/src/mock.d.ts +8 -0
- package/packages/network/dist/packages/network/src/mock.js +24 -0
- package/packages/network/dist/packages/network/src/realPreview.d.ts +105 -0
- package/packages/network/dist/packages/network/src/realPreview.js +331 -0
- package/packages/network/dist/packages/network/src/relayPreview.d.ts +166 -0
- package/packages/network/dist/packages/network/src/relayPreview.js +448 -0
- package/packages/network/dist/packages/network/src/transport/udpLanBroadcastTransport.d.ts +23 -0
- package/packages/network/dist/packages/network/src/transport/udpLanBroadcastTransport.js +154 -0
- package/packages/network/dist/packages/network/src/types.d.ts +6 -0
- package/packages/network/dist/packages/network/src/types.js +2 -0
- package/packages/network/dist/packages/network/src/webrtcPreview.d.ts +163 -0
- package/packages/network/dist/packages/network/src/webrtcPreview.js +848 -0
- package/packages/network/src/realPreview.ts +3 -2
- package/packages/network/src/relayPreview.ts +5 -2
- package/packages/network/src/transport/udpLanBroadcastTransport.ts +2 -1
- package/packages/network/src/webrtcPreview.ts +2 -1
- package/packages/storage/dist/socialRuntimeRepo.js +8 -4
- package/packages/storage/src/socialRuntimeRepo.ts +5 -4
- package/scripts/functional-check.mjs +35 -6
- package/scripts/install-openclaw-skill.mjs +9 -2
- package/scripts/openclaw-bridge-adapter.mjs +3 -1
- package/scripts/openclaw-bridge-client.mjs +3 -1
- package/scripts/openclaw-runtime-demo.mjs +3 -1
- package/scripts/quickstart.sh +13 -9
- package/scripts/release-pack.mjs +13 -1
- package/scripts/silicaclaw-cli.mjs +23 -18
- package/scripts/silicaclaw-gateway.mjs +33 -27
- package/scripts/validate-openclaw-skill.mjs +79 -21
|
@@ -12,6 +12,7 @@ import { JsonMessageEnvelopeCodec } from "./codec/jsonMessageEnvelopeCodec";
|
|
|
12
12
|
import { JsonTopicCodec } from "./codec/jsonTopicCodec";
|
|
13
13
|
import { UdpLanBroadcastTransport } from "./transport/udpLanBroadcastTransport";
|
|
14
14
|
import { HeartbeatPeerDiscovery } from "./discovery/heartbeatPeerDiscovery";
|
|
15
|
+
import defaults from "../../../config/silicaclaw-defaults.json";
|
|
15
16
|
|
|
16
17
|
type RealNetworkAdapterPreviewOptions = {
|
|
17
18
|
peerId?: string;
|
|
@@ -124,7 +125,7 @@ export class RealNetworkAdapterPreview implements NetworkAdapter {
|
|
|
124
125
|
|
|
125
126
|
constructor(options: RealNetworkAdapterPreviewOptions = {}) {
|
|
126
127
|
this.peerId = options.peerId ?? `peer-${process.pid}-${Math.random().toString(36).slice(2, 10)}`;
|
|
127
|
-
this.namespace = this.normalizeNamespace(options.namespace ??
|
|
128
|
+
this.namespace = this.normalizeNamespace(options.namespace ?? defaults.network.default_namespace);
|
|
128
129
|
this.transport = options.transport ?? new UdpLanBroadcastTransport();
|
|
129
130
|
this.envelopeCodec = options.envelopeCodec ?? new JsonMessageEnvelopeCodec();
|
|
130
131
|
this.topicCodec = options.topicCodec ?? new JsonTopicCodec();
|
|
@@ -424,7 +425,7 @@ export class RealNetworkAdapterPreview implements NetworkAdapter {
|
|
|
424
425
|
|
|
425
426
|
private normalizeNamespace(namespace: string): string {
|
|
426
427
|
const normalized = namespace.trim();
|
|
427
|
-
return normalized.length > 0 ? normalized :
|
|
428
|
+
return normalized.length > 0 ? normalized : defaults.network.default_namespace;
|
|
428
429
|
}
|
|
429
430
|
|
|
430
431
|
private errorMessage(error: unknown): string {
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import { TopicCodec } from "./abstractions/topicCodec";
|
|
9
9
|
import { JsonMessageEnvelopeCodec } from "./codec/jsonMessageEnvelopeCodec";
|
|
10
10
|
import { JsonTopicCodec } from "./codec/jsonTopicCodec";
|
|
11
|
+
import defaults from "../../../config/silicaclaw-defaults.json";
|
|
11
12
|
|
|
12
13
|
type RelayPreviewOptions = {
|
|
13
14
|
peerId?: string;
|
|
@@ -196,7 +197,8 @@ export class RelayPreviewAdapter implements NetworkAdapter {
|
|
|
196
197
|
|
|
197
198
|
constructor(options: RelayPreviewOptions = {}) {
|
|
198
199
|
this.peerId = options.peerId ?? `peer-${process.pid}-${Math.random().toString(36).slice(2, 10)}`;
|
|
199
|
-
this.namespace =
|
|
200
|
+
this.namespace =
|
|
201
|
+
String(options.namespace || defaults.network.default_namespace).trim() || defaults.network.default_namespace;
|
|
200
202
|
this.signalingEndpoints = dedupe(
|
|
201
203
|
(options.signalingUrls && options.signalingUrls.length > 0
|
|
202
204
|
? options.signalingUrls
|
|
@@ -204,7 +206,8 @@ export class RelayPreviewAdapter implements NetworkAdapter {
|
|
|
204
206
|
);
|
|
205
207
|
this.activeEndpoint = this.signalingEndpoints[0] || "http://localhost:4510";
|
|
206
208
|
this.activeEndpointIndex = 0;
|
|
207
|
-
this.room =
|
|
209
|
+
this.room =
|
|
210
|
+
String(options.room || defaults.network.global_preview.room).trim() || defaults.network.global_preview.room;
|
|
208
211
|
this.seedPeers = dedupe(options.seedPeers || []);
|
|
209
212
|
this.bootstrapHints = dedupe(options.bootstrapHints || []);
|
|
210
213
|
this.bootstrapSources = dedupe(options.bootstrapSources || []);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import dgram from "dgram";
|
|
2
|
+
import defaults from "../../../../config/silicaclaw-defaults.json";
|
|
2
3
|
import {
|
|
3
4
|
NetworkTransport,
|
|
4
5
|
TransportConfigSnapshot,
|
|
@@ -38,7 +39,7 @@ export class UdpLanBroadcastTransport implements NetworkTransport {
|
|
|
38
39
|
private broadcastAddress: string;
|
|
39
40
|
|
|
40
41
|
constructor(options: UdpLanBroadcastTransportOptions = {}) {
|
|
41
|
-
this.port = options.port ??
|
|
42
|
+
this.port = options.port ?? defaults.ports.network_default;
|
|
42
43
|
this.bindAddress = options.bindAddress ?? "0.0.0.0";
|
|
43
44
|
this.broadcastAddress = options.broadcastAddress ?? "255.255.255.255";
|
|
44
45
|
}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import { TopicCodec } from "./abstractions/topicCodec";
|
|
9
9
|
import { JsonMessageEnvelopeCodec } from "./codec/jsonMessageEnvelopeCodec";
|
|
10
10
|
import { JsonTopicCodec } from "./codec/jsonTopicCodec";
|
|
11
|
+
import defaults from "../../../config/silicaclaw-defaults.json";
|
|
11
12
|
|
|
12
13
|
type WebRTCPreviewOptions = {
|
|
13
14
|
peerId?: string;
|
|
@@ -261,7 +262,7 @@ export class WebRTCPreviewAdapter implements NetworkAdapter {
|
|
|
261
262
|
|
|
262
263
|
constructor(options: WebRTCPreviewOptions = {}) {
|
|
263
264
|
this.peerId = options.peerId ?? `webrtc-${process.pid}-${Math.random().toString(36).slice(2, 9)}`;
|
|
264
|
-
this.namespace = (options.namespace ??
|
|
265
|
+
this.namespace = (options.namespace ?? defaults.network.default_namespace).trim() || defaults.network.default_namespace;
|
|
265
266
|
const configuredSignalingUrls = dedupeArray([
|
|
266
267
|
...(options.signalingUrls ?? []),
|
|
267
268
|
options.signalingUrl ?? "",
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.SocialRuntimeRepo = void 0;
|
|
4
7
|
const path_1 = require("path");
|
|
5
8
|
const jsonRepo_1 = require("./jsonRepo");
|
|
9
|
+
const silicaclaw_defaults_json_1 = __importDefault(require("../../../config/silicaclaw-defaults.json"));
|
|
6
10
|
function emptyRuntime() {
|
|
7
11
|
return {
|
|
8
12
|
enabled: true,
|
|
@@ -14,13 +18,13 @@ function emptyRuntime() {
|
|
|
14
18
|
resolved_identity: null,
|
|
15
19
|
resolved_profile: null,
|
|
16
20
|
resolved_network: {
|
|
17
|
-
mode:
|
|
21
|
+
mode: silicaclaw_defaults_json_1.default.network.default_mode,
|
|
18
22
|
adapter: "relay-preview",
|
|
19
|
-
namespace:
|
|
23
|
+
namespace: silicaclaw_defaults_json_1.default.network.default_namespace,
|
|
20
24
|
port: null,
|
|
21
|
-
signaling_url:
|
|
25
|
+
signaling_url: silicaclaw_defaults_json_1.default.network.global_preview.relay_url,
|
|
22
26
|
signaling_urls: [],
|
|
23
|
-
room:
|
|
27
|
+
room: silicaclaw_defaults_json_1.default.network.global_preview.room,
|
|
24
28
|
seed_peers: [],
|
|
25
29
|
bootstrap_hints: [],
|
|
26
30
|
bootstrap_sources: [],
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { resolve } from "path";
|
|
2
2
|
import { SocialRuntimeConfig } from "@silicaclaw/core";
|
|
3
3
|
import { JsonFileRepo } from "./jsonRepo";
|
|
4
|
+
import defaults from "../../../config/silicaclaw-defaults.json";
|
|
4
5
|
|
|
5
6
|
function emptyRuntime(): SocialRuntimeConfig {
|
|
6
7
|
return {
|
|
@@ -13,13 +14,13 @@ function emptyRuntime(): SocialRuntimeConfig {
|
|
|
13
14
|
resolved_identity: null,
|
|
14
15
|
resolved_profile: null,
|
|
15
16
|
resolved_network: {
|
|
16
|
-
mode: "
|
|
17
|
+
mode: defaults.network.default_mode as SocialRuntimeConfig["resolved_network"]["mode"],
|
|
17
18
|
adapter: "relay-preview",
|
|
18
|
-
namespace:
|
|
19
|
+
namespace: defaults.network.default_namespace,
|
|
19
20
|
port: null,
|
|
20
|
-
signaling_url:
|
|
21
|
+
signaling_url: defaults.network.global_preview.relay_url,
|
|
21
22
|
signaling_urls: [],
|
|
22
|
-
room:
|
|
23
|
+
room: defaults.network.global_preview.room,
|
|
23
24
|
seed_peers: [],
|
|
24
25
|
bootstrap_hints: [],
|
|
25
26
|
bootstrap_sources: [],
|
|
@@ -13,13 +13,23 @@ function checkJson(filePath) {
|
|
|
13
13
|
JSON.parse(raw);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
function
|
|
16
|
+
function checkBrowserScriptSyntax(htmlPath) {
|
|
17
17
|
const html = readFileSync(htmlPath, 'utf8');
|
|
18
18
|
const start = html.indexOf('<script>');
|
|
19
19
|
const end = html.lastIndexOf('</script>');
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
if (start >= 0 && end > start) {
|
|
21
|
+
const js = html.slice(start + '<script>'.length, end);
|
|
22
|
+
new vm.Script(js, { filename: htmlPath });
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const moduleMatch = html.match(/<script\s+type="module"\s+src="([^"]+)"/i);
|
|
27
|
+
assert(moduleMatch?.[1], `Missing browser script in ${htmlPath}`);
|
|
28
|
+
const src = String(moduleMatch[1]);
|
|
29
|
+
const resolved = src.startsWith('/')
|
|
30
|
+
? path.resolve(path.dirname(htmlPath), `.${src}`)
|
|
31
|
+
: path.resolve(path.dirname(htmlPath), src);
|
|
32
|
+
assert(existsSync(resolved), `Missing module script target for ${htmlPath}: ${src}`);
|
|
23
33
|
}
|
|
24
34
|
|
|
25
35
|
class InMemoryLoopbackTransport {
|
|
@@ -66,6 +76,14 @@ async function main() {
|
|
|
66
76
|
'openclaw-skills/silicaclaw-broadcast/scripts/owner-dispatch-adapter-demo.mjs',
|
|
67
77
|
'openclaw-skills/silicaclaw-broadcast/scripts/send-to-owner-via-openclaw.mjs',
|
|
68
78
|
'openclaw-skills/silicaclaw-broadcast/scripts/owner-forwarder-demo.mjs',
|
|
79
|
+
'openclaw-skills/silicaclaw-owner-push/SKILL.md',
|
|
80
|
+
'openclaw-skills/silicaclaw-owner-push/VERSION',
|
|
81
|
+
'openclaw-skills/silicaclaw-owner-push/manifest.json',
|
|
82
|
+
'openclaw-skills/silicaclaw-owner-push/agents/openai.yaml',
|
|
83
|
+
'openclaw-skills/silicaclaw-owner-push/references/push-routing-policy.md',
|
|
84
|
+
'openclaw-skills/silicaclaw-owner-push/references/runtime-setup.md',
|
|
85
|
+
'openclaw-skills/silicaclaw-owner-push/scripts/owner-push-forwarder.mjs',
|
|
86
|
+
'openclaw-skills/silicaclaw-owner-push/scripts/send-to-owner-via-openclaw.mjs',
|
|
69
87
|
'apps/local-console/public/index.html',
|
|
70
88
|
'apps/public-explorer/public/index.html',
|
|
71
89
|
'data/cache.json',
|
|
@@ -86,8 +104,8 @@ async function main() {
|
|
|
86
104
|
checkJson(path.resolve(root, 'data/identity.json'));
|
|
87
105
|
|
|
88
106
|
// Browser script syntax sanity
|
|
89
|
-
|
|
90
|
-
|
|
107
|
+
checkBrowserScriptSyntax(path.resolve(root, 'apps/local-console/public/index.html'));
|
|
108
|
+
checkBrowserScriptSyntax(path.resolve(root, 'apps/public-explorer/public/index.html'));
|
|
91
109
|
|
|
92
110
|
const skillBody = readFileSync(path.resolve(root, 'openclaw-skills/silicaclaw-broadcast/SKILL.md'), 'utf8');
|
|
93
111
|
assert(skillBody.includes('name: silicaclaw-broadcast'), 'OpenClaw skill metadata missing');
|
|
@@ -102,6 +120,17 @@ async function main() {
|
|
|
102
120
|
const skillUi = readFileSync(path.resolve(root, 'openclaw-skills/silicaclaw-broadcast/agents/openai.yaml'), 'utf8');
|
|
103
121
|
assert(skillUi.includes('display_name: "SilicaClaw Broadcast"'), 'OpenClaw skill UI metadata missing');
|
|
104
122
|
|
|
123
|
+
const ownerPushBody = readFileSync(path.resolve(root, 'openclaw-skills/silicaclaw-owner-push/SKILL.md'), 'utf8');
|
|
124
|
+
assert(ownerPushBody.includes('name: silicaclaw-owner-push'), 'Owner push skill metadata missing');
|
|
125
|
+
const ownerPushManifest = JSON.parse(readFileSync(path.resolve(root, 'openclaw-skills/silicaclaw-owner-push/manifest.json'), 'utf8'));
|
|
126
|
+
assert(ownerPushManifest.name === 'silicaclaw-owner-push', 'Owner push skill manifest missing name');
|
|
127
|
+
assert(ownerPushManifest.references?.push_routing_policy === 'references/push-routing-policy.md', 'Owner push skill manifest missing push routing policy reference');
|
|
128
|
+
assert(ownerPushManifest.references?.runtime_setup === 'references/runtime-setup.md', 'Owner push skill manifest missing runtime setup reference');
|
|
129
|
+
assert(ownerPushManifest.entrypoints?.owner_push_forwarder === 'scripts/owner-push-forwarder.mjs', 'Owner push skill manifest missing owner push forwarder entrypoint');
|
|
130
|
+
assert(ownerPushManifest.entrypoints?.owner_send_via_openclaw === 'scripts/send-to-owner-via-openclaw.mjs', 'Owner push skill manifest missing owner send via openclaw entrypoint');
|
|
131
|
+
const ownerPushUi = readFileSync(path.resolve(root, 'openclaw-skills/silicaclaw-owner-push/agents/openai.yaml'), 'utf8');
|
|
132
|
+
assert(ownerPushUi.includes('display_name: "SilicaClaw Owner Push"'), 'Owner push skill UI metadata missing');
|
|
133
|
+
|
|
105
134
|
// Import built modules (requires npm run build)
|
|
106
135
|
const core = await import(pathToFileURL(path.resolve(root, 'packages/core/dist/index.js')).href);
|
|
107
136
|
const network = await import(pathToFileURL(path.resolve(root, 'packages/network/dist/index.js')).href);
|
|
@@ -26,10 +26,16 @@ function main() {
|
|
|
26
26
|
const sourceRoot = resolve(ROOT_DIR, "openclaw-skills");
|
|
27
27
|
const targetRoot = resolve(homedir(), ".openclaw", "workspace", "skills");
|
|
28
28
|
const legacyTargetRoot = resolve(homedir(), ".openclaw", "skills");
|
|
29
|
-
const
|
|
29
|
+
const requestedSkill = String(process.argv.find((arg) => arg.startsWith("--skill=")) || "")
|
|
30
|
+
.replace(/^--skill=/, "")
|
|
31
|
+
.trim();
|
|
32
|
+
const allSkills = listSkillDirs(sourceRoot);
|
|
33
|
+
const skills = requestedSkill
|
|
34
|
+
? allSkills.filter((skill) => skill.name === requestedSkill)
|
|
35
|
+
: allSkills;
|
|
30
36
|
|
|
31
37
|
if (!skills.length) {
|
|
32
|
-
throw new Error("No bundled OpenClaw skills found.");
|
|
38
|
+
throw new Error(requestedSkill ? `Bundled OpenClaw skill not found: ${requestedSkill}` : "No bundled OpenClaw skills found.");
|
|
33
39
|
}
|
|
34
40
|
|
|
35
41
|
mkdirSync(targetRoot, { recursive: true });
|
|
@@ -41,6 +47,7 @@ function main() {
|
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
console.log(JSON.stringify({
|
|
50
|
+
requested_skill: requestedSkill || null,
|
|
44
51
|
installed: skills.map((skill) => ({
|
|
45
52
|
name: skill.name,
|
|
46
53
|
target_path: resolve(targetRoot, skill.name),
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import defaults from "../config/silicaclaw-defaults.json" with { type: "json" };
|
|
2
|
+
|
|
3
|
+
const DEFAULT_API_BASE = defaults.bridge.api_base;
|
|
2
4
|
|
|
3
5
|
function normalizeApiBase(value) {
|
|
4
6
|
return String(value || DEFAULT_API_BASE).replace(/\/+$/, "");
|
|
@@ -4,7 +4,9 @@ import { createOpenClawBridgeClient } from "./openclaw-bridge-adapter.mjs";
|
|
|
4
4
|
|
|
5
5
|
const argv = process.argv.slice(2);
|
|
6
6
|
const cmd = String(argv[0] || "help").toLowerCase();
|
|
7
|
-
|
|
7
|
+
import defaults from "../config/silicaclaw-defaults.json" with { type: "json" };
|
|
8
|
+
|
|
9
|
+
const API_BASE = String(process.env.SILICACLAW_API_BASE || defaults.bridge.api_base).replace(/\/+$/, "");
|
|
8
10
|
const client = createOpenClawBridgeClient({ apiBase: API_BASE });
|
|
9
11
|
|
|
10
12
|
const COLOR = {
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
import readline from "node:readline";
|
|
4
4
|
import { createOpenClawBridgeClient } from "./openclaw-bridge-adapter.mjs";
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
import defaults from "../config/silicaclaw-defaults.json" with { type: "json" };
|
|
7
|
+
|
|
8
|
+
const apiBase = String(process.env.SILICACLAW_API_BASE || defaults.bridge.api_base).replace(/\/+$/, "");
|
|
7
9
|
const bridge = createOpenClawBridgeClient({ apiBase });
|
|
8
10
|
|
|
9
11
|
const COLOR = {
|
package/scripts/quickstart.sh
CHANGED
|
@@ -7,6 +7,10 @@ WORK_DIR="$ROOT_DIR"
|
|
|
7
7
|
IS_NPX_MODE=0
|
|
8
8
|
DEFAULT_MODE_PICK="${QUICKSTART_DEFAULT_MODE:-3}"
|
|
9
9
|
CONNECT_MODE="${QUICKSTART_CONNECT_MODE:-0}"
|
|
10
|
+
DEFAULTS_FILE="$ROOT_DIR/config/silicaclaw-defaults.json"
|
|
11
|
+
DEFAULT_LOCAL_CONSOLE_PORT="$(node -p "require(process.argv[1]).ports.local_console" "$DEFAULTS_FILE")"
|
|
12
|
+
DEFAULT_GLOBAL_SIGNALING_URL="$(node -p "require(process.argv[1]).network.global_preview.relay_url" "$DEFAULTS_FILE")"
|
|
13
|
+
DEFAULT_GLOBAL_ROOM="$(node -p "require(process.argv[1]).network.global_preview.room" "$DEFAULTS_FILE")"
|
|
10
14
|
|
|
11
15
|
case "$DEFAULT_MODE_PICK" in
|
|
12
16
|
1|2|3) ;;
|
|
@@ -144,7 +148,7 @@ install_npx_alias() {
|
|
|
144
148
|
rc_file="$(detect_shell_rc_file)"
|
|
145
149
|
local begin_mark="# >>> silicaclaw npx alias >>>"
|
|
146
150
|
local end_mark="# <<< silicaclaw npx alias <<<"
|
|
147
|
-
local alias_line="alias silicaclaw='npx -y @silicaclaw/cli@
|
|
151
|
+
local alias_line="alias silicaclaw='npx -y @silicaclaw/cli@latest'"
|
|
148
152
|
|
|
149
153
|
mkdir -p "$(dirname "$rc_file")"
|
|
150
154
|
touch "$rc_file"
|
|
@@ -345,14 +349,14 @@ EOF"
|
|
|
345
349
|
|
|
346
350
|
if [ "$INSTALLED" != "1" ]; then
|
|
347
351
|
echo "你也可以选择无需全局安装的命令别名模式。"
|
|
348
|
-
if ask_yes_no "是否自动写入 shell alias(silicaclaw -> npx @silicaclaw/cli@
|
|
352
|
+
if ask_yes_no "是否自动写入 shell alias(silicaclaw -> npx @silicaclaw/cli@latest)?" "Y"; then
|
|
349
353
|
if install_npx_alias; then
|
|
350
354
|
success "alias 安装完成"
|
|
351
355
|
else
|
|
352
356
|
note "alias 安装失败。继续使用 npx 即可。"
|
|
353
357
|
fi
|
|
354
358
|
else
|
|
355
|
-
kv "临时用法" "npx @silicaclaw/cli@
|
|
359
|
+
kv "临时用法" "npx @silicaclaw/cli@latest <command>"
|
|
356
360
|
fi
|
|
357
361
|
fi
|
|
358
362
|
fi
|
|
@@ -386,7 +390,7 @@ fi
|
|
|
386
390
|
NETWORK_MODE="local"
|
|
387
391
|
NETWORK_ADAPTER="local-event-bus"
|
|
388
392
|
WEBRTC_SIGNALING_URL_VALUE=""
|
|
389
|
-
WEBRTC_ROOM_VALUE="
|
|
393
|
+
WEBRTC_ROOM_VALUE="$DEFAULT_GLOBAL_ROOM"
|
|
390
394
|
AUTO_START_SIGNALING=0
|
|
391
395
|
|
|
392
396
|
case "$MODE_PICK" in
|
|
@@ -398,9 +402,9 @@ case "$MODE_PICK" in
|
|
|
398
402
|
NETWORK_MODE="global-preview"
|
|
399
403
|
NETWORK_ADAPTER="relay-preview"
|
|
400
404
|
PUBLIC_IP="$(detect_public_ip)"
|
|
401
|
-
SIGNALING_DEFAULT="${WEBRTC_SIGNALING_URL
|
|
405
|
+
SIGNALING_DEFAULT="${WEBRTC_SIGNALING_URL:-$DEFAULT_GLOBAL_SIGNALING_URL}"
|
|
402
406
|
if [ -n "$PUBLIC_IP" ]; then
|
|
403
|
-
SIGNALING_DEFAULT="
|
|
407
|
+
SIGNALING_DEFAULT="$DEFAULT_GLOBAL_SIGNALING_URL"
|
|
404
408
|
fi
|
|
405
409
|
note "signaling 地址需要所有节点都可访问。"
|
|
406
410
|
if [ -n "$PUBLIC_IP" ]; then
|
|
@@ -428,8 +432,8 @@ case "$MODE_PICK" in
|
|
|
428
432
|
kv "本地 relay" "PORT=$SIGNALING_PORT_VALUE"
|
|
429
433
|
fi
|
|
430
434
|
|
|
431
|
-
read -r -p "请输入 room(默认
|
|
432
|
-
WEBRTC_ROOM_VALUE="${WEBRTC_ROOM_VALUE_INPUT
|
|
435
|
+
read -r -p "请输入 room(默认 ${DEFAULT_GLOBAL_ROOM}): " WEBRTC_ROOM_VALUE_INPUT || true
|
|
436
|
+
WEBRTC_ROOM_VALUE="${WEBRTC_ROOM_VALUE_INPUT:-$DEFAULT_GLOBAL_ROOM}"
|
|
433
437
|
;;
|
|
434
438
|
*)
|
|
435
439
|
NETWORK_MODE="local"
|
|
@@ -481,7 +485,7 @@ else
|
|
|
481
485
|
run_cmd "$GATEWAY_CMD"
|
|
482
486
|
echo ""
|
|
483
487
|
success "已启动完成"
|
|
484
|
-
kv "打开" "http://localhost
|
|
488
|
+
kv "打开" "http://localhost:${DEFAULT_LOCAL_CONSOLE_PORT}"
|
|
485
489
|
echo ""
|
|
486
490
|
echo "常用命令:"
|
|
487
491
|
kv "Status" "silicaclaw status"
|
package/scripts/release-pack.mjs
CHANGED
|
@@ -21,6 +21,10 @@ function normalizeVersion(value) {
|
|
|
21
21
|
return text.startsWith("v") ? text.slice(1) : text;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
function toSkillVersion(rootVersion) {
|
|
25
|
+
return String(rootVersion || "").replace(/-(\d+)$/, "-beta.$1");
|
|
26
|
+
}
|
|
27
|
+
|
|
24
28
|
function assert(condition, message) {
|
|
25
29
|
if (!condition) {
|
|
26
30
|
console.error(message);
|
|
@@ -55,11 +59,14 @@ function verifyVersionSync() {
|
|
|
55
59
|
const skillManifest = readJson(resolve(ROOT_DIR, "openclaw-skills", "silicaclaw-broadcast", "manifest.json"));
|
|
56
60
|
|
|
57
61
|
const expected = normalizeVersion(pkg.version);
|
|
62
|
+
const expectedSkill = toSkillVersion(expected);
|
|
58
63
|
const checks = [
|
|
59
64
|
["package.json", normalizeVersion(pkg.version)],
|
|
60
65
|
["package-lock.json", normalizeVersion(lock.version)],
|
|
61
66
|
['package-lock.json packages[""]', normalizeVersion(lock.packages?.[""]?.version)],
|
|
62
67
|
["VERSION", normalizeVersion(rootVersionFile)],
|
|
68
|
+
];
|
|
69
|
+
const skillChecks = [
|
|
63
70
|
["skill VERSION", normalizeVersion(skillVersionFile)],
|
|
64
71
|
["skill manifest", normalizeVersion(skillManifest.version)],
|
|
65
72
|
];
|
|
@@ -69,7 +76,12 @@ function verifyVersionSync() {
|
|
|
69
76
|
assert(actual === expected, `Version mismatch: ${label}=${actual}, expected ${expected}`);
|
|
70
77
|
}
|
|
71
78
|
|
|
72
|
-
|
|
79
|
+
for (const [label, actual] of skillChecks) {
|
|
80
|
+
assert(Boolean(actual), `Missing version in ${label}`);
|
|
81
|
+
assert(actual === expectedSkill, `Version mismatch: ${label}=${actual}, expected ${expectedSkill}`);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
console.log(`Version sync OK: root=${expected}, skill=${expectedSkill}`);
|
|
73
85
|
}
|
|
74
86
|
|
|
75
87
|
function main() {
|
|
@@ -238,7 +238,7 @@ function installPersistentCommand() {
|
|
|
238
238
|
"#!/usr/bin/env bash",
|
|
239
239
|
"set -euo pipefail",
|
|
240
240
|
'export npm_config_cache="${npm_config_cache:-$HOME/.silicaclaw/npm-cache}"',
|
|
241
|
-
'exec npx -y @silicaclaw/cli@
|
|
241
|
+
'exec npx -y @silicaclaw/cli@latest "$@"',
|
|
242
242
|
"",
|
|
243
243
|
].join("\n"),
|
|
244
244
|
{ encoding: "utf8", mode: 0o755 }
|
|
@@ -306,14 +306,14 @@ function canWriteGlobalPrefix() {
|
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
308
|
|
|
309
|
-
function showUpdateGuide(current, latest
|
|
309
|
+
function showUpdateGuide(current, latest) {
|
|
310
310
|
headline();
|
|
311
311
|
console.log("");
|
|
312
|
-
const upToDate = Boolean(
|
|
312
|
+
const upToDate = Boolean(latest) && current === latest;
|
|
313
313
|
if (upToDate) {
|
|
314
314
|
kv("Status", `up to date (${current})`);
|
|
315
315
|
} else {
|
|
316
|
-
kv("Status", `
|
|
316
|
+
kv("Status", `update available (${latest || "-"})`);
|
|
317
317
|
}
|
|
318
318
|
console.log("");
|
|
319
319
|
kv("Start", "silicaclaw start");
|
|
@@ -404,11 +404,11 @@ function restartGatewayIfRunning() {
|
|
|
404
404
|
runInherit("node", args, { cwd: process.cwd() });
|
|
405
405
|
}
|
|
406
406
|
|
|
407
|
-
function tryGlobalUpgrade(
|
|
407
|
+
function tryGlobalUpgrade(version) {
|
|
408
408
|
const writableGlobal = canWriteGlobalPrefix();
|
|
409
409
|
if (!writableGlobal) return false;
|
|
410
|
-
kv("Upgrade", `installing @silicaclaw/cli@${
|
|
411
|
-
const exactResult = runCapture("npm", ["i", "-g", `@silicaclaw/cli@${
|
|
410
|
+
kv("Upgrade", `installing @silicaclaw/cli@${version} globally`);
|
|
411
|
+
const exactResult = runCapture("npm", ["i", "-g", `@silicaclaw/cli@${version}`]);
|
|
412
412
|
if ((exactResult.status ?? 1) === 0) {
|
|
413
413
|
if (exactResult.stdout) process.stdout.write(exactResult.stdout);
|
|
414
414
|
if (exactResult.stderr) process.stderr.write(exactResult.stderr);
|
|
@@ -417,8 +417,8 @@ function tryGlobalUpgrade(beta) {
|
|
|
417
417
|
|
|
418
418
|
const detail = compactOutput(`${exactResult.stdout || ""}\n${exactResult.stderr || ""}`);
|
|
419
419
|
if (detail.includes("ETARGET") || detail.includes("No matching version found")) {
|
|
420
|
-
kv("Fallback", "registry metadata is still settling, retrying via @
|
|
421
|
-
const fallbackResult = runInherit("npm", ["i", "-g", "@silicaclaw/cli@
|
|
420
|
+
kv("Fallback", "registry metadata is still settling, retrying via @latest tag");
|
|
421
|
+
const fallbackResult = runInherit("npm", ["i", "-g", "@silicaclaw/cli@latest"]);
|
|
422
422
|
return (fallbackResult.status ?? 1) === 0;
|
|
423
423
|
}
|
|
424
424
|
|
|
@@ -445,18 +445,17 @@ function update() {
|
|
|
445
445
|
const text = String(result.stdout || "").trim();
|
|
446
446
|
const tags = text ? JSON.parse(text) : {};
|
|
447
447
|
const latest = tags.latest ? String(tags.latest) : "";
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
const hasNewBeta = Boolean(beta) && beta !== current;
|
|
448
|
+
showUpdateGuide(current, latest);
|
|
449
|
+
const hasNewLatest = Boolean(latest) && latest !== current;
|
|
451
450
|
const npxRuntime = isNpxRun();
|
|
452
451
|
|
|
453
|
-
if (
|
|
452
|
+
if (hasNewLatest) {
|
|
454
453
|
if (npxRuntime) {
|
|
455
|
-
kv("Update", `next run will use ${
|
|
456
|
-
} else if (tryGlobalUpgrade(
|
|
457
|
-
kv("Update", `installed ${
|
|
454
|
+
kv("Update", `next run will use ${latest}`);
|
|
455
|
+
} else if (tryGlobalUpgrade(latest)) {
|
|
456
|
+
kv("Update", `installed ${latest}`);
|
|
458
457
|
} else {
|
|
459
|
-
kv("Update", `install ${
|
|
458
|
+
kv("Update", `install ${latest} manually if needed`);
|
|
460
459
|
}
|
|
461
460
|
}
|
|
462
461
|
|
|
@@ -504,7 +503,8 @@ function help() {
|
|
|
504
503
|
headline();
|
|
505
504
|
console.log("");
|
|
506
505
|
section("Commands");
|
|
507
|
-
kv("
|
|
506
|
+
kv("First Run", "npx -y @silicaclaw/cli@latest onboard");
|
|
507
|
+
kv("Install", "npx -y @silicaclaw/cli@latest install");
|
|
508
508
|
kv("Start", "silicaclaw start");
|
|
509
509
|
kv("Status", "silicaclaw status");
|
|
510
510
|
kv("Stop", "silicaclaw stop");
|
|
@@ -519,6 +519,11 @@ function help() {
|
|
|
519
519
|
kv("Logs", "silicaclaw logs local-console");
|
|
520
520
|
kv("Doctor", "silicaclaw doctor");
|
|
521
521
|
kv("Help", "silicaclaw help");
|
|
522
|
+
console.log("");
|
|
523
|
+
section("Meaning");
|
|
524
|
+
kv("onboard", "first-time setup wizard");
|
|
525
|
+
kv("connect", "quick network setup wizard");
|
|
526
|
+
kv("install", "install persistent silicaclaw command only");
|
|
522
527
|
}
|
|
523
528
|
|
|
524
529
|
const cmd = String(process.argv[2] || "help").trim().toLowerCase();
|