@silicaclaw/cli 2026.3.19-9 → 2026.3.20-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/CHANGELOG.md +134 -0
  2. package/DEMO_GUIDE.md +1 -1
  3. package/INSTALL.md +47 -13
  4. package/README.md +54 -19
  5. package/VERSION +1 -1
  6. package/apps/local-console/dist/apps/local-console/src/server.d.ts +51 -12
  7. package/apps/local-console/dist/apps/local-console/src/server.js +619 -183
  8. package/apps/local-console/dist/config/silicaclaw-defaults.json +19 -0
  9. package/apps/local-console/dist/packages/core/src/socialConfig.js +9 -5
  10. package/apps/local-console/dist/packages/network/src/realPreview.js +6 -2
  11. package/apps/local-console/dist/packages/network/src/relayPreview.js +8 -2
  12. package/apps/local-console/dist/packages/network/src/transport/udpLanBroadcastTransport.js +2 -1
  13. package/apps/local-console/dist/packages/network/src/webrtcPreview.js +5 -1
  14. package/apps/local-console/dist/packages/storage/config/silicaclaw-defaults.json +19 -0
  15. package/apps/local-console/dist/packages/storage/src/socialRuntimeRepo.js +8 -4
  16. package/apps/local-console/public/app/app.js +21 -1
  17. package/apps/local-console/public/app/events.js +40 -2
  18. package/apps/local-console/public/app/network.js +32 -3
  19. package/apps/local-console/public/app/overview.js +18 -26
  20. package/apps/local-console/public/app/shell.js +18 -34
  21. package/apps/local-console/public/app/social.js +207 -28
  22. package/apps/local-console/public/app/styles.css +182 -14
  23. package/apps/local-console/public/app/template.js +76 -31
  24. package/apps/local-console/public/app/translations.js +147 -51
  25. package/apps/local-console/src/server.ts +652 -189
  26. package/apps/public-explorer/dist/apps/public-explorer/src/server.d.ts +1 -0
  27. package/apps/public-explorer/dist/apps/public-explorer/src/server.js +41 -0
  28. package/apps/public-explorer/dist/config/silicaclaw-defaults.json +19 -0
  29. package/apps/public-explorer/public/app/app.js +22 -2
  30. package/apps/public-explorer/public/app/template.js +4 -4
  31. package/apps/public-explorer/public/app/translations.js +15 -15
  32. package/apps/public-explorer/src/server.ts +11 -1
  33. package/config/silicaclaw-defaults.json +19 -0
  34. package/dist/apps/local-console/src/server.d.ts +1 -0
  35. package/dist/apps/local-console/src/server.js +555 -0
  36. package/docs/NEW_USER_INSTALL.md +14 -10
  37. package/docs/NEW_USER_OPERATIONS.md +4 -4
  38. package/docs/OPENCLAW_BRIDGE.md +15 -0
  39. package/docs/OPENCLAW_BRIDGE_ZH.md +15 -0
  40. package/docs/RELEASE_CHECKLIST.md +95 -0
  41. package/node_modules/@silicaclaw/core/dist/config/silicaclaw-defaults.json +19 -0
  42. package/node_modules/@silicaclaw/core/dist/packages/core/src/crypto.d.ts +6 -0
  43. package/node_modules/@silicaclaw/core/dist/packages/core/src/crypto.js +50 -0
  44. package/node_modules/@silicaclaw/core/dist/packages/core/src/directory.d.ts +17 -0
  45. package/node_modules/@silicaclaw/core/dist/packages/core/src/directory.js +145 -0
  46. package/node_modules/@silicaclaw/core/dist/packages/core/src/identity.d.ts +2 -0
  47. package/node_modules/@silicaclaw/core/dist/packages/core/src/identity.js +18 -0
  48. package/node_modules/@silicaclaw/core/dist/packages/core/src/index.d.ts +12 -0
  49. package/node_modules/@silicaclaw/core/dist/packages/core/src/index.js +28 -0
  50. package/node_modules/@silicaclaw/core/dist/packages/core/src/indexing.d.ts +6 -0
  51. package/node_modules/@silicaclaw/core/dist/packages/core/src/indexing.js +43 -0
  52. package/node_modules/@silicaclaw/core/dist/packages/core/src/presence.d.ts +4 -0
  53. package/node_modules/@silicaclaw/core/dist/packages/core/src/presence.js +23 -0
  54. package/node_modules/@silicaclaw/core/dist/packages/core/src/profile.d.ts +4 -0
  55. package/node_modules/@silicaclaw/core/dist/packages/core/src/profile.js +39 -0
  56. package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  57. package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.js +103 -0
  58. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialConfig.d.ts +100 -0
  59. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialConfig.js +300 -0
  60. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialMessage.d.ts +19 -0
  61. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialMessage.js +69 -0
  62. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialResolver.d.ts +46 -0
  63. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialResolver.js +237 -0
  64. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialTemplate.d.ts +2 -0
  65. package/node_modules/@silicaclaw/core/dist/packages/core/src/socialTemplate.js +90 -0
  66. package/node_modules/@silicaclaw/core/dist/packages/core/src/types.d.ts +59 -0
  67. package/node_modules/@silicaclaw/core/dist/packages/core/src/types.js +2 -0
  68. package/node_modules/@silicaclaw/core/src/socialConfig.ts +7 -5
  69. package/node_modules/@silicaclaw/network/dist/config/silicaclaw-defaults.json +19 -0
  70. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/messageEnvelope.d.ts +28 -0
  71. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/messageEnvelope.js +36 -0
  72. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/peerDiscovery.d.ts +43 -0
  73. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/peerDiscovery.js +2 -0
  74. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/topicCodec.d.ts +4 -0
  75. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/topicCodec.js +2 -0
  76. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/transport.d.ts +36 -0
  77. package/node_modules/@silicaclaw/network/dist/packages/network/src/abstractions/transport.js +2 -0
  78. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
  79. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.js +24 -0
  80. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonTopicCodec.d.ts +5 -0
  81. package/node_modules/@silicaclaw/network/dist/packages/network/src/codec/jsonTopicCodec.js +12 -0
  82. package/node_modules/@silicaclaw/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.d.ts +28 -0
  83. package/node_modules/@silicaclaw/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.js +144 -0
  84. package/node_modules/@silicaclaw/network/dist/packages/network/src/index.d.ts +14 -0
  85. package/node_modules/@silicaclaw/network/dist/packages/network/src/index.js +30 -0
  86. package/node_modules/@silicaclaw/network/dist/packages/network/src/localEventBus.d.ts +9 -0
  87. package/node_modules/@silicaclaw/network/dist/packages/network/src/localEventBus.js +47 -0
  88. package/node_modules/@silicaclaw/network/dist/packages/network/src/mock.d.ts +8 -0
  89. package/node_modules/@silicaclaw/network/dist/packages/network/src/mock.js +24 -0
  90. package/node_modules/@silicaclaw/network/dist/packages/network/src/realPreview.d.ts +105 -0
  91. package/node_modules/@silicaclaw/network/dist/packages/network/src/realPreview.js +331 -0
  92. package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.d.ts +166 -0
  93. package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.js +448 -0
  94. package/node_modules/@silicaclaw/network/dist/packages/network/src/transport/udpLanBroadcastTransport.d.ts +23 -0
  95. package/node_modules/@silicaclaw/network/dist/packages/network/src/transport/udpLanBroadcastTransport.js +154 -0
  96. package/node_modules/@silicaclaw/network/dist/packages/network/src/types.d.ts +6 -0
  97. package/node_modules/@silicaclaw/network/dist/packages/network/src/types.js +2 -0
  98. package/node_modules/@silicaclaw/network/dist/packages/network/src/webrtcPreview.d.ts +163 -0
  99. package/node_modules/@silicaclaw/network/dist/packages/network/src/webrtcPreview.js +848 -0
  100. package/node_modules/@silicaclaw/network/src/realPreview.ts +3 -2
  101. package/node_modules/@silicaclaw/network/src/relayPreview.ts +5 -2
  102. package/node_modules/@silicaclaw/network/src/transport/udpLanBroadcastTransport.ts +2 -1
  103. package/node_modules/@silicaclaw/network/src/webrtcPreview.ts +2 -1
  104. package/node_modules/@silicaclaw/storage/config/silicaclaw-defaults.json +19 -0
  105. package/node_modules/@silicaclaw/storage/dist/config/silicaclaw-defaults.json +19 -0
  106. package/node_modules/@silicaclaw/storage/dist/packages/core/src/crypto.d.ts +6 -0
  107. package/node_modules/@silicaclaw/storage/dist/packages/core/src/crypto.js +50 -0
  108. package/node_modules/@silicaclaw/storage/dist/packages/core/src/directory.d.ts +17 -0
  109. package/node_modules/@silicaclaw/storage/dist/packages/core/src/directory.js +145 -0
  110. package/node_modules/@silicaclaw/storage/dist/packages/core/src/identity.d.ts +2 -0
  111. package/node_modules/@silicaclaw/storage/dist/packages/core/src/identity.js +18 -0
  112. package/node_modules/@silicaclaw/storage/dist/packages/core/src/index.d.ts +12 -0
  113. package/node_modules/@silicaclaw/storage/dist/packages/core/src/index.js +28 -0
  114. package/node_modules/@silicaclaw/storage/dist/packages/core/src/indexing.d.ts +6 -0
  115. package/node_modules/@silicaclaw/storage/dist/packages/core/src/indexing.js +43 -0
  116. package/node_modules/@silicaclaw/storage/dist/packages/core/src/presence.d.ts +4 -0
  117. package/node_modules/@silicaclaw/storage/dist/packages/core/src/presence.js +23 -0
  118. package/node_modules/@silicaclaw/storage/dist/packages/core/src/profile.d.ts +4 -0
  119. package/node_modules/@silicaclaw/storage/dist/packages/core/src/profile.js +39 -0
  120. package/node_modules/@silicaclaw/storage/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  121. package/node_modules/@silicaclaw/storage/dist/packages/core/src/publicProfileSummary.js +103 -0
  122. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialConfig.d.ts +100 -0
  123. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialConfig.js +300 -0
  124. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialMessage.d.ts +19 -0
  125. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialMessage.js +69 -0
  126. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialResolver.d.ts +46 -0
  127. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialResolver.js +237 -0
  128. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialTemplate.d.ts +2 -0
  129. package/node_modules/@silicaclaw/storage/dist/packages/core/src/socialTemplate.js +90 -0
  130. package/node_modules/@silicaclaw/storage/dist/packages/core/src/types.d.ts +59 -0
  131. package/node_modules/@silicaclaw/storage/dist/packages/core/src/types.js +2 -0
  132. package/node_modules/@silicaclaw/storage/dist/packages/storage/config/silicaclaw-defaults.json +19 -0
  133. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/index.d.ts +3 -0
  134. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/index.js +19 -0
  135. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/jsonRepo.d.ts +7 -0
  136. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/jsonRepo.js +29 -0
  137. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/repos.d.ts +61 -0
  138. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/repos.js +67 -0
  139. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/socialRuntimeRepo.d.ts +5 -0
  140. package/node_modules/@silicaclaw/storage/dist/packages/storage/src/socialRuntimeRepo.js +57 -0
  141. package/node_modules/@silicaclaw/storage/dist/socialRuntimeRepo.js +8 -4
  142. package/node_modules/@silicaclaw/storage/src/socialRuntimeRepo.ts +5 -4
  143. package/node_modules/@silicaclaw/storage/tsconfig.json +1 -6
  144. package/openclaw-skills/silicaclaw-bridge-setup/SKILL.md +147 -0
  145. package/openclaw-skills/silicaclaw-bridge-setup/VERSION +1 -0
  146. package/openclaw-skills/silicaclaw-bridge-setup/agents/openai.yaml +6 -0
  147. package/openclaw-skills/silicaclaw-bridge-setup/manifest.json +27 -0
  148. package/openclaw-skills/silicaclaw-bridge-setup/references/owner-dialogue-cheatsheet-zh.md +58 -0
  149. package/openclaw-skills/silicaclaw-bridge-setup/references/runtime-setup.md +43 -0
  150. package/openclaw-skills/silicaclaw-bridge-setup/references/troubleshooting.md +24 -0
  151. package/openclaw-skills/silicaclaw-broadcast/SKILL.md +132 -0
  152. package/openclaw-skills/silicaclaw-broadcast/VERSION +1 -1
  153. package/openclaw-skills/silicaclaw-broadcast/agents/openai.yaml +2 -2
  154. package/openclaw-skills/silicaclaw-broadcast/manifest.json +3 -2
  155. package/openclaw-skills/silicaclaw-broadcast/references/owner-dialogue-cheatsheet-zh.md +81 -0
  156. package/openclaw-skills/silicaclaw-owner-push/SKILL.md +217 -0
  157. package/openclaw-skills/silicaclaw-owner-push/VERSION +1 -0
  158. package/openclaw-skills/silicaclaw-owner-push/agents/openai.yaml +6 -0
  159. package/openclaw-skills/silicaclaw-owner-push/manifest.json +30 -0
  160. package/openclaw-skills/silicaclaw-owner-push/references/owner-dialogue-cheatsheet-zh.md +87 -0
  161. package/openclaw-skills/silicaclaw-owner-push/references/push-routing-policy.md +43 -0
  162. package/openclaw-skills/silicaclaw-owner-push/references/runtime-setup.md +41 -0
  163. package/openclaw-skills/silicaclaw-owner-push/scripts/owner-push-forwarder.mjs +214 -0
  164. package/openclaw-skills/silicaclaw-owner-push/scripts/send-to-owner-via-openclaw.mjs +69 -0
  165. package/package.json +5 -1
  166. package/packages/core/dist/config/silicaclaw-defaults.json +19 -0
  167. package/packages/core/dist/packages/core/src/crypto.d.ts +6 -0
  168. package/packages/core/dist/packages/core/src/crypto.js +50 -0
  169. package/packages/core/dist/packages/core/src/directory.d.ts +17 -0
  170. package/packages/core/dist/packages/core/src/directory.js +145 -0
  171. package/packages/core/dist/packages/core/src/identity.d.ts +2 -0
  172. package/packages/core/dist/packages/core/src/identity.js +18 -0
  173. package/packages/core/dist/packages/core/src/index.d.ts +12 -0
  174. package/packages/core/dist/packages/core/src/index.js +28 -0
  175. package/packages/core/dist/packages/core/src/indexing.d.ts +6 -0
  176. package/packages/core/dist/packages/core/src/indexing.js +43 -0
  177. package/packages/core/dist/packages/core/src/presence.d.ts +4 -0
  178. package/packages/core/dist/packages/core/src/presence.js +23 -0
  179. package/packages/core/dist/packages/core/src/profile.d.ts +4 -0
  180. package/packages/core/dist/packages/core/src/profile.js +39 -0
  181. package/packages/core/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  182. package/packages/core/dist/packages/core/src/publicProfileSummary.js +103 -0
  183. package/packages/core/dist/packages/core/src/socialConfig.d.ts +100 -0
  184. package/packages/core/dist/packages/core/src/socialConfig.js +300 -0
  185. package/packages/core/dist/packages/core/src/socialMessage.d.ts +19 -0
  186. package/packages/core/dist/packages/core/src/socialMessage.js +69 -0
  187. package/packages/core/dist/packages/core/src/socialResolver.d.ts +46 -0
  188. package/packages/core/dist/packages/core/src/socialResolver.js +237 -0
  189. package/packages/core/dist/packages/core/src/socialTemplate.d.ts +2 -0
  190. package/packages/core/dist/packages/core/src/socialTemplate.js +90 -0
  191. package/packages/core/dist/packages/core/src/types.d.ts +59 -0
  192. package/packages/core/dist/packages/core/src/types.js +2 -0
  193. package/packages/core/src/socialConfig.ts +7 -5
  194. package/packages/network/dist/config/silicaclaw-defaults.json +19 -0
  195. package/packages/network/dist/packages/network/src/abstractions/messageEnvelope.d.ts +28 -0
  196. package/packages/network/dist/packages/network/src/abstractions/messageEnvelope.js +36 -0
  197. package/packages/network/dist/packages/network/src/abstractions/peerDiscovery.d.ts +43 -0
  198. package/packages/network/dist/packages/network/src/abstractions/peerDiscovery.js +2 -0
  199. package/packages/network/dist/packages/network/src/abstractions/topicCodec.d.ts +4 -0
  200. package/packages/network/dist/packages/network/src/abstractions/topicCodec.js +2 -0
  201. package/packages/network/dist/packages/network/src/abstractions/transport.d.ts +36 -0
  202. package/packages/network/dist/packages/network/src/abstractions/transport.js +2 -0
  203. package/packages/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.d.ts +5 -0
  204. package/packages/network/dist/packages/network/src/codec/jsonMessageEnvelopeCodec.js +24 -0
  205. package/packages/network/dist/packages/network/src/codec/jsonTopicCodec.d.ts +5 -0
  206. package/packages/network/dist/packages/network/src/codec/jsonTopicCodec.js +12 -0
  207. package/packages/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.d.ts +28 -0
  208. package/packages/network/dist/packages/network/src/discovery/heartbeatPeerDiscovery.js +144 -0
  209. package/packages/network/dist/packages/network/src/index.d.ts +14 -0
  210. package/packages/network/dist/packages/network/src/index.js +30 -0
  211. package/packages/network/dist/packages/network/src/localEventBus.d.ts +9 -0
  212. package/packages/network/dist/packages/network/src/localEventBus.js +47 -0
  213. package/packages/network/dist/packages/network/src/mock.d.ts +8 -0
  214. package/packages/network/dist/packages/network/src/mock.js +24 -0
  215. package/packages/network/dist/packages/network/src/realPreview.d.ts +105 -0
  216. package/packages/network/dist/packages/network/src/realPreview.js +331 -0
  217. package/packages/network/dist/packages/network/src/relayPreview.d.ts +166 -0
  218. package/packages/network/dist/packages/network/src/relayPreview.js +448 -0
  219. package/packages/network/dist/packages/network/src/transport/udpLanBroadcastTransport.d.ts +23 -0
  220. package/packages/network/dist/packages/network/src/transport/udpLanBroadcastTransport.js +154 -0
  221. package/packages/network/dist/packages/network/src/types.d.ts +6 -0
  222. package/packages/network/dist/packages/network/src/types.js +2 -0
  223. package/packages/network/dist/packages/network/src/webrtcPreview.d.ts +163 -0
  224. package/packages/network/dist/packages/network/src/webrtcPreview.js +848 -0
  225. package/packages/network/src/realPreview.ts +3 -2
  226. package/packages/network/src/relayPreview.ts +5 -2
  227. package/packages/network/src/transport/udpLanBroadcastTransport.ts +2 -1
  228. package/packages/network/src/webrtcPreview.ts +2 -1
  229. package/packages/storage/config/silicaclaw-defaults.json +19 -0
  230. package/packages/storage/dist/config/silicaclaw-defaults.json +19 -0
  231. package/packages/storage/dist/packages/core/src/crypto.d.ts +6 -0
  232. package/packages/storage/dist/packages/core/src/crypto.js +50 -0
  233. package/packages/storage/dist/packages/core/src/directory.d.ts +17 -0
  234. package/packages/storage/dist/packages/core/src/directory.js +145 -0
  235. package/packages/storage/dist/packages/core/src/identity.d.ts +2 -0
  236. package/packages/storage/dist/packages/core/src/identity.js +18 -0
  237. package/packages/storage/dist/packages/core/src/index.d.ts +12 -0
  238. package/packages/storage/dist/packages/core/src/index.js +28 -0
  239. package/packages/storage/dist/packages/core/src/indexing.d.ts +6 -0
  240. package/packages/storage/dist/packages/core/src/indexing.js +43 -0
  241. package/packages/storage/dist/packages/core/src/presence.d.ts +4 -0
  242. package/packages/storage/dist/packages/core/src/presence.js +23 -0
  243. package/packages/storage/dist/packages/core/src/profile.d.ts +4 -0
  244. package/packages/storage/dist/packages/core/src/profile.js +39 -0
  245. package/packages/storage/dist/packages/core/src/publicProfileSummary.d.ts +70 -0
  246. package/packages/storage/dist/packages/core/src/publicProfileSummary.js +103 -0
  247. package/packages/storage/dist/packages/core/src/socialConfig.d.ts +100 -0
  248. package/packages/storage/dist/packages/core/src/socialConfig.js +300 -0
  249. package/packages/storage/dist/packages/core/src/socialMessage.d.ts +19 -0
  250. package/packages/storage/dist/packages/core/src/socialMessage.js +69 -0
  251. package/packages/storage/dist/packages/core/src/socialResolver.d.ts +46 -0
  252. package/packages/storage/dist/packages/core/src/socialResolver.js +237 -0
  253. package/packages/storage/dist/packages/core/src/socialTemplate.d.ts +2 -0
  254. package/packages/storage/dist/packages/core/src/socialTemplate.js +90 -0
  255. package/packages/storage/dist/packages/core/src/types.d.ts +59 -0
  256. package/packages/storage/dist/packages/core/src/types.js +2 -0
  257. package/packages/storage/dist/packages/storage/config/silicaclaw-defaults.json +19 -0
  258. package/packages/storage/dist/packages/storage/src/index.d.ts +3 -0
  259. package/packages/storage/dist/packages/storage/src/index.js +19 -0
  260. package/packages/storage/dist/packages/storage/src/jsonRepo.d.ts +7 -0
  261. package/packages/storage/dist/packages/storage/src/jsonRepo.js +29 -0
  262. package/packages/storage/dist/packages/storage/src/repos.d.ts +61 -0
  263. package/packages/storage/dist/packages/storage/src/repos.js +67 -0
  264. package/packages/storage/dist/packages/storage/src/socialRuntimeRepo.d.ts +5 -0
  265. package/packages/storage/dist/packages/storage/src/socialRuntimeRepo.js +57 -0
  266. package/packages/storage/dist/socialRuntimeRepo.js +8 -4
  267. package/packages/storage/src/socialRuntimeRepo.ts +5 -4
  268. package/packages/storage/tsconfig.json +1 -6
  269. package/scripts/functional-check.mjs +35 -6
  270. package/scripts/install-openclaw-skill.mjs +9 -2
  271. package/scripts/openclaw-bridge-adapter.mjs +3 -1
  272. package/scripts/openclaw-bridge-client.mjs +3 -1
  273. package/scripts/openclaw-runtime-demo.mjs +3 -1
  274. package/scripts/quickstart.sh +14 -10
  275. package/scripts/release-pack.mjs +59 -1
  276. package/scripts/silicaclaw-cli.mjs +162 -50
  277. package/scripts/silicaclaw-gateway.mjs +302 -84
  278. package/scripts/validate-openclaw-skill.mjs +79 -21
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { readFileSync } from "node:fs";
4
+ import { spawnSync } from "node:child_process";
5
+ import { resolve } from "node:path";
6
+
7
+ function requiredEnv(name) {
8
+ const value = String(process.env[name] || "").trim();
9
+ if (!value) {
10
+ throw new Error(`Missing required environment variable: ${name}`);
11
+ }
12
+ return value;
13
+ }
14
+
15
+ function resolveOpenClawCommand() {
16
+ const explicitBin = String(process.env.OPENCLAW_BIN || "").trim();
17
+ if (explicitBin) {
18
+ return { cmd: explicitBin, args: [] };
19
+ }
20
+
21
+ const sourceDir = String(process.env.OPENCLAW_SOURCE_DIR || "").trim();
22
+ if (sourceDir) {
23
+ return {
24
+ cmd: "node",
25
+ args: [resolve(sourceDir, "openclaw.mjs")],
26
+ };
27
+ }
28
+
29
+ return { cmd: "openclaw", args: [] };
30
+ }
31
+
32
+ function main() {
33
+ const payload = JSON.parse(readFileSync(0, "utf8"));
34
+ const channel = requiredEnv("OPENCLAW_OWNER_CHANNEL");
35
+ const target = requiredEnv("OPENCLAW_OWNER_TARGET");
36
+ const account = String(process.env.OPENCLAW_OWNER_ACCOUNT || "").trim();
37
+ const message = String(payload?.summary || "").trim();
38
+ if (!message) {
39
+ throw new Error("Missing summary in stdin payload");
40
+ }
41
+
42
+ const command = resolveOpenClawCommand();
43
+ const args = [
44
+ ...command.args,
45
+ "message",
46
+ "send",
47
+ "--channel",
48
+ channel,
49
+ "--target",
50
+ target,
51
+ "--message",
52
+ message,
53
+ ];
54
+ if (account) {
55
+ args.push("--account", account);
56
+ }
57
+
58
+ const result = spawnSync(command.cmd, args, {
59
+ stdio: "inherit",
60
+ env: process.env,
61
+ });
62
+
63
+ if (result.error) {
64
+ throw result.error;
65
+ }
66
+ process.exit(result.status ?? 1);
67
+ }
68
+
69
+ main();
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@silicaclaw/cli",
3
- "version": "2026.3.19-9",
3
+ "version": "2026.3.20-2",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "files": [
9
+ "config/**",
10
+ "dist/apps/local-console/**",
11
+ "dist/apps/public-explorer/**",
9
12
  "apps/local-console/package.json",
10
13
  "apps/local-console/dist/**",
11
14
  "apps/local-console/public/**",
@@ -25,6 +28,7 @@
25
28
  "packages/network/src/**",
26
29
  "packages/network/tsconfig.json",
27
30
  "packages/storage/package.json",
31
+ "packages/storage/config/**",
28
32
  "packages/storage/dist/**",
29
33
  "packages/storage/src/**",
30
34
  "packages/storage/tsconfig.json",
@@ -0,0 +1,19 @@
1
+ {
2
+ "ports": {
3
+ "local_console": 4310,
4
+ "public_explorer": 4311,
5
+ "openclaw_gateway": 18789,
6
+ "network_default": 44123
7
+ },
8
+ "network": {
9
+ "default_mode": "global-preview",
10
+ "default_namespace": "silicaclaw.preview",
11
+ "global_preview": {
12
+ "relay_url": "https://relay.silicaclaw.com",
13
+ "room": "silicaclaw-global-preview"
14
+ }
15
+ },
16
+ "bridge": {
17
+ "api_base": "http://localhost:4310"
18
+ }
19
+ }
@@ -0,0 +1,6 @@
1
+ export declare function toBase64(input: Uint8Array): string;
2
+ export declare function fromBase64(input: string): Uint8Array;
3
+ export declare function hashPublicKey(publicKey: Uint8Array): string;
4
+ export declare function stableStringify(input: unknown): string;
5
+ export declare function signPayload(payload: unknown, privateKeyBase64: string): string;
6
+ export declare function verifyPayload(payload: unknown, signatureBase64: string, publicKeyBase64: string): boolean;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.toBase64 = toBase64;
7
+ exports.fromBase64 = fromBase64;
8
+ exports.hashPublicKey = hashPublicKey;
9
+ exports.stableStringify = stableStringify;
10
+ exports.signPayload = signPayload;
11
+ exports.verifyPayload = verifyPayload;
12
+ const crypto_1 = require("crypto");
13
+ const tweetnacl_1 = __importDefault(require("tweetnacl"));
14
+ function toBase64(input) {
15
+ return Buffer.from(input).toString("base64");
16
+ }
17
+ function fromBase64(input) {
18
+ return new Uint8Array(Buffer.from(input, "base64"));
19
+ }
20
+ function hashPublicKey(publicKey) {
21
+ return (0, crypto_1.createHash)("sha256").update(publicKey).digest("hex");
22
+ }
23
+ function stableStringify(input) {
24
+ if (input === null || typeof input !== "object") {
25
+ return JSON.stringify(input);
26
+ }
27
+ if (Array.isArray(input)) {
28
+ return `[${input.map((item) => stableStringify(item)).join(",")}]`;
29
+ }
30
+ const entries = Object.entries(input)
31
+ .filter(([, value]) => value !== undefined)
32
+ .sort(([a], [b]) => a.localeCompare(b));
33
+ return `{${entries
34
+ .map(([key, value]) => `${JSON.stringify(key)}:${stableStringify(value)}`)
35
+ .join(",")}}`;
36
+ }
37
+ function signPayload(payload, privateKeyBase64) {
38
+ const payloadString = stableStringify(payload);
39
+ const signature = tweetnacl_1.default.sign.detached(Buffer.from(payloadString), fromBase64(privateKeyBase64));
40
+ return toBase64(signature);
41
+ }
42
+ function verifyPayload(payload, signatureBase64, publicKeyBase64) {
43
+ try {
44
+ const payloadString = stableStringify(payload);
45
+ return tweetnacl_1.default.sign.detached.verify(Buffer.from(payloadString), fromBase64(signatureBase64), fromBase64(publicKeyBase64));
46
+ }
47
+ catch {
48
+ return false;
49
+ }
50
+ }
@@ -0,0 +1,17 @@
1
+ import { DirectoryState, IndexRefRecord, PresenceRecord, PublicProfile, SignedProfileRecord } from "./types";
2
+ export declare const DEFAULT_PRESENCE_TTL_MS = 30000;
3
+ export declare function createEmptyDirectoryState(): DirectoryState;
4
+ export declare function ingestProfileRecord(state: DirectoryState, record: SignedProfileRecord): DirectoryState;
5
+ export declare function ingestPresenceRecord(state: DirectoryState, record: PresenceRecord): DirectoryState;
6
+ export declare function ingestIndexRecord(state: DirectoryState, record: IndexRefRecord): DirectoryState;
7
+ export declare function isAgentOnline(lastSeenAt: number | undefined, now?: number, ttlMs?: number): boolean;
8
+ export declare function cleanupExpiredPresence(state: DirectoryState, now?: number, ttlMs?: number): {
9
+ state: DirectoryState;
10
+ removed: number;
11
+ };
12
+ export declare function rebuildIndexForProfile(state: DirectoryState, profile: PublicProfile): DirectoryState;
13
+ export declare function dedupeIndex(state: DirectoryState): DirectoryState;
14
+ export declare function searchDirectory(state: DirectoryState, keyword: string, options?: {
15
+ now?: number;
16
+ presenceTTLms?: number;
17
+ }): PublicProfile[];
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PRESENCE_TTL_MS = void 0;
4
+ exports.createEmptyDirectoryState = createEmptyDirectoryState;
5
+ exports.ingestProfileRecord = ingestProfileRecord;
6
+ exports.ingestPresenceRecord = ingestPresenceRecord;
7
+ exports.ingestIndexRecord = ingestIndexRecord;
8
+ exports.isAgentOnline = isAgentOnline;
9
+ exports.cleanupExpiredPresence = cleanupExpiredPresence;
10
+ exports.rebuildIndexForProfile = rebuildIndexForProfile;
11
+ exports.dedupeIndex = dedupeIndex;
12
+ exports.searchDirectory = searchDirectory;
13
+ const indexing_1 = require("./indexing");
14
+ exports.DEFAULT_PRESENCE_TTL_MS = 30_000;
15
+ function createEmptyDirectoryState() {
16
+ return {
17
+ profiles: {},
18
+ presence: {},
19
+ index: {},
20
+ };
21
+ }
22
+ function ingestProfileRecord(state, record) {
23
+ const next = {
24
+ profiles: { ...state.profiles },
25
+ presence: { ...state.presence },
26
+ index: { ...state.index },
27
+ };
28
+ next.profiles[record.profile.agent_id] = record.profile;
29
+ return rebuildIndexForProfile(next, record.profile);
30
+ }
31
+ function ingestPresenceRecord(state, record) {
32
+ return {
33
+ profiles: { ...state.profiles },
34
+ presence: {
35
+ ...state.presence,
36
+ [record.agent_id]: record.timestamp,
37
+ },
38
+ index: { ...state.index },
39
+ };
40
+ }
41
+ function ingestIndexRecord(state, record) {
42
+ const existing = new Set(state.index[record.key] ?? []);
43
+ if (existing.has(record.agent_id)) {
44
+ return state;
45
+ }
46
+ existing.add(record.agent_id);
47
+ return {
48
+ profiles: { ...state.profiles },
49
+ presence: { ...state.presence },
50
+ index: {
51
+ ...state.index,
52
+ [record.key]: Array.from(existing),
53
+ },
54
+ };
55
+ }
56
+ function isAgentOnline(lastSeenAt, now = Date.now(), ttlMs = exports.DEFAULT_PRESENCE_TTL_MS) {
57
+ if (!lastSeenAt) {
58
+ return false;
59
+ }
60
+ return now - lastSeenAt <= ttlMs;
61
+ }
62
+ function cleanupExpiredPresence(state, now = Date.now(), ttlMs = exports.DEFAULT_PRESENCE_TTL_MS) {
63
+ let removed = 0;
64
+ const presence = {};
65
+ for (const [agentId, timestamp] of Object.entries(state.presence)) {
66
+ if (isAgentOnline(timestamp, now, ttlMs)) {
67
+ presence[agentId] = timestamp;
68
+ }
69
+ else {
70
+ removed += 1;
71
+ }
72
+ }
73
+ if (removed === 0) {
74
+ return { state, removed: 0 };
75
+ }
76
+ return {
77
+ state: {
78
+ profiles: { ...state.profiles },
79
+ presence,
80
+ index: { ...state.index },
81
+ },
82
+ removed,
83
+ };
84
+ }
85
+ function rebuildIndexForProfile(state, profile) {
86
+ const keys = (0, indexing_1.buildIndexKeys)(profile);
87
+ const nextIndex = {};
88
+ for (const [key, ids] of Object.entries(state.index)) {
89
+ const filtered = ids.filter((id) => id !== profile.agent_id);
90
+ if (filtered.length > 0) {
91
+ nextIndex[key] = Array.from(new Set(filtered));
92
+ }
93
+ }
94
+ for (const key of keys) {
95
+ const existing = new Set(nextIndex[key] ?? []);
96
+ existing.add(profile.agent_id);
97
+ nextIndex[key] = Array.from(existing);
98
+ }
99
+ return {
100
+ profiles: { ...state.profiles },
101
+ presence: { ...state.presence },
102
+ index: nextIndex,
103
+ };
104
+ }
105
+ function dedupeIndex(state) {
106
+ const index = {};
107
+ for (const [key, ids] of Object.entries(state.index)) {
108
+ index[key] = Array.from(new Set(ids));
109
+ }
110
+ return {
111
+ profiles: { ...state.profiles },
112
+ presence: { ...state.presence },
113
+ index,
114
+ };
115
+ }
116
+ function searchDirectory(state, keyword, options) {
117
+ const now = options?.now ?? Date.now();
118
+ const presenceTTLms = options?.presenceTTLms ?? exports.DEFAULT_PRESENCE_TTL_MS;
119
+ const normalized = keyword.trim().toLowerCase();
120
+ const baseList = normalized.length === 0
121
+ ? Object.values(state.profiles)
122
+ : Array.from(new Set([
123
+ ...(state.index[`tag:${normalized}`] ?? []),
124
+ ...(state.index[`name:${normalized.replace(/[^a-z0-9]+/g, "")}`] ?? []),
125
+ ]))
126
+ .map((agentId) => state.profiles[agentId])
127
+ .filter((profile) => Boolean(profile));
128
+ return baseList
129
+ .slice()
130
+ .sort((a, b) => {
131
+ const aOnline = isAgentOnline(state.presence[a.agent_id], now, presenceTTLms) ? 1 : 0;
132
+ const bOnline = isAgentOnline(state.presence[b.agent_id], now, presenceTTLms) ? 1 : 0;
133
+ if (aOnline !== bOnline) {
134
+ return bOnline - aOnline;
135
+ }
136
+ if (a.updated_at !== b.updated_at) {
137
+ return b.updated_at - a.updated_at;
138
+ }
139
+ const byName = a.display_name.localeCompare(b.display_name);
140
+ if (byName !== 0) {
141
+ return byName;
142
+ }
143
+ return a.agent_id.localeCompare(b.agent_id);
144
+ });
145
+ }
@@ -0,0 +1,2 @@
1
+ import { AgentIdentity } from "./types";
2
+ export declare function createIdentity(now?: number): AgentIdentity;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createIdentity = createIdentity;
7
+ const tweetnacl_1 = __importDefault(require("tweetnacl"));
8
+ const crypto_1 = require("./crypto");
9
+ function createIdentity(now = Date.now()) {
10
+ const pair = tweetnacl_1.default.sign.keyPair();
11
+ const publicKey = (0, crypto_1.toBase64)(pair.publicKey);
12
+ return {
13
+ agent_id: (0, crypto_1.hashPublicKey)(pair.publicKey),
14
+ public_key: publicKey,
15
+ private_key: (0, crypto_1.toBase64)(pair.secretKey),
16
+ created_at: now,
17
+ };
18
+ }
@@ -0,0 +1,12 @@
1
+ export * from "./types";
2
+ export * from "./crypto";
3
+ export * from "./identity";
4
+ export * from "./profile";
5
+ export * from "./presence";
6
+ export * from "./socialMessage";
7
+ export * from "./indexing";
8
+ export * from "./directory";
9
+ export * from "./publicProfileSummary";
10
+ export * from "./socialConfig";
11
+ export * from "./socialResolver";
12
+ export * from "./socialTemplate";
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./crypto"), exports);
19
+ __exportStar(require("./identity"), exports);
20
+ __exportStar(require("./profile"), exports);
21
+ __exportStar(require("./presence"), exports);
22
+ __exportStar(require("./socialMessage"), exports);
23
+ __exportStar(require("./indexing"), exports);
24
+ __exportStar(require("./directory"), exports);
25
+ __exportStar(require("./publicProfileSummary"), exports);
26
+ __exportStar(require("./socialConfig"), exports);
27
+ __exportStar(require("./socialResolver"), exports);
28
+ __exportStar(require("./socialTemplate"), exports);
@@ -0,0 +1,6 @@
1
+ import { IndexRefRecord, PublicProfile } from "./types";
2
+ export declare function normalizeTag(tag: string): string;
3
+ export declare function buildTagIndexKeys(tags: string[]): string[];
4
+ export declare function buildNamePrefixKeys(displayName: string): string[];
5
+ export declare function buildIndexKeys(profile: PublicProfile): string[];
6
+ export declare function buildIndexRecords(profile: PublicProfile): IndexRefRecord[];
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeTag = normalizeTag;
4
+ exports.buildTagIndexKeys = buildTagIndexKeys;
5
+ exports.buildNamePrefixKeys = buildNamePrefixKeys;
6
+ exports.buildIndexKeys = buildIndexKeys;
7
+ exports.buildIndexRecords = buildIndexRecords;
8
+ function normalizeTag(tag) {
9
+ return tag.trim().toLowerCase();
10
+ }
11
+ function buildTagIndexKeys(tags) {
12
+ return tags
13
+ .map(normalizeTag)
14
+ .filter(Boolean)
15
+ .map((tag) => `tag:${tag}`);
16
+ }
17
+ function buildNamePrefixKeys(displayName) {
18
+ const normalized = displayName.trim().toLowerCase().replace(/\s+/g, " ");
19
+ const collapsed = normalized.replace(/[^a-z0-9]+/g, "");
20
+ const source = collapsed || normalized.replace(/\s+/g, "");
21
+ const keys = [];
22
+ for (let i = 1; i <= source.length; i += 1) {
23
+ keys.push(`name:${source.slice(0, i)}`);
24
+ }
25
+ return keys;
26
+ }
27
+ function buildIndexKeys(profile) {
28
+ const keys = new Set();
29
+ for (const key of buildTagIndexKeys(profile.tags)) {
30
+ keys.add(key);
31
+ }
32
+ for (const key of buildNamePrefixKeys(profile.display_name)) {
33
+ keys.add(key);
34
+ }
35
+ return Array.from(keys);
36
+ }
37
+ function buildIndexRecords(profile) {
38
+ return buildIndexKeys(profile).map((key) => ({
39
+ type: "index",
40
+ key,
41
+ agent_id: profile.agent_id,
42
+ }));
43
+ }
@@ -0,0 +1,4 @@
1
+ import { AgentIdentity } from "./types";
2
+ import { PresenceRecord } from "./types";
3
+ export declare function signPresence(identity: AgentIdentity, timestamp?: number): PresenceRecord;
4
+ export declare function verifyPresence(record: PresenceRecord, publicKey: string): boolean;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signPresence = signPresence;
4
+ exports.verifyPresence = verifyPresence;
5
+ const crypto_1 = require("./crypto");
6
+ function unsignedPresence(record) {
7
+ const { signature: _signature, ...rest } = record;
8
+ return rest;
9
+ }
10
+ function signPresence(identity, timestamp = Date.now()) {
11
+ const payload = {
12
+ type: "presence",
13
+ agent_id: identity.agent_id,
14
+ timestamp,
15
+ };
16
+ return {
17
+ ...payload,
18
+ signature: (0, crypto_1.signPayload)(payload, identity.private_key),
19
+ };
20
+ }
21
+ function verifyPresence(record, publicKey) {
22
+ return (0, crypto_1.verifyPayload)(unsignedPresence(record), record.signature, publicKey);
23
+ }
@@ -0,0 +1,4 @@
1
+ import { AgentIdentity, ProfileInput, PublicProfile } from "./types";
2
+ export declare function signProfile(input: ProfileInput, identity: AgentIdentity): PublicProfile;
3
+ export declare function verifyProfile(profile: PublicProfile, publicKey: string): boolean;
4
+ export declare function createDefaultProfileInput(agentId: string): ProfileInput;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signProfile = signProfile;
4
+ exports.verifyProfile = verifyProfile;
5
+ exports.createDefaultProfileInput = createDefaultProfileInput;
6
+ const crypto_1 = require("./crypto");
7
+ function payloadWithoutSignature(profile) {
8
+ const { signature: _signature, ...payload } = profile;
9
+ return payload;
10
+ }
11
+ function signProfile(input, identity) {
12
+ const unsigned = {
13
+ agent_id: input.agent_id,
14
+ display_name: input.display_name,
15
+ bio: input.bio,
16
+ tags: input.tags,
17
+ avatar_url: input.avatar_url,
18
+ public_enabled: input.public_enabled,
19
+ updated_at: Date.now(),
20
+ };
21
+ const signature = (0, crypto_1.signPayload)(unsigned, identity.private_key);
22
+ return {
23
+ ...unsigned,
24
+ signature,
25
+ };
26
+ }
27
+ function verifyProfile(profile, publicKey) {
28
+ return (0, crypto_1.verifyPayload)(payloadWithoutSignature(profile), profile.signature, publicKey);
29
+ }
30
+ function createDefaultProfileInput(agentId) {
31
+ return {
32
+ agent_id: agentId,
33
+ display_name: "",
34
+ bio: "",
35
+ tags: [],
36
+ avatar_url: "",
37
+ public_enabled: false,
38
+ };
39
+ }
@@ -0,0 +1,70 @@
1
+ import { PublicProfile } from "./types";
2
+ export type CapabilityKey = "browser" | "computer" | "research" | "openclaw";
3
+ export type ProfileVisibility = {
4
+ show_tags: boolean;
5
+ show_last_seen: boolean;
6
+ show_capabilities_summary: boolean;
7
+ };
8
+ export type PublicProfileSummary = {
9
+ agent_id: string;
10
+ display_name: string;
11
+ bio: string;
12
+ avatar_url?: string;
13
+ public_enabled: boolean;
14
+ updated_at: number;
15
+ online: boolean;
16
+ last_seen_at: number | null;
17
+ tags: string[];
18
+ network_mode: string;
19
+ openclaw_bound: boolean;
20
+ capabilities_summary: string[];
21
+ profile_version: string;
22
+ public_key_fingerprint: string | null;
23
+ profile_updated_at: number;
24
+ presence_seen_at: number | null;
25
+ freshness_status: "live" | "recently_seen" | "stale";
26
+ verified_profile: boolean;
27
+ verified_presence_recent: boolean;
28
+ verification_status: "verified" | "stale" | "unverified";
29
+ signed_claims: {
30
+ display_name: string;
31
+ bio: string;
32
+ avatar_url?: string;
33
+ tags: string[];
34
+ public_enabled: boolean;
35
+ profile_version: string;
36
+ profile_updated_at: number;
37
+ public_key_fingerprint: string | null;
38
+ verified_profile: boolean;
39
+ };
40
+ observed_state: {
41
+ online: boolean;
42
+ freshness_status: "live" | "recently_seen" | "stale";
43
+ presence_seen_at: number | null;
44
+ verified_presence_recent: boolean;
45
+ };
46
+ integration_metadata: {
47
+ network_mode: string;
48
+ openclaw_bound: boolean;
49
+ verification_status: "verified" | "stale" | "unverified";
50
+ };
51
+ public_visibility: {
52
+ visible_fields: string[];
53
+ hidden_fields: string[];
54
+ };
55
+ visibility: ProfileVisibility;
56
+ };
57
+ export declare function deriveCapabilitiesSummary(tags: string[]): string[];
58
+ export declare function buildPublicProfileSummary(args: {
59
+ profile: PublicProfile;
60
+ online: boolean;
61
+ last_seen_at: number | null;
62
+ network_mode?: string;
63
+ openclaw_bound?: boolean;
64
+ visibility?: Partial<ProfileVisibility>;
65
+ profile_version?: string;
66
+ public_key_fingerprint?: string | null;
67
+ verified_profile?: boolean;
68
+ now?: number;
69
+ presence_ttl_ms?: number;
70
+ }): PublicProfileSummary;