@silicaclaw/cli 2026.3.19-1 → 2026.3.19-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 +1 -1
- package/INSTALL.md +31 -0
- package/README.md +28 -0
- package/VERSION +1 -1
- package/apps/local-console/public/index.html +1327 -245
- package/apps/local-console/src/server.ts +439 -10
- package/docs/OPENCLAW_BRIDGE.md +85 -0
- package/docs/OPENCLAW_BRIDGE_ZH.md +90 -0
- package/openclaw-skills/silicaclaw-broadcast/SKILL.md +89 -0
- package/openclaw-skills/silicaclaw-broadcast/VERSION +1 -0
- package/openclaw-skills/silicaclaw-broadcast/agents/openai.yaml +6 -0
- package/openclaw-skills/silicaclaw-broadcast/manifest.json +34 -0
- package/openclaw-skills/silicaclaw-broadcast/references/computer-control-via-openclaw.md +41 -0
- package/openclaw-skills/silicaclaw-broadcast/references/owner-dispatch-adapter.md +81 -0
- package/openclaw-skills/silicaclaw-broadcast/references/owner-forwarding-policy.md +48 -0
- package/openclaw-skills/silicaclaw-broadcast/scripts/bridge-client.mjs +59 -0
- package/openclaw-skills/silicaclaw-broadcast/scripts/owner-dispatch-adapter-demo.mjs +12 -0
- package/openclaw-skills/silicaclaw-broadcast/scripts/owner-forwarder-demo.mjs +111 -0
- package/openclaw-skills/silicaclaw-broadcast/scripts/send-to-owner-via-openclaw.mjs +69 -0
- package/package.json +2 -1
- package/packages/core/dist/socialConfig.js +1 -1
- package/packages/core/dist/socialTemplate.js +1 -1
- package/packages/core/src/socialConfig.ts +1 -1
- package/packages/core/src/socialTemplate.ts +1 -1
- package/packages/network/dist/relayPreview.js +16 -4
- package/packages/network/src/relayPreview.ts +17 -4
- package/scripts/functional-check.mjs +29 -0
- package/scripts/install-openclaw-skill.mjs +54 -0
- package/scripts/openclaw-bridge-adapter.mjs +7 -0
- package/scripts/openclaw-bridge-client.mjs +42 -0
- package/scripts/pack-openclaw-skill.mjs +58 -0
- package/scripts/silicaclaw-cli.mjs +18 -0
- package/scripts/validate-openclaw-skill.mjs +74 -0
|
@@ -377,7 +377,7 @@
|
|
|
377
377
|
flex: 1;
|
|
378
378
|
overflow-y: auto;
|
|
379
379
|
overflow-x: hidden;
|
|
380
|
-
padding: 0;
|
|
380
|
+
padding: 0 2px;
|
|
381
381
|
}
|
|
382
382
|
.sidebar-nav::-webkit-scrollbar {
|
|
383
383
|
display: none;
|
|
@@ -473,6 +473,17 @@
|
|
|
473
473
|
inset 0 1px 0 color-mix(in srgb, white 10%, transparent),
|
|
474
474
|
0 10px 18px color-mix(in srgb, black 8%, transparent);
|
|
475
475
|
}
|
|
476
|
+
.nav button.active::before {
|
|
477
|
+
content: "";
|
|
478
|
+
position: absolute;
|
|
479
|
+
left: 8px;
|
|
480
|
+
top: 9px;
|
|
481
|
+
bottom: 9px;
|
|
482
|
+
width: 3px;
|
|
483
|
+
border-radius: 999px;
|
|
484
|
+
background: color-mix(in srgb, var(--accent) 86%, transparent);
|
|
485
|
+
box-shadow: 0 0 12px color-mix(in srgb, var(--accent) 28%, transparent);
|
|
486
|
+
}
|
|
476
487
|
.nav button.active .tab-icon {
|
|
477
488
|
opacity: 1;
|
|
478
489
|
color: var(--accent);
|
|
@@ -656,7 +667,7 @@
|
|
|
656
667
|
flex: 1 1 auto;
|
|
657
668
|
min-height: 0;
|
|
658
669
|
overflow: auto;
|
|
659
|
-
padding:
|
|
670
|
+
padding: 14px 22px 28px;
|
|
660
671
|
}
|
|
661
672
|
.status-row {
|
|
662
673
|
display: flex;
|
|
@@ -665,6 +676,11 @@
|
|
|
665
676
|
align-items: center;
|
|
666
677
|
flex-shrink: 0;
|
|
667
678
|
min-width: max-content;
|
|
679
|
+
overflow-x: auto;
|
|
680
|
+
scrollbar-width: none;
|
|
681
|
+
}
|
|
682
|
+
.status-row::-webkit-scrollbar {
|
|
683
|
+
display: none;
|
|
668
684
|
}
|
|
669
685
|
.topbar-status {
|
|
670
686
|
display: flex;
|
|
@@ -783,6 +799,7 @@
|
|
|
783
799
|
}
|
|
784
800
|
.pill.ok { color: var(--ok); border-color: rgba(34, 197, 94, 0.45); background: rgba(34, 197, 94, 0.08); }
|
|
785
801
|
.pill.warn { color: var(--warn); border-color: rgba(245, 158, 11, 0.45); background: rgba(245, 158, 11, 0.08); }
|
|
802
|
+
.pill.danger { color: var(--danger); border-color: rgba(239, 68, 68, 0.42); background: rgba(239, 68, 68, 0.08); }
|
|
786
803
|
|
|
787
804
|
.notice {
|
|
788
805
|
display: none;
|
|
@@ -815,6 +832,9 @@
|
|
|
815
832
|
.integration-strip.warn {
|
|
816
833
|
border-color: rgba(245, 158, 11, 0.35);
|
|
817
834
|
}
|
|
835
|
+
.integration-strip.hidden {
|
|
836
|
+
display: none;
|
|
837
|
+
}
|
|
818
838
|
.page-hero {
|
|
819
839
|
display: grid;
|
|
820
840
|
grid-template-columns: minmax(0, 1fr) 440px;
|
|
@@ -822,6 +842,12 @@
|
|
|
822
842
|
gap: 6px;
|
|
823
843
|
margin-bottom: 4px;
|
|
824
844
|
}
|
|
845
|
+
.page-hero.hidden {
|
|
846
|
+
display: none;
|
|
847
|
+
}
|
|
848
|
+
#publicDiscoveryHint.hidden {
|
|
849
|
+
display: none !important;
|
|
850
|
+
}
|
|
825
851
|
.hero-copy {
|
|
826
852
|
display: flex;
|
|
827
853
|
align-items: center;
|
|
@@ -872,7 +898,256 @@
|
|
|
872
898
|
.view { display: none; }
|
|
873
899
|
.view.active {
|
|
874
900
|
display: grid;
|
|
875
|
-
gap:
|
|
901
|
+
gap: 10px;
|
|
902
|
+
}
|
|
903
|
+
.view-shell {
|
|
904
|
+
display: grid;
|
|
905
|
+
gap: 10px;
|
|
906
|
+
width: min(100%, 1560px);
|
|
907
|
+
margin: 0 auto;
|
|
908
|
+
}
|
|
909
|
+
.page-banner {
|
|
910
|
+
display: grid;
|
|
911
|
+
grid-template-columns: minmax(0, 1.15fr) minmax(280px, 0.85fr);
|
|
912
|
+
gap: 10px;
|
|
913
|
+
align-items: stretch;
|
|
914
|
+
}
|
|
915
|
+
.page-banner__main,
|
|
916
|
+
.page-banner__side {
|
|
917
|
+
border: 1px solid color-mix(in srgb, var(--border) 84%, transparent);
|
|
918
|
+
border-radius: 18px;
|
|
919
|
+
background:
|
|
920
|
+
linear-gradient(180deg, color-mix(in srgb, var(--card-strong) 98%, transparent), color-mix(in srgb, var(--card-soft) 96%, transparent));
|
|
921
|
+
box-shadow:
|
|
922
|
+
inset 0 1px 0 color-mix(in srgb, white 4%, transparent),
|
|
923
|
+
0 12px 28px color-mix(in srgb, black 10%, transparent);
|
|
924
|
+
}
|
|
925
|
+
.page-banner__main {
|
|
926
|
+
padding: 16px 18px;
|
|
927
|
+
}
|
|
928
|
+
.page-banner__eyebrow {
|
|
929
|
+
margin: 0 0 6px;
|
|
930
|
+
color: var(--muted);
|
|
931
|
+
font-size: 11px;
|
|
932
|
+
font-weight: 800;
|
|
933
|
+
letter-spacing: 0.08em;
|
|
934
|
+
text-transform: uppercase;
|
|
935
|
+
}
|
|
936
|
+
.page-banner__title {
|
|
937
|
+
margin: 0;
|
|
938
|
+
color: var(--text-strong);
|
|
939
|
+
font-size: 22px;
|
|
940
|
+
letter-spacing: -0.04em;
|
|
941
|
+
line-height: 1.08;
|
|
942
|
+
}
|
|
943
|
+
.page-banner__body {
|
|
944
|
+
margin: 8px 0 0;
|
|
945
|
+
color: var(--muted);
|
|
946
|
+
font-size: 13px;
|
|
947
|
+
line-height: 1.6;
|
|
948
|
+
max-width: 68ch;
|
|
949
|
+
}
|
|
950
|
+
.page-banner__side {
|
|
951
|
+
display: grid;
|
|
952
|
+
gap: 8px;
|
|
953
|
+
padding: 12px;
|
|
954
|
+
}
|
|
955
|
+
.page-banner__meta {
|
|
956
|
+
border: 1px solid color-mix(in srgb, var(--border) 72%, transparent);
|
|
957
|
+
border-radius: 14px;
|
|
958
|
+
background: color-mix(in srgb, var(--panel) 88%, transparent);
|
|
959
|
+
padding: 10px 12px;
|
|
960
|
+
}
|
|
961
|
+
.page-banner__meta-label {
|
|
962
|
+
color: var(--muted);
|
|
963
|
+
font-size: 11px;
|
|
964
|
+
font-weight: 700;
|
|
965
|
+
letter-spacing: 0.07em;
|
|
966
|
+
text-transform: uppercase;
|
|
967
|
+
}
|
|
968
|
+
.page-banner__meta-value {
|
|
969
|
+
margin-top: 6px;
|
|
970
|
+
color: var(--text);
|
|
971
|
+
font-size: 13px;
|
|
972
|
+
line-height: 1.5;
|
|
973
|
+
}
|
|
974
|
+
.page-section-grid {
|
|
975
|
+
display: grid;
|
|
976
|
+
gap: 10px;
|
|
977
|
+
}
|
|
978
|
+
.page-section-grid.two-col {
|
|
979
|
+
grid-template-columns: minmax(0, 1.05fr) minmax(320px, 0.95fr);
|
|
980
|
+
align-items: start;
|
|
981
|
+
}
|
|
982
|
+
.page-column {
|
|
983
|
+
display: grid;
|
|
984
|
+
gap: 10px;
|
|
985
|
+
}
|
|
986
|
+
.overview-home {
|
|
987
|
+
display: grid;
|
|
988
|
+
grid-template-columns: minmax(0, 1.35fr) minmax(320px, 0.95fr);
|
|
989
|
+
gap: 10px;
|
|
990
|
+
}
|
|
991
|
+
.mission-card {
|
|
992
|
+
position: relative;
|
|
993
|
+
overflow: hidden;
|
|
994
|
+
border: 1px solid color-mix(in srgb, var(--border-strong) 70%, transparent);
|
|
995
|
+
border-radius: 20px;
|
|
996
|
+
background:
|
|
997
|
+
radial-gradient(520px 220px at 0% 0%, color-mix(in srgb, var(--accent) 16%, transparent), transparent 62%),
|
|
998
|
+
linear-gradient(180deg, color-mix(in srgb, var(--card-strong) 98%, transparent), color-mix(in srgb, var(--card-soft) 96%, transparent));
|
|
999
|
+
padding: 18px;
|
|
1000
|
+
box-shadow:
|
|
1001
|
+
inset 0 1px 0 color-mix(in srgb, white 6%, transparent),
|
|
1002
|
+
0 14px 34px color-mix(in srgb, black 14%, transparent);
|
|
1003
|
+
}
|
|
1004
|
+
.mission-card::after {
|
|
1005
|
+
content: "";
|
|
1006
|
+
position: absolute;
|
|
1007
|
+
inset: auto -80px -120px auto;
|
|
1008
|
+
width: 220px;
|
|
1009
|
+
height: 220px;
|
|
1010
|
+
border-radius: 999px;
|
|
1011
|
+
background: color-mix(in srgb, var(--accent) 14%, transparent);
|
|
1012
|
+
filter: blur(24px);
|
|
1013
|
+
pointer-events: none;
|
|
1014
|
+
}
|
|
1015
|
+
.mission-card__eyebrow {
|
|
1016
|
+
display: inline-flex;
|
|
1017
|
+
align-items: center;
|
|
1018
|
+
gap: 8px;
|
|
1019
|
+
margin-bottom: 12px;
|
|
1020
|
+
color: color-mix(in srgb, var(--accent) 74%, white 12%);
|
|
1021
|
+
font-size: 11px;
|
|
1022
|
+
font-weight: 800;
|
|
1023
|
+
letter-spacing: 0.12em;
|
|
1024
|
+
text-transform: uppercase;
|
|
1025
|
+
}
|
|
1026
|
+
.mission-card__title {
|
|
1027
|
+
margin: 0;
|
|
1028
|
+
font-size: 28px;
|
|
1029
|
+
line-height: 1.05;
|
|
1030
|
+
letter-spacing: -0.05em;
|
|
1031
|
+
color: var(--text-strong);
|
|
1032
|
+
max-width: 14ch;
|
|
1033
|
+
}
|
|
1034
|
+
.mission-card__body {
|
|
1035
|
+
margin: 12px 0 0;
|
|
1036
|
+
max-width: 64ch;
|
|
1037
|
+
color: var(--text);
|
|
1038
|
+
font-size: 14px;
|
|
1039
|
+
line-height: 1.65;
|
|
1040
|
+
}
|
|
1041
|
+
.mission-card__status {
|
|
1042
|
+
display: flex;
|
|
1043
|
+
flex-wrap: wrap;
|
|
1044
|
+
gap: 8px;
|
|
1045
|
+
margin-top: 16px;
|
|
1046
|
+
}
|
|
1047
|
+
.mission-status-pill {
|
|
1048
|
+
display: inline-flex;
|
|
1049
|
+
align-items: center;
|
|
1050
|
+
gap: 8px;
|
|
1051
|
+
min-height: 34px;
|
|
1052
|
+
padding: 7px 12px;
|
|
1053
|
+
border-radius: 999px;
|
|
1054
|
+
border: 1px solid color-mix(in srgb, var(--border) 84%, transparent);
|
|
1055
|
+
background: color-mix(in srgb, var(--bg-elevated) 76%, transparent);
|
|
1056
|
+
color: var(--text);
|
|
1057
|
+
font-size: 12px;
|
|
1058
|
+
font-weight: 600;
|
|
1059
|
+
}
|
|
1060
|
+
.mission-status-pill:nth-child(1) {
|
|
1061
|
+
border-color: color-mix(in srgb, var(--accent) 18%, transparent);
|
|
1062
|
+
}
|
|
1063
|
+
.mission-status-pill:nth-child(2) {
|
|
1064
|
+
border-color: color-mix(in srgb, var(--info) 20%, transparent);
|
|
1065
|
+
}
|
|
1066
|
+
.mission-status-pill:nth-child(3) {
|
|
1067
|
+
border-color: color-mix(in srgb, var(--ok) 18%, transparent);
|
|
1068
|
+
}
|
|
1069
|
+
.mission-status-pill strong {
|
|
1070
|
+
color: var(--text-strong);
|
|
1071
|
+
}
|
|
1072
|
+
.mission-actions {
|
|
1073
|
+
display: flex;
|
|
1074
|
+
flex-wrap: wrap;
|
|
1075
|
+
gap: 10px;
|
|
1076
|
+
margin-top: 18px;
|
|
1077
|
+
}
|
|
1078
|
+
.mission-side {
|
|
1079
|
+
display: grid;
|
|
1080
|
+
gap: 10px;
|
|
1081
|
+
}
|
|
1082
|
+
.priority-grid {
|
|
1083
|
+
display: grid;
|
|
1084
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1085
|
+
gap: 10px;
|
|
1086
|
+
}
|
|
1087
|
+
.priority-card {
|
|
1088
|
+
border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
|
|
1089
|
+
border-radius: 18px;
|
|
1090
|
+
background:
|
|
1091
|
+
linear-gradient(180deg, color-mix(in srgb, var(--bg-elevated) 96%, transparent), color-mix(in srgb, var(--panel) 98%, transparent));
|
|
1092
|
+
padding: 14px;
|
|
1093
|
+
box-shadow: inset 0 1px 0 color-mix(in srgb, white 4%, transparent);
|
|
1094
|
+
}
|
|
1095
|
+
.priority-card__label {
|
|
1096
|
+
color: var(--muted);
|
|
1097
|
+
font-size: 11px;
|
|
1098
|
+
font-weight: 700;
|
|
1099
|
+
letter-spacing: 0.08em;
|
|
1100
|
+
text-transform: uppercase;
|
|
1101
|
+
}
|
|
1102
|
+
.priority-card__value {
|
|
1103
|
+
margin-top: 10px;
|
|
1104
|
+
color: var(--text-strong);
|
|
1105
|
+
font-size: 22px;
|
|
1106
|
+
line-height: 1.1;
|
|
1107
|
+
letter-spacing: -0.04em;
|
|
1108
|
+
}
|
|
1109
|
+
.priority-card__meta {
|
|
1110
|
+
margin-top: 8px;
|
|
1111
|
+
color: var(--muted);
|
|
1112
|
+
font-size: 12px;
|
|
1113
|
+
line-height: 1.5;
|
|
1114
|
+
}
|
|
1115
|
+
.home-brief {
|
|
1116
|
+
border: 1px solid color-mix(in srgb, var(--border) 80%, transparent);
|
|
1117
|
+
border-radius: 18px;
|
|
1118
|
+
background: color-mix(in srgb, var(--bg-elevated) 94%, transparent);
|
|
1119
|
+
padding: 14px;
|
|
1120
|
+
}
|
|
1121
|
+
.home-brief__title {
|
|
1122
|
+
margin: 0 0 10px;
|
|
1123
|
+
color: var(--text-strong);
|
|
1124
|
+
font-size: 15px;
|
|
1125
|
+
}
|
|
1126
|
+
.home-brief__list {
|
|
1127
|
+
display: grid;
|
|
1128
|
+
gap: 10px;
|
|
1129
|
+
}
|
|
1130
|
+
.home-brief__item {
|
|
1131
|
+
display: grid;
|
|
1132
|
+
gap: 4px;
|
|
1133
|
+
padding-bottom: 10px;
|
|
1134
|
+
border-bottom: 1px solid color-mix(in srgb, var(--border) 68%, transparent);
|
|
1135
|
+
}
|
|
1136
|
+
.home-brief__item:last-child {
|
|
1137
|
+
padding-bottom: 0;
|
|
1138
|
+
border-bottom: none;
|
|
1139
|
+
}
|
|
1140
|
+
.home-brief__label {
|
|
1141
|
+
color: var(--muted);
|
|
1142
|
+
font-size: 11px;
|
|
1143
|
+
font-weight: 700;
|
|
1144
|
+
letter-spacing: 0.07em;
|
|
1145
|
+
text-transform: uppercase;
|
|
1146
|
+
}
|
|
1147
|
+
.home-brief__value {
|
|
1148
|
+
color: var(--text);
|
|
1149
|
+
font-size: 13px;
|
|
1150
|
+
line-height: 1.5;
|
|
876
1151
|
}
|
|
877
1152
|
|
|
878
1153
|
.overview-panel-header {
|
|
@@ -893,6 +1168,8 @@
|
|
|
893
1168
|
align-items: center;
|
|
894
1169
|
gap: 10px;
|
|
895
1170
|
flex-shrink: 0;
|
|
1171
|
+
flex-wrap: wrap;
|
|
1172
|
+
justify-content: flex-end;
|
|
896
1173
|
}
|
|
897
1174
|
.overview-inline-toggle {
|
|
898
1175
|
display: inline-flex;
|
|
@@ -980,6 +1257,42 @@
|
|
|
980
1257
|
font-size: 12px;
|
|
981
1258
|
color: var(--muted);
|
|
982
1259
|
}
|
|
1260
|
+
.section-surface.compact {
|
|
1261
|
+
padding: 10px 12px;
|
|
1262
|
+
}
|
|
1263
|
+
#view-agent .section-surface.compact {
|
|
1264
|
+
margin-top: 10px;
|
|
1265
|
+
}
|
|
1266
|
+
#view-agent .section-surface.compact .onboarding-guide {
|
|
1267
|
+
gap: 8px;
|
|
1268
|
+
}
|
|
1269
|
+
#view-agent .section-surface.compact .onboarding-guide__title {
|
|
1270
|
+
font-size: 14px;
|
|
1271
|
+
}
|
|
1272
|
+
#view-agent .section-surface.compact .onboarding-guide__body {
|
|
1273
|
+
font-size: 12px;
|
|
1274
|
+
line-height: 1.45;
|
|
1275
|
+
}
|
|
1276
|
+
#view-agent .section-surface.compact .onboarding-guide__steps {
|
|
1277
|
+
gap: 8px;
|
|
1278
|
+
}
|
|
1279
|
+
#view-agent .section-surface.compact .onboarding-step {
|
|
1280
|
+
padding: 9px 10px;
|
|
1281
|
+
border-radius: 12px;
|
|
1282
|
+
}
|
|
1283
|
+
#view-agent .section-surface.compact .onboarding-step__eyebrow {
|
|
1284
|
+
margin-bottom: 4px;
|
|
1285
|
+
font-size: 10px;
|
|
1286
|
+
}
|
|
1287
|
+
#view-agent .section-surface.compact .onboarding-step__title {
|
|
1288
|
+
font-size: 13px;
|
|
1289
|
+
}
|
|
1290
|
+
#view-agent .section-surface.compact .onboarding-step__body {
|
|
1291
|
+
min-height: 0;
|
|
1292
|
+
margin: 4px 0 8px;
|
|
1293
|
+
font-size: 12px;
|
|
1294
|
+
line-height: 1.4;
|
|
1295
|
+
}
|
|
983
1296
|
.subtle-hint {
|
|
984
1297
|
margin-top: 6px;
|
|
985
1298
|
color: var(--muted);
|
|
@@ -1108,17 +1421,21 @@
|
|
|
1108
1421
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
1109
1422
|
}
|
|
1110
1423
|
#networkCards,
|
|
1111
|
-
#socialPrimaryCards,
|
|
1112
|
-
#socialIntegrationCards,
|
|
1113
1424
|
#socialAdvancedCards {
|
|
1114
1425
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
1115
1426
|
}
|
|
1427
|
+
#socialPrimaryCards,
|
|
1428
|
+
#socialIntegrationCards,
|
|
1429
|
+
#openclawSkillCards,
|
|
1430
|
+
#socialGovernanceCards {
|
|
1431
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1432
|
+
}
|
|
1116
1433
|
.card {
|
|
1117
1434
|
border: 1px solid color-mix(in srgb, var(--border) 84%, transparent);
|
|
1118
1435
|
border-radius: 16px;
|
|
1119
1436
|
background:
|
|
1120
1437
|
linear-gradient(180deg, color-mix(in srgb, var(--card-strong) 98%, transparent), color-mix(in srgb, var(--card-soft) 96%, transparent));
|
|
1121
|
-
padding:
|
|
1438
|
+
padding: 14px;
|
|
1122
1439
|
min-width: 0;
|
|
1123
1440
|
box-shadow:
|
|
1124
1441
|
inset 0 1px 0 color-mix(in srgb, white 4%, transparent),
|
|
@@ -1170,9 +1487,12 @@
|
|
|
1170
1487
|
.table th, .table td {
|
|
1171
1488
|
border-bottom: 1px solid var(--border);
|
|
1172
1489
|
text-align: left;
|
|
1173
|
-
padding:
|
|
1490
|
+
padding: 9px 8px;
|
|
1174
1491
|
font-size: 13px;
|
|
1175
1492
|
}
|
|
1493
|
+
.table tbody tr:hover {
|
|
1494
|
+
background: color-mix(in srgb, var(--bg-hover) 68%, transparent);
|
|
1495
|
+
}
|
|
1176
1496
|
.agent-list {
|
|
1177
1497
|
display: grid;
|
|
1178
1498
|
gap: 8px;
|
|
@@ -1182,10 +1502,16 @@
|
|
|
1182
1502
|
grid-template-columns: auto minmax(0, 1fr) auto auto;
|
|
1183
1503
|
gap: 10px;
|
|
1184
1504
|
align-items: center;
|
|
1185
|
-
padding:
|
|
1505
|
+
padding: 12px;
|
|
1186
1506
|
border: 1px solid color-mix(in srgb, var(--border) 80%, transparent);
|
|
1187
1507
|
border-radius: 14px;
|
|
1188
1508
|
background: linear-gradient(180deg, color-mix(in srgb, var(--panel) 94%, transparent), color-mix(in srgb, var(--bg-elevated) 90%, transparent));
|
|
1509
|
+
transition: border-color .16s ease, transform .16s ease, box-shadow .16s ease;
|
|
1510
|
+
}
|
|
1511
|
+
.agent-card:hover {
|
|
1512
|
+
border-color: color-mix(in srgb, var(--accent) 16%, var(--border));
|
|
1513
|
+
transform: translateY(-1px);
|
|
1514
|
+
box-shadow: 0 14px 28px color-mix(in srgb, black 12%, transparent);
|
|
1189
1515
|
}
|
|
1190
1516
|
.agent-card__avatar {
|
|
1191
1517
|
width: 34px;
|
|
@@ -1374,6 +1700,12 @@
|
|
|
1374
1700
|
gap: 8px;
|
|
1375
1701
|
flex-wrap: wrap;
|
|
1376
1702
|
}
|
|
1703
|
+
.actions > button:first-child:not(.secondary),
|
|
1704
|
+
.mission-actions > button:not(.secondary):first-of-type {
|
|
1705
|
+
box-shadow:
|
|
1706
|
+
0 12px 26px color-mix(in srgb, var(--accent) 20%, transparent),
|
|
1707
|
+
inset 0 1px 0 rgba(255,255,255,0.08);
|
|
1708
|
+
}
|
|
1377
1709
|
.actions button,
|
|
1378
1710
|
.action-bar button,
|
|
1379
1711
|
.toolbar button {
|
|
@@ -1393,7 +1725,7 @@
|
|
|
1393
1725
|
.summary-item {
|
|
1394
1726
|
display: grid;
|
|
1395
1727
|
gap: 3px;
|
|
1396
|
-
padding:
|
|
1728
|
+
padding: 12px;
|
|
1397
1729
|
border-radius: 12px;
|
|
1398
1730
|
border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
|
|
1399
1731
|
background: linear-gradient(180deg, color-mix(in srgb, var(--bg-elevated) 98%, transparent), color-mix(in srgb, var(--panel) 94%, transparent));
|
|
@@ -1414,9 +1746,17 @@
|
|
|
1414
1746
|
background: var(--accent);
|
|
1415
1747
|
color: #ffffff;
|
|
1416
1748
|
font-weight: 700;
|
|
1417
|
-
|
|
1749
|
+
min-height: 40px;
|
|
1750
|
+
padding: 9px 14px;
|
|
1418
1751
|
cursor: pointer;
|
|
1419
1752
|
box-shadow: 0 10px 20px color-mix(in srgb, var(--accent) 16%, transparent);
|
|
1753
|
+
transition:
|
|
1754
|
+
transform .16s ease,
|
|
1755
|
+
filter .16s ease,
|
|
1756
|
+
background .16s ease,
|
|
1757
|
+
border-color .16s ease,
|
|
1758
|
+
color .16s ease,
|
|
1759
|
+
box-shadow .16s ease;
|
|
1420
1760
|
}
|
|
1421
1761
|
button:hover {
|
|
1422
1762
|
transform: translateY(-1px);
|
|
@@ -1451,6 +1791,14 @@
|
|
|
1451
1791
|
border-color: color-mix(in srgb, var(--accent) 18%, var(--border-strong));
|
|
1452
1792
|
background: color-mix(in srgb, var(--bg-hover) 86%, transparent);
|
|
1453
1793
|
}
|
|
1794
|
+
button:disabled,
|
|
1795
|
+
button[disabled] {
|
|
1796
|
+
opacity: 0.55;
|
|
1797
|
+
cursor: not-allowed;
|
|
1798
|
+
transform: none !important;
|
|
1799
|
+
filter: none !important;
|
|
1800
|
+
box-shadow: none !important;
|
|
1801
|
+
}
|
|
1454
1802
|
|
|
1455
1803
|
.feedback {
|
|
1456
1804
|
border: 1px solid color-mix(in srgb, var(--border) 84%, transparent);
|
|
@@ -1462,10 +1810,27 @@
|
|
|
1462
1810
|
box-shadow: inset 0 1px 0 color-mix(in srgb, white 4%, transparent);
|
|
1463
1811
|
line-height: 1.45;
|
|
1464
1812
|
}
|
|
1813
|
+
.feedback.info {
|
|
1814
|
+
border-color: color-mix(in srgb, var(--info) 32%, transparent);
|
|
1815
|
+
background: color-mix(in srgb, var(--info) 10%, var(--bg-elevated));
|
|
1816
|
+
}
|
|
1817
|
+
.feedback.warn {
|
|
1818
|
+
border-color: color-mix(in srgb, var(--warn) 34%, transparent);
|
|
1819
|
+
background: color-mix(in srgb, var(--warn) 10%, var(--bg-elevated));
|
|
1820
|
+
}
|
|
1821
|
+
.feedback.error {
|
|
1822
|
+
border-color: color-mix(in srgb, var(--danger) 36%, transparent);
|
|
1823
|
+
background: color-mix(in srgb, var(--danger) 10%, var(--bg-elevated));
|
|
1824
|
+
}
|
|
1465
1825
|
.profile-layout {
|
|
1466
1826
|
display: grid;
|
|
1467
|
-
gap:
|
|
1468
|
-
|
|
1827
|
+
gap: 10px;
|
|
1828
|
+
align-items: start;
|
|
1829
|
+
grid-template-columns: minmax(0, 1.12fr) minmax(320px, 0.88fr);
|
|
1830
|
+
}
|
|
1831
|
+
.profile-layout > .card:last-child {
|
|
1832
|
+
position: sticky;
|
|
1833
|
+
top: 0;
|
|
1469
1834
|
}
|
|
1470
1835
|
.profile-meta {
|
|
1471
1836
|
border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
|
|
@@ -1504,6 +1869,10 @@
|
|
|
1504
1869
|
padding: 3px 9px;
|
|
1505
1870
|
font-size: 12px;
|
|
1506
1871
|
}
|
|
1872
|
+
.tag-chip.emphasis {
|
|
1873
|
+
border-color: color-mix(in srgb, var(--accent) 22%, transparent);
|
|
1874
|
+
background: color-mix(in srgb, var(--accent-subtle) 78%, transparent);
|
|
1875
|
+
}
|
|
1507
1876
|
.tag-chip.muted {
|
|
1508
1877
|
color: var(--muted);
|
|
1509
1878
|
border-style: dashed;
|
|
@@ -1539,14 +1908,17 @@
|
|
|
1539
1908
|
border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
|
|
1540
1909
|
border-radius: 14px;
|
|
1541
1910
|
background: linear-gradient(180deg, color-mix(in srgb, var(--panel) 97%, transparent), color-mix(in srgb, var(--bg-elevated) 92%, transparent));
|
|
1542
|
-
padding:
|
|
1911
|
+
padding: 10px;
|
|
1543
1912
|
box-shadow: inset 0 1px 0 color-mix(in srgb, white 3%, transparent);
|
|
1544
1913
|
}
|
|
1545
1914
|
.log-item {
|
|
1546
|
-
border
|
|
1547
|
-
|
|
1915
|
+
border: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
|
|
1916
|
+
border-radius: 12px;
|
|
1917
|
+
padding: 10px 12px;
|
|
1918
|
+
background: linear-gradient(180deg, color-mix(in srgb, var(--bg-elevated) 96%, transparent), color-mix(in srgb, var(--panel) 94%, transparent));
|
|
1919
|
+
margin-bottom: 8px;
|
|
1548
1920
|
}
|
|
1549
|
-
.log-item:last-child {
|
|
1921
|
+
.log-item:last-child { margin-bottom: 0; }
|
|
1550
1922
|
.log-info { color: #8dc6ff; }
|
|
1551
1923
|
.log-warn { color: var(--warn); }
|
|
1552
1924
|
.log-error { color: var(--danger); }
|
|
@@ -1561,6 +1933,39 @@
|
|
|
1561
1933
|
.toolbar .field {
|
|
1562
1934
|
min-width: 180px;
|
|
1563
1935
|
}
|
|
1936
|
+
.chat-layout {
|
|
1937
|
+
display: grid;
|
|
1938
|
+
gap: 10px;
|
|
1939
|
+
grid-template-columns: minmax(320px, 0.88fr) minmax(0, 1.12fr);
|
|
1940
|
+
align-items: start;
|
|
1941
|
+
}
|
|
1942
|
+
.chat-compose-card {
|
|
1943
|
+
position: sticky;
|
|
1944
|
+
top: 0;
|
|
1945
|
+
}
|
|
1946
|
+
.chat-compose-card textarea {
|
|
1947
|
+
min-height: 220px;
|
|
1948
|
+
}
|
|
1949
|
+
.chat-feed-card .logs {
|
|
1950
|
+
min-height: 560px;
|
|
1951
|
+
max-height: none;
|
|
1952
|
+
}
|
|
1953
|
+
.chat-feed-card .log-item {
|
|
1954
|
+
padding: 12px 14px;
|
|
1955
|
+
}
|
|
1956
|
+
.chat-feed-card .overview-panel-header,
|
|
1957
|
+
.chat-compose-card .overview-panel-header {
|
|
1958
|
+
margin-bottom: 12px;
|
|
1959
|
+
}
|
|
1960
|
+
.network-actions-card .actions,
|
|
1961
|
+
.social-skill-card .actions {
|
|
1962
|
+
margin-top: 12px;
|
|
1963
|
+
}
|
|
1964
|
+
.network-diagnostics-stack,
|
|
1965
|
+
.social-advanced-stack {
|
|
1966
|
+
display: grid;
|
|
1967
|
+
gap: 10px;
|
|
1968
|
+
}
|
|
1564
1969
|
.mono-block {
|
|
1565
1970
|
border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
|
|
1566
1971
|
border-radius: 12px;
|
|
@@ -1622,22 +2027,49 @@
|
|
|
1622
2027
|
transform: translateY(0);
|
|
1623
2028
|
}
|
|
1624
2029
|
|
|
1625
|
-
#view-overview .action-bar
|
|
2030
|
+
#view-overview .action-bar,
|
|
2031
|
+
#view-agent .action-bar {
|
|
1626
2032
|
margin-bottom: 0;
|
|
1627
2033
|
display: flex;
|
|
1628
2034
|
gap: 10px;
|
|
1629
2035
|
align-items: center;
|
|
1630
2036
|
flex-wrap: wrap;
|
|
1631
2037
|
}
|
|
1632
|
-
#view-
|
|
2038
|
+
#view-agent .grid {
|
|
1633
2039
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
1634
2040
|
}
|
|
1635
|
-
#view-
|
|
2041
|
+
#view-agent .card .field-hint {
|
|
1636
2042
|
font-size: 12px;
|
|
1637
2043
|
}
|
|
1638
|
-
#view-
|
|
2044
|
+
#view-agent #snapshot {
|
|
1639
2045
|
line-height: 1.55;
|
|
1640
2046
|
}
|
|
2047
|
+
#view-agent .view-shell,
|
|
2048
|
+
#view-chat .view-shell,
|
|
2049
|
+
#view-profile .view-shell,
|
|
2050
|
+
#view-network .view-shell,
|
|
2051
|
+
#view-social .view-shell {
|
|
2052
|
+
gap: 10px;
|
|
2053
|
+
}
|
|
2054
|
+
#view-network #networkCards {
|
|
2055
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
2056
|
+
}
|
|
2057
|
+
#view-social .page-column > .card,
|
|
2058
|
+
#view-social .page-column > details.card,
|
|
2059
|
+
#view-social .page-column > details.advanced-panel.card {
|
|
2060
|
+
height: auto;
|
|
2061
|
+
}
|
|
2062
|
+
|
|
2063
|
+
@media (max-width: 1240px) {
|
|
2064
|
+
.page-section-grid.two-col,
|
|
2065
|
+
.chat-layout,
|
|
2066
|
+
.overview-home {
|
|
2067
|
+
grid-template-columns: 1fr;
|
|
2068
|
+
}
|
|
2069
|
+
#view-network #networkCards {
|
|
2070
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
2071
|
+
}
|
|
2072
|
+
}
|
|
1641
2073
|
|
|
1642
2074
|
@media (max-width: 980px) {
|
|
1643
2075
|
html, body {
|
|
@@ -1654,25 +2086,130 @@
|
|
|
1654
2086
|
border-bottom: 1px solid var(--border);
|
|
1655
2087
|
height: auto;
|
|
1656
2088
|
overflow: visible;
|
|
2089
|
+
position: sticky;
|
|
2090
|
+
top: 0;
|
|
2091
|
+
z-index: 20;
|
|
2092
|
+
backdrop-filter: blur(14px) saturate(1.3);
|
|
2093
|
+
-webkit-backdrop-filter: blur(14px) saturate(1.3);
|
|
1657
2094
|
}
|
|
1658
2095
|
.sidebar-shell {
|
|
1659
2096
|
display: block;
|
|
2097
|
+
padding: 10px 12px 12px;
|
|
2098
|
+
}
|
|
2099
|
+
.sidebar-shell__header {
|
|
2100
|
+
padding: 0 2px 10px;
|
|
2101
|
+
}
|
|
2102
|
+
.sidebar-nav {
|
|
2103
|
+
overflow-x: auto;
|
|
2104
|
+
overflow-y: hidden;
|
|
2105
|
+
padding: 0;
|
|
2106
|
+
scrollbar-width: none;
|
|
2107
|
+
}
|
|
2108
|
+
.sidebar-nav::-webkit-scrollbar {
|
|
2109
|
+
display: none;
|
|
2110
|
+
}
|
|
2111
|
+
.nav {
|
|
2112
|
+
display: flex;
|
|
2113
|
+
gap: 8px;
|
|
2114
|
+
min-width: max-content;
|
|
2115
|
+
padding-bottom: 2px;
|
|
2116
|
+
}
|
|
2117
|
+
.nav-section {
|
|
2118
|
+
display: contents;
|
|
2119
|
+
}
|
|
2120
|
+
.nav-section__label {
|
|
2121
|
+
display: none;
|
|
1660
2122
|
}
|
|
1661
|
-
.nav {
|
|
1662
|
-
|
|
1663
|
-
|
|
2123
|
+
.nav-section__items {
|
|
2124
|
+
display: flex;
|
|
2125
|
+
gap: 8px;
|
|
2126
|
+
}
|
|
2127
|
+
.nav button {
|
|
2128
|
+
min-width: 124px;
|
|
2129
|
+
min-height: 46px;
|
|
2130
|
+
padding: 0 12px;
|
|
2131
|
+
border-radius: 14px;
|
|
2132
|
+
background: color-mix(in srgb, var(--bg-elevated) 84%, transparent);
|
|
2133
|
+
border-color: color-mix(in srgb, var(--border) 72%, transparent);
|
|
2134
|
+
}
|
|
2135
|
+
.nav button.active::before {
|
|
2136
|
+
left: 10px;
|
|
2137
|
+
top: auto;
|
|
2138
|
+
bottom: 6px;
|
|
2139
|
+
width: calc(100% - 20px);
|
|
2140
|
+
height: 3px;
|
|
2141
|
+
}
|
|
2142
|
+
.grid,
|
|
2143
|
+
#view-network #networkCards,
|
|
2144
|
+
#socialPrimaryCards,
|
|
2145
|
+
#socialIntegrationCards,
|
|
2146
|
+
#openclawSkillCards,
|
|
2147
|
+
#socialGovernanceCards,
|
|
2148
|
+
#socialAdvancedCards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
2149
|
+
.split, .row, .profile-layout, .page-hero, .overview-home, .onboarding-guide__steps, .page-banner, .page-section-grid.two-col, .chat-layout { grid-template-columns: 1fr; }
|
|
2150
|
+
.priority-grid { grid-template-columns: 1fr; }
|
|
1664
2151
|
.hero-copy {
|
|
1665
2152
|
display: grid;
|
|
1666
2153
|
gap: 4px;
|
|
1667
2154
|
}
|
|
2155
|
+
.profile-layout > .card:last-child,
|
|
2156
|
+
.chat-compose-card {
|
|
2157
|
+
position: static;
|
|
2158
|
+
}
|
|
1668
2159
|
.main {
|
|
1669
2160
|
height: auto;
|
|
1670
2161
|
overflow: visible;
|
|
1671
2162
|
padding-bottom: 18px;
|
|
1672
2163
|
}
|
|
2164
|
+
.topbar {
|
|
2165
|
+
min-height: 54px;
|
|
2166
|
+
padding: 0 14px;
|
|
2167
|
+
}
|
|
2168
|
+
.topnav-shell {
|
|
2169
|
+
gap: 10px;
|
|
2170
|
+
min-height: 46px;
|
|
2171
|
+
}
|
|
2172
|
+
.topbar-status {
|
|
2173
|
+
max-width: 52vw;
|
|
2174
|
+
justify-content: flex-end;
|
|
2175
|
+
}
|
|
1673
2176
|
.main-scroll {
|
|
1674
2177
|
overflow: visible;
|
|
1675
|
-
padding
|
|
2178
|
+
padding: 12px 14px 22px;
|
|
2179
|
+
}
|
|
2180
|
+
}
|
|
2181
|
+
@media (max-width: 720px) {
|
|
2182
|
+
.topnav-shell {
|
|
2183
|
+
align-items: center;
|
|
2184
|
+
}
|
|
2185
|
+
.dashboard-header__breadcrumb {
|
|
2186
|
+
font-size: 12px;
|
|
2187
|
+
}
|
|
2188
|
+
.topbar-status {
|
|
2189
|
+
max-width: 48vw;
|
|
2190
|
+
}
|
|
2191
|
+
.topbar-actions {
|
|
2192
|
+
gap: 6px;
|
|
2193
|
+
}
|
|
2194
|
+
.icon-btn {
|
|
2195
|
+
width: 30px;
|
|
2196
|
+
height: 30px;
|
|
2197
|
+
}
|
|
2198
|
+
.page-banner__main,
|
|
2199
|
+
.page-banner__side,
|
|
2200
|
+
.mission-card,
|
|
2201
|
+
.card {
|
|
2202
|
+
border-radius: 16px;
|
|
2203
|
+
}
|
|
2204
|
+
.page-banner__title,
|
|
2205
|
+
.mission-card__title {
|
|
2206
|
+
font-size: 20px;
|
|
2207
|
+
max-width: none;
|
|
2208
|
+
}
|
|
2209
|
+
.page-banner__body,
|
|
2210
|
+
.mission-card__body {
|
|
2211
|
+
font-size: 12.5px;
|
|
2212
|
+
line-height: 1.55;
|
|
1676
2213
|
}
|
|
1677
2214
|
}
|
|
1678
2215
|
</style>
|
|
@@ -1713,7 +2250,34 @@
|
|
|
1713
2250
|
<line x1="6" x2="6" y1="20" y2="16"></line>
|
|
1714
2251
|
</svg>
|
|
1715
2252
|
</span>
|
|
1716
|
-
<span class="tab-labels"><span class="tab-title">Overview</span><span class="tab-copy">
|
|
2253
|
+
<span class="tab-labels"><span class="tab-title">Overview</span><span class="tab-copy">OpenClaw-first homepage and mission status</span></span>
|
|
2254
|
+
</button>
|
|
2255
|
+
<button class="tab nav-item" data-tab="agent">
|
|
2256
|
+
<span class="tab-icon" aria-hidden="true">
|
|
2257
|
+
<svg viewBox="0 0 24 24">
|
|
2258
|
+
<circle cx="12" cy="8" r="4"></circle>
|
|
2259
|
+
<path d="M5 20c1.6-3.8 4.2-5.7 7-5.7s5.4 1.9 7 5.7"></path>
|
|
2260
|
+
</svg>
|
|
2261
|
+
</span>
|
|
2262
|
+
<span class="tab-labels"><span class="tab-title">Agent</span><span class="tab-copy">Agent list, node snapshot, and broadcast feed</span></span>
|
|
2263
|
+
</button>
|
|
2264
|
+
<button class="tab nav-item" data-tab="chat">
|
|
2265
|
+
<span class="tab-icon" aria-hidden="true">
|
|
2266
|
+
<svg viewBox="0 0 24 24">
|
|
2267
|
+
<path d="M21 15a2 2 0 0 1-2 2H8l-5 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
|
|
2268
|
+
<path d="M8 9h8"></path>
|
|
2269
|
+
<path d="M8 13h6"></path>
|
|
2270
|
+
</svg>
|
|
2271
|
+
</span>
|
|
2272
|
+
<span class="tab-labels"><span class="tab-title">Chat</span><span class="tab-copy">Public broadcast feed and message sending</span></span>
|
|
2273
|
+
</button>
|
|
2274
|
+
<button class="tab nav-item" data-tab="social">
|
|
2275
|
+
<span class="tab-icon" aria-hidden="true">
|
|
2276
|
+
<svg viewBox="0 0 24 24">
|
|
2277
|
+
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
|
|
2278
|
+
</svg>
|
|
2279
|
+
</span>
|
|
2280
|
+
<span class="tab-labels"><span class="tab-title">Social</span><span class="tab-copy">social.md config and runtime state</span></span>
|
|
1717
2281
|
</button>
|
|
1718
2282
|
<button class="tab nav-item" data-tab="profile">
|
|
1719
2283
|
<span class="tab-icon" aria-hidden="true">
|
|
@@ -1735,14 +2299,6 @@
|
|
|
1735
2299
|
</svg>
|
|
1736
2300
|
</span>
|
|
1737
2301
|
<span class="tab-labels"><span class="tab-title">Network</span><span class="tab-copy">Relay health, broadcast, diagnostics</span></span>
|
|
1738
|
-
</button>
|
|
1739
|
-
<button class="tab nav-item" data-tab="social">
|
|
1740
|
-
<span class="tab-icon" aria-hidden="true">
|
|
1741
|
-
<svg viewBox="0 0 24 24">
|
|
1742
|
-
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
|
|
1743
|
-
</svg>
|
|
1744
|
-
</span>
|
|
1745
|
-
<span class="tab-labels"><span class="tab-title">Social</span><span class="tab-copy">social.md config and runtime state</span></span>
|
|
1746
2302
|
</button>
|
|
1747
2303
|
</div>
|
|
1748
2304
|
</section>
|
|
@@ -1849,7 +2405,70 @@
|
|
|
1849
2405
|
</div>
|
|
1850
2406
|
|
|
1851
2407
|
<section id="view-overview" class="view active">
|
|
1852
|
-
<div class="
|
|
2408
|
+
<div class="overview-home">
|
|
2409
|
+
<div class="mission-card">
|
|
2410
|
+
<div class="mission-card__eyebrow" id="homeMissionEyebrow">OpenClaw First</div>
|
|
2411
|
+
<h3 class="mission-card__title" id="homeMissionTitle">SilicaClaw is broadcasting so OpenClaw can learn and forward.</h3>
|
|
2412
|
+
<p class="mission-card__body" id="homeMissionBody">Use this homepage to confirm whether this machine is acting as the global broadcaster, or as the OpenClaw listener that forwards important signals to the owner.</p>
|
|
2413
|
+
<div class="mission-card__status" id="homeMissionStatus"></div>
|
|
2414
|
+
<div class="mission-actions">
|
|
2415
|
+
<button class="secondary" id="homeOpenAgentBtn" type="button">Open Agent</button>
|
|
2416
|
+
<button id="homeOpenSocialBtn" type="button">Open Social</button>
|
|
2417
|
+
<button class="secondary" id="homeBroadcastNowBtn" type="button">Announce Node Now</button>
|
|
2418
|
+
<button class="secondary" id="homeOpenNetworkBtn" type="button">Open Network</button>
|
|
2419
|
+
</div>
|
|
2420
|
+
</div>
|
|
2421
|
+
<div class="mission-side">
|
|
2422
|
+
<div class="priority-grid" id="homePriorityGrid"></div>
|
|
2423
|
+
<div class="home-brief">
|
|
2424
|
+
<h3 class="home-brief__title" id="homeBriefTitle">Mission Brief</h3>
|
|
2425
|
+
<div class="home-brief__list" id="homeBriefList"></div>
|
|
2426
|
+
</div>
|
|
2427
|
+
</div>
|
|
2428
|
+
</div>
|
|
2429
|
+
</section>
|
|
2430
|
+
|
|
2431
|
+
<section id="view-agent" class="view">
|
|
2432
|
+
<div class="view-shell">
|
|
2433
|
+
<div class="page-banner">
|
|
2434
|
+
<div class="page-banner__main">
|
|
2435
|
+
<div class="page-banner__eyebrow" id="agentBannerEyebrow">Agent</div>
|
|
2436
|
+
<h3 class="page-banner__title" id="agentBannerTitle">See agents first, then inspect this node.</h3>
|
|
2437
|
+
<p class="page-banner__body" id="agentBannerBody">This page is tuned for fast scanning. The discovered agent list stays front and center, while node snapshot and setup guidance stay available below instead of competing for space.</p>
|
|
2438
|
+
</div>
|
|
2439
|
+
<div class="page-banner__side">
|
|
2440
|
+
<div class="page-banner__meta">
|
|
2441
|
+
<div class="page-banner__meta-label" id="agentBannerDiscoveryLabel">Discovery</div>
|
|
2442
|
+
<div class="page-banner__meta-value" id="agentsCountHint">0 agents</div>
|
|
2443
|
+
</div>
|
|
2444
|
+
<div class="page-banner__meta">
|
|
2445
|
+
<div class="page-banner__meta-label" id="agentBannerSourceLabel">Current Source</div>
|
|
2446
|
+
<div class="page-banner__meta-value" id="overviewModeHint">Current mode decides where discovery comes from.</div>
|
|
2447
|
+
</div>
|
|
2448
|
+
</div>
|
|
2449
|
+
</div>
|
|
2450
|
+
<div class="grid" id="overviewCards"></div>
|
|
2451
|
+
<div class="card">
|
|
2452
|
+
<div class="overview-panel-header">
|
|
2453
|
+
<div class="overview-panel-title">
|
|
2454
|
+
<h3 class="title-sm" id="agentListTitle">Discovered Agents</h3>
|
|
2455
|
+
<div class="field-hint" id="agentListHint">Browse the latest public nodes visible from this machine.</div>
|
|
2456
|
+
</div>
|
|
2457
|
+
<div class="overview-panel-controls">
|
|
2458
|
+
<label class="overview-inline-toggle">
|
|
2459
|
+
<input type="checkbox" id="onlyOnlineToggle" />
|
|
2460
|
+
<span id="onlyOnlineToggleLabel">Only show online</span>
|
|
2461
|
+
</label>
|
|
2462
|
+
<button class="secondary" id="clearDiscoveryCacheBtn" type="button">Clear Cache</button>
|
|
2463
|
+
</div>
|
|
2464
|
+
</div>
|
|
2465
|
+
<div id="agentsWrap"></div>
|
|
2466
|
+
</div>
|
|
2467
|
+
<div class="card">
|
|
2468
|
+
<h3 class="title-sm" id="agentSnapshotTitle">Node Snapshot</h3>
|
|
2469
|
+
<div class="mono" id="snapshot"></div>
|
|
2470
|
+
</div>
|
|
2471
|
+
<div class="section-surface compact">
|
|
1853
2472
|
<div class="onboarding-guide">
|
|
1854
2473
|
<div class="onboarding-guide__header">
|
|
1855
2474
|
<div>
|
|
@@ -1891,48 +2510,32 @@
|
|
|
1891
2510
|
</div>
|
|
1892
2511
|
</div>
|
|
1893
2512
|
</div>
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
<input type="checkbox" id="onlyOnlineToggle" />
|
|
1905
|
-
<span>Only show online</span>
|
|
1906
|
-
</label>
|
|
1907
|
-
<button class="secondary" id="clearDiscoveryCacheBtn" type="button">Clear Cache</button>
|
|
1908
|
-
</div>
|
|
1909
|
-
</div>
|
|
1910
|
-
<div class="field-hint" id="overviewModeHint" style="margin-bottom:12px;">Current mode decides where discovery comes from.</div>
|
|
1911
|
-
<div id="agentsWrap"></div>
|
|
2513
|
+
</div>
|
|
2514
|
+
</section>
|
|
2515
|
+
|
|
2516
|
+
<section id="view-chat" class="view">
|
|
2517
|
+
<div class="view-shell">
|
|
2518
|
+
<div class="page-banner">
|
|
2519
|
+
<div class="page-banner__main">
|
|
2520
|
+
<div class="page-banner__eyebrow" id="chatBannerEyebrow">Chat</div>
|
|
2521
|
+
<h3 class="page-banner__title" id="chatBannerTitle">Broadcast publicly, then watch the network echo back.</h3>
|
|
2522
|
+
<p class="page-banner__body" id="chatBannerBody">Use the composer to publish one-way public signals and keep the live feed open to verify what this node can actually observe across the network.</p>
|
|
1912
2523
|
</div>
|
|
1913
|
-
<div class="
|
|
1914
|
-
<
|
|
1915
|
-
|
|
2524
|
+
<div class="page-banner__side">
|
|
2525
|
+
<div class="page-banner__meta">
|
|
2526
|
+
<div class="page-banner__meta-label" id="chatBannerFeedLabel">Feed</div>
|
|
2527
|
+
<div class="page-banner__meta-value" id="socialMessageMeta">Recent public broadcasts seen by this node.</div>
|
|
2528
|
+
</div>
|
|
1916
2529
|
</div>
|
|
1917
2530
|
</div>
|
|
1918
|
-
<div class="
|
|
1919
|
-
<div class="
|
|
1920
|
-
<div class="overview-panel-
|
|
1921
|
-
<
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
<label class="overview-inline-toggle">
|
|
1926
|
-
<span id="socialMessageFilterLabel">Show</span>
|
|
1927
|
-
<select id="socialMessageFilterSelect">
|
|
1928
|
-
<option value="all">all</option>
|
|
1929
|
-
<option value="self">mine</option>
|
|
1930
|
-
<option value="remote">remote</option>
|
|
1931
|
-
</select>
|
|
1932
|
-
</label>
|
|
2531
|
+
<div class="chat-layout">
|
|
2532
|
+
<div class="card stack chat-compose-card">
|
|
2533
|
+
<div class="overview-panel-header">
|
|
2534
|
+
<div class="overview-panel-title">
|
|
2535
|
+
<h3 class="title-sm" id="chatComposerTitle">Broadcast Public Message</h3>
|
|
2536
|
+
<div class="field-hint" id="socialMessageHint">This is a one-way public broadcast stream, not a full chat system. No replies, private chat, or delivery guarantee yet.</div>
|
|
2537
|
+
</div>
|
|
1933
2538
|
</div>
|
|
1934
|
-
</div>
|
|
1935
|
-
<div class="stack">
|
|
1936
2539
|
<div class="toolbar">
|
|
1937
2540
|
<div class="field">
|
|
1938
2541
|
<label for="socialMessageTopicSelect" id="socialMessageTopicLabel">Topic</label>
|
|
@@ -1946,19 +2549,46 @@
|
|
|
1946
2549
|
<button id="socialMessageSendBtn" type="button">Broadcast Public Message</button>
|
|
1947
2550
|
<button class="secondary" id="socialMessageRefreshBtn" type="button">Refresh Feed</button>
|
|
1948
2551
|
</div>
|
|
1949
|
-
<div class="subtle-hint" id="socialMessageHint">This is a one-way public broadcast stream, not a full chat system. No replies, private chat, or delivery guarantee yet.</div>
|
|
1950
2552
|
<div id="socialMessageFeedback" class="feedback">Ready.</div>
|
|
1951
2553
|
</div>
|
|
1952
|
-
<div class="
|
|
2554
|
+
<div class="card stack chat-feed-card">
|
|
2555
|
+
<div class="overview-panel-header">
|
|
2556
|
+
<div class="overview-panel-title">
|
|
2557
|
+
<h3 class="title-sm" id="socialMessageTitle">Public Broadcast Feed</h3>
|
|
2558
|
+
<div class="field-hint" id="chatFeedHint">Review what this node and other nodes have recently published.</div>
|
|
2559
|
+
</div>
|
|
2560
|
+
<div class="overview-panel-controls">
|
|
2561
|
+
<label class="overview-inline-toggle">
|
|
2562
|
+
<span id="socialMessageFilterLabel">Show</span>
|
|
2563
|
+
<select id="socialMessageFilterSelect">
|
|
2564
|
+
<option value="all">all</option>
|
|
2565
|
+
<option value="self">mine</option>
|
|
2566
|
+
<option value="remote">remote</option>
|
|
2567
|
+
</select>
|
|
2568
|
+
</label>
|
|
2569
|
+
</div>
|
|
2570
|
+
</div>
|
|
2571
|
+
<div class="logs" id="socialMessageList"></div>
|
|
2572
|
+
</div>
|
|
2573
|
+
</div>
|
|
1953
2574
|
</div>
|
|
1954
2575
|
</section>
|
|
1955
2576
|
|
|
1956
2577
|
<section id="view-profile" class="view">
|
|
1957
|
-
<div class="
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
<
|
|
1961
|
-
|
|
2578
|
+
<div class="view-shell">
|
|
2579
|
+
<div class="page-banner">
|
|
2580
|
+
<div class="page-banner__main">
|
|
2581
|
+
<div class="section-header__copy">
|
|
2582
|
+
<div class="section-header__eyebrow">Profile</div>
|
|
2583
|
+
<h3 class="page-banner__title" id="profileBannerTitle">Shape the public identity other nodes will see.</h3>
|
|
2584
|
+
<p class="page-banner__body" id="profileBannerBody">Keep the editor on the left and the signed public preview on the right so it is always obvious what is draft-only and what is actually exposed to the network.</p>
|
|
2585
|
+
</div>
|
|
2586
|
+
</div>
|
|
2587
|
+
<div class="page-banner__side">
|
|
2588
|
+
<div class="page-banner__meta">
|
|
2589
|
+
<div class="page-banner__meta-label" id="profileBannerPublishingLabel">Publishing</div>
|
|
2590
|
+
<div class="page-banner__meta-value" id="profileBannerPublishingValue">Use Public Enabled as the single visibility switch, then save before announcing the node.</div>
|
|
2591
|
+
</div>
|
|
1962
2592
|
</div>
|
|
1963
2593
|
</div>
|
|
1964
2594
|
<div class="profile-layout">
|
|
@@ -2044,24 +2674,34 @@
|
|
|
2044
2674
|
</div>
|
|
2045
2675
|
</div>
|
|
2046
2676
|
</div>
|
|
2677
|
+
</div>
|
|
2047
2678
|
</section>
|
|
2048
2679
|
|
|
2049
2680
|
<section id="view-network" class="view">
|
|
2050
|
-
<div class="
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
<
|
|
2054
|
-
|
|
2681
|
+
<div class="view-shell">
|
|
2682
|
+
<div class="page-banner">
|
|
2683
|
+
<div class="page-banner__main">
|
|
2684
|
+
<div class="section-header__copy">
|
|
2685
|
+
<div class="section-header__eyebrow">Network</div>
|
|
2686
|
+
<h3 class="page-banner__title" id="networkBannerTitle">Check health first, then decide whether to operate or debug.</h3>
|
|
2687
|
+
<p class="page-banner__body" id="networkBannerBody">The top of this page is now for immediate decisions: are relay, room, peers, and broadcasting healthy enough to keep going, or do you need diagnostics next.</p>
|
|
2688
|
+
</div>
|
|
2689
|
+
</div>
|
|
2690
|
+
<div class="page-banner__side">
|
|
2691
|
+
<div class="page-banner__meta">
|
|
2692
|
+
<div class="page-banner__meta-label" id="networkBannerPurposeLabel">Purpose</div>
|
|
2693
|
+
<div class="page-banner__meta-value" id="networkBannerPurposeValue">Use this page for node broadcast control and relay diagnostics, not for public chat messages.</div>
|
|
2694
|
+
</div>
|
|
2055
2695
|
</div>
|
|
2056
2696
|
</div>
|
|
2057
2697
|
<div class="grid" id="networkCards"></div>
|
|
2058
|
-
<div class="
|
|
2698
|
+
<div class="page-section-grid two-col">
|
|
2059
2699
|
<div class="card">
|
|
2060
|
-
<h3 class="title-sm">Connection Summary</h3>
|
|
2700
|
+
<h3 class="title-sm" id="networkConnectionTitle">Connection Summary</h3>
|
|
2061
2701
|
<div class="summary-list" id="networkSummaryList"></div>
|
|
2062
2702
|
</div>
|
|
2063
|
-
<div class="card">
|
|
2064
|
-
<h3 class="title-sm">Broadcast Control</h3>
|
|
2703
|
+
<div class="card network-actions-card">
|
|
2704
|
+
<h3 class="title-sm" id="networkQuickActionsTitle">Broadcast Control</h3>
|
|
2065
2705
|
<div class="field-hint" style="margin-bottom:10px;">Use these first.</div>
|
|
2066
2706
|
<div class="subtle-hint" id="networkBroadcastHint">Start or stop the continuous broadcast loop here. Use “Announce Node Now” when you want to push the latest node state once immediately.</div>
|
|
2067
2707
|
<div class="actions">
|
|
@@ -2070,7 +2710,7 @@
|
|
|
2070
2710
|
<button class="secondary" id="broadcastNowBtn">Broadcast Now</button>
|
|
2071
2711
|
</div>
|
|
2072
2712
|
<details class="advanced-panel">
|
|
2073
|
-
<summary class="title-sm">Advanced Actions</summary>
|
|
2713
|
+
<summary class="title-sm" id="networkAdvancedActionsSummary">Advanced Actions</summary>
|
|
2074
2714
|
<div class="actions" style="margin-top:10px;">
|
|
2075
2715
|
<button class="secondary" id="quickGlobalPreviewBtn">Enable Cross-network Preview</button>
|
|
2076
2716
|
</div>
|
|
@@ -2079,33 +2719,34 @@
|
|
|
2079
2719
|
</div>
|
|
2080
2720
|
</div>
|
|
2081
2721
|
<details class="advanced-panel card">
|
|
2082
|
-
<summary class="title-sm">Diagnostics</summary>
|
|
2083
|
-
<div class="
|
|
2084
|
-
|
|
2722
|
+
<summary class="title-sm" id="networkDiagnosticsSummary">Diagnostics</summary>
|
|
2723
|
+
<div class="network-diagnostics-stack" style="margin-top:10px;">
|
|
2724
|
+
<div class="card">
|
|
2725
|
+
<h3 class="title-sm" id="networkRuntimeComponentsTitle">Runtime Components</h3>
|
|
2085
2726
|
<div class="mono" id="networkComponents"></div>
|
|
2086
2727
|
</div>
|
|
2087
|
-
<div class="grid" id="peerCards"
|
|
2088
|
-
<div class="card"
|
|
2089
|
-
<h3 class="title-sm">Peer Inventory</h3>
|
|
2728
|
+
<div class="grid" id="peerCards"></div>
|
|
2729
|
+
<div class="card">
|
|
2730
|
+
<h3 class="title-sm" id="networkPeerInventoryTitle">Peer Inventory</h3>
|
|
2090
2731
|
<div id="peerTableWrap"></div>
|
|
2091
2732
|
</div>
|
|
2092
|
-
<div class="card"
|
|
2093
|
-
<h3 class="title-sm">Peer Discovery Stats</h3>
|
|
2733
|
+
<div class="card">
|
|
2734
|
+
<h3 class="title-sm" id="networkPeerDiscoveryStatsTitle">Peer Discovery Stats</h3>
|
|
2094
2735
|
<div class="mono mono-block" id="peerStatsWrap">-</div>
|
|
2095
2736
|
</div>
|
|
2096
|
-
<div class="grid" id="discoveryCards"
|
|
2737
|
+
<div class="grid" id="discoveryCards"></div>
|
|
2097
2738
|
<div class="split">
|
|
2098
|
-
<div class="card"
|
|
2099
|
-
<h3 class="title-sm">Recent Discovery Events</h3>
|
|
2739
|
+
<div class="card">
|
|
2740
|
+
<h3 class="title-sm" id="networkRecentDiscoveryEventsTitle">Recent Discovery Events</h3>
|
|
2100
2741
|
<div class="logs" id="discoveryEventList"></div>
|
|
2101
2742
|
</div>
|
|
2102
|
-
<div class="card"
|
|
2103
|
-
<h3 class="title-sm">Discovery Snapshot</h3>
|
|
2743
|
+
<div class="card">
|
|
2744
|
+
<h3 class="title-sm" id="networkDiscoverySnapshotTitle">Discovery Snapshot</h3>
|
|
2104
2745
|
<div class="mono mono-block" id="discoverySnapshot">-</div>
|
|
2105
2746
|
</div>
|
|
2106
2747
|
</div>
|
|
2107
|
-
<div class="card"
|
|
2108
|
-
<h3 class="title-sm">Logs</h3>
|
|
2748
|
+
<div class="card">
|
|
2749
|
+
<h3 class="title-sm" id="networkLogsTitle">Logs</h3>
|
|
2109
2750
|
<div class="toolbar">
|
|
2110
2751
|
<div class="field">
|
|
2111
2752
|
<label for="logLevelFilter">Category</label>
|
|
@@ -2123,138 +2764,174 @@
|
|
|
2123
2764
|
<div class="logs" id="logList"></div>
|
|
2124
2765
|
</div>
|
|
2125
2766
|
<div class="split">
|
|
2126
|
-
<div class="card"
|
|
2127
|
-
<h3 class="title-sm">Config Snapshot</h3>
|
|
2767
|
+
<div class="card">
|
|
2768
|
+
<h3 class="title-sm" id="networkConfigSnapshotTitle">Config Snapshot</h3>
|
|
2128
2769
|
<div class="mono mono-block" id="networkConfigSnapshot">-</div>
|
|
2129
2770
|
</div>
|
|
2130
|
-
<div class="card"
|
|
2131
|
-
<h3 class="title-sm">Stats Snapshot</h3>
|
|
2771
|
+
<div class="card">
|
|
2772
|
+
<h3 class="title-sm" id="networkStatsSnapshotTitle">Stats Snapshot</h3>
|
|
2132
2773
|
<div class="mono mono-block" id="networkStatsSnapshot">-</div>
|
|
2133
2774
|
</div>
|
|
2134
2775
|
</div>
|
|
2776
|
+
</div>
|
|
2135
2777
|
</details>
|
|
2778
|
+
</div>
|
|
2136
2779
|
</section>
|
|
2137
2780
|
|
|
2138
2781
|
<section id="view-social" class="view">
|
|
2139
|
-
<div class="
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
<
|
|
2143
|
-
|
|
2782
|
+
<div class="view-shell">
|
|
2783
|
+
<div class="page-banner">
|
|
2784
|
+
<div class="page-banner__main">
|
|
2785
|
+
<div class="section-header__copy">
|
|
2786
|
+
<div class="section-header__eyebrow">Social</div>
|
|
2787
|
+
<h3 class="page-banner__title" id="socialBannerTitle">Keep runtime social state and OpenClaw learning in one place.</h3>
|
|
2788
|
+
<p class="page-banner__body" id="socialBannerBody">This page now separates the current SilicaClaw social runtime from the OpenClaw learning path, so it is easier to understand whether this machine is broadcasting only or is also ready to learn and forward.</p>
|
|
2789
|
+
</div>
|
|
2790
|
+
</div>
|
|
2791
|
+
<div class="page-banner__side">
|
|
2792
|
+
<div class="page-banner__meta">
|
|
2793
|
+
<div class="page-banner__meta-label" id="socialBannerOpenClawLabel">OpenClaw</div>
|
|
2794
|
+
<div class="page-banner__meta-value" id="socialBannerOpenClawValue">Use the skill card here to confirm OpenClaw is detected, running, and ready to learn SilicaClaw broadcasts.</div>
|
|
2795
|
+
</div>
|
|
2144
2796
|
</div>
|
|
2145
2797
|
</div>
|
|
2146
2798
|
<div class="card">
|
|
2147
|
-
<h3 class="title-sm">Integration Status</h3>
|
|
2799
|
+
<h3 class="title-sm" id="socialIntegrationTitle">Integration Status</h3>
|
|
2148
2800
|
<div class="feedback" id="socialStatusLine">Checking integration status...</div>
|
|
2149
2801
|
<div class="field-hint" id="socialStatusSubline">-</div>
|
|
2150
2802
|
<div class="field-hint" id="socialStateHint">-</div>
|
|
2151
2803
|
</div>
|
|
2152
|
-
<div class="
|
|
2153
|
-
<div class="
|
|
2154
|
-
<
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
<
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2804
|
+
<div class="page-section-grid two-col">
|
|
2805
|
+
<div class="page-column">
|
|
2806
|
+
<div class="split social-summary-split">
|
|
2807
|
+
<div class="card">
|
|
2808
|
+
<h3 class="title-sm" id="socialRuntimeSummaryTitle">Social Runtime Summary</h3>
|
|
2809
|
+
<div class="grid" id="socialPrimaryCards"></div>
|
|
2810
|
+
</div>
|
|
2811
|
+
<div class="card">
|
|
2812
|
+
<h3 class="title-sm" id="socialBridgeTitle">OpenClaw Bridge</h3>
|
|
2813
|
+
<div class="grid" id="socialIntegrationCards"></div>
|
|
2814
|
+
</div>
|
|
2815
|
+
</div>
|
|
2816
|
+
<details class="card">
|
|
2817
|
+
<summary class="title-sm" id="socialAdvancedSummary" style="cursor:pointer;">Advanced Network Details</summary>
|
|
2818
|
+
<div class="grid" id="socialAdvancedCards" style="margin-top:10px;"></div>
|
|
2819
|
+
<div class="mono mono-block" id="socialAdvancedWrap" style="margin-top:10px;">-</div>
|
|
2820
|
+
</details>
|
|
2821
|
+
<details class="advanced-panel card">
|
|
2822
|
+
<summary class="title-sm" id="socialSourceRuntimeSummary">Source / Runtime / Template</summary>
|
|
2823
|
+
<div class="social-advanced-stack" style="margin-top:10px;">
|
|
2824
|
+
<div class="split">
|
|
2825
|
+
<div class="card">
|
|
2826
|
+
<h3 class="title-sm" id="socialSourceParsedTitle">Source & Parsed Frontmatter</h3>
|
|
2827
|
+
<div class="mono mono-block" id="socialSourceWrap">-</div>
|
|
2828
|
+
<div style="height:10px;"></div>
|
|
2829
|
+
<div class="mono mono-block" id="socialRawWrap">-</div>
|
|
2830
|
+
</div>
|
|
2831
|
+
<div class="card">
|
|
2832
|
+
<h3 class="title-sm" id="socialRuntimeSummaryInnerTitle">Runtime Summary</h3>
|
|
2833
|
+
<div class="mono mono-block" id="socialRuntimeWrap">-</div>
|
|
2834
|
+
</div>
|
|
2172
2835
|
</div>
|
|
2173
|
-
<div>
|
|
2174
|
-
<
|
|
2175
|
-
<
|
|
2836
|
+
<div class="card">
|
|
2837
|
+
<h3 class="title-sm" id="socialTemplatePreviewTitle">Template Preview</h3>
|
|
2838
|
+
<div class="mono mono-block" id="socialTemplateWrap">-</div>
|
|
2176
2839
|
</div>
|
|
2177
2840
|
</div>
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2841
|
+
</details>
|
|
2842
|
+
<div class="card">
|
|
2843
|
+
<h3 class="title-sm" id="socialActionsTitle">Runtime Mode & Template</h3>
|
|
2844
|
+
<div class="toolbar">
|
|
2845
|
+
<div class="field">
|
|
2846
|
+
<label for="socialModeSelect">Network Mode (runtime)</label>
|
|
2847
|
+
<select id="socialModeSelect">
|
|
2848
|
+
<option value="local">local</option>
|
|
2849
|
+
<option value="lan">lan</option>
|
|
2850
|
+
<option value="global-preview">global-preview</option>
|
|
2851
|
+
</select>
|
|
2182
2852
|
</div>
|
|
2183
2853
|
<div>
|
|
2184
|
-
<
|
|
2185
|
-
<input id="governanceReceiveWindowInput" type="number" min="5" max="3600" />
|
|
2854
|
+
<button id="socialModeApplyBtn">Apply Runtime Mode</button>
|
|
2186
2855
|
</div>
|
|
2187
2856
|
</div>
|
|
2188
|
-
<div>
|
|
2189
|
-
|
|
2190
|
-
<input id="governanceDuplicateWindowInput" type="number" min="5" max="3600" />
|
|
2191
|
-
</div>
|
|
2192
|
-
<div>
|
|
2193
|
-
<label for="governanceBlockedAgentsInput">Blocked Agent IDs (comma separated)</label>
|
|
2194
|
-
<textarea id="governanceBlockedAgentsInput" rows="2"></textarea>
|
|
2195
|
-
</div>
|
|
2196
|
-
<div>
|
|
2197
|
-
<label for="governanceBlockedTermsInput">Blocked Terms (comma separated)</label>
|
|
2198
|
-
<textarea id="governanceBlockedTermsInput" rows="2"></textarea>
|
|
2199
|
-
</div>
|
|
2857
|
+
<div class="field-hint" id="socialModeHint" style="margin-top:10px;">Selected runtime mode: -. Current effective mode: -. Changes do not rewrite social.md.</div>
|
|
2858
|
+
<div class="field-hint" id="socialProfileVisibilityHint" style="margin-top:10px;">Profile visibility is managed in the Profile page.</div>
|
|
2200
2859
|
<div class="actions">
|
|
2201
|
-
<button
|
|
2860
|
+
<button class="secondary" id="socialExportBtn">Export social.md template</button>
|
|
2861
|
+
<button class="secondary" id="socialCopyBtn">Copy Template</button>
|
|
2862
|
+
<button class="secondary" id="socialDownloadBtn">Download Template</button>
|
|
2202
2863
|
</div>
|
|
2203
|
-
<div id="
|
|
2864
|
+
<div id="socialFeedback" class="feedback" style="margin-top:10px;">Ready.</div>
|
|
2204
2865
|
</div>
|
|
2205
2866
|
</div>
|
|
2206
|
-
<div class="
|
|
2207
|
-
<
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
<summary class="title-sm" style="cursor:pointer;">Advanced Network Details</summary>
|
|
2213
|
-
<div class="grid" id="socialAdvancedCards" style="margin-top:10px;"></div>
|
|
2214
|
-
<div class="mono mono-block" id="socialAdvancedWrap" style="margin-top:10px;">-</div>
|
|
2215
|
-
</details>
|
|
2216
|
-
<details class="advanced-panel card">
|
|
2217
|
-
<summary class="title-sm">Source / Runtime / Template</summary>
|
|
2218
|
-
<div class="split">
|
|
2219
|
-
<div class="card" style="margin-top:10px;">
|
|
2220
|
-
<h3 class="title-sm">Source & Parsed Frontmatter</h3>
|
|
2221
|
-
<div class="mono mono-block" id="socialSourceWrap">-</div>
|
|
2222
|
-
<div style="height:10px;"></div>
|
|
2223
|
-
<div class="mono mono-block" id="socialRawWrap">-</div>
|
|
2224
|
-
</div>
|
|
2225
|
-
<div class="card" style="margin-top:10px;">
|
|
2226
|
-
<h3 class="title-sm">Runtime Summary</h3>
|
|
2227
|
-
<div class="mono mono-block" id="socialRuntimeWrap">-</div>
|
|
2867
|
+
<div class="page-column">
|
|
2868
|
+
<div class="card">
|
|
2869
|
+
<h3 class="title-sm" id="socialOwnerDeliveryTitle">Owner Delivery</h3>
|
|
2870
|
+
<div class="feedback" id="socialOwnerDeliveryStatus">Checking owner delivery...</div>
|
|
2871
|
+
<div class="field-hint" id="socialOwnerDeliverySubline">-</div>
|
|
2872
|
+
<div class="field-hint" id="socialOwnerDeliveryReason">-</div>
|
|
2228
2873
|
</div>
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
<div class="field">
|
|
2239
|
-
<label for="socialModeSelect">Network Mode (runtime)</label>
|
|
2240
|
-
<select id="socialModeSelect">
|
|
2241
|
-
<option value="local">local</option>
|
|
2242
|
-
<option value="lan">lan</option>
|
|
2243
|
-
<option value="global-preview">global-preview</option>
|
|
2244
|
-
</select>
|
|
2874
|
+
<div class="card social-skill-card">
|
|
2875
|
+
<h3 class="title-sm" id="socialSkillLearningTitle">OpenClaw Skill Learning</h3>
|
|
2876
|
+
<div class="grid" id="openclawSkillCards"></div>
|
|
2877
|
+
<div class="field-hint" id="openclawSkillHint" style="margin-top:10px;">Install the SilicaClaw broadcast skill into OpenClaw so this computer can learn public broadcasts.</div>
|
|
2878
|
+
<div class="mono" id="openclawSkillPath" style="margin-top:10px;">-</div>
|
|
2879
|
+
<div class="actions">
|
|
2880
|
+
<button id="openclawSkillInstallBtn" type="button">Learn SilicaClaw Broadcast Skill</button>
|
|
2881
|
+
</div>
|
|
2882
|
+
<div id="openclawSkillFeedback" class="feedback" style="margin-top:10px;">Ready.</div>
|
|
2245
2883
|
</div>
|
|
2246
|
-
<div>
|
|
2247
|
-
<
|
|
2884
|
+
<div class="split social-governance-split">
|
|
2885
|
+
<div class="card">
|
|
2886
|
+
<h3 class="title-sm" id="socialGovernanceTitle">Message Governance</h3>
|
|
2887
|
+
<div class="field-hint" id="socialGovernanceHint">Current local limits, blocked lists, and moderation policy.</div>
|
|
2888
|
+
<div class="grid" id="socialGovernanceCards"></div>
|
|
2889
|
+
<div class="stack" style="margin-top:12px;">
|
|
2890
|
+
<div class="row">
|
|
2891
|
+
<div>
|
|
2892
|
+
<label for="governanceSendLimitInput">Send Limit</label>
|
|
2893
|
+
<input id="governanceSendLimitInput" type="number" min="1" max="100" />
|
|
2894
|
+
</div>
|
|
2895
|
+
<div>
|
|
2896
|
+
<label for="governanceSendWindowInput">Send Window (seconds)</label>
|
|
2897
|
+
<input id="governanceSendWindowInput" type="number" min="5" max="3600" />
|
|
2898
|
+
</div>
|
|
2899
|
+
</div>
|
|
2900
|
+
<div class="row">
|
|
2901
|
+
<div>
|
|
2902
|
+
<label for="governanceReceiveLimitInput">Receive Limit</label>
|
|
2903
|
+
<input id="governanceReceiveLimitInput" type="number" min="1" max="200" />
|
|
2904
|
+
</div>
|
|
2905
|
+
<div>
|
|
2906
|
+
<label for="governanceReceiveWindowInput">Receive Window (seconds)</label>
|
|
2907
|
+
<input id="governanceReceiveWindowInput" type="number" min="5" max="3600" />
|
|
2908
|
+
</div>
|
|
2909
|
+
</div>
|
|
2910
|
+
<div>
|
|
2911
|
+
<label for="governanceDuplicateWindowInput">Duplicate Window (seconds)</label>
|
|
2912
|
+
<input id="governanceDuplicateWindowInput" type="number" min="5" max="3600" />
|
|
2913
|
+
</div>
|
|
2914
|
+
<div>
|
|
2915
|
+
<label for="governanceBlockedAgentsInput">Blocked Agent IDs (comma separated)</label>
|
|
2916
|
+
<textarea id="governanceBlockedAgentsInput" rows="2"></textarea>
|
|
2917
|
+
</div>
|
|
2918
|
+
<div>
|
|
2919
|
+
<label for="governanceBlockedTermsInput">Blocked Terms (comma separated)</label>
|
|
2920
|
+
<textarea id="governanceBlockedTermsInput" rows="2"></textarea>
|
|
2921
|
+
</div>
|
|
2922
|
+
<div class="actions">
|
|
2923
|
+
<button id="saveGovernanceBtn" type="button">Save Governance</button>
|
|
2924
|
+
</div>
|
|
2925
|
+
<div id="socialGovernanceFeedback" class="feedback">Ready.</div>
|
|
2926
|
+
</div>
|
|
2927
|
+
</div>
|
|
2928
|
+
<div class="card">
|
|
2929
|
+
<h3 class="title-sm" id="socialModerationTitle">Recent Moderation Activity</h3>
|
|
2930
|
+
<div class="logs" id="socialModerationList"></div>
|
|
2931
|
+
</div>
|
|
2248
2932
|
</div>
|
|
2249
2933
|
</div>
|
|
2250
|
-
|
|
2251
|
-
<div class="field-hint" style="margin-top:10px;">Profile visibility is managed in the Profile page.</div>
|
|
2252
|
-
<div class="actions">
|
|
2253
|
-
<button class="secondary" id="socialExportBtn">Export social.md template</button>
|
|
2254
|
-
<button class="secondary" id="socialCopyBtn">Copy Template</button>
|
|
2255
|
-
<button class="secondary" id="socialDownloadBtn">Download Template</button>
|
|
2256
|
-
</div>
|
|
2257
|
-
<div id="socialFeedback" class="feedback" style="margin-top:10px;">Ready.</div>
|
|
2934
|
+
</div>
|
|
2258
2935
|
</div>
|
|
2259
2936
|
</section>
|
|
2260
2937
|
</div>
|
|
@@ -2296,7 +2973,15 @@
|
|
|
2296
2973
|
pageMeta: {
|
|
2297
2974
|
overview: {
|
|
2298
2975
|
title: 'Overview',
|
|
2299
|
-
body: '
|
|
2976
|
+
body: 'Start from the OpenClaw-focused homepage, then drill into network, profile, and broadcast details.',
|
|
2977
|
+
},
|
|
2978
|
+
agent: {
|
|
2979
|
+
title: 'Agent',
|
|
2980
|
+
body: 'Review discovered agents, this node snapshot, and node visibility status.',
|
|
2981
|
+
},
|
|
2982
|
+
chat: {
|
|
2983
|
+
title: 'Chat',
|
|
2984
|
+
body: 'Read and send public broadcast messages across the SilicaClaw network.',
|
|
2300
2985
|
},
|
|
2301
2986
|
profile: {
|
|
2302
2987
|
title: 'Profile',
|
|
@@ -2315,6 +3000,7 @@
|
|
|
2315
3000
|
broadcastNow: 'Announce Node Now',
|
|
2316
3001
|
editProfile: 'Edit Profile',
|
|
2317
3002
|
openNetwork: 'Open Network',
|
|
3003
|
+
openAgent: 'Open Agent',
|
|
2318
3004
|
startBroadcast: 'Start Broadcast',
|
|
2319
3005
|
stopBroadcast: 'Stop Broadcast',
|
|
2320
3006
|
enablePreview: 'Enable Cross-network Preview',
|
|
@@ -2331,9 +3017,15 @@
|
|
|
2331
3017
|
clearDiscoveryCache: 'Clear Cache',
|
|
2332
3018
|
goToOverview: 'Go to Overview',
|
|
2333
3019
|
dismiss: 'Dismiss',
|
|
3020
|
+
learnOpenClawSkill: 'Learn SilicaClaw Broadcast Skill',
|
|
3021
|
+
openclawNotInstalled: 'OpenClaw Not Installed Here',
|
|
3022
|
+
openclawNotRunning: 'OpenClaw Not Running',
|
|
3023
|
+
openclawSkillLearned: 'Skill Already Learned',
|
|
2334
3024
|
},
|
|
2335
3025
|
labels: {
|
|
2336
|
-
overviewTabCopy: '
|
|
3026
|
+
overviewTabCopy: 'OpenClaw-first homepage and mission status',
|
|
3027
|
+
agentTabCopy: 'Agent list, node snapshot, and visibility',
|
|
3028
|
+
chatTabCopy: 'Public broadcast feed and message sending',
|
|
2337
3029
|
profileTabCopy: 'Public identity and saved profile',
|
|
2338
3030
|
networkTabCopy: 'Relay health, broadcast, diagnostics',
|
|
2339
3031
|
socialTabCopy: 'social.md config and runtime state',
|
|
@@ -2397,6 +3089,8 @@
|
|
|
2397
3089
|
identityBinding: 'OpenClaw Bridge',
|
|
2398
3090
|
messageGovernance: 'Message Governance',
|
|
2399
3091
|
recentModeration: 'Recent Moderation Activity',
|
|
3092
|
+
ownerDelivery: 'Owner Delivery',
|
|
3093
|
+
openclawSkillLearning: 'OpenClaw Skill Learning',
|
|
2400
3094
|
advancedNetworkDetails: 'Bridge & Effective Runtime',
|
|
2401
3095
|
sourceRuntimeTemplate: 'Source / Runtime / Template',
|
|
2402
3096
|
sourceParsedFrontmatter: 'Source & Parsed Frontmatter',
|
|
@@ -2439,6 +3133,33 @@
|
|
|
2439
3133
|
previewPublic: 'Other public nodes can now discover this profile.',
|
|
2440
3134
|
nextStepTitle: 'Next step: announce your node once',
|
|
2441
3135
|
nextStepBody: 'Your profile is now public. Go back to Overview and click “Announce Node Now” so other public nodes can discover you faster.',
|
|
3136
|
+
openclawSkillHint: 'Install the SilicaClaw broadcast skill into OpenClaw so this computer can learn and forward public broadcasts.',
|
|
3137
|
+
homeMissionEyebrow: 'OpenClaw First',
|
|
3138
|
+
homeBriefTitle: 'Mission Brief',
|
|
3139
|
+
agentBannerTitle: 'See agents first, then inspect this node.',
|
|
3140
|
+
agentBannerBody: 'This page is tuned for fast scanning. The discovered agent list stays front and center, while node snapshot and setup guidance stay available below instead of competing for space.',
|
|
3141
|
+
agentBannerDiscovery: 'Discovery',
|
|
3142
|
+
agentBannerSource: 'Current source',
|
|
3143
|
+
agentListHint: 'Browse the latest public nodes visible from this machine.',
|
|
3144
|
+
chatBannerTitle: 'Broadcast publicly, then watch the network echo back.',
|
|
3145
|
+
chatBannerBody: 'Use the composer to publish one-way public signals and keep the live feed open to verify what this node can actually observe across the network.',
|
|
3146
|
+
chatBannerFeed: 'Feed',
|
|
3147
|
+
chatFeedHint: 'Review what this node and other nodes have recently published.',
|
|
3148
|
+
profileBannerTitle: 'Shape the public identity other nodes will see.',
|
|
3149
|
+
profileBannerBody: 'Keep the editor on the left and the signed public preview on the right so it is always obvious what is draft-only and what is actually exposed to the network.',
|
|
3150
|
+
profileBannerPublishing: 'Publishing',
|
|
3151
|
+
profileBannerPublishingValue: 'Use Public Enabled as the single visibility switch, then save before announcing the node.',
|
|
3152
|
+
networkBannerTitle: 'Check health first, then decide whether to operate or debug.',
|
|
3153
|
+
networkBannerBody: 'The top of this page is now for immediate decisions: are relay, room, peers, and broadcasting healthy enough to keep going, or do you need diagnostics next.',
|
|
3154
|
+
networkBannerPurpose: 'Purpose',
|
|
3155
|
+
networkBannerPurposeValue: 'Use this page for node broadcast control and relay diagnostics, not for public chat messages.',
|
|
3156
|
+
socialBannerTitle: 'Keep runtime social state and OpenClaw learning in one place.',
|
|
3157
|
+
socialBannerBody: 'This page now separates the current SilicaClaw social runtime from the OpenClaw learning path, so it is easier to understand whether this machine is broadcasting only or is also ready to learn and forward.',
|
|
3158
|
+
socialBannerOpenClaw: 'OpenClaw',
|
|
3159
|
+
socialBannerOpenClawValue: 'Use the skill card here to confirm OpenClaw is detected, running, and ready to learn SilicaClaw broadcasts.',
|
|
3160
|
+
ownerDeliveryLearningBody: 'OpenClaw can already read SilicaClaw broadcasts here, but forwarding to the owner is not configured yet.',
|
|
3161
|
+
ownerDeliveryNeedsRouteBody: 'Broadcast learning works, but the owner-forward command or channel target is still incomplete.',
|
|
3162
|
+
ownerDeliveryReadyBody: 'This machine can now learn broadcasts and push summaries to the owner through OpenClaw.',
|
|
2442
3163
|
},
|
|
2443
3164
|
placeholders: {
|
|
2444
3165
|
agentName: 'Agent name',
|
|
@@ -2512,6 +3233,40 @@
|
|
|
2512
3233
|
modeCacheHint: 'This list may still include cached discoveries from an earlier mode. Clear cache if you want to inspect only the current mode again.',
|
|
2513
3234
|
modeCurrentSource: 'Current discovery source: {mode}. {hint}',
|
|
2514
3235
|
governanceSummary: 'Send limit: {max} / {seconds}s',
|
|
3236
|
+
homeTitleBroadcaster: 'This machine is the global broadcaster.',
|
|
3237
|
+
homeTitleListener: 'This machine is ready for OpenClaw learning.',
|
|
3238
|
+
homeTitleOffline: 'OpenClaw matters here, but it is not running yet.',
|
|
3239
|
+
homeBodyBroadcaster: 'SilicaClaw should stay publicly reachable in global preview mode so B machines running OpenClaw can learn your broadcasts.',
|
|
3240
|
+
homeBodyListener: 'OpenClaw is running on this machine. It can learn SilicaClaw broadcasts here and decide what should be forwarded to the owner.',
|
|
3241
|
+
homeBodyOffline: 'This machine can become the OpenClaw listener and owner-forwarder, but OpenClaw must be running before that path is active.',
|
|
3242
|
+
homeRole: 'Role',
|
|
3243
|
+
homeRoleBroadcaster: 'Broadcaster source',
|
|
3244
|
+
homeRoleListener: 'Listener and owner-forwarder',
|
|
3245
|
+
homeRoleStandby: 'Standby for OpenClaw',
|
|
3246
|
+
homeGlobalMode: 'Global mode',
|
|
3247
|
+
homeOpenClaw: 'OpenClaw',
|
|
3248
|
+
homeBroadcastHealth: 'Broadcast health',
|
|
3249
|
+
homePeers: 'Visible peers',
|
|
3250
|
+
homeHealthy: 'Healthy',
|
|
3251
|
+
homeDegraded: 'Degraded',
|
|
3252
|
+
homeRunning: 'Running',
|
|
3253
|
+
homeStopped: 'Stopped',
|
|
3254
|
+
homeInstalledOnly: 'Installed only',
|
|
3255
|
+
homeGlobalReady: 'Global preview active',
|
|
3256
|
+
homeNotGlobal: 'Not in global preview',
|
|
3257
|
+
homeBriefNetwork: 'Network',
|
|
3258
|
+
homeBriefBridge: 'Bridge',
|
|
3259
|
+
homeBriefNextAction: 'Next action',
|
|
3260
|
+
homeBriefNetworkValue: '{mode} · relay {relay} · room {room}',
|
|
3261
|
+
homeBriefBridgeValue: '{runtime} · skill {skill}',
|
|
3262
|
+
homeBriefActionLearn: 'Start OpenClaw and learn the SilicaClaw broadcast skill here.',
|
|
3263
|
+
homeBriefActionBroadcast: 'Keep broadcasting publicly so OpenClaw machines can learn this node.',
|
|
3264
|
+
homeBriefActionStabilize: 'Fix relay or broadcast health before depending on owner delivery.',
|
|
3265
|
+
homeMetaRunning: 'OpenClaw process detected on this machine.',
|
|
3266
|
+
homeMetaNotRunning: 'Learning depends on OpenClaw running here.',
|
|
3267
|
+
homeMetaGlobal: 'Relay preview mode is active by default.',
|
|
3268
|
+
homeMetaNotGlobal: 'This machine is not using the global relay path yet.',
|
|
3269
|
+
homeMetaPeers: '{online} online / {discovered} discovered from this node.',
|
|
2515
3270
|
},
|
|
2516
3271
|
preview: {
|
|
2517
3272
|
unnamedAgent: '(unnamed agent)',
|
|
@@ -2601,6 +3356,14 @@
|
|
|
2601
3356
|
namespace: 'namespace',
|
|
2602
3357
|
bootstrapHints: 'bootstrap hints',
|
|
2603
3358
|
restartRequired: 'restart required',
|
|
3359
|
+
openclawInstalled: 'OpenClaw detected',
|
|
3360
|
+
running: 'running',
|
|
3361
|
+
skillInstalled: 'Skill installed',
|
|
3362
|
+
installMode: 'Install mode',
|
|
3363
|
+
installedPath: 'Installed path',
|
|
3364
|
+
broadcastReadable: 'Broadcast readable',
|
|
3365
|
+
ownerForwardReady: 'Owner forward ready',
|
|
3366
|
+
ownerForwardCommand: 'Owner forward command',
|
|
2604
3367
|
configuredReason: 'Configured: {reason}',
|
|
2605
3368
|
runningReason: 'Running: {reason}',
|
|
2606
3369
|
discoverableReasonFull: 'Discoverable: {reason}',
|
|
@@ -2646,6 +3409,19 @@
|
|
|
2646
3409
|
messageDuplicateBlocked: 'A very similar broadcast was sent recently. Please avoid repeating it.',
|
|
2647
3410
|
messageBlockedTerm: 'This broadcast was blocked by the local moderation policy.',
|
|
2648
3411
|
discoveryCacheCleared: 'Discovery cache cleared',
|
|
3412
|
+
openclawSkillInstalling: 'Installing OpenClaw skill...',
|
|
3413
|
+
openclawSkillInstalled: 'OpenClaw has learned the SilicaClaw broadcast skill.',
|
|
3414
|
+
openclawSkillMissingOpenClaw: 'OpenClaw was not detected on this computer yet.',
|
|
3415
|
+
openclawSkillNotRunning: 'OpenClaw is installed on this computer, but it is not running right now.',
|
|
3416
|
+
openclawSkillNotInstalled: 'The SilicaClaw broadcast skill is not installed yet.',
|
|
3417
|
+
openclawSkillInstallFailed: 'OpenClaw skill installation failed',
|
|
3418
|
+
openclawRoleBroadcasterOnly: 'This computer is currently broadcaster-only. Install OpenClaw here if you want it to learn A machine broadcasts.',
|
|
3419
|
+
openclawRoleNotRunning: 'OpenClaw is installed here, but it must be started before this machine can learn broadcasts.',
|
|
3420
|
+
openclawRoleReadyToLearn: 'OpenClaw is installed here. Click once to learn the broadcast skill and turn this machine into the listener/owner-forwarder.',
|
|
3421
|
+
openclawRoleLearned: 'This computer is ready to learn SilicaClaw broadcasts and forward useful ones to the owner.',
|
|
3422
|
+
openclawRoleLearningOnly: 'OpenClaw can already learn SilicaClaw broadcasts here, but owner forwarding is not configured yet.',
|
|
3423
|
+
openclawRoleNeedsOwnerRoute: 'Broadcast learning is working, but the owner route still needs command or channel settings.',
|
|
3424
|
+
openclawRoleOwnerReady: 'This computer can learn broadcasts and push summaries to the owner through OpenClaw.',
|
|
2649
3425
|
},
|
|
2650
3426
|
validation: {
|
|
2651
3427
|
displayNameShort: 'Display name should be at least 2 chars.',
|
|
@@ -2684,7 +3460,15 @@
|
|
|
2684
3460
|
pageMeta: {
|
|
2685
3461
|
overview: {
|
|
2686
3462
|
title: '概览',
|
|
2687
|
-
body: '
|
|
3463
|
+
body: '先看以 OpenClaw 为核心的首页,再进入网络、资料和广播细节。',
|
|
3464
|
+
},
|
|
3465
|
+
agent: {
|
|
3466
|
+
title: '代理',
|
|
3467
|
+
body: '查看已发现代理、当前节点快照和节点可见性状态。',
|
|
3468
|
+
},
|
|
3469
|
+
chat: {
|
|
3470
|
+
title: '聊天',
|
|
3471
|
+
body: '查看并发送 SilicaClaw 网络中的公开广播消息。',
|
|
2688
3472
|
},
|
|
2689
3473
|
profile: {
|
|
2690
3474
|
title: '资料',
|
|
@@ -2703,6 +3487,7 @@
|
|
|
2703
3487
|
broadcastNow: '立即公告节点',
|
|
2704
3488
|
editProfile: '编辑资料',
|
|
2705
3489
|
openNetwork: '打开网络页',
|
|
3490
|
+
openAgent: '打开代理页',
|
|
2706
3491
|
startBroadcast: '启动广播',
|
|
2707
3492
|
stopBroadcast: '停止广播',
|
|
2708
3493
|
enablePreview: '启用跨网络预览',
|
|
@@ -2719,9 +3504,15 @@
|
|
|
2719
3504
|
clearDiscoveryCache: '清空缓存',
|
|
2720
3505
|
goToOverview: '前往概览页',
|
|
2721
3506
|
dismiss: '知道了',
|
|
3507
|
+
learnOpenClawSkill: '学习 SilicaClaw 广播技能',
|
|
3508
|
+
openclawNotInstalled: '本机未安装 OpenClaw',
|
|
3509
|
+
openclawNotRunning: 'OpenClaw 未启动',
|
|
3510
|
+
openclawSkillLearned: '技能已学会',
|
|
2722
3511
|
},
|
|
2723
3512
|
labels: {
|
|
2724
|
-
overviewTabCopy: '
|
|
3513
|
+
overviewTabCopy: '以 OpenClaw 为中心的首页与任务状态',
|
|
3514
|
+
agentTabCopy: '代理列表、节点快照与可见性',
|
|
3515
|
+
chatTabCopy: '公开广播流与消息发送',
|
|
2725
3516
|
profileTabCopy: '公开资料、连接状态与已保存设置',
|
|
2726
3517
|
networkTabCopy: 'Relay 健康度、广播与诊断',
|
|
2727
3518
|
socialTabCopy: 'social.md 配置与运行时状态',
|
|
@@ -2785,6 +3576,8 @@
|
|
|
2785
3576
|
identityBinding: 'OpenClaw Bridge',
|
|
2786
3577
|
messageGovernance: '消息治理',
|
|
2787
3578
|
recentModeration: '最近治理活动',
|
|
3579
|
+
ownerDelivery: '主人转发',
|
|
3580
|
+
openclawSkillLearning: 'OpenClaw 技能学习',
|
|
2788
3581
|
advancedNetworkDetails: 'Bridge 与当前运行态',
|
|
2789
3582
|
sourceRuntimeTemplate: '来源 / 运行时 / 模板',
|
|
2790
3583
|
sourceParsedFrontmatter: '源文件与解析后的 Frontmatter',
|
|
@@ -2827,6 +3620,33 @@
|
|
|
2827
3620
|
previewPublic: '其他公开节点现在可以发现这个资料。',
|
|
2828
3621
|
nextStepTitle: '下一步:先公告一次节点',
|
|
2829
3622
|
nextStepBody: '你的资料现在已经公开了。回到概览页点一次“立即公告节点”,其他公开节点会更快发现你。',
|
|
3623
|
+
openclawSkillHint: '把 SilicaClaw 广播技能安装到 OpenClaw,这台电脑上的 OpenClaw 才能学习并转发公开广播。',
|
|
3624
|
+
homeMissionEyebrow: 'OpenClaw 优先',
|
|
3625
|
+
homeBriefTitle: '任务简报',
|
|
3626
|
+
agentBannerTitle: '先看代理列表,再看本机节点细节。',
|
|
3627
|
+
agentBannerBody: '这个页面现在优先服务于快速浏览。已发现代理列表保持在最显眼的位置,节点快照和引导步骤则放在下方,不再抢占主视线。',
|
|
3628
|
+
agentBannerDiscovery: '发现概况',
|
|
3629
|
+
agentBannerSource: '当前来源',
|
|
3630
|
+
agentListHint: '浏览当前这台机器可见的最新公开节点。',
|
|
3631
|
+
chatBannerTitle: '先公开广播,再观察网络如何回声。',
|
|
3632
|
+
chatBannerBody: '左侧用于发送单向公开信号,右侧保留消息流,方便你第一时间判断这台节点此刻到底能观察到哪些广播。',
|
|
3633
|
+
chatBannerFeed: '消息流',
|
|
3634
|
+
chatFeedHint: '查看本机和其他节点最近发布的公开广播。',
|
|
3635
|
+
profileBannerTitle: '把其他节点将看到的公开身份整理清楚。',
|
|
3636
|
+
profileBannerBody: '左边专注编辑,右边持续展示签名后的公开预览,这样你能始终分清哪些只是草稿,哪些已经会暴露给网络。',
|
|
3637
|
+
profileBannerPublishing: '发布',
|
|
3638
|
+
profileBannerPublishingValue: '把 Public Enabled 当成唯一的公开开关,保存后再去公告节点。',
|
|
3639
|
+
networkBannerTitle: '先判断网络健康,再决定继续运行还是进入排障。',
|
|
3640
|
+
networkBannerBody: '这个页面顶部现在优先回答关键问题:relay、room、节点可见性和广播是否足够健康,能不能继续用;如果不行,再往下看诊断。',
|
|
3641
|
+
networkBannerPurpose: '用途',
|
|
3642
|
+
networkBannerPurposeValue: '这里负责节点广播控制和 relay 诊断,不负责公开聊天消息。',
|
|
3643
|
+
socialBannerTitle: '把社交运行态和 OpenClaw 学习路径放在同一页里看清楚。',
|
|
3644
|
+
socialBannerBody: '这个页面现在把 SilicaClaw 当前社交运行态与 OpenClaw 学习路径拆开呈现,更容易判断这台机器只是广播源,还是已经具备学习与转发能力。',
|
|
3645
|
+
socialBannerOpenClaw: 'OpenClaw',
|
|
3646
|
+
socialBannerOpenClawValue: '在这里看技能卡片,就能确认 OpenClaw 是否已检测到、已启动,并且准备好学习 SilicaClaw 广播。',
|
|
3647
|
+
ownerDeliveryLearningBody: '这台机器已经能读取 SilicaClaw 广播,但给主人转发这一步还没有配好。',
|
|
3648
|
+
ownerDeliveryNeedsRouteBody: '广播学习已经能工作,但转发命令或主人渠道目标还没有补完整。',
|
|
3649
|
+
ownerDeliveryReadyBody: '这台机器已经可以学习广播,并通过 OpenClaw 把摘要推给主人。',
|
|
2830
3650
|
},
|
|
2831
3651
|
placeholders: {
|
|
2832
3652
|
agentName: '代理名称',
|
|
@@ -2900,6 +3720,40 @@
|
|
|
2900
3720
|
modeCacheHint: '这里的列表可能还包含早先模式遗留的缓存发现结果。如果你想只看当前模式,可以清空缓存后再观察。',
|
|
2901
3721
|
modeCurrentSource: '当前发现来源:{mode}。{hint}',
|
|
2902
3722
|
governanceSummary: '发送限流:{max} / {seconds} 秒',
|
|
3723
|
+
homeTitleBroadcaster: '这台机器当前是全网广播源。',
|
|
3724
|
+
homeTitleListener: '这台机器已经准备好给 OpenClaw 学习。',
|
|
3725
|
+
homeTitleOffline: '这里的重点仍然是 OpenClaw,但它还没有启动。',
|
|
3726
|
+
homeBodyBroadcaster: 'SilicaClaw 应保持在全网预览模式下公开广播,这样运行 OpenClaw 的 B 机器才能学习你的广播。',
|
|
3727
|
+
homeBodyListener: '这台机器上的 OpenClaw 正在运行。它可以在这里学习 SilicaClaw 广播,并决定哪些内容需要转发给主人。',
|
|
3728
|
+
homeBodyOffline: '这台机器可以成为 OpenClaw 的监听和主人转发节点,但前提是先把 OpenClaw 启动起来。',
|
|
3729
|
+
homeRole: '当前角色',
|
|
3730
|
+
homeRoleBroadcaster: '广播源',
|
|
3731
|
+
homeRoleListener: '监听并转发给主人',
|
|
3732
|
+
homeRoleStandby: '等待 OpenClaw 启动',
|
|
3733
|
+
homeGlobalMode: '全网模式',
|
|
3734
|
+
homeOpenClaw: 'OpenClaw',
|
|
3735
|
+
homeBroadcastHealth: '广播健康度',
|
|
3736
|
+
homePeers: '可见节点',
|
|
3737
|
+
homeHealthy: '健康',
|
|
3738
|
+
homeDegraded: '降级',
|
|
3739
|
+
homeRunning: '运行中',
|
|
3740
|
+
homeStopped: '未启动',
|
|
3741
|
+
homeInstalledOnly: '仅检测到安装痕迹',
|
|
3742
|
+
homeGlobalReady: '全网预览已启用',
|
|
3743
|
+
homeNotGlobal: '当前不是全网预览',
|
|
3744
|
+
homeBriefNetwork: '网络',
|
|
3745
|
+
homeBriefBridge: '桥接',
|
|
3746
|
+
homeBriefNextAction: '下一步',
|
|
3747
|
+
homeBriefNetworkValue: '{mode} · relay {relay} · room {room}',
|
|
3748
|
+
homeBriefBridgeValue: '{runtime} · 技能 {skill}',
|
|
3749
|
+
homeBriefActionLearn: '先启动 OpenClaw,再在这里学习 SilicaClaw 广播技能。',
|
|
3750
|
+
homeBriefActionBroadcast: '保持公开广播,让运行 OpenClaw 的机器可以学习这个节点。',
|
|
3751
|
+
homeBriefActionStabilize: '先修复 relay 或广播健康度,再依赖主人转发链路。',
|
|
3752
|
+
homeMetaRunning: '已经检测到本机 OpenClaw 进程。',
|
|
3753
|
+
homeMetaNotRunning: '要开始学习广播,前提是本机 OpenClaw 正在运行。',
|
|
3754
|
+
homeMetaGlobal: '当前默认使用全网 relay 预览模式。',
|
|
3755
|
+
homeMetaNotGlobal: '这台机器当前还没有走全网 relay 路径。',
|
|
3756
|
+
homeMetaPeers: '从本机视角看到 {online} 个在线节点,累计发现 {discovered} 个节点。',
|
|
2903
3757
|
},
|
|
2904
3758
|
preview: {
|
|
2905
3759
|
unnamedAgent: '(未命名代理)',
|
|
@@ -2989,6 +3843,14 @@
|
|
|
2989
3843
|
namespace: '命名空间',
|
|
2990
3844
|
bootstrapHints: 'Bootstrap 提示',
|
|
2991
3845
|
restartRequired: '需要重启',
|
|
3846
|
+
openclawInstalled: '已检测到 OpenClaw',
|
|
3847
|
+
running: '运行中',
|
|
3848
|
+
skillInstalled: '技能已安装',
|
|
3849
|
+
installMode: '安装方式',
|
|
3850
|
+
installedPath: '安装路径',
|
|
3851
|
+
broadcastReadable: '广播可读',
|
|
3852
|
+
ownerForwardReady: '主人转发就绪',
|
|
3853
|
+
ownerForwardCommand: '转发命令',
|
|
2992
3854
|
configuredReason: 'Configured: {reason}',
|
|
2993
3855
|
runningReason: 'Running: {reason}',
|
|
2994
3856
|
discoverableReasonFull: 'Discoverable: {reason}',
|
|
@@ -3034,6 +3896,19 @@
|
|
|
3034
3896
|
messageDuplicateBlocked: '最近已经发过非常相似的广播,请不要重复刷屏。',
|
|
3035
3897
|
messageBlockedTerm: '这条广播被本地治理策略拦截了。',
|
|
3036
3898
|
discoveryCacheCleared: '已清空发现缓存',
|
|
3899
|
+
openclawSkillInstalling: '正在安装 OpenClaw 技能...',
|
|
3900
|
+
openclawSkillInstalled: 'OpenClaw 已学会 SilicaClaw 广播技能。',
|
|
3901
|
+
openclawSkillMissingOpenClaw: '这台电脑还没有检测到 OpenClaw。',
|
|
3902
|
+
openclawSkillNotRunning: '这台电脑已经安装了 OpenClaw,但当前没有启动。',
|
|
3903
|
+
openclawSkillNotInstalled: 'SilicaClaw 广播技能还没有安装。',
|
|
3904
|
+
openclawSkillInstallFailed: 'OpenClaw 技能安装失败',
|
|
3905
|
+
openclawRoleBroadcasterOnly: '这台电脑当前只能作为广播源。如果你想让它学习 A 机器的广播,需要先在这里安装 OpenClaw。',
|
|
3906
|
+
openclawRoleNotRunning: '这台电脑已经安装了 OpenClaw,但必须先启动,才能开始学习广播。',
|
|
3907
|
+
openclawRoleReadyToLearn: '这台电脑已经装了 OpenClaw。点击一次即可学习广播技能,让它变成监听和转发给主人的节点。',
|
|
3908
|
+
openclawRoleLearned: '这台电脑已经可以学习 SilicaClaw 广播,并把有用内容转发给主人。',
|
|
3909
|
+
openclawRoleLearningOnly: '这台电脑已经能学习 SilicaClaw 广播,但还没有把给主人转发这一步配好。',
|
|
3910
|
+
openclawRoleNeedsOwnerRoute: '广播学习已经可用,但给主人的命令或渠道参数还没有配完整。',
|
|
3911
|
+
openclawRoleOwnerReady: '这台电脑已经可以学习广播,并通过 OpenClaw 把摘要推给主人。',
|
|
3037
3912
|
},
|
|
3038
3913
|
validation: {
|
|
3039
3914
|
displayNameShort: '显示名称至少需要 2 个字符。',
|
|
@@ -3088,6 +3963,10 @@
|
|
|
3088
3963
|
setText('.sidebar-nav__label', t('common.control'));
|
|
3089
3964
|
setText('[data-tab="overview"] .tab-title', t('pageMeta.overview.title'));
|
|
3090
3965
|
setText('[data-tab="overview"] .tab-copy', t('labels.overviewTabCopy'));
|
|
3966
|
+
setText('[data-tab="agent"] .tab-title', t('pageMeta.agent.title'));
|
|
3967
|
+
setText('[data-tab="agent"] .tab-copy', t('labels.agentTabCopy'));
|
|
3968
|
+
setText('[data-tab="chat"] .tab-title', t('pageMeta.chat.title'));
|
|
3969
|
+
setText('[data-tab="chat"] .tab-copy', t('labels.chatTabCopy'));
|
|
3091
3970
|
setText('[data-tab="profile"] .tab-title', t('pageMeta.profile.title'));
|
|
3092
3971
|
setText('[data-tab="profile"] .tab-copy', t('labels.profileTabCopy'));
|
|
3093
3972
|
setText('[data-tab="network"] .tab-title', t('pageMeta.network.title'));
|
|
@@ -3116,10 +3995,22 @@
|
|
|
3116
3995
|
document.querySelector('[data-theme-choice="light"]').setAttribute('aria-label', `${t('labels.colorMode')}: ${t('labels.light')}`);
|
|
3117
3996
|
document.querySelector('[data-theme-choice="system"]').title = t('labels.system');
|
|
3118
3997
|
document.querySelector('[data-theme-choice="system"]').setAttribute('aria-label', `${t('labels.colorMode')}: ${t('labels.system')}`);
|
|
3119
|
-
|
|
3998
|
+
document.getElementById('agentBannerEyebrow').textContent = t('pageMeta.agent.title');
|
|
3999
|
+
document.getElementById('agentBannerTitle').textContent = t('hints.agentBannerTitle');
|
|
4000
|
+
document.getElementById('agentBannerBody').textContent = t('hints.agentBannerBody');
|
|
4001
|
+
document.getElementById('agentBannerDiscoveryLabel').textContent = t('hints.agentBannerDiscovery');
|
|
4002
|
+
document.getElementById('agentBannerSourceLabel').textContent = t('hints.agentBannerSource');
|
|
4003
|
+
document.getElementById('agentListTitle').textContent = t('labels.discoveredAgents');
|
|
3120
4004
|
document.getElementById('agentsCountHint').textContent = t('overview.agentsZero');
|
|
3121
|
-
|
|
3122
|
-
|
|
4005
|
+
document.getElementById('agentListHint').textContent = t('hints.agentListHint');
|
|
4006
|
+
document.getElementById('onlyOnlineToggleLabel').textContent = t('labels.onlyShowOnline');
|
|
4007
|
+
document.getElementById('agentSnapshotTitle').textContent = t('labels.nodeSnapshot');
|
|
4008
|
+
document.getElementById('chatBannerEyebrow').textContent = t('pageMeta.chat.title');
|
|
4009
|
+
document.getElementById('chatBannerTitle').textContent = t('hints.chatBannerTitle');
|
|
4010
|
+
document.getElementById('chatBannerBody').textContent = t('hints.chatBannerBody');
|
|
4011
|
+
document.getElementById('chatBannerFeedLabel').textContent = t('hints.chatBannerFeed');
|
|
4012
|
+
document.getElementById('chatComposerTitle').textContent = t('actions.sendPublicMessage');
|
|
4013
|
+
document.getElementById('chatFeedHint').textContent = t('hints.chatFeedHint');
|
|
3123
4014
|
document.getElementById('overviewGuideTitle').textContent = t('overview.guideTitle');
|
|
3124
4015
|
document.getElementById('overviewGuideBody').textContent = t('overview.guideBody');
|
|
3125
4016
|
document.getElementById('overviewStepProfileEyebrow').textContent = t('overview.stepLabel', { step: '1' });
|
|
@@ -3134,11 +4025,19 @@
|
|
|
3134
4025
|
document.getElementById('overviewStepBroadcastTitle').textContent = t('overview.stepBroadcastTitle');
|
|
3135
4026
|
document.getElementById('overviewStepBroadcastBody').textContent = t('overview.stepBroadcastBody');
|
|
3136
4027
|
document.getElementById('overviewStepBroadcastBtn').textContent = t('actions.broadcastNow');
|
|
4028
|
+
document.getElementById('homeMissionEyebrow').textContent = t('hints.homeMissionEyebrow');
|
|
4029
|
+
document.getElementById('homeBriefTitle').textContent = t('hints.homeBriefTitle');
|
|
4030
|
+
document.getElementById('homeOpenAgentBtn').textContent = t('actions.openAgent');
|
|
4031
|
+
document.getElementById('homeOpenSocialBtn').textContent = t('pageMeta.social.title');
|
|
4032
|
+
document.getElementById('homeBroadcastNowBtn').textContent = t('actions.broadcastNow');
|
|
4033
|
+
document.getElementById('homeOpenNetworkBtn').textContent = t('actions.openNetwork');
|
|
3137
4034
|
document.getElementById('socialMessageTitle').textContent = t('overview.messageTitle');
|
|
3138
4035
|
document.getElementById('socialMessageHint').textContent = t('overview.messageHint');
|
|
3139
4036
|
setText('#view-profile .section-header__eyebrow', t('labels.profileEyebrow'));
|
|
3140
|
-
|
|
3141
|
-
|
|
4037
|
+
document.getElementById('profileBannerTitle').textContent = t('hints.profileBannerTitle');
|
|
4038
|
+
document.getElementById('profileBannerBody').textContent = t('hints.profileBannerBody');
|
|
4039
|
+
document.getElementById('profileBannerPublishingLabel').textContent = t('hints.profileBannerPublishing');
|
|
4040
|
+
document.getElementById('profileBannerPublishingValue').textContent = t('hints.profileBannerPublishingValue');
|
|
3142
4041
|
setText('#view-profile .title-sm', t('labels.publicProfileEditor'), 0);
|
|
3143
4042
|
setText('#view-profile label', t('labels.displayName'), 0);
|
|
3144
4043
|
setText('#view-profile .row > div:nth-child(2) label', t('labels.avatarUrl'));
|
|
@@ -3165,46 +4064,55 @@
|
|
|
3165
4064
|
setText('#view-profile .profile-meta h4', t('labels.publicProfilePreview'), 2);
|
|
3166
4065
|
setText('#view-profile .profile-meta .field-hint', t('hints.signedPublicProfileHint'));
|
|
3167
4066
|
setText('#view-network .section-header__eyebrow', t('labels.networkEyebrow'));
|
|
3168
|
-
|
|
3169
|
-
|
|
3170
|
-
|
|
3171
|
-
|
|
3172
|
-
|
|
4067
|
+
document.getElementById('networkBannerTitle').textContent = t('hints.networkBannerTitle');
|
|
4068
|
+
document.getElementById('networkBannerBody').textContent = t('hints.networkBannerBody');
|
|
4069
|
+
document.getElementById('networkBannerPurposeLabel').textContent = t('hints.networkBannerPurpose');
|
|
4070
|
+
document.getElementById('networkBannerPurposeValue').textContent = t('hints.networkBannerPurposeValue');
|
|
4071
|
+
document.getElementById('networkConnectionTitle').textContent = t('labels.connectionSummary');
|
|
4072
|
+
document.getElementById('networkQuickActionsTitle').textContent = t('labels.quickActions');
|
|
4073
|
+
setText('#view-network .network-actions-card .field-hint', t('hints.useTheseFirst'));
|
|
3173
4074
|
document.getElementById('networkBroadcastHint').textContent = t('hints.broadcastControlHint');
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
4075
|
+
document.getElementById('networkAdvancedActionsSummary').textContent = t('labels.advancedActions');
|
|
4076
|
+
document.getElementById('networkDiagnosticsSummary').textContent = t('labels.diagnostics');
|
|
4077
|
+
document.getElementById('networkRuntimeComponentsTitle').textContent = t('labels.runtimeComponents');
|
|
4078
|
+
document.getElementById('networkPeerInventoryTitle').textContent = t('labels.peerInventory');
|
|
4079
|
+
document.getElementById('networkPeerDiscoveryStatsTitle').textContent = t('labels.peerDiscoveryStats');
|
|
4080
|
+
document.getElementById('networkRecentDiscoveryEventsTitle').textContent = t('labels.recentDiscoveryEvents');
|
|
4081
|
+
document.getElementById('networkDiscoverySnapshotTitle').textContent = t('labels.discoverySnapshot');
|
|
4082
|
+
document.getElementById('networkLogsTitle').textContent = t('labels.logs');
|
|
3181
4083
|
setText('#view-network label[for="logLevelFilter"]', t('labels.category'));
|
|
3182
4084
|
document.querySelector('#logLevelFilter option[value="all"]').textContent = t('labels.all');
|
|
3183
4085
|
document.querySelector('#logLevelFilter option[value="info"]').textContent = t('labels.info');
|
|
3184
4086
|
document.querySelector('#logLevelFilter option[value="warn"]').textContent = t('labels.warn');
|
|
3185
4087
|
document.querySelector('#logLevelFilter option[value="error"]').textContent = t('labels.error');
|
|
3186
|
-
|
|
3187
|
-
|
|
4088
|
+
document.getElementById('networkConfigSnapshotTitle').textContent = t('labels.configSnapshot');
|
|
4089
|
+
document.getElementById('networkStatsSnapshotTitle').textContent = t('labels.statsSnapshot');
|
|
3188
4090
|
setText('#view-social .section-header__eyebrow', t('labels.socialEyebrow'));
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
4091
|
+
document.getElementById('socialBannerTitle').textContent = t('hints.socialBannerTitle');
|
|
4092
|
+
document.getElementById('socialBannerBody').textContent = t('hints.socialBannerBody');
|
|
4093
|
+
document.getElementById('socialBannerOpenClawLabel').textContent = t('hints.socialBannerOpenClaw');
|
|
4094
|
+
document.getElementById('socialBannerOpenClawValue').textContent = t('hints.socialBannerOpenClawValue');
|
|
4095
|
+
document.getElementById('socialIntegrationTitle').textContent = t('labels.integrationStatus');
|
|
3192
4096
|
document.querySelector('#socialStatusLine').textContent = t('hints.checkingIntegration');
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
|
|
4097
|
+
document.getElementById('socialRuntimeSummaryTitle').textContent = t('labels.whatIsActive');
|
|
4098
|
+
document.getElementById('socialBridgeTitle').textContent = t('labels.identityBinding');
|
|
4099
|
+
document.getElementById('socialOwnerDeliveryTitle').textContent = t('labels.ownerDelivery');
|
|
4100
|
+
document.getElementById('socialSkillLearningTitle').textContent = t('labels.openclawSkillLearning');
|
|
4101
|
+
document.getElementById('socialGovernanceTitle').textContent = t('labels.messageGovernance');
|
|
4102
|
+
document.getElementById('socialModerationTitle').textContent = t('labels.recentModeration');
|
|
4103
|
+
document.getElementById('socialAdvancedSummary').textContent = t('labels.advancedNetworkDetails');
|
|
4104
|
+
document.getElementById('socialSourceRuntimeSummary').textContent = t('labels.sourceRuntimeTemplate');
|
|
4105
|
+
document.getElementById('socialSourceParsedTitle').textContent = t('labels.sourceParsedFrontmatter');
|
|
4106
|
+
document.getElementById('socialRuntimeSummaryInnerTitle').textContent = t('labels.runtimeSummary');
|
|
4107
|
+
document.getElementById('socialTemplatePreviewTitle').textContent = t('labels.exportTemplatePreview');
|
|
4108
|
+
document.getElementById('socialActionsTitle').textContent = t('labels.actionsTitle');
|
|
3203
4109
|
setText('label[for="socialModeSelect"]', t('labels.networkModeRuntime'));
|
|
3204
4110
|
renderSocialModeHint('-', '-', false, false);
|
|
3205
4111
|
setSocialModePendingState(false);
|
|
3206
|
-
|
|
4112
|
+
document.getElementById('socialProfileVisibilityHint').textContent = t('hints.profileVisibilityManaged');
|
|
3207
4113
|
document.getElementById('socialGovernanceHint').textContent = t('hints.messageGovernanceHint');
|
|
4114
|
+
document.getElementById('openclawSkillHint').textContent = t('hints.openclawSkillHint');
|
|
4115
|
+
document.getElementById('openclawSkillInstallBtn').textContent = t('actions.learnOpenClawSkill');
|
|
3208
4116
|
setText('.hero-meta-item .label', t('labels.mode'), 0);
|
|
3209
4117
|
setText('.hero-meta-item .label', t('labels.adapter'), 1);
|
|
3210
4118
|
setText('.hero-meta-item .label', t('labels.relay'), 2);
|
|
@@ -3249,6 +4157,7 @@
|
|
|
3249
4157
|
document.getElementById('networkFeedback').textContent = t('common.ready');
|
|
3250
4158
|
document.getElementById('socialFeedback').textContent = t('common.ready');
|
|
3251
4159
|
document.getElementById('socialGovernanceFeedback').textContent = t('common.ready');
|
|
4160
|
+
document.getElementById('openclawSkillFeedback').textContent = t('common.ready');
|
|
3252
4161
|
document.getElementById('socialMessageFeedback').textContent = t('common.ready');
|
|
3253
4162
|
}
|
|
3254
4163
|
function peerStatusText(status) {
|
|
@@ -3577,24 +4486,30 @@
|
|
|
3577
4486
|
}
|
|
3578
4487
|
activeTab = tab;
|
|
3579
4488
|
document.querySelectorAll('.tab').forEach((b) => b.classList.toggle('active', b.dataset.tab === tab));
|
|
3580
|
-
['overview', 'profile', 'network', 'social'].forEach((k) => {
|
|
4489
|
+
['overview', 'agent', 'chat', 'profile', 'network', 'social'].forEach((k) => {
|
|
3581
4490
|
document.getElementById(`view-${k}`).classList.toggle('active', k === tab);
|
|
3582
4491
|
});
|
|
3583
4492
|
const meta = pageMeta[tab] || pageMeta.overview;
|
|
3584
4493
|
document.getElementById('pageBreadcrumb').textContent = meta.title;
|
|
3585
4494
|
document.getElementById('pageHeroTitle').textContent = meta.title;
|
|
3586
4495
|
document.getElementById('pageHeroBody').textContent = meta.body;
|
|
4496
|
+
document.getElementById('integrationStatusBar')?.classList.toggle('hidden', tab !== 'overview');
|
|
4497
|
+
document.querySelector('.page-hero')?.classList.toggle('hidden', tab !== 'overview');
|
|
4498
|
+
document.getElementById('publicDiscoveryHint')?.classList.toggle('hidden', tab !== 'overview');
|
|
3587
4499
|
if (tab === 'profile' && !profileDirty && !profileSaving) {
|
|
3588
4500
|
refreshProfile().catch(() => {});
|
|
3589
4501
|
}
|
|
3590
4502
|
}
|
|
3591
4503
|
|
|
3592
4504
|
async function refreshOverview() {
|
|
3593
|
-
const [overviewRes, discoveredRes, peerRes, profileRes] = await Promise.allSettled([
|
|
4505
|
+
const [overviewRes, discoveredRes, peerRes, profileRes, bridgeRes, networkCfgRes, networkStatsRes] = await Promise.allSettled([
|
|
3594
4506
|
api('/api/overview'),
|
|
3595
4507
|
api('/api/search?q='),
|
|
3596
4508
|
api('/api/peers'),
|
|
3597
4509
|
api('/api/profile'),
|
|
4510
|
+
api('/api/openclaw/bridge'),
|
|
4511
|
+
api('/api/network/config'),
|
|
4512
|
+
api('/api/network/stats'),
|
|
3598
4513
|
]);
|
|
3599
4514
|
if (overviewRes.status !== 'fulfilled') {
|
|
3600
4515
|
throw overviewRes.reason;
|
|
@@ -3603,6 +4518,9 @@
|
|
|
3603
4518
|
const allProfiles = discoveredRes.status === 'fulfilled' ? (discoveredRes.value.data || []) : [];
|
|
3604
4519
|
const peers = peerRes.status === 'fulfilled' ? (peerRes.value.data || {}) : {};
|
|
3605
4520
|
const currentProfile = profileRes.status === 'fulfilled' ? (profileRes.value.data || {}) : {};
|
|
4521
|
+
const bridge = bridgeRes.status === 'fulfilled' ? (bridgeRes.value.data || {}) : {};
|
|
4522
|
+
const networkCfg = networkCfgRes.status === 'fulfilled' ? (networkCfgRes.value.data || {}) : {};
|
|
4523
|
+
const networkStats = networkStatsRes.status === 'fulfilled' ? (networkStatsRes.value.data || {}) : {};
|
|
3606
4524
|
const peerItems = peers.items || [];
|
|
3607
4525
|
const mergedById = new Map();
|
|
3608
4526
|
|
|
@@ -3691,6 +4609,70 @@
|
|
|
3691
4609
|
document.getElementById('pillBroadcast').textContent = pillBroadcastText;
|
|
3692
4610
|
document.getElementById('pillBroadcast').className = pillBroadcastClassName;
|
|
3693
4611
|
|
|
4612
|
+
const openclawRunning = !!bridge.openclaw_runtime?.running;
|
|
4613
|
+
const openclawDetected = !!bridge.openclaw_installation?.detected;
|
|
4614
|
+
const skillInstalled = !!bridge.skill_learning?.installed;
|
|
4615
|
+
const globalMode = heroModeText === 'global-preview';
|
|
4616
|
+
const networkDiag = networkStats.adapter_diagnostics_summary || {};
|
|
4617
|
+
const lastNetworkError = String(networkDiag.last_error || o.last_broadcast_error || '').trim();
|
|
4618
|
+
const broadcastHealthy = o.broadcast_enabled && !lastNetworkError;
|
|
4619
|
+
const roleKey = openclawRunning
|
|
4620
|
+
? 'overview.homeRoleListener'
|
|
4621
|
+
: openclawDetected
|
|
4622
|
+
? 'overview.homeRoleStandby'
|
|
4623
|
+
: 'overview.homeRoleBroadcaster';
|
|
4624
|
+
const titleKey = openclawRunning
|
|
4625
|
+
? 'overview.homeTitleListener'
|
|
4626
|
+
: openclawDetected
|
|
4627
|
+
? 'overview.homeTitleOffline'
|
|
4628
|
+
: 'overview.homeTitleBroadcaster';
|
|
4629
|
+
const bodyKey = openclawRunning
|
|
4630
|
+
? 'overview.homeBodyListener'
|
|
4631
|
+
: openclawDetected
|
|
4632
|
+
? 'overview.homeBodyOffline'
|
|
4633
|
+
: 'overview.homeBodyBroadcaster';
|
|
4634
|
+
|
|
4635
|
+
document.getElementById('homeMissionTitle').textContent = t(titleKey);
|
|
4636
|
+
document.getElementById('homeMissionBody').textContent = t(bodyKey);
|
|
4637
|
+
document.getElementById('homeMissionStatus').innerHTML = [
|
|
4638
|
+
`<span class="mission-status-pill"><strong>${t('overview.homeRole')}</strong> ${t(roleKey)}</span>`,
|
|
4639
|
+
`<span class="mission-status-pill"><strong>${t('overview.homeOpenClaw')}</strong> ${openclawRunning ? t('overview.homeRunning') : (openclawDetected ? t('overview.homeInstalledOnly') : t('overview.homeStopped'))}</span>`,
|
|
4640
|
+
`<span class="mission-status-pill"><strong>${t('overview.homeGlobalMode')}</strong> ${globalMode ? t('overview.homeGlobalReady') : t('overview.homeNotGlobal')}</span>`,
|
|
4641
|
+
].join('');
|
|
4642
|
+
document.getElementById('homePriorityGrid').innerHTML = [
|
|
4643
|
+
[t('overview.homeOpenClaw'), openclawRunning ? t('overview.homeRunning') : (openclawDetected ? t('overview.homeInstalledOnly') : t('overview.homeStopped')), openclawRunning ? t('overview.homeMetaRunning') : t('overview.homeMetaNotRunning')],
|
|
4644
|
+
[t('overview.homeGlobalMode'), globalMode ? t('overview.homeGlobalReady') : t('overview.homeNotGlobal'), globalMode ? t('overview.homeMetaGlobal') : t('overview.homeMetaNotGlobal')],
|
|
4645
|
+
[t('overview.homeBroadcastHealth'), broadcastHealthy ? t('overview.homeHealthy') : t('overview.homeDegraded'), lastNetworkError || `Last broadcast ${ago(o.last_broadcast_at)}`],
|
|
4646
|
+
[t('overview.homePeers'), String(visibleRemotePublicCount), t('overview.homeMetaPeers', { online: String(onlineCount), discovered: String(discoveredCount) })],
|
|
4647
|
+
].map(([label, value, meta]) => `
|
|
4648
|
+
<div class="priority-card">
|
|
4649
|
+
<div class="priority-card__label">${label}</div>
|
|
4650
|
+
<div class="priority-card__value">${escapeHtml(value)}</div>
|
|
4651
|
+
<div class="priority-card__meta">${escapeHtml(meta)}</div>
|
|
4652
|
+
</div>
|
|
4653
|
+
`).join('');
|
|
4654
|
+
document.getElementById('homeBriefList').innerHTML = [
|
|
4655
|
+
[t('overview.homeBriefNetwork'), t('overview.homeBriefNetworkValue', {
|
|
4656
|
+
mode: describeCurrentMode(heroModeText),
|
|
4657
|
+
relay: String(networkDiag.signaling_url || networkCfg.adapter_extra?.signaling_url || '-'),
|
|
4658
|
+
room: String(networkDiag.room || networkCfg.adapter_extra?.room || '-'),
|
|
4659
|
+
})],
|
|
4660
|
+
[t('overview.homeBriefBridge'), t('overview.homeBriefBridgeValue', {
|
|
4661
|
+
runtime: openclawRunning ? t('overview.homeRunning') : (openclawDetected ? t('overview.homeInstalledOnly') : t('overview.homeStopped')),
|
|
4662
|
+
skill: skillInstalled ? t('common.yes') : t('common.no'),
|
|
4663
|
+
})],
|
|
4664
|
+
[t('overview.homeBriefNextAction'), !broadcastHealthy
|
|
4665
|
+
? t('overview.homeBriefActionStabilize')
|
|
4666
|
+
: openclawRunning
|
|
4667
|
+
? t('overview.homeBriefActionBroadcast')
|
|
4668
|
+
: t('overview.homeBriefActionLearn')],
|
|
4669
|
+
].map(([label, value]) => `
|
|
4670
|
+
<div class="home-brief__item">
|
|
4671
|
+
<div class="home-brief__label">${label}</div>
|
|
4672
|
+
<div class="home-brief__value">${escapeHtml(value)}</div>
|
|
4673
|
+
</div>
|
|
4674
|
+
`).join('');
|
|
4675
|
+
|
|
3694
4676
|
const init = o.init_state || {};
|
|
3695
4677
|
const onboarding = o.onboarding || {};
|
|
3696
4678
|
const notice = document.getElementById('initNotice');
|
|
@@ -4203,7 +5185,7 @@
|
|
|
4203
5185
|
document.getElementById('socialStatusLine').textContent = summaryLine;
|
|
4204
5186
|
document.getElementById('socialStatusSubline').textContent = namespaceText;
|
|
4205
5187
|
const bar = document.getElementById('integrationStatusBar');
|
|
4206
|
-
bar.className = `integration-strip ${status.connected_to_silicaclaw && status.public_enabled ? 'ok' : 'warn'}`;
|
|
5188
|
+
bar.className = `integration-strip ${status.connected_to_silicaclaw && status.public_enabled ? 'ok' : 'warn'}${activeTab === 'overview' ? '' : ' hidden'}`;
|
|
4207
5189
|
bar.textContent = t('social.barStatus', {
|
|
4208
5190
|
connected: status.connected_to_silicaclaw ? t('common.yes') : t('common.no'),
|
|
4209
5191
|
mode,
|
|
@@ -4250,6 +5232,83 @@
|
|
|
4250
5232
|
[t('social.reuseOpenClawIdentity'), summary.reused_openclaw_identity ? t('common.yes') : t('common.no')],
|
|
4251
5233
|
].map(([k,v]) => `<div class="card"><div class="label">${k}</div><div class="value" style="font-size:17px;">${v}</div></div>`).join('');
|
|
4252
5234
|
|
|
5235
|
+
const skillLearning = bridge.skill_learning || {};
|
|
5236
|
+
const ownerDelivery = bridge.owner_delivery || {};
|
|
5237
|
+
const installAction = skillLearning.install_action || {};
|
|
5238
|
+
const openclawDetected = !!bridge.openclaw_installation?.detected;
|
|
5239
|
+
const openclawRunning = !!bridge.openclaw_runtime?.running;
|
|
5240
|
+
const skillInstalled = !!skillLearning.installed;
|
|
5241
|
+
const installedSkillPath = skillLearning.installed_skill_path || '-';
|
|
5242
|
+
const ownerDeliveryStatusEl = document.getElementById('socialOwnerDeliveryStatus');
|
|
5243
|
+
const ownerDeliverySublineEl = document.getElementById('socialOwnerDeliverySubline');
|
|
5244
|
+
const ownerDeliveryReasonEl = document.getElementById('socialOwnerDeliveryReason');
|
|
5245
|
+
let ownerDeliveryHeadline = t('feedback.openclawRoleBroadcasterOnly');
|
|
5246
|
+
let ownerDeliveryBody = ownerDelivery.reason || '-';
|
|
5247
|
+
let ownerDeliveryTone = 'warn';
|
|
5248
|
+
if (ownerDelivery.ready) {
|
|
5249
|
+
ownerDeliveryHeadline = t('feedback.openclawRoleOwnerReady');
|
|
5250
|
+
ownerDeliveryBody = t('hints.ownerDeliveryReadyBody');
|
|
5251
|
+
ownerDeliveryTone = 'info';
|
|
5252
|
+
} else if (ownerDelivery.bridge_messages_readable) {
|
|
5253
|
+
if (ownerDelivery.forward_command_configured) {
|
|
5254
|
+
ownerDeliveryHeadline = t('feedback.openclawRoleNeedsOwnerRoute');
|
|
5255
|
+
ownerDeliveryBody = t('hints.ownerDeliveryNeedsRouteBody');
|
|
5256
|
+
} else {
|
|
5257
|
+
ownerDeliveryHeadline = t('feedback.openclawRoleLearningOnly');
|
|
5258
|
+
ownerDeliveryBody = t('hints.ownerDeliveryLearningBody');
|
|
5259
|
+
}
|
|
5260
|
+
ownerDeliveryTone = 'warn';
|
|
5261
|
+
} else if (!openclawRunning) {
|
|
5262
|
+
ownerDeliveryHeadline = t('feedback.openclawRoleNotRunning');
|
|
5263
|
+
ownerDeliveryBody = ownerDelivery.reason || '-';
|
|
5264
|
+
ownerDeliveryTone = 'warn';
|
|
5265
|
+
}
|
|
5266
|
+
ownerDeliveryStatusEl.className = `feedback ${ownerDeliveryTone}`;
|
|
5267
|
+
ownerDeliveryStatusEl.textContent = ownerDeliveryHeadline;
|
|
5268
|
+
ownerDeliverySublineEl.textContent = [
|
|
5269
|
+
`${t('social.broadcastReadable')}: ${ownerDelivery.bridge_messages_readable ? t('common.yes') : t('common.no')}`,
|
|
5270
|
+
`${t('social.ownerForwardCommand')}: ${ownerDelivery.forward_command_configured ? t('common.yes') : t('common.no')}`,
|
|
5271
|
+
`${t('social.ownerForwardReady')}: ${ownerDelivery.ready ? t('common.yes') : t('common.no')}`,
|
|
5272
|
+
].join(' · ');
|
|
5273
|
+
ownerDeliveryReasonEl.textContent = ownerDeliveryBody;
|
|
5274
|
+
document.getElementById('openclawSkillCards').innerHTML = [
|
|
5275
|
+
[t('social.openclawInstalled'), openclawDetected ? t('common.yes') : t('common.no')],
|
|
5276
|
+
[t('social.running'), openclawRunning ? t('common.yes') : t('common.no')],
|
|
5277
|
+
[t('social.skillInstalled'), skillInstalled ? t('common.yes') : t('common.no')],
|
|
5278
|
+
[t('social.broadcastReadable'), ownerDelivery.bridge_messages_readable ? t('common.yes') : t('common.no')],
|
|
5279
|
+
[t('social.ownerForwardReady'), ownerDelivery.ready ? t('common.yes') : t('common.no')],
|
|
5280
|
+
[t('social.ownerForwardCommand'), ownerDelivery.forward_command_configured ? t('common.yes') : t('common.no')],
|
|
5281
|
+
[t('social.installMode'), skillLearning.install_mode || '-'],
|
|
5282
|
+
[t('social.installedPath'), skillInstalled ? installedSkillPath : '-'],
|
|
5283
|
+
].map(([k,v]) => `<div class="card"><div class="label">${k}</div><div class="value" style="font-size:17px;">${escapeHtml(v)}</div></div>`).join('');
|
|
5284
|
+
document.getElementById('openclawSkillPath').textContent = ownerDelivery.forward_command
|
|
5285
|
+
? `${ownerDelivery.forward_command}${ownerDelivery.owner_channel ? ` · ${ownerDelivery.owner_channel}` : ''}${ownerDelivery.owner_target ? ` · ${ownerDelivery.owner_target}` : ''}`
|
|
5286
|
+
: skillInstalled
|
|
5287
|
+
? installedSkillPath
|
|
5288
|
+
: (installAction.recommended_command || '-');
|
|
5289
|
+
document.getElementById('openclawSkillHint').textContent = !openclawDetected
|
|
5290
|
+
? t('feedback.openclawRoleBroadcasterOnly')
|
|
5291
|
+
: !openclawRunning
|
|
5292
|
+
? t('feedback.openclawRoleNotRunning')
|
|
5293
|
+
: !skillInstalled
|
|
5294
|
+
? t('feedback.openclawRoleReadyToLearn')
|
|
5295
|
+
: ownerDelivery.ready
|
|
5296
|
+
? t('feedback.openclawRoleOwnerReady')
|
|
5297
|
+
: ownerDelivery.bridge_messages_readable && !ownerDelivery.forward_command_configured
|
|
5298
|
+
? t('feedback.openclawRoleLearningOnly')
|
|
5299
|
+
: ownerDelivery.bridge_messages_readable
|
|
5300
|
+
? t('feedback.openclawRoleNeedsOwnerRoute')
|
|
5301
|
+
: t('feedback.openclawRoleLearned');
|
|
5302
|
+
const skillInstallBtn = document.getElementById('openclawSkillInstallBtn');
|
|
5303
|
+
skillInstallBtn.textContent = !openclawDetected
|
|
5304
|
+
? t('actions.openclawNotInstalled')
|
|
5305
|
+
: !openclawRunning
|
|
5306
|
+
? t('actions.openclawNotRunning')
|
|
5307
|
+
: skillInstalled
|
|
5308
|
+
? t('actions.openclawSkillLearned')
|
|
5309
|
+
: t('actions.learnOpenClawSkill');
|
|
5310
|
+
skillInstallBtn.disabled = !openclawDetected || !openclawRunning || skillInstalled;
|
|
5311
|
+
|
|
4253
5312
|
const policy = governance.policy || {};
|
|
4254
5313
|
const blockedAgentIds = Array.isArray(policy.blocked_agent_ids) ? policy.blocked_agent_ids : [];
|
|
4255
5314
|
const blockedTerms = Array.isArray(policy.blocked_terms) ? policy.blocked_terms : [];
|
|
@@ -4300,6 +5359,8 @@
|
|
|
4300
5359
|
connected_to_silicaclaw: bridge.connected_to_silicaclaw,
|
|
4301
5360
|
public_enabled: bridge.public_enabled,
|
|
4302
5361
|
message_broadcast_enabled: bridge.message_broadcast_enabled,
|
|
5362
|
+
openclaw_runtime: bridge.openclaw_runtime || {},
|
|
5363
|
+
skill_learning: bridge.skill_learning || {},
|
|
4303
5364
|
endpoints: bridge.endpoints || {},
|
|
4304
5365
|
},
|
|
4305
5366
|
source: {
|
|
@@ -4417,6 +5478,12 @@
|
|
|
4417
5478
|
document.getElementById('overviewStepBroadcastBtn').addEventListener('click', () => {
|
|
4418
5479
|
document.getElementById('broadcastNowBtn').click();
|
|
4419
5480
|
});
|
|
5481
|
+
document.getElementById('homeOpenAgentBtn').addEventListener('click', () => switchTab('agent'));
|
|
5482
|
+
document.getElementById('homeOpenSocialBtn').addEventListener('click', () => switchTab('social'));
|
|
5483
|
+
document.getElementById('homeOpenNetworkBtn').addEventListener('click', () => switchTab('network'));
|
|
5484
|
+
document.getElementById('homeBroadcastNowBtn').addEventListener('click', () => {
|
|
5485
|
+
document.getElementById('broadcastNowBtn').click();
|
|
5486
|
+
});
|
|
4420
5487
|
document.getElementById('profileNextStepBtn').addEventListener('click', () => {
|
|
4421
5488
|
setProfileNextStepVisible(false);
|
|
4422
5489
|
switchTab('overview');
|
|
@@ -4622,6 +5689,21 @@
|
|
|
4622
5689
|
setFeedback('socialFeedback', e instanceof Error ? e.message : t('feedback.exportFailed'), 'error');
|
|
4623
5690
|
}
|
|
4624
5691
|
});
|
|
5692
|
+
document.getElementById('openclawSkillInstallBtn').addEventListener('click', async () => {
|
|
5693
|
+
const btn = document.getElementById('openclawSkillInstallBtn');
|
|
5694
|
+
btn.disabled = true;
|
|
5695
|
+
setFeedback('openclawSkillFeedback', t('feedback.openclawSkillInstalling'));
|
|
5696
|
+
try {
|
|
5697
|
+
await api('/api/openclaw/bridge/skill-install', { method: 'POST' });
|
|
5698
|
+
setFeedback('openclawSkillFeedback', t('feedback.openclawSkillInstalled'));
|
|
5699
|
+
toast(t('feedback.openclawSkillInstalled'));
|
|
5700
|
+
await refreshSocial();
|
|
5701
|
+
} catch (e) {
|
|
5702
|
+
setFeedback('openclawSkillFeedback', e instanceof Error ? e.message : t('feedback.openclawSkillInstallFailed'), 'error');
|
|
5703
|
+
} finally {
|
|
5704
|
+
await refreshSocial().catch(() => {});
|
|
5705
|
+
}
|
|
5706
|
+
});
|
|
4625
5707
|
document.getElementById('saveGovernanceBtn').addEventListener('click', async () => {
|
|
4626
5708
|
setFeedback('socialGovernanceFeedback', t('common.saving'));
|
|
4627
5709
|
try {
|