@kevin5251984/guild 0.2.12 → 0.2.14
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/package.json +10 -8
- package/src/catalog/subagents.ts +1 -2
- package/src/chat-parts.ts +1 -6
- package/src/generate.ts +27 -55
- package/src/handlers.ts +6 -183
- package/src/harness.ts +8 -21
- package/src/image-gen.ts +1 -2
- package/src/llm.ts +7 -14
- package/src/mention.ts +12 -63
- package/src/oauth.ts +27 -131
- package/src/public/chat.css +191 -143
- package/src/public/chat.html +49 -191
- package/src/public/i18n.js +6 -18
- package/src/public/index.html +46 -1
- package/src/public/settings.html +1 -2
- package/src/public/skills-add.html +0 -8
- package/src/public/studio.html +117 -171
- package/src/public/style.css +150 -260
- package/src/public/subagents-add.html +0 -8
- package/src/router.ts +0 -11
- package/src/store.ts +0 -14
- package/src/subagent.ts +6 -203
- package/src/tools.ts +18 -117
- package/src/trajectory.ts +5 -51
- package/src/usage.ts +0 -10
- package/vendor/protocol/src/index.ts +1 -4
- package/src/public/buddy.js +0 -432
package/src/public/style.css
CHANGED
|
@@ -16,7 +16,12 @@
|
|
|
16
16
|
--accent: #A8B0BC;
|
|
17
17
|
--ok: #9fdfb2;
|
|
18
18
|
--err: #fca5a5;
|
|
19
|
+
--danger: #f0a8a8;
|
|
19
20
|
--radius: 14px;
|
|
21
|
+
--press: 0.97;
|
|
22
|
+
--ease-out: cubic-bezier(0.23, 1, 0.32, 1);
|
|
23
|
+
--press-ms: 140ms;
|
|
24
|
+
--hover-ms: 160ms;
|
|
20
25
|
--focus: 0 0 0 2px var(--bg), 0 0 0 3px var(--steel);
|
|
21
26
|
color: var(--text);
|
|
22
27
|
background: var(--bg);
|
|
@@ -88,6 +93,7 @@ select:focus-visible {
|
|
|
88
93
|
}
|
|
89
94
|
.locale-switch button.on,
|
|
90
95
|
.locale-switch button:hover { background: var(--lift); color: var(--text); }
|
|
96
|
+
.locale-switch button:active:not(:disabled) { transform: scale(var(--press)); }
|
|
91
97
|
|
|
92
98
|
body.app {
|
|
93
99
|
display: grid;
|
|
@@ -329,6 +335,19 @@ button {
|
|
|
329
335
|
border: 0;
|
|
330
336
|
border-radius: 999px;
|
|
331
337
|
cursor: pointer;
|
|
338
|
+
transition:
|
|
339
|
+
background-color var(--hover-ms) ease,
|
|
340
|
+
border-color var(--hover-ms) ease,
|
|
341
|
+
color var(--hover-ms) ease,
|
|
342
|
+
transform var(--press-ms) var(--ease-out),
|
|
343
|
+
opacity var(--hover-ms) ease;
|
|
344
|
+
}
|
|
345
|
+
/* :where keeps this weaker than tavern / steel / ghost rules. */
|
|
346
|
+
button:where(:hover):where(:not(:disabled)) {
|
|
347
|
+
background: color-mix(in srgb, var(--paper) 88%, white);
|
|
348
|
+
}
|
|
349
|
+
button:where(:active):where(:not(:disabled)) {
|
|
350
|
+
transform: scale(var(--press));
|
|
332
351
|
}
|
|
333
352
|
button.secondary {
|
|
334
353
|
background: transparent;
|
|
@@ -336,31 +355,15 @@ button.secondary {
|
|
|
336
355
|
border: 1px solid var(--line);
|
|
337
356
|
margin-top: 0.55rem;
|
|
338
357
|
}
|
|
358
|
+
button.secondary:hover:not(:disabled) {
|
|
359
|
+
background: var(--lift);
|
|
360
|
+
color: var(--text);
|
|
361
|
+
}
|
|
339
362
|
button.danger {
|
|
340
|
-
color:
|
|
363
|
+
color: var(--danger);
|
|
341
364
|
border-color: #4a2a2a;
|
|
342
365
|
}
|
|
343
366
|
button:disabled { opacity: 0.45; }
|
|
344
|
-
button.is-busy:disabled {
|
|
345
|
-
opacity: 1;
|
|
346
|
-
cursor: wait;
|
|
347
|
-
pointer-events: none;
|
|
348
|
-
}
|
|
349
|
-
button.is-busy::after {
|
|
350
|
-
content: "";
|
|
351
|
-
display: inline-block;
|
|
352
|
-
width: 0.7em;
|
|
353
|
-
height: 0.7em;
|
|
354
|
-
margin-left: 0.45em;
|
|
355
|
-
border: 1.5px solid currentColor;
|
|
356
|
-
border-right-color: transparent;
|
|
357
|
-
border-radius: 50%;
|
|
358
|
-
vertical-align: -0.12em;
|
|
359
|
-
animation: btn-spin 0.7s linear infinite;
|
|
360
|
-
}
|
|
361
|
-
@keyframes btn-spin {
|
|
362
|
-
to { transform: rotate(360deg); }
|
|
363
|
-
}
|
|
364
367
|
|
|
365
368
|
.grid { display: grid; gap: 1rem; }
|
|
366
369
|
@media (min-width: 760px) {
|
|
@@ -523,7 +526,10 @@ button.is-busy::after {
|
|
|
523
526
|
background: var(--fill);
|
|
524
527
|
color: var(--muted);
|
|
525
528
|
font-size: 0.85rem;
|
|
529
|
+
transition: background-color var(--hover-ms) ease, color var(--hover-ms) ease, transform var(--press-ms) var(--ease-out);
|
|
526
530
|
}
|
|
531
|
+
.chip:hover:not(.on) { color: var(--text); background: var(--lift); }
|
|
532
|
+
.chip:active { transform: scale(var(--press)); }
|
|
527
533
|
.chip.on { background: var(--paper); color: var(--ink); }
|
|
528
534
|
.chip-n {
|
|
529
535
|
opacity: 0.55;
|
|
@@ -547,8 +553,10 @@ button.is-busy::after {
|
|
|
547
553
|
font: inherit;
|
|
548
554
|
font-size: 0.72rem;
|
|
549
555
|
cursor: pointer;
|
|
556
|
+
transition: background-color var(--hover-ms) ease, color var(--hover-ms) ease, transform var(--press-ms) var(--ease-out);
|
|
550
557
|
}
|
|
551
558
|
.mini-tag:hover { color: var(--text); background: var(--lift); }
|
|
559
|
+
.mini-tag:active { transform: scale(var(--press)); }
|
|
552
560
|
.mini-tag.on { background: var(--paper); color: var(--ink); }
|
|
553
561
|
|
|
554
562
|
.more {
|
|
@@ -652,13 +660,15 @@ a.btn {
|
|
|
652
660
|
margin: 0;
|
|
653
661
|
padding: 0.55rem 0.95rem;
|
|
654
662
|
font-weight: 560;
|
|
655
|
-
color:
|
|
656
|
-
background: var(--
|
|
663
|
+
color: var(--ink);
|
|
664
|
+
background: var(--paper);
|
|
657
665
|
border-radius: 999px;
|
|
658
666
|
text-decoration: none;
|
|
659
667
|
white-space: nowrap;
|
|
668
|
+
transition: background-color var(--hover-ms) ease, transform var(--press-ms) var(--ease-out);
|
|
660
669
|
}
|
|
661
|
-
a.btn:hover { text-decoration: none;
|
|
670
|
+
a.btn:hover { text-decoration: none; background: color-mix(in srgb, var(--paper) 88%, white); }
|
|
671
|
+
a.btn:active { transform: scale(var(--press)); }
|
|
662
672
|
|
|
663
673
|
.lib-card {
|
|
664
674
|
display: grid;
|
|
@@ -933,12 +943,13 @@ a.btn:hover { text-decoration: none; opacity: 0.92; }
|
|
|
933
943
|
font: inherit;
|
|
934
944
|
font-size: 0.86rem;
|
|
935
945
|
cursor: pointer;
|
|
946
|
+
transition: background-color var(--hover-ms) ease, border-color var(--hover-ms) ease, color var(--hover-ms) ease, transform var(--press-ms) var(--ease-out);
|
|
936
947
|
}
|
|
937
|
-
.key-tab:hover { color: var(--text); border-color:
|
|
948
|
+
.key-tab:hover { color: var(--text); border-color: color-mix(in srgb, var(--steel) 45%, var(--line)); background: var(--lift); }
|
|
938
949
|
.key-tab.on {
|
|
939
|
-
background:
|
|
950
|
+
background: var(--lift);
|
|
940
951
|
color: var(--text);
|
|
941
|
-
border-color:
|
|
952
|
+
border-color: color-mix(in srgb, var(--steel) 45%, var(--line));
|
|
942
953
|
}
|
|
943
954
|
.key-tab.add {
|
|
944
955
|
border-style: dashed;
|
|
@@ -947,12 +958,13 @@ a.btn:hover { text-decoration: none; opacity: 0.92; }
|
|
|
947
958
|
}
|
|
948
959
|
.key-tab.add:hover {
|
|
949
960
|
color: var(--text);
|
|
950
|
-
border-color:
|
|
961
|
+
border-color: color-mix(in srgb, var(--steel) 45%, var(--line));
|
|
951
962
|
background: var(--fill);
|
|
952
963
|
}
|
|
964
|
+
.key-tab:active:not(:disabled) { transform: scale(var(--press)); }
|
|
953
965
|
.key-tab:focus { outline: none; }
|
|
954
966
|
.key-tab:focus-visible {
|
|
955
|
-
box-shadow:
|
|
967
|
+
box-shadow: var(--focus);
|
|
956
968
|
}
|
|
957
969
|
.key-tab .badge { margin-left: 0.15rem; }
|
|
958
970
|
dialog.pick.add-provider { width: min(32rem, 92vw); }
|
|
@@ -976,13 +988,13 @@ dialog.pick.add-provider { width: min(32rem, 92vw); }
|
|
|
976
988
|
cursor: pointer;
|
|
977
989
|
}
|
|
978
990
|
.preset-grid button:hover {
|
|
979
|
-
border-color:
|
|
980
|
-
background:
|
|
991
|
+
border-color: color-mix(in srgb, var(--steel) 45%, var(--line));
|
|
992
|
+
background: var(--lift);
|
|
981
993
|
}
|
|
994
|
+
.preset-grid button:active:not(:disabled) { transform: scale(var(--press)); }
|
|
982
995
|
.preset-grid button:focus { outline: none; }
|
|
983
996
|
.preset-grid button:focus-visible {
|
|
984
|
-
|
|
985
|
-
box-shadow: 0 0 0 2px #000, 0 0 0 4px #5a5a5a;
|
|
997
|
+
box-shadow: var(--focus);
|
|
986
998
|
}
|
|
987
999
|
.preset-grid button[data-preset="custom"] { grid-column: 1 / -1; }
|
|
988
1000
|
.preset-grid button .hint {
|
|
@@ -1072,28 +1084,15 @@ body.app.bar-page .shell {
|
|
|
1072
1084
|
padding: 0 0 0.4rem;
|
|
1073
1085
|
}
|
|
1074
1086
|
.rpg-screen {
|
|
1075
|
-
display: grid;
|
|
1076
|
-
grid-template-rows: auto auto;
|
|
1077
1087
|
position: relative;
|
|
1088
|
+
aspect-ratio: 16 / 9;
|
|
1078
1089
|
overflow: hidden;
|
|
1079
1090
|
background: #000;
|
|
1080
1091
|
border: 4px solid #0a0a12;
|
|
1081
1092
|
box-shadow: 8px 8px 0 #000;
|
|
1082
1093
|
image-rendering: pixelated;
|
|
1083
1094
|
}
|
|
1084
|
-
|
|
1085
|
-
background: #1a1410;
|
|
1086
|
-
border-color: #1a1410;
|
|
1087
|
-
box-shadow: 8px 8px 0 #1a1410;
|
|
1088
|
-
}
|
|
1089
|
-
.rpg-scene {
|
|
1090
|
-
grid-row: 1;
|
|
1091
|
-
grid-column: 1;
|
|
1092
|
-
position: relative;
|
|
1093
|
-
aspect-ratio: 16 / 9;
|
|
1094
|
-
min-height: 0;
|
|
1095
|
-
overflow: hidden;
|
|
1096
|
-
}
|
|
1095
|
+
.rpg-scene { position: absolute; inset: 0; }
|
|
1097
1096
|
.rpg-scene[hidden] { display: none; }
|
|
1098
1097
|
.rpg-bg {
|
|
1099
1098
|
display: block;
|
|
@@ -1135,216 +1134,120 @@ body.bar-page .rpg-screen {
|
|
|
1135
1134
|
.inn-map {
|
|
1136
1135
|
position: absolute;
|
|
1137
1136
|
inset: 0;
|
|
1138
|
-
background-color: #
|
|
1139
|
-
background-image:
|
|
1140
|
-
|
|
1137
|
+
background-color: #3f3f48;
|
|
1138
|
+
background-image:
|
|
1139
|
+
linear-gradient(#2a1812 0 70px, transparent 70px),
|
|
1140
|
+
repeating-linear-gradient(90deg, transparent 0 15px, #35353c 15px 16px),
|
|
1141
|
+
repeating-linear-gradient(transparent 0 15px, #35353c 15px 16px);
|
|
1141
1142
|
}
|
|
1142
1143
|
.inn-wall {
|
|
1143
1144
|
position: absolute;
|
|
1144
1145
|
left: 0;
|
|
1145
1146
|
right: 0;
|
|
1146
1147
|
top: 0;
|
|
1147
|
-
height:
|
|
1148
|
-
display: flex;
|
|
1149
|
-
align-items: flex-end;
|
|
1150
|
-
justify-content: center;
|
|
1151
|
-
gap: 28px;
|
|
1152
|
-
padding: 0 12px 8px;
|
|
1148
|
+
height: 70px;
|
|
1153
1149
|
background:
|
|
1154
|
-
linear-gradient(#
|
|
1155
|
-
|
|
1156
|
-
box-shadow: inset 0 -
|
|
1157
|
-
z-index: 1;
|
|
1150
|
+
repeating-linear-gradient(90deg, #3a2218 0 40px, #2a1812 40px 44px),
|
|
1151
|
+
linear-gradient(#4a2c20, #2a1812);
|
|
1152
|
+
box-shadow: inset 0 -6px 0 #1a100c;
|
|
1158
1153
|
}
|
|
1159
|
-
.inn-
|
|
1160
|
-
width: 42px;
|
|
1161
|
-
height: 28px;
|
|
1162
|
-
background:
|
|
1163
|
-
linear-gradient(#0b1020 0 5px, transparent 5px) 0 12px / 100% 2px no-repeat,
|
|
1164
|
-
linear-gradient(90deg, #0b1020 0 2px, transparent 2px) 20px 0 / 2px 100% no-repeat,
|
|
1165
|
-
linear-gradient(#2a3a6a, #12182c);
|
|
1166
|
-
box-shadow: inset 0 0 0 3px #2a2118, 0 0 0 2px #1a1410;
|
|
1167
|
-
}
|
|
1168
|
-
.inn-nook {
|
|
1154
|
+
.inn-rail {
|
|
1169
1155
|
position: absolute;
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
justify-content: space-evenly;
|
|
1177
|
-
z-index: 1;
|
|
1178
|
-
background:
|
|
1179
|
-
repeating-linear-gradient(90deg, #2a4638 0 14px, #244032 14px 16px);
|
|
1180
|
-
background-size: 16px 16px;
|
|
1181
|
-
}
|
|
1182
|
-
.inn-nook-l { left: 0; border-right: 2px solid #1a2a22; }
|
|
1183
|
-
.inn-nook-r { right: 0; border-left: 2px solid #1a2a22; }
|
|
1184
|
-
.inn-prop.plant {
|
|
1185
|
-
width: 28px;
|
|
1186
|
-
height: 36px;
|
|
1187
|
-
background:
|
|
1188
|
-
linear-gradient(#3d8c4a 0 14px, transparent 14px),
|
|
1189
|
-
linear-gradient(#8a5a32 0 100%);
|
|
1190
|
-
background-position: center 0, center 16px;
|
|
1191
|
-
background-repeat: no-repeat;
|
|
1192
|
-
background-size: 18px 16px, 8px 20px;
|
|
1156
|
+
left: 0;
|
|
1157
|
+
right: 0;
|
|
1158
|
+
top: 64px;
|
|
1159
|
+
height: 10px;
|
|
1160
|
+
background: #6b4228;
|
|
1161
|
+
box-shadow: 0 4px 0 #3a2414;
|
|
1193
1162
|
}
|
|
1194
1163
|
.inn-bar {
|
|
1195
|
-
|
|
1196
|
-
|
|
1164
|
+
position: absolute;
|
|
1165
|
+
right: 4%;
|
|
1166
|
+
top: 18%;
|
|
1167
|
+
width: 20%;
|
|
1168
|
+
height: 62%;
|
|
1197
1169
|
background: #6b3e22;
|
|
1198
|
-
box-shadow: inset 0 0 0
|
|
1170
|
+
box-shadow: inset 0 0 0 4px #4a2814, 6px 6px 0 #2a160e;
|
|
1199
1171
|
}
|
|
1200
1172
|
.inn-bottles {
|
|
1173
|
+
position: absolute;
|
|
1174
|
+
right: 6%;
|
|
1175
|
+
top: 12%;
|
|
1201
1176
|
display: flex;
|
|
1202
|
-
gap:
|
|
1177
|
+
gap: 6px;
|
|
1203
1178
|
align-items: flex-end;
|
|
1204
|
-
height:
|
|
1179
|
+
height: 28px;
|
|
1180
|
+
z-index: 1;
|
|
1205
1181
|
}
|
|
1206
1182
|
.inn-bottles span {
|
|
1207
|
-
width:
|
|
1208
|
-
height:
|
|
1209
|
-
box-shadow: 0 -
|
|
1183
|
+
width: 7px;
|
|
1184
|
+
height: 18px;
|
|
1185
|
+
box-shadow: 0 -5px 0 -2px #e8e8e8;
|
|
1210
1186
|
}
|
|
1211
|
-
.inn-
|
|
1187
|
+
.inn-table {
|
|
1212
1188
|
position: absolute;
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
display: grid;
|
|
1219
|
-
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
1220
|
-
align-content: start;
|
|
1221
|
-
justify-items: center;
|
|
1222
|
-
gap: 12px 6px;
|
|
1223
|
-
padding: 22px 0 10px;
|
|
1224
|
-
overflow: auto;
|
|
1225
|
-
}
|
|
1226
|
-
.inn-station {
|
|
1227
|
-
position: relative;
|
|
1228
|
-
display: flex;
|
|
1229
|
-
flex-direction: column;
|
|
1230
|
-
align-items: center;
|
|
1231
|
-
width: 88px;
|
|
1232
|
-
z-index: 2;
|
|
1233
|
-
}
|
|
1234
|
-
@media (max-width: 720px) {
|
|
1235
|
-
.inn-actors {
|
|
1236
|
-
left: 8px;
|
|
1237
|
-
right: 8px;
|
|
1238
|
-
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
1239
|
-
}
|
|
1240
|
-
}
|
|
1241
|
-
@media (max-width: 480px) {
|
|
1242
|
-
.inn-actors { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
1243
|
-
}
|
|
1244
|
-
.inn-desk {
|
|
1245
|
-
order: 2;
|
|
1246
|
-
position: relative;
|
|
1247
|
-
width: 72px;
|
|
1248
|
-
height: 20px;
|
|
1249
|
-
margin-top: -8px;
|
|
1250
|
-
background: #8a5a32;
|
|
1251
|
-
box-shadow: 0 3px 0 #6a4020, 0 5px 0 #3a2414, inset 0 2px 0 #b07a48;
|
|
1252
|
-
z-index: 1;
|
|
1189
|
+
width: 56px;
|
|
1190
|
+
height: 36px;
|
|
1191
|
+
background: #7a4a28;
|
|
1192
|
+
box-shadow: 8px 10px 0 -4px #3a2414, inset 0 0 0 3px #5a3218;
|
|
1193
|
+
border-radius: 40% 40% 30% 30%;
|
|
1253
1194
|
}
|
|
1254
|
-
.inn-
|
|
1195
|
+
.inn-table.t1 { left: 10%; top: 28%; }
|
|
1196
|
+
.inn-table.t2 { left: 28%; top: 22%; }
|
|
1197
|
+
.inn-barrel {
|
|
1255
1198
|
position: absolute;
|
|
1256
|
-
left: 50%;
|
|
1257
|
-
bottom: 14px;
|
|
1258
1199
|
width: 28px;
|
|
1259
|
-
height:
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
box-shadow:
|
|
1263
|
-
}
|
|
1264
|
-
.inn-
|
|
1265
|
-
|
|
1200
|
+
height: 32px;
|
|
1201
|
+
background: repeating-linear-gradient(#8a5a32 0 6px, #5a3218 6px 8px);
|
|
1202
|
+
border-radius: 40%;
|
|
1203
|
+
box-shadow: 3px 3px 0 #1a1008;
|
|
1204
|
+
}
|
|
1205
|
+
.inn-barrel.b1 { left: 6%; bottom: 28%; }
|
|
1206
|
+
.inn-barrel.b2 { left: 72%; top: 24%; }
|
|
1207
|
+
.inn-hearth {
|
|
1266
1208
|
position: absolute;
|
|
1267
|
-
|
|
1268
|
-
|
|
1209
|
+
left: 4%;
|
|
1210
|
+
top: 8%;
|
|
1211
|
+
width: 54px;
|
|
1212
|
+
height: 48px;
|
|
1213
|
+
background: #2a1c18;
|
|
1214
|
+
box-shadow: inset 0 0 0 4px #1a100c, inset 0 0 12px #e07020;
|
|
1269
1215
|
}
|
|
1270
|
-
.inn-
|
|
1216
|
+
.inn-actors { position: absolute; inset: 0; z-index: 2; }
|
|
1271
1217
|
.rpg-npc {
|
|
1272
|
-
position:
|
|
1218
|
+
position: absolute;
|
|
1273
1219
|
display: flex;
|
|
1274
1220
|
flex-direction: column;
|
|
1275
1221
|
align-items: center;
|
|
1276
|
-
order: 1;
|
|
1277
1222
|
margin: 0;
|
|
1278
1223
|
padding: 0;
|
|
1279
1224
|
border: 0;
|
|
1280
1225
|
background: transparent;
|
|
1281
1226
|
color: inherit;
|
|
1227
|
+
transform: translate(-50%, -88%);
|
|
1282
1228
|
cursor: pointer;
|
|
1283
1229
|
z-index: 2;
|
|
1284
1230
|
}
|
|
1285
|
-
.rpg-npc
|
|
1286
|
-
|
|
1287
|
-
width: 72px;
|
|
1231
|
+
.rpg-npc canvas {
|
|
1232
|
+
width: 48px;
|
|
1288
1233
|
height: 72px;
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
box-shadow: 2px 3px 0 #0006;
|
|
1293
|
-
}
|
|
1294
|
-
.rpg-npc .npc-bust {
|
|
1295
|
-
object-fit: cover;
|
|
1296
|
-
object-position: center 18%;
|
|
1297
|
-
display: block;
|
|
1298
|
-
}
|
|
1299
|
-
.rpg-npc .npc-blank {
|
|
1300
|
-
display: grid;
|
|
1301
|
-
place-items: center;
|
|
1302
|
-
color: #f0d9a0;
|
|
1303
|
-
font-family: VT323, ui-monospace, monospace;
|
|
1304
|
-
font-size: 28px;
|
|
1305
|
-
line-height: 1;
|
|
1306
|
-
}
|
|
1307
|
-
.rpg-npc.drawing .npc-bust,
|
|
1308
|
-
.rpg-npc.drawing .npc-blank {
|
|
1309
|
-
filter: brightness(1.25) drop-shadow(0 0 6px #f0d060);
|
|
1234
|
+
image-rendering: pixelated;
|
|
1235
|
+
filter: drop-shadow(2px 3px 0 #0008);
|
|
1236
|
+
animation: bob 1.1s steps(2) infinite;
|
|
1310
1237
|
}
|
|
1311
1238
|
.rpg-npc .tag {
|
|
1312
|
-
|
|
1313
|
-
margin-top: 6px;
|
|
1239
|
+
margin-top: 2px;
|
|
1314
1240
|
padding: 1px 5px;
|
|
1315
|
-
background: #
|
|
1316
|
-
color: #
|
|
1241
|
+
background: #000c;
|
|
1242
|
+
color: #f4f0e0;
|
|
1317
1243
|
font-family: VT323, ui-monospace, monospace;
|
|
1318
1244
|
font-size: 15px;
|
|
1319
1245
|
line-height: 1.1;
|
|
1320
1246
|
white-space: nowrap;
|
|
1321
|
-
z-index: 3;
|
|
1322
|
-
}
|
|
1323
|
-
.npc-state {
|
|
1324
|
-
position: absolute;
|
|
1325
|
-
top: 0;
|
|
1326
|
-
left: 50%;
|
|
1327
|
-
z-index: 4;
|
|
1328
|
-
padding: 0 5px;
|
|
1329
|
-
border: 0;
|
|
1330
|
-
background: #f4ead7;
|
|
1331
|
-
color: #1a1410;
|
|
1332
|
-
font-family: VT323, ui-monospace, monospace;
|
|
1333
|
-
font-size: 14px;
|
|
1334
|
-
line-height: 1.2;
|
|
1335
|
-
white-space: nowrap;
|
|
1336
|
-
box-shadow: 2px 2px 0 #1a1410;
|
|
1337
|
-
transform: translate(-50%, calc(-100% - 4px));
|
|
1338
|
-
}
|
|
1339
|
-
.npc-state.live {
|
|
1340
|
-
background: var(--signal);
|
|
1341
|
-
color: #1a1410;
|
|
1342
1247
|
}
|
|
1343
|
-
.rpg-npc:hover .
|
|
1344
|
-
.rpg-npc
|
|
1345
|
-
.rpg-npc.
|
|
1346
|
-
.rpg-npc.on .npc-blank { outline: 2px solid #f0d060; outline-offset: 1px; }
|
|
1347
|
-
.rpg-npc.vacant .npc-blank { opacity: 0.55; }
|
|
1248
|
+
.rpg-npc:hover canvas { filter: brightness(1.18) drop-shadow(0 0 6px #f0d060); }
|
|
1249
|
+
.rpg-npc.on canvas { outline: 2px solid #f0d060; outline-offset: 1px; }
|
|
1250
|
+
.rpg-npc.vacant canvas { opacity: 0.35; }
|
|
1348
1251
|
.rpg-npc.vacant .tag { color: #f0d060; }
|
|
1349
1252
|
.rpg-exit {
|
|
1350
1253
|
position: absolute;
|
|
@@ -1361,47 +1264,26 @@ body.bar-page .rpg-screen {
|
|
|
1361
1264
|
cursor: pointer;
|
|
1362
1265
|
}
|
|
1363
1266
|
.rpg-exit:hover { background: #2a3460; }
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1267
|
+
.rpg-npc:hover { background: transparent; }
|
|
1268
|
+
.rpg-exit:active,
|
|
1269
|
+
.rpg-npc:active {
|
|
1270
|
+
transform: none;
|
|
1368
1271
|
}
|
|
1369
|
-
body.bar-page .rpg-exit:hover { background: #e8dcc4; }
|
|
1370
1272
|
.rpg-dialog {
|
|
1371
|
-
|
|
1372
|
-
|
|
1273
|
+
position: absolute;
|
|
1274
|
+
left: 3.5%;
|
|
1275
|
+
right: 3.5%;
|
|
1276
|
+
bottom: 3%;
|
|
1373
1277
|
z-index: 5;
|
|
1374
|
-
margin: 8px 12px 10px;
|
|
1375
1278
|
padding: 3px;
|
|
1376
1279
|
background: #08080f;
|
|
1377
1280
|
box-shadow: 0 0 0 2px #c9a227, inset 0 0 0 2px #3a4a8a;
|
|
1378
1281
|
}
|
|
1379
|
-
body.bar-page .rpg-dialog {
|
|
1380
|
-
background: #1a1410;
|
|
1381
|
-
box-shadow: 0 0 0 3px #1a1410, 4px 4px 0 #1a1410;
|
|
1382
|
-
}
|
|
1383
1282
|
.rpg-dialog-inner {
|
|
1384
|
-
display: flex;
|
|
1385
|
-
align-items: flex-start;
|
|
1386
|
-
gap: 10px;
|
|
1387
1283
|
min-height: 92px;
|
|
1388
1284
|
padding: 10px 14px 8px;
|
|
1389
1285
|
background: linear-gradient(#2a3668, #1a2248 55%, #141a3a);
|
|
1390
1286
|
}
|
|
1391
|
-
.rpg-face {
|
|
1392
|
-
flex: none;
|
|
1393
|
-
width: 56px;
|
|
1394
|
-
height: 56px;
|
|
1395
|
-
object-fit: cover;
|
|
1396
|
-
object-position: center 18%;
|
|
1397
|
-
border: 3px solid #1a1410;
|
|
1398
|
-
background: #2a2118;
|
|
1399
|
-
}
|
|
1400
|
-
.rpg-face[hidden] { display: none; }
|
|
1401
|
-
.rpg-copy { min-width: 0; flex: 1; }
|
|
1402
|
-
body.bar-page .rpg-dialog-inner {
|
|
1403
|
-
background: #f4ead7;
|
|
1404
|
-
}
|
|
1405
1287
|
.rpg-name {
|
|
1406
1288
|
margin: 0 0 6px;
|
|
1407
1289
|
color: #f0d060;
|
|
@@ -1416,44 +1298,31 @@ body.bar-page .rpg-dialog-inner {
|
|
|
1416
1298
|
font-family: VT323, ui-monospace, monospace;
|
|
1417
1299
|
font-size: 22px;
|
|
1418
1300
|
line-height: 1.2;
|
|
1419
|
-
overflow-wrap: anywhere;
|
|
1420
1301
|
}
|
|
1421
|
-
body.bar-page .rpg-name { color: #6b4228; }
|
|
1422
|
-
body.bar-page .rpg-line { color: #1a1410; }
|
|
1423
1302
|
.rpg-acts {
|
|
1424
1303
|
display: flex;
|
|
1425
|
-
flex-wrap: wrap;
|
|
1426
1304
|
gap: 8px;
|
|
1427
1305
|
margin-top: 8px;
|
|
1428
1306
|
min-height: 22px;
|
|
1429
1307
|
}
|
|
1430
1308
|
.rpg-acts a,
|
|
1431
1309
|
.rpg-acts button {
|
|
1432
|
-
appearance: none;
|
|
1433
1310
|
margin: 0;
|
|
1434
1311
|
padding: 3px 8px;
|
|
1435
1312
|
border: 2px solid #c9a227;
|
|
1436
|
-
border-radius: 0;
|
|
1437
1313
|
background: #141a3a;
|
|
1438
1314
|
color: #f4f0e0;
|
|
1439
1315
|
font-family: VT323, ui-monospace, monospace;
|
|
1440
1316
|
font-size: 18px;
|
|
1441
|
-
font-weight: 400;
|
|
1442
|
-
line-height: 1.2;
|
|
1443
1317
|
text-decoration: none;
|
|
1444
|
-
box-shadow: none;
|
|
1445
1318
|
cursor: pointer;
|
|
1446
1319
|
}
|
|
1447
1320
|
.rpg-acts a:hover,
|
|
1448
1321
|
.rpg-acts button:hover { background: #2a3460; text-decoration: none; }
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
background: #f4ead7;
|
|
1453
|
-
color: #1a1410;
|
|
1322
|
+
.rpg-acts a:active,
|
|
1323
|
+
.rpg-acts button:active {
|
|
1324
|
+
transform: none;
|
|
1454
1325
|
}
|
|
1455
|
-
body.bar-page .rpg-acts a:hover,
|
|
1456
|
-
body.bar-page .rpg-acts button:hover { background: #e8dcc4; }
|
|
1457
1326
|
|
|
1458
1327
|
body.office-page {
|
|
1459
1328
|
background: #1a1714;
|
|
@@ -1575,7 +1444,7 @@ body.office-page {
|
|
|
1575
1444
|
inset 0 2px 0 #b07a48;
|
|
1576
1445
|
position: relative;
|
|
1577
1446
|
z-index: 2;
|
|
1578
|
-
margin-top: -
|
|
1447
|
+
margin-top: -28px;
|
|
1579
1448
|
}
|
|
1580
1449
|
.monitor {
|
|
1581
1450
|
position: absolute;
|
|
@@ -1594,8 +1463,8 @@ body.office-page {
|
|
|
1594
1463
|
background: repeating-linear-gradient(#7ec8e8 0 2px, #4aa3c8 2px 4px);
|
|
1595
1464
|
}
|
|
1596
1465
|
.buddy {
|
|
1597
|
-
width:
|
|
1598
|
-
height:
|
|
1466
|
+
width: 64px;
|
|
1467
|
+
height: 96px;
|
|
1599
1468
|
position: relative;
|
|
1600
1469
|
z-index: 1;
|
|
1601
1470
|
image-rendering: pixelated;
|
|
@@ -1676,3 +1545,24 @@ body.office-page {
|
|
|
1676
1545
|
}
|
|
1677
1546
|
.nook { flex-direction: row; justify-content: center; gap: 2rem; min-height: 64px; }
|
|
1678
1547
|
}
|
|
1548
|
+
|
|
1549
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1550
|
+
button,
|
|
1551
|
+
.chip,
|
|
1552
|
+
.mini-tag,
|
|
1553
|
+
a.btn,
|
|
1554
|
+
.key-tab,
|
|
1555
|
+
.preset-grid button,
|
|
1556
|
+
.locale-switch button {
|
|
1557
|
+
transition: none;
|
|
1558
|
+
}
|
|
1559
|
+
button:active:not(:disabled),
|
|
1560
|
+
.chip:active,
|
|
1561
|
+
.mini-tag:active,
|
|
1562
|
+
a.btn:active,
|
|
1563
|
+
.key-tab:active,
|
|
1564
|
+
.preset-grid button:active,
|
|
1565
|
+
.locale-switch button:active {
|
|
1566
|
+
transform: none;
|
|
1567
|
+
}
|
|
1568
|
+
}
|
|
@@ -91,12 +91,7 @@
|
|
|
91
91
|
return;
|
|
92
92
|
}
|
|
93
93
|
const button = document.getElementById("ai-generate");
|
|
94
|
-
if (button.disabled || button.getAttribute("aria-busy") === "true") return;
|
|
95
94
|
button.disabled = true;
|
|
96
|
-
button.setAttribute("aria-busy", "true");
|
|
97
|
-
button.classList.add("is-busy");
|
|
98
|
-
const idle = button.textContent;
|
|
99
|
-
button.textContent = t("studio.generating");
|
|
100
95
|
try {
|
|
101
96
|
const response = await fetch("/generate", {
|
|
102
97
|
method: "POST",
|
|
@@ -120,9 +115,6 @@
|
|
|
120
115
|
setFlash("error", err.message);
|
|
121
116
|
} finally {
|
|
122
117
|
button.disabled = false;
|
|
123
|
-
button.removeAttribute("aria-busy");
|
|
124
|
-
button.classList.remove("is-busy");
|
|
125
|
-
button.textContent = idle;
|
|
126
118
|
}
|
|
127
119
|
});
|
|
128
120
|
document.getElementById("ai-save").addEventListener("click", async () => {
|
package/src/router.ts
CHANGED
|
@@ -18,7 +18,6 @@ import {
|
|
|
18
18
|
setChannelMemory,
|
|
19
19
|
generateKind,
|
|
20
20
|
pickBotSkills,
|
|
21
|
-
generateBotLook,
|
|
22
21
|
getBotDetail,
|
|
23
22
|
getLiveTurn,
|
|
24
23
|
abortLiveTurn,
|
|
@@ -78,7 +77,6 @@ const PAGES: Record<string, { file: string; type: string }> = {
|
|
|
78
77
|
"/chat.css": { file: "chat.css", type: "text/css; charset=utf-8" },
|
|
79
78
|
"/md.js": { file: "md.js", type: "text/javascript; charset=utf-8" },
|
|
80
79
|
"/i18n.js": { file: "i18n.js", type: "text/javascript; charset=utf-8" },
|
|
81
|
-
"/buddy.js": { file: "buddy.js", type: "text/javascript; charset=utf-8" },
|
|
82
80
|
"/favicon.ico": { file: "favicon.ico", type: "image/x-icon" },
|
|
83
81
|
"/favicon.svg": { file: "favicon.svg", type: "image/svg+xml" },
|
|
84
82
|
"/favicon-16.svg": { file: "favicon-16.svg", type: "image/svg+xml" },
|
|
@@ -893,12 +891,6 @@ export async function handleRequest(
|
|
|
893
891
|
return;
|
|
894
892
|
}
|
|
895
893
|
|
|
896
|
-
const lookId = path.match(/^\/bots\/([^/]+)\/look$/)?.[1];
|
|
897
|
-
if (lookId && method === "POST") {
|
|
898
|
-
json(res, 200, await generateBotLook(store, decodeURIComponent(lookId), env));
|
|
899
|
-
return;
|
|
900
|
-
}
|
|
901
|
-
|
|
902
894
|
const botId = path.match(/^\/bots\/([^/]+)$/)?.[1];
|
|
903
895
|
if (botId && method === "GET") {
|
|
904
896
|
json(res, 200, getBotDetail(store, botId));
|
|
@@ -914,9 +906,6 @@ export async function handleRequest(
|
|
|
914
906
|
name: str(body, "name") || undefined,
|
|
915
907
|
handle: str(body, "handle") || undefined,
|
|
916
908
|
oneLiner: str(body, "oneLiner") || undefined,
|
|
917
|
-
...(Object.hasOwn(body, "portrait")
|
|
918
|
-
? { portrait: body.portrait == null ? null : str(body, "portrait") }
|
|
919
|
-
: {}),
|
|
920
909
|
skillIds: Object.hasOwn(body, "skillIds")
|
|
921
910
|
? strList(body, "skillIds")
|
|
922
911
|
: undefined,
|