@silicaclaw/cli 2026.3.19-9 → 2026.3.20-10
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 +182 -0
- package/DEMO_GUIDE.md +1 -1
- package/INSTALL.md +53 -13
- package/README.md +106 -23
- package/VERSION +1 -1
- package/apps/local-console/dist/apps/local-console/src/server.d.ts +180 -14
- package/apps/local-console/dist/apps/local-console/src/server.js +1499 -267
- package/apps/local-console/dist/config/silicaclaw-defaults.json +19 -0
- package/apps/local-console/dist/packages/core/src/index.d.ts +2 -0
- package/apps/local-console/dist/packages/core/src/index.js +2 -0
- package/apps/local-console/dist/packages/core/src/privateCrypto.d.ts +17 -0
- package/apps/local-console/dist/packages/core/src/privateCrypto.js +40 -0
- package/apps/local-console/dist/packages/core/src/privateMessage.d.ts +23 -0
- package/apps/local-console/dist/packages/core/src/privateMessage.js +74 -0
- package/apps/local-console/dist/packages/core/src/profile.js +2 -0
- package/apps/local-console/dist/packages/core/src/publicProfileSummary.d.ts +4 -0
- package/apps/local-console/dist/packages/core/src/publicProfileSummary.js +3 -0
- package/apps/local-console/dist/packages/core/src/socialConfig.js +9 -5
- package/apps/local-console/dist/packages/core/src/types.d.ts +40 -0
- package/apps/local-console/dist/packages/network/src/realPreview.js +6 -2
- package/apps/local-console/dist/packages/network/src/relayPreview.d.ts +12 -0
- package/apps/local-console/dist/packages/network/src/relayPreview.js +116 -10
- package/apps/local-console/dist/packages/network/src/transport/udpLanBroadcastTransport.js +2 -1
- package/apps/local-console/dist/packages/network/src/types.d.ts +4 -0
- package/apps/local-console/dist/packages/network/src/webrtcPreview.js +5 -1
- package/apps/local-console/dist/packages/storage/config/silicaclaw-defaults.json +19 -0
- package/apps/local-console/dist/packages/storage/src/repos.d.ts +13 -1
- package/apps/local-console/dist/packages/storage/src/repos.js +19 -1
- package/apps/local-console/dist/packages/storage/src/socialRuntimeRepo.js +8 -4
- package/apps/local-console/public/app/app.js +486 -12
- package/apps/local-console/public/app/events.js +61 -2
- package/apps/local-console/public/app/network.js +176 -35
- package/apps/local-console/public/app/overview.js +75 -53
- package/apps/local-console/public/app/shell.js +18 -34
- package/apps/local-console/public/app/social.js +495 -93
- package/apps/local-console/public/app/styles.css +309 -15
- package/apps/local-console/public/app/template.js +182 -51
- package/apps/local-console/public/app/translations.js +476 -266
- package/apps/local-console/src/server.ts +1669 -271
- 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/public/app/app.js +22 -2
- package/apps/public-explorer/public/app/template.js +4 -4
- package/apps/public-explorer/public/app/translations.js +29 -29
- 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 +9 -9
- package/docs/OPENCLAW_BRIDGE.md +22 -7
- package/docs/OPENCLAW_BRIDGE_ZH.md +21 -6
- package/docs/RELEASE_CHECKLIST.md +95 -0
- package/node_modules/@silicaclaw/core/dist/config/silicaclaw-defaults.json +19 -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 +14 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/index.js +30 -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/privateCrypto.d.ts +17 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/privateCrypto.js +40 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/privateMessage.d.ts +23 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/privateMessage.js +74 -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 +41 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.d.ts +74 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/publicProfileSummary.js +106 -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 +99 -0
- package/node_modules/@silicaclaw/core/dist/packages/core/src/types.js +2 -0
- package/node_modules/@silicaclaw/core/src/index.ts +2 -0
- package/node_modules/@silicaclaw/core/src/privateCrypto.ts +57 -0
- package/node_modules/@silicaclaw/core/src/privateMessage.ts +101 -0
- package/node_modules/@silicaclaw/core/src/profile.ts +2 -0
- package/node_modules/@silicaclaw/core/src/publicProfileSummary.ts +7 -0
- package/node_modules/@silicaclaw/core/src/socialConfig.ts +7 -5
- package/node_modules/@silicaclaw/core/src/types.ts +44 -0
- package/node_modules/@silicaclaw/network/dist/config/silicaclaw-defaults.json +19 -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 +178 -0
- package/node_modules/@silicaclaw/network/dist/packages/network/src/relayPreview.js +548 -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 +10 -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/src/realPreview.ts +3 -2
- package/node_modules/@silicaclaw/network/src/relayPreview.ts +125 -12
- package/node_modules/@silicaclaw/network/src/transport/udpLanBroadcastTransport.ts +2 -1
- package/node_modules/@silicaclaw/network/src/types.ts +2 -0
- package/node_modules/@silicaclaw/network/src/webrtcPreview.ts +2 -1
- 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/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 +14 -0
- package/node_modules/@silicaclaw/storage/dist/packages/core/src/index.js +30 -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/privateCrypto.d.ts +17 -0
- package/node_modules/@silicaclaw/storage/dist/packages/core/src/privateCrypto.js +40 -0
- package/node_modules/@silicaclaw/storage/dist/packages/core/src/privateMessage.d.ts +23 -0
- package/node_modules/@silicaclaw/storage/dist/packages/core/src/privateMessage.js +74 -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 +41 -0
- package/node_modules/@silicaclaw/storage/dist/packages/core/src/publicProfileSummary.d.ts +74 -0
- package/node_modules/@silicaclaw/storage/dist/packages/core/src/publicProfileSummary.js +106 -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 +99 -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 +73 -0
- package/node_modules/@silicaclaw/storage/dist/packages/storage/src/repos.js +85 -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/socialRuntimeRepo.js +8 -4
- package/node_modules/@silicaclaw/storage/src/repos.ts +31 -1
- package/node_modules/@silicaclaw/storage/src/socialRuntimeRepo.ts +5 -4
- package/node_modules/@silicaclaw/storage/tsconfig.json +1 -6
- package/openclaw-skills/silicaclaw-bridge-setup/SKILL.md +165 -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 +150 -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 +4 -3
- package/openclaw-skills/silicaclaw-broadcast/references/owner-dialogue-cheatsheet-zh.md +81 -0
- package/openclaw-skills/silicaclaw-network-config/SKILL.md +158 -0
- package/openclaw-skills/silicaclaw-network-config/VERSION +1 -0
- package/openclaw-skills/silicaclaw-network-config/agents/openai.yaml +6 -0
- package/openclaw-skills/silicaclaw-network-config/manifest.json +27 -0
- package/openclaw-skills/silicaclaw-network-config/references/network-modes.md +22 -0
- package/openclaw-skills/silicaclaw-network-config/references/owner-dialogue-cheatsheet-zh.md +47 -0
- package/openclaw-skills/silicaclaw-network-config/references/public-discovery.md +22 -0
- package/openclaw-skills/silicaclaw-owner-push/SKILL.md +235 -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 +44 -0
- package/openclaw-skills/silicaclaw-owner-push/scripts/owner-push-forwarder.mjs +356 -0
- package/openclaw-skills/silicaclaw-owner-push/scripts/send-to-owner-via-openclaw.mjs +69 -0
- package/package.json +5 -1
- 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 +14 -0
- package/packages/core/dist/packages/core/src/index.js +30 -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/privateCrypto.d.ts +17 -0
- package/packages/core/dist/packages/core/src/privateCrypto.js +40 -0
- package/packages/core/dist/packages/core/src/privateMessage.d.ts +23 -0
- package/packages/core/dist/packages/core/src/privateMessage.js +74 -0
- package/packages/core/dist/packages/core/src/profile.d.ts +4 -0
- package/packages/core/dist/packages/core/src/profile.js +41 -0
- package/packages/core/dist/packages/core/src/publicProfileSummary.d.ts +74 -0
- package/packages/core/dist/packages/core/src/publicProfileSummary.js +106 -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 +99 -0
- package/packages/core/dist/packages/core/src/types.js +2 -0
- package/packages/core/src/index.ts +2 -0
- package/packages/core/src/privateCrypto.ts +57 -0
- package/packages/core/src/privateMessage.ts +101 -0
- package/packages/core/src/profile.ts +2 -0
- package/packages/core/src/publicProfileSummary.ts +7 -0
- package/packages/core/src/socialConfig.ts +7 -5
- package/packages/core/src/types.ts +44 -0
- 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 +178 -0
- package/packages/network/dist/packages/network/src/relayPreview.js +548 -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 +10 -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 +125 -12
- package/packages/network/src/transport/udpLanBroadcastTransport.ts +2 -1
- package/packages/network/src/types.ts +2 -0
- 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 +14 -0
- package/packages/storage/dist/packages/core/src/index.js +30 -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/privateCrypto.d.ts +17 -0
- package/packages/storage/dist/packages/core/src/privateCrypto.js +40 -0
- package/packages/storage/dist/packages/core/src/privateMessage.d.ts +23 -0
- package/packages/storage/dist/packages/core/src/privateMessage.js +74 -0
- package/packages/storage/dist/packages/core/src/profile.d.ts +4 -0
- package/packages/storage/dist/packages/core/src/profile.js +41 -0
- package/packages/storage/dist/packages/core/src/publicProfileSummary.d.ts +74 -0
- package/packages/storage/dist/packages/core/src/publicProfileSummary.js +106 -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 +99 -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 +73 -0
- package/packages/storage/dist/packages/storage/src/repos.js +85 -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/repos.ts +31 -1
- 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 +59 -1
- package/scripts/silicaclaw-cli.mjs +166 -51
- package/scripts/silicaclaw-gateway.mjs +410 -84
- package/scripts/validate-openclaw-skill.mjs +98 -21
|
@@ -7,6 +7,7 @@ export function bindAppEvents({
|
|
|
7
7
|
parseCsv,
|
|
8
8
|
profileController,
|
|
9
9
|
pulseOverviewBroadcastStep,
|
|
10
|
+
clearUiCache,
|
|
10
11
|
refreshAll,
|
|
11
12
|
refreshLogs,
|
|
12
13
|
refreshMessages,
|
|
@@ -30,6 +31,7 @@ export function bindAppEvents({
|
|
|
30
31
|
t,
|
|
31
32
|
toast,
|
|
32
33
|
getSocialTemplate,
|
|
34
|
+
getQuickConnectDefaults,
|
|
33
35
|
setAgentsPage,
|
|
34
36
|
getSocialMessagesCache,
|
|
35
37
|
toPrettyJson,
|
|
@@ -194,9 +196,12 @@ export function bindAppEvents({
|
|
|
194
196
|
document.getElementById("broadcastNowBtn").addEventListener("click", () => runAction("/api/broadcast/now", t("actions.broadcastNow")));
|
|
195
197
|
|
|
196
198
|
document.getElementById("quickGlobalPreviewBtn").addEventListener("click", async () => {
|
|
197
|
-
const
|
|
199
|
+
const quickConnectDefaults = typeof getQuickConnectDefaults === "function"
|
|
200
|
+
? getQuickConnectDefaults()
|
|
201
|
+
: { signalingUrl: "http://localhost:4510", room: "" };
|
|
202
|
+
const currentSignaling = window.prompt(t("feedback.promptSignalingUrl"), quickConnectDefaults.signalingUrl || "http://localhost:4510");
|
|
198
203
|
if (!currentSignaling) return;
|
|
199
|
-
const room = window.prompt(t("feedback.promptRoom"), "
|
|
204
|
+
const room = window.prompt(t("feedback.promptRoom"), quickConnectDefaults.room || "") || quickConnectDefaults.room || "";
|
|
200
205
|
setFeedback("networkFeedback", t("feedback.crossPreviewEnabling"));
|
|
201
206
|
try {
|
|
202
207
|
const result = await api("/api/network/quick-connect-global-preview", {
|
|
@@ -223,6 +228,7 @@ export function bindAppEvents({
|
|
|
223
228
|
document.getElementById("clearDiscoveryCacheBtn").addEventListener("click", async () => {
|
|
224
229
|
try {
|
|
225
230
|
await api("/api/cache/clear", { method: "POST" });
|
|
231
|
+
clearUiCache(["silicaclaw_ui_overview", "silicaclaw_ui_network", "silicaclaw_ui_social"]);
|
|
226
232
|
setFeedback("networkFeedback", t("feedback.discoveryCacheCleared"));
|
|
227
233
|
toast(t("feedback.discoveryCacheCleared"));
|
|
228
234
|
setAgentsPage(1);
|
|
@@ -281,6 +287,59 @@ export function bindAppEvents({
|
|
|
281
287
|
}
|
|
282
288
|
});
|
|
283
289
|
|
|
290
|
+
document.getElementById("skillsBundledGrid").addEventListener("click", async (event) => {
|
|
291
|
+
const btn = event.target instanceof Element ? event.target.closest("[data-skill-install]") : null;
|
|
292
|
+
if (!btn) return;
|
|
293
|
+
const skillName = String(btn.getAttribute("data-skill-install") || "").trim();
|
|
294
|
+
if (!skillName) return;
|
|
295
|
+
btn.setAttribute("disabled", "true");
|
|
296
|
+
setFeedback("skillsFeedback", `${t("common.saving")} ${skillName}`);
|
|
297
|
+
try {
|
|
298
|
+
await api("/api/openclaw/bridge/skill-install", {
|
|
299
|
+
method: "POST",
|
|
300
|
+
body: JSON.stringify({ skill_name: skillName }),
|
|
301
|
+
});
|
|
302
|
+
setFeedback("skillsFeedback", t("feedback.openclawSkillInstalled"));
|
|
303
|
+
toast(`${t("feedback.openclawSkillInstalled")} · ${skillName}`);
|
|
304
|
+
await refreshSkills();
|
|
305
|
+
await refreshSocial();
|
|
306
|
+
} catch (e) {
|
|
307
|
+
setFeedback("skillsFeedback", e instanceof Error ? e.message : t("feedback.openclawSkillInstallFailed"), "error");
|
|
308
|
+
} finally {
|
|
309
|
+
btn.removeAttribute("disabled");
|
|
310
|
+
await refreshSkills().catch(() => {});
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
document.querySelectorAll("[data-skills-jump]").forEach((btn) => {
|
|
315
|
+
btn.addEventListener("click", () => {
|
|
316
|
+
const targetId = String(btn.getAttribute("data-skills-jump") || "").trim();
|
|
317
|
+
if (!targetId) return;
|
|
318
|
+
document.getElementById(targetId)?.scrollIntoView({ behavior: "smooth", block: "start" });
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
document.getElementById("skillsSearchInput").addEventListener("input", async (event) => {
|
|
323
|
+
socialController.setSkillsQuery(String(event.target?.value || ""));
|
|
324
|
+
await refreshSkills();
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
document.querySelectorAll("[data-skills-filter]").forEach((btn) => {
|
|
328
|
+
btn.addEventListener("click", async () => {
|
|
329
|
+
socialController.setSkillsFilter(String(btn.getAttribute("data-skills-filter") || "all"));
|
|
330
|
+
await refreshSkills();
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
document.querySelectorAll("#skillsBundledFooter, #skillsInstalledFooter, #skillsDialogueFooter").forEach((footer) => {
|
|
335
|
+
footer.addEventListener("click", async (event) => {
|
|
336
|
+
const btn = event.target instanceof Element ? event.target.closest("[data-skills-toggle]") : null;
|
|
337
|
+
if (!btn) return;
|
|
338
|
+
socialController.toggleSkillsExpanded(String(btn.getAttribute("data-skills-toggle") || ""));
|
|
339
|
+
await refreshSkills();
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
|
|
284
343
|
document.getElementById("saveGovernanceBtn").addEventListener("click", async () => {
|
|
285
344
|
setFeedback("socialGovernanceFeedback", t("common.saving"));
|
|
286
345
|
try {
|
|
@@ -8,6 +8,27 @@ export function createNetworkController({
|
|
|
8
8
|
toPrettyJson,
|
|
9
9
|
writeUiCache,
|
|
10
10
|
}) {
|
|
11
|
+
const fallbackQuickConnectDefaults = {
|
|
12
|
+
signalingUrl: "http://localhost:4510",
|
|
13
|
+
room: "",
|
|
14
|
+
};
|
|
15
|
+
let quickConnectDefaults = { ...fallbackQuickConnectDefaults };
|
|
16
|
+
let lastNetworkRenderKey = "";
|
|
17
|
+
let lastPeersRenderKey = "";
|
|
18
|
+
let lastDiscoveryRenderKey = "";
|
|
19
|
+
|
|
20
|
+
function queueState(value) {
|
|
21
|
+
const n = Number(value || 0);
|
|
22
|
+
if (n >= 100) return { tone: "danger", label: t("labels.queueHigh") };
|
|
23
|
+
if (n >= 20) return { tone: "warn", label: t("labels.queueWatch") };
|
|
24
|
+
return { tone: "ok", label: t("labels.queueHealthy") };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function queueBadge(value) {
|
|
28
|
+
const state = queueState(value);
|
|
29
|
+
return `<span class="pill ${state.tone}">${Number(value || 0)} · ${state.label}</span>`;
|
|
30
|
+
}
|
|
31
|
+
|
|
11
32
|
async function refreshNetwork() {
|
|
12
33
|
const [cfg, sts, rtp] = await Promise.all([api("/api/network/config"), api("/api/network/stats"), api("/api/runtime/paths")]);
|
|
13
34
|
const c = cfg.data;
|
|
@@ -19,10 +40,36 @@ export function createNetworkController({
|
|
|
19
40
|
const transportStats = s.adapter_transport_stats || {};
|
|
20
41
|
const d = s.adapter_discovery_stats || {};
|
|
21
42
|
const dx = s.adapter_diagnostics_summary || {};
|
|
43
|
+
const runtimeDiag = s.runtime_diagnostics || {};
|
|
44
|
+
const runtimeMemory = runtimeDiag.memory_mib || {};
|
|
45
|
+
const runtimeDirectory = runtimeDiag.directory || {};
|
|
46
|
+
const runtimeSocial = runtimeDiag.social || {};
|
|
22
47
|
const ac = s.adapter_config || c.adapter_config || {};
|
|
48
|
+
quickConnectDefaults = {
|
|
49
|
+
signalingUrl: String(
|
|
50
|
+
dx.signaling_url ||
|
|
51
|
+
c.signaling_url ||
|
|
52
|
+
c.adapter_extra?.signaling_url ||
|
|
53
|
+
quickConnectDefaults.signalingUrl ||
|
|
54
|
+
fallbackQuickConnectDefaults.signalingUrl
|
|
55
|
+
),
|
|
56
|
+
room: String(
|
|
57
|
+
dx.room ||
|
|
58
|
+
c.room ||
|
|
59
|
+
c.adapter_extra?.room ||
|
|
60
|
+
quickConnectDefaults.room ||
|
|
61
|
+
fallbackQuickConnectDefaults.room
|
|
62
|
+
),
|
|
63
|
+
};
|
|
64
|
+
const relayCapable = c.adapter === "relay-preview" || c.adapter === "webrtc-preview";
|
|
65
|
+
const relayHealth = relayCapable
|
|
66
|
+
? (dx.last_error ? t("network.degraded") : t("network.connected"))
|
|
67
|
+
: "-";
|
|
23
68
|
document.getElementById("heroAdapter").textContent = c.adapter || "-";
|
|
24
|
-
document.getElementById("heroRelay")
|
|
25
|
-
document.getElementById("heroRoom")
|
|
69
|
+
const heroRelayEl = document.getElementById("heroRelay");
|
|
70
|
+
const heroRoomEl = document.getElementById("heroRoom");
|
|
71
|
+
if (heroRelayEl) heroRelayEl.textContent = dx.signaling_url || "-";
|
|
72
|
+
if (heroRoomEl) heroRoomEl.textContent = dx.room || "-";
|
|
26
73
|
|
|
27
74
|
document.getElementById("pillAdapter").textContent = `${t("labels.adapter")}: ${c.adapter || "-"}`;
|
|
28
75
|
writeUiCache("silicaclaw_ui_network", {
|
|
@@ -31,7 +78,7 @@ export function createNetworkController({
|
|
|
31
78
|
heroRoomText: dx.room || "-",
|
|
32
79
|
pillAdapterText: `${t("labels.adapter")}: ${c.adapter || "-"}`,
|
|
33
80
|
});
|
|
34
|
-
|
|
81
|
+
const networkCardsHtml = [
|
|
35
82
|
[t("labels.adapter"), c.adapter],
|
|
36
83
|
[t("labels.namespace"), c.namespace || "-"],
|
|
37
84
|
[t("labels.port"), c.port ?? "-"],
|
|
@@ -47,14 +94,20 @@ export function createNetworkController({
|
|
|
47
94
|
[t("network.sent"), msg.broadcast_total ?? 0],
|
|
48
95
|
[t("network.peers"), p.total ?? 0],
|
|
49
96
|
[t("network.onlinePeers"), p.online ?? 0],
|
|
97
|
+
["RSS", runtimeMemory.rss ?? "-"],
|
|
98
|
+
["Heap", runtimeMemory.heap_used ?? "-"],
|
|
99
|
+
["Profiles", runtimeDirectory.profile_count ?? "-"],
|
|
100
|
+
["Index keys", runtimeDirectory.index_key_count ?? "-"],
|
|
101
|
+
["Messages", runtimeSocial.message_count ?? "-"],
|
|
102
|
+
["Observations", runtimeSocial.observation_count ?? "-"],
|
|
50
103
|
[t("network.activeWebrtcPeers"), dx.active_webrtc_peers ?? "-"],
|
|
51
104
|
[t("network.reconnectAttempts"), dx.reconnect_attempts_total ?? "-"],
|
|
52
105
|
[t("network.lastInbound"), ago(msg.last_message_at)],
|
|
53
106
|
[t("network.lastOutbound"), ago(msg.last_broadcast_at)],
|
|
54
107
|
].map(([k, v]) => `<div class="card"><div class="label">${k}</div><div class="value" style="font-size:17px;">${v}</div></div>`).join("");
|
|
55
|
-
|
|
108
|
+
const networkSummaryHtml = [
|
|
56
109
|
[t("labels.mode"), describeCurrentMode(t, c.mode || "lan")],
|
|
57
|
-
[t("network.relayHealth"),
|
|
110
|
+
[t("network.relayHealth"), relayHealth],
|
|
58
111
|
[t("network.currentRelay"), dx.signaling_url || "-"],
|
|
59
112
|
[t("network.currentRoom"), dx.room || "-"],
|
|
60
113
|
[t("network.lastJoin"), ago(dx.last_join_at)],
|
|
@@ -65,7 +118,7 @@ export function createNetworkController({
|
|
|
65
118
|
|
|
66
119
|
const comp = c.components || {};
|
|
67
120
|
const lim = c.limits || {};
|
|
68
|
-
|
|
121
|
+
const networkComponentsText = [
|
|
69
122
|
`demo_mode: ${c.demo_mode || "-"}`,
|
|
70
123
|
`transport: ${comp.transport || "-"}`,
|
|
71
124
|
`discovery: ${comp.discovery || "-"}`,
|
|
@@ -102,12 +155,39 @@ export function createNetworkController({
|
|
|
102
155
|
`last_discovery_event_at: ${dx.last_discovery_event_at ? new Date(dx.last_discovery_event_at).toISOString() : "-"}`,
|
|
103
156
|
].join("\n");
|
|
104
157
|
|
|
105
|
-
|
|
158
|
+
const networkConfigSnapshotText = toPrettyJson({
|
|
106
159
|
config: c,
|
|
107
160
|
adapter_config: ac,
|
|
108
161
|
runtime_paths: runtimePaths,
|
|
109
162
|
});
|
|
110
|
-
|
|
163
|
+
const networkStatsSnapshotText = toPrettyJson({ stats: s });
|
|
164
|
+
const renderKey = JSON.stringify({
|
|
165
|
+
adapter: c.adapter || "",
|
|
166
|
+
mode: c.mode || "",
|
|
167
|
+
namespace: c.namespace || "",
|
|
168
|
+
port: c.port ?? null,
|
|
169
|
+
signaling_url: dx.signaling_url || "",
|
|
170
|
+
room: dx.room || "",
|
|
171
|
+
relay_health: relayHealth,
|
|
172
|
+
last_poll_at: dx.last_poll_at || 0,
|
|
173
|
+
last_publish_at: dx.last_publish_at || 0,
|
|
174
|
+
last_error: dx.last_error || "",
|
|
175
|
+
msg_received_total: msg.received_total ?? 0,
|
|
176
|
+
msg_broadcast_total: msg.broadcast_total ?? 0,
|
|
177
|
+
peers_total: p.total ?? 0,
|
|
178
|
+
peers_online: p.online ?? 0,
|
|
179
|
+
reconnect_attempts_total: dx.reconnect_attempts_total ?? 0,
|
|
180
|
+
active_webrtc_peers: dx.active_webrtc_peers ?? 0,
|
|
181
|
+
});
|
|
182
|
+
if (renderKey === lastNetworkRenderKey) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
document.getElementById("networkCards").innerHTML = networkCardsHtml;
|
|
186
|
+
document.getElementById("networkSummaryList").innerHTML = networkSummaryHtml;
|
|
187
|
+
document.getElementById("networkComponents").textContent = networkComponentsText;
|
|
188
|
+
document.getElementById("networkConfigSnapshot").textContent = networkConfigSnapshotText;
|
|
189
|
+
document.getElementById("networkStatsSnapshot").textContent = networkStatsSnapshotText;
|
|
190
|
+
lastNetworkRenderKey = renderKey;
|
|
111
191
|
}
|
|
112
192
|
|
|
113
193
|
async function refreshPeers() {
|
|
@@ -115,8 +195,12 @@ export function createNetworkController({
|
|
|
115
195
|
const peers = peerRes.data || {};
|
|
116
196
|
const ds = statsRes.data?.adapter_discovery_stats || {};
|
|
117
197
|
const summary = peers.diagnostics_summary || {};
|
|
118
|
-
|
|
119
|
-
|
|
198
|
+
const peerItems = Array.isArray(peers.items) ? peers.items : [];
|
|
199
|
+
const relayQueueTotal = peerItems.reduce((sum, peer) => sum + Number(peer?.meta?.relay_queue_size || 0), 0);
|
|
200
|
+
const relayQueueMax = peerItems.reduce((max, peer) => Math.max(max, Number(peer?.meta?.relay_queue_size || 0)), 0);
|
|
201
|
+
const signalQueueTotal = peerItems.reduce((sum, peer) => sum + Number(peer?.meta?.signal_queue_size || 0), 0);
|
|
202
|
+
const signalQueueMax = peerItems.reduce((max, peer) => Math.max(max, Number(peer?.meta?.signal_queue_size || 0)), 0);
|
|
203
|
+
const peerCardsHtml = [
|
|
120
204
|
[t("network.total"), peers.total || 0],
|
|
121
205
|
[t("overview.online"), peers.online || 0],
|
|
122
206
|
[t("network.stale"), peers.stale || 0],
|
|
@@ -131,26 +215,28 @@ export function createNetworkController({
|
|
|
131
215
|
[t("network.seedPeers"), summary.seed_peers_count ?? 0],
|
|
132
216
|
[t("network.discoveryEvents"), summary.discovery_events_total ?? 0],
|
|
133
217
|
[t("network.activeWebrtcPeers"), summary.active_webrtc_peers ?? "-"],
|
|
218
|
+
["Relay queue", queueBadge(relayQueueTotal)],
|
|
219
|
+
["Max relay queue", queueBadge(relayQueueMax)],
|
|
220
|
+
["Signal queue", queueBadge(signalQueueTotal)],
|
|
221
|
+
["Max signal queue", queueBadge(signalQueueMax)],
|
|
134
222
|
[t("network.observeCalls"), ds.observe_calls || 0],
|
|
135
223
|
[t("network.heartbeats"), ds.heartbeat_sent || 0],
|
|
136
224
|
[t("network.peersAdded"), ds.peers_added || 0],
|
|
137
225
|
[t("network.peersRemoved"), ds.peers_removed || 0],
|
|
138
226
|
].map(([k, v]) => `<div class="card"><div class="label">${k}</div><div class="value" style="font-size:17px;">${v}</div></div>`).join("");
|
|
227
|
+
const peerStatsText = toPrettyJson({
|
|
228
|
+
discovery_stats: ds,
|
|
229
|
+
diagnostics_summary: summary,
|
|
230
|
+
adapter_stats: statsRes.data?.adapter_stats || {},
|
|
231
|
+
});
|
|
139
232
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
discovery_stats: ds,
|
|
144
|
-
diagnostics_summary: summary,
|
|
145
|
-
});
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
document.getElementById("peerTableWrap").innerHTML = `
|
|
233
|
+
const peerTableHtml = !peers.items || !peers.items.length
|
|
234
|
+
? `<div class="empty-state">${t("network.noPeersDiscovered")}</div>`
|
|
235
|
+
: `
|
|
150
236
|
<table class="table">
|
|
151
|
-
<thead><tr><th>${t("network.peer")}</th><th>${t("network.status")}</th><th>${t("network.lastSeen")}</th><th>${t("network.staleSince")}</th><th>${t("network.messages")}</th><th>${t("network.firstSeen")}</th><th>${t("network.meta")}</th></tr></thead>
|
|
237
|
+
<thead><tr><th>${t("network.peer")}</th><th>${t("network.status")}</th><th>${t("network.lastSeen")}</th><th>${t("network.staleSince")}</th><th>${t("network.messages")}</th><th>${t("network.firstSeen")}</th><th>Relay Q</th><th>Signal Q</th><th>${t("network.meta")}</th></tr></thead>
|
|
152
238
|
<tbody>
|
|
153
|
-
${
|
|
239
|
+
${peerItems.map((peer) => `
|
|
154
240
|
<tr>
|
|
155
241
|
<td class="mono">${shortId(peer.peer_id)}</td>
|
|
156
242
|
<td class="${peer.status === "online" ? "online" : peer.status === "offline" ? "offline" : "stale"}">${peerStatusText(peer.status)}</td>
|
|
@@ -158,25 +244,67 @@ export function createNetworkController({
|
|
|
158
244
|
<td>${peer.stale_since_at ? ago(peer.stale_since_at) : "-"}</td>
|
|
159
245
|
<td>${peer.messages_seen || 0}</td>
|
|
160
246
|
<td>${new Date(peer.first_seen_at).toLocaleTimeString()}</td>
|
|
247
|
+
<td>${queueBadge(Number(peer?.meta?.relay_queue_size || 0))}</td>
|
|
248
|
+
<td>${queueBadge(Number(peer?.meta?.signal_queue_size || 0))}</td>
|
|
161
249
|
<td class="mono">${peer.meta ? JSON.stringify(peer.meta) : "-"}</td>
|
|
162
250
|
</tr>
|
|
163
251
|
`).join("")}
|
|
164
252
|
</tbody>
|
|
165
253
|
</table>
|
|
166
254
|
`;
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
255
|
+
const renderKey = JSON.stringify({
|
|
256
|
+
total: peers.total || 0,
|
|
257
|
+
online: peers.online || 0,
|
|
258
|
+
stale: peers.stale || 0,
|
|
259
|
+
namespace: peers.namespace || "",
|
|
260
|
+
summary: {
|
|
261
|
+
signaling_url: summary.signaling_url || "",
|
|
262
|
+
room: summary.room || "",
|
|
263
|
+
last_join_at: summary.last_join_at || 0,
|
|
264
|
+
last_poll_at: summary.last_poll_at || 0,
|
|
265
|
+
last_publish_at: summary.last_publish_at || 0,
|
|
266
|
+
last_error: summary.last_error || "",
|
|
267
|
+
},
|
|
268
|
+
ds: {
|
|
269
|
+
observe_calls: ds.observe_calls || 0,
|
|
270
|
+
heartbeat_sent: ds.heartbeat_sent || 0,
|
|
271
|
+
peers_added: ds.peers_added || 0,
|
|
272
|
+
peers_removed: ds.peers_removed || 0,
|
|
273
|
+
},
|
|
274
|
+
queues: {
|
|
275
|
+
relay_total: relayQueueTotal,
|
|
276
|
+
relay_max: relayQueueMax,
|
|
277
|
+
signal_total: signalQueueTotal,
|
|
278
|
+
signal_max: signalQueueMax,
|
|
279
|
+
},
|
|
280
|
+
items: peerItems
|
|
281
|
+
? peerItems.map((peer) => [
|
|
282
|
+
peer.peer_id,
|
|
283
|
+
peer.status || "",
|
|
284
|
+
peer.last_seen_at || 0,
|
|
285
|
+
peer.stale_since_at || 0,
|
|
286
|
+
peer.messages_seen || 0,
|
|
287
|
+
peer.first_seen_at || 0,
|
|
288
|
+
Number(peer?.meta?.relay_queue_size || 0),
|
|
289
|
+
Number(peer?.meta?.signal_queue_size || 0),
|
|
290
|
+
peer.meta ? JSON.stringify(peer.meta) : "",
|
|
291
|
+
])
|
|
292
|
+
: [],
|
|
171
293
|
});
|
|
294
|
+
if (renderKey === lastPeersRenderKey) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
document.getElementById("peerCards").innerHTML = peerCardsHtml;
|
|
298
|
+
document.getElementById("peerTableWrap").innerHTML = peerTableHtml;
|
|
299
|
+
document.getElementById("peerStatsWrap").textContent = peerStatsText;
|
|
300
|
+
lastPeersRenderKey = renderKey;
|
|
172
301
|
}
|
|
173
302
|
|
|
174
303
|
async function refreshDiscovery() {
|
|
175
304
|
const eventsRes = await api("/api/discovery/events");
|
|
176
305
|
const payload = eventsRes.data || {};
|
|
177
306
|
const items = Array.isArray(payload.items) ? payload.items : [];
|
|
178
|
-
|
|
179
|
-
document.getElementById("discoveryCards").innerHTML = [
|
|
307
|
+
const discoveryCardsHtml = [
|
|
180
308
|
[t("labels.adapter"), payload.adapter || "-"],
|
|
181
309
|
[t("labels.namespace"), payload.namespace || "-"],
|
|
182
310
|
[t("network.eventsTotal"), payload.total ?? 0],
|
|
@@ -184,11 +312,9 @@ export function createNetworkController({
|
|
|
184
312
|
[t("network.signalingEndpoints"), (payload.signaling_endpoints || []).length || 0],
|
|
185
313
|
[t("network.seedPeers"), payload.seed_peers_count ?? 0],
|
|
186
314
|
].map(([k, v]) => `<div class="card"><div class="label">${k}</div><div class="value" style="font-size:17px;">${v}</div></div>`).join("");
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
} else {
|
|
191
|
-
document.getElementById("discoveryEventList").innerHTML = items
|
|
315
|
+
const discoveryEventListHtml = !items.length
|
|
316
|
+
? `<div class="empty-state">${t("network.noDiscoveryEvents")}</div>`
|
|
317
|
+
: items
|
|
192
318
|
.slice()
|
|
193
319
|
.reverse()
|
|
194
320
|
.map((event) => `
|
|
@@ -199,12 +325,27 @@ export function createNetworkController({
|
|
|
199
325
|
</div>
|
|
200
326
|
`)
|
|
201
327
|
.join("");
|
|
328
|
+
const discoverySnapshotText = toPrettyJson(payload);
|
|
329
|
+
const renderKey = JSON.stringify({
|
|
330
|
+
adapter: payload.adapter || "",
|
|
331
|
+
namespace: payload.namespace || "",
|
|
332
|
+
total: payload.total ?? 0,
|
|
333
|
+
last_event_at: payload.last_event_at || 0,
|
|
334
|
+
signaling_endpoints: payload.signaling_endpoints || [],
|
|
335
|
+
seed_peers_count: payload.seed_peers_count ?? 0,
|
|
336
|
+
items: items.map((event) => [event.type || "", event.peer_id || "", event.endpoint || "", event.detail || "", event.at || 0]),
|
|
337
|
+
});
|
|
338
|
+
if (renderKey === lastDiscoveryRenderKey) {
|
|
339
|
+
return;
|
|
202
340
|
}
|
|
203
|
-
|
|
204
|
-
document.getElementById("
|
|
341
|
+
document.getElementById("discoveryCards").innerHTML = discoveryCardsHtml;
|
|
342
|
+
document.getElementById("discoveryEventList").innerHTML = discoveryEventListHtml;
|
|
343
|
+
document.getElementById("discoverySnapshot").textContent = discoverySnapshotText;
|
|
344
|
+
lastDiscoveryRenderKey = renderKey;
|
|
205
345
|
}
|
|
206
346
|
|
|
207
347
|
return {
|
|
348
|
+
getQuickConnectDefaults: () => ({ ...quickConnectDefaults }),
|
|
208
349
|
refreshDiscovery,
|
|
209
350
|
refreshNetwork,
|
|
210
351
|
refreshPeers,
|
|
@@ -7,6 +7,8 @@ export function createOverviewController({
|
|
|
7
7
|
t,
|
|
8
8
|
writeUiCache,
|
|
9
9
|
}) {
|
|
10
|
+
let lastAgentsRenderKey = "";
|
|
11
|
+
|
|
10
12
|
function renderOverviewGuide(overview, profile) {
|
|
11
13
|
const hasDisplayName = Boolean(String(profile?.display_name || overview?.display_name || "").trim());
|
|
12
14
|
const hasBio = Boolean(String(profile?.bio || "").trim());
|
|
@@ -64,12 +66,11 @@ export function createOverviewController({
|
|
|
64
66
|
setOverviewMode,
|
|
65
67
|
setVisibleRemotePublicCount,
|
|
66
68
|
}) {
|
|
67
|
-
const [overviewRes, discoveredRes, peerRes, profileRes,
|
|
69
|
+
const [overviewRes, discoveredRes, peerRes, profileRes, networkCfgRes, networkStatsRes] = await Promise.allSettled([
|
|
68
70
|
api("/api/overview"),
|
|
69
71
|
api("/api/search?q="),
|
|
70
72
|
api("/api/peers"),
|
|
71
73
|
api("/api/profile"),
|
|
72
|
-
api("/api/openclaw/bridge"),
|
|
73
74
|
api("/api/network/config"),
|
|
74
75
|
api("/api/network/stats"),
|
|
75
76
|
]);
|
|
@@ -80,40 +81,17 @@ export function createOverviewController({
|
|
|
80
81
|
const allProfiles = discoveredRes.status === "fulfilled" ? discoveredRes.value.data || [] : [];
|
|
81
82
|
const peers = peerRes.status === "fulfilled" ? peerRes.value.data || {} : {};
|
|
82
83
|
const currentProfile = profileRes.status === "fulfilled" ? profileRes.value.data || {} : {};
|
|
83
|
-
const bridge = bridgeRes.status === "fulfilled" ? bridgeRes.value.data || {} : {};
|
|
84
84
|
const networkCfg = networkCfgRes.status === "fulfilled" ? networkCfgRes.value.data || {} : {};
|
|
85
85
|
const networkStats = networkStatsRes.status === "fulfilled" ? networkStatsRes.value.data || {} : {};
|
|
86
|
-
const
|
|
87
|
-
const mergedById = new Map();
|
|
88
|
-
|
|
89
|
-
for (const agent of allProfiles) mergedById.set(agent.agent_id, agent);
|
|
90
|
-
|
|
91
|
-
for (const peer of peerItems) {
|
|
92
|
-
const existing = mergedById.get(peer.peer_id);
|
|
93
|
-
if (existing) {
|
|
94
|
-
if (peer.status && !existing.online) existing.online = peer.status === "online";
|
|
95
|
-
if (peer.last_seen_at && (!existing.updated_at || peer.last_seen_at > existing.updated_at)) {
|
|
96
|
-
existing.updated_at = peer.last_seen_at;
|
|
97
|
-
}
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
mergedById.set(peer.peer_id, {
|
|
101
|
-
agent_id: peer.peer_id,
|
|
102
|
-
display_name: shortId(peer.peer_id),
|
|
103
|
-
online: peer.status === "online",
|
|
104
|
-
updated_at: peer.last_seen_at || peer.first_seen_at || 0,
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
const all = Array.from(mergedById.values());
|
|
86
|
+
const all = Array.isArray(allProfiles) ? allProfiles.slice() : [];
|
|
109
87
|
const filtered = getOnlyShowOnline() ? all.filter((agent) => agent.online) : all;
|
|
110
88
|
setVisibleRemotePublicCount(all.filter((agent) => !agent.is_self && agent.online).length);
|
|
111
89
|
const totalAgentPages = Math.max(1, Math.ceil(filtered.length / 10));
|
|
112
90
|
let agentsPage = Math.min(Math.max(1, getAgentsPage()), totalAgentPages);
|
|
113
91
|
onPageChange(agentsPage);
|
|
114
92
|
const pagedAgents = filtered.slice((agentsPage - 1) * 10, agentsPage * 10);
|
|
115
|
-
const discoveredCount = Math.max(Number(o.discovered_count || 0),
|
|
116
|
-
const onlineCount = Math.max(Number(o.online_count || 0),
|
|
93
|
+
const discoveredCount = Math.max(Number(o.discovered_count || 0), all.length);
|
|
94
|
+
const onlineCount = Math.max(Number(o.online_count || 0), all.filter((agent) => agent.online).length);
|
|
117
95
|
const offlineCount = Math.max(0, discoveredCount - onlineCount);
|
|
118
96
|
|
|
119
97
|
const overviewCardsHtml = [
|
|
@@ -130,22 +108,31 @@ export function createOverviewController({
|
|
|
130
108
|
const snapshotHtml = `
|
|
131
109
|
<div class="snapshot-card">
|
|
132
110
|
<div class="snapshot-card__identity">
|
|
133
|
-
<div class="snapshot-card__label"
|
|
111
|
+
<div class="snapshot-card__label">${t("overview.snapshotCurrentNode")}</div>
|
|
134
112
|
<div class="snapshot-card__title">${escapeHtml(o.display_name || t("overview.unnamed"))}</div>
|
|
135
113
|
<div class="snapshot-card__subtle mono">${escapeHtml(o.agent_id || "-")}</div>
|
|
136
114
|
</div>
|
|
137
115
|
<div class="snapshot-card__grid">
|
|
138
|
-
<div class="snapshot-card__item"><div class="label"
|
|
139
|
-
<div class="snapshot-card__item"><div class="label"
|
|
140
|
-
<div class="snapshot-card__item"><div class="label"
|
|
141
|
-
<div class="snapshot-card__item"><div class="label"
|
|
116
|
+
<div class="snapshot-card__item"><div class="label">${t("overview.snapshotVersion")}</div><span class="value-inline">${escapeHtml(o.app_version || "-")}</span></div>
|
|
117
|
+
<div class="snapshot-card__item"><div class="label">${t("overview.snapshotPublic")}</div><span class="value-inline">${o.public_enabled ? t("common.on") : t("common.off")}</span></div>
|
|
118
|
+
<div class="snapshot-card__item"><div class="label">${t("overview.snapshotBroadcast")}</div><span class="value-inline">${o.broadcast_enabled ? t("common.on") : t("common.off")}</span></div>
|
|
119
|
+
<div class="snapshot-card__item"><div class="label">${t("overview.snapshotLastBroadcast")}</div><span class="value-inline">${escapeHtml(ago(o.last_broadcast_at))}</span></div>
|
|
142
120
|
</div>
|
|
143
121
|
</div>
|
|
144
122
|
`;
|
|
145
123
|
document.getElementById("snapshot").innerHTML = snapshotHtml;
|
|
124
|
+
const networkDiag = networkStats.adapter_diagnostics_summary || {};
|
|
146
125
|
const heroModeText = o.social?.network_mode || "-";
|
|
126
|
+
const heroAdapterText = networkCfg.adapter || "-";
|
|
127
|
+
const heroRelayText = String(networkDiag.signaling_url || networkCfg.adapter_extra?.signaling_url || "-");
|
|
128
|
+
const heroRoomText = String(networkDiag.room || networkCfg.adapter_extra?.room || "-");
|
|
147
129
|
setOverviewMode(heroModeText);
|
|
148
130
|
document.getElementById("heroMode").textContent = heroModeText;
|
|
131
|
+
document.getElementById("heroAdapter").textContent = heroAdapterText;
|
|
132
|
+
const heroRelayEl = document.getElementById("heroRelay");
|
|
133
|
+
const heroRoomEl = document.getElementById("heroRoom");
|
|
134
|
+
if (heroRelayEl) heroRelayEl.textContent = heroRelayText;
|
|
135
|
+
if (heroRoomEl) heroRoomEl.textContent = heroRoomText;
|
|
149
136
|
document.getElementById("overviewModeHint").textContent = t("overview.modeCurrentSource", {
|
|
150
137
|
mode: describeCurrentMode(t, heroModeText),
|
|
151
138
|
hint: t("overview.modeCacheHint"),
|
|
@@ -156,11 +143,11 @@ export function createOverviewController({
|
|
|
156
143
|
document.getElementById("pillBroadcast").textContent = pillBroadcastText;
|
|
157
144
|
document.getElementById("pillBroadcast").className = pillBroadcastClassName;
|
|
158
145
|
|
|
159
|
-
const
|
|
160
|
-
const
|
|
161
|
-
const
|
|
146
|
+
const openclaw = o.openclaw || {};
|
|
147
|
+
const openclawRunning = !!openclaw.running;
|
|
148
|
+
const openclawDetected = !!openclaw.detected || openclawRunning;
|
|
149
|
+
const skillInstalled = !!openclaw.skill_installed;
|
|
162
150
|
const globalMode = heroModeText === "global-preview";
|
|
163
|
-
const networkDiag = networkStats.adapter_diagnostics_summary || {};
|
|
164
151
|
const lastNetworkError = String(networkDiag.last_error || o.last_broadcast_error || "").trim();
|
|
165
152
|
const broadcastHealthy = o.broadcast_enabled && !lastNetworkError;
|
|
166
153
|
const roleKey = openclawRunning
|
|
@@ -189,7 +176,7 @@ export function createOverviewController({
|
|
|
189
176
|
document.getElementById("homePriorityGrid").innerHTML = [
|
|
190
177
|
[t("overview.homeOpenClaw"), openclawRunning ? t("overview.homeRunning") : openclawDetected ? t("overview.homeInstalledOnly") : t("overview.homeStopped"), openclawRunning ? t("overview.homeMetaRunning") : t("overview.homeMetaNotRunning")],
|
|
191
178
|
[t("overview.homeGlobalMode"), globalMode ? t("overview.homeGlobalReady") : t("overview.homeNotGlobal"), globalMode ? t("overview.homeMetaGlobal") : t("overview.homeMetaNotGlobal")],
|
|
192
|
-
[t("overview.homeBroadcastHealth"), broadcastHealthy ? t("overview.homeHealthy") : t("overview.homeDegraded"), lastNetworkError ||
|
|
179
|
+
[t("overview.homeBroadcastHealth"), broadcastHealthy ? t("overview.homeHealthy") : t("overview.homeDegraded"), lastNetworkError || t("overview.lastBroadcastAgo", { value: ago(o.last_broadcast_at) })],
|
|
193
180
|
[t("overview.homePeers"), String(all.filter((agent) => !agent.is_self && agent.online).length), t("overview.homeMetaPeers", { online: String(onlineCount), discovered: String(discoveredCount) })],
|
|
194
181
|
].map(([label, value, meta]) => `
|
|
195
182
|
<div class="priority-card">
|
|
@@ -235,13 +222,25 @@ export function createOverviewController({
|
|
|
235
222
|
if (!filtered.length) {
|
|
236
223
|
const agentsCountHintText = t("overview.agentsZero");
|
|
237
224
|
const agentsWrapHtml = `<div class="label">${t("overview.noDiscoveredAgents")}</div>`;
|
|
238
|
-
|
|
239
|
-
|
|
225
|
+
const renderKey = JSON.stringify({
|
|
226
|
+
state: "empty",
|
|
227
|
+
hint: agentsCountHintText,
|
|
228
|
+
page: agentsPage,
|
|
229
|
+
onlineOnly: getOnlyShowOnline(),
|
|
230
|
+
});
|
|
231
|
+
if (renderKey !== lastAgentsRenderKey) {
|
|
232
|
+
document.getElementById("agentsCountHint").textContent = agentsCountHintText;
|
|
233
|
+
document.getElementById("agentsWrap").innerHTML = agentsWrapHtml;
|
|
234
|
+
lastAgentsRenderKey = renderKey;
|
|
235
|
+
}
|
|
240
236
|
writeUiCache("silicaclaw_ui_overview", {
|
|
241
237
|
overviewCardsHtml,
|
|
242
238
|
brandVersionText,
|
|
243
239
|
snapshotText: snapshotHtml,
|
|
244
240
|
heroModeText,
|
|
241
|
+
heroAdapterText,
|
|
242
|
+
heroRelayText,
|
|
243
|
+
heroRoomText,
|
|
245
244
|
pillBroadcastText,
|
|
246
245
|
pillBroadcastClassName,
|
|
247
246
|
agentsCountHintText,
|
|
@@ -281,6 +280,9 @@ export function createOverviewController({
|
|
|
281
280
|
${renderTags(a)}
|
|
282
281
|
</div>
|
|
283
282
|
<div class="${a.online ? "online" : "offline"}">${a.online ? t("overview.online") : t("overview.offline")}</div>
|
|
283
|
+
<div class="agent-card__actions">
|
|
284
|
+
${!a.is_self ? `<button class="secondary" type="button" data-private-agent="${escapeHtml(a.agent_id)}" data-private-name="${escapeHtml(a.display_name || "")}" data-private-key="${escapeHtml(a.private_encryption_public_key || "")}" ${a.private_encryption_public_key ? "" : "disabled title=\"Private messaging unavailable for this agent yet\""}>${t("actions.messageAgentPrivately")}</button>` : ""}
|
|
285
|
+
</div>
|
|
284
286
|
<div class="agent-card__meta"><div class="agent-card__updated">${ago(a.updated_at)}</div></div>
|
|
285
287
|
</div>
|
|
286
288
|
`).join("")}
|
|
@@ -293,25 +295,45 @@ export function createOverviewController({
|
|
|
293
295
|
</div>
|
|
294
296
|
</div>
|
|
295
297
|
`;
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
298
|
+
const renderKey = JSON.stringify({
|
|
299
|
+
state: "list",
|
|
300
|
+
hint: agentsCountHintText,
|
|
301
|
+
page: agentsPage,
|
|
302
|
+
totalPages: totalAgentPages,
|
|
303
|
+
onlineOnly: getOnlyShowOnline(),
|
|
304
|
+
items: pagedAgents.map((agent) => [
|
|
305
|
+
agent.agent_id,
|
|
306
|
+
agent.updated_at,
|
|
307
|
+
agent.online ? 1 : 0,
|
|
308
|
+
agent.display_name || "",
|
|
309
|
+
agent.bio || "",
|
|
310
|
+
]),
|
|
309
311
|
});
|
|
312
|
+
if (renderKey !== lastAgentsRenderKey) {
|
|
313
|
+
document.getElementById("agentsCountHint").textContent = agentsCountHintText;
|
|
314
|
+
document.getElementById("agentsWrap").innerHTML = agentsWrapHtml;
|
|
315
|
+
document.getElementById("agentsPrevPageBtn")?.addEventListener("click", async () => {
|
|
316
|
+
if (agentsPage <= 1) return;
|
|
317
|
+
agentsPage -= 1;
|
|
318
|
+
onPageChange(agentsPage);
|
|
319
|
+
await refreshOverview({ getAgentsPage, getOnlyShowOnline, onPageChange, setOverviewMode, setVisibleRemotePublicCount });
|
|
320
|
+
});
|
|
321
|
+
document.getElementById("agentsNextPageBtn")?.addEventListener("click", async () => {
|
|
322
|
+
if (agentsPage >= totalAgentPages) return;
|
|
323
|
+
agentsPage += 1;
|
|
324
|
+
onPageChange(agentsPage);
|
|
325
|
+
await refreshOverview({ getAgentsPage, getOnlyShowOnline, onPageChange, setOverviewMode, setVisibleRemotePublicCount });
|
|
326
|
+
});
|
|
327
|
+
lastAgentsRenderKey = renderKey;
|
|
328
|
+
}
|
|
310
329
|
writeUiCache("silicaclaw_ui_overview", {
|
|
311
330
|
overviewCardsHtml,
|
|
312
331
|
brandVersionText,
|
|
313
332
|
snapshotText: snapshotHtml,
|
|
314
333
|
heroModeText,
|
|
334
|
+
heroAdapterText,
|
|
335
|
+
heroRelayText,
|
|
336
|
+
heroRoomText,
|
|
315
337
|
pillBroadcastText,
|
|
316
338
|
pillBroadcastClassName,
|
|
317
339
|
agentsCountHintText,
|