@silicaclaw/cli 2026.3.19-9 → 2026.3.20-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +134 -0
- package/DEMO_GUIDE.md +1 -1
- package/INSTALL.md +47 -13
- package/README.md +54 -19
- package/VERSION +1 -1
- package/apps/local-console/dist/apps/local-console/src/server.d.ts +51 -12
- package/apps/local-console/dist/apps/local-console/src/server.js +619 -183
- package/apps/local-console/dist/config/silicaclaw-defaults.json +19 -0
- package/apps/local-console/dist/packages/core/src/socialConfig.js +9 -5
- package/apps/local-console/dist/packages/network/src/realPreview.js +6 -2
- package/apps/local-console/dist/packages/network/src/relayPreview.js +8 -2
- package/apps/local-console/dist/packages/network/src/transport/udpLanBroadcastTransport.js +2 -1
- 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/socialRuntimeRepo.js +8 -4
- package/apps/local-console/public/app/app.js +21 -1
- package/apps/local-console/public/app/events.js +40 -2
- package/apps/local-console/public/app/network.js +32 -3
- package/apps/local-console/public/app/overview.js +18 -26
- package/apps/local-console/public/app/shell.js +18 -34
- package/apps/local-console/public/app/social.js +207 -28
- package/apps/local-console/public/app/styles.css +182 -14
- package/apps/local-console/public/app/template.js +76 -31
- package/apps/local-console/public/app/translations.js +147 -51
- package/apps/local-console/src/server.ts +652 -189
- 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 +15 -15
- 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/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 +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/src/socialConfig.ts +7 -5
- 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 +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/src/realPreview.ts +3 -2
- package/node_modules/@silicaclaw/network/src/relayPreview.ts +5 -2
- package/node_modules/@silicaclaw/network/src/transport/udpLanBroadcastTransport.ts +2 -1
- 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 +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/socialRuntimeRepo.js +8 -4
- 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 +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 +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 +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 +59 -1
- package/scripts/silicaclaw-cli.mjs +162 -50
- package/scripts/silicaclaw-gateway.mjs +302 -84
- package/scripts/validate-openclaw-skill.mjs +79 -21
|
@@ -68,6 +68,7 @@ export function createSocialController({
|
|
|
68
68
|
|
|
69
69
|
listEl.innerHTML = filteredMessages
|
|
70
70
|
.map((item) => {
|
|
71
|
+
const visibleRemoteCount = getVisibleRemotePublicCount();
|
|
71
72
|
const selfStatusChips = item.is_self
|
|
72
73
|
? `
|
|
73
74
|
<span class="tag-chip" style="margin-left:8px;">${t("overview.selfMessagePublished")}</span>
|
|
@@ -77,7 +78,21 @@ export function createSocialController({
|
|
|
77
78
|
? t("overview.selfMessageRemoteObserved", { count: String(item.remote_observation_count) })
|
|
78
79
|
: t("overview.selfMessageAwaitingObservation")
|
|
79
80
|
}</span>
|
|
80
|
-
<span class="tag-chip" style="margin-left:8px;">${t("overview.selfMessageRemoteVisible", { count: String(
|
|
81
|
+
<span class="tag-chip" style="margin-left:8px;">${t("overview.selfMessageRemoteVisible", { count: String(visibleRemoteCount) })}</span>
|
|
82
|
+
`
|
|
83
|
+
: "";
|
|
84
|
+
const selfDeliveryHint = item.is_self
|
|
85
|
+
? `
|
|
86
|
+
<div style="margin-top:8px; color:#90a2c3;">
|
|
87
|
+
${
|
|
88
|
+
item.remote_observation_count > 0
|
|
89
|
+
? t("overview.selfMessageDeliveryObserved", {
|
|
90
|
+
count: String(item.remote_observation_count),
|
|
91
|
+
visible: String(visibleRemoteCount),
|
|
92
|
+
})
|
|
93
|
+
: t("overview.selfMessageDeliveryPending", { count: String(visibleRemoteCount) })
|
|
94
|
+
}
|
|
95
|
+
</div>
|
|
81
96
|
`
|
|
82
97
|
: "";
|
|
83
98
|
const observationChip = item.remote_observation_count > 0
|
|
@@ -98,6 +113,7 @@ export function createSocialController({
|
|
|
98
113
|
<div class="mono" style="color:#90a2c3;">${new Date(item.created_at).toLocaleString()}</div>
|
|
99
114
|
</div>
|
|
100
115
|
<div style="margin-top:8px; line-height:1.6;">${formatMessageBody(item.body || "")}</div>
|
|
116
|
+
${selfDeliveryHint}
|
|
101
117
|
</div>
|
|
102
118
|
`;
|
|
103
119
|
})
|
|
@@ -112,11 +128,12 @@ export function createSocialController({
|
|
|
112
128
|
}
|
|
113
129
|
|
|
114
130
|
async function refreshSocial() {
|
|
115
|
-
const [socialRes, summaryRes, statusRes, networkCfgRes, governanceRes] = await Promise.all([
|
|
131
|
+
const [socialRes, summaryRes, statusRes, networkCfgRes, networkStatsRes, governanceRes] = await Promise.all([
|
|
116
132
|
api("/api/social/config"),
|
|
117
133
|
api("/api/social/integration-summary"),
|
|
118
134
|
api("/api/integration/status"),
|
|
119
135
|
api("/api/network/config"),
|
|
136
|
+
api("/api/network/stats"),
|
|
120
137
|
api("/api/social/message-governance"),
|
|
121
138
|
]);
|
|
122
139
|
const bridgeRes = await api("/api/openclaw/bridge");
|
|
@@ -126,6 +143,7 @@ export function createSocialController({
|
|
|
126
143
|
const networkCfg = networkCfgRes.data || {};
|
|
127
144
|
const bridge = bridgeRes.data || {};
|
|
128
145
|
const governance = governanceRes.data || {};
|
|
146
|
+
const networkStats = networkStatsRes.data || {};
|
|
129
147
|
const runtime = social.runtime || {};
|
|
130
148
|
const config = social.social_config || {};
|
|
131
149
|
const network = config.network || {};
|
|
@@ -137,6 +155,7 @@ export function createSocialController({
|
|
|
137
155
|
const effectiveNamespace = networkCfg.namespace || runtimeNetwork.namespace || summary.current_namespace || "-";
|
|
138
156
|
const effectiveRoom = effectiveAdapterExtra.room || runtimeNetwork.room || network.room || "-";
|
|
139
157
|
const effectiveRelay = effectiveAdapterExtra.signaling_url || runtimeNetwork.signaling_url || network.signaling_url || "-";
|
|
158
|
+
const networkDiag = networkStats.adapter_diagnostics_summary || {};
|
|
140
159
|
const discoverable = status.discoverable === true;
|
|
141
160
|
const mode = effectiveMode;
|
|
142
161
|
const summaryLine = status.status_line || summary.summary_line || `${summary.connected ? t("social.connectedToSilicaClaw") : t("social.notConnectedToSilicaClaw")} · ${discoverable ? t("social.discoverableInCurrentMode") : t("social.notDiscoverableInCurrentMode")} · ${t("social.usingMode", { mode })}`;
|
|
@@ -190,6 +209,17 @@ export function createSocialController({
|
|
|
190
209
|
[t("social.reuseOpenClawIdentity"), summary.reused_openclaw_identity ? t("common.yes") : t("common.no")],
|
|
191
210
|
].map(([k, v]) => `<div class="card"><div class="label">${k}</div><div class="value" style="font-size:17px;">${v}</div></div>`).join("");
|
|
192
211
|
|
|
212
|
+
document.getElementById("socialMessagePathCards").innerHTML = [
|
|
213
|
+
[t("social.messageBroadcast"), bridge.message_broadcast_enabled ? t("common.on") : t("common.off")],
|
|
214
|
+
[t("social.publicDiscovery"), status.public_enabled ? t("common.on") : t("common.off")],
|
|
215
|
+
[t("social.namespace"), effectiveNamespace],
|
|
216
|
+
[t("labels.room"), effectiveRoom],
|
|
217
|
+
[t("labels.relay"), effectiveRelay],
|
|
218
|
+
[t("network.lastPoll"), networkDiag.last_poll_at ? new Date(networkDiag.last_poll_at).toLocaleTimeString() : "-"],
|
|
219
|
+
[t("network.lastPublish"), networkDiag.last_publish_at ? new Date(networkDiag.last_publish_at).toLocaleTimeString() : "-"],
|
|
220
|
+
[t("network.lastError"), networkDiag.last_error || t("network.none")],
|
|
221
|
+
].map(([k, v]) => `<div class="card"><div class="label">${k}</div><div class="value" style="font-size:17px;">${escapeHtml(String(v))}</div></div>`).join("");
|
|
222
|
+
|
|
193
223
|
const skillLearning = bridge.skill_learning || {};
|
|
194
224
|
const ownerDelivery = bridge.owner_delivery || {};
|
|
195
225
|
const installAction = skillLearning.install_action || {};
|
|
@@ -224,6 +254,12 @@ export function createSocialController({
|
|
|
224
254
|
`${t("social.ownerForwardReady")}: ${ownerDelivery.ready ? t("common.yes") : t("common.no")}`,
|
|
225
255
|
].join(" · ");
|
|
226
256
|
document.getElementById("socialOwnerDeliveryReason").textContent = ownerDeliveryBody;
|
|
257
|
+
document.getElementById("socialCapabilityCards").innerHTML = [
|
|
258
|
+
[t("socialCapability.publicBroadcast"), bridge.message_broadcast_enabled ? t("common.yes") : t("common.no")],
|
|
259
|
+
[t("socialCapability.monitorBroadcasts"), ownerDelivery.bridge_messages_readable ? t("common.yes") : t("common.no")],
|
|
260
|
+
[t("socialCapability.autoPushToOwner"), ownerDelivery.ready ? t("common.yes") : t("common.no")],
|
|
261
|
+
[t("socialCapability.ownerPrivateBoundary"), t("socialCapability.ownerPrivateBoundaryValue")],
|
|
262
|
+
].map(([k, v]) => `<div class="card"><div class="label">${escapeHtml(String(k))}</div><div class="value" style="font-size:17px;">${escapeHtml(String(v))}</div></div>`).join("");
|
|
227
263
|
document.getElementById("openclawSkillCards").innerHTML = [
|
|
228
264
|
[t("social.openclawInstalled"), openclawDetected ? t("common.yes") : t("common.no")],
|
|
229
265
|
[t("social.running"), openclawRunning ? t("common.yes") : t("common.no")],
|
|
@@ -370,12 +406,19 @@ export function createSocialController({
|
|
|
370
406
|
|
|
371
407
|
function renderSkillCard(skill, options = {}) {
|
|
372
408
|
const capabilities = Array.isArray(skill.capabilities) ? skill.capabilities.slice(0, 6) : [];
|
|
409
|
+
const updateAvailable = options.updateAvailable === true;
|
|
373
410
|
const statusText = options.statusText || (skill.installed_in_openclaw ? t("common.yes") : t("hints.skillsNotInstalled"));
|
|
374
411
|
const versionText = String(skill.version || "-");
|
|
375
412
|
const bodyText = escapeHtml(String(skill.description || "-"));
|
|
376
|
-
const
|
|
377
|
-
|
|
378
|
-
|
|
413
|
+
const skillName = String(skill.name || "").trim();
|
|
414
|
+
const installable = options.installable === true && Boolean(skillName) && (!skill.installed_in_openclaw || updateAvailable);
|
|
415
|
+
const installedVersionText = escapeHtml(String(options.installedVersion || skill.installed_version || "-"));
|
|
416
|
+
const bundledVersionText = escapeHtml(String(options.bundledVersion || skill.bundled_version || skill.version || "-"));
|
|
417
|
+
const installTone = updateAvailable
|
|
418
|
+
? "tag-chip warn"
|
|
419
|
+
: skill.installed_in_openclaw || skill.install_mode === "workspace" || skill.install_mode === "legacy"
|
|
420
|
+
? "tag-chip emphasis"
|
|
421
|
+
: "tag-chip muted";
|
|
379
422
|
const sourceText = escapeHtml(String(skill.source_path || skill.bundled_source_path || skill.installed_path || "-"));
|
|
380
423
|
const locationText = escapeHtml(String(skill.installed_path || skill.manifest_path || "-"));
|
|
381
424
|
return `
|
|
@@ -390,9 +433,18 @@ export function createSocialController({
|
|
|
390
433
|
<div class="skill-card__body">${bodyText}</div>
|
|
391
434
|
<div class="skill-card__tags">
|
|
392
435
|
<span class="${installTone}">${escapeHtml(statusText)}</span>
|
|
436
|
+
${updateAvailable ? `<span class="tag-chip warn">${t("labels.skillsUpdateAvailable")}</span>` : ""}
|
|
393
437
|
${capabilities.map((item) => `<span class="tag-chip">${escapeHtml(String(item))}</span>`).join("")}
|
|
394
438
|
</div>
|
|
395
439
|
<div class="skill-card__meta">
|
|
440
|
+
<div class="skill-card__meta-item">
|
|
441
|
+
<div class="skill-card__meta-label">${t("labels.skillsInstalledVersion")}</div>
|
|
442
|
+
<div class="skill-card__meta-value mono">${installedVersionText}</div>
|
|
443
|
+
</div>
|
|
444
|
+
<div class="skill-card__meta-item">
|
|
445
|
+
<div class="skill-card__meta-label">${t("labels.skillsBundledVersion")}</div>
|
|
446
|
+
<div class="skill-card__meta-value mono">${bundledVersionText}</div>
|
|
447
|
+
</div>
|
|
396
448
|
<div class="skill-card__meta-item">
|
|
397
449
|
<div class="skill-card__meta-label">${t("labels.skillsSource")}</div>
|
|
398
450
|
<div class="skill-card__meta-value mono">${sourceText}</div>
|
|
@@ -402,6 +454,50 @@ export function createSocialController({
|
|
|
402
454
|
<div class="skill-card__meta-value mono">${locationText}</div>
|
|
403
455
|
</div>
|
|
404
456
|
</div>
|
|
457
|
+
${installable ? `
|
|
458
|
+
<div class="actions">
|
|
459
|
+
<button class="secondary skill-install-btn" type="button" data-skill-install="${escapeHtml(skillName)}">${updateAvailable ? t("actions.updateThisSkill") : t("actions.installThisSkill")}</button>
|
|
460
|
+
</div>
|
|
461
|
+
` : ""}
|
|
462
|
+
</div>
|
|
463
|
+
`;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
function setSkillActionCopy({ title, body, state }) {
|
|
467
|
+
document.getElementById("skillsActionTitle").textContent = title;
|
|
468
|
+
document.getElementById("skillsActionBody").textContent = body;
|
|
469
|
+
document.getElementById("skillsActionState").textContent = state;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
function renderDialogueCard(skill) {
|
|
473
|
+
const sections = Array.isArray(skill.owner_dialogue_sections_zh) ? skill.owner_dialogue_sections_zh : [];
|
|
474
|
+
const examples = Array.isArray(skill.owner_dialogue_examples_zh) ? skill.owner_dialogue_examples_zh : [];
|
|
475
|
+
return `
|
|
476
|
+
<div class="skill-card">
|
|
477
|
+
<div class="skill-card__top">
|
|
478
|
+
<div>
|
|
479
|
+
<div class="skill-card__eyebrow">${escapeHtml(skill.display_name || skill.name || "Skill")}</div>
|
|
480
|
+
<div class="skill-card__title">${escapeHtml(t("labels.skillsDialogueExamples"))}</div>
|
|
481
|
+
</div>
|
|
482
|
+
<div class="skill-card__version mono">${escapeHtml(skill.version || "-")}</div>
|
|
483
|
+
</div>
|
|
484
|
+
<div class="skill-card__body">${escapeHtml(skill.description || "-")}</div>
|
|
485
|
+
<div class="skills-dialogue-list">
|
|
486
|
+
${sections.length
|
|
487
|
+
? sections.map((section) => `
|
|
488
|
+
<div class="skills-dialogue-group">
|
|
489
|
+
<div class="skills-dialogue-group__title">${escapeHtml(String(section.title || "-"))}</div>
|
|
490
|
+
<div class="skills-dialogue-group__items">
|
|
491
|
+
${Array.isArray(section.items)
|
|
492
|
+
? section.items.map((item) => `<div class="skills-dialogue-item">"${escapeHtml(String(item))}"</div>`).join("")
|
|
493
|
+
: ""}
|
|
494
|
+
</div>
|
|
495
|
+
</div>
|
|
496
|
+
`).join("")
|
|
497
|
+
: examples.length
|
|
498
|
+
? examples.map((item) => `<div class="skills-dialogue-item">"${escapeHtml(String(item))}"</div>`).join("")
|
|
499
|
+
: `<div class="skills-empty">${t("hints.skillsNoDialogueExamples")}</div>`}
|
|
500
|
+
</div>
|
|
405
501
|
</div>
|
|
406
502
|
`;
|
|
407
503
|
}
|
|
@@ -413,9 +509,29 @@ export function createSocialController({
|
|
|
413
509
|
const openclaw = payload.openclaw || {};
|
|
414
510
|
const summary = payload.summary || {};
|
|
415
511
|
const installAction = payload.install_action || {};
|
|
416
|
-
const
|
|
512
|
+
const broadcastSkill = bundled.find((item) => item.name === "silicaclaw-broadcast") || bundled[0] || null;
|
|
513
|
+
const ownerPushSkill = bundled.find((item) => item.name === "silicaclaw-owner-push") || null;
|
|
514
|
+
const featuredSkills = [broadcastSkill, ownerPushSkill].filter(Boolean);
|
|
417
515
|
const openclawDetected = !!openclaw.detected;
|
|
418
516
|
const openclawRunning = !!openclaw.running;
|
|
517
|
+
const allFeaturedInstalled = featuredSkills.length > 0 && featuredSkills.every((item) => item.installed_in_openclaw);
|
|
518
|
+
const installedFeaturedCount = featuredSkills.filter((item) => item.installed_in_openclaw).length;
|
|
519
|
+
const bundledUpdateCount = bundled.filter((item) => item.update_available).length;
|
|
520
|
+
const bundledSorted = [...bundled].sort((left, right) => {
|
|
521
|
+
const featuredLeft = featuredSkills.some((item) => item?.name === left.name) ? 1 : 0;
|
|
522
|
+
const featuredRight = featuredSkills.some((item) => item?.name === right.name) ? 1 : 0;
|
|
523
|
+
if (featuredLeft !== featuredRight) return featuredRight - featuredLeft;
|
|
524
|
+
const updateLeft = left.update_available ? 1 : 0;
|
|
525
|
+
const updateRight = right.update_available ? 1 : 0;
|
|
526
|
+
if (updateLeft !== updateRight) return updateRight - updateLeft;
|
|
527
|
+
const installLeft = left.installed_in_openclaw ? 1 : 0;
|
|
528
|
+
const installRight = right.installed_in_openclaw ? 1 : 0;
|
|
529
|
+
if (installLeft !== installRight) return installLeft - installRight;
|
|
530
|
+
return String(left.display_name || left.name || "").localeCompare(String(right.display_name || right.name || ""));
|
|
531
|
+
});
|
|
532
|
+
const installedSorted = [...installed].sort((left, right) =>
|
|
533
|
+
String(left.display_name || left.name || "").localeCompare(String(right.display_name || right.name || ""))
|
|
534
|
+
);
|
|
419
535
|
|
|
420
536
|
document.getElementById("skillsBannerRuntimeValue").textContent = t("hints.skillsRuntimeSummary", {
|
|
421
537
|
runtime: openclawRunning ? t("common.yes") : t("common.no"),
|
|
@@ -423,51 +539,114 @@ export function createSocialController({
|
|
|
423
539
|
installed: String(summary.installed_count || 0),
|
|
424
540
|
});
|
|
425
541
|
|
|
542
|
+
if (!openclawDetected) {
|
|
543
|
+
setSkillActionCopy({
|
|
544
|
+
title: t("hints.skillsActionMissingTitle"),
|
|
545
|
+
body: t("hints.skillsActionMissingBody"),
|
|
546
|
+
state: t("labels.skillsStateAttention"),
|
|
547
|
+
});
|
|
548
|
+
} else if (!openclawRunning) {
|
|
549
|
+
setSkillActionCopy({
|
|
550
|
+
title: t("hints.skillsActionStoppedTitle"),
|
|
551
|
+
body: t("hints.skillsActionStoppedBody"),
|
|
552
|
+
state: t("labels.skillsStateAttention"),
|
|
553
|
+
});
|
|
554
|
+
} else if (bundledUpdateCount > 0) {
|
|
555
|
+
setSkillActionCopy({
|
|
556
|
+
title: t("hints.skillsActionUpdateTitle", { count: String(bundledUpdateCount) }),
|
|
557
|
+
body: t("hints.skillsActionUpdateBody", { count: String(bundledUpdateCount) }),
|
|
558
|
+
state: t("labels.skillsStateAttention"),
|
|
559
|
+
});
|
|
560
|
+
} else if (allFeaturedInstalled) {
|
|
561
|
+
setSkillActionCopy({
|
|
562
|
+
title: t("hints.skillsActionCompleteTitle"),
|
|
563
|
+
body: t("hints.skillsActionCompleteBody"),
|
|
564
|
+
state: t("labels.skillsStateComplete"),
|
|
565
|
+
});
|
|
566
|
+
} else if (installedFeaturedCount > 0) {
|
|
567
|
+
setSkillActionCopy({
|
|
568
|
+
title: t("hints.skillsActionPartialTitle"),
|
|
569
|
+
body: t("hints.skillsActionPartialBody"),
|
|
570
|
+
state: t("labels.skillsStateInProgress"),
|
|
571
|
+
});
|
|
572
|
+
} else {
|
|
573
|
+
setSkillActionCopy({
|
|
574
|
+
title: t("hints.skillsActionInstallTitle"),
|
|
575
|
+
body: t("hints.skillsActionInstallBody"),
|
|
576
|
+
state: t("labels.skillsStateReady"),
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
|
|
426
580
|
document.getElementById("skillsSummaryCards").innerHTML = [
|
|
427
581
|
[t("labels.skillsBundled"), String(summary.bundled_count || 0)],
|
|
428
582
|
[t("labels.skillsInstalled"), String(summary.installed_count || 0)],
|
|
429
|
-
[t("
|
|
430
|
-
[t("
|
|
431
|
-
|
|
583
|
+
[t("labels.skillsUpdates"), String(summary.update_available_count || 0)],
|
|
584
|
+
[t("labels.skillsBroadcastLearning"), broadcastSkill?.installed_in_openclaw ? t("common.yes") : t("common.no")],
|
|
585
|
+
[t("labels.skillsAutoPush"), ownerPushSkill?.installed_in_openclaw ? t("common.yes") : t("common.no")],
|
|
586
|
+
].map(([k, v]) => `<div class="skills-summary-card"><div class="label">${k}</div><div class="value">${escapeHtml(v)}</div></div>`).join("");
|
|
432
587
|
|
|
433
|
-
document.getElementById("
|
|
434
|
-
|
|
588
|
+
document.getElementById("skillsFeaturedCount").textContent = `${featuredSkills.length}`;
|
|
589
|
+
document.getElementById("skillsBundledCount").textContent = `${bundled.length}`;
|
|
590
|
+
document.getElementById("skillsInstalledCount").textContent = `${installed.length}`;
|
|
591
|
+
document.getElementById("skillsDialogueCount").textContent = `${featuredSkills.length}`;
|
|
592
|
+
|
|
593
|
+
document.getElementById("skillsFeaturedSpotlights").innerHTML = featuredSkills.length
|
|
594
|
+
? featuredSkills.map((skill) => `
|
|
435
595
|
<div class="skills-spotlight">
|
|
436
|
-
<div class="skill-card__eyebrow">${escapeHtml(
|
|
437
|
-
<div class="skills-spotlight__title">${escapeHtml(
|
|
438
|
-
<div class="skills-spotlight__body">${escapeHtml(
|
|
596
|
+
<div class="skill-card__eyebrow">${escapeHtml(skill.name === "silicaclaw-owner-push" ? t("labels.skillsAutoPush") : t("labels.skillsBroadcastLearning"))}</div>
|
|
597
|
+
<div class="skills-spotlight__title">${escapeHtml(skill.display_name || skill.name)}</div>
|
|
598
|
+
<div class="skills-spotlight__body">${escapeHtml(skill.description || "-")}</div>
|
|
439
599
|
<div class="skill-card__tags">
|
|
440
|
-
<span class="${
|
|
441
|
-
${(
|
|
600
|
+
<span class="${skill.update_available ? "tag-chip warn" : skill.installed_in_openclaw ? "tag-chip emphasis" : "tag-chip muted"}">${skill.update_available ? t("labels.skillsUpdateAvailable") : skill.installed_in_openclaw ? `${t("labels.skillsStatus")}: ${t("common.yes")}` : t("hints.skillsNotInstalled")}</span>
|
|
601
|
+
${(skill.capabilities || []).slice(0, 8).map((item) => `<span class="tag-chip">${escapeHtml(String(item))}</span>`).join("")}
|
|
442
602
|
</div>
|
|
443
603
|
</div>
|
|
444
|
-
`
|
|
604
|
+
`).join("")
|
|
445
605
|
: `<div class="skills-empty">${t("hints.skillsNoBundled")}</div>`;
|
|
446
606
|
|
|
447
|
-
document.getElementById("skillsBundledGrid").innerHTML =
|
|
448
|
-
?
|
|
607
|
+
document.getElementById("skillsBundledGrid").innerHTML = bundledSorted.length
|
|
608
|
+
? bundledSorted.map((skill) => renderSkillCard(skill, {
|
|
449
609
|
eyebrow: skill.install_mode === "workspace" || skill.install_mode === "legacy" ? skill.install_mode : "bundled",
|
|
450
|
-
statusText: skill.
|
|
610
|
+
statusText: skill.update_available
|
|
611
|
+
? t("labels.skillsUpdateAvailable")
|
|
612
|
+
: skill.installed_in_openclaw
|
|
613
|
+
? `${t("labels.skillsStatus")}: ${t("common.yes")}`
|
|
614
|
+
: t("hints.skillsNotInstalled"),
|
|
615
|
+
installable: true,
|
|
616
|
+
updateAvailable: skill.update_available,
|
|
617
|
+
installedVersion: skill.installed_version,
|
|
618
|
+
bundledVersion: skill.version,
|
|
451
619
|
})).join("")
|
|
452
620
|
: `<div class="skills-empty">${t("hints.skillsNoBundled")}</div>`;
|
|
453
621
|
|
|
454
|
-
document.getElementById("skillsInstalledGrid").innerHTML =
|
|
455
|
-
?
|
|
622
|
+
document.getElementById("skillsInstalledGrid").innerHTML = installedSorted.length
|
|
623
|
+
? installedSorted.map((skill) => renderSkillCard(skill, {
|
|
456
624
|
eyebrow: skill.install_mode || "installed",
|
|
457
|
-
statusText:
|
|
625
|
+
statusText: skill.update_available
|
|
626
|
+
? t("labels.skillsUpdateAvailable")
|
|
627
|
+
: `${t("labels.skillsStatus")}: ${escapeHtml(String(skill.install_mode || "-"))}`,
|
|
628
|
+
updateAvailable: skill.update_available,
|
|
629
|
+
installedVersion: skill.version,
|
|
630
|
+
bundledVersion: skill.bundled_version,
|
|
458
631
|
})).join("")
|
|
459
632
|
: `<div class="skills-empty">${t("hints.skillsNoInstalled")}</div>`;
|
|
460
633
|
|
|
634
|
+
document.getElementById("skillsDialogueGrid").innerHTML = featuredSkills.length
|
|
635
|
+
? featuredSkills.map((skill) => renderDialogueCard(skill)).join("")
|
|
636
|
+
: `<div class="skills-empty">${t("hints.skillsNoDialogueExamples")}</div>`;
|
|
637
|
+
|
|
461
638
|
const installBtn = document.getElementById("skillsInstallBtn");
|
|
462
639
|
installBtn.textContent = !openclawDetected
|
|
463
640
|
? t("actions.openclawNotInstalled")
|
|
464
641
|
: !openclawRunning
|
|
465
642
|
? t("actions.openclawNotRunning")
|
|
466
|
-
:
|
|
467
|
-
? t("actions.
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
643
|
+
: bundledUpdateCount > 0
|
|
644
|
+
? t("actions.updateSilicaClawSkills")
|
|
645
|
+
: allFeaturedInstalled
|
|
646
|
+
? t("actions.silicaClawSkillsInstalled")
|
|
647
|
+
: t("actions.installSilicaClawSkills");
|
|
648
|
+
installBtn.disabled = !openclawDetected || !openclawRunning || (allFeaturedInstalled && bundledUpdateCount === 0);
|
|
649
|
+
document.getElementById("skillsFeedback").textContent = allFeaturedInstalled && bundledUpdateCount === 0
|
|
471
650
|
? t("feedback.openclawSkillInstalled")
|
|
472
651
|
: installAction.recommended_command || t("common.ready");
|
|
473
652
|
}
|
|
@@ -192,6 +192,33 @@
|
|
|
192
192
|
stroke-linecap: round;
|
|
193
193
|
stroke-linejoin: round;
|
|
194
194
|
}
|
|
195
|
+
.skills-dialogue-list {
|
|
196
|
+
display: grid;
|
|
197
|
+
gap: 8px;
|
|
198
|
+
margin-top: 12px;
|
|
199
|
+
}
|
|
200
|
+
.skills-dialogue-group {
|
|
201
|
+
display: grid;
|
|
202
|
+
gap: 8px;
|
|
203
|
+
}
|
|
204
|
+
.skills-dialogue-group__title {
|
|
205
|
+
font-size: 12px;
|
|
206
|
+
font-weight: 700;
|
|
207
|
+
color: var(--text-strong);
|
|
208
|
+
letter-spacing: 0.01em;
|
|
209
|
+
}
|
|
210
|
+
.skills-dialogue-group__items {
|
|
211
|
+
display: grid;
|
|
212
|
+
gap: 8px;
|
|
213
|
+
}
|
|
214
|
+
.skills-dialogue-item {
|
|
215
|
+
padding: 10px 12px;
|
|
216
|
+
border-radius: 12px;
|
|
217
|
+
border: 1px solid color-mix(in srgb, var(--border) 74%, transparent);
|
|
218
|
+
background: color-mix(in srgb, var(--card-soft) 92%, transparent);
|
|
219
|
+
color: var(--text);
|
|
220
|
+
line-height: 1.5;
|
|
221
|
+
}
|
|
195
222
|
.sidebar-shell__body {
|
|
196
223
|
flex: 1 1 auto;
|
|
197
224
|
min-height: 0;
|
|
@@ -803,9 +830,6 @@
|
|
|
803
830
|
}
|
|
804
831
|
.notice.show { display: block; }
|
|
805
832
|
.integration-strip {
|
|
806
|
-
position: sticky;
|
|
807
|
-
top: 0;
|
|
808
|
-
z-index: 9;
|
|
809
833
|
margin-bottom: 4px;
|
|
810
834
|
border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
|
|
811
835
|
border-radius: 14px;
|
|
@@ -1846,8 +1870,7 @@
|
|
|
1846
1870
|
grid-template-columns: minmax(0, 1.12fr) minmax(320px, 0.88fr);
|
|
1847
1871
|
}
|
|
1848
1872
|
.profile-layout > .card:last-child {
|
|
1849
|
-
position:
|
|
1850
|
-
top: 0;
|
|
1873
|
+
position: relative;
|
|
1851
1874
|
}
|
|
1852
1875
|
.profile-meta {
|
|
1853
1876
|
border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
|
|
@@ -1894,6 +1917,11 @@
|
|
|
1894
1917
|
color: var(--muted);
|
|
1895
1918
|
border-style: dashed;
|
|
1896
1919
|
}
|
|
1920
|
+
.tag-chip.warn {
|
|
1921
|
+
color: color-mix(in srgb, var(--warn) 84%, var(--text-strong));
|
|
1922
|
+
border-color: color-mix(in srgb, var(--warn) 34%, transparent);
|
|
1923
|
+
background: color-mix(in srgb, var(--warn) 14%, transparent);
|
|
1924
|
+
}
|
|
1897
1925
|
.field-hint {
|
|
1898
1926
|
margin-top: 4px;
|
|
1899
1927
|
color: var(--muted);
|
|
@@ -1957,8 +1985,7 @@
|
|
|
1957
1985
|
align-items: start;
|
|
1958
1986
|
}
|
|
1959
1987
|
.chat-compose-card {
|
|
1960
|
-
position:
|
|
1961
|
-
top: 12px;
|
|
1988
|
+
position: relative;
|
|
1962
1989
|
}
|
|
1963
1990
|
.chat-compose-card textarea {
|
|
1964
1991
|
min-height: 220px;
|
|
@@ -1980,10 +2007,85 @@
|
|
|
1980
2007
|
}
|
|
1981
2008
|
.network-actions-card,
|
|
1982
2009
|
.social-actions-card {
|
|
1983
|
-
position:
|
|
1984
|
-
top: 12px;
|
|
2010
|
+
position: relative;
|
|
1985
2011
|
align-self: start;
|
|
1986
2012
|
}
|
|
2013
|
+
.skills-topline {
|
|
2014
|
+
display: grid;
|
|
2015
|
+
gap: 10px;
|
|
2016
|
+
grid-template-columns: minmax(0, 1.18fr) minmax(280px, 0.82fr);
|
|
2017
|
+
margin-bottom: 10px;
|
|
2018
|
+
}
|
|
2019
|
+
.skills-action-card {
|
|
2020
|
+
display: grid;
|
|
2021
|
+
gap: 18px;
|
|
2022
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
2023
|
+
align-items: center;
|
|
2024
|
+
border: 1px solid color-mix(in srgb, var(--accent) 28%, transparent);
|
|
2025
|
+
background:
|
|
2026
|
+
radial-gradient(circle at top left, color-mix(in srgb, var(--accent) 18%, transparent), transparent 36%),
|
|
2027
|
+
linear-gradient(180deg, color-mix(in srgb, var(--card-soft) 98%, transparent), color-mix(in srgb, var(--panel) 92%, transparent));
|
|
2028
|
+
}
|
|
2029
|
+
.skills-action-card__copy {
|
|
2030
|
+
display: grid;
|
|
2031
|
+
gap: 8px;
|
|
2032
|
+
}
|
|
2033
|
+
.skills-action-card__title {
|
|
2034
|
+
margin: 0;
|
|
2035
|
+
font-size: 24px;
|
|
2036
|
+
line-height: 1.15;
|
|
2037
|
+
color: var(--text-strong);
|
|
2038
|
+
}
|
|
2039
|
+
.skills-action-card__body {
|
|
2040
|
+
margin: 0;
|
|
2041
|
+
max-width: 720px;
|
|
2042
|
+
color: var(--text);
|
|
2043
|
+
line-height: 1.6;
|
|
2044
|
+
}
|
|
2045
|
+
.skills-action-card__side {
|
|
2046
|
+
display: grid;
|
|
2047
|
+
gap: 10px;
|
|
2048
|
+
min-width: 220px;
|
|
2049
|
+
justify-items: end;
|
|
2050
|
+
}
|
|
2051
|
+
.skills-action-card__side .actions {
|
|
2052
|
+
margin: 0;
|
|
2053
|
+
}
|
|
2054
|
+
.skills-action-card__state {
|
|
2055
|
+
display: inline-flex;
|
|
2056
|
+
align-items: center;
|
|
2057
|
+
justify-content: center;
|
|
2058
|
+
min-height: 36px;
|
|
2059
|
+
padding: 9px 12px;
|
|
2060
|
+
border-radius: 999px;
|
|
2061
|
+
border: 1px solid color-mix(in srgb, var(--border-strong) 84%, transparent);
|
|
2062
|
+
background: color-mix(in srgb, var(--panel) 86%, transparent);
|
|
2063
|
+
color: var(--text-strong);
|
|
2064
|
+
font-size: 12px;
|
|
2065
|
+
font-weight: 700;
|
|
2066
|
+
letter-spacing: 0.02em;
|
|
2067
|
+
text-align: center;
|
|
2068
|
+
}
|
|
2069
|
+
.skills-jump-card {
|
|
2070
|
+
display: grid;
|
|
2071
|
+
gap: 14px;
|
|
2072
|
+
}
|
|
2073
|
+
.skills-jump-card__header {
|
|
2074
|
+
display: grid;
|
|
2075
|
+
gap: 6px;
|
|
2076
|
+
}
|
|
2077
|
+
.skills-jump-card__title {
|
|
2078
|
+
font-size: 16px;
|
|
2079
|
+
font-weight: 700;
|
|
2080
|
+
color: var(--text-strong);
|
|
2081
|
+
}
|
|
2082
|
+
.skills-jump-list {
|
|
2083
|
+
display: grid;
|
|
2084
|
+
gap: 8px;
|
|
2085
|
+
}
|
|
2086
|
+
.skills-jump-btn {
|
|
2087
|
+
justify-content: flex-start;
|
|
2088
|
+
}
|
|
1987
2089
|
.skills-layout {
|
|
1988
2090
|
display: grid;
|
|
1989
2091
|
gap: 10px;
|
|
@@ -1994,6 +2096,45 @@
|
|
|
1994
2096
|
display: grid;
|
|
1995
2097
|
gap: 10px;
|
|
1996
2098
|
}
|
|
2099
|
+
.skills-section {
|
|
2100
|
+
display: grid;
|
|
2101
|
+
gap: 12px;
|
|
2102
|
+
}
|
|
2103
|
+
.skills-section__count {
|
|
2104
|
+
min-width: 42px;
|
|
2105
|
+
padding: 6px 10px;
|
|
2106
|
+
border-radius: 999px;
|
|
2107
|
+
border: 1px solid color-mix(in srgb, var(--border-strong) 76%, transparent);
|
|
2108
|
+
background: color-mix(in srgb, var(--panel) 90%, transparent);
|
|
2109
|
+
color: var(--text-strong);
|
|
2110
|
+
font-size: 12px;
|
|
2111
|
+
text-align: center;
|
|
2112
|
+
}
|
|
2113
|
+
#skillsSummaryCards {
|
|
2114
|
+
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
|
2115
|
+
}
|
|
2116
|
+
.skills-summary-card {
|
|
2117
|
+
display: grid;
|
|
2118
|
+
gap: 8px;
|
|
2119
|
+
padding: 14px 15px;
|
|
2120
|
+
border-radius: 16px;
|
|
2121
|
+
border: 1px solid color-mix(in srgb, var(--border) 84%, transparent);
|
|
2122
|
+
background:
|
|
2123
|
+
linear-gradient(180deg, color-mix(in srgb, var(--card-soft) 98%, transparent), color-mix(in srgb, var(--panel) 92%, transparent));
|
|
2124
|
+
box-shadow: inset 0 1px 0 color-mix(in srgb, white 4%, transparent);
|
|
2125
|
+
}
|
|
2126
|
+
.skills-summary-card .label {
|
|
2127
|
+
font-size: 11px;
|
|
2128
|
+
letter-spacing: 0.08em;
|
|
2129
|
+
text-transform: uppercase;
|
|
2130
|
+
color: var(--muted);
|
|
2131
|
+
}
|
|
2132
|
+
.skills-summary-card .value {
|
|
2133
|
+
font-size: 24px;
|
|
2134
|
+
line-height: 1;
|
|
2135
|
+
font-weight: 800;
|
|
2136
|
+
color: var(--text-strong);
|
|
2137
|
+
}
|
|
1997
2138
|
.skill-card {
|
|
1998
2139
|
border: 1px solid color-mix(in srgb, var(--border) 84%, transparent);
|
|
1999
2140
|
border-radius: 16px;
|
|
@@ -2064,10 +2205,14 @@
|
|
|
2064
2205
|
color: var(--text);
|
|
2065
2206
|
line-height: 1.4;
|
|
2066
2207
|
word-break: break-word;
|
|
2208
|
+
display: -webkit-box;
|
|
2209
|
+
-webkit-line-clamp: 3;
|
|
2210
|
+
line-clamp: 3;
|
|
2211
|
+
-webkit-box-orient: vertical;
|
|
2212
|
+
overflow: hidden;
|
|
2067
2213
|
}
|
|
2068
2214
|
.skills-feature-card {
|
|
2069
|
-
position:
|
|
2070
|
-
top: 0;
|
|
2215
|
+
position: relative;
|
|
2071
2216
|
}
|
|
2072
2217
|
.skills-spotlight {
|
|
2073
2218
|
border: 1px solid color-mix(in srgb, var(--accent) 24%, transparent);
|
|
@@ -2098,6 +2243,31 @@
|
|
|
2098
2243
|
line-height: 1.5;
|
|
2099
2244
|
font-size: 12.5px;
|
|
2100
2245
|
}
|
|
2246
|
+
@media (max-width: 1180px) {
|
|
2247
|
+
.skills-topline {
|
|
2248
|
+
grid-template-columns: 1fr;
|
|
2249
|
+
}
|
|
2250
|
+
.skills-action-card {
|
|
2251
|
+
grid-template-columns: 1fr;
|
|
2252
|
+
}
|
|
2253
|
+
.skills-action-card__side {
|
|
2254
|
+
min-width: 0;
|
|
2255
|
+
justify-items: start;
|
|
2256
|
+
}
|
|
2257
|
+
#skillsSummaryCards {
|
|
2258
|
+
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
|
|
2259
|
+
}
|
|
2260
|
+
}
|
|
2261
|
+
@media (max-width: 920px) {
|
|
2262
|
+
.skills-layout {
|
|
2263
|
+
grid-template-columns: 1fr;
|
|
2264
|
+
}
|
|
2265
|
+
}
|
|
2266
|
+
@media (max-width: 640px) {
|
|
2267
|
+
#skillsSummaryCards {
|
|
2268
|
+
grid-template-columns: 1fr;
|
|
2269
|
+
}
|
|
2270
|
+
}
|
|
2101
2271
|
.network-diagnostics-stack,
|
|
2102
2272
|
.social-advanced-stack {
|
|
2103
2273
|
display: grid;
|
|
@@ -2225,9 +2395,7 @@
|
|
|
2225
2395
|
border-bottom: 1px solid var(--border);
|
|
2226
2396
|
height: auto;
|
|
2227
2397
|
overflow: visible;
|
|
2228
|
-
position:
|
|
2229
|
-
top: 0;
|
|
2230
|
-
z-index: 20;
|
|
2398
|
+
position: relative;
|
|
2231
2399
|
backdrop-filter: blur(14px) saturate(1.3);
|
|
2232
2400
|
-webkit-backdrop-filter: blur(14px) saturate(1.3);
|
|
2233
2401
|
}
|