@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.
Files changed (195) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/INSTALL.md +44 -11
  3. package/README.md +53 -19
  4. package/VERSION +1 -1
  5. package/apps/local-console/dist/apps/local-console/src/server.d.ts +30 -12
  6. package/apps/local-console/dist/apps/local-console/src/server.js +265 -48
  7. package/apps/local-console/dist/config/silicaclaw-defaults.json +19 -0
  8. package/apps/local-console/dist/packages/core/src/socialConfig.js +9 -5
  9. package/apps/local-console/dist/packages/network/src/realPreview.js +6 -2
  10. package/apps/local-console/dist/packages/network/src/relayPreview.js +8 -2
  11. package/apps/local-console/dist/packages/network/src/transport/udpLanBroadcastTransport.js +2 -1
  12. package/apps/local-console/dist/packages/network/src/webrtcPreview.js +5 -1
  13. package/apps/local-console/dist/packages/storage/src/socialRuntimeRepo.js +8 -4
  14. package/apps/local-console/public/app/app.js +17 -1
  15. package/apps/local-console/public/app/events.js +38 -2
  16. package/apps/local-console/public/app/network.js +32 -3
  17. package/apps/local-console/public/app/overview.js +4 -2
  18. package/apps/local-console/public/app/social.js +175 -26
  19. package/apps/local-console/public/app/styles.css +182 -14
  20. package/apps/local-console/public/app/template.js +70 -30
  21. package/apps/local-console/public/app/translations.js +131 -43
  22. package/apps/local-console/src/server.ts +281 -50
  23. package/apps/public-explorer/dist/apps/public-explorer/src/server.d.ts +1 -0
  24. package/apps/public-explorer/dist/apps/public-explorer/src/server.js +41 -0
  25. package/apps/public-explorer/dist/config/silicaclaw-defaults.json +19 -0
  26. package/apps/public-explorer/public/app/app.js +22 -2
  27. package/apps/public-explorer/public/app/template.js +4 -4
  28. package/apps/public-explorer/public/app/translations.js +15 -15
  29. package/apps/public-explorer/src/server.ts +11 -1
  30. package/docs/NEW_USER_INSTALL.md +14 -10
  31. package/docs/NEW_USER_OPERATIONS.md +3 -3
  32. package/docs/OPENCLAW_BRIDGE.md +15 -0
  33. package/docs/OPENCLAW_BRIDGE_ZH.md +15 -0
  34. package/node_modules/@silicaclaw/core/dist/config/silicaclaw-defaults.json +19 -0
  35. package/node_modules/@silicaclaw/core/dist/packages/core/src/crypto.d.ts +6 -0
  36. package/node_modules/@silicaclaw/core/dist/packages/core/src/crypto.js +50 -0
  37. package/node_modules/@silicaclaw/core/dist/packages/core/src/directory.d.ts +17 -0
  38. package/node_modules/@silicaclaw/core/dist/packages/core/src/directory.js +145 -0
  39. package/node_modules/@silicaclaw/core/dist/packages/core/src/identity.d.ts +2 -0
  40. package/node_modules/@silicaclaw/core/dist/packages/core/src/identity.js +18 -0
  41. package/node_modules/@silicaclaw/core/dist/packages/core/src/index.d.ts +12 -0
  42. package/node_modules/@silicaclaw/core/dist/packages/core/src/index.js +28 -0
  43. package/node_modules/@silicaclaw/core/dist/packages/core/src/indexing.d.ts +6 -0
  44. package/node_modules/@silicaclaw/core/dist/packages/core/src/indexing.js +43 -0
  45. package/node_modules/@silicaclaw/core/dist/packages/core/src/presence.d.ts +4 -0
  46. package/node_modules/@silicaclaw/core/dist/packages/core/src/presence.js +23 -0
  47. package/node_modules/@silicaclaw/core/dist/packages/core/src/profile.d.ts +4 -0
  48. package/node_modules/@silicaclaw/core/dist/packages/core/src/profile.js +39 -0
  49. package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  50. package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.js +103 -0
  51. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialConfig.d.ts +100 -0
  52. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialConfig.js +300 -0
  53. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialMessage.d.ts +19 -0
  54. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialMessage.js +69 -0
  55. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialResolver.d.ts +46 -0
  56. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialResolver.js +237 -0
  57. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialTemplate.d.ts +2 -0
  58. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialTemplate.js +90 -0
  59. package/node_modules/@silicaclaw/core/dist/packages/core/src/types.d.ts +59 -0
  60. package/node_modules/@silicaclaw/core/dist/packages/core/src/types.js +2 -0
  61. package/node_modules/@silicaclaw/core/src/socialConfig.ts +7 -5
  62. package/node_modules/@silicaclaw/network/dist/config/silicaclaw-defaults.json +19 -0
  63. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/messageEnvelope.d.ts +28 -0
  64. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/messageEnvelope.js +36 -0
  65. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/peerDiscovery.d.ts +43 -0
  66. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/peerDiscovery.js +2 -0
  67. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/topicCodec.d.ts +4 -0
  68. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/topicCodec.js +2 -0
  69. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/transport.d.ts +36 -0
  70. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/transport.js +2 -0
  71. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
  72. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.js +24 -0
  73. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonTopicCodec.d.ts +5 -0
  74. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonTopicCodec.js +12 -0
  75. package/node_modules/@silicaclaw/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.d.ts +28 -0
  76. package/node_modules/@silicaclaw/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.js +144 -0
  77. package/node_modules/@silicaclaw/network/dist/packages/network/src/index.d.ts +14 -0
  78. package/node_modules/@silicaclaw/network/dist/packages/network/src/index.js +30 -0
  79. package/node_modules/@silicaclaw/network/dist/packages/network/src/localEventBus.d.ts +9 -0
  80. package/node_modules/@silicaclaw/network/dist/packages/network/src/localEventBus.js +47 -0
  81. package/node_modules/@silicaclaw/network/dist/packages/network/src/mock.d.ts +8 -0
  82. package/node_modules/@silicaclaw/network/dist/packages/network/src/mock.js +24 -0
  83. package/node_modules/@silicaclaw/network/dist/packages/network/src/realPreview.d.ts +105 -0
  84. package/node_modules/@silicaclaw/network/dist/packages/network/src/realPreview.js +331 -0
  85. package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.d.ts +166 -0
  86. package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.js +448 -0
  87. package/node_modules/@silicaclaw/network/dist/packages/network/src/transport/udpLanBroadcastTransport.d.ts +23 -0
  88. package/node_modules/@silicaclaw/network/dist/packages/network/src/transport/udpLanBroadcastTransport.js +154 -0
  89. package/node_modules/@silicaclaw/network/dist/packages/network/src/types.d.ts +6 -0
  90. package/node_modules/@silicaclaw/network/dist/packages/network/src/types.js +2 -0
  91. package/node_modules/@silicaclaw/network/dist/packages/network/src/webrtcPreview.d.ts +163 -0
  92. package/node_modules/@silicaclaw/network/dist/packages/network/src/webrtcPreview.js +848 -0
  93. package/node_modules/@silicaclaw/network/src/realPreview.ts +3 -2
  94. package/node_modules/@silicaclaw/network/src/relayPreview.ts +5 -2
  95. package/node_modules/@silicaclaw/network/src/transport/udpLanBroadcastTransport.ts +2 -1
  96. package/node_modules/@silicaclaw/network/src/webrtcPreview.ts +2 -1
  97. package/node_modules/@silicaclaw/storage/dist/socialRuntimeRepo.js +8 -4
  98. package/node_modules/@silicaclaw/storage/src/socialRuntimeRepo.ts +5 -4
  99. package/openclaw-skills/silicaclaw-bridge-setup/SKILL.md +147 -0
  100. package/openclaw-skills/silicaclaw-bridge-setup/VERSION +1 -0
  101. package/openclaw-skills/silicaclaw-bridge-setup/agents/openai.yaml +6 -0
  102. package/openclaw-skills/silicaclaw-bridge-setup/manifest.json +27 -0
  103. package/openclaw-skills/silicaclaw-bridge-setup/references/owner-dialogue-cheatsheet-zh.md +58 -0
  104. package/openclaw-skills/silicaclaw-bridge-setup/references/runtime-setup.md +43 -0
  105. package/openclaw-skills/silicaclaw-bridge-setup/references/troubleshooting.md +24 -0
  106. package/openclaw-skills/silicaclaw-broadcast/SKILL.md +132 -0
  107. package/openclaw-skills/silicaclaw-broadcast/VERSION +1 -1
  108. package/openclaw-skills/silicaclaw-broadcast/agents/openai.yaml +2 -2
  109. package/openclaw-skills/silicaclaw-broadcast/manifest.json +3 -2
  110. package/openclaw-skills/silicaclaw-broadcast/references/owner-dialogue-cheatsheet-zh.md +81 -0
  111. package/openclaw-skills/silicaclaw-owner-push/SKILL.md +217 -0
  112. package/openclaw-skills/silicaclaw-owner-push/VERSION +1 -0
  113. package/openclaw-skills/silicaclaw-owner-push/agents/openai.yaml +6 -0
  114. package/openclaw-skills/silicaclaw-owner-push/manifest.json +30 -0
  115. package/openclaw-skills/silicaclaw-owner-push/references/owner-dialogue-cheatsheet-zh.md +87 -0
  116. package/openclaw-skills/silicaclaw-owner-push/references/push-routing-policy.md +43 -0
  117. package/openclaw-skills/silicaclaw-owner-push/references/runtime-setup.md +41 -0
  118. package/openclaw-skills/silicaclaw-owner-push/scripts/owner-push-forwarder.mjs +214 -0
  119. package/openclaw-skills/silicaclaw-owner-push/scripts/send-to-owner-via-openclaw.mjs +69 -0
  120. package/package.json +1 -1
  121. package/packages/core/dist/config/silicaclaw-defaults.json +19 -0
  122. package/packages/core/dist/packages/core/src/crypto.d.ts +6 -0
  123. package/packages/core/dist/packages/core/src/crypto.js +50 -0
  124. package/packages/core/dist/packages/core/src/directory.d.ts +17 -0
  125. package/packages/core/dist/packages/core/src/directory.js +145 -0
  126. package/packages/core/dist/packages/core/src/identity.d.ts +2 -0
  127. package/packages/core/dist/packages/core/src/identity.js +18 -0
  128. package/packages/core/dist/packages/core/src/index.d.ts +12 -0
  129. package/packages/core/dist/packages/core/src/index.js +28 -0
  130. package/packages/core/dist/packages/core/src/indexing.d.ts +6 -0
  131. package/packages/core/dist/packages/core/src/indexing.js +43 -0
  132. package/packages/core/dist/packages/core/src/presence.d.ts +4 -0
  133. package/packages/core/dist/packages/core/src/presence.js +23 -0
  134. package/packages/core/dist/packages/core/src/profile.d.ts +4 -0
  135. package/packages/core/dist/packages/core/src/profile.js +39 -0
  136. package/packages/core/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  137. package/packages/core/dist/packages/core/src/publicProfileSummary.js +103 -0
  138. package/packages/core/dist/packages/core/src/socialConfig.d.ts +100 -0
  139. package/packages/core/dist/packages/core/src/socialConfig.js +300 -0
  140. package/packages/core/dist/packages/core/src/socialMessage.d.ts +19 -0
  141. package/packages/core/dist/packages/core/src/socialMessage.js +69 -0
  142. package/packages/core/dist/packages/core/src/socialResolver.d.ts +46 -0
  143. package/packages/core/dist/packages/core/src/socialResolver.js +237 -0
  144. package/packages/core/dist/packages/core/src/socialTemplate.d.ts +2 -0
  145. package/packages/core/dist/packages/core/src/socialTemplate.js +90 -0
  146. package/packages/core/dist/packages/core/src/types.d.ts +59 -0
  147. package/packages/core/dist/packages/core/src/types.js +2 -0
  148. package/packages/core/src/socialConfig.ts +7 -5
  149. package/packages/network/dist/config/silicaclaw-defaults.json +19 -0
  150. package/packages/network/dist/packages/network/src/abstractions/messageEnvelope.d.ts +28 -0
  151. package/packages/network/dist/packages/network/src/abstractions/messageEnvelope.js +36 -0
  152. package/packages/network/dist/packages/network/src/abstractions/peerDiscovery.d.ts +43 -0
  153. package/packages/network/dist/packages/network/src/abstractions/peerDiscovery.js +2 -0
  154. package/packages/network/dist/packages/network/src/abstractions/topicCodec.d.ts +4 -0
  155. package/packages/network/dist/packages/network/src/abstractions/topicCodec.js +2 -0
  156. package/packages/network/dist/packages/network/src/abstractions/transport.d.ts +36 -0
  157. package/packages/network/dist/packages/network/src/abstractions/transport.js +2 -0
  158. package/packages/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
  159. package/packages/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.js +24 -0
  160. package/packages/network/dist/packages/network/src/codec/jsonTopicCodec.d.ts +5 -0
  161. package/packages/network/dist/packages/network/src/codec/jsonTopicCodec.js +12 -0
  162. package/packages/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.d.ts +28 -0
  163. package/packages/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.js +144 -0
  164. package/packages/network/dist/packages/network/src/index.d.ts +14 -0
  165. package/packages/network/dist/packages/network/src/index.js +30 -0
  166. package/packages/network/dist/packages/network/src/localEventBus.d.ts +9 -0
  167. package/packages/network/dist/packages/network/src/localEventBus.js +47 -0
  168. package/packages/network/dist/packages/network/src/mock.d.ts +8 -0
  169. package/packages/network/dist/packages/network/src/mock.js +24 -0
  170. package/packages/network/dist/packages/network/src/realPreview.d.ts +105 -0
  171. package/packages/network/dist/packages/network/src/realPreview.js +331 -0
  172. package/packages/network/dist/packages/network/src/relayPreview.d.ts +166 -0
  173. package/packages/network/dist/packages/network/src/relayPreview.js +448 -0
  174. package/packages/network/dist/packages/network/src/transport/udpLanBroadcastTransport.d.ts +23 -0
  175. package/packages/network/dist/packages/network/src/transport/udpLanBroadcastTransport.js +154 -0
  176. package/packages/network/dist/packages/network/src/types.d.ts +6 -0
  177. package/packages/network/dist/packages/network/src/types.js +2 -0
  178. package/packages/network/dist/packages/network/src/webrtcPreview.d.ts +163 -0
  179. package/packages/network/dist/packages/network/src/webrtcPreview.js +848 -0
  180. package/packages/network/src/realPreview.ts +3 -2
  181. package/packages/network/src/relayPreview.ts +5 -2
  182. package/packages/network/src/transport/udpLanBroadcastTransport.ts +2 -1
  183. package/packages/network/src/webrtcPreview.ts +2 -1
  184. package/packages/storage/dist/socialRuntimeRepo.js +8 -4
  185. package/packages/storage/src/socialRuntimeRepo.ts +5 -4
  186. package/scripts/functional-check.mjs +35 -6
  187. package/scripts/install-openclaw-skill.mjs +9 -2
  188. package/scripts/openclaw-bridge-adapter.mjs +3 -1
  189. package/scripts/openclaw-bridge-client.mjs +3 -1
  190. package/scripts/openclaw-runtime-demo.mjs +3 -1
  191. package/scripts/quickstart.sh +13 -9
  192. package/scripts/release-pack.mjs +13 -1
  193. package/scripts/silicaclaw-cli.mjs +23 -18
  194. package/scripts/silicaclaw-gateway.mjs +33 -27
  195. 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 ?? "silicaclaw.preview");
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 : "silicaclaw.preview";
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 = String(options.namespace || "silicaclaw.preview").trim() || "silicaclaw.preview";
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 = String(options.room || "silicaclaw-global-preview").trim() || "silicaclaw-global-preview";
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 ?? 44123;
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 ?? "silicaclaw.preview").trim() || "silicaclaw.preview";
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: "global-preview",
21
+ mode: silicaclaw_defaults_json_1.default.network.default_mode,
18
22
  adapter: "relay-preview",
19
- namespace: "silicaclaw.preview",
23
+ namespace: silicaclaw_defaults_json_1.default.network.default_namespace,
20
24
  port: null,
21
- signaling_url: "https://relay.silicaclaw.com",
25
+ signaling_url: silicaclaw_defaults_json_1.default.network.global_preview.relay_url,
22
26
  signaling_urls: [],
23
- room: "silicaclaw-global-preview",
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: "global-preview",
17
+ mode: defaults.network.default_mode as SocialRuntimeConfig["resolved_network"]["mode"],
17
18
  adapter: "relay-preview",
18
- namespace: "silicaclaw.preview",
19
+ namespace: defaults.network.default_namespace,
19
20
  port: null,
20
- signaling_url: "https://relay.silicaclaw.com",
21
+ signaling_url: defaults.network.global_preview.relay_url,
21
22
  signaling_urls: [],
22
- room: "silicaclaw-global-preview",
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 checkInlineScriptSyntax(htmlPath) {
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
- assert(start >= 0 && end > start, `Missing inline script in ${htmlPath}`);
21
- const js = html.slice(start + '<script>'.length, end);
22
- new vm.Script(js, { filename: htmlPath });
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
- checkInlineScriptSyntax(path.resolve(root, 'apps/local-console/public/index.html'));
90
- checkInlineScriptSyntax(path.resolve(root, 'apps/public-explorer/public/index.html'));
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 skills = listSkillDirs(sourceRoot);
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
- const DEFAULT_API_BASE = "http://localhost:4310";
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
- const API_BASE = String(process.env.SILICACLAW_API_BASE || "http://localhost:4310").replace(/\/+$/, "");
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
- const apiBase = String(process.env.SILICACLAW_API_BASE || "http://localhost:4310").replace(/\/+$/, "");
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 = {
@@ -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@beta'"
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@beta)?" "Y"; then
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@beta <command>"
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="silicaclaw-global-preview"
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:-https://relay.silicaclaw.com}"
405
+ SIGNALING_DEFAULT="${WEBRTC_SIGNALING_URL:-$DEFAULT_GLOBAL_SIGNALING_URL}"
402
406
  if [ -n "$PUBLIC_IP" ]; then
403
- SIGNALING_DEFAULT="https://relay.silicaclaw.com"
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(默认 silicaclaw-global-preview): " WEBRTC_ROOM_VALUE_INPUT || true
432
- WEBRTC_ROOM_VALUE="${WEBRTC_ROOM_VALUE_INPUT:-silicaclaw-global-preview}"
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:4310"
488
+ kv "打开" "http://localhost:${DEFAULT_LOCAL_CONSOLE_PORT}"
485
489
  echo ""
486
490
  echo "常用命令:"
487
491
  kv "Status" "silicaclaw status"
@@ -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
- console.log(`Version sync OK: ${expected}`);
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@beta "$@"',
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, beta) {
309
+ function showUpdateGuide(current, latest) {
310
310
  headline();
311
311
  console.log("");
312
- const upToDate = Boolean(beta) && current === beta;
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", `beta update available (${beta || "-"})`);
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(beta) {
407
+ function tryGlobalUpgrade(version) {
408
408
  const writableGlobal = canWriteGlobalPrefix();
409
409
  if (!writableGlobal) return false;
410
- kv("Upgrade", `installing @silicaclaw/cli@${beta} globally`);
411
- const exactResult = runCapture("npm", ["i", "-g", `@silicaclaw/cli@${beta}`]);
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 @beta tag");
421
- const fallbackResult = runInherit("npm", ["i", "-g", "@silicaclaw/cli@beta"]);
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
- const beta = tags.beta ? String(tags.beta) : "";
449
- showUpdateGuide(current, latest, beta);
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 (hasNewBeta) {
452
+ if (hasNewLatest) {
454
453
  if (npxRuntime) {
455
- kv("Update", `next run will use ${beta}`);
456
- } else if (tryGlobalUpgrade(beta)) {
457
- kv("Update", `installed ${beta}`);
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 ${beta} manually if needed`);
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("Install", "npx -y @silicaclaw/cli@beta install");
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();