@silicaclaw/cli 2026.3.19-9 → 2026.3.20-1

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 (278) hide show
  1. package/CHANGELOG.md +128 -0
  2. package/DEMO_GUIDE.md +1 -1
  3. package/INSTALL.md +47 -13
  4. package/README.md +54 -19
  5. package/VERSION +1 -1
  6. package/apps/local-console/dist/apps/local-console/src/server.d.ts +51 -12
  7. package/apps/local-console/dist/apps/local-console/src/server.js +619 -183
  8. package/apps/local-console/dist/config/silicaclaw-defaults.json +19 -0
  9. package/apps/local-console/dist/packages/core/src/socialConfig.js +9 -5
  10. package/apps/local-console/dist/packages/network/src/realPreview.js +6 -2
  11. package/apps/local-console/dist/packages/network/src/relayPreview.js +8 -2
  12. package/apps/local-console/dist/packages/network/src/transport/udpLanBroadcastTransport.js +2 -1
  13. package/apps/local-console/dist/packages/network/src/webrtcPreview.js +5 -1
  14. package/apps/local-console/dist/packages/storage/config/silicaclaw-defaults.json +19 -0
  15. package/apps/local-console/dist/packages/storage/src/socialRuntimeRepo.js +8 -4
  16. package/apps/local-console/public/app/app.js +21 -1
  17. package/apps/local-console/public/app/events.js +40 -2
  18. package/apps/local-console/public/app/network.js +32 -3
  19. package/apps/local-console/public/app/overview.js +15 -1
  20. package/apps/local-console/public/app/shell.js +18 -34
  21. package/apps/local-console/public/app/social.js +207 -28
  22. package/apps/local-console/public/app/styles.css +182 -14
  23. package/apps/local-console/public/app/template.js +76 -31
  24. package/apps/local-console/public/app/translations.js +147 -51
  25. package/apps/local-console/src/server.ts +652 -189
  26. package/apps/public-explorer/dist/apps/public-explorer/src/server.d.ts +1 -0
  27. package/apps/public-explorer/dist/apps/public-explorer/src/server.js +41 -0
  28. package/apps/public-explorer/dist/config/silicaclaw-defaults.json +19 -0
  29. package/apps/public-explorer/public/app/app.js +22 -2
  30. package/apps/public-explorer/public/app/template.js +4 -4
  31. package/apps/public-explorer/public/app/translations.js +15 -15
  32. package/apps/public-explorer/src/server.ts +11 -1
  33. package/config/silicaclaw-defaults.json +19 -0
  34. package/dist/apps/local-console/src/server.d.ts +1 -0
  35. package/dist/apps/local-console/src/server.js +555 -0
  36. package/docs/NEW_USER_INSTALL.md +14 -10
  37. package/docs/NEW_USER_OPERATIONS.md +4 -4
  38. package/docs/OPENCLAW_BRIDGE.md +15 -0
  39. package/docs/OPENCLAW_BRIDGE_ZH.md +15 -0
  40. package/docs/RELEASE_CHECKLIST.md +95 -0
  41. package/node_modules/@silicaclaw/core/dist/config/silicaclaw-defaults.json +19 -0
  42. package/node_modules/@silicaclaw/core/dist/packages/core/src/crypto.d.ts +6 -0
  43. package/node_modules/@silicaclaw/core/dist/packages/core/src/crypto.js +50 -0
  44. package/node_modules/@silicaclaw/core/dist/packages/core/src/directory.d.ts +17 -0
  45. package/node_modules/@silicaclaw/core/dist/packages/core/src/directory.js +145 -0
  46. package/node_modules/@silicaclaw/core/dist/packages/core/src/identity.d.ts +2 -0
  47. package/node_modules/@silicaclaw/core/dist/packages/core/src/identity.js +18 -0
  48. package/node_modules/@silicaclaw/core/dist/packages/core/src/index.d.ts +12 -0
  49. package/node_modules/@silicaclaw/core/dist/packages/core/src/index.js +28 -0
  50. package/node_modules/@silicaclaw/core/dist/packages/core/src/indexing.d.ts +6 -0
  51. package/node_modules/@silicaclaw/core/dist/packages/core/src/indexing.js +43 -0
  52. package/node_modules/@silicaclaw/core/dist/packages/core/src/presence.d.ts +4 -0
  53. package/node_modules/@silicaclaw/core/dist/packages/core/src/presence.js +23 -0
  54. package/node_modules/@silicaclaw/core/dist/packages/core/src/profile.d.ts +4 -0
  55. package/node_modules/@silicaclaw/core/dist/packages/core/src/profile.js +39 -0
  56. package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  57. package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.js +103 -0
  58. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialConfig.d.ts +100 -0
  59. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialConfig.js +300 -0
  60. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialMessage.d.ts +19 -0
  61. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialMessage.js +69 -0
  62. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialResolver.d.ts +46 -0
  63. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialResolver.js +237 -0
  64. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialTemplate.d.ts +2 -0
  65. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialTemplate.js +90 -0
  66. package/node_modules/@silicaclaw/core/dist/packages/core/src/types.d.ts +59 -0
  67. package/node_modules/@silicaclaw/core/dist/packages/core/src/types.js +2 -0
  68. package/node_modules/@silicaclaw/core/src/socialConfig.ts +7 -5
  69. package/node_modules/@silicaclaw/network/dist/config/silicaclaw-defaults.json +19 -0
  70. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/messageEnvelope.d.ts +28 -0
  71. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/messageEnvelope.js +36 -0
  72. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/peerDiscovery.d.ts +43 -0
  73. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/peerDiscovery.js +2 -0
  74. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/topicCodec.d.ts +4 -0
  75. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/topicCodec.js +2 -0
  76. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/transport.d.ts +36 -0
  77. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/transport.js +2 -0
  78. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
  79. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.js +24 -0
  80. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonTopicCodec.d.ts +5 -0
  81. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonTopicCodec.js +12 -0
  82. package/node_modules/@silicaclaw/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.d.ts +28 -0
  83. package/node_modules/@silicaclaw/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.js +144 -0
  84. package/node_modules/@silicaclaw/network/dist/packages/network/src/index.d.ts +14 -0
  85. package/node_modules/@silicaclaw/network/dist/packages/network/src/index.js +30 -0
  86. package/node_modules/@silicaclaw/network/dist/packages/network/src/localEventBus.d.ts +9 -0
  87. package/node_modules/@silicaclaw/network/dist/packages/network/src/localEventBus.js +47 -0
  88. package/node_modules/@silicaclaw/network/dist/packages/network/src/mock.d.ts +8 -0
  89. package/node_modules/@silicaclaw/network/dist/packages/network/src/mock.js +24 -0
  90. package/node_modules/@silicaclaw/network/dist/packages/network/src/realPreview.d.ts +105 -0
  91. package/node_modules/@silicaclaw/network/dist/packages/network/src/realPreview.js +331 -0
  92. package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.d.ts +166 -0
  93. package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.js +448 -0
  94. package/node_modules/@silicaclaw/network/dist/packages/network/src/transport/udpLanBroadcastTransport.d.ts +23 -0
  95. package/node_modules/@silicaclaw/network/dist/packages/network/src/transport/udpLanBroadcastTransport.js +154 -0
  96. package/node_modules/@silicaclaw/network/dist/packages/network/src/types.d.ts +6 -0
  97. package/node_modules/@silicaclaw/network/dist/packages/network/src/types.js +2 -0
  98. package/node_modules/@silicaclaw/network/dist/packages/network/src/webrtcPreview.d.ts +163 -0
  99. package/node_modules/@silicaclaw/network/dist/packages/network/src/webrtcPreview.js +848 -0
  100. package/node_modules/@silicaclaw/network/src/realPreview.ts +3 -2
  101. package/node_modules/@silicaclaw/network/src/relayPreview.ts +5 -2
  102. package/node_modules/@silicaclaw/network/src/transport/udpLanBroadcastTransport.ts +2 -1
  103. package/node_modules/@silicaclaw/network/src/webrtcPreview.ts +2 -1
  104. package/node_modules/@silicaclaw/storage/config/silicaclaw-defaults.json +19 -0
  105. package/node_modules/@silicaclaw/storage/dist/config/silicaclaw-defaults.json +19 -0
  106. package/node_modules/@silicaclaw/storage/dist/packages/core/src/crypto.d.ts +6 -0
  107. package/node_modules/@silicaclaw/storage/dist/packages/core/src/crypto.js +50 -0
  108. package/node_modules/@silicaclaw/storage/dist/packages/core/src/directory.d.ts +17 -0
  109. package/node_modules/@silicaclaw/storage/dist/packages/core/src/directory.js +145 -0
  110. package/node_modules/@silicaclaw/storage/dist/packages/core/src/identity.d.ts +2 -0
  111. package/node_modules/@silicaclaw/storage/dist/packages/core/src/identity.js +18 -0
  112. package/node_modules/@silicaclaw/storage/dist/packages/core/src/index.d.ts +12 -0
  113. package/node_modules/@silicaclaw/storage/dist/packages/core/src/index.js +28 -0
  114. package/node_modules/@silicaclaw/storage/dist/packages/core/src/indexing.d.ts +6 -0
  115. package/node_modules/@silicaclaw/storage/dist/packages/core/src/indexing.js +43 -0
  116. package/node_modules/@silicaclaw/storage/dist/packages/core/src/presence.d.ts +4 -0
  117. package/node_modules/@silicaclaw/storage/dist/packages/core/src/presence.js +23 -0
  118. package/node_modules/@silicaclaw/storage/dist/packages/core/src/profile.d.ts +4 -0
  119. package/node_modules/@silicaclaw/storage/dist/packages/core/src/profile.js +39 -0
  120. package/node_modules/@silicaclaw/storage/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  121. package/node_modules/@silicaclaw/storage/dist/packages/core/src/publicProfileSummary.js +103 -0
  122. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialConfig.d.ts +100 -0
  123. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialConfig.js +300 -0
  124. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialMessage.d.ts +19 -0
  125. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialMessage.js +69 -0
  126. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialResolver.d.ts +46 -0
  127. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialResolver.js +237 -0
  128. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialTemplate.d.ts +2 -0
  129. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialTemplate.js +90 -0
  130. package/node_modules/@silicaclaw/storage/dist/packages/core/src/types.d.ts +59 -0
  131. package/node_modules/@silicaclaw/storage/dist/packages/core/src/types.js +2 -0
  132. package/node_modules/@silicaclaw/storage/dist/packages/storage/config/silicaclaw-defaults.json +19 -0
  133. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/index.d.ts +3 -0
  134. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/index.js +19 -0
  135. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/jsonRepo.d.ts +7 -0
  136. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/jsonRepo.js +29 -0
  137. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/repos.d.ts +61 -0
  138. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/repos.js +67 -0
  139. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/socialRuntimeRepo.d.ts +5 -0
  140. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/socialRuntimeRepo.js +57 -0
  141. package/node_modules/@silicaclaw/storage/dist/socialRuntimeRepo.js +8 -4
  142. package/node_modules/@silicaclaw/storage/src/socialRuntimeRepo.ts +5 -4
  143. package/node_modules/@silicaclaw/storage/tsconfig.json +1 -6
  144. package/openclaw-skills/silicaclaw-bridge-setup/SKILL.md +147 -0
  145. package/openclaw-skills/silicaclaw-bridge-setup/VERSION +1 -0
  146. package/openclaw-skills/silicaclaw-bridge-setup/agents/openai.yaml +6 -0
  147. package/openclaw-skills/silicaclaw-bridge-setup/manifest.json +27 -0
  148. package/openclaw-skills/silicaclaw-bridge-setup/references/owner-dialogue-cheatsheet-zh.md +58 -0
  149. package/openclaw-skills/silicaclaw-bridge-setup/references/runtime-setup.md +43 -0
  150. package/openclaw-skills/silicaclaw-bridge-setup/references/troubleshooting.md +24 -0
  151. package/openclaw-skills/silicaclaw-broadcast/SKILL.md +132 -0
  152. package/openclaw-skills/silicaclaw-broadcast/VERSION +1 -1
  153. package/openclaw-skills/silicaclaw-broadcast/agents/openai.yaml +2 -2
  154. package/openclaw-skills/silicaclaw-broadcast/manifest.json +3 -2
  155. package/openclaw-skills/silicaclaw-broadcast/references/owner-dialogue-cheatsheet-zh.md +81 -0
  156. package/openclaw-skills/silicaclaw-owner-push/SKILL.md +217 -0
  157. package/openclaw-skills/silicaclaw-owner-push/VERSION +1 -0
  158. package/openclaw-skills/silicaclaw-owner-push/agents/openai.yaml +6 -0
  159. package/openclaw-skills/silicaclaw-owner-push/manifest.json +30 -0
  160. package/openclaw-skills/silicaclaw-owner-push/references/owner-dialogue-cheatsheet-zh.md +87 -0
  161. package/openclaw-skills/silicaclaw-owner-push/references/push-routing-policy.md +43 -0
  162. package/openclaw-skills/silicaclaw-owner-push/references/runtime-setup.md +41 -0
  163. package/openclaw-skills/silicaclaw-owner-push/scripts/owner-push-forwarder.mjs +214 -0
  164. package/openclaw-skills/silicaclaw-owner-push/scripts/send-to-owner-via-openclaw.mjs +69 -0
  165. package/package.json +5 -1
  166. package/packages/core/dist/config/silicaclaw-defaults.json +19 -0
  167. package/packages/core/dist/packages/core/src/crypto.d.ts +6 -0
  168. package/packages/core/dist/packages/core/src/crypto.js +50 -0
  169. package/packages/core/dist/packages/core/src/directory.d.ts +17 -0
  170. package/packages/core/dist/packages/core/src/directory.js +145 -0
  171. package/packages/core/dist/packages/core/src/identity.d.ts +2 -0
  172. package/packages/core/dist/packages/core/src/identity.js +18 -0
  173. package/packages/core/dist/packages/core/src/index.d.ts +12 -0
  174. package/packages/core/dist/packages/core/src/index.js +28 -0
  175. package/packages/core/dist/packages/core/src/indexing.d.ts +6 -0
  176. package/packages/core/dist/packages/core/src/indexing.js +43 -0
  177. package/packages/core/dist/packages/core/src/presence.d.ts +4 -0
  178. package/packages/core/dist/packages/core/src/presence.js +23 -0
  179. package/packages/core/dist/packages/core/src/profile.d.ts +4 -0
  180. package/packages/core/dist/packages/core/src/profile.js +39 -0
  181. package/packages/core/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  182. package/packages/core/dist/packages/core/src/publicProfileSummary.js +103 -0
  183. package/packages/core/dist/packages/core/src/socialConfig.d.ts +100 -0
  184. package/packages/core/dist/packages/core/src/socialConfig.js +300 -0
  185. package/packages/core/dist/packages/core/src/socialMessage.d.ts +19 -0
  186. package/packages/core/dist/packages/core/src/socialMessage.js +69 -0
  187. package/packages/core/dist/packages/core/src/socialResolver.d.ts +46 -0
  188. package/packages/core/dist/packages/core/src/socialResolver.js +237 -0
  189. package/packages/core/dist/packages/core/src/socialTemplate.d.ts +2 -0
  190. package/packages/core/dist/packages/core/src/socialTemplate.js +90 -0
  191. package/packages/core/dist/packages/core/src/types.d.ts +59 -0
  192. package/packages/core/dist/packages/core/src/types.js +2 -0
  193. package/packages/core/src/socialConfig.ts +7 -5
  194. package/packages/network/dist/config/silicaclaw-defaults.json +19 -0
  195. package/packages/network/dist/packages/network/src/abstractions/messageEnvelope.d.ts +28 -0
  196. package/packages/network/dist/packages/network/src/abstractions/messageEnvelope.js +36 -0
  197. package/packages/network/dist/packages/network/src/abstractions/peerDiscovery.d.ts +43 -0
  198. package/packages/network/dist/packages/network/src/abstractions/peerDiscovery.js +2 -0
  199. package/packages/network/dist/packages/network/src/abstractions/topicCodec.d.ts +4 -0
  200. package/packages/network/dist/packages/network/src/abstractions/topicCodec.js +2 -0
  201. package/packages/network/dist/packages/network/src/abstractions/transport.d.ts +36 -0
  202. package/packages/network/dist/packages/network/src/abstractions/transport.js +2 -0
  203. package/packages/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
  204. package/packages/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.js +24 -0
  205. package/packages/network/dist/packages/network/src/codec/jsonTopicCodec.d.ts +5 -0
  206. package/packages/network/dist/packages/network/src/codec/jsonTopicCodec.js +12 -0
  207. package/packages/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.d.ts +28 -0
  208. package/packages/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.js +144 -0
  209. package/packages/network/dist/packages/network/src/index.d.ts +14 -0
  210. package/packages/network/dist/packages/network/src/index.js +30 -0
  211. package/packages/network/dist/packages/network/src/localEventBus.d.ts +9 -0
  212. package/packages/network/dist/packages/network/src/localEventBus.js +47 -0
  213. package/packages/network/dist/packages/network/src/mock.d.ts +8 -0
  214. package/packages/network/dist/packages/network/src/mock.js +24 -0
  215. package/packages/network/dist/packages/network/src/realPreview.d.ts +105 -0
  216. package/packages/network/dist/packages/network/src/realPreview.js +331 -0
  217. package/packages/network/dist/packages/network/src/relayPreview.d.ts +166 -0
  218. package/packages/network/dist/packages/network/src/relayPreview.js +448 -0
  219. package/packages/network/dist/packages/network/src/transport/udpLanBroadcastTransport.d.ts +23 -0
  220. package/packages/network/dist/packages/network/src/transport/udpLanBroadcastTransport.js +154 -0
  221. package/packages/network/dist/packages/network/src/types.d.ts +6 -0
  222. package/packages/network/dist/packages/network/src/types.js +2 -0
  223. package/packages/network/dist/packages/network/src/webrtcPreview.d.ts +163 -0
  224. package/packages/network/dist/packages/network/src/webrtcPreview.js +848 -0
  225. package/packages/network/src/realPreview.ts +3 -2
  226. package/packages/network/src/relayPreview.ts +5 -2
  227. package/packages/network/src/transport/udpLanBroadcastTransport.ts +2 -1
  228. package/packages/network/src/webrtcPreview.ts +2 -1
  229. package/packages/storage/config/silicaclaw-defaults.json +19 -0
  230. package/packages/storage/dist/config/silicaclaw-defaults.json +19 -0
  231. package/packages/storage/dist/packages/core/src/crypto.d.ts +6 -0
  232. package/packages/storage/dist/packages/core/src/crypto.js +50 -0
  233. package/packages/storage/dist/packages/core/src/directory.d.ts +17 -0
  234. package/packages/storage/dist/packages/core/src/directory.js +145 -0
  235. package/packages/storage/dist/packages/core/src/identity.d.ts +2 -0
  236. package/packages/storage/dist/packages/core/src/identity.js +18 -0
  237. package/packages/storage/dist/packages/core/src/index.d.ts +12 -0
  238. package/packages/storage/dist/packages/core/src/index.js +28 -0
  239. package/packages/storage/dist/packages/core/src/indexing.d.ts +6 -0
  240. package/packages/storage/dist/packages/core/src/indexing.js +43 -0
  241. package/packages/storage/dist/packages/core/src/presence.d.ts +4 -0
  242. package/packages/storage/dist/packages/core/src/presence.js +23 -0
  243. package/packages/storage/dist/packages/core/src/profile.d.ts +4 -0
  244. package/packages/storage/dist/packages/core/src/profile.js +39 -0
  245. package/packages/storage/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  246. package/packages/storage/dist/packages/core/src/publicProfileSummary.js +103 -0
  247. package/packages/storage/dist/packages/core/src/socialConfig.d.ts +100 -0
  248. package/packages/storage/dist/packages/core/src/socialConfig.js +300 -0
  249. package/packages/storage/dist/packages/core/src/socialMessage.d.ts +19 -0
  250. package/packages/storage/dist/packages/core/src/socialMessage.js +69 -0
  251. package/packages/storage/dist/packages/core/src/socialResolver.d.ts +46 -0
  252. package/packages/storage/dist/packages/core/src/socialResolver.js +237 -0
  253. package/packages/storage/dist/packages/core/src/socialTemplate.d.ts +2 -0
  254. package/packages/storage/dist/packages/core/src/socialTemplate.js +90 -0
  255. package/packages/storage/dist/packages/core/src/types.d.ts +59 -0
  256. package/packages/storage/dist/packages/core/src/types.js +2 -0
  257. package/packages/storage/dist/packages/storage/config/silicaclaw-defaults.json +19 -0
  258. package/packages/storage/dist/packages/storage/src/index.d.ts +3 -0
  259. package/packages/storage/dist/packages/storage/src/index.js +19 -0
  260. package/packages/storage/dist/packages/storage/src/jsonRepo.d.ts +7 -0
  261. package/packages/storage/dist/packages/storage/src/jsonRepo.js +29 -0
  262. package/packages/storage/dist/packages/storage/src/repos.d.ts +61 -0
  263. package/packages/storage/dist/packages/storage/src/repos.js +67 -0
  264. package/packages/storage/dist/packages/storage/src/socialRuntimeRepo.d.ts +5 -0
  265. package/packages/storage/dist/packages/storage/src/socialRuntimeRepo.js +57 -0
  266. package/packages/storage/dist/socialRuntimeRepo.js +8 -4
  267. package/packages/storage/src/socialRuntimeRepo.ts +5 -4
  268. package/packages/storage/tsconfig.json +1 -6
  269. package/scripts/functional-check.mjs +35 -6
  270. package/scripts/install-openclaw-skill.mjs +9 -2
  271. package/scripts/openclaw-bridge-adapter.mjs +3 -1
  272. package/scripts/openclaw-bridge-client.mjs +3 -1
  273. package/scripts/openclaw-runtime-demo.mjs +3 -1
  274. package/scripts/quickstart.sh +14 -10
  275. package/scripts/release-pack.mjs +59 -1
  276. package/scripts/silicaclaw-cli.mjs +109 -47
  277. package/scripts/silicaclaw-gateway.mjs +302 -84
  278. package/scripts/validate-openclaw-skill.mjs +79 -21
@@ -0,0 +1,19 @@
1
+ {
2
+ "ports": {
3
+ "local_console": 4310,
4
+ "public_explorer": 4311,
5
+ "openclaw_gateway": 18789,
6
+ "network_default": 44123
7
+ },
8
+ "network": {
9
+ "default_mode": "global-preview",
10
+ "default_namespace": "silicaclaw.preview",
11
+ "global_preview": {
12
+ "relay_url": "https://relay.silicaclaw.com",
13
+ "room": "silicaclaw-global-preview"
14
+ }
15
+ },
16
+ "bridge": {
17
+ "api_base": "http://localhost:4310"
18
+ }
19
+ }
@@ -1,10 +1,14 @@
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.parseFrontmatterObject = parseFrontmatterObject;
4
7
  exports.extractFrontmatter = extractFrontmatter;
5
8
  exports.normalizeSocialConfig = normalizeSocialConfig;
6
9
  exports.getDefaultSocialConfig = getDefaultSocialConfig;
7
10
  exports.generateDefaultSocialMdTemplate = generateDefaultSocialMdTemplate;
11
+ const silicaclaw_defaults_json_1 = __importDefault(require("../../../config/silicaclaw-defaults.json"));
8
12
  const DEFAULT_SOCIAL_CONFIG = {
9
13
  enabled: true,
10
14
  public_enabled: false,
@@ -15,13 +19,13 @@ const DEFAULT_SOCIAL_CONFIG = {
15
19
  tags: [],
16
20
  },
17
21
  network: {
18
- mode: "global-preview",
19
- namespace: "silicaclaw.preview",
22
+ mode: silicaclaw_defaults_json_1.default.network.default_mode,
23
+ namespace: silicaclaw_defaults_json_1.default.network.default_namespace,
20
24
  adapter: "relay-preview",
21
- port: 44123,
22
- signaling_url: "https://relay.silicaclaw.com",
25
+ port: silicaclaw_defaults_json_1.default.ports.network_default,
26
+ signaling_url: silicaclaw_defaults_json_1.default.network.global_preview.relay_url,
23
27
  signaling_urls: [],
24
- room: "silicaclaw-global-preview",
28
+ room: silicaclaw_defaults_json_1.default.network.global_preview.room,
25
29
  seed_peers: [],
26
30
  bootstrap_hints: [],
27
31
  },
@@ -1,4 +1,7 @@
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.RealNetworkAdapterPreview = void 0;
4
7
  const crypto_1 = require("crypto");
@@ -7,6 +10,7 @@ const jsonMessageEnvelopeCodec_1 = require("./codec/jsonMessageEnvelopeCodec");
7
10
  const jsonTopicCodec_1 = require("./codec/jsonTopicCodec");
8
11
  const udpLanBroadcastTransport_1 = require("./transport/udpLanBroadcastTransport");
9
12
  const heartbeatPeerDiscovery_1 = require("./discovery/heartbeatPeerDiscovery");
13
+ const silicaclaw_defaults_json_1 = __importDefault(require("../../../config/silicaclaw-defaults.json"));
10
14
  class RealNetworkAdapterPreview {
11
15
  started = false;
12
16
  peerId;
@@ -46,7 +50,7 @@ class RealNetworkAdapterPreview {
46
50
  };
47
51
  constructor(options = {}) {
48
52
  this.peerId = options.peerId ?? `peer-${process.pid}-${Math.random().toString(36).slice(2, 10)}`;
49
- this.namespace = this.normalizeNamespace(options.namespace ?? "silicaclaw.preview");
53
+ this.namespace = this.normalizeNamespace(options.namespace ?? silicaclaw_defaults_json_1.default.network.default_namespace);
50
54
  this.transport = options.transport ?? new udpLanBroadcastTransport_1.UdpLanBroadcastTransport();
51
55
  this.envelopeCodec = options.envelopeCodec ?? new jsonMessageEnvelopeCodec_1.JsonMessageEnvelopeCodec();
52
56
  this.topicCodec = options.topicCodec ?? new jsonTopicCodec_1.JsonTopicCodec();
@@ -315,7 +319,7 @@ class RealNetworkAdapterPreview {
315
319
  }
316
320
  normalizeNamespace(namespace) {
317
321
  const normalized = namespace.trim();
318
- return normalized.length > 0 ? normalized : "silicaclaw.preview";
322
+ return normalized.length > 0 ? normalized : silicaclaw_defaults_json_1.default.network.default_namespace;
319
323
  }
320
324
  errorMessage(error) {
321
325
  if (error instanceof Error) {
@@ -1,10 +1,14 @@
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.RelayPreviewAdapter = void 0;
4
7
  const crypto_1 = require("crypto");
5
8
  const messageEnvelope_1 = require("./abstractions/messageEnvelope");
6
9
  const jsonMessageEnvelopeCodec_1 = require("./codec/jsonMessageEnvelopeCodec");
7
10
  const jsonTopicCodec_1 = require("./codec/jsonTopicCodec");
11
+ const silicaclaw_defaults_json_1 = __importDefault(require("../../../config/silicaclaw-defaults.json"));
8
12
  function dedupe(values) {
9
13
  return Array.from(new Set(values.map((value) => value.trim()).filter(Boolean)));
10
14
  }
@@ -77,13 +81,15 @@ class RelayPreviewAdapter {
77
81
  };
78
82
  constructor(options = {}) {
79
83
  this.peerId = options.peerId ?? `peer-${process.pid}-${Math.random().toString(36).slice(2, 10)}`;
80
- this.namespace = String(options.namespace || "silicaclaw.preview").trim() || "silicaclaw.preview";
84
+ this.namespace =
85
+ String(options.namespace || silicaclaw_defaults_json_1.default.network.default_namespace).trim() || silicaclaw_defaults_json_1.default.network.default_namespace;
81
86
  this.signalingEndpoints = dedupe((options.signalingUrls && options.signalingUrls.length > 0
82
87
  ? options.signalingUrls
83
88
  : [options.signalingUrl || "http://localhost:4510"]));
84
89
  this.activeEndpoint = this.signalingEndpoints[0] || "http://localhost:4510";
85
90
  this.activeEndpointIndex = 0;
86
- this.room = String(options.room || "silicaclaw-global-preview").trim() || "silicaclaw-global-preview";
91
+ this.room =
92
+ String(options.room || silicaclaw_defaults_json_1.default.network.global_preview.room).trim() || silicaclaw_defaults_json_1.default.network.global_preview.room;
87
93
  this.seedPeers = dedupe(options.seedPeers || []);
88
94
  this.bootstrapHints = dedupe(options.bootstrapHints || []);
89
95
  this.bootstrapSources = dedupe(options.bootstrapSources || []);
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.UdpLanBroadcastTransport = void 0;
7
7
  const dgram_1 = __importDefault(require("dgram"));
8
+ const silicaclaw_defaults_json_1 = __importDefault(require("../../../../config/silicaclaw-defaults.json"));
8
9
  class UdpLanBroadcastTransport {
9
10
  socket = null;
10
11
  handlers = new Set();
@@ -28,7 +29,7 @@ class UdpLanBroadcastTransport {
28
29
  bindAddress;
29
30
  broadcastAddress;
30
31
  constructor(options = {}) {
31
- this.port = options.port ?? 44123;
32
+ this.port = options.port ?? silicaclaw_defaults_json_1.default.ports.network_default;
32
33
  this.bindAddress = options.bindAddress ?? "0.0.0.0";
33
34
  this.broadcastAddress = options.broadcastAddress ?? "255.255.255.255";
34
35
  }
@@ -1,10 +1,14 @@
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.WebRTCPreviewAdapter = void 0;
4
7
  const crypto_1 = require("crypto");
5
8
  const messageEnvelope_1 = require("./abstractions/messageEnvelope");
6
9
  const jsonMessageEnvelopeCodec_1 = require("./codec/jsonMessageEnvelopeCodec");
7
10
  const jsonTopicCodec_1 = require("./codec/jsonTopicCodec");
11
+ const silicaclaw_defaults_json_1 = __importDefault(require("../../../config/silicaclaw-defaults.json"));
8
12
  function now() {
9
13
  return Date.now();
10
14
  }
@@ -103,7 +107,7 @@ class WebRTCPreviewAdapter {
103
107
  };
104
108
  constructor(options = {}) {
105
109
  this.peerId = options.peerId ?? `webrtc-${process.pid}-${Math.random().toString(36).slice(2, 9)}`;
106
- this.namespace = (options.namespace ?? "silicaclaw.preview").trim() || "silicaclaw.preview";
110
+ this.namespace = (options.namespace ?? silicaclaw_defaults_json_1.default.network.default_namespace).trim() || silicaclaw_defaults_json_1.default.network.default_namespace;
107
111
  const configuredSignalingUrls = dedupeArray([
108
112
  ...(options.signalingUrls ?? []),
109
113
  options.signalingUrl ?? "",
@@ -0,0 +1,19 @@
1
+ {
2
+ "ports": {
3
+ "local_console": 4310,
4
+ "public_explorer": 4311,
5
+ "openclaw_gateway": 18789,
6
+ "network_default": 44123
7
+ },
8
+ "network": {
9
+ "default_mode": "global-preview",
10
+ "default_namespace": "silicaclaw.preview",
11
+ "global_preview": {
12
+ "relay_url": "https://relay.silicaclaw.com",
13
+ "room": "silicaclaw-global-preview"
14
+ }
15
+ },
16
+ "bridge": {
17
+ "api_base": "http://localhost:4310"
18
+ }
19
+ }
@@ -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: [],
@@ -190,19 +190,35 @@ root.innerHTML = appTemplate;
190
190
  document.getElementById('skillsBannerTitle').textContent = t('hints.skillsBannerTitle');
191
191
  document.getElementById('skillsBannerBody').textContent = t('hints.skillsBannerBody');
192
192
  document.getElementById('skillsBannerRuntimeLabel').textContent = t('hints.skillsBannerRuntime');
193
+ document.getElementById('skillsActionEyebrow').textContent = t('labels.skillsRecommendedAction');
194
+ document.getElementById('skillsActionTitle').textContent = t('hints.skillsActionInstallTitle');
195
+ document.getElementById('skillsActionBody').textContent = t('hints.skillsActionInstallBody');
196
+ document.getElementById('skillsActionState').textContent = t('labels.skillsStateReady');
197
+ document.getElementById('skillsJumpEyebrow').textContent = t('labels.skillsBrowseAreas');
198
+ document.getElementById('skillsJumpTitle').textContent = t('hints.skillsJumpTitle');
199
+ document.getElementById('skillsJumpFeatured').textContent = t('labels.skillsFeatured');
200
+ document.getElementById('skillsJumpBundled').textContent = t('labels.skillsBundled');
201
+ document.getElementById('skillsJumpInstalled').textContent = t('labels.skillsInstalled');
202
+ document.getElementById('skillsJumpDialogue').textContent = t('labels.skillsDialogue');
193
203
  document.getElementById('skillsFeaturedTitle').textContent = t('labels.skillsFeatured');
194
204
  document.getElementById('skillsFeaturedHint').textContent = t('hints.skillsFeaturedHint');
195
205
  document.getElementById('skillsBundledTitle').textContent = t('labels.skillsBundled');
196
206
  document.getElementById('skillsBundledHint').textContent = t('hints.skillsBundledHint');
207
+ document.getElementById('skillsDialogueTitle').textContent = t('labels.skillsDialogue');
208
+ document.getElementById('skillsDialogueHint').textContent = t('hints.skillsDialogueHint');
197
209
  document.getElementById('skillsInstalledTitle').textContent = t('labels.skillsInstalled');
198
210
  document.getElementById('skillsInstalledHint').textContent = t('hints.skillsInstalledHint');
199
- document.getElementById('skillsInstallBtn').textContent = t('actions.learnOpenClawSkill');
211
+ document.getElementById('skillsInstallBtn').textContent = t('actions.installSilicaClawSkills');
200
212
  document.getElementById('socialIntegrationTitle').textContent = t('labels.integrationStatus');
201
213
  document.querySelector('#socialStatusLine').textContent = t('hints.checkingIntegration');
202
214
  document.getElementById('socialRuntimeSummaryTitle').textContent = t('labels.whatIsActive');
203
215
  document.getElementById('socialBridgeTitle').textContent = t('labels.identityBinding');
216
+ document.getElementById('socialCapabilityTitle').textContent = t('labels.ownerCommunicationCapabilities');
217
+ document.getElementById('socialCapabilityHint').textContent = t('hints.ownerCommunicationCapabilitiesHint');
204
218
  document.getElementById('socialOwnerDeliveryTitle').textContent = t('labels.ownerDelivery');
205
219
  document.getElementById('socialSkillLearningTitle').textContent = t('labels.openclawSkillLearning');
220
+ document.getElementById('socialMessagePathTitle').textContent = t('labels.messagePath');
221
+ document.getElementById('socialMessagePathHint').textContent = t('hints.socialMessagePathHint');
206
222
  document.getElementById('socialGovernanceTitle').textContent = t('labels.messageGovernance');
207
223
  document.getElementById('socialModerationTitle').textContent = t('labels.recentModeration');
208
224
  document.getElementById('socialAdvancedSummary').textContent = t('labels.advancedNetworkDetails');
@@ -268,6 +284,7 @@ root.innerHTML = appTemplate;
268
284
  const shell = createShellController({ resolveThemeMode, t });
269
285
  const {
270
286
  applyTheme,
287
+ clearUiCache,
271
288
  flashButton,
272
289
  hydrateCachedShell,
273
290
  peerStatusText,
@@ -406,6 +423,7 @@ root.innerHTML = appTemplate;
406
423
  const refreshNetwork = networkController.refreshNetwork;
407
424
  const refreshPeers = networkController.refreshPeers;
408
425
  const refreshDiscovery = networkController.refreshDiscovery;
426
+ const getQuickConnectDefaults = networkController.getQuickConnectDefaults;
409
427
 
410
428
  const refreshSocial = socialController.refreshSocial;
411
429
  const exportSocialTemplate = socialController.exportSocialTemplate;
@@ -438,6 +456,7 @@ root.innerHTML = appTemplate;
438
456
  parseCsv,
439
457
  profileController,
440
458
  pulseOverviewBroadcastStep,
459
+ clearUiCache,
441
460
  refreshAll,
442
461
  refreshLogs,
443
462
  refreshMessages,
@@ -461,6 +480,7 @@ root.innerHTML = appTemplate;
461
480
  t,
462
481
  toast,
463
482
  getSocialTemplate: () => socialTemplate,
483
+ getQuickConnectDefaults,
464
484
  setAgentsPage: (value) => { agentsPage = value; },
465
485
  getSocialMessagesCache: () => socialMessagesCache,
466
486
  toPrettyJson,
@@ -7,6 +7,7 @@ export function bindAppEvents({
7
7
  parseCsv,
8
8
  profileController,
9
9
  pulseOverviewBroadcastStep,
10
+ clearUiCache,
10
11
  refreshAll,
11
12
  refreshLogs,
12
13
  refreshMessages,
@@ -30,6 +31,7 @@ export function bindAppEvents({
30
31
  t,
31
32
  toast,
32
33
  getSocialTemplate,
34
+ getQuickConnectDefaults,
33
35
  setAgentsPage,
34
36
  getSocialMessagesCache,
35
37
  toPrettyJson,
@@ -194,9 +196,12 @@ export function bindAppEvents({
194
196
  document.getElementById("broadcastNowBtn").addEventListener("click", () => runAction("/api/broadcast/now", t("actions.broadcastNow")));
195
197
 
196
198
  document.getElementById("quickGlobalPreviewBtn").addEventListener("click", async () => {
197
- const currentSignaling = window.prompt(t("feedback.promptSignalingUrl"), "http://localhost:4510");
199
+ const quickConnectDefaults = typeof getQuickConnectDefaults === "function"
200
+ ? getQuickConnectDefaults()
201
+ : { signalingUrl: "http://localhost:4510", room: "" };
202
+ const currentSignaling = window.prompt(t("feedback.promptSignalingUrl"), quickConnectDefaults.signalingUrl || "http://localhost:4510");
198
203
  if (!currentSignaling) return;
199
- const room = window.prompt(t("feedback.promptRoom"), "silicaclaw-global-preview") || "silicaclaw-global-preview";
204
+ const room = window.prompt(t("feedback.promptRoom"), quickConnectDefaults.room || "") || quickConnectDefaults.room || "";
200
205
  setFeedback("networkFeedback", t("feedback.crossPreviewEnabling"));
201
206
  try {
202
207
  const result = await api("/api/network/quick-connect-global-preview", {
@@ -223,6 +228,7 @@ export function bindAppEvents({
223
228
  document.getElementById("clearDiscoveryCacheBtn").addEventListener("click", async () => {
224
229
  try {
225
230
  await api("/api/cache/clear", { method: "POST" });
231
+ clearUiCache(["silicaclaw_ui_overview", "silicaclaw_ui_network", "silicaclaw_ui_social"]);
226
232
  setFeedback("networkFeedback", t("feedback.discoveryCacheCleared"));
227
233
  toast(t("feedback.discoveryCacheCleared"));
228
234
  setAgentsPage(1);
@@ -281,6 +287,38 @@ export function bindAppEvents({
281
287
  }
282
288
  });
283
289
 
290
+ document.getElementById("skillsBundledGrid").addEventListener("click", async (event) => {
291
+ const btn = event.target instanceof Element ? event.target.closest("[data-skill-install]") : null;
292
+ if (!btn) return;
293
+ const skillName = String(btn.getAttribute("data-skill-install") || "").trim();
294
+ if (!skillName) return;
295
+ btn.setAttribute("disabled", "true");
296
+ setFeedback("skillsFeedback", `${t("common.saving")} ${skillName}`);
297
+ try {
298
+ await api("/api/openclaw/bridge/skill-install", {
299
+ method: "POST",
300
+ body: JSON.stringify({ skill_name: skillName }),
301
+ });
302
+ setFeedback("skillsFeedback", t("feedback.openclawSkillInstalled"));
303
+ toast(`${t("feedback.openclawSkillInstalled")} · ${skillName}`);
304
+ await refreshSkills();
305
+ await refreshSocial();
306
+ } catch (e) {
307
+ setFeedback("skillsFeedback", e instanceof Error ? e.message : t("feedback.openclawSkillInstallFailed"), "error");
308
+ } finally {
309
+ btn.removeAttribute("disabled");
310
+ await refreshSkills().catch(() => {});
311
+ }
312
+ });
313
+
314
+ document.querySelectorAll("[data-skills-jump]").forEach((btn) => {
315
+ btn.addEventListener("click", () => {
316
+ const targetId = String(btn.getAttribute("data-skills-jump") || "").trim();
317
+ if (!targetId) return;
318
+ document.getElementById(targetId)?.scrollIntoView({ behavior: "smooth", block: "start" });
319
+ });
320
+ });
321
+
284
322
  document.getElementById("saveGovernanceBtn").addEventListener("click", async () => {
285
323
  setFeedback("socialGovernanceFeedback", t("common.saving"));
286
324
  try {
@@ -8,6 +8,12 @@ export function createNetworkController({
8
8
  toPrettyJson,
9
9
  writeUiCache,
10
10
  }) {
11
+ const fallbackQuickConnectDefaults = {
12
+ signalingUrl: "http://localhost:4510",
13
+ room: "",
14
+ };
15
+ let quickConnectDefaults = { ...fallbackQuickConnectDefaults };
16
+
11
17
  async function refreshNetwork() {
12
18
  const [cfg, sts, rtp] = await Promise.all([api("/api/network/config"), api("/api/network/stats"), api("/api/runtime/paths")]);
13
19
  const c = cfg.data;
@@ -20,9 +26,31 @@ export function createNetworkController({
20
26
  const d = s.adapter_discovery_stats || {};
21
27
  const dx = s.adapter_diagnostics_summary || {};
22
28
  const ac = s.adapter_config || c.adapter_config || {};
29
+ quickConnectDefaults = {
30
+ signalingUrl: String(
31
+ dx.signaling_url ||
32
+ c.signaling_url ||
33
+ c.adapter_extra?.signaling_url ||
34
+ quickConnectDefaults.signalingUrl ||
35
+ fallbackQuickConnectDefaults.signalingUrl
36
+ ),
37
+ room: String(
38
+ dx.room ||
39
+ c.room ||
40
+ c.adapter_extra?.room ||
41
+ quickConnectDefaults.room ||
42
+ fallbackQuickConnectDefaults.room
43
+ ),
44
+ };
45
+ const relayCapable = c.adapter === "relay-preview" || c.adapter === "webrtc-preview";
46
+ const relayHealth = relayCapable
47
+ ? (dx.last_error ? t("network.degraded") : t("network.connected"))
48
+ : "-";
23
49
  document.getElementById("heroAdapter").textContent = c.adapter || "-";
24
- document.getElementById("heroRelay").textContent = dx.signaling_url || "-";
25
- document.getElementById("heroRoom").textContent = dx.room || "-";
50
+ const heroRelayEl = document.getElementById("heroRelay");
51
+ const heroRoomEl = document.getElementById("heroRoom");
52
+ if (heroRelayEl) heroRelayEl.textContent = dx.signaling_url || "-";
53
+ if (heroRoomEl) heroRoomEl.textContent = dx.room || "-";
26
54
 
27
55
  document.getElementById("pillAdapter").textContent = `${t("labels.adapter")}: ${c.adapter || "-"}`;
28
56
  writeUiCache("silicaclaw_ui_network", {
@@ -54,7 +82,7 @@ export function createNetworkController({
54
82
  ].map(([k, v]) => `<div class="card"><div class="label">${k}</div><div class="value" style="font-size:17px;">${v}</div></div>`).join("");
55
83
  document.getElementById("networkSummaryList").innerHTML = [
56
84
  [t("labels.mode"), describeCurrentMode(t, c.mode || "lan")],
57
- [t("network.relayHealth"), dx.last_error ? t("network.degraded") : t("network.connected")],
85
+ [t("network.relayHealth"), relayHealth],
58
86
  [t("network.currentRelay"), dx.signaling_url || "-"],
59
87
  [t("network.currentRoom"), dx.room || "-"],
60
88
  [t("network.lastJoin"), ago(dx.last_join_at)],
@@ -205,6 +233,7 @@ export function createNetworkController({
205
233
  }
206
234
 
207
235
  return {
236
+ getQuickConnectDefaults: () => ({ ...quickConnectDefaults }),
208
237
  refreshDiscovery,
209
238
  refreshNetwork,
210
239
  refreshPeers,
@@ -143,9 +143,18 @@ export function createOverviewController({
143
143
  </div>
144
144
  `;
145
145
  document.getElementById("snapshot").innerHTML = snapshotHtml;
146
+ const networkDiag = networkStats.adapter_diagnostics_summary || {};
146
147
  const heroModeText = o.social?.network_mode || "-";
148
+ const heroAdapterText = networkCfg.adapter || "-";
149
+ const heroRelayText = String(networkDiag.signaling_url || networkCfg.adapter_extra?.signaling_url || "-");
150
+ const heroRoomText = String(networkDiag.room || networkCfg.adapter_extra?.room || "-");
147
151
  setOverviewMode(heroModeText);
148
152
  document.getElementById("heroMode").textContent = heroModeText;
153
+ document.getElementById("heroAdapter").textContent = heroAdapterText;
154
+ const heroRelayEl = document.getElementById("heroRelay");
155
+ const heroRoomEl = document.getElementById("heroRoom");
156
+ if (heroRelayEl) heroRelayEl.textContent = heroRelayText;
157
+ if (heroRoomEl) heroRoomEl.textContent = heroRoomText;
149
158
  document.getElementById("overviewModeHint").textContent = t("overview.modeCurrentSource", {
150
159
  mode: describeCurrentMode(t, heroModeText),
151
160
  hint: t("overview.modeCacheHint"),
@@ -160,7 +169,6 @@ export function createOverviewController({
160
169
  const openclawDetected = !!bridge.openclaw_installation?.detected || openclawRunning || !!bridge.openclaw_runtime?.gateway_reachable;
161
170
  const skillInstalled = !!bridge.skill_learning?.installed;
162
171
  const globalMode = heroModeText === "global-preview";
163
- const networkDiag = networkStats.adapter_diagnostics_summary || {};
164
172
  const lastNetworkError = String(networkDiag.last_error || o.last_broadcast_error || "").trim();
165
173
  const broadcastHealthy = o.broadcast_enabled && !lastNetworkError;
166
174
  const roleKey = openclawRunning
@@ -242,6 +250,9 @@ export function createOverviewController({
242
250
  brandVersionText,
243
251
  snapshotText: snapshotHtml,
244
252
  heroModeText,
253
+ heroAdapterText,
254
+ heroRelayText,
255
+ heroRoomText,
245
256
  pillBroadcastText,
246
257
  pillBroadcastClassName,
247
258
  agentsCountHintText,
@@ -312,6 +323,9 @@ export function createOverviewController({
312
323
  brandVersionText,
313
324
  snapshotText: snapshotHtml,
314
325
  heroModeText,
326
+ heroAdapterText,
327
+ heroRelayText,
328
+ heroRoomText,
315
329
  pillBroadcastText,
316
330
  pillBroadcastClassName,
317
331
  agentsCountHintText,
@@ -1,4 +1,10 @@
1
1
  export function createShellController({ t, resolveThemeMode }) {
2
+ const REALTIME_UI_CACHE_KEYS = [
3
+ "silicaclaw_ui_overview",
4
+ "silicaclaw_ui_network",
5
+ "silicaclaw_ui_social",
6
+ ];
7
+
2
8
  function peerStatusText(status) {
3
9
  if (status === "online") return t("overview.online");
4
10
  if (status === "offline") return t("overview.offline");
@@ -6,48 +12,25 @@ export function createShellController({ t, resolveThemeMode }) {
6
12
  return status || "-";
7
13
  }
8
14
 
9
- function readUiCache(key) {
10
- try {
11
- const raw = localStorage.getItem(key);
12
- return raw ? JSON.parse(raw) : null;
13
- } catch {
14
- return null;
15
- }
15
+ function writeUiCache(key, value) {
16
+ void key;
17
+ void value;
16
18
  }
17
19
 
18
- function writeUiCache(key, value) {
20
+ function clearUiCache(keys) {
21
+ const values = Array.isArray(keys) ? keys : keys ? [keys] : REALTIME_UI_CACHE_KEYS;
19
22
  try {
20
- localStorage.setItem(key, JSON.stringify(value));
23
+ for (const key of values) {
24
+ if (!key) continue;
25
+ localStorage.removeItem(key);
26
+ }
21
27
  } catch {
22
- // ignore cache write failures
28
+ // ignore cache removal failures
23
29
  }
24
30
  }
25
31
 
26
32
  function hydrateCachedShell() {
27
- const overview = readUiCache("silicaclaw_ui_overview");
28
- if (overview) {
29
- if (overview.overviewCardsHtml) document.getElementById("overviewCards").innerHTML = overview.overviewCardsHtml;
30
- if (overview.snapshotText) document.getElementById("snapshot").innerHTML = overview.snapshotText;
31
- if (overview.heroModeText) document.getElementById("heroMode").textContent = overview.heroModeText;
32
- if (overview.pillBroadcastText) document.getElementById("pillBroadcast").textContent = overview.pillBroadcastText;
33
- if (overview.pillBroadcastClassName) document.getElementById("pillBroadcast").className = overview.pillBroadcastClassName;
34
- if (overview.agentsCountHintText) document.getElementById("agentsCountHint").textContent = overview.agentsCountHintText;
35
- if (overview.agentsWrapHtml) document.getElementById("agentsWrap").innerHTML = overview.agentsWrapHtml;
36
- }
37
- const network = readUiCache("silicaclaw_ui_network");
38
- if (network) {
39
- if (network.heroAdapterText) document.getElementById("heroAdapter").textContent = network.heroAdapterText;
40
- if (network.heroRelayText) document.getElementById("heroRelay").textContent = network.heroRelayText;
41
- if (network.heroRoomText) document.getElementById("heroRoom").textContent = network.heroRoomText;
42
- if (network.pillAdapterText) document.getElementById("pillAdapter").textContent = network.pillAdapterText;
43
- }
44
- const social = readUiCache("silicaclaw_ui_social");
45
- if (social) {
46
- if (social.integrationStatusText) document.getElementById("integrationStatusBar").textContent = social.integrationStatusText;
47
- if (social.integrationStatusClassName) document.getElementById("integrationStatusBar").className = social.integrationStatusClassName;
48
- if (social.socialStatusLineText) document.getElementById("socialStatusLine").textContent = social.socialStatusLineText;
49
- if (social.socialStatusSublineText) document.getElementById("socialStatusSubline").textContent = social.socialStatusSublineText;
50
- }
33
+ clearUiCache(REALTIME_UI_CACHE_KEYS);
51
34
  }
52
35
 
53
36
  function toast(msg) {
@@ -130,6 +113,7 @@ export function createShellController({ t, resolveThemeMode }) {
130
113
 
131
114
  return {
132
115
  applyTheme,
116
+ clearUiCache,
133
117
  flashButton,
134
118
  hydrateCachedShell,
135
119
  peerStatusText,