@silicaclaw/cli 2026.3.19-2 → 2026.3.19-22

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 (1075) hide show
  1. package/CHANGELOG.md +91 -1
  2. package/INSTALL.md +70 -10
  3. package/README.md +109 -15
  4. package/VERSION +1 -1
  5. package/apps/local-console/dist/apps/local-console/src/server.d.ts +752 -0
  6. package/apps/local-console/dist/apps/local-console/src/server.js +3101 -0
  7. package/apps/local-console/dist/apps/local-console/src/socialRoutes.d.ts +16 -0
  8. package/apps/local-console/dist/apps/local-console/src/socialRoutes.js +72 -0
  9. package/apps/local-console/dist/config/silicaclaw-defaults.json +19 -0
  10. package/apps/local-console/dist/packages/core/src/crypto.d.ts +6 -0
  11. package/apps/local-console/dist/packages/core/src/crypto.js +50 -0
  12. package/apps/local-console/dist/packages/core/src/directory.d.ts +17 -0
  13. package/apps/local-console/dist/packages/core/src/directory.js +145 -0
  14. package/apps/local-console/dist/packages/core/src/identity.d.ts +2 -0
  15. package/apps/local-console/dist/packages/core/src/identity.js +18 -0
  16. package/apps/local-console/dist/packages/core/src/index.d.ts +12 -0
  17. package/apps/local-console/dist/packages/core/src/index.js +28 -0
  18. package/apps/local-console/dist/packages/core/src/indexing.d.ts +6 -0
  19. package/apps/local-console/dist/packages/core/src/indexing.js +43 -0
  20. package/apps/local-console/dist/packages/core/src/presence.d.ts +4 -0
  21. package/apps/local-console/dist/packages/core/src/presence.js +23 -0
  22. package/apps/local-console/dist/packages/core/src/profile.d.ts +4 -0
  23. package/apps/local-console/dist/packages/core/src/profile.js +39 -0
  24. package/apps/local-console/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  25. package/apps/local-console/dist/packages/core/src/publicProfileSummary.js +103 -0
  26. package/apps/local-console/dist/packages/core/src/socialConfig.d.ts +100 -0
  27. package/apps/local-console/dist/packages/core/src/socialConfig.js +300 -0
  28. package/apps/local-console/dist/packages/core/src/socialMessage.d.ts +19 -0
  29. package/apps/local-console/dist/packages/core/src/socialMessage.js +69 -0
  30. package/apps/local-console/dist/packages/core/src/socialResolver.d.ts +46 -0
  31. package/apps/local-console/dist/packages/core/src/socialResolver.js +237 -0
  32. package/apps/local-console/dist/packages/core/src/socialTemplate.d.ts +2 -0
  33. package/apps/local-console/dist/packages/core/src/socialTemplate.js +90 -0
  34. package/apps/local-console/dist/packages/core/src/types.d.ts +59 -0
  35. package/apps/local-console/dist/packages/core/src/types.js +2 -0
  36. package/apps/local-console/dist/packages/network/src/abstractions/messageEnvelope.d.ts +28 -0
  37. package/apps/local-console/dist/packages/network/src/abstractions/messageEnvelope.js +36 -0
  38. package/apps/local-console/dist/packages/network/src/abstractions/peerDiscovery.d.ts +43 -0
  39. package/apps/local-console/dist/packages/network/src/abstractions/peerDiscovery.js +2 -0
  40. package/apps/local-console/dist/packages/network/src/abstractions/topicCodec.d.ts +4 -0
  41. package/apps/local-console/dist/packages/network/src/abstractions/topicCodec.js +2 -0
  42. package/apps/local-console/dist/packages/network/src/abstractions/transport.d.ts +36 -0
  43. package/apps/local-console/dist/packages/network/src/abstractions/transport.js +2 -0
  44. package/apps/local-console/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
  45. package/apps/local-console/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.js +24 -0
  46. package/apps/local-console/dist/packages/network/src/codec/jsonTopicCodec.d.ts +5 -0
  47. package/apps/local-console/dist/packages/network/src/codec/jsonTopicCodec.js +12 -0
  48. package/apps/local-console/dist/packages/network/src/discovery/heartbeatPeerDiscovery.d.ts +28 -0
  49. package/apps/local-console/dist/packages/network/src/discovery/heartbeatPeerDiscovery.js +144 -0
  50. package/apps/local-console/dist/packages/network/src/index.d.ts +14 -0
  51. package/apps/local-console/dist/packages/network/src/index.js +30 -0
  52. package/apps/local-console/dist/packages/network/src/localEventBus.d.ts +9 -0
  53. package/apps/local-console/dist/packages/network/src/localEventBus.js +47 -0
  54. package/apps/local-console/dist/packages/network/src/mock.d.ts +8 -0
  55. package/apps/local-console/dist/packages/network/src/mock.js +24 -0
  56. package/apps/local-console/dist/packages/network/src/realPreview.d.ts +105 -0
  57. package/apps/local-console/dist/packages/network/src/realPreview.js +331 -0
  58. package/apps/local-console/dist/packages/network/src/relayPreview.d.ts +166 -0
  59. package/apps/local-console/dist/packages/network/src/relayPreview.js +448 -0
  60. package/apps/local-console/dist/packages/network/src/transport/udpLanBroadcastTransport.d.ts +23 -0
  61. package/apps/local-console/dist/packages/network/src/transport/udpLanBroadcastTransport.js +154 -0
  62. package/apps/local-console/dist/packages/network/src/types.d.ts +6 -0
  63. package/apps/local-console/dist/packages/network/src/types.js +2 -0
  64. package/apps/local-console/dist/packages/network/src/webrtcPreview.d.ts +163 -0
  65. package/apps/local-console/dist/packages/network/src/webrtcPreview.js +848 -0
  66. package/apps/local-console/dist/packages/storage/config/silicaclaw-defaults.json +19 -0
  67. package/apps/local-console/dist/packages/storage/src/index.d.ts +3 -0
  68. package/apps/local-console/dist/packages/storage/src/index.js +19 -0
  69. package/apps/local-console/dist/packages/storage/src/jsonRepo.d.ts +7 -0
  70. package/apps/local-console/dist/packages/storage/src/jsonRepo.js +29 -0
  71. package/apps/local-console/dist/packages/storage/src/repos.d.ts +61 -0
  72. package/apps/local-console/dist/packages/storage/src/repos.js +67 -0
  73. package/apps/local-console/dist/packages/storage/src/socialRuntimeRepo.d.ts +5 -0
  74. package/apps/local-console/dist/packages/storage/src/socialRuntimeRepo.js +57 -0
  75. package/apps/local-console/package.json +1 -1
  76. package/apps/local-console/public/app/app.js +493 -0
  77. package/apps/local-console/public/app/events.js +460 -0
  78. package/apps/local-console/public/app/i18n.js +43 -0
  79. package/apps/local-console/public/app/network.js +241 -0
  80. package/apps/local-console/public/app/overview.js +339 -0
  81. package/apps/local-console/public/app/profile.js +234 -0
  82. package/apps/local-console/public/app/shell.js +128 -0
  83. package/apps/local-console/public/app/social.js +664 -0
  84. package/apps/local-console/public/app/styles.css +2534 -0
  85. package/apps/local-console/public/app/template.js +838 -0
  86. package/apps/local-console/public/app/translations.js +1124 -0
  87. package/apps/local-console/public/app/utils.js +77 -0
  88. package/apps/local-console/public/index.html +3 -5826
  89. package/apps/local-console/src/server.ts +824 -158
  90. package/apps/public-explorer/dist/apps/public-explorer/src/server.d.ts +1 -0
  91. package/apps/public-explorer/dist/apps/public-explorer/src/server.js +41 -0
  92. package/apps/public-explorer/dist/config/silicaclaw-defaults.json +19 -0
  93. package/apps/public-explorer/dist/server.d.ts +1 -0
  94. package/apps/public-explorer/dist/server.js +31 -0
  95. package/apps/public-explorer/package.json +1 -0
  96. package/apps/public-explorer/public/app/app.js +322 -0
  97. package/apps/public-explorer/public/app/i18n.js +46 -0
  98. package/apps/public-explorer/public/app/styles.css +297 -0
  99. package/apps/public-explorer/public/app/template.js +45 -0
  100. package/apps/public-explorer/public/app/translations.js +192 -0
  101. package/apps/public-explorer/public/app/utils.js +37 -0
  102. package/apps/public-explorer/public/index.html +3 -831
  103. package/apps/public-explorer/src/server.ts +11 -1
  104. package/config/silicaclaw-defaults.json +19 -0
  105. package/dist/apps/local-console/src/server.d.ts +1 -0
  106. package/dist/apps/local-console/src/server.js +555 -0
  107. package/docs/NEW_USER_INSTALL.md +14 -10
  108. package/docs/NEW_USER_OPERATIONS.md +4 -4
  109. package/docs/OPENCLAW_BRIDGE.md +15 -0
  110. package/docs/OPENCLAW_BRIDGE_ZH.md +15 -0
  111. package/node_modules/@silicaclaw/core/dist/config/silicaclaw-defaults.json +19 -0
  112. package/node_modules/@silicaclaw/core/dist/crypto.d.ts +6 -0
  113. package/node_modules/@silicaclaw/core/dist/crypto.js +50 -0
  114. package/node_modules/@silicaclaw/core/dist/directory.d.ts +17 -0
  115. package/node_modules/@silicaclaw/core/dist/directory.js +145 -0
  116. package/node_modules/@silicaclaw/core/dist/identity.d.ts +2 -0
  117. package/node_modules/@silicaclaw/core/dist/identity.js +18 -0
  118. package/node_modules/@silicaclaw/core/dist/index.d.ts +12 -0
  119. package/node_modules/@silicaclaw/core/dist/index.js +28 -0
  120. package/node_modules/@silicaclaw/core/dist/indexing.d.ts +6 -0
  121. package/node_modules/@silicaclaw/core/dist/indexing.js +43 -0
  122. package/node_modules/@silicaclaw/core/dist/packages/core/src/crypto.d.ts +6 -0
  123. package/node_modules/@silicaclaw/core/dist/packages/core/src/crypto.js +50 -0
  124. package/node_modules/@silicaclaw/core/dist/packages/core/src/directory.d.ts +17 -0
  125. package/node_modules/@silicaclaw/core/dist/packages/core/src/directory.js +145 -0
  126. package/node_modules/@silicaclaw/core/dist/packages/core/src/identity.d.ts +2 -0
  127. package/node_modules/@silicaclaw/core/dist/packages/core/src/identity.js +18 -0
  128. package/node_modules/@silicaclaw/core/dist/packages/core/src/index.d.ts +12 -0
  129. package/node_modules/@silicaclaw/core/dist/packages/core/src/index.js +28 -0
  130. package/node_modules/@silicaclaw/core/dist/packages/core/src/indexing.d.ts +6 -0
  131. package/node_modules/@silicaclaw/core/dist/packages/core/src/indexing.js +43 -0
  132. package/node_modules/@silicaclaw/core/dist/packages/core/src/presence.d.ts +4 -0
  133. package/node_modules/@silicaclaw/core/dist/packages/core/src/presence.js +23 -0
  134. package/node_modules/@silicaclaw/core/dist/packages/core/src/profile.d.ts +4 -0
  135. package/node_modules/@silicaclaw/core/dist/packages/core/src/profile.js +39 -0
  136. package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  137. package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.js +103 -0
  138. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialConfig.d.ts +100 -0
  139. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialConfig.js +300 -0
  140. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialMessage.d.ts +19 -0
  141. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialMessage.js +69 -0
  142. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialResolver.d.ts +46 -0
  143. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialResolver.js +237 -0
  144. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialTemplate.d.ts +2 -0
  145. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialTemplate.js +90 -0
  146. package/node_modules/@silicaclaw/core/dist/packages/core/src/types.d.ts +59 -0
  147. package/node_modules/@silicaclaw/core/dist/packages/core/src/types.js +2 -0
  148. package/node_modules/@silicaclaw/core/dist/presence.d.ts +4 -0
  149. package/node_modules/@silicaclaw/core/dist/presence.js +23 -0
  150. package/node_modules/@silicaclaw/core/dist/profile.d.ts +4 -0
  151. package/node_modules/@silicaclaw/core/dist/profile.js +39 -0
  152. package/node_modules/@silicaclaw/core/dist/publicProfileSummary.d.ts +70 -0
  153. package/node_modules/@silicaclaw/core/dist/publicProfileSummary.js +103 -0
  154. package/node_modules/@silicaclaw/core/dist/socialConfig.d.ts +100 -0
  155. package/node_modules/@silicaclaw/core/dist/socialConfig.js +296 -0
  156. package/node_modules/@silicaclaw/core/dist/socialMessage.d.ts +19 -0
  157. package/node_modules/@silicaclaw/core/dist/socialMessage.js +69 -0
  158. package/node_modules/@silicaclaw/core/dist/socialResolver.d.ts +46 -0
  159. package/node_modules/@silicaclaw/core/dist/socialResolver.js +237 -0
  160. package/node_modules/@silicaclaw/core/dist/socialTemplate.d.ts +2 -0
  161. package/node_modules/@silicaclaw/core/dist/socialTemplate.js +90 -0
  162. package/node_modules/@silicaclaw/core/dist/types.d.ts +59 -0
  163. package/node_modules/@silicaclaw/core/dist/types.js +2 -0
  164. package/node_modules/@silicaclaw/core/package.json +13 -0
  165. package/node_modules/@silicaclaw/core/src/crypto.ts +55 -0
  166. package/node_modules/@silicaclaw/core/src/directory.ts +171 -0
  167. package/node_modules/@silicaclaw/core/src/identity.ts +14 -0
  168. package/node_modules/@silicaclaw/core/src/index.ts +12 -0
  169. package/node_modules/@silicaclaw/core/src/indexing.ts +42 -0
  170. package/node_modules/@silicaclaw/core/src/presence.ts +24 -0
  171. package/node_modules/@silicaclaw/core/src/profile.ts +39 -0
  172. package/node_modules/@silicaclaw/core/src/publicProfileSummary.ts +180 -0
  173. package/node_modules/@silicaclaw/core/src/socialConfig.ts +455 -0
  174. package/node_modules/@silicaclaw/core/src/socialMessage.ts +86 -0
  175. package/node_modules/@silicaclaw/core/src/socialResolver.ts +293 -0
  176. package/node_modules/@silicaclaw/core/src/socialTemplate.ts +99 -0
  177. package/node_modules/@silicaclaw/core/src/types.ts +67 -0
  178. package/node_modules/@silicaclaw/core/tsconfig.json +7 -0
  179. package/node_modules/@silicaclaw/network/dist/abstractions/messageEnvelope.d.ts +28 -0
  180. package/node_modules/@silicaclaw/network/dist/abstractions/messageEnvelope.js +36 -0
  181. package/node_modules/@silicaclaw/network/dist/abstractions/peerDiscovery.d.ts +43 -0
  182. package/node_modules/@silicaclaw/network/dist/abstractions/peerDiscovery.js +2 -0
  183. package/node_modules/@silicaclaw/network/dist/abstractions/topicCodec.d.ts +4 -0
  184. package/node_modules/@silicaclaw/network/dist/abstractions/topicCodec.js +2 -0
  185. package/node_modules/@silicaclaw/network/dist/abstractions/transport.d.ts +36 -0
  186. package/node_modules/@silicaclaw/network/dist/abstractions/transport.js +2 -0
  187. package/node_modules/@silicaclaw/network/dist/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
  188. package/node_modules/@silicaclaw/network/dist/codec/jsonMessageEnvelopeCodec.js +24 -0
  189. package/node_modules/@silicaclaw/network/dist/codec/jsonTopicCodec.d.ts +5 -0
  190. package/node_modules/@silicaclaw/network/dist/codec/jsonTopicCodec.js +12 -0
  191. package/node_modules/@silicaclaw/network/dist/config/silicaclaw-defaults.json +19 -0
  192. package/node_modules/@silicaclaw/network/dist/discovery/heartbeatPeerDiscovery.d.ts +28 -0
  193. package/node_modules/@silicaclaw/network/dist/discovery/heartbeatPeerDiscovery.js +144 -0
  194. package/node_modules/@silicaclaw/network/dist/index.d.ts +14 -0
  195. package/node_modules/@silicaclaw/network/dist/index.js +30 -0
  196. package/node_modules/@silicaclaw/network/dist/localEventBus.d.ts +9 -0
  197. package/node_modules/@silicaclaw/network/dist/localEventBus.js +47 -0
  198. package/node_modules/@silicaclaw/network/dist/mock.d.ts +8 -0
  199. package/node_modules/@silicaclaw/network/dist/mock.js +24 -0
  200. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/messageEnvelope.d.ts +28 -0
  201. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/messageEnvelope.js +36 -0
  202. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/peerDiscovery.d.ts +43 -0
  203. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/peerDiscovery.js +2 -0
  204. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/topicCodec.d.ts +4 -0
  205. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/topicCodec.js +2 -0
  206. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/transport.d.ts +36 -0
  207. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/transport.js +2 -0
  208. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
  209. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.js +24 -0
  210. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonTopicCodec.d.ts +5 -0
  211. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonTopicCodec.js +12 -0
  212. package/node_modules/@silicaclaw/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.d.ts +28 -0
  213. package/node_modules/@silicaclaw/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.js +144 -0
  214. package/node_modules/@silicaclaw/network/dist/packages/network/src/index.d.ts +14 -0
  215. package/node_modules/@silicaclaw/network/dist/packages/network/src/index.js +30 -0
  216. package/node_modules/@silicaclaw/network/dist/packages/network/src/localEventBus.d.ts +9 -0
  217. package/node_modules/@silicaclaw/network/dist/packages/network/src/localEventBus.js +47 -0
  218. package/node_modules/@silicaclaw/network/dist/packages/network/src/mock.d.ts +8 -0
  219. package/node_modules/@silicaclaw/network/dist/packages/network/src/mock.js +24 -0
  220. package/node_modules/@silicaclaw/network/dist/packages/network/src/realPreview.d.ts +105 -0
  221. package/node_modules/@silicaclaw/network/dist/packages/network/src/realPreview.js +331 -0
  222. package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.d.ts +166 -0
  223. package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.js +448 -0
  224. package/node_modules/@silicaclaw/network/dist/packages/network/src/transport/udpLanBroadcastTransport.d.ts +23 -0
  225. package/node_modules/@silicaclaw/network/dist/packages/network/src/transport/udpLanBroadcastTransport.js +154 -0
  226. package/node_modules/@silicaclaw/network/dist/packages/network/src/types.d.ts +6 -0
  227. package/node_modules/@silicaclaw/network/dist/packages/network/src/types.js +2 -0
  228. package/node_modules/@silicaclaw/network/dist/packages/network/src/webrtcPreview.d.ts +163 -0
  229. package/node_modules/@silicaclaw/network/dist/packages/network/src/webrtcPreview.js +848 -0
  230. package/node_modules/@silicaclaw/network/dist/realPreview.d.ts +105 -0
  231. package/node_modules/@silicaclaw/network/dist/realPreview.js +327 -0
  232. package/node_modules/@silicaclaw/network/dist/relayPreview.d.ts +166 -0
  233. package/node_modules/@silicaclaw/network/dist/relayPreview.js +442 -0
  234. package/node_modules/@silicaclaw/network/dist/transport/udpLanBroadcastTransport.d.ts +23 -0
  235. package/node_modules/@silicaclaw/network/dist/transport/udpLanBroadcastTransport.js +153 -0
  236. package/node_modules/@silicaclaw/network/dist/types.d.ts +6 -0
  237. package/node_modules/@silicaclaw/network/dist/types.js +2 -0
  238. package/node_modules/@silicaclaw/network/dist/webrtcPreview.d.ts +163 -0
  239. package/node_modules/@silicaclaw/network/dist/webrtcPreview.js +844 -0
  240. package/node_modules/@silicaclaw/network/package.json +10 -0
  241. package/node_modules/@silicaclaw/network/src/abstractions/messageEnvelope.ts +80 -0
  242. package/node_modules/@silicaclaw/network/src/abstractions/peerDiscovery.ts +49 -0
  243. package/node_modules/@silicaclaw/network/src/abstractions/topicCodec.ts +4 -0
  244. package/node_modules/@silicaclaw/network/src/abstractions/transport.ts +40 -0
  245. package/node_modules/@silicaclaw/network/src/codec/jsonMessageEnvelopeCodec.ts +22 -0
  246. package/node_modules/@silicaclaw/network/src/codec/jsonTopicCodec.ts +11 -0
  247. package/node_modules/@silicaclaw/network/src/discovery/heartbeatPeerDiscovery.ts +173 -0
  248. package/node_modules/@silicaclaw/network/src/index.ts +17 -0
  249. package/node_modules/@silicaclaw/network/src/localEventBus.ts +61 -0
  250. package/node_modules/@silicaclaw/network/src/mock.ts +27 -0
  251. package/node_modules/@silicaclaw/network/src/realPreview.ts +437 -0
  252. package/node_modules/@silicaclaw/network/src/relayPreview.ts +568 -0
  253. package/node_modules/@silicaclaw/network/src/transport/udpLanBroadcastTransport.ts +174 -0
  254. package/node_modules/@silicaclaw/network/src/types.ts +6 -0
  255. package/node_modules/@silicaclaw/network/src/webrtcPreview.ts +1053 -0
  256. package/node_modules/@silicaclaw/network/tsconfig.json +7 -0
  257. package/node_modules/@silicaclaw/storage/config/silicaclaw-defaults.json +19 -0
  258. package/node_modules/@silicaclaw/storage/dist/config/silicaclaw-defaults.json +19 -0
  259. package/node_modules/@silicaclaw/storage/dist/index.d.ts +3 -0
  260. package/node_modules/@silicaclaw/storage/dist/index.js +19 -0
  261. package/node_modules/@silicaclaw/storage/dist/jsonRepo.d.ts +7 -0
  262. package/node_modules/@silicaclaw/storage/dist/jsonRepo.js +29 -0
  263. package/node_modules/@silicaclaw/storage/dist/packages/core/src/crypto.d.ts +6 -0
  264. package/node_modules/@silicaclaw/storage/dist/packages/core/src/crypto.js +50 -0
  265. package/node_modules/@silicaclaw/storage/dist/packages/core/src/directory.d.ts +17 -0
  266. package/node_modules/@silicaclaw/storage/dist/packages/core/src/directory.js +145 -0
  267. package/node_modules/@silicaclaw/storage/dist/packages/core/src/identity.d.ts +2 -0
  268. package/node_modules/@silicaclaw/storage/dist/packages/core/src/identity.js +18 -0
  269. package/node_modules/@silicaclaw/storage/dist/packages/core/src/index.d.ts +12 -0
  270. package/node_modules/@silicaclaw/storage/dist/packages/core/src/index.js +28 -0
  271. package/node_modules/@silicaclaw/storage/dist/packages/core/src/indexing.d.ts +6 -0
  272. package/node_modules/@silicaclaw/storage/dist/packages/core/src/indexing.js +43 -0
  273. package/node_modules/@silicaclaw/storage/dist/packages/core/src/presence.d.ts +4 -0
  274. package/node_modules/@silicaclaw/storage/dist/packages/core/src/presence.js +23 -0
  275. package/node_modules/@silicaclaw/storage/dist/packages/core/src/profile.d.ts +4 -0
  276. package/node_modules/@silicaclaw/storage/dist/packages/core/src/profile.js +39 -0
  277. package/node_modules/@silicaclaw/storage/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  278. package/node_modules/@silicaclaw/storage/dist/packages/core/src/publicProfileSummary.js +103 -0
  279. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialConfig.d.ts +100 -0
  280. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialConfig.js +300 -0
  281. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialMessage.d.ts +19 -0
  282. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialMessage.js +69 -0
  283. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialResolver.d.ts +46 -0
  284. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialResolver.js +237 -0
  285. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialTemplate.d.ts +2 -0
  286. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialTemplate.js +90 -0
  287. package/node_modules/@silicaclaw/storage/dist/packages/core/src/types.d.ts +59 -0
  288. package/node_modules/@silicaclaw/storage/dist/packages/core/src/types.js +2 -0
  289. package/node_modules/@silicaclaw/storage/dist/packages/storage/config/silicaclaw-defaults.json +19 -0
  290. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/index.d.ts +3 -0
  291. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/index.js +19 -0
  292. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/jsonRepo.d.ts +7 -0
  293. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/jsonRepo.js +29 -0
  294. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/repos.d.ts +61 -0
  295. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/repos.js +67 -0
  296. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/socialRuntimeRepo.d.ts +5 -0
  297. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/socialRuntimeRepo.js +57 -0
  298. package/node_modules/@silicaclaw/storage/dist/repos.d.ts +61 -0
  299. package/node_modules/@silicaclaw/storage/dist/repos.js +67 -0
  300. package/node_modules/@silicaclaw/storage/dist/socialRuntimeRepo.d.ts +5 -0
  301. package/node_modules/@silicaclaw/storage/dist/socialRuntimeRepo.js +57 -0
  302. package/node_modules/@silicaclaw/storage/package.json +13 -0
  303. package/node_modules/@silicaclaw/storage/src/index.ts +3 -0
  304. package/node_modules/@silicaclaw/storage/src/jsonRepo.ts +25 -0
  305. package/node_modules/@silicaclaw/storage/src/repos.ts +106 -0
  306. package/node_modules/@silicaclaw/storage/src/socialRuntimeRepo.ts +53 -0
  307. package/node_modules/@silicaclaw/storage/tsconfig.json +7 -0
  308. package/node_modules/accepts/HISTORY.md +243 -0
  309. package/node_modules/accepts/LICENSE +23 -0
  310. package/node_modules/accepts/README.md +140 -0
  311. package/node_modules/accepts/index.js +238 -0
  312. package/node_modules/accepts/package.json +47 -0
  313. package/node_modules/array-flatten/LICENSE +21 -0
  314. package/node_modules/array-flatten/README.md +43 -0
  315. package/node_modules/array-flatten/array-flatten.js +64 -0
  316. package/node_modules/array-flatten/package.json +39 -0
  317. package/node_modules/body-parser/HISTORY.md +680 -0
  318. package/node_modules/body-parser/LICENSE +23 -0
  319. package/node_modules/body-parser/README.md +476 -0
  320. package/node_modules/body-parser/index.js +156 -0
  321. package/node_modules/body-parser/lib/read.js +205 -0
  322. package/node_modules/body-parser/lib/types/json.js +247 -0
  323. package/node_modules/body-parser/lib/types/raw.js +101 -0
  324. package/node_modules/body-parser/lib/types/text.js +121 -0
  325. package/node_modules/body-parser/lib/types/urlencoded.js +300 -0
  326. package/node_modules/body-parser/package.json +55 -0
  327. package/node_modules/bytes/History.md +97 -0
  328. package/node_modules/bytes/LICENSE +23 -0
  329. package/node_modules/bytes/Readme.md +152 -0
  330. package/node_modules/bytes/index.js +170 -0
  331. package/node_modules/bytes/package.json +42 -0
  332. package/node_modules/call-bind-apply-helpers/.eslintrc +17 -0
  333. package/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
  334. package/node_modules/call-bind-apply-helpers/.nycrc +9 -0
  335. package/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
  336. package/node_modules/call-bind-apply-helpers/LICENSE +21 -0
  337. package/node_modules/call-bind-apply-helpers/README.md +62 -0
  338. package/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
  339. package/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
  340. package/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
  341. package/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
  342. package/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
  343. package/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
  344. package/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
  345. package/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
  346. package/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
  347. package/node_modules/call-bind-apply-helpers/index.js +15 -0
  348. package/node_modules/call-bind-apply-helpers/package.json +85 -0
  349. package/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
  350. package/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
  351. package/node_modules/call-bind-apply-helpers/test/index.js +63 -0
  352. package/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
  353. package/node_modules/call-bound/.eslintrc +13 -0
  354. package/node_modules/call-bound/.github/FUNDING.yml +12 -0
  355. package/node_modules/call-bound/.nycrc +9 -0
  356. package/node_modules/call-bound/CHANGELOG.md +42 -0
  357. package/node_modules/call-bound/LICENSE +21 -0
  358. package/node_modules/call-bound/README.md +53 -0
  359. package/node_modules/call-bound/index.d.ts +94 -0
  360. package/node_modules/call-bound/index.js +19 -0
  361. package/node_modules/call-bound/package.json +99 -0
  362. package/node_modules/call-bound/test/index.js +61 -0
  363. package/node_modules/call-bound/tsconfig.json +10 -0
  364. package/node_modules/content-disposition/HISTORY.md +60 -0
  365. package/node_modules/content-disposition/LICENSE +22 -0
  366. package/node_modules/content-disposition/README.md +142 -0
  367. package/node_modules/content-disposition/index.js +458 -0
  368. package/node_modules/content-disposition/package.json +44 -0
  369. package/node_modules/content-type/HISTORY.md +29 -0
  370. package/node_modules/content-type/LICENSE +22 -0
  371. package/node_modules/content-type/README.md +94 -0
  372. package/node_modules/content-type/index.js +225 -0
  373. package/node_modules/content-type/package.json +42 -0
  374. package/node_modules/cookie/LICENSE +24 -0
  375. package/node_modules/cookie/README.md +317 -0
  376. package/node_modules/cookie/SECURITY.md +25 -0
  377. package/node_modules/cookie/index.js +335 -0
  378. package/node_modules/cookie/package.json +44 -0
  379. package/node_modules/cookie-signature/History.md +42 -0
  380. package/node_modules/cookie-signature/Readme.md +42 -0
  381. package/node_modules/cookie-signature/index.js +51 -0
  382. package/node_modules/cookie-signature/package.json +18 -0
  383. package/node_modules/cors/LICENSE +22 -0
  384. package/node_modules/cors/README.md +277 -0
  385. package/node_modules/cors/lib/index.js +238 -0
  386. package/node_modules/cors/package.json +42 -0
  387. package/node_modules/debug/.coveralls.yml +1 -0
  388. package/node_modules/debug/.eslintrc +11 -0
  389. package/node_modules/debug/.npmignore +9 -0
  390. package/node_modules/debug/.travis.yml +14 -0
  391. package/node_modules/debug/CHANGELOG.md +362 -0
  392. package/node_modules/debug/LICENSE +19 -0
  393. package/node_modules/debug/Makefile +50 -0
  394. package/node_modules/debug/README.md +312 -0
  395. package/node_modules/debug/component.json +19 -0
  396. package/node_modules/debug/karma.conf.js +70 -0
  397. package/node_modules/debug/node.js +1 -0
  398. package/node_modules/debug/package.json +49 -0
  399. package/node_modules/debug/src/browser.js +185 -0
  400. package/node_modules/debug/src/debug.js +202 -0
  401. package/node_modules/debug/src/index.js +10 -0
  402. package/node_modules/debug/src/inspector-log.js +15 -0
  403. package/node_modules/debug/src/node.js +248 -0
  404. package/node_modules/depd/History.md +103 -0
  405. package/node_modules/depd/LICENSE +22 -0
  406. package/node_modules/depd/Readme.md +280 -0
  407. package/node_modules/depd/index.js +538 -0
  408. package/node_modules/depd/lib/browser/index.js +77 -0
  409. package/node_modules/depd/package.json +45 -0
  410. package/node_modules/destroy/LICENSE +23 -0
  411. package/node_modules/destroy/README.md +63 -0
  412. package/node_modules/destroy/index.js +209 -0
  413. package/node_modules/destroy/package.json +48 -0
  414. package/node_modules/dunder-proto/.eslintrc +5 -0
  415. package/node_modules/dunder-proto/.github/FUNDING.yml +12 -0
  416. package/node_modules/dunder-proto/.nycrc +13 -0
  417. package/node_modules/dunder-proto/CHANGELOG.md +24 -0
  418. package/node_modules/dunder-proto/LICENSE +21 -0
  419. package/node_modules/dunder-proto/README.md +54 -0
  420. package/node_modules/dunder-proto/get.d.ts +5 -0
  421. package/node_modules/dunder-proto/get.js +30 -0
  422. package/node_modules/dunder-proto/package.json +76 -0
  423. package/node_modules/dunder-proto/set.d.ts +5 -0
  424. package/node_modules/dunder-proto/set.js +35 -0
  425. package/node_modules/dunder-proto/test/get.js +34 -0
  426. package/node_modules/dunder-proto/test/index.js +4 -0
  427. package/node_modules/dunder-proto/test/set.js +50 -0
  428. package/node_modules/dunder-proto/tsconfig.json +9 -0
  429. package/node_modules/ee-first/LICENSE +22 -0
  430. package/node_modules/ee-first/README.md +80 -0
  431. package/node_modules/ee-first/index.js +95 -0
  432. package/node_modules/ee-first/package.json +29 -0
  433. package/node_modules/encodeurl/LICENSE +22 -0
  434. package/node_modules/encodeurl/README.md +109 -0
  435. package/node_modules/encodeurl/index.js +60 -0
  436. package/node_modules/encodeurl/package.json +40 -0
  437. package/node_modules/es-define-property/.eslintrc +13 -0
  438. package/node_modules/es-define-property/.github/FUNDING.yml +12 -0
  439. package/node_modules/es-define-property/.nycrc +9 -0
  440. package/node_modules/es-define-property/CHANGELOG.md +29 -0
  441. package/node_modules/es-define-property/LICENSE +21 -0
  442. package/node_modules/es-define-property/README.md +49 -0
  443. package/node_modules/es-define-property/index.d.ts +3 -0
  444. package/node_modules/es-define-property/index.js +14 -0
  445. package/node_modules/es-define-property/package.json +81 -0
  446. package/node_modules/es-define-property/test/index.js +56 -0
  447. package/node_modules/es-define-property/tsconfig.json +10 -0
  448. package/node_modules/es-errors/.eslintrc +5 -0
  449. package/node_modules/es-errors/.github/FUNDING.yml +12 -0
  450. package/node_modules/es-errors/CHANGELOG.md +40 -0
  451. package/node_modules/es-errors/LICENSE +21 -0
  452. package/node_modules/es-errors/README.md +55 -0
  453. package/node_modules/es-errors/eval.d.ts +3 -0
  454. package/node_modules/es-errors/eval.js +4 -0
  455. package/node_modules/es-errors/index.d.ts +3 -0
  456. package/node_modules/es-errors/index.js +4 -0
  457. package/node_modules/es-errors/package.json +80 -0
  458. package/node_modules/es-errors/range.d.ts +3 -0
  459. package/node_modules/es-errors/range.js +4 -0
  460. package/node_modules/es-errors/ref.d.ts +3 -0
  461. package/node_modules/es-errors/ref.js +4 -0
  462. package/node_modules/es-errors/syntax.d.ts +3 -0
  463. package/node_modules/es-errors/syntax.js +4 -0
  464. package/node_modules/es-errors/test/index.js +19 -0
  465. package/node_modules/es-errors/tsconfig.json +49 -0
  466. package/node_modules/es-errors/type.d.ts +3 -0
  467. package/node_modules/es-errors/type.js +4 -0
  468. package/node_modules/es-errors/uri.d.ts +3 -0
  469. package/node_modules/es-errors/uri.js +4 -0
  470. package/node_modules/es-object-atoms/.eslintrc +16 -0
  471. package/node_modules/es-object-atoms/.github/FUNDING.yml +12 -0
  472. package/node_modules/es-object-atoms/CHANGELOG.md +37 -0
  473. package/node_modules/es-object-atoms/LICENSE +21 -0
  474. package/node_modules/es-object-atoms/README.md +63 -0
  475. package/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
  476. package/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
  477. package/node_modules/es-object-atoms/ToObject.d.ts +7 -0
  478. package/node_modules/es-object-atoms/ToObject.js +10 -0
  479. package/node_modules/es-object-atoms/index.d.ts +3 -0
  480. package/node_modules/es-object-atoms/index.js +4 -0
  481. package/node_modules/es-object-atoms/isObject.d.ts +3 -0
  482. package/node_modules/es-object-atoms/isObject.js +6 -0
  483. package/node_modules/es-object-atoms/package.json +80 -0
  484. package/node_modules/es-object-atoms/test/index.js +38 -0
  485. package/node_modules/es-object-atoms/tsconfig.json +6 -0
  486. package/node_modules/escape-html/LICENSE +24 -0
  487. package/node_modules/escape-html/Readme.md +43 -0
  488. package/node_modules/escape-html/index.js +78 -0
  489. package/node_modules/escape-html/package.json +24 -0
  490. package/node_modules/etag/HISTORY.md +83 -0
  491. package/node_modules/etag/LICENSE +22 -0
  492. package/node_modules/etag/README.md +159 -0
  493. package/node_modules/etag/index.js +131 -0
  494. package/node_modules/etag/package.json +47 -0
  495. package/node_modules/express/History.md +3667 -0
  496. package/node_modules/express/LICENSE +24 -0
  497. package/node_modules/express/Readme.md +260 -0
  498. package/node_modules/express/index.js +11 -0
  499. package/node_modules/express/lib/application.js +661 -0
  500. package/node_modules/express/lib/express.js +116 -0
  501. package/node_modules/express/lib/middleware/init.js +43 -0
  502. package/node_modules/express/lib/middleware/query.js +47 -0
  503. package/node_modules/express/lib/request.js +525 -0
  504. package/node_modules/express/lib/response.js +1179 -0
  505. package/node_modules/express/lib/router/index.js +673 -0
  506. package/node_modules/express/lib/router/layer.js +181 -0
  507. package/node_modules/express/lib/router/route.js +230 -0
  508. package/node_modules/express/lib/utils.js +303 -0
  509. package/node_modules/express/lib/view.js +182 -0
  510. package/node_modules/express/package.json +102 -0
  511. package/node_modules/finalhandler/HISTORY.md +216 -0
  512. package/node_modules/finalhandler/LICENSE +22 -0
  513. package/node_modules/finalhandler/README.md +147 -0
  514. package/node_modules/finalhandler/SECURITY.md +25 -0
  515. package/node_modules/finalhandler/index.js +341 -0
  516. package/node_modules/finalhandler/package.json +47 -0
  517. package/node_modules/forwarded/HISTORY.md +21 -0
  518. package/node_modules/forwarded/LICENSE +22 -0
  519. package/node_modules/forwarded/README.md +57 -0
  520. package/node_modules/forwarded/index.js +90 -0
  521. package/node_modules/forwarded/package.json +45 -0
  522. package/node_modules/fresh/HISTORY.md +70 -0
  523. package/node_modules/fresh/LICENSE +23 -0
  524. package/node_modules/fresh/README.md +119 -0
  525. package/node_modules/fresh/index.js +137 -0
  526. package/node_modules/fresh/package.json +46 -0
  527. package/node_modules/function-bind/.eslintrc +21 -0
  528. package/node_modules/function-bind/.github/FUNDING.yml +12 -0
  529. package/node_modules/function-bind/.github/SECURITY.md +3 -0
  530. package/node_modules/function-bind/.nycrc +13 -0
  531. package/node_modules/function-bind/CHANGELOG.md +136 -0
  532. package/node_modules/function-bind/LICENSE +20 -0
  533. package/node_modules/function-bind/README.md +46 -0
  534. package/node_modules/function-bind/implementation.js +84 -0
  535. package/node_modules/function-bind/index.js +5 -0
  536. package/node_modules/function-bind/package.json +87 -0
  537. package/node_modules/function-bind/test/.eslintrc +9 -0
  538. package/node_modules/function-bind/test/index.js +252 -0
  539. package/node_modules/get-intrinsic/.eslintrc +42 -0
  540. package/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
  541. package/node_modules/get-intrinsic/.nycrc +9 -0
  542. package/node_modules/get-intrinsic/CHANGELOG.md +186 -0
  543. package/node_modules/get-intrinsic/LICENSE +21 -0
  544. package/node_modules/get-intrinsic/README.md +71 -0
  545. package/node_modules/get-intrinsic/index.js +378 -0
  546. package/node_modules/get-intrinsic/package.json +97 -0
  547. package/node_modules/get-intrinsic/test/GetIntrinsic.js +274 -0
  548. package/node_modules/get-proto/.eslintrc +10 -0
  549. package/node_modules/get-proto/.github/FUNDING.yml +12 -0
  550. package/node_modules/get-proto/.nycrc +9 -0
  551. package/node_modules/get-proto/CHANGELOG.md +21 -0
  552. package/node_modules/get-proto/LICENSE +21 -0
  553. package/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
  554. package/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
  555. package/node_modules/get-proto/README.md +50 -0
  556. package/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
  557. package/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
  558. package/node_modules/get-proto/index.d.ts +5 -0
  559. package/node_modules/get-proto/index.js +27 -0
  560. package/node_modules/get-proto/package.json +81 -0
  561. package/node_modules/get-proto/test/index.js +68 -0
  562. package/node_modules/get-proto/tsconfig.json +9 -0
  563. package/node_modules/gopd/.eslintrc +16 -0
  564. package/node_modules/gopd/.github/FUNDING.yml +12 -0
  565. package/node_modules/gopd/CHANGELOG.md +45 -0
  566. package/node_modules/gopd/LICENSE +21 -0
  567. package/node_modules/gopd/README.md +40 -0
  568. package/node_modules/gopd/gOPD.d.ts +1 -0
  569. package/node_modules/gopd/gOPD.js +4 -0
  570. package/node_modules/gopd/index.d.ts +5 -0
  571. package/node_modules/gopd/index.js +15 -0
  572. package/node_modules/gopd/package.json +77 -0
  573. package/node_modules/gopd/test/index.js +36 -0
  574. package/node_modules/gopd/tsconfig.json +9 -0
  575. package/node_modules/has-symbols/.eslintrc +11 -0
  576. package/node_modules/has-symbols/.github/FUNDING.yml +12 -0
  577. package/node_modules/has-symbols/.nycrc +9 -0
  578. package/node_modules/has-symbols/CHANGELOG.md +91 -0
  579. package/node_modules/has-symbols/LICENSE +21 -0
  580. package/node_modules/has-symbols/README.md +46 -0
  581. package/node_modules/has-symbols/index.d.ts +3 -0
  582. package/node_modules/has-symbols/index.js +14 -0
  583. package/node_modules/has-symbols/package.json +111 -0
  584. package/node_modules/has-symbols/shams.d.ts +3 -0
  585. package/node_modules/has-symbols/shams.js +45 -0
  586. package/node_modules/has-symbols/test/index.js +22 -0
  587. package/node_modules/has-symbols/test/shams/core-js.js +29 -0
  588. package/node_modules/has-symbols/test/shams/get-own-property-symbols.js +29 -0
  589. package/node_modules/has-symbols/test/tests.js +58 -0
  590. package/node_modules/has-symbols/tsconfig.json +10 -0
  591. package/node_modules/hasown/.eslintrc +5 -0
  592. package/node_modules/hasown/.github/FUNDING.yml +12 -0
  593. package/node_modules/hasown/.nycrc +13 -0
  594. package/node_modules/hasown/CHANGELOG.md +40 -0
  595. package/node_modules/hasown/LICENSE +21 -0
  596. package/node_modules/hasown/README.md +40 -0
  597. package/node_modules/hasown/index.d.ts +3 -0
  598. package/node_modules/hasown/index.js +8 -0
  599. package/node_modules/hasown/package.json +92 -0
  600. package/node_modules/hasown/tsconfig.json +6 -0
  601. package/node_modules/http-errors/HISTORY.md +186 -0
  602. package/node_modules/http-errors/LICENSE +23 -0
  603. package/node_modules/http-errors/README.md +169 -0
  604. package/node_modules/http-errors/index.js +290 -0
  605. package/node_modules/http-errors/package.json +54 -0
  606. package/node_modules/iconv-lite/Changelog.md +162 -0
  607. package/node_modules/iconv-lite/LICENSE +21 -0
  608. package/node_modules/iconv-lite/README.md +156 -0
  609. package/node_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
  610. package/node_modules/iconv-lite/encodings/dbcs-data.js +176 -0
  611. package/node_modules/iconv-lite/encodings/index.js +22 -0
  612. package/node_modules/iconv-lite/encodings/internal.js +188 -0
  613. package/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
  614. package/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
  615. package/node_modules/iconv-lite/encodings/sbcs-data.js +174 -0
  616. package/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
  617. package/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
  618. package/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
  619. package/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
  620. package/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
  621. package/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
  622. package/node_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
  623. package/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
  624. package/node_modules/iconv-lite/encodings/utf16.js +177 -0
  625. package/node_modules/iconv-lite/encodings/utf7.js +290 -0
  626. package/node_modules/iconv-lite/lib/bom-handling.js +52 -0
  627. package/node_modules/iconv-lite/lib/extend-node.js +217 -0
  628. package/node_modules/iconv-lite/lib/index.d.ts +24 -0
  629. package/node_modules/iconv-lite/lib/index.js +153 -0
  630. package/node_modules/iconv-lite/lib/streams.js +121 -0
  631. package/node_modules/iconv-lite/package.json +46 -0
  632. package/node_modules/inherits/LICENSE +16 -0
  633. package/node_modules/inherits/README.md +42 -0
  634. package/node_modules/inherits/inherits.js +9 -0
  635. package/node_modules/inherits/inherits_browser.js +27 -0
  636. package/node_modules/inherits/package.json +29 -0
  637. package/node_modules/ipaddr.js/LICENSE +19 -0
  638. package/node_modules/ipaddr.js/README.md +233 -0
  639. package/node_modules/ipaddr.js/ipaddr.min.js +1 -0
  640. package/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
  641. package/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
  642. package/node_modules/ipaddr.js/package.json +35 -0
  643. package/node_modules/math-intrinsics/.eslintrc +16 -0
  644. package/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
  645. package/node_modules/math-intrinsics/CHANGELOG.md +24 -0
  646. package/node_modules/math-intrinsics/LICENSE +21 -0
  647. package/node_modules/math-intrinsics/README.md +50 -0
  648. package/node_modules/math-intrinsics/abs.d.ts +1 -0
  649. package/node_modules/math-intrinsics/abs.js +4 -0
  650. package/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
  651. package/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
  652. package/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
  653. package/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
  654. package/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
  655. package/node_modules/math-intrinsics/constants/maxValue.js +5 -0
  656. package/node_modules/math-intrinsics/floor.d.ts +1 -0
  657. package/node_modules/math-intrinsics/floor.js +4 -0
  658. package/node_modules/math-intrinsics/isFinite.d.ts +3 -0
  659. package/node_modules/math-intrinsics/isFinite.js +12 -0
  660. package/node_modules/math-intrinsics/isInteger.d.ts +3 -0
  661. package/node_modules/math-intrinsics/isInteger.js +16 -0
  662. package/node_modules/math-intrinsics/isNaN.d.ts +1 -0
  663. package/node_modules/math-intrinsics/isNaN.js +6 -0
  664. package/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
  665. package/node_modules/math-intrinsics/isNegativeZero.js +6 -0
  666. package/node_modules/math-intrinsics/max.d.ts +1 -0
  667. package/node_modules/math-intrinsics/max.js +4 -0
  668. package/node_modules/math-intrinsics/min.d.ts +1 -0
  669. package/node_modules/math-intrinsics/min.js +4 -0
  670. package/node_modules/math-intrinsics/mod.d.ts +3 -0
  671. package/node_modules/math-intrinsics/mod.js +9 -0
  672. package/node_modules/math-intrinsics/package.json +86 -0
  673. package/node_modules/math-intrinsics/pow.d.ts +1 -0
  674. package/node_modules/math-intrinsics/pow.js +4 -0
  675. package/node_modules/math-intrinsics/round.d.ts +1 -0
  676. package/node_modules/math-intrinsics/round.js +4 -0
  677. package/node_modules/math-intrinsics/sign.d.ts +3 -0
  678. package/node_modules/math-intrinsics/sign.js +11 -0
  679. package/node_modules/math-intrinsics/test/index.js +192 -0
  680. package/node_modules/math-intrinsics/tsconfig.json +3 -0
  681. package/node_modules/media-typer/HISTORY.md +22 -0
  682. package/node_modules/media-typer/LICENSE +22 -0
  683. package/node_modules/media-typer/README.md +81 -0
  684. package/node_modules/media-typer/index.js +270 -0
  685. package/node_modules/media-typer/package.json +26 -0
  686. package/node_modules/merge-descriptors/HISTORY.md +21 -0
  687. package/node_modules/merge-descriptors/LICENSE +23 -0
  688. package/node_modules/merge-descriptors/README.md +49 -0
  689. package/node_modules/merge-descriptors/index.js +60 -0
  690. package/node_modules/merge-descriptors/package.json +39 -0
  691. package/node_modules/methods/HISTORY.md +29 -0
  692. package/node_modules/methods/LICENSE +24 -0
  693. package/node_modules/methods/README.md +51 -0
  694. package/node_modules/methods/index.js +69 -0
  695. package/node_modules/methods/package.json +36 -0
  696. package/node_modules/mime/.npmignore +0 -0
  697. package/node_modules/mime/CHANGELOG.md +164 -0
  698. package/node_modules/mime/LICENSE +21 -0
  699. package/node_modules/mime/README.md +90 -0
  700. package/node_modules/mime/cli.js +8 -0
  701. package/node_modules/mime/mime.js +108 -0
  702. package/node_modules/mime/package.json +44 -0
  703. package/node_modules/mime/src/build.js +53 -0
  704. package/node_modules/mime/src/test.js +60 -0
  705. package/node_modules/mime/types.json +1 -0
  706. package/node_modules/mime-db/HISTORY.md +507 -0
  707. package/node_modules/mime-db/LICENSE +23 -0
  708. package/node_modules/mime-db/README.md +100 -0
  709. package/node_modules/mime-db/db.json +8519 -0
  710. package/node_modules/mime-db/index.js +12 -0
  711. package/node_modules/mime-db/package.json +60 -0
  712. package/node_modules/mime-types/HISTORY.md +397 -0
  713. package/node_modules/mime-types/LICENSE +23 -0
  714. package/node_modules/mime-types/README.md +113 -0
  715. package/node_modules/mime-types/index.js +188 -0
  716. package/node_modules/mime-types/package.json +44 -0
  717. package/node_modules/ms/index.js +152 -0
  718. package/node_modules/ms/license.md +21 -0
  719. package/node_modules/ms/package.json +37 -0
  720. package/node_modules/ms/readme.md +51 -0
  721. package/node_modules/negotiator/HISTORY.md +108 -0
  722. package/node_modules/negotiator/LICENSE +24 -0
  723. package/node_modules/negotiator/README.md +203 -0
  724. package/node_modules/negotiator/index.js +82 -0
  725. package/node_modules/negotiator/lib/charset.js +169 -0
  726. package/node_modules/negotiator/lib/encoding.js +184 -0
  727. package/node_modules/negotiator/lib/language.js +179 -0
  728. package/node_modules/negotiator/lib/mediaType.js +294 -0
  729. package/node_modules/negotiator/package.json +42 -0
  730. package/node_modules/object-assign/index.js +90 -0
  731. package/node_modules/object-assign/license +21 -0
  732. package/node_modules/object-assign/package.json +42 -0
  733. package/node_modules/object-assign/readme.md +61 -0
  734. package/node_modules/object-inspect/.eslintrc +53 -0
  735. package/node_modules/object-inspect/.github/FUNDING.yml +12 -0
  736. package/node_modules/object-inspect/.nycrc +13 -0
  737. package/node_modules/object-inspect/CHANGELOG.md +424 -0
  738. package/node_modules/object-inspect/LICENSE +21 -0
  739. package/node_modules/object-inspect/example/all.js +23 -0
  740. package/node_modules/object-inspect/example/circular.js +6 -0
  741. package/node_modules/object-inspect/example/fn.js +5 -0
  742. package/node_modules/object-inspect/example/inspect.js +10 -0
  743. package/node_modules/object-inspect/index.js +544 -0
  744. package/node_modules/object-inspect/package-support.json +20 -0
  745. package/node_modules/object-inspect/package.json +105 -0
  746. package/node_modules/object-inspect/readme.markdown +84 -0
  747. package/node_modules/object-inspect/test/bigint.js +58 -0
  748. package/node_modules/object-inspect/test/browser/dom.js +15 -0
  749. package/node_modules/object-inspect/test/circular.js +16 -0
  750. package/node_modules/object-inspect/test/deep.js +12 -0
  751. package/node_modules/object-inspect/test/element.js +53 -0
  752. package/node_modules/object-inspect/test/err.js +48 -0
  753. package/node_modules/object-inspect/test/fakes.js +29 -0
  754. package/node_modules/object-inspect/test/fn.js +76 -0
  755. package/node_modules/object-inspect/test/global.js +17 -0
  756. package/node_modules/object-inspect/test/has.js +15 -0
  757. package/node_modules/object-inspect/test/holes.js +15 -0
  758. package/node_modules/object-inspect/test/indent-option.js +271 -0
  759. package/node_modules/object-inspect/test/inspect.js +139 -0
  760. package/node_modules/object-inspect/test/lowbyte.js +12 -0
  761. package/node_modules/object-inspect/test/number.js +58 -0
  762. package/node_modules/object-inspect/test/quoteStyle.js +26 -0
  763. package/node_modules/object-inspect/test/toStringTag.js +40 -0
  764. package/node_modules/object-inspect/test/undef.js +12 -0
  765. package/node_modules/object-inspect/test/values.js +261 -0
  766. package/node_modules/object-inspect/test-core-js.js +26 -0
  767. package/node_modules/object-inspect/util.inspect.js +1 -0
  768. package/node_modules/on-finished/HISTORY.md +98 -0
  769. package/node_modules/on-finished/LICENSE +23 -0
  770. package/node_modules/on-finished/README.md +162 -0
  771. package/node_modules/on-finished/index.js +234 -0
  772. package/node_modules/on-finished/package.json +39 -0
  773. package/node_modules/parseurl/HISTORY.md +58 -0
  774. package/node_modules/parseurl/LICENSE +24 -0
  775. package/node_modules/parseurl/README.md +133 -0
  776. package/node_modules/parseurl/index.js +158 -0
  777. package/node_modules/parseurl/package.json +40 -0
  778. package/node_modules/path-to-regexp/LICENSE +21 -0
  779. package/node_modules/path-to-regexp/Readme.md +35 -0
  780. package/node_modules/path-to-regexp/index.js +156 -0
  781. package/node_modules/path-to-regexp/package.json +30 -0
  782. package/node_modules/proxy-addr/HISTORY.md +161 -0
  783. package/node_modules/proxy-addr/LICENSE +22 -0
  784. package/node_modules/proxy-addr/README.md +139 -0
  785. package/node_modules/proxy-addr/index.js +327 -0
  786. package/node_modules/proxy-addr/package.json +47 -0
  787. package/node_modules/qs/.editorconfig +46 -0
  788. package/node_modules/qs/.github/FUNDING.yml +12 -0
  789. package/node_modules/qs/.github/SECURITY.md +11 -0
  790. package/node_modules/qs/.github/THREAT_MODEL.md +78 -0
  791. package/node_modules/qs/.nycrc +13 -0
  792. package/node_modules/qs/CHANGELOG.md +644 -0
  793. package/node_modules/qs/LICENSE.md +29 -0
  794. package/node_modules/qs/README.md +740 -0
  795. package/node_modules/qs/dist/qs.js +141 -0
  796. package/node_modules/qs/eslint.config.mjs +56 -0
  797. package/node_modules/qs/lib/formats.js +23 -0
  798. package/node_modules/qs/lib/index.js +11 -0
  799. package/node_modules/qs/lib/parse.js +371 -0
  800. package/node_modules/qs/lib/stringify.js +356 -0
  801. package/node_modules/qs/lib/utils.js +340 -0
  802. package/node_modules/qs/package.json +94 -0
  803. package/node_modules/qs/test/empty-keys-cases.js +267 -0
  804. package/node_modules/qs/test/parse.js +1512 -0
  805. package/node_modules/qs/test/stringify.js +1310 -0
  806. package/node_modules/qs/test/utils.js +397 -0
  807. package/node_modules/range-parser/HISTORY.md +56 -0
  808. package/node_modules/range-parser/LICENSE +23 -0
  809. package/node_modules/range-parser/README.md +84 -0
  810. package/node_modules/range-parser/index.js +162 -0
  811. package/node_modules/range-parser/package.json +44 -0
  812. package/node_modules/raw-body/LICENSE +22 -0
  813. package/node_modules/raw-body/README.md +223 -0
  814. package/node_modules/raw-body/index.d.ts +87 -0
  815. package/node_modules/raw-body/index.js +336 -0
  816. package/node_modules/raw-body/package.json +47 -0
  817. package/node_modules/safe-buffer/LICENSE +21 -0
  818. package/node_modules/safe-buffer/README.md +584 -0
  819. package/node_modules/safe-buffer/index.d.ts +187 -0
  820. package/node_modules/safe-buffer/index.js +65 -0
  821. package/node_modules/safe-buffer/package.json +51 -0
  822. package/node_modules/safer-buffer/LICENSE +21 -0
  823. package/node_modules/safer-buffer/Porting-Buffer.md +268 -0
  824. package/node_modules/safer-buffer/Readme.md +156 -0
  825. package/node_modules/safer-buffer/dangerous.js +58 -0
  826. package/node_modules/safer-buffer/package.json +34 -0
  827. package/node_modules/safer-buffer/safer.js +77 -0
  828. package/node_modules/safer-buffer/tests.js +406 -0
  829. package/node_modules/send/HISTORY.md +538 -0
  830. package/node_modules/send/LICENSE +23 -0
  831. package/node_modules/send/README.md +327 -0
  832. package/node_modules/send/SECURITY.md +24 -0
  833. package/node_modules/send/index.js +1142 -0
  834. package/node_modules/send/node_modules/ms/index.js +162 -0
  835. package/node_modules/send/node_modules/ms/license.md +21 -0
  836. package/node_modules/send/node_modules/ms/package.json +38 -0
  837. package/node_modules/send/node_modules/ms/readme.md +59 -0
  838. package/node_modules/send/package.json +62 -0
  839. package/node_modules/serve-static/HISTORY.md +493 -0
  840. package/node_modules/serve-static/LICENSE +25 -0
  841. package/node_modules/serve-static/README.md +257 -0
  842. package/node_modules/serve-static/index.js +209 -0
  843. package/node_modules/serve-static/package.json +42 -0
  844. package/node_modules/setprototypeof/LICENSE +13 -0
  845. package/node_modules/setprototypeof/README.md +31 -0
  846. package/node_modules/setprototypeof/index.d.ts +2 -0
  847. package/node_modules/setprototypeof/index.js +17 -0
  848. package/node_modules/setprototypeof/package.json +38 -0
  849. package/node_modules/setprototypeof/test/index.js +24 -0
  850. package/node_modules/side-channel/.editorconfig +9 -0
  851. package/node_modules/side-channel/.eslintrc +12 -0
  852. package/node_modules/side-channel/.github/FUNDING.yml +12 -0
  853. package/node_modules/side-channel/.nycrc +13 -0
  854. package/node_modules/side-channel/CHANGELOG.md +110 -0
  855. package/node_modules/side-channel/LICENSE +21 -0
  856. package/node_modules/side-channel/README.md +61 -0
  857. package/node_modules/side-channel/index.d.ts +14 -0
  858. package/node_modules/side-channel/index.js +43 -0
  859. package/node_modules/side-channel/package.json +85 -0
  860. package/node_modules/side-channel/test/index.js +104 -0
  861. package/node_modules/side-channel/tsconfig.json +9 -0
  862. package/node_modules/side-channel-list/.editorconfig +9 -0
  863. package/node_modules/side-channel-list/.eslintrc +11 -0
  864. package/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
  865. package/node_modules/side-channel-list/.nycrc +13 -0
  866. package/node_modules/side-channel-list/CHANGELOG.md +15 -0
  867. package/node_modules/side-channel-list/LICENSE +21 -0
  868. package/node_modules/side-channel-list/README.md +62 -0
  869. package/node_modules/side-channel-list/index.d.ts +13 -0
  870. package/node_modules/side-channel-list/index.js +113 -0
  871. package/node_modules/side-channel-list/list.d.ts +14 -0
  872. package/node_modules/side-channel-list/package.json +77 -0
  873. package/node_modules/side-channel-list/test/index.js +104 -0
  874. package/node_modules/side-channel-list/tsconfig.json +9 -0
  875. package/node_modules/side-channel-map/.editorconfig +9 -0
  876. package/node_modules/side-channel-map/.eslintrc +11 -0
  877. package/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
  878. package/node_modules/side-channel-map/.nycrc +13 -0
  879. package/node_modules/side-channel-map/CHANGELOG.md +22 -0
  880. package/node_modules/side-channel-map/LICENSE +21 -0
  881. package/node_modules/side-channel-map/README.md +62 -0
  882. package/node_modules/side-channel-map/index.d.ts +15 -0
  883. package/node_modules/side-channel-map/index.js +68 -0
  884. package/node_modules/side-channel-map/package.json +80 -0
  885. package/node_modules/side-channel-map/test/index.js +114 -0
  886. package/node_modules/side-channel-map/tsconfig.json +9 -0
  887. package/node_modules/side-channel-weakmap/.editorconfig +9 -0
  888. package/node_modules/side-channel-weakmap/.eslintrc +12 -0
  889. package/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
  890. package/node_modules/side-channel-weakmap/.nycrc +13 -0
  891. package/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
  892. package/node_modules/side-channel-weakmap/LICENSE +21 -0
  893. package/node_modules/side-channel-weakmap/README.md +62 -0
  894. package/node_modules/side-channel-weakmap/index.d.ts +15 -0
  895. package/node_modules/side-channel-weakmap/index.js +84 -0
  896. package/node_modules/side-channel-weakmap/package.json +87 -0
  897. package/node_modules/side-channel-weakmap/test/index.js +114 -0
  898. package/node_modules/side-channel-weakmap/tsconfig.json +9 -0
  899. package/node_modules/statuses/HISTORY.md +87 -0
  900. package/node_modules/statuses/LICENSE +23 -0
  901. package/node_modules/statuses/README.md +139 -0
  902. package/node_modules/statuses/codes.json +65 -0
  903. package/node_modules/statuses/index.js +146 -0
  904. package/node_modules/statuses/package.json +49 -0
  905. package/node_modules/toidentifier/HISTORY.md +9 -0
  906. package/node_modules/toidentifier/LICENSE +21 -0
  907. package/node_modules/toidentifier/README.md +61 -0
  908. package/node_modules/toidentifier/index.js +32 -0
  909. package/node_modules/toidentifier/package.json +38 -0
  910. package/node_modules/tweetnacl/AUTHORS.md +27 -0
  911. package/node_modules/tweetnacl/CHANGELOG.md +283 -0
  912. package/node_modules/tweetnacl/LICENSE +24 -0
  913. package/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md +20 -0
  914. package/node_modules/tweetnacl/README.md +494 -0
  915. package/node_modules/tweetnacl/nacl-fast.js +2391 -0
  916. package/node_modules/tweetnacl/nacl-fast.min.js +1 -0
  917. package/node_modules/tweetnacl/nacl.d.ts +98 -0
  918. package/node_modules/tweetnacl/nacl.js +1178 -0
  919. package/node_modules/tweetnacl/nacl.min.js +1 -0
  920. package/node_modules/tweetnacl/package.json +56 -0
  921. package/node_modules/type-is/HISTORY.md +259 -0
  922. package/node_modules/type-is/LICENSE +23 -0
  923. package/node_modules/type-is/README.md +170 -0
  924. package/node_modules/type-is/index.js +266 -0
  925. package/node_modules/type-is/package.json +45 -0
  926. package/node_modules/unpipe/HISTORY.md +4 -0
  927. package/node_modules/unpipe/LICENSE +22 -0
  928. package/node_modules/unpipe/README.md +43 -0
  929. package/node_modules/unpipe/index.js +69 -0
  930. package/node_modules/unpipe/package.json +27 -0
  931. package/node_modules/utils-merge/.npmignore +9 -0
  932. package/node_modules/utils-merge/LICENSE +20 -0
  933. package/node_modules/utils-merge/README.md +34 -0
  934. package/node_modules/utils-merge/index.js +23 -0
  935. package/node_modules/utils-merge/package.json +40 -0
  936. package/node_modules/vary/HISTORY.md +39 -0
  937. package/node_modules/vary/LICENSE +22 -0
  938. package/node_modules/vary/README.md +101 -0
  939. package/node_modules/vary/index.js +149 -0
  940. package/node_modules/vary/package.json +43 -0
  941. package/openclaw-skills/silicaclaw-bridge-setup/SKILL.md +147 -0
  942. package/openclaw-skills/silicaclaw-bridge-setup/VERSION +1 -0
  943. package/openclaw-skills/silicaclaw-bridge-setup/agents/openai.yaml +6 -0
  944. package/openclaw-skills/silicaclaw-bridge-setup/manifest.json +27 -0
  945. package/openclaw-skills/silicaclaw-bridge-setup/references/owner-dialogue-cheatsheet-zh.md +58 -0
  946. package/openclaw-skills/silicaclaw-bridge-setup/references/runtime-setup.md +43 -0
  947. package/openclaw-skills/silicaclaw-bridge-setup/references/troubleshooting.md +24 -0
  948. package/openclaw-skills/silicaclaw-broadcast/SKILL.md +132 -0
  949. package/openclaw-skills/silicaclaw-broadcast/VERSION +1 -1
  950. package/openclaw-skills/silicaclaw-broadcast/agents/openai.yaml +2 -2
  951. package/openclaw-skills/silicaclaw-broadcast/manifest.json +3 -2
  952. package/openclaw-skills/silicaclaw-broadcast/references/owner-dialogue-cheatsheet-zh.md +81 -0
  953. package/openclaw-skills/silicaclaw-owner-push/SKILL.md +217 -0
  954. package/openclaw-skills/silicaclaw-owner-push/VERSION +1 -0
  955. package/openclaw-skills/silicaclaw-owner-push/agents/openai.yaml +6 -0
  956. package/openclaw-skills/silicaclaw-owner-push/manifest.json +30 -0
  957. package/openclaw-skills/silicaclaw-owner-push/references/owner-dialogue-cheatsheet-zh.md +87 -0
  958. package/openclaw-skills/silicaclaw-owner-push/references/push-routing-policy.md +43 -0
  959. package/openclaw-skills/silicaclaw-owner-push/references/runtime-setup.md +41 -0
  960. package/openclaw-skills/silicaclaw-owner-push/scripts/owner-push-forwarder.mjs +214 -0
  961. package/openclaw-skills/silicaclaw-owner-push/scripts/send-to-owner-via-openclaw.mjs +69 -0
  962. package/package.json +24 -2
  963. package/packages/core/dist/config/silicaclaw-defaults.json +19 -0
  964. package/packages/core/dist/packages/core/src/crypto.d.ts +6 -0
  965. package/packages/core/dist/packages/core/src/crypto.js +50 -0
  966. package/packages/core/dist/packages/core/src/directory.d.ts +17 -0
  967. package/packages/core/dist/packages/core/src/directory.js +145 -0
  968. package/packages/core/dist/packages/core/src/identity.d.ts +2 -0
  969. package/packages/core/dist/packages/core/src/identity.js +18 -0
  970. package/packages/core/dist/packages/core/src/index.d.ts +12 -0
  971. package/packages/core/dist/packages/core/src/index.js +28 -0
  972. package/packages/core/dist/packages/core/src/indexing.d.ts +6 -0
  973. package/packages/core/dist/packages/core/src/indexing.js +43 -0
  974. package/packages/core/dist/packages/core/src/presence.d.ts +4 -0
  975. package/packages/core/dist/packages/core/src/presence.js +23 -0
  976. package/packages/core/dist/packages/core/src/profile.d.ts +4 -0
  977. package/packages/core/dist/packages/core/src/profile.js +39 -0
  978. package/packages/core/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  979. package/packages/core/dist/packages/core/src/publicProfileSummary.js +103 -0
  980. package/packages/core/dist/packages/core/src/socialConfig.d.ts +100 -0
  981. package/packages/core/dist/packages/core/src/socialConfig.js +300 -0
  982. package/packages/core/dist/packages/core/src/socialMessage.d.ts +19 -0
  983. package/packages/core/dist/packages/core/src/socialMessage.js +69 -0
  984. package/packages/core/dist/packages/core/src/socialResolver.d.ts +46 -0
  985. package/packages/core/dist/packages/core/src/socialResolver.js +237 -0
  986. package/packages/core/dist/packages/core/src/socialTemplate.d.ts +2 -0
  987. package/packages/core/dist/packages/core/src/socialTemplate.js +90 -0
  988. package/packages/core/dist/packages/core/src/types.d.ts +59 -0
  989. package/packages/core/dist/packages/core/src/types.js +2 -0
  990. package/packages/core/src/socialConfig.ts +7 -5
  991. package/packages/network/dist/config/silicaclaw-defaults.json +19 -0
  992. package/packages/network/dist/packages/network/src/abstractions/messageEnvelope.d.ts +28 -0
  993. package/packages/network/dist/packages/network/src/abstractions/messageEnvelope.js +36 -0
  994. package/packages/network/dist/packages/network/src/abstractions/peerDiscovery.d.ts +43 -0
  995. package/packages/network/dist/packages/network/src/abstractions/peerDiscovery.js +2 -0
  996. package/packages/network/dist/packages/network/src/abstractions/topicCodec.d.ts +4 -0
  997. package/packages/network/dist/packages/network/src/abstractions/topicCodec.js +2 -0
  998. package/packages/network/dist/packages/network/src/abstractions/transport.d.ts +36 -0
  999. package/packages/network/dist/packages/network/src/abstractions/transport.js +2 -0
  1000. package/packages/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
  1001. package/packages/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.js +24 -0
  1002. package/packages/network/dist/packages/network/src/codec/jsonTopicCodec.d.ts +5 -0
  1003. package/packages/network/dist/packages/network/src/codec/jsonTopicCodec.js +12 -0
  1004. package/packages/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.d.ts +28 -0
  1005. package/packages/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.js +144 -0
  1006. package/packages/network/dist/packages/network/src/index.d.ts +14 -0
  1007. package/packages/network/dist/packages/network/src/index.js +30 -0
  1008. package/packages/network/dist/packages/network/src/localEventBus.d.ts +9 -0
  1009. package/packages/network/dist/packages/network/src/localEventBus.js +47 -0
  1010. package/packages/network/dist/packages/network/src/mock.d.ts +8 -0
  1011. package/packages/network/dist/packages/network/src/mock.js +24 -0
  1012. package/packages/network/dist/packages/network/src/realPreview.d.ts +105 -0
  1013. package/packages/network/dist/packages/network/src/realPreview.js +331 -0
  1014. package/packages/network/dist/packages/network/src/relayPreview.d.ts +166 -0
  1015. package/packages/network/dist/packages/network/src/relayPreview.js +448 -0
  1016. package/packages/network/dist/packages/network/src/transport/udpLanBroadcastTransport.d.ts +23 -0
  1017. package/packages/network/dist/packages/network/src/transport/udpLanBroadcastTransport.js +154 -0
  1018. package/packages/network/dist/packages/network/src/types.d.ts +6 -0
  1019. package/packages/network/dist/packages/network/src/types.js +2 -0
  1020. package/packages/network/dist/packages/network/src/webrtcPreview.d.ts +163 -0
  1021. package/packages/network/dist/packages/network/src/webrtcPreview.js +848 -0
  1022. package/packages/network/src/realPreview.ts +3 -2
  1023. package/packages/network/src/relayPreview.ts +5 -2
  1024. package/packages/network/src/transport/udpLanBroadcastTransport.ts +2 -1
  1025. package/packages/network/src/webrtcPreview.ts +2 -1
  1026. package/packages/storage/config/silicaclaw-defaults.json +19 -0
  1027. package/packages/storage/dist/config/silicaclaw-defaults.json +19 -0
  1028. package/packages/storage/dist/packages/core/src/crypto.d.ts +6 -0
  1029. package/packages/storage/dist/packages/core/src/crypto.js +50 -0
  1030. package/packages/storage/dist/packages/core/src/directory.d.ts +17 -0
  1031. package/packages/storage/dist/packages/core/src/directory.js +145 -0
  1032. package/packages/storage/dist/packages/core/src/identity.d.ts +2 -0
  1033. package/packages/storage/dist/packages/core/src/identity.js +18 -0
  1034. package/packages/storage/dist/packages/core/src/index.d.ts +12 -0
  1035. package/packages/storage/dist/packages/core/src/index.js +28 -0
  1036. package/packages/storage/dist/packages/core/src/indexing.d.ts +6 -0
  1037. package/packages/storage/dist/packages/core/src/indexing.js +43 -0
  1038. package/packages/storage/dist/packages/core/src/presence.d.ts +4 -0
  1039. package/packages/storage/dist/packages/core/src/presence.js +23 -0
  1040. package/packages/storage/dist/packages/core/src/profile.d.ts +4 -0
  1041. package/packages/storage/dist/packages/core/src/profile.js +39 -0
  1042. package/packages/storage/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  1043. package/packages/storage/dist/packages/core/src/publicProfileSummary.js +103 -0
  1044. package/packages/storage/dist/packages/core/src/socialConfig.d.ts +100 -0
  1045. package/packages/storage/dist/packages/core/src/socialConfig.js +300 -0
  1046. package/packages/storage/dist/packages/core/src/socialMessage.d.ts +19 -0
  1047. package/packages/storage/dist/packages/core/src/socialMessage.js +69 -0
  1048. package/packages/storage/dist/packages/core/src/socialResolver.d.ts +46 -0
  1049. package/packages/storage/dist/packages/core/src/socialResolver.js +237 -0
  1050. package/packages/storage/dist/packages/core/src/socialTemplate.d.ts +2 -0
  1051. package/packages/storage/dist/packages/core/src/socialTemplate.js +90 -0
  1052. package/packages/storage/dist/packages/core/src/types.d.ts +59 -0
  1053. package/packages/storage/dist/packages/core/src/types.js +2 -0
  1054. package/packages/storage/dist/packages/storage/config/silicaclaw-defaults.json +19 -0
  1055. package/packages/storage/dist/packages/storage/src/index.d.ts +3 -0
  1056. package/packages/storage/dist/packages/storage/src/index.js +19 -0
  1057. package/packages/storage/dist/packages/storage/src/jsonRepo.d.ts +7 -0
  1058. package/packages/storage/dist/packages/storage/src/jsonRepo.js +29 -0
  1059. package/packages/storage/dist/packages/storage/src/repos.d.ts +61 -0
  1060. package/packages/storage/dist/packages/storage/src/repos.js +67 -0
  1061. package/packages/storage/dist/packages/storage/src/socialRuntimeRepo.d.ts +5 -0
  1062. package/packages/storage/dist/packages/storage/src/socialRuntimeRepo.js +57 -0
  1063. package/packages/storage/dist/socialRuntimeRepo.js +8 -4
  1064. package/packages/storage/src/socialRuntimeRepo.ts +5 -4
  1065. package/packages/storage/tsconfig.json +1 -6
  1066. package/scripts/functional-check.mjs +35 -6
  1067. package/scripts/install-openclaw-skill.mjs +9 -2
  1068. package/scripts/openclaw-bridge-adapter.mjs +3 -1
  1069. package/scripts/openclaw-bridge-client.mjs +3 -1
  1070. package/scripts/openclaw-runtime-demo.mjs +3 -1
  1071. package/scripts/quickstart.sh +14 -10
  1072. package/scripts/release-pack.mjs +147 -0
  1073. package/scripts/silicaclaw-cli.mjs +75 -31
  1074. package/scripts/silicaclaw-gateway.mjs +369 -94
  1075. package/scripts/validate-openclaw-skill.mjs +79 -21
@@ -2,10 +2,11 @@ import express, { NextFunction, Request, Response } from "express";
2
2
  import cors from "cors";
3
3
  import { execFile, spawnSync } from "child_process";
4
4
  import { resolve } from "path";
5
- import { accessSync, constants, copyFileSync, existsSync, mkdirSync, readFileSync } from "fs";
5
+ import { accessSync, constants, copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, statSync } from "fs";
6
6
  import { createHash } from "crypto";
7
- import { hostname } from "os";
7
+ import { homedir, hostname } from "os";
8
8
  import { promisify } from "util";
9
+ import defaults from "../../../config/silicaclaw-defaults.json";
9
10
  import {
10
11
  AgentIdentity,
11
12
  DirectoryState,
@@ -27,6 +28,7 @@ import {
27
28
  ingestPresenceRecord,
28
29
  ingestProfileRecord,
29
30
  isAgentOnline,
31
+ rebuildIndexForProfile,
30
32
  loadSocialConfig,
31
33
  getSocialConfigSearchPaths,
32
34
  resolveIdentityWithSocial,
@@ -78,14 +80,23 @@ const NETWORK_MAX_FUTURE_DRIFT_MS = Number(process.env.NETWORK_MAX_FUTURE_DRIFT_
78
80
  const NETWORK_MAX_PAST_DRIFT_MS = Number(process.env.NETWORK_MAX_PAST_DRIFT_MS || 120_000);
79
81
  const NETWORK_HEARTBEAT_INTERVAL_MS = Number(process.env.NETWORK_HEARTBEAT_INTERVAL_MS || 12_000);
80
82
  const NETWORK_PEER_STALE_AFTER_MS = Number(process.env.NETWORK_PEER_STALE_AFTER_MS || 45_000);
83
+ const OPENCLAW_GATEWAY_HOST = "127.0.0.1";
84
+ const DEFAULT_NETWORK_MODE = defaults.network.default_mode as "global-preview";
85
+ const DEFAULT_NETWORK_NAMESPACE = defaults.network.default_namespace;
86
+ const DEFAULT_NETWORK_PORT = defaults.ports.network_default;
87
+ const DEFAULT_GLOBAL_SIGNALING_URL = defaults.network.global_preview.relay_url;
88
+ const DEFAULT_GLOBAL_ROOM = defaults.network.global_preview.room;
89
+ const DEFAULT_BRIDGE_API_BASE = defaults.bridge.api_base;
90
+ const OPENCLAW_GATEWAY_PORT = defaults.ports.openclaw_gateway;
91
+ const OPENCLAW_GATEWAY_URL = `http://${OPENCLAW_GATEWAY_HOST}:${OPENCLAW_GATEWAY_PORT}/`;
81
92
  const NETWORK_PEER_REMOVE_AFTER_MS = Number(process.env.NETWORK_PEER_REMOVE_AFTER_MS || 180_000);
82
93
  const NETWORK_UDP_BIND_ADDRESS = process.env.NETWORK_UDP_BIND_ADDRESS || "0.0.0.0";
83
94
  const NETWORK_UDP_BROADCAST_ADDRESS = process.env.NETWORK_UDP_BROADCAST_ADDRESS || "255.255.255.255";
84
95
  const NETWORK_PEER_ID = process.env.NETWORK_PEER_ID;
85
96
  const NETWORK_MODE = process.env.NETWORK_MODE || "";
86
- const WEBRTC_SIGNALING_URL = process.env.WEBRTC_SIGNALING_URL || "https://relay.silicaclaw.com";
97
+ const WEBRTC_SIGNALING_URL = process.env.WEBRTC_SIGNALING_URL || DEFAULT_GLOBAL_SIGNALING_URL;
87
98
  const WEBRTC_SIGNALING_URLS = process.env.WEBRTC_SIGNALING_URLS || "";
88
- const WEBRTC_ROOM = process.env.WEBRTC_ROOM || "silicaclaw-global-preview";
99
+ const WEBRTC_ROOM = process.env.WEBRTC_ROOM || DEFAULT_GLOBAL_ROOM;
89
100
  const WEBRTC_SEED_PEERS = process.env.WEBRTC_SEED_PEERS || "";
90
101
  const WEBRTC_BOOTSTRAP_HINTS = process.env.WEBRTC_BOOTSTRAP_HINTS || "";
91
102
  const PROFILE_VERSION = "v0.9";
@@ -102,6 +113,8 @@ const SOCIAL_MESSAGE_DUPLICATE_WINDOW_MS = Number(process.env.SOCIAL_MESSAGE_DUP
102
113
  const SOCIAL_MESSAGE_MAX_FUTURE_MS = Number(process.env.SOCIAL_MESSAGE_MAX_FUTURE_MS || 30_000);
103
114
  const SOCIAL_MESSAGE_MAX_AGE_MS = Number(process.env.SOCIAL_MESSAGE_MAX_AGE_MS || 15 * 60_000);
104
115
  const SOCIAL_MESSAGE_OBSERVATION_HISTORY_LIMIT = Number(process.env.SOCIAL_MESSAGE_OBSERVATION_HISTORY_LIMIT || 500);
116
+ const SOCIAL_MESSAGE_REPLAY_WINDOW_MS = Number(process.env.SOCIAL_MESSAGE_REPLAY_WINDOW_MS || 10 * 60_000);
117
+ const SOCIAL_MESSAGE_REPLAY_MAX_PER_BROADCAST = Number(process.env.SOCIAL_MESSAGE_REPLAY_MAX_PER_BROADCAST || 3);
105
118
  const SOCIAL_MESSAGE_BLOCKED_AGENT_IDS = new Set(
106
119
  dedupeStrings(parseListEnv(process.env.SOCIAL_MESSAGE_BLOCKED_AGENT_IDS || ""))
107
120
  );
@@ -112,23 +125,67 @@ const execFileAsync = promisify(execFile);
112
125
  const OPENCLAW_SKILL_NAME = "silicaclaw-broadcast";
113
126
 
114
127
  function readWorkspaceVersion(workspaceRoot: string): string {
115
- const pkgFile = resolve(workspaceRoot, "package.json");
116
- if (existsSync(pkgFile)) {
117
- try {
118
- const pkg = JSON.parse(readFileSync(pkgFile, "utf8")) as { version?: string };
119
- if (pkg.version) return String(pkg.version);
120
- } catch {
121
- // ignore
128
+ const candidates = [
129
+ workspaceRoot,
130
+ process.cwd(),
131
+ resolve(__dirname, "..", "..", ".."),
132
+ resolve(__dirname, "..", "..", "..", ".."),
133
+ ].filter((dir, index, list) => dir && list.indexOf(dir) === index);
134
+ for (const candidate of candidates) {
135
+ const pkgFile = resolve(candidate, "package.json");
136
+ if (existsSync(pkgFile)) {
137
+ try {
138
+ const pkg = JSON.parse(readFileSync(pkgFile, "utf8")) as { version?: string; name?: string };
139
+ if (pkg.version && (pkg.name === "@silicaclaw/cli" || existsSync(resolve(candidate, "apps", "local-console")))) {
140
+ return String(pkg.version);
141
+ }
142
+ } catch {
143
+ // ignore
144
+ }
145
+ }
146
+ const versionFile = resolve(candidate, "VERSION");
147
+ if (existsSync(versionFile)) {
148
+ const raw = readFileSync(versionFile, "utf8").trim();
149
+ if (raw) return raw;
122
150
  }
123
- }
124
- const versionFile = resolve(workspaceRoot, "VERSION");
125
- if (existsSync(versionFile)) {
126
- const raw = readFileSync(versionFile, "utf8").trim();
127
- if (raw) return raw;
128
151
  }
129
152
  return "unknown";
130
153
  }
131
154
 
155
+ function normalizeVersionText(value: unknown): string {
156
+ const text = String(value || "").trim();
157
+ return text.startsWith("v") ? text.slice(1) : text;
158
+ }
159
+
160
+ function tokenizeVersion(value: unknown): Array<number | string> {
161
+ return normalizeVersionText(value)
162
+ .split(/[^0-9A-Za-z]+/)
163
+ .map((token) => token.trim())
164
+ .filter(Boolean)
165
+ .map((token) => (/^\d+$/.test(token) ? Number(token) : token.toLowerCase()));
166
+ }
167
+
168
+ function compareVersionTokens(left: unknown, right: unknown): number {
169
+ const leftTokens = tokenizeVersion(left);
170
+ const rightTokens = tokenizeVersion(right);
171
+ const maxLength = Math.max(leftTokens.length, rightTokens.length);
172
+ for (let index = 0; index < maxLength; index += 1) {
173
+ const leftToken = leftTokens[index];
174
+ const rightToken = rightTokens[index];
175
+ if (leftToken === undefined && rightToken === undefined) return 0;
176
+ if (leftToken === undefined) return -1;
177
+ if (rightToken === undefined) return 1;
178
+ if (typeof leftToken === "number" && typeof rightToken === "number") {
179
+ if (leftToken !== rightToken) return leftToken > rightToken ? 1 : -1;
180
+ continue;
181
+ }
182
+ const leftText = String(leftToken);
183
+ const rightText = String(rightToken);
184
+ if (leftText !== rightText) return leftText.localeCompare(rightText);
185
+ }
186
+ return 0;
187
+ }
188
+
132
189
  function resolveWorkspaceRoot(cwd = process.cwd()): string {
133
190
  if (existsSync(resolve(cwd, "apps", "local-console", "package.json"))) {
134
191
  return cwd;
@@ -140,7 +197,28 @@ function resolveWorkspaceRoot(cwd = process.cwd()): string {
140
197
  return cwd;
141
198
  }
142
199
 
200
+ function resolveProjectRoot(appRoot: string, cwd = process.cwd()): string {
201
+ const envRoot = String(process.env.SILICACLAW_WORKSPACE_DIR || "").trim();
202
+ if (envRoot) {
203
+ return resolve(envRoot);
204
+ }
205
+ if (
206
+ existsSync(resolve(appRoot, "apps", "local-console", "package.json")) &&
207
+ existsSync(resolve(appRoot, "package.json"))
208
+ ) {
209
+ return appRoot;
210
+ }
211
+ if (!existsSync(resolve(cwd, "apps", "local-console", "package.json"))) {
212
+ return resolve(cwd);
213
+ }
214
+ return appRoot;
215
+ }
216
+
143
217
  function resolveStorageRoot(workspaceRoot: string, cwd = process.cwd()): string {
218
+ const home = process.env.HOME || homedir();
219
+ if (home) {
220
+ return resolve(home, ".silicaclaw", "local-console");
221
+ }
144
222
  const appRoot = resolve(workspaceRoot, "apps", "local-console");
145
223
  if (existsSync(resolve(appRoot, "package.json"))) {
146
224
  return appRoot;
@@ -148,6 +226,13 @@ function resolveStorageRoot(workspaceRoot: string, cwd = process.cwd()): string
148
226
  return cwd;
149
227
  }
150
228
 
229
+ function defaultOpenClawSourceDir(rootDir: string): string {
230
+ if (existsSync(resolve(rootDir, "openclaw.mjs")) || existsSync(resolve(rootDir, "package.json"))) {
231
+ return rootDir;
232
+ }
233
+ return resolve(rootDir, "..", "openclaw");
234
+ }
235
+
151
236
  function resolveExecutableInPath(binName: string): string | null {
152
237
  const pathValue = String(process.env.PATH || "").trim();
153
238
  if (!pathValue) return null;
@@ -169,6 +254,91 @@ function existingPathOrNull(filePath: string): string | null {
169
254
  return existsSync(filePath) ? filePath : null;
170
255
  }
171
256
 
257
+ function listDirectories(root: string) {
258
+ if (!root || !existsSync(root)) return [];
259
+ try {
260
+ return readdirSync(root)
261
+ .map((name) => {
262
+ const fullPath = resolve(root, name);
263
+ try {
264
+ return statSync(fullPath).isDirectory() ? { name, path: fullPath } : null;
265
+ } catch {
266
+ return null;
267
+ }
268
+ })
269
+ .filter((item): item is { name: string; path: string } => Boolean(item));
270
+ } catch {
271
+ return [];
272
+ }
273
+ }
274
+
275
+ function readJsonFileSafe(filePath: string) {
276
+ try {
277
+ return JSON.parse(readFileSync(filePath, "utf8")) as Record<string, unknown>;
278
+ } catch {
279
+ return null;
280
+ }
281
+ }
282
+
283
+ function summarizeSkillReadme(filePath: string) {
284
+ if (!filePath || !existsSync(filePath)) return "";
285
+ try {
286
+ const raw = readFileSync(filePath, "utf8");
287
+ const lines = raw
288
+ .split(/\r?\n/)
289
+ .map((line) => line.trim())
290
+ .filter(Boolean)
291
+ .filter((line) => !line.startsWith("#"));
292
+ return String(lines[0] || "").slice(0, 220);
293
+ } catch {
294
+ return "";
295
+ }
296
+ }
297
+
298
+ function readDialogueCheatsheetPreview(filePath: string, limit = 6) {
299
+ if (!filePath || !existsSync(filePath)) return [];
300
+ try {
301
+ return readFileSync(filePath, "utf8")
302
+ .split(/\r?\n/)
303
+ .map((line) => line.trim())
304
+ .filter((line) => line.startsWith("- "))
305
+ .map((line) => line.slice(2).trim())
306
+ .filter(Boolean)
307
+ .slice(0, limit);
308
+ } catch {
309
+ return [];
310
+ }
311
+ }
312
+
313
+ function readDialogueCheatsheetSections(filePath: string, maxSections = 3, maxItemsPerSection = 5) {
314
+ if (!filePath || !existsSync(filePath)) return [];
315
+ try {
316
+ const lines = readFileSync(filePath, "utf8").split(/\r?\n/);
317
+ const sections: Array<{ title: string; items: string[] }> = [];
318
+ let current: { title: string; items: string[] } | null = null;
319
+ for (const rawLine of lines) {
320
+ const line = rawLine.trim();
321
+ if (line.startsWith("## ")) {
322
+ if (current && current.items.length) sections.push(current);
323
+ current = { title: line.slice(3).trim(), items: [] };
324
+ continue;
325
+ }
326
+ if (line.startsWith("- ")) {
327
+ if (!current) {
328
+ current = { title: "Examples", items: [] };
329
+ }
330
+ if (current.items.length < maxItemsPerSection) {
331
+ current.items.push(line.slice(2).trim());
332
+ }
333
+ }
334
+ }
335
+ if (current && current.items.length) sections.push(current);
336
+ return sections.slice(0, maxSections);
337
+ } catch {
338
+ return [];
339
+ }
340
+ }
341
+
172
342
  function detectOpenClawInstallation(workspaceRoot: string) {
173
343
  const workspaceDir = resolve(workspaceRoot, ".openclaw");
174
344
  const homeDir = resolve(process.env.HOME || "", ".openclaw");
@@ -219,7 +389,52 @@ function detectOpenClawInstallation(workspaceRoot: string) {
219
389
  } as const;
220
390
  }
221
391
 
222
- function detectOpenClawRuntime() {
392
+ function readOpenClawConfiguredGateway(workspaceRoot: string) {
393
+ const configuredSourceDir = String(process.env.OPENCLAW_SOURCE_DIR || "").trim();
394
+ const defaultSourceDir = defaultOpenClawSourceDir(workspaceRoot);
395
+ const sourceDir = configuredSourceDir || defaultSourceDir;
396
+ const homeDir = resolve(process.env.HOME || "", ".openclaw");
397
+ const explicitConfigPath = String(process.env.OPENCLAW_CONFIG_PATH || "").trim();
398
+ const explicitStateDir = String(process.env.OPENCLAW_STATE_DIR || "").trim();
399
+ const candidates = dedupeStrings([
400
+ explicitConfigPath,
401
+ explicitStateDir ? resolve(explicitStateDir, "openclaw.json") : "",
402
+ resolve(homeDir, "openclaw.json"),
403
+ resolve(homeDir, "clawdbot.json"),
404
+ resolve(sourceDir, ".openclaw", "openclaw.json"),
405
+ ]);
406
+
407
+ for (const candidate of candidates) {
408
+ if (!candidate || !existsSync(candidate)) continue;
409
+ try {
410
+ const raw = readFileSync(candidate, "utf8");
411
+ const portMatch = raw.match(/["']?port["']?\s*:\s*(\d{2,5})/);
412
+ const bindMatch = raw.match(/["']?bind["']?\s*:\s*["']([^"']+)["']/);
413
+ const port = portMatch ? Number(portMatch[1]) : OPENCLAW_GATEWAY_PORT;
414
+ if (!Number.isFinite(port) || port <= 0) continue;
415
+ return {
416
+ config_path: candidate,
417
+ gateway_port: port,
418
+ gateway_host: OPENCLAW_GATEWAY_HOST,
419
+ gateway_bind: bindMatch?.[1] || null,
420
+ gateway_url: `http://${OPENCLAW_GATEWAY_HOST}:${port}/`,
421
+ } as const;
422
+ } catch {
423
+ continue;
424
+ }
425
+ }
426
+
427
+ return {
428
+ config_path: null,
429
+ gateway_port: OPENCLAW_GATEWAY_PORT,
430
+ gateway_host: OPENCLAW_GATEWAY_HOST,
431
+ gateway_bind: null,
432
+ gateway_url: OPENCLAW_GATEWAY_URL,
433
+ } as const;
434
+ }
435
+
436
+ function detectOpenClawRuntime(workspaceRoot: string) {
437
+ const configuredGateway = readOpenClawConfiguredGateway(workspaceRoot);
223
438
  const result = spawnSync("ps", ["-Ao", "pid=,ppid=,command="], {
224
439
  encoding: "utf8",
225
440
  });
@@ -252,11 +467,84 @@ function detectOpenClawRuntime() {
252
467
  })
253
468
  .filter((item): item is { pid: number; ppid: number; command: string } => Boolean(item));
254
469
 
470
+ const openclawPids = new Set(processes.map((item) => item.pid));
471
+ const gatewayProbe = spawnSync("lsof", ["-nP", "-iTCP", "-sTCP:LISTEN"], {
472
+ encoding: "utf8",
473
+ });
474
+ const gatewayLines = String(gatewayProbe.stdout || "")
475
+ .split("\n")
476
+ .map((line) => line.trim())
477
+ .filter(Boolean);
478
+ const gatewayListeners = gatewayLines
479
+ .slice(1)
480
+ .map((line) => {
481
+ const parts = line.split(/\s+/);
482
+ const pid = Number(parts[1] || 0);
483
+ const command = parts[0] || "";
484
+ const lowerCommand = command.toLowerCase();
485
+ const endpoint = parts[8] || parts[parts.length - 1] || "";
486
+ const portMatch = endpoint.match(/:(\d+)(?:\s*\(|$)/);
487
+ if (!pid || !command || !portMatch) return null;
488
+ const isOpenClawListener =
489
+ openclawPids.has(pid) ||
490
+ lowerCommand.includes("openclaw");
491
+ if (!isOpenClawListener) return null;
492
+ const port = Number(portMatch[1]);
493
+ if (!Number.isFinite(port) || port <= 0) return null;
494
+ return {
495
+ pid,
496
+ ppid: 0,
497
+ port,
498
+ command: `${command} listening on ${OPENCLAW_GATEWAY_HOST}:${port}`,
499
+ };
500
+ })
501
+ .filter((item): item is { pid: number; ppid: number; port: number; command: string } => Boolean(item));
502
+ const preferredListener =
503
+ gatewayListeners.find((item) => item.port === configuredGateway.gateway_port) ||
504
+ gatewayListeners[0] ||
505
+ null;
506
+
507
+ const combinedProcesses = new Map<number, { pid: number; ppid: number; command: string }>();
508
+ for (const process of [...processes, ...gatewayListeners]) {
509
+ if (!combinedProcesses.has(process.pid)) {
510
+ combinedProcesses.set(process.pid, process);
511
+ continue;
512
+ }
513
+ const current = combinedProcesses.get(process.pid);
514
+ if (current && current.command.length < process.command.length) {
515
+ combinedProcesses.set(process.pid, process);
516
+ }
517
+ }
518
+ const allProcesses = Array.from(combinedProcesses.values());
519
+ const gatewayReachable = gatewayListeners.length > 0;
520
+ const detectionNotes = [];
521
+ if (result.status !== 0) detectionNotes.push(String(result.stderr || "ps failed").trim());
522
+ if (gatewayProbe.status !== 0 && gatewayLines.length === 0) {
523
+ detectionNotes.push(String(gatewayProbe.stderr || "lsof failed").trim());
524
+ }
525
+ const gatewayPort = preferredListener?.port || configuredGateway.gateway_port;
526
+ const gatewayUrl = `http://${OPENCLAW_GATEWAY_HOST}:${gatewayPort}/`;
527
+
255
528
  return {
256
- running: processes.length > 0,
257
- process_count: processes.length,
258
- processes: processes.slice(0, 10),
259
- detection_error: result.status === 0 ? null : String(result.stderr || "ps failed"),
529
+ running: allProcesses.length > 0 || gatewayReachable,
530
+ process_count: allProcesses.length,
531
+ processes: allProcesses.slice(0, 10),
532
+ detection_error: detectionNotes.filter(Boolean).join(" | ") || null,
533
+ gateway_url: gatewayUrl,
534
+ gateway_port: gatewayPort,
535
+ gateway_reachable: gatewayReachable,
536
+ configured_gateway_url: configuredGateway.gateway_url,
537
+ configured_gateway_port: configuredGateway.gateway_port,
538
+ configured_gateway_bind: configuredGateway.gateway_bind,
539
+ configured_gateway_config_path: configuredGateway.config_path,
540
+ detection_mode:
541
+ processes.length > 0 && gatewayReachable
542
+ ? "process+gateway"
543
+ : gatewayReachable
544
+ ? "gateway"
545
+ : processes.length > 0
546
+ ? "process"
547
+ : "not_running",
260
548
  } as const;
261
549
  }
262
550
 
@@ -291,7 +579,7 @@ function detectOwnerDeliveryStatus(params: {
291
579
  const ownerAccount = String(process.env.OPENCLAW_OWNER_ACCOUNT || "").trim();
292
580
  const explicitOpenClawBin = String(process.env.OPENCLAW_BIN || "").trim();
293
581
  const configuredSourceDir = String(process.env.OPENCLAW_SOURCE_DIR || "").trim();
294
- const defaultSourceDir = resolve(params.workspaceRoot, "..", "openclaw");
582
+ const defaultSourceDir = defaultOpenClawSourceDir(params.workspaceRoot);
295
583
  const openclawSourceDir = configuredSourceDir || defaultSourceDir;
296
584
  const openclawSourceEntry = existingPathOrNull(resolve(openclawSourceDir, "openclaw.mjs"));
297
585
  const openclawCommandResolvable = Boolean(explicitOpenClawBin || resolveExecutableInPath("openclaw") || openclawSourceEntry);
@@ -350,10 +638,18 @@ function hasMeaningfulJson(filePath: string): boolean {
350
638
  }
351
639
  }
352
640
 
353
- function migrateLegacyDataIfNeeded(workspaceRoot: string, storageRoot: string): void {
354
- const legacyDataDir = resolve(workspaceRoot, "data");
641
+ function migrateLegacyDataIfNeeded(appRoot: string, projectRoot: string, storageRoot: string): void {
642
+ const homeDir = process.env.HOME || homedir();
643
+ const legacyNpxAppRoots = collectLegacyNpxAppRoots(homeDir);
355
644
  const targetDataDir = resolve(storageRoot, "data");
356
- if (legacyDataDir === targetDataDir) return;
645
+ const legacyDataDirs = [
646
+ resolve(appRoot, "data"),
647
+ resolve(appRoot, "apps", "local-console", "data"),
648
+ resolve(projectRoot, "data"),
649
+ resolve(projectRoot, "apps", "local-console", "data"),
650
+ resolve(process.cwd(), "data"),
651
+ ...legacyNpxAppRoots.map((root) => resolve(root, "apps", "local-console", "data")),
652
+ ].filter((dir, index, list) => list.indexOf(dir) === index && dir !== targetDataDir);
357
653
  const files = [
358
654
  "identity.json",
359
655
  "profile.json",
@@ -363,14 +659,63 @@ function migrateLegacyDataIfNeeded(workspaceRoot: string, storageRoot: string):
363
659
  "social-message-observations.json",
364
660
  ];
365
661
  for (const file of files) {
366
- const src = resolve(legacyDataDir, file);
367
662
  const dst = resolve(targetDataDir, file);
368
- if (!existsSync(src)) continue;
369
663
  if (hasMeaningfulJson(dst)) continue;
370
- if (!hasMeaningfulJson(src)) continue;
371
- mkdirSync(targetDataDir, { recursive: true });
372
- copyFileSync(src, dst);
664
+ for (const legacyDataDir of legacyDataDirs) {
665
+ const src = resolve(legacyDataDir, file);
666
+ if (!existsSync(src)) continue;
667
+ if (!hasMeaningfulJson(src)) continue;
668
+ mkdirSync(targetDataDir, { recursive: true });
669
+ copyFileSync(src, dst);
670
+ break;
671
+ }
672
+ }
673
+
674
+ const targetDotDir = resolve(storageRoot, ".silicaclaw");
675
+ const legacyDotDirs = [
676
+ resolve(appRoot, ".silicaclaw"),
677
+ resolve(appRoot, "apps", "local-console", ".silicaclaw"),
678
+ resolve(projectRoot, ".silicaclaw"),
679
+ resolve(projectRoot, "apps", "local-console", ".silicaclaw"),
680
+ resolve(process.cwd(), ".silicaclaw"),
681
+ ...legacyNpxAppRoots.map((root) => resolve(root, "apps", "local-console", ".silicaclaw")),
682
+ ].filter((dir, index, list) => list.indexOf(dir) === index && dir !== targetDotDir);
683
+ const dotFiles = ["social.runtime.json", "social.message-governance.json"];
684
+ for (const file of dotFiles) {
685
+ const dst = resolve(targetDotDir, file);
686
+ if (hasMeaningfulJson(dst)) continue;
687
+ for (const legacyDotDir of legacyDotDirs) {
688
+ const src = resolve(legacyDotDir, file);
689
+ if (!existsSync(src)) continue;
690
+ if (!hasMeaningfulJson(src)) continue;
691
+ mkdirSync(targetDotDir, { recursive: true });
692
+ copyFileSync(src, dst);
693
+ break;
694
+ }
695
+ }
696
+ }
697
+
698
+ function collectLegacyNpxAppRoots(homeDir: string): string[] {
699
+ const cacheRoots = [
700
+ resolve(homeDir, ".silicaclaw", "npm-cache", "_npx"),
701
+ resolve(homeDir, ".npm", "_npx"),
702
+ ];
703
+ const roots: string[] = [];
704
+ for (const cacheRoot of cacheRoots) {
705
+ if (!existsSync(cacheRoot)) continue;
706
+ let entries: string[] = [];
707
+ try {
708
+ entries = readdirSync(cacheRoot);
709
+ } catch {
710
+ continue;
711
+ }
712
+ for (const entry of entries) {
713
+ const candidate = resolve(cacheRoot, entry, "node_modules", "@silicaclaw", "cli");
714
+ if (!existsSync(resolve(candidate, "apps", "local-console"))) continue;
715
+ roots.push(candidate);
716
+ }
373
717
  }
718
+ return Array.from(new Set(roots));
374
719
  }
375
720
 
376
721
  function parseListEnv(raw: string): string[] {
@@ -462,6 +807,14 @@ type OpenClawBridgeStatus = {
462
807
  command: string;
463
808
  }>;
464
809
  detection_error: string | null;
810
+ gateway_url: string;
811
+ gateway_port: number;
812
+ gateway_reachable: boolean;
813
+ configured_gateway_url: string;
814
+ configured_gateway_port: number;
815
+ configured_gateway_bind: string | null;
816
+ configured_gateway_config_path: string | null;
817
+ detection_mode: "process" | "gateway" | "process+gateway" | "not_running";
465
818
  };
466
819
  skill_learning: {
467
820
  available: boolean;
@@ -507,6 +860,10 @@ type OpenClawBridgeConfigView = {
507
860
  bridge_api_base: string;
508
861
  openclaw_detected: boolean;
509
862
  openclaw_running: boolean;
863
+ openclaw_gateway_host: string;
864
+ openclaw_gateway_port: number;
865
+ openclaw_gateway_url: string;
866
+ openclaw_gateway_config_path: string | null;
510
867
  openclaw_workspace_skill_dir: string;
511
868
  openclaw_legacy_skill_dir: string;
512
869
  silicaclaw_env_template_path: string;
@@ -525,6 +882,7 @@ type OpenClawBridgeConfigView = {
525
882
 
526
883
  export class LocalNodeService {
527
884
  private workspaceRoot: string;
885
+ private projectRoot: string;
528
886
  private storageRoot: string;
529
887
  private identityRepo: IdentityRepo;
530
888
  private profileRepo: ProfileRepo;
@@ -567,7 +925,7 @@ export class LocalNodeService {
567
925
 
568
926
  private network: NetworkAdapter;
569
927
  private adapterMode: "mock" | "local-event-bus" | "real-preview" | "webrtc-preview" | "relay-preview";
570
- private networkMode: "local" | "lan" | "global-preview" = "global-preview";
928
+ private networkMode: "local" | "lan" | "global-preview" = DEFAULT_NETWORK_MODE;
571
929
  private networkNamespace: string;
572
930
  private networkPort: number | null;
573
931
  private socialConfig: SocialConfig;
@@ -581,17 +939,18 @@ export class LocalNodeService {
581
939
  "silicaclaw-existing";
582
940
  private resolvedOpenClawIdentityPath: string | null = null;
583
941
  private webrtcSignalingUrls: string[] = [];
584
- private webrtcRoom = "silicaclaw-global-preview";
942
+ private webrtcRoom = DEFAULT_GLOBAL_ROOM;
585
943
  private webrtcSeedPeers: string[] = [];
586
944
  private webrtcBootstrapHints: string[] = [];
587
945
  private webrtcBootstrapSources: string[] = [];
588
946
  private appVersion = "unknown";
589
947
 
590
- constructor(options?: { workspaceRoot?: string; storageRoot?: string }) {
948
+ constructor(options?: { workspaceRoot?: string; projectRoot?: string; storageRoot?: string }) {
591
949
  this.workspaceRoot = options?.workspaceRoot || resolveWorkspaceRoot();
950
+ this.projectRoot = options?.projectRoot || resolveProjectRoot(this.workspaceRoot);
592
951
  this.storageRoot = options?.storageRoot || resolveStorageRoot(this.workspaceRoot);
593
952
  this.appVersion = readWorkspaceVersion(this.workspaceRoot);
594
- migrateLegacyDataIfNeeded(this.workspaceRoot, this.storageRoot);
953
+ migrateLegacyDataIfNeeded(this.workspaceRoot, this.projectRoot, this.storageRoot);
595
954
 
596
955
  this.identityRepo = new IdentityRepo(this.storageRoot);
597
956
  this.profileRepo = new ProfileRepo(this.storageRoot);
@@ -603,16 +962,16 @@ export class LocalNodeService {
603
962
  this.socialRuntimeRepo = new SocialRuntimeRepo(this.storageRoot);
604
963
  this.messageGovernance = this.defaultMessageGovernance();
605
964
 
606
- let loadedSocial = loadSocialConfig(this.workspaceRoot);
965
+ let loadedSocial = loadSocialConfig(this.projectRoot);
607
966
  if (!loadedSocial.meta.found) {
608
- ensureDefaultSocialMd(this.workspaceRoot, {
967
+ ensureDefaultSocialMd(this.projectRoot, {
609
968
  display_name: this.getDefaultDisplayName(),
610
969
  bio: "Local AI agent connected to SilicaClaw",
611
970
  tags: ["openclaw", "local-first"],
612
- mode: "global-preview",
971
+ mode: DEFAULT_NETWORK_MODE,
613
972
  public_enabled: false,
614
973
  });
615
- loadedSocial = loadSocialConfig(this.workspaceRoot);
974
+ loadedSocial = loadSocialConfig(this.projectRoot);
616
975
  this.initState.social_auto_created = true;
617
976
  }
618
977
  this.socialConfig = loadedSocial.config;
@@ -621,8 +980,8 @@ export class LocalNodeService {
621
980
  this.socialParseError = loadedSocial.meta.parse_error;
622
981
  this.socialRawFrontmatter = loadedSocial.raw_frontmatter;
623
982
 
624
- this.networkNamespace = this.socialConfig.network.namespace || process.env.NETWORK_NAMESPACE || "silicaclaw.preview";
625
- this.networkPort = Number(this.socialConfig.network.port || process.env.NETWORK_PORT || 44123);
983
+ this.networkNamespace = this.socialConfig.network.namespace || process.env.NETWORK_NAMESPACE || DEFAULT_NETWORK_NAMESPACE;
984
+ this.networkPort = Number(this.socialConfig.network.port || process.env.NETWORK_PORT || DEFAULT_NETWORK_PORT);
626
985
  this.applyResolvedNetworkConfig();
627
986
  const resolved = this.buildNetworkAdapter();
628
987
  this.network = resolved.adapter;
@@ -674,12 +1033,8 @@ export class LocalNodeService {
674
1033
  }
675
1034
 
676
1035
  getOverview() {
677
- this.ensureLocalDirectoryBaseline();
678
- this.compactCacheInMemory();
679
- const profiles = Object.values(this.directory.profiles);
680
- const onlineCount = profiles.filter((profile) =>
681
- isAgentOnline(this.directory.presence[profile.agent_id], Date.now(), PRESENCE_TTL_MS)
682
- ).length;
1036
+ const discovered = this.search("");
1037
+ const onlineCount = discovered.filter((profile) => profile.online).length;
683
1038
 
684
1039
  return {
685
1040
  app_version: this.appVersion,
@@ -690,9 +1045,9 @@ export class LocalNodeService {
690
1045
  last_broadcast_error_at: this.lastBroadcastErrorAt,
691
1046
  last_broadcast_error: this.lastBroadcastError,
692
1047
  broadcast_failure_count: this.broadcastFailureCount,
693
- discovered_count: profiles.length,
1048
+ discovered_count: discovered.length,
694
1049
  online_count: onlineCount,
695
- offline_count: Math.max(0, profiles.length - onlineCount),
1050
+ offline_count: Math.max(0, discovered.length - onlineCount),
696
1051
  init_state: this.initState,
697
1052
  presence_ttl_ms: PRESENCE_TTL_MS,
698
1053
  onboarding: this.getOnboardingSummary(),
@@ -714,7 +1069,9 @@ export class LocalNodeService {
714
1069
  }
715
1070
 
716
1071
  getNetworkSummary() {
717
- const diagnostics = this.getAdapterDiagnostics();
1072
+ const network = this.getResolvedRealtimeNetworkSummary();
1073
+ const diagnostics = network.diagnostics;
1074
+ const relayCapable = this.adapterMode === "webrtc-preview" || this.adapterMode === "relay-preview";
718
1075
  const peerCount = diagnostics?.peers.total ?? 0;
719
1076
 
720
1077
  return {
@@ -742,30 +1099,32 @@ export class LocalNodeService {
742
1099
  real_preview_stats: diagnostics?.stats ?? null,
743
1100
  real_preview_transport_stats: diagnostics?.transport_stats ?? null,
744
1101
  real_preview_discovery_stats: diagnostics?.discovery_stats ?? null,
745
- webrtc_preview: diagnostics && (diagnostics.adapter === "webrtc-preview" || diagnostics.adapter === "relay-preview")
1102
+ webrtc_preview: relayCapable
746
1103
  ? {
747
- signaling_url: diagnostics.signaling_url ?? null,
748
- signaling_endpoints: diagnostics.signaling_endpoints ?? [],
749
- room: diagnostics.room ?? null,
750
- bootstrap_sources: diagnostics.bootstrap_sources ?? [],
751
- seed_peers_count: diagnostics.seed_peers_count ?? 0,
752
- discovery_events_total: diagnostics.discovery_events_total ?? 0,
753
- last_discovery_event_at: diagnostics.last_discovery_event_at ?? 0,
754
- active_webrtc_peers: diagnostics.active_webrtc_peers ?? 0,
755
- reconnect_attempts_total: diagnostics.reconnect_attempts_total ?? 0,
756
- last_join_at: diagnostics.last_join_at ?? 0,
757
- last_poll_at: diagnostics.last_poll_at ?? 0,
758
- last_publish_at: diagnostics.last_publish_at ?? 0,
759
- last_peer_refresh_at: diagnostics.last_peer_refresh_at ?? 0,
760
- last_error_at: diagnostics.last_error_at ?? 0,
761
- last_error: diagnostics.last_error ?? null,
1104
+ signaling_url: network.signaling_url,
1105
+ signaling_endpoints: network.signaling_endpoints,
1106
+ room: network.room,
1107
+ bootstrap_sources: network.bootstrap_sources,
1108
+ seed_peers_count: network.seed_peers_count,
1109
+ discovery_events_total: diagnostics?.discovery_events_total ?? 0,
1110
+ last_discovery_event_at: diagnostics?.last_discovery_event_at ?? 0,
1111
+ active_webrtc_peers: diagnostics?.active_webrtc_peers ?? 0,
1112
+ reconnect_attempts_total: diagnostics?.reconnect_attempts_total ?? 0,
1113
+ last_join_at: diagnostics?.last_join_at ?? 0,
1114
+ last_poll_at: diagnostics?.last_poll_at ?? 0,
1115
+ last_publish_at: diagnostics?.last_publish_at ?? 0,
1116
+ last_peer_refresh_at: diagnostics?.last_peer_refresh_at ?? 0,
1117
+ last_error_at: diagnostics?.last_error_at ?? 0,
1118
+ last_error: diagnostics?.last_error ?? null,
762
1119
  }
763
1120
  : null,
764
1121
  };
765
1122
  }
766
1123
 
767
1124
  getNetworkConfig() {
768
- const diagnostics = this.getAdapterDiagnostics();
1125
+ const network = this.getResolvedRealtimeNetworkSummary();
1126
+ const diagnostics = network.diagnostics;
1127
+ const relayCapable = this.adapterMode === "webrtc-preview" || this.adapterMode === "relay-preview";
769
1128
  return {
770
1129
  adapter: this.adapterMode,
771
1130
  mode: this.networkMode,
@@ -779,23 +1138,23 @@ export class LocalNodeService {
779
1138
  },
780
1139
  limits: diagnostics?.limits ?? null,
781
1140
  adapter_config: diagnostics?.config ?? null,
782
- adapter_extra: diagnostics && (diagnostics.adapter === "webrtc-preview" || diagnostics.adapter === "relay-preview")
1141
+ adapter_extra: relayCapable
783
1142
  ? {
784
- signaling_url: diagnostics.signaling_url ?? null,
785
- signaling_endpoints: diagnostics.signaling_endpoints ?? [],
786
- room: diagnostics.room ?? null,
787
- bootstrap_sources: diagnostics.bootstrap_sources ?? [],
788
- seed_peers_count: diagnostics.seed_peers_count ?? 0,
789
- discovery_events_total: diagnostics.discovery_events_total ?? 0,
790
- last_discovery_event_at: diagnostics.last_discovery_event_at ?? 0,
791
- connection_states_summary: diagnostics.connection_states_summary ?? null,
792
- datachannel_states_summary: diagnostics.datachannel_states_summary ?? null,
793
- last_join_at: diagnostics.last_join_at ?? 0,
794
- last_poll_at: diagnostics.last_poll_at ?? 0,
795
- last_publish_at: diagnostics.last_publish_at ?? 0,
796
- last_peer_refresh_at: diagnostics.last_peer_refresh_at ?? 0,
797
- last_error_at: diagnostics.last_error_at ?? 0,
798
- last_error: diagnostics.last_error ?? null,
1143
+ signaling_url: network.signaling_url,
1144
+ signaling_endpoints: network.signaling_endpoints,
1145
+ room: network.room,
1146
+ bootstrap_sources: network.bootstrap_sources,
1147
+ seed_peers_count: network.seed_peers_count,
1148
+ discovery_events_total: diagnostics?.discovery_events_total ?? 0,
1149
+ last_discovery_event_at: diagnostics?.last_discovery_event_at ?? 0,
1150
+ connection_states_summary: diagnostics?.connection_states_summary ?? null,
1151
+ datachannel_states_summary: diagnostics?.datachannel_states_summary ?? null,
1152
+ last_join_at: diagnostics?.last_join_at ?? 0,
1153
+ last_poll_at: diagnostics?.last_poll_at ?? 0,
1154
+ last_publish_at: diagnostics?.last_publish_at ?? 0,
1155
+ last_peer_refresh_at: diagnostics?.last_peer_refresh_at ?? 0,
1156
+ last_error_at: diagnostics?.last_error_at ?? 0,
1157
+ last_error: diagnostics?.last_error ?? null,
799
1158
  }
800
1159
  : null,
801
1160
  env: {
@@ -830,7 +1189,9 @@ export class LocalNodeService {
830
1189
  }
831
1190
 
832
1191
  getNetworkStats() {
833
- const diagnostics = this.getAdapterDiagnostics();
1192
+ const network = this.getResolvedRealtimeNetworkSummary();
1193
+ const diagnostics = network.diagnostics;
1194
+ const relayCapable = this.adapterMode === "webrtc-preview" || this.adapterMode === "relay-preview";
834
1195
  const peers: Array<{ status?: string }> = diagnostics?.peers?.items ?? [];
835
1196
  const online = peers.filter((peer: { status?: string }) => peer.status === "online").length;
836
1197
 
@@ -857,34 +1218,35 @@ export class LocalNodeService {
857
1218
  adapter_stats: diagnostics?.stats ?? null,
858
1219
  adapter_transport_stats: diagnostics?.transport_stats ?? null,
859
1220
  adapter_discovery_stats: diagnostics?.discovery_stats ?? null,
860
- adapter_diagnostics_summary: diagnostics
1221
+ adapter_diagnostics_summary: relayCapable || diagnostics
861
1222
  ? {
862
- signaling_url: diagnostics.signaling_url ?? null,
863
- signaling_endpoints: diagnostics.signaling_endpoints ?? [],
864
- room: diagnostics.room ?? null,
865
- bootstrap_sources: diagnostics.bootstrap_sources ?? [],
866
- seed_peers_count: diagnostics.seed_peers_count ?? 0,
867
- discovery_events_total: diagnostics.discovery_events_total ?? 0,
868
- last_discovery_event_at: diagnostics.last_discovery_event_at ?? 0,
869
- connection_states_summary: diagnostics.connection_states_summary ?? null,
870
- datachannel_states_summary: diagnostics.datachannel_states_summary ?? null,
871
- signaling_messages_sent_total: diagnostics.signaling_messages_sent_total ?? null,
872
- signaling_messages_received_total: diagnostics.signaling_messages_received_total ?? null,
873
- reconnect_attempts_total: diagnostics.reconnect_attempts_total ?? null,
874
- active_webrtc_peers: diagnostics.active_webrtc_peers ?? null,
875
- last_join_at: diagnostics.last_join_at ?? 0,
876
- last_poll_at: diagnostics.last_poll_at ?? 0,
877
- last_publish_at: diagnostics.last_publish_at ?? 0,
878
- last_peer_refresh_at: diagnostics.last_peer_refresh_at ?? 0,
879
- last_error_at: diagnostics.last_error_at ?? 0,
880
- last_error: diagnostics.last_error ?? null,
1223
+ signaling_url: network.signaling_url,
1224
+ signaling_endpoints: network.signaling_endpoints,
1225
+ room: network.room,
1226
+ bootstrap_sources: network.bootstrap_sources,
1227
+ seed_peers_count: network.seed_peers_count,
1228
+ discovery_events_total: diagnostics?.discovery_events_total ?? 0,
1229
+ last_discovery_event_at: diagnostics?.last_discovery_event_at ?? 0,
1230
+ connection_states_summary: diagnostics?.connection_states_summary ?? null,
1231
+ datachannel_states_summary: diagnostics?.datachannel_states_summary ?? null,
1232
+ signaling_messages_sent_total: diagnostics?.signaling_messages_sent_total ?? null,
1233
+ signaling_messages_received_total: diagnostics?.signaling_messages_received_total ?? null,
1234
+ reconnect_attempts_total: diagnostics?.reconnect_attempts_total ?? null,
1235
+ active_webrtc_peers: diagnostics?.active_webrtc_peers ?? null,
1236
+ last_join_at: diagnostics?.last_join_at ?? 0,
1237
+ last_poll_at: diagnostics?.last_poll_at ?? 0,
1238
+ last_publish_at: diagnostics?.last_publish_at ?? 0,
1239
+ last_peer_refresh_at: diagnostics?.last_peer_refresh_at ?? 0,
1240
+ last_error_at: diagnostics?.last_error_at ?? 0,
1241
+ last_error: diagnostics?.last_error ?? null,
881
1242
  }
882
1243
  : null,
883
1244
  };
884
1245
  }
885
1246
 
886
1247
  getPeersSummary() {
887
- const diagnostics = this.getAdapterDiagnostics();
1248
+ const network = this.getResolvedRealtimeNetworkSummary();
1249
+ const diagnostics = network.diagnostics;
888
1250
  if (!diagnostics) {
889
1251
  return {
890
1252
  adapter: this.adapterMode,
@@ -907,11 +1269,11 @@ export class LocalNodeService {
907
1269
  components: diagnostics.components,
908
1270
  limits: diagnostics.limits,
909
1271
  diagnostics_summary: {
910
- signaling_url: diagnostics.signaling_url ?? null,
911
- signaling_endpoints: diagnostics.signaling_endpoints ?? [],
912
- room: diagnostics.room ?? null,
913
- bootstrap_sources: diagnostics.bootstrap_sources ?? [],
914
- seed_peers_count: diagnostics.seed_peers_count ?? 0,
1272
+ signaling_url: network.signaling_url,
1273
+ signaling_endpoints: network.signaling_endpoints,
1274
+ room: network.room,
1275
+ bootstrap_sources: network.bootstrap_sources,
1276
+ seed_peers_count: network.seed_peers_count,
915
1277
  discovery_events_total: diagnostics.discovery_events_total ?? 0,
916
1278
  last_discovery_event_at: diagnostics.last_discovery_event_at ?? 0,
917
1279
  connection_states_summary: diagnostics.connection_states_summary ?? null,
@@ -958,11 +1320,12 @@ export class LocalNodeService {
958
1320
  getRuntimePaths() {
959
1321
  return {
960
1322
  workspace_root: this.workspaceRoot,
1323
+ project_root: this.projectRoot,
961
1324
  storage_root: this.storageRoot,
962
1325
  data_dir: resolve(this.storageRoot, "data"),
963
1326
  social_runtime_path: resolve(this.storageRoot, ".silicaclaw", "social.runtime.json"),
964
1327
  local_console_public_dir: resolve(this.workspaceRoot, "apps", "local-console", "public"),
965
- social_lookup_paths: getSocialConfigSearchPaths(this.workspaceRoot),
1328
+ social_lookup_paths: getSocialConfigSearchPaths(this.projectRoot),
966
1329
  social_source_path: this.socialSourcePath,
967
1330
  };
968
1331
  }
@@ -1070,20 +1433,36 @@ export class LocalNodeService {
1070
1433
  }
1071
1434
 
1072
1435
  async setNetworkModeRuntime(mode: "local" | "lan" | "global-preview") {
1073
- const currentMode = this.networkMode;
1436
+ const before = {
1437
+ mode: this.networkMode,
1438
+ adapter: this.adapterMode,
1439
+ namespace: this.networkNamespace,
1440
+ port: this.networkPort,
1441
+ };
1074
1442
  if (mode !== "local" && mode !== "lan" && mode !== "global-preview") {
1075
1443
  throw new Error("invalid_network_mode");
1076
1444
  }
1077
1445
  this.socialConfig.network.mode = mode;
1078
1446
  this.socialConfig.network.adapter = this.adapterForMode(mode);
1079
1447
  this.applyResolvedNetworkConfig();
1080
- this.socialNetworkRequiresRestart = currentMode !== mode || this.adapterMode !== this.socialConfig.network.adapter;
1448
+
1449
+ const needsRestart =
1450
+ before.mode !== this.networkMode ||
1451
+ before.adapter !== this.socialConfig.network.adapter ||
1452
+ before.namespace !== this.networkNamespace ||
1453
+ (before.port ?? null) !== (this.networkPort ?? null);
1454
+
1455
+ if (needsRestart) {
1456
+ await this.restartNetworkAdapter("set_network_mode_runtime");
1457
+ }
1458
+
1459
+ this.socialNetworkRequiresRestart = false;
1081
1460
  await this.writeSocialRuntime();
1082
1461
  return {
1083
1462
  mode: this.networkMode,
1084
- adapter: this.socialConfig.network.adapter,
1085
- network_requires_restart: this.socialNetworkRequiresRestart,
1086
- note: "Runtime mode updated. Existing social.md is unchanged.",
1463
+ adapter: this.adapterMode,
1464
+ network_requires_restart: false,
1465
+ note: "Runtime mode updated and adapter restarted. Existing social.md is unchanged.",
1087
1466
  };
1088
1467
  }
1089
1468
 
@@ -1098,7 +1477,7 @@ export class LocalNodeService {
1098
1477
  this.socialConfig.network.adapter = "relay-preview";
1099
1478
  this.socialConfig.network.signaling_url = signalingUrl;
1100
1479
  this.socialConfig.network.signaling_urls = [signalingUrl];
1101
- this.socialConfig.network.room = room || "silicaclaw-global-preview";
1480
+ this.socialConfig.network.room = room || DEFAULT_GLOBAL_ROOM;
1102
1481
  this.applyResolvedNetworkConfig();
1103
1482
  await this.restartNetworkAdapter("quick_connect_global_preview");
1104
1483
  this.socialNetworkRequiresRestart = false;
@@ -1123,7 +1502,7 @@ export class LocalNodeService {
1123
1502
  port: this.networkPort,
1124
1503
  };
1125
1504
 
1126
- const loaded = loadSocialConfig(this.workspaceRoot);
1505
+ const loaded = loadSocialConfig(this.projectRoot);
1127
1506
  this.socialConfig = loaded.config;
1128
1507
  this.socialSourcePath = loaded.meta.source_path;
1129
1508
  this.socialFound = loaded.meta.found;
@@ -1145,13 +1524,18 @@ export class LocalNodeService {
1145
1524
  before.namespace !== after.namespace ||
1146
1525
  (before.port ?? null) !== (after.port ?? null);
1147
1526
 
1527
+ if (this.socialNetworkRequiresRestart) {
1528
+ await this.restartNetworkAdapter("reload_social_config");
1529
+ this.socialNetworkRequiresRestart = false;
1530
+ }
1531
+
1148
1532
  await this.writeSocialRuntime();
1149
1533
 
1150
1534
  return this.getSocialConfigView();
1151
1535
  }
1152
1536
 
1153
1537
  async generateDefaultSocialMd() {
1154
- const result = ensureDefaultSocialMd(this.workspaceRoot, {
1538
+ const result = ensureDefaultSocialMd(this.projectRoot, {
1155
1539
  display_name: this.getDefaultDisplayName(),
1156
1540
  bio: "Local AI agent connected to SilicaClaw",
1157
1541
  tags: ["openclaw", "local-first"],
@@ -1178,10 +1562,11 @@ export class LocalNodeService {
1178
1562
  search(keyword: string): PublicProfileSummary[] {
1179
1563
  this.ensureLocalDirectoryBaseline();
1180
1564
  this.compactCacheInMemory();
1181
- return searchDirectory(this.directory, keyword, { presenceTTLms: PRESENCE_TTL_MS }).map((profile) => {
1565
+ const directMatches = searchDirectory(this.directory, keyword, { presenceTTLms: PRESENCE_TTL_MS }).map((profile) => {
1182
1566
  const lastSeenAt = this.directory.presence[profile.agent_id] ?? 0;
1183
1567
  return this.toPublicProfileSummary(profile, { last_seen_at: lastSeenAt });
1184
1568
  });
1569
+ return this.mergeMessageOnlyAgentSummaries(directMatches, keyword);
1185
1570
  }
1186
1571
 
1187
1572
  getPublicProfilePreview(): PublicProfileSummary | null {
@@ -1259,11 +1644,11 @@ export class LocalNodeService {
1259
1644
 
1260
1645
  getOpenClawBridgeStatus(): OpenClawBridgeStatus {
1261
1646
  const integration = this.getIntegrationStatus();
1262
- const openclawInstallation = detectOpenClawInstallation(this.workspaceRoot);
1263
- const openclawRuntime = detectOpenClawRuntime();
1647
+ const openclawInstallation = detectOpenClawInstallation(this.projectRoot);
1648
+ const openclawRuntime = detectOpenClawRuntime(this.projectRoot);
1264
1649
  const skillInstallation = detectOpenClawSkillInstallation();
1265
1650
  const ownerDelivery = detectOwnerDeliveryStatus({
1266
- workspaceRoot: this.workspaceRoot,
1651
+ workspaceRoot: this.projectRoot,
1267
1652
  connectedToSilicaclaw: integration.connected_to_silicaclaw,
1268
1653
  openclawRunning: openclawRuntime.running,
1269
1654
  skillInstalled: skillInstallation.installed,
@@ -1326,11 +1711,15 @@ export class LocalNodeService {
1326
1711
  };
1327
1712
  }
1328
1713
 
1329
- async installOpenClawSkill() {
1714
+ async installOpenClawSkill(skillName?: string) {
1330
1715
  const scriptPath = resolve(this.workspaceRoot, "scripts", "install-openclaw-skill.mjs");
1331
- const { stdout } = await execFileAsync(process.execPath, [scriptPath], {
1716
+ const args = [scriptPath];
1717
+ if (skillName) {
1718
+ args.push(`--skill=${skillName}`);
1719
+ }
1720
+ const { stdout } = await execFileAsync(process.execPath, args, {
1332
1721
  cwd: this.workspaceRoot,
1333
- env: process.env,
1722
+ env: { ...process.env, SILICACLAW_WORKSPACE_DIR: this.projectRoot },
1334
1723
  maxBuffer: 1024 * 1024,
1335
1724
  });
1336
1725
  const parsed = JSON.parse(String(stdout || "{}"));
@@ -1354,16 +1743,21 @@ export class LocalNodeService {
1354
1743
  const homeDir = resolve(process.env.HOME || "", ".openclaw");
1355
1744
  const workspaceSkillDir = resolve(homeDir, "workspace", "skills");
1356
1745
  const legacySkillDir = resolve(homeDir, "skills");
1357
- const openclawSourceDir = resolve(this.workspaceRoot, "..", "openclaw");
1746
+ const openclawSourceDir = defaultOpenClawSourceDir(this.projectRoot);
1747
+ const openclawRuntime = detectOpenClawRuntime(this.projectRoot);
1358
1748
 
1359
1749
  return {
1360
- bridge_api_base: "http://localhost:4310",
1361
- openclaw_detected: detectOpenClawInstallation(this.workspaceRoot).detected,
1362
- openclaw_running: detectOpenClawRuntime().running,
1750
+ bridge_api_base: DEFAULT_BRIDGE_API_BASE,
1751
+ openclaw_detected: detectOpenClawInstallation(this.projectRoot).detected,
1752
+ openclaw_running: openclawRuntime.running,
1753
+ openclaw_gateway_host: OPENCLAW_GATEWAY_HOST,
1754
+ openclaw_gateway_port: openclawRuntime.configured_gateway_port,
1755
+ openclaw_gateway_url: openclawRuntime.configured_gateway_url,
1756
+ openclaw_gateway_config_path: openclawRuntime.configured_gateway_config_path,
1363
1757
  openclaw_workspace_skill_dir: workspaceSkillDir,
1364
1758
  openclaw_legacy_skill_dir: legacySkillDir,
1365
1759
  silicaclaw_env_template_path: resolve(this.workspaceRoot, "openclaw-owner-forward.env.example"),
1366
- recommended_skill_name: "silicaclaw-broadcast",
1760
+ recommended_skill_name: "silicaclaw-bridge-setup",
1367
1761
  recommended_install_command: "silicaclaw openclaw-skill-install",
1368
1762
  recommended_owner_forward_env: {
1369
1763
  OPENCLAW_SOURCE_DIR: openclawSourceDir,
@@ -1381,13 +1775,143 @@ export class LocalNodeService {
1381
1775
  ].join(" "),
1382
1776
  notes: [
1383
1777
  "Install and maintain the skill from SilicaClaw; do not edit OpenClaw core source for this integration.",
1778
+ "Use silicaclaw-bridge-setup first when OpenClaw still needs local install, readiness checks, or troubleshooting guidance.",
1384
1779
  "OpenClaw learns broadcasts via the installed skill under ~/.openclaw/workspace/skills/.",
1780
+ "Runtime detection prefers the actual OpenClaw gateway listener port, then falls back to OpenClaw's own openclaw.json gateway.port.",
1385
1781
  "Owner delivery runs through OpenClaw's own message channel stack after the skill forwards a summary.",
1386
1782
  "Sensitive computer control still requires OpenClaw's own owner approval and node permission flow.",
1387
1783
  ],
1388
1784
  };
1389
1785
  }
1390
1786
 
1787
+ getSkillsView() {
1788
+ const bundledRoot = resolve(this.workspaceRoot, "openclaw-skills");
1789
+ const openclawHome = resolve(process.env.HOME || "", ".openclaw");
1790
+ const workspaceInstallRoot = resolve(openclawHome, "workspace", "skills");
1791
+ const legacyInstallRoot = resolve(openclawHome, "skills");
1792
+ const bridge = this.getOpenClawBridgeStatus();
1793
+ const bundledSkills = listDirectories(bundledRoot).map((dir) => {
1794
+ const manifestPath = resolve(dir.path, "manifest.json");
1795
+ const skillPath = resolve(dir.path, "SKILL.md");
1796
+ const versionPath = resolve(dir.path, "VERSION");
1797
+ const manifest = readJsonFileSafe(manifestPath);
1798
+ const references = (manifest?.references && typeof manifest.references === "object")
1799
+ ? manifest.references as Record<string, unknown>
1800
+ : null;
1801
+ const ownerDialogueCheatsheetPath = references?.owner_dialogue_cheatsheet_zh
1802
+ ? resolve(dir.path, String(references.owner_dialogue_cheatsheet_zh))
1803
+ : null;
1804
+ const name = String(manifest?.name || dir.name);
1805
+ const capabilities = Array.isArray(manifest?.capabilities)
1806
+ ? manifest.capabilities.map((item) => String(item))
1807
+ : [];
1808
+ const installedWorkspacePath = resolve(workspaceInstallRoot, name);
1809
+ const installedLegacyPath = resolve(legacyInstallRoot, name);
1810
+ const installedInWorkspace = existsSync(installedWorkspacePath);
1811
+ const installedInLegacy = existsSync(installedLegacyPath);
1812
+ return {
1813
+ key: name,
1814
+ name,
1815
+ display_name: String(manifest?.display_name || name),
1816
+ description: String(manifest?.description || summarizeSkillReadme(skillPath) || ""),
1817
+ version: existsSync(versionPath) ? readFileSync(versionPath, "utf8").trim() : String(manifest?.version || ""),
1818
+ source_path: dir.path,
1819
+ manifest_path: existsSync(manifestPath) ? manifestPath : null,
1820
+ skill_path: existsSync(skillPath) ? skillPath : null,
1821
+ capabilities,
1822
+ transport: manifest?.transport || null,
1823
+ owner_dialogue_cheatsheet_path: ownerDialogueCheatsheetPath && existsSync(ownerDialogueCheatsheetPath) ? ownerDialogueCheatsheetPath : null,
1824
+ owner_dialogue_examples_zh: ownerDialogueCheatsheetPath ? readDialogueCheatsheetPreview(ownerDialogueCheatsheetPath) : [],
1825
+ owner_dialogue_sections_zh: ownerDialogueCheatsheetPath ? readDialogueCheatsheetSections(ownerDialogueCheatsheetPath) : [],
1826
+ installed_in_openclaw: installedInWorkspace || installedInLegacy,
1827
+ install_mode: installedInWorkspace ? "workspace" : installedInLegacy ? "legacy" : "not_installed",
1828
+ installed_path: installedInWorkspace ? installedWorkspacePath : installedInLegacy ? installedLegacyPath : null,
1829
+ };
1830
+ });
1831
+
1832
+ const installedSkills = [
1833
+ ...listDirectories(workspaceInstallRoot).map((dir) => ({ ...dir, install_mode: "workspace" as const })),
1834
+ ...listDirectories(legacyInstallRoot).map((dir) => ({ ...dir, install_mode: "legacy" as const })),
1835
+ ].map((dir) => {
1836
+ const manifestPath = resolve(dir.path, "manifest.json");
1837
+ const skillPath = resolve(dir.path, "SKILL.md");
1838
+ const versionPath = resolve(dir.path, "VERSION");
1839
+ const manifest = readJsonFileSafe(manifestPath);
1840
+ const references = (manifest?.references && typeof manifest.references === "object")
1841
+ ? manifest.references as Record<string, unknown>
1842
+ : null;
1843
+ const ownerDialogueCheatsheetPath = references?.owner_dialogue_cheatsheet_zh
1844
+ ? resolve(dir.path, String(references.owner_dialogue_cheatsheet_zh))
1845
+ : null;
1846
+ return {
1847
+ key: `${dir.install_mode}:${dir.name}`,
1848
+ name: String(manifest?.name || dir.name),
1849
+ display_name: String(manifest?.display_name || dir.name),
1850
+ description: String(manifest?.description || summarizeSkillReadme(skillPath) || ""),
1851
+ version: existsSync(versionPath) ? readFileSync(versionPath, "utf8").trim() : String(manifest?.version || ""),
1852
+ install_mode: dir.install_mode,
1853
+ installed_path: dir.path,
1854
+ manifest_path: existsSync(manifestPath) ? manifestPath : null,
1855
+ skill_path: existsSync(skillPath) ? skillPath : null,
1856
+ capabilities: Array.isArray(manifest?.capabilities) ? manifest.capabilities.map((item) => String(item)) : [],
1857
+ owner_dialogue_cheatsheet_path: ownerDialogueCheatsheetPath && existsSync(ownerDialogueCheatsheetPath) ? ownerDialogueCheatsheetPath : null,
1858
+ owner_dialogue_examples_zh: ownerDialogueCheatsheetPath ? readDialogueCheatsheetPreview(ownerDialogueCheatsheetPath) : [],
1859
+ owner_dialogue_sections_zh: ownerDialogueCheatsheetPath ? readDialogueCheatsheetSections(ownerDialogueCheatsheetPath) : [],
1860
+ bundled_source_path: bundledSkills.find((item) => item.name === String(manifest?.name || dir.name))?.source_path || null,
1861
+ };
1862
+ });
1863
+
1864
+ const installedSkillVersions = new Map(installedSkills.map((item) => [item.name, item.version]));
1865
+ const bundledSkillsWithUpdateState = bundledSkills.map((skill) => {
1866
+ const installedVersion = installedSkillVersions.get(skill.name) || "";
1867
+ const updateAvailable = Boolean(
1868
+ skill.installed_in_openclaw &&
1869
+ installedVersion &&
1870
+ skill.version &&
1871
+ compareVersionTokens(installedVersion, skill.version) < 0
1872
+ );
1873
+ return {
1874
+ ...skill,
1875
+ installed_version: installedVersion || null,
1876
+ update_available: updateAvailable,
1877
+ };
1878
+ });
1879
+ const bundledSkillVersions = new Map(bundledSkillsWithUpdateState.map((item) => [item.name, item.version]));
1880
+ const installedSkillsWithUpdateState = installedSkills.map((skill) => {
1881
+ const bundledVersion = bundledSkillVersions.get(skill.name) || "";
1882
+ const updateAvailable = Boolean(
1883
+ bundledVersion &&
1884
+ skill.version &&
1885
+ compareVersionTokens(skill.version, bundledVersion) < 0
1886
+ );
1887
+ return {
1888
+ ...skill,
1889
+ bundled_version: bundledVersion || null,
1890
+ update_available: updateAvailable,
1891
+ };
1892
+ });
1893
+
1894
+ return {
1895
+ openclaw: {
1896
+ detected: bridge.openclaw_installation.detected,
1897
+ running: bridge.openclaw_runtime.running,
1898
+ detection_mode: bridge.openclaw_runtime.detection_mode,
1899
+ gateway_url: bridge.openclaw_runtime.gateway_url,
1900
+ workspace_install_root: workspaceInstallRoot,
1901
+ legacy_install_root: legacyInstallRoot,
1902
+ },
1903
+ summary: {
1904
+ bundled_count: bundledSkillsWithUpdateState.length,
1905
+ installed_count: installedSkillsWithUpdateState.length,
1906
+ installed_bundled_count: bundledSkillsWithUpdateState.filter((item) => item.installed_in_openclaw).length,
1907
+ update_available_count: bundledSkillsWithUpdateState.filter((item) => item.update_available).length,
1908
+ },
1909
+ install_action: bridge.skill_learning.install_action,
1910
+ bundled_skills: bundledSkillsWithUpdateState,
1911
+ installed_skills: installedSkillsWithUpdateState,
1912
+ };
1913
+ }
1914
+
1391
1915
  getRuntimeMessageGovernance() {
1392
1916
  return this.messageGovernance;
1393
1917
  }
@@ -1631,6 +2155,7 @@ export class LocalNodeService {
1631
2155
  };
1632
2156
  const presenceRecord = signPresence(this.identity, Date.now());
1633
2157
  const indexRecords = buildIndexRecords(this.profile);
2158
+ const replayMessages = this.getReplayableSelfSocialMessages();
1634
2159
 
1635
2160
  try {
1636
2161
  await this.publish("profile", profileRecord);
@@ -1638,6 +2163,9 @@ export class LocalNodeService {
1638
2163
  for (const record of indexRecords) {
1639
2164
  await this.publish("index", record);
1640
2165
  }
2166
+ for (const message of replayMessages) {
2167
+ await this.publish(SOCIAL_MESSAGE_TOPIC, message);
2168
+ }
1641
2169
  } catch (error) {
1642
2170
  const message = error instanceof Error ? error.message : String(error);
1643
2171
  this.lastBroadcastErrorAt = Date.now();
@@ -1660,7 +2188,10 @@ export class LocalNodeService {
1660
2188
  this.compactCacheInMemory();
1661
2189
  await this.persistCache();
1662
2190
 
1663
- await this.log("info", `Broadcast sent (${indexRecords.length} index refs, reason=${reason})`);
2191
+ await this.log(
2192
+ "info",
2193
+ `Broadcast sent (${indexRecords.length} index refs, replayed_messages=${replayMessages.length}, reason=${reason})`
2194
+ );
1664
2195
  return { sent: true, reason };
1665
2196
  }
1666
2197
 
@@ -1680,7 +2211,7 @@ export class LocalNodeService {
1680
2211
  socialConfig: this.socialConfig,
1681
2212
  existingIdentity,
1682
2213
  generatedIdentity: createIdentity(),
1683
- rootDir: this.workspaceRoot,
2214
+ rootDir: this.projectRoot,
1684
2215
  });
1685
2216
  this.identity = resolvedIdentity.identity;
1686
2217
  this.resolvedIdentitySource = resolvedIdentity.source;
@@ -1699,7 +2230,7 @@ export class LocalNodeService {
1699
2230
  socialConfig: this.socialConfig,
1700
2231
  agentId: this.identity.agent_id,
1701
2232
  existingProfile: existingProfile && existingProfile.agent_id === this.identity.agent_id ? existingProfile : null,
1702
- rootDir: this.workspaceRoot,
2233
+ rootDir: this.projectRoot,
1703
2234
  });
1704
2235
  this.profile = signProfile(profileInput, this.identity);
1705
2236
  if (!existingProfile || existingProfile.agent_id !== this.identity.agent_id) {
@@ -1708,7 +2239,7 @@ export class LocalNodeService {
1708
2239
  }
1709
2240
  await this.profileRepo.set(this.profile);
1710
2241
 
1711
- this.directory = dedupeIndex(await this.cacheRepo.get());
2242
+ this.directory = createEmptyDirectoryState();
1712
2243
  this.messageGovernance = {
1713
2244
  ...this.defaultMessageGovernance(),
1714
2245
  ...(await this.socialMessageGovernanceRepo.get()),
@@ -1731,7 +2262,7 @@ export class LocalNodeService {
1731
2262
  socialConfig: this.socialConfig,
1732
2263
  agentId: this.identity.agent_id,
1733
2264
  existingProfile: this.profile,
1734
- rootDir: this.workspaceRoot,
2265
+ rootDir: this.projectRoot,
1735
2266
  });
1736
2267
  const nextProfile = signProfile(nextProfileInput, this.identity);
1737
2268
  this.profile = nextProfile;
@@ -1851,6 +2382,10 @@ export class LocalNodeService {
1851
2382
  await this.log("warn", `Rejected social message with invalid signature (${record.message_id.slice(0, 10)})`);
1852
2383
  return;
1853
2384
  }
2385
+ if (this.hasSocialMessage(record.message_id)) {
2386
+ await this.publishObservationForMessage(record);
2387
+ return;
2388
+ }
1854
2389
  const governanceReason = this.getIncomingSocialMessageRejectionReason(record);
1855
2390
  if (governanceReason) {
1856
2391
  await this.log("warn", `Rejected social message (${record.message_id.slice(0, 10)}): ${governanceReason}`);
@@ -2023,6 +2558,7 @@ export class LocalNodeService {
2023
2558
  this.network = next.adapter;
2024
2559
  this.adapterMode = next.mode;
2025
2560
  this.networkPort = next.port;
2561
+ this.subscriptionsBound = false;
2026
2562
 
2027
2563
  await this.network.start();
2028
2564
  this.bindNetworkSubscriptions();
@@ -2045,7 +2581,22 @@ export class LocalNodeService {
2045
2581
  }
2046
2582
 
2047
2583
  private async persistCache(): Promise<void> {
2048
- await this.cacheRepo.set(this.directory);
2584
+ const persisted = createEmptyDirectoryState();
2585
+ if (this.profile) {
2586
+ const selfProfileRecord: SignedProfileRecord = {
2587
+ type: "profile",
2588
+ profile: this.profile,
2589
+ };
2590
+ this.directory = ingestProfileRecord(this.directory, selfProfileRecord);
2591
+ persisted.profiles[this.profile.agent_id] = this.profile;
2592
+ const selfLastSeenAt = this.directory.presence[this.profile.agent_id];
2593
+ if (typeof selfLastSeenAt === "number" && Number.isFinite(selfLastSeenAt)) {
2594
+ persisted.presence[this.profile.agent_id] = selfLastSeenAt;
2595
+ }
2596
+ const indexed = rebuildIndexForProfile(persisted, this.profile);
2597
+ persisted.index = indexed.index;
2598
+ }
2599
+ await this.cacheRepo.set(persisted);
2049
2600
  }
2050
2601
 
2051
2602
  private async persistSocialMessages(): Promise<void> {
@@ -2071,6 +2622,19 @@ export class LocalNodeService {
2071
2622
  return (this.network as any).getDiagnostics();
2072
2623
  }
2073
2624
 
2625
+ private getResolvedRealtimeNetworkSummary() {
2626
+ const diagnostics = this.getAdapterDiagnostics();
2627
+ const relayCapable = this.adapterMode === "webrtc-preview" || this.adapterMode === "relay-preview";
2628
+ return {
2629
+ diagnostics,
2630
+ signaling_url: diagnostics?.signaling_url ?? (relayCapable ? this.webrtcSignalingUrls[0] ?? null : null),
2631
+ signaling_endpoints: diagnostics?.signaling_endpoints ?? (relayCapable ? this.webrtcSignalingUrls : []),
2632
+ room: diagnostics?.room ?? (relayCapable ? this.webrtcRoom : null),
2633
+ bootstrap_sources: diagnostics?.bootstrap_sources ?? (relayCapable ? this.webrtcBootstrapSources : []),
2634
+ seed_peers_count: diagnostics?.seed_peers_count ?? this.webrtcSeedPeers.length,
2635
+ };
2636
+ }
2637
+
2074
2638
  private toPublicProfileSummary(
2075
2639
  profile: PublicProfile,
2076
2640
  options?: { last_seen_at?: number }
@@ -2114,6 +2678,72 @@ export class LocalNodeService {
2114
2678
  });
2115
2679
  }
2116
2680
 
2681
+ private mergeMessageOnlyAgentSummaries(
2682
+ summaries: PublicProfileSummary[],
2683
+ keyword: string
2684
+ ): PublicProfileSummary[] {
2685
+ const normalizedKeyword = String(keyword || "").trim().toLowerCase();
2686
+ const knownAgentIds = new Set(summaries.map((item) => item.agent_id));
2687
+ const messageOnly: PublicProfileSummary[] = [];
2688
+
2689
+ for (const message of this.socialMessages) {
2690
+ if (!message?.agent_id || knownAgentIds.has(message.agent_id)) {
2691
+ continue;
2692
+ }
2693
+
2694
+ const displayName = String(message.display_name || "Unnamed").trim() || "Unnamed";
2695
+ if (normalizedKeyword) {
2696
+ const haystacks = [
2697
+ displayName.toLowerCase(),
2698
+ message.agent_id.toLowerCase(),
2699
+ String(message.topic || "").toLowerCase(),
2700
+ ];
2701
+ if (!haystacks.some((value) => value.includes(normalizedKeyword))) {
2702
+ continue;
2703
+ }
2704
+ }
2705
+
2706
+ knownAgentIds.add(message.agent_id);
2707
+ messageOnly.push(
2708
+ buildPublicProfileSummary({
2709
+ profile: {
2710
+ agent_id: message.agent_id,
2711
+ display_name: displayName,
2712
+ bio: "Seen from signed public message. Profile/presence not synced yet.",
2713
+ tags: ["message-only"],
2714
+ avatar_url: "",
2715
+ public_enabled: true,
2716
+ updated_at: message.created_at,
2717
+ signature: "",
2718
+ },
2719
+ online: false,
2720
+ last_seen_at: null,
2721
+ network_mode: "unknown",
2722
+ openclaw_bound: false,
2723
+ profile_version: PROFILE_VERSION,
2724
+ public_key_fingerprint: null,
2725
+ verified_profile: false,
2726
+ now: Date.now(),
2727
+ presence_ttl_ms: PRESENCE_TTL_MS,
2728
+ })
2729
+ );
2730
+ }
2731
+
2732
+ return [...summaries, ...messageOnly].sort((a, b) => {
2733
+ if (a.online !== b.online) {
2734
+ return a.online ? -1 : 1;
2735
+ }
2736
+ if (a.updated_at !== b.updated_at) {
2737
+ return b.updated_at - a.updated_at;
2738
+ }
2739
+ const byName = a.display_name.localeCompare(b.display_name);
2740
+ if (byName !== 0) {
2741
+ return byName;
2742
+ }
2743
+ return a.agent_id.localeCompare(b.agent_id);
2744
+ });
2745
+ }
2746
+
2117
2747
  private fingerprintPublicKey(publicKey: string): string {
2118
2748
  const digest = createHash("sha256").update(publicKey, "utf8").digest("hex");
2119
2749
  return `${digest.slice(0, 12)}:${digest.slice(-8)}`;
@@ -2122,6 +2752,22 @@ export class LocalNodeService {
2122
2752
  private getOnboardingSummary() {
2123
2753
  const summary = this.getIntegrationSummary();
2124
2754
  const publicEnabled = Boolean(this.profile?.public_enabled);
2755
+ const nextSteps: string[] = [];
2756
+ if (!String(this.profile?.display_name || "").trim()) {
2757
+ nextSteps.push("Update display name in Profile page");
2758
+ }
2759
+ if (!publicEnabled) {
2760
+ nextSteps.push("Enable Public Enabled in Profile");
2761
+ }
2762
+ if (!summary.running) {
2763
+ nextSteps.push("Start broadcast in Network");
2764
+ }
2765
+ if (!summary.discoverable) {
2766
+ nextSteps.push("Announce node once after the network is running");
2767
+ }
2768
+ if (nextSteps.length === 0) {
2769
+ nextSteps.push("Node is public and discoverable");
2770
+ }
2125
2771
  return {
2126
2772
  first_run: Boolean(
2127
2773
  this.initState.social_auto_created ||
@@ -2133,10 +2779,7 @@ export class LocalNodeService {
2133
2779
  mode: this.networkMode,
2134
2780
  public_enabled: publicEnabled,
2135
2781
  can_enable_public_discovery: !publicEnabled,
2136
- next_steps: [
2137
- "Update display name in Profile page",
2138
- "Export social.md from Social Config",
2139
- ],
2782
+ next_steps: nextSteps,
2140
2783
  };
2141
2784
  }
2142
2785
 
@@ -2161,7 +2804,7 @@ export class LocalNodeService {
2161
2804
  };
2162
2805
  }
2163
2806
  return {
2164
- mode: "global-preview",
2807
+ mode: DEFAULT_NETWORK_MODE,
2165
2808
  short_label: "Relay preview",
2166
2809
  summary: "Uses the public relay preview room so public nodes can find each other across the internet.",
2167
2810
  };
@@ -2191,14 +2834,14 @@ export class LocalNodeService {
2191
2834
  this.socialConfig.network.mode ||
2192
2835
  (modeEnv === "local" || modeEnv === "lan" || modeEnv === "global-preview"
2193
2836
  ? modeEnv
2194
- : "global-preview");
2837
+ : DEFAULT_NETWORK_MODE);
2195
2838
 
2196
2839
  this.networkMode = resolvedMode;
2197
- this.networkNamespace = this.socialConfig.network.namespace || process.env.NETWORK_NAMESPACE || "silicaclaw.preview";
2198
- this.networkPort = Number(this.socialConfig.network.port || process.env.NETWORK_PORT || 44123);
2840
+ this.networkNamespace = this.socialConfig.network.namespace || process.env.NETWORK_NAMESPACE || DEFAULT_NETWORK_NAMESPACE;
2841
+ this.networkPort = Number(this.socialConfig.network.port || process.env.NETWORK_PORT || DEFAULT_NETWORK_PORT);
2199
2842
 
2200
- const builtInGlobalSignalingUrls = ["https://relay.silicaclaw.com"];
2201
- const builtInGlobalRoom = "silicaclaw-global-preview";
2843
+ const builtInGlobalSignalingUrls = [DEFAULT_GLOBAL_SIGNALING_URL];
2844
+ const builtInGlobalRoom = DEFAULT_GLOBAL_ROOM;
2202
2845
 
2203
2846
  const signalingUrlsSocial = dedupeStrings(this.socialConfig.network.signaling_urls || []);
2204
2847
  const signalingUrlSocial = String(this.socialConfig.network.signaling_url || "").trim();
@@ -2223,8 +2866,8 @@ export class LocalNodeService {
2223
2866
  signalingUrls = builtInGlobalSignalingUrls;
2224
2867
  signalingSource = "built-in-defaults:global-preview.signaling_urls";
2225
2868
  } else {
2226
- signalingUrls = ["https://relay.silicaclaw.com"];
2227
- signalingSource = "default:https://relay.silicaclaw.com";
2869
+ signalingUrls = [DEFAULT_GLOBAL_SIGNALING_URL];
2870
+ signalingSource = `default:${DEFAULT_GLOBAL_SIGNALING_URL}`;
2228
2871
  }
2229
2872
 
2230
2873
  const roomSocial = String(this.socialConfig.network.room || "").trim();
@@ -2233,14 +2876,14 @@ export class LocalNodeService {
2233
2876
  roomSocial ||
2234
2877
  roomEnv ||
2235
2878
  (this.networkMode === "global-preview" ? builtInGlobalRoom : "") ||
2236
- "silicaclaw-global-preview";
2879
+ DEFAULT_GLOBAL_ROOM;
2237
2880
  const roomSource = roomSocial
2238
2881
  ? "social.md:network.room"
2239
2882
  : roomEnv
2240
2883
  ? "env:WEBRTC_ROOM"
2241
2884
  : this.networkMode === "global-preview"
2242
2885
  ? "built-in-defaults:global-preview.room"
2243
- : "default:silicaclaw-global-preview";
2886
+ : `default:${DEFAULT_GLOBAL_ROOM}`;
2244
2887
 
2245
2888
  const seedPeersSocial = dedupeStrings(this.socialConfig.network.seed_peers || []);
2246
2889
  const seedPeersEnv = dedupeStrings(parseListEnv(WEBRTC_SEED_PEERS));
@@ -2299,6 +2942,24 @@ export class LocalNodeService {
2299
2942
  return this.messageGovernance.blocked_terms.some((term) => normalized.includes(term));
2300
2943
  }
2301
2944
 
2945
+ private hasSocialMessage(messageId: string): boolean {
2946
+ return this.socialMessages.some((item) => item.message_id === messageId);
2947
+ }
2948
+
2949
+ private getReplayableSelfSocialMessages(now = Date.now()): SocialMessageRecord[] {
2950
+ const maxCount = Math.max(0, SOCIAL_MESSAGE_REPLAY_MAX_PER_BROADCAST);
2951
+ if (!this.identity || maxCount === 0) {
2952
+ return [];
2953
+ }
2954
+ return this.socialMessages
2955
+ .filter((item) => (
2956
+ item.agent_id === this.identity?.agent_id &&
2957
+ now - item.created_at <= SOCIAL_MESSAGE_REPLAY_WINDOW_MS
2958
+ ))
2959
+ .sort((a, b) => a.created_at - b.created_at)
2960
+ .slice(-maxCount);
2961
+ }
2962
+
2302
2963
  private hasRecentDuplicateMessage(agentId: string, body: string, topic: string, now = Date.now()): boolean {
2303
2964
  return this.socialMessages.some((item) => (
2304
2965
  item.agent_id === agentId &&
@@ -2608,15 +3269,15 @@ function renderBootstrapScript(payload: unknown): string {
2608
3269
  if (data.pillBroadcastClassName) pillBroadcast.className = data.pillBroadcastClassName;
2609
3270
  }
2610
3271
  setHtml('overviewCards', data.overviewCardsHtml || '');
2611
- setText('agentsCountHint', data.agentsCountHintText || '0 agents');
2612
- setHtml('agentsWrap', data.agentsWrapHtml || '<div class="label">No discovered agents yet.</div>');
3272
+ setText('agentsCountHint', data.agentsCountHintText || '0 nodes');
3273
+ setHtml('agentsWrap', data.agentsWrapHtml || '<div class="label">No discovered nodes yet.</div>');
2613
3274
  })();
2614
3275
  </script>`;
2615
3276
  }
2616
3277
 
2617
3278
  export async function main() {
2618
3279
  const app = express();
2619
- const port = Number(process.env.PORT || 4310);
3280
+ const port = Number(process.env.PORT || defaults.ports.local_console);
2620
3281
  const staticDir = resolveLocalConsoleStaticDir();
2621
3282
  const staticIndexFile = resolve(staticDir, "index.html");
2622
3283
 
@@ -2691,6 +3352,10 @@ export async function main() {
2691
3352
  sendOk(res, node.getNetworkStats());
2692
3353
  });
2693
3354
 
3355
+ app.get("/api/skills", (_req, res) => {
3356
+ sendOk(res, node.getSkillsView());
3357
+ });
3358
+
2694
3359
  app.post(
2695
3360
  "/api/network/quick-connect-global-preview",
2696
3361
  asyncRoute(async (req, res) => {
@@ -2820,9 +3485,10 @@ export async function main() {
2820
3485
 
2821
3486
  app.post(
2822
3487
  "/api/openclaw/bridge/skill-install",
2823
- asyncRoute(async (_req, res) => {
3488
+ asyncRoute(async (req, res) => {
2824
3489
  try {
2825
- const result = await node.installOpenClawSkill();
3490
+ const skillName = String(req.body?.skill_name || "").trim();
3491
+ const result = await node.installOpenClawSkill(skillName || undefined);
2826
3492
  sendOk(res, result, {
2827
3493
  message: "OpenClaw skill installed",
2828
3494
  });
@@ -2870,7 +3536,7 @@ export async function main() {
2870
3536
  const agentId = req.params.agentId;
2871
3537
  const profile = state.profiles[agentId];
2872
3538
  if (!profile) {
2873
- sendError(res, 404, "AGENT_NOT_FOUND", "Agent not found", { agent_id: agentId });
3539
+ sendError(res, 404, "AGENT_NOT_FOUND", "Node not found", { agent_id: agentId });
2874
3540
  return;
2875
3541
  }
2876
3542
 
@@ -2906,7 +3572,7 @@ export async function main() {
2906
3572
  .join("");
2907
3573
  const agentsWrapHtml =
2908
3574
  discovered.length === 0
2909
- ? `<div class="label">No discovered agents yet.</div>`
3575
+ ? `<div class="label">No discovered nodes yet.</div>`
2910
3576
  : `
2911
3577
  <table class="table">
2912
3578
  <thead><tr><th>Name</th><th>Agent ID</th><th>Status</th><th>Updated</th></tr></thead>
@@ -2942,7 +3608,7 @@ export async function main() {
2942
3608
  pillBroadcastText: overview.broadcast_enabled ? "broadcast: running" : "broadcast: paused",
2943
3609
  pillBroadcastClassName: `pill ${overview.broadcast_enabled ? "ok" : "warn"}`,
2944
3610
  overviewCardsHtml,
2945
- agentsCountHintText: `${discovered.length} agents discovered`,
3611
+ agentsCountHintText: `${discovered.length} nodes discovered`,
2946
3612
  agentsWrapHtml,
2947
3613
  integrationStatusText: `Connected to SilicaClaw: ${integration.connected_to_silicaclaw ? "yes" : "no"} · Network mode: ${integration.network_mode || "-"} · Public discovery: ${integration.public_enabled ? "enabled" : "disabled"}`,
2948
3614
  integrationStatusClassName: `integration-strip ${integration.connected_to_silicaclaw && integration.public_enabled ? "ok" : "warn"}`,