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