@silicaclaw/cli 2026.3.19-2 → 2026.3.19-21

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