agent-loft 0.2.28 → 0.2.30

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.
Files changed (45) hide show
  1. package/package.json +1 -1
  2. package/src/channels/web/server.ts +1 -1
  3. package/web/app.js +8 -5555
  4. package/web/css/base.css +291 -0
  5. package/web/css/composer.css +506 -0
  6. package/web/css/loader.css +196 -0
  7. package/web/css/messages.css +734 -0
  8. package/web/css/mobile.css +100 -0
  9. package/web/css/overlay.css +437 -0
  10. package/web/css/schedule.css +93 -0
  11. package/web/css/settings.css +335 -0
  12. package/web/css/sidebar.css +593 -0
  13. package/web/css/topbar.css +205 -0
  14. package/web/index.html +11 -1
  15. package/web/lib/api.js +26 -0
  16. package/web/lib/dom.js +101 -0
  17. package/web/lib/markdown.js +52 -0
  18. package/web/lib/overlay.js +144 -0
  19. package/web/lib/push.js +70 -0
  20. package/web/lib/time.js +60 -0
  21. package/web/lib/ws.js +232 -0
  22. package/web/settings/agents.js +210 -0
  23. package/web/settings/commands.js +411 -0
  24. package/web/settings/common.js +42 -0
  25. package/web/settings/feishu.js +181 -0
  26. package/web/settings/general.js +184 -0
  27. package/web/settings/index.js +63 -0
  28. package/web/settings/memory.js +366 -0
  29. package/web/settings/notify.js +80 -0
  30. package/web/settings/security.js +188 -0
  31. package/web/settings/users.js +189 -0
  32. package/web/state.js +44 -0
  33. package/web/views/auth.js +61 -0
  34. package/web/views/composer.js +324 -0
  35. package/web/views/conv-actions.js +404 -0
  36. package/web/views/interaction.js +140 -0
  37. package/web/views/layout.js +186 -0
  38. package/web/views/messages.js +510 -0
  39. package/web/views/quota.js +145 -0
  40. package/web/views/schedule.js +120 -0
  41. package/web/views/sidebar.js +455 -0
  42. package/web/views/slash.js +185 -0
  43. package/web/views/topbar.js +394 -0
  44. package/web/views/voice.js +189 -0
  45. package/web/style.css +0 -3500
@@ -0,0 +1,335 @@
1
+ /* ---------- 设置 ---------- */
2
+
3
+ .settings {
4
+ display: flex;
5
+ min-height: 0;
6
+ flex: 1;
7
+ }
8
+
9
+ .settings-nav {
10
+ width: 160px;
11
+ border-right: 1px solid var(--border);
12
+ padding: 8px;
13
+ display: flex;
14
+ flex-direction: column;
15
+ gap: 2px;
16
+ flex-shrink: 0;
17
+ }
18
+
19
+ .settings-nav button {
20
+ text-align: left;
21
+ padding: 8px 10px;
22
+ border-radius: 8px;
23
+ font-size: 14px;
24
+ }
25
+
26
+ .settings-nav button.on {
27
+ background: var(--bg-hover);
28
+ font-weight: 600;
29
+ }
30
+
31
+ .settings-body {
32
+ flex: 1;
33
+ overflow-y: auto;
34
+ padding: 16px;
35
+ display: flex;
36
+ flex-direction: column;
37
+ gap: 14px;
38
+ }
39
+
40
+ .section {
41
+ border: 1px solid var(--border);
42
+ border-radius: 12px;
43
+ padding: 14px;
44
+ display: flex;
45
+ flex-direction: column;
46
+ gap: 12px;
47
+ }
48
+
49
+ .section h4 {
50
+ margin: 0;
51
+ font-size: 15px;
52
+ display: flex;
53
+ align-items: center;
54
+ gap: 8px;
55
+ }
56
+
57
+ .section h4 .grow {
58
+ flex: 1;
59
+ }
60
+
61
+ .row {
62
+ display: flex;
63
+ gap: 8px;
64
+ align-items: center;
65
+ flex-wrap: wrap;
66
+ }
67
+
68
+ .check {
69
+ display: inline-flex;
70
+ align-items: center;
71
+ gap: 6px;
72
+ font-size: 14px;
73
+ cursor: pointer;
74
+ }
75
+
76
+ .status-tag {
77
+ font-size: 12px;
78
+ padding: 1px 8px;
79
+ border-radius: 999px;
80
+ background: var(--bg-soft);
81
+ color: var(--fg-soft);
82
+ font-weight: 400;
83
+ }
84
+
85
+ .status-tag.ok {
86
+ color: var(--ok);
87
+ }
88
+
89
+ .status-tag.bad {
90
+ color: var(--danger);
91
+ }
92
+
93
+ .qr {
94
+ align-self: center;
95
+ background: #fff;
96
+ padding: 8px;
97
+ border-radius: 10px;
98
+ }
99
+
100
+ .muted {
101
+ color: var(--fg-faint);
102
+ font-size: 13px;
103
+ }
104
+
105
+ /* ---------- 设置 → 命令 ---------- */
106
+
107
+ .cmd-list {
108
+ display: flex;
109
+ flex-direction: column;
110
+ gap: 6px;
111
+ max-height: 50vh;
112
+ overflow-y: auto;
113
+ }
114
+
115
+ .cmd-row {
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 8px;
119
+ padding: 6px 8px;
120
+ border: 1px solid var(--border);
121
+ border-radius: 10px;
122
+ background: var(--bg-input);
123
+ }
124
+
125
+ .cmd-row.off {
126
+ opacity: 0.5;
127
+ }
128
+
129
+ .cmd-row.dragging {
130
+ border-color: var(--accent);
131
+ }
132
+
133
+ .cmd-row .grow {
134
+ flex: 1;
135
+ min-width: 0;
136
+ }
137
+
138
+ .cmd-row .t {
139
+ overflow: hidden;
140
+ text-overflow: ellipsis;
141
+ white-space: nowrap;
142
+ }
143
+
144
+ .cmd-row .s {
145
+ font-size: 12px;
146
+ color: var(--fg-faint);
147
+ overflow: hidden;
148
+ text-overflow: ellipsis;
149
+ white-space: nowrap;
150
+ }
151
+
152
+ .cmd-grip {
153
+ cursor: grab;
154
+ color: var(--fg-faint);
155
+ user-select: none;
156
+ letter-spacing: -2px;
157
+ }
158
+
159
+ .cmd-row input[type="checkbox"] {
160
+ width: auto;
161
+ }
162
+
163
+ .cmd-row .icon-btn svg {
164
+ width: 16px;
165
+ height: 16px;
166
+ }
167
+
168
+ .cmd-row .icon-btn.danger:hover {
169
+ color: var(--danger);
170
+ }
171
+
172
+ .cmd-row .badge.custom {
173
+ background: color-mix(in srgb, var(--accent) 12%, transparent);
174
+ color: var(--accent);
175
+ }
176
+
177
+ /* 筛选框 + 「添加命令」按钮一行 */
178
+ .cmd-tools {
179
+ flex-wrap: nowrap;
180
+ }
181
+
182
+ .cmd-tools .input {
183
+ flex: 1;
184
+ min-width: 0;
185
+ }
186
+
187
+ .cmd-tools .btn {
188
+ flex-shrink: 0;
189
+ display: inline-flex;
190
+ align-items: center;
191
+ gap: 4px;
192
+ }
193
+
194
+ .cmd-tools .btn svg {
195
+ width: 16px;
196
+ height: 16px;
197
+ }
198
+
199
+ /* 添加 / 编辑命令:命令名前面固定一个「/」 */
200
+ .cmd-name-input {
201
+ display: flex;
202
+ align-items: center;
203
+ gap: 6px;
204
+ }
205
+
206
+ .cmd-name-input > span {
207
+ color: var(--fg-faint);
208
+ font-family: var(--mono);
209
+ }
210
+
211
+ .field .cmd-name-input input {
212
+ flex: 1;
213
+ font-family: var(--mono);
214
+ }
215
+
216
+ .brand-icon {
217
+ display: inline-grid;
218
+ width: 18px;
219
+ height: 18px;
220
+ flex-shrink: 0;
221
+ }
222
+
223
+ .brand-icon svg {
224
+ width: 100%;
225
+ height: 100%;
226
+ }
227
+
228
+ /* 设置 → Agent:输入框可选模型 */
229
+ .model-checks {
230
+ display: flex;
231
+ flex-direction: column;
232
+ gap: 2px;
233
+ border: 1px solid var(--border);
234
+ border-radius: 10px;
235
+ padding: 6px;
236
+ }
237
+
238
+ .model-checks > small {
239
+ padding: 4px 6px;
240
+ }
241
+
242
+ .model-check {
243
+ display: flex;
244
+ align-items: center;
245
+ gap: 10px;
246
+ padding: 6px;
247
+ border-radius: 8px;
248
+ cursor: pointer;
249
+ font-size: 14px;
250
+ }
251
+
252
+ .model-check:hover {
253
+ background: var(--bg-hover);
254
+ }
255
+
256
+ .field .model-check input[type="checkbox"] {
257
+ width: auto;
258
+ padding: 0;
259
+ flex-shrink: 0;
260
+ }
261
+
262
+ .model-check .t {
263
+ white-space: nowrap;
264
+ }
265
+
266
+ .model-check .s {
267
+ margin-left: auto;
268
+ font-size: 12px;
269
+ color: var(--fg-faint);
270
+ overflow: hidden;
271
+ text-overflow: ellipsis;
272
+ white-space: nowrap;
273
+ }
274
+
275
+ /* 设置 → Agent → 运行环境 */
276
+ .health-row {
277
+ display: flex;
278
+ flex-direction: column;
279
+ gap: 6px;
280
+ }
281
+ .health-row + .health-row {
282
+ border-top: 1px solid var(--border);
283
+ padding-top: 12px;
284
+ }
285
+ .health-head {
286
+ display: flex;
287
+ align-items: center;
288
+ gap: 8px;
289
+ }
290
+ .health-dot {
291
+ width: 8px;
292
+ height: 8px;
293
+ border-radius: 50%;
294
+ background: var(--danger);
295
+ flex: none;
296
+ }
297
+ .health-dot.ok {
298
+ background: var(--ok);
299
+ }
300
+ .health-state {
301
+ color: var(--fg-soft);
302
+ }
303
+ .health-off,
304
+ .health-meta {
305
+ color: var(--fg-faint);
306
+ font-size: 12px;
307
+ }
308
+ .health-fix {
309
+ display: flex;
310
+ flex-direction: column;
311
+ gap: 6px;
312
+ padding: 10px 12px;
313
+ border-radius: 10px;
314
+ background: var(--warn-bg);
315
+ border: 1px solid var(--warn-border);
316
+ font-size: 13px;
317
+ }
318
+ .health-fix small {
319
+ color: var(--fg-soft);
320
+ }
321
+ .health-cmd {
322
+ display: flex;
323
+ align-items: center;
324
+ gap: 8px;
325
+ }
326
+ .health-cmd code {
327
+ flex: 1;
328
+ min-width: 0;
329
+ overflow-x: auto;
330
+ white-space: nowrap;
331
+ padding: 5px 8px;
332
+ border-radius: 6px;
333
+ background: var(--code-bg);
334
+ font-size: 12px;
335
+ }