@agent-link/server 0.1.187 → 0.1.189

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 (76) hide show
  1. package/dist/auth-manager.d.ts +36 -0
  2. package/dist/auth-manager.js +96 -0
  3. package/dist/auth-manager.js.map +1 -0
  4. package/dist/http.d.ts +4 -0
  5. package/dist/http.js +85 -0
  6. package/dist/http.js.map +1 -0
  7. package/dist/index.js +5 -84
  8. package/dist/index.js.map +1 -1
  9. package/dist/message-relay.d.ts +17 -0
  10. package/dist/message-relay.js +23 -0
  11. package/dist/message-relay.js.map +1 -0
  12. package/dist/session-manager.d.ts +44 -0
  13. package/dist/session-manager.js +83 -0
  14. package/dist/session-manager.js.map +1 -0
  15. package/dist/ws-agent.js +19 -27
  16. package/dist/ws-agent.js.map +1 -1
  17. package/dist/ws-client.js +31 -37
  18. package/dist/ws-client.js.map +1 -1
  19. package/package.json +3 -3
  20. package/web/dist/assets/index-DIO7Hox0.js +320 -0
  21. package/web/dist/assets/index-DIO7Hox0.js.map +1 -0
  22. package/web/dist/assets/index-Y1FN_mFe.css +1 -0
  23. package/web/{index.html → dist/index.html} +2 -19
  24. package/dist/auth.d.ts +0 -13
  25. package/dist/auth.js +0 -65
  26. package/dist/auth.js.map +0 -1
  27. package/dist/context.d.ts +0 -52
  28. package/dist/context.js +0 -60
  29. package/dist/context.js.map +0 -1
  30. package/web/app.js +0 -2881
  31. package/web/css/ask-question.css +0 -333
  32. package/web/css/base.css +0 -270
  33. package/web/css/btw.css +0 -148
  34. package/web/css/chat.css +0 -176
  35. package/web/css/file-browser.css +0 -499
  36. package/web/css/input.css +0 -671
  37. package/web/css/loop.css +0 -674
  38. package/web/css/markdown.css +0 -169
  39. package/web/css/responsive.css +0 -314
  40. package/web/css/sidebar.css +0 -593
  41. package/web/css/team.css +0 -1277
  42. package/web/css/tools.css +0 -327
  43. package/web/encryption.js +0 -56
  44. package/web/modules/appHelpers.js +0 -100
  45. package/web/modules/askQuestion.js +0 -63
  46. package/web/modules/backgroundRouting.js +0 -269
  47. package/web/modules/connection.js +0 -731
  48. package/web/modules/fileAttachments.js +0 -125
  49. package/web/modules/fileBrowser.js +0 -398
  50. package/web/modules/filePreview.js +0 -213
  51. package/web/modules/i18n.js +0 -101
  52. package/web/modules/loop.js +0 -338
  53. package/web/modules/loopTemplates.js +0 -110
  54. package/web/modules/markdown.js +0 -83
  55. package/web/modules/messageHelpers.js +0 -206
  56. package/web/modules/sidebar.js +0 -402
  57. package/web/modules/streaming.js +0 -116
  58. package/web/modules/team.js +0 -396
  59. package/web/modules/teamTemplates.js +0 -360
  60. package/web/vendor/highlight.min.js +0 -1213
  61. package/web/vendor/marked.min.js +0 -6
  62. package/web/vendor/nacl-fast.min.js +0 -1
  63. package/web/vendor/nacl-util.min.js +0 -1
  64. package/web/vendor/pako.min.js +0 -2
  65. package/web/vendor/vue.global.prod.js +0 -13
  66. /package/web/{favicon.svg → dist/favicon.svg} +0 -0
  67. /package/web/{images → dist/images}/chat-iPad.webp +0 -0
  68. /package/web/{images → dist/images}/chat-iPhone.webp +0 -0
  69. /package/web/{images → dist/images}/loop-iPad.webp +0 -0
  70. /package/web/{images → dist/images}/team-iPad.webp +0 -0
  71. /package/web/{landing.html → dist/landing.html} +0 -0
  72. /package/web/{landing.zh.html → dist/landing.zh.html} +0 -0
  73. /package/web/{locales → dist/locales}/en.json +0 -0
  74. /package/web/{locales → dist/locales}/zh.json +0 -0
  75. /package/web/{vendor → dist/vendor}/github-dark.min.css +0 -0
  76. /package/web/{vendor → dist/vendor}/github.min.css +0 -0
package/web/css/team.css DELETED
@@ -1,1277 +0,0 @@
1
- /* ══════════════════════════════════════════
2
- Team Mode
3
- ══════════════════════════════════════════ */
4
-
5
- /* ── Team mode toggle ── */
6
- .team-mode-toggle {
7
- display: flex;
8
- gap: 2px;
9
- background: var(--bg-tertiary);
10
- border-radius: 6px;
11
- padding: 2px;
12
- margin-left: 8px;
13
- }
14
-
15
- .team-mode-btn {
16
- padding: 4px 14px;
17
- border: none;
18
- border-radius: 4px;
19
- background: none;
20
- color: var(--text-secondary);
21
- font-size: 0.75rem;
22
- font-weight: 500;
23
- cursor: pointer;
24
- transition: color 0.15s, background 0.15s, box-shadow 0.15s;
25
- }
26
-
27
- .team-mode-btn.active {
28
- background: var(--bg-secondary);
29
- color: var(--text-primary);
30
- box-shadow: 0 1px 2px rgba(0,0,0,0.15);
31
- }
32
-
33
- .team-mode-btn:hover:not(.active) {
34
- color: var(--text-primary);
35
- }
36
-
37
- .team-mode-select {
38
- display: none;
39
- padding: 4px 8px;
40
- border: 1px solid var(--border);
41
- border-radius: 6px;
42
- background: var(--bg-tertiary);
43
- color: var(--text-primary);
44
- font-size: 0.75rem;
45
- font-weight: 500;
46
- cursor: pointer;
47
- }
48
-
49
- /* ── Team create panel ── */
50
- .team-create-panel {
51
- flex: 1;
52
- display: flex;
53
- align-items: flex-start;
54
- justify-content: center;
55
- padding: 2rem;
56
- overflow-y: auto;
57
- }
58
-
59
- .team-create-inner {
60
- max-width: 560px;
61
- width: 100%;
62
- }
63
-
64
- .team-create-header {
65
- display: flex;
66
- align-items: center;
67
- gap: 10px;
68
- margin-bottom: 8px;
69
- color: var(--text-primary);
70
- }
71
-
72
- .team-create-header h2 {
73
- font-size: 1.25rem;
74
- font-weight: 600;
75
- }
76
-
77
- .team-create-desc {
78
- font-size: 0.85rem;
79
- color: var(--text-secondary);
80
- margin-bottom: 16px;
81
- line-height: 1.4;
82
- }
83
-
84
- /* ── Template selector ── */
85
- .team-tpl-section {
86
- margin-bottom: 14px;
87
- }
88
- .team-tpl-label {
89
- display: block;
90
- font-size: 0.8rem;
91
- font-weight: 600;
92
- color: var(--text-secondary);
93
- margin-bottom: 6px;
94
- text-transform: uppercase;
95
- letter-spacing: 0.03em;
96
- }
97
- .team-tpl-select {
98
- width: 100%;
99
- padding: 8px 10px;
100
- border: 1px solid var(--border);
101
- border-radius: 6px;
102
- background: var(--bg-secondary);
103
- color: var(--text-primary);
104
- font-size: 0.9rem;
105
- font-family: inherit;
106
- cursor: pointer;
107
- appearance: auto;
108
- }
109
- .team-tpl-select:focus {
110
- outline: none;
111
- border-color: var(--accent);
112
- }
113
- .team-tpl-desc {
114
- display: block;
115
- font-size: 0.78rem;
116
- color: var(--text-secondary);
117
- margin-top: 4px;
118
- }
119
-
120
- /* ── Collapsible lead prompt ── */
121
- .team-lead-prompt-section {
122
- margin-bottom: 14px;
123
- border: 1px solid var(--border);
124
- border-radius: 8px;
125
- overflow: hidden;
126
- }
127
- .team-lead-prompt-header {
128
- display: flex;
129
- align-items: center;
130
- gap: 6px;
131
- padding: 8px 10px;
132
- cursor: pointer;
133
- user-select: none;
134
- background: var(--bg-secondary);
135
- }
136
- .team-lead-prompt-header:hover {
137
- background: var(--bg-hover);
138
- }
139
- .team-lead-prompt-arrow {
140
- transition: transform 0.15s;
141
- flex-shrink: 0;
142
- color: var(--text-secondary);
143
- }
144
- .team-lead-prompt-arrow.expanded {
145
- transform: rotate(90deg);
146
- }
147
- .team-lead-prompt-title {
148
- font-size: 0.8rem;
149
- font-weight: 600;
150
- color: var(--text-secondary);
151
- text-transform: uppercase;
152
- letter-spacing: 0.03em;
153
- flex-shrink: 0;
154
- }
155
- .team-lead-prompt-preview {
156
- font-size: 0.78rem;
157
- color: var(--text-tertiary, #666);
158
- overflow: hidden;
159
- text-overflow: ellipsis;
160
- white-space: nowrap;
161
- margin-left: 8px;
162
- }
163
- .team-lead-prompt-body {
164
- padding: 8px 10px;
165
- border-top: 1px solid var(--border);
166
- }
167
- .team-lead-prompt-textarea {
168
- width: 100%;
169
- padding: 10px;
170
- border: 1px solid var(--border);
171
- border-radius: 6px;
172
- background: var(--bg-primary);
173
- color: var(--text-primary);
174
- font-size: 0.82rem;
175
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
176
- resize: vertical;
177
- min-height: 160px;
178
- line-height: 1.5;
179
- }
180
- .team-lead-prompt-textarea:focus {
181
- outline: none;
182
- border-color: var(--accent);
183
- }
184
- .team-lead-prompt-actions {
185
- display: flex;
186
- justify-content: flex-end;
187
- margin-top: 6px;
188
- }
189
- .team-lead-prompt-reset {
190
- padding: 4px 12px;
191
- border: 1px solid var(--border);
192
- border-radius: 4px;
193
- background: transparent;
194
- color: var(--text-secondary);
195
- font-size: 0.78rem;
196
- cursor: pointer;
197
- transition: color 0.15s, border-color 0.15s;
198
- }
199
- .team-lead-prompt-reset:hover {
200
- color: var(--text-primary);
201
- border-color: var(--text-secondary);
202
- }
203
-
204
- .team-create-textarea {
205
- width: 100%;
206
- padding: 12px;
207
- border: 1px solid var(--border);
208
- border-radius: 8px;
209
- background: var(--bg-secondary);
210
- color: var(--text-primary);
211
- font-size: 0.9rem;
212
- font-family: inherit;
213
- resize: vertical;
214
- min-height: 100px;
215
- line-height: 1.4;
216
- }
217
-
218
- .team-create-textarea:focus {
219
- outline: none;
220
- border-color: var(--accent);
221
- }
222
-
223
- .team-create-actions {
224
- display: flex;
225
- gap: 8px;
226
- margin-top: 12px;
227
- }
228
-
229
- .team-create-launch {
230
- display: flex;
231
- align-items: center;
232
- gap: 6px;
233
- padding: 8px 18px;
234
- border: none;
235
- border-radius: 6px;
236
- background: var(--accent);
237
- color: #fff;
238
- font-size: 0.85rem;
239
- font-weight: 500;
240
- cursor: pointer;
241
- transition: background 0.15s;
242
- }
243
-
244
- .team-create-launch:hover:not(:disabled) {
245
- background: var(--accent-hover);
246
- }
247
-
248
- .team-create-launch:disabled {
249
- opacity: 0.4;
250
- cursor: not-allowed;
251
- }
252
-
253
- .team-create-cancel {
254
- padding: 8px 18px;
255
- border: 1px solid var(--border);
256
- border-radius: 6px;
257
- background: none;
258
- color: var(--text-secondary);
259
- font-size: 0.85rem;
260
- cursor: pointer;
261
- transition: color 0.15s, border-color 0.15s;
262
- }
263
-
264
- .team-create-cancel:hover {
265
- color: var(--text-primary);
266
- border-color: var(--text-secondary);
267
- }
268
-
269
- /* ── Example instructions ── */
270
- .team-examples-section {
271
- margin-top: 20px;
272
- }
273
-
274
- .team-examples-header {
275
- font-size: 0.78rem;
276
- font-weight: 600;
277
- color: var(--text-secondary);
278
- text-transform: uppercase;
279
- letter-spacing: 0.04em;
280
- margin-bottom: 8px;
281
- }
282
-
283
- .team-examples-list {
284
- display: flex;
285
- flex-direction: column;
286
- gap: 8px;
287
- }
288
-
289
- .team-example-card {
290
- display: flex;
291
- align-items: flex-start;
292
- gap: 12px;
293
- padding: 14px 16px;
294
- border: 1px solid var(--border);
295
- border-radius: 10px;
296
- transition: border-color 0.15s, background 0.15s;
297
- background: linear-gradient(135deg, rgba(255,255,255,0.02) 0%, transparent 100%);
298
- }
299
-
300
- .team-example-card:hover {
301
- border-color: rgba(59,130,246,0.3);
302
- background: linear-gradient(135deg, rgba(59,130,246,0.06) 0%, rgba(59,130,246,0.02) 100%);
303
- }
304
-
305
- .team-example-icon {
306
- flex-shrink: 0;
307
- width: 36px;
308
- height: 36px;
309
- display: flex;
310
- align-items: center;
311
- justify-content: center;
312
- border-radius: 8px;
313
- background: rgba(59,130,246,0.1);
314
- color: var(--accent);
315
- margin-top: 1px;
316
- }
317
-
318
- .team-example-card:nth-child(2) .team-example-icon {
319
- background: rgba(16,185,129,0.1);
320
- color: #10B981;
321
- }
322
-
323
- .team-example-card:nth-child(3) .team-example-icon {
324
- background: rgba(139,92,246,0.1);
325
- color: #8B5CF6;
326
- }
327
-
328
- .team-example-body {
329
- flex: 1;
330
- min-width: 0;
331
- }
332
-
333
- .team-example-title {
334
- font-size: 0.8rem;
335
- font-weight: 600;
336
- color: var(--text-primary);
337
- margin-bottom: 4px;
338
- }
339
-
340
- .team-example-text {
341
- font-size: 0.74rem;
342
- color: var(--text-secondary);
343
- line-height: 1.5;
344
- }
345
-
346
- .team-example-try {
347
- flex-shrink: 0;
348
- align-self: center;
349
- padding: 6px 16px;
350
- font-size: 0.74rem;
351
- font-weight: 500;
352
- color: var(--accent);
353
- background: transparent;
354
- border: 1px solid var(--accent);
355
- border-radius: 6px;
356
- cursor: pointer;
357
- transition: color 0.15s, background 0.15s;
358
- white-space: nowrap;
359
- }
360
-
361
- .team-example-try:hover {
362
- background: var(--accent);
363
- color: #fff;
364
- }
365
-
366
- /* ── Historical teams in create panel ── */
367
- .team-history-section {
368
- margin-top: 20px;
369
- border-top: 1px solid var(--border);
370
- padding-top: 16px;
371
- }
372
-
373
- .team-history-section-header {
374
- font-size: 0.8rem;
375
- font-weight: 600;
376
- text-transform: uppercase;
377
- letter-spacing: 0.03em;
378
- color: var(--text-secondary);
379
- margin-bottom: 8px;
380
- }
381
-
382
- .team-history-section .team-history-list {
383
- max-height: 200px;
384
- overflow-y: auto;
385
- border: 1px solid var(--border);
386
- border-radius: 6px;
387
- background: var(--bg-secondary);
388
- }
389
-
390
- /* ── Team dashboard ── */
391
- .team-dashboard {
392
- flex: 1;
393
- display: flex;
394
- flex-direction: column;
395
- min-height: 0;
396
- overflow: hidden;
397
- }
398
-
399
- .team-dash-header {
400
- display: flex;
401
- flex-direction: column;
402
- padding: 12px 20px;
403
- border-bottom: 1px solid var(--border);
404
- flex-shrink: 0;
405
- gap: 8px;
406
- }
407
-
408
- .team-dash-header-top {
409
- display: flex;
410
- align-items: center;
411
- justify-content: space-between;
412
- }
413
-
414
- .team-dash-header-left {
415
- display: flex;
416
- align-items: center;
417
- gap: 10px;
418
- }
419
-
420
- .team-dash-instruction {
421
- position: relative;
422
- }
423
-
424
- .team-dash-instruction-text {
425
- font-size: 0.92rem;
426
- line-height: 1.5;
427
- color: var(--text);
428
- white-space: pre-wrap;
429
- word-break: break-word;
430
- overflow: hidden;
431
- display: -webkit-box;
432
- -webkit-box-orient: vertical;
433
- -webkit-line-clamp: 3;
434
- }
435
-
436
- .team-dash-instruction.expanded .team-dash-instruction-text {
437
- -webkit-line-clamp: unset;
438
- display: block;
439
- }
440
-
441
- .team-dash-instruction-toggle {
442
- background: none;
443
- border: none;
444
- color: var(--accent);
445
- cursor: pointer;
446
- font-size: 0.78rem;
447
- padding: 2px 0;
448
- margin-top: 2px;
449
- }
450
-
451
- .team-dash-instruction-toggle:hover {
452
- text-decoration: underline;
453
- }
454
-
455
- .team-status-badge {
456
- display: inline-block;
457
- padding: 2px 8px;
458
- border-radius: 10px;
459
- font-size: 0.7rem;
460
- font-weight: 500;
461
- text-transform: uppercase;
462
- letter-spacing: 0.03em;
463
- }
464
-
465
- .team-status-planning {
466
- background: rgba(234,179,8,0.15);
467
- color: #eab308;
468
- }
469
-
470
- .team-status-running {
471
- background: rgba(59,130,246,0.15);
472
- color: #3b82f6;
473
- }
474
-
475
- .team-status-summarizing {
476
- background: rgba(139,92,246,0.15);
477
- color: #8b5cf6;
478
- }
479
-
480
- .team-status-completed {
481
- background: rgba(16,185,129,0.15);
482
- color: #10b981;
483
- }
484
-
485
- .team-status-failed {
486
- background: rgba(239,68,68,0.15);
487
- color: #ef4444;
488
- }
489
-
490
- .team-dash-header-right {
491
- display: flex;
492
- gap: 8px;
493
- }
494
-
495
- .team-dissolve-btn {
496
- padding: 5px 12px;
497
- border: 1px solid var(--error);
498
- border-radius: 5px;
499
- background: none;
500
- color: var(--error);
501
- font-size: 0.8rem;
502
- cursor: pointer;
503
- transition: background 0.15s;
504
- }
505
-
506
- .team-dissolve-btn:hover {
507
- background: rgba(212,84,84,0.1);
508
- }
509
-
510
- .team-back-btn {
511
- padding: 5px 12px;
512
- border: 1px solid var(--border);
513
- border-radius: 5px;
514
- background: none;
515
- color: var(--text-secondary);
516
- font-size: 0.8rem;
517
- cursor: pointer;
518
- transition: color 0.15s, border-color 0.15s;
519
- }
520
-
521
- .team-back-btn:hover {
522
- color: var(--text-primary);
523
- border-color: var(--text-secondary);
524
- }
525
-
526
- .team-new-btn {
527
- padding: 5px 12px;
528
- border: 1px solid var(--accent);
529
- border-radius: 5px;
530
- background: none;
531
- color: var(--accent);
532
- font-size: 0.8rem;
533
- cursor: pointer;
534
- transition: background 0.15s;
535
- }
536
-
537
- .team-new-btn:hover {
538
- background: rgba(59,130,246,0.1);
539
- }
540
-
541
- /* ── Lead status bar ── */
542
- .team-lead-bar {
543
- display: flex;
544
- align-items: center;
545
- gap: 8px;
546
- padding: 8px 16px;
547
- background: var(--bg-secondary);
548
- border-bottom: 1px solid var(--border);
549
- font-size: 0.8rem;
550
- flex-shrink: 0;
551
- }
552
- .team-lead-bar-clickable {
553
- cursor: pointer;
554
- transition: background 0.15s;
555
- }
556
- .team-lead-bar-clickable:hover {
557
- background: var(--bg-hover);
558
- }
559
-
560
- .team-lead-dot {
561
- width: 8px;
562
- height: 8px;
563
- border-radius: 50%;
564
- background: var(--accent);
565
- flex-shrink: 0;
566
- animation: agent-pulse 1.5s ease-in-out infinite;
567
- }
568
-
569
- .team-lead-label {
570
- font-weight: 600;
571
- color: var(--accent);
572
- text-transform: uppercase;
573
- font-size: 0.7rem;
574
- letter-spacing: 0.03em;
575
- }
576
-
577
- .team-lead-text {
578
- color: var(--text-primary);
579
- overflow: hidden;
580
- text-overflow: ellipsis;
581
- white-space: nowrap;
582
- }
583
-
584
- /* ── Dashboard body ── */
585
- .team-dash-body {
586
- flex: 1;
587
- display: flex;
588
- min-height: 0;
589
- overflow: hidden;
590
- }
591
-
592
- .team-dash-main {
593
- flex: 1;
594
- overflow-y: auto;
595
- padding: 16px 20px;
596
- display: flex;
597
- flex-direction: column;
598
- gap: 20px;
599
- }
600
-
601
- /* ── Kanban board ── */
602
- .team-kanban-section {
603
- border: 1px solid var(--border);
604
- border-radius: 8px;
605
- background: var(--bg-secondary);
606
- flex-shrink: 0;
607
- }
608
-
609
- .team-kanban-section-header {
610
- display: flex;
611
- align-items: center;
612
- gap: 6px;
613
- padding: 8px 12px;
614
- cursor: pointer;
615
- user-select: none;
616
- font-size: 0.8rem;
617
- font-weight: 600;
618
- text-transform: uppercase;
619
- letter-spacing: 0.03em;
620
- color: var(--text-secondary);
621
- transition: background 0.15s;
622
- }
623
- .team-kanban-section-header:hover {
624
- background: var(--bg-tertiary);
625
- }
626
- .team-kanban-section-toggle {
627
- font-size: 0.65rem;
628
- color: var(--text-secondary);
629
- }
630
- .team-kanban-section-summary {
631
- margin-left: auto;
632
- font-size: 0.72rem;
633
- font-weight: 400;
634
- color: var(--text-secondary);
635
- opacity: 0.8;
636
- }
637
-
638
- .team-kanban {
639
- display: flex;
640
- gap: 12px;
641
- min-height: 0;
642
- flex-shrink: 0;
643
- padding: 0 8px 8px;
644
- }
645
-
646
- .team-kanban-col {
647
- flex: 1;
648
- min-width: 0;
649
- display: flex;
650
- flex-direction: column;
651
- background: var(--bg-secondary);
652
- border-radius: 8px;
653
- border: 1px solid var(--border);
654
- }
655
-
656
- .team-kanban-col-header {
657
- display: flex;
658
- align-items: center;
659
- gap: 6px;
660
- padding: 10px 12px;
661
- font-size: 0.8rem;
662
- font-weight: 600;
663
- text-transform: uppercase;
664
- letter-spacing: 0.03em;
665
- color: var(--text-secondary);
666
- border-bottom: 1px solid var(--border);
667
- }
668
-
669
- .team-kanban-col-dot {
670
- width: 8px;
671
- height: 8px;
672
- border-radius: 50%;
673
- flex-shrink: 0;
674
- }
675
-
676
- .team-kanban-col-dot.pending { background: var(--text-secondary); }
677
- .team-kanban-col-dot.active { background: var(--accent); }
678
- .team-kanban-col-dot.done { background: var(--success); }
679
- .team-kanban-col-dot.failed { background: var(--error); }
680
-
681
- .team-kanban-col-count {
682
- margin-left: auto;
683
- background: var(--bg-tertiary);
684
- padding: 1px 6px;
685
- border-radius: 8px;
686
- font-size: 0.7rem;
687
- }
688
-
689
- .team-kanban-col-body {
690
- padding: 8px;
691
- display: flex;
692
- flex-direction: column;
693
- gap: 6px;
694
- overflow-y: auto;
695
- max-height: 160px;
696
- }
697
-
698
- .team-kanban-empty {
699
- padding: 12px;
700
- text-align: center;
701
- font-size: 0.8rem;
702
- color: var(--text-secondary);
703
- opacity: 0.6;
704
- }
705
-
706
- /* ── Task cards ── */
707
- .team-task-card {
708
- padding: 10px 12px;
709
- border-radius: 6px;
710
- background: var(--bg-primary);
711
- border: 1px solid var(--border);
712
- transition: border-color 0.15s;
713
- }
714
-
715
- .team-task-card.active {
716
- border-left: 3px solid var(--accent);
717
- }
718
-
719
- .team-task-card.done {
720
- opacity: 0.8;
721
- }
722
-
723
- .team-task-card.failed {
724
- border-left: 3px solid var(--error);
725
- }
726
-
727
- .team-task-title {
728
- font-size: 0.85rem;
729
- font-weight: 500;
730
- color: var(--text-primary);
731
- line-height: 1.3;
732
- }
733
-
734
- .team-task-desc {
735
- font-size: 0.78rem;
736
- color: var(--text-secondary);
737
- margin-top: 4px;
738
- line-height: 1.3;
739
- }
740
-
741
- .team-task-desc-clamp {
742
- display: -webkit-box;
743
- -webkit-line-clamp: 2;
744
- -webkit-box-orient: vertical;
745
- overflow: hidden;
746
- cursor: pointer;
747
- }
748
- .team-task-desc-clamp:hover {
749
- color: var(--text-primary);
750
- }
751
- .team-task-desc-expanded {
752
- -webkit-line-clamp: unset;
753
- overflow: visible;
754
- }
755
-
756
- .team-task-assignee {
757
- display: flex;
758
- align-items: center;
759
- gap: 4px;
760
- margin-top: 6px;
761
- font-size: 0.75rem;
762
- color: var(--text-secondary);
763
- }
764
-
765
- /* ── Agent dot ── */
766
- .team-agent-dot {
767
- width: 8px;
768
- height: 8px;
769
- border-radius: 50%;
770
- flex-shrink: 0;
771
- display: inline-block;
772
- }
773
-
774
- .team-agent-dot.working {
775
- animation: agent-pulse 1.5s ease-in-out infinite;
776
- }
777
-
778
- @keyframes agent-pulse {
779
- 0%, 100% { opacity: 1; transform: scale(1); }
780
- 50% { opacity: 0.5; transform: scale(1.3); }
781
- }
782
-
783
- /* ── Activity feed ── */
784
- .team-feed {
785
- border: 1px solid var(--border);
786
- border-radius: 8px;
787
- background: var(--bg-secondary);
788
- }
789
-
790
- .team-feed-header {
791
- padding: 10px 12px;
792
- font-size: 0.8rem;
793
- font-weight: 600;
794
- text-transform: uppercase;
795
- letter-spacing: 0.03em;
796
- color: var(--text-secondary);
797
- border-bottom: 1px solid var(--border);
798
- }
799
-
800
- .team-feed-list {
801
- max-height: 250px;
802
- overflow-y: auto;
803
- padding: 8px 12px;
804
- display: flex;
805
- flex-direction: column;
806
- gap: 4px;
807
- }
808
-
809
- .team-feed-entry {
810
- display: flex;
811
- align-items: baseline;
812
- gap: 6px;
813
- font-size: 0.8rem;
814
- line-height: 1.4;
815
- padding: 2px 0;
816
- }
817
-
818
- .team-feed-time {
819
- flex-shrink: 0;
820
- font-size: 0.7rem;
821
- color: var(--text-secondary);
822
- opacity: 0.7;
823
- font-family: 'SF Mono', 'Fira Code', Consolas, monospace;
824
- }
825
-
826
- .team-feed-text {
827
- color: var(--text-primary);
828
- }
829
-
830
- .team-feed-agent-name {
831
- font-weight: 600;
832
- }
833
-
834
- .sidebar-section-collapsible {
835
- display: flex;
836
- flex-direction: column;
837
- flex: 1;
838
- min-height: 0;
839
- overflow: hidden;
840
- }
841
-
842
- /* ── Teams sidebar section (history list in sidebar) ── */
843
- .sidebar-teams {
844
- padding: 0.5rem 0.75rem;
845
- overflow: hidden;
846
- display: flex;
847
- flex-direction: column;
848
- min-height: 0;
849
- }
850
-
851
- /* ── Loops sidebar section ── */
852
- .sidebar-loops {
853
- padding: 0.5rem 0.75rem;
854
- overflow: hidden;
855
- display: flex;
856
- flex-direction: column;
857
- min-height: 0;
858
- }
859
-
860
- .loop-history-list {
861
- flex: 1 1 auto;
862
- overflow-y: auto;
863
- min-height: 0;
864
- display: flex;
865
- flex-direction: column;
866
- gap: 2px;
867
- }
868
-
869
- .team-history-list {
870
- flex: 1 1 auto;
871
- overflow-y: auto;
872
- min-height: 0;
873
- display: flex;
874
- flex-direction: column;
875
- gap: 2px;
876
- }
877
-
878
- .team-history-item {
879
- display: flex;
880
- align-items: center;
881
- padding: 8px 10px;
882
- border-radius: 8px;
883
- cursor: pointer;
884
- transition: background 0.15s;
885
- border-left: 3px solid transparent;
886
- }
887
-
888
- .team-history-item:hover {
889
- background: var(--bg-tertiary);
890
- }
891
-
892
- .team-history-item.active {
893
- background: var(--bg-tertiary);
894
- border-left-color: var(--accent);
895
- }
896
-
897
- .team-history-info {
898
- min-width: 0;
899
- flex: 1;
900
- }
901
-
902
- .team-history-title {
903
- font-size: 0.82rem;
904
- color: var(--text-primary);
905
- overflow: hidden;
906
- text-overflow: ellipsis;
907
- white-space: nowrap;
908
- line-height: 1.3;
909
- }
910
-
911
- .team-history-meta {
912
- display: flex;
913
- align-items: center;
914
- flex-wrap: wrap;
915
- gap: 2px 6px;
916
- margin-top: 2px;
917
- font-size: 0.7rem;
918
- color: var(--text-secondary);
919
- }
920
-
921
- .team-history-tasks {
922
- color: var(--text-secondary);
923
- white-space: nowrap;
924
- }
925
-
926
- .team-status-badge-sm {
927
- font-size: 0.6rem;
928
- padding: 1px 5px;
929
- border-radius: 8px;
930
- }
931
-
932
- /* ── Completion stats bar ── */
933
- .team-stats-bar {
934
- display: flex;
935
- gap: 16px;
936
- padding: 10px 14px;
937
- margin-bottom: 12px;
938
- background: var(--bg-secondary);
939
- border: 1px solid var(--border);
940
- border-radius: 8px;
941
- }
942
-
943
- .team-stat {
944
- display: flex;
945
- flex-direction: column;
946
- align-items: center;
947
- gap: 2px;
948
- }
949
-
950
- .team-stat-label {
951
- font-size: 0.65rem;
952
- text-transform: uppercase;
953
- letter-spacing: 0.04em;
954
- color: var(--text-secondary);
955
- }
956
-
957
- .team-stat-value {
958
- font-size: 0.9rem;
959
- font-weight: 600;
960
- color: var(--text-primary);
961
- }
962
-
963
- /* ── Team summary (completion) ── */
964
- .team-summary {
965
- border: 1px solid var(--border);
966
- border-radius: 8px;
967
- background: var(--bg-secondary);
968
- }
969
-
970
- .team-summary-header {
971
- padding: 10px 12px;
972
- font-size: 0.8rem;
973
- font-weight: 600;
974
- text-transform: uppercase;
975
- letter-spacing: 0.03em;
976
- color: var(--text-secondary);
977
- border-bottom: 1px solid var(--border);
978
- }
979
-
980
- .team-summary-body {
981
- padding: 12px;
982
- }
983
-
984
- /* ── Agent bar (horizontal) ── */
985
- .team-agents-bar {
986
- border: 1px solid var(--border);
987
- border-radius: 8px;
988
- background: var(--bg-secondary);
989
- flex-shrink: 0;
990
- }
991
-
992
- .team-agents-bar-header {
993
- padding: 10px 12px;
994
- font-size: 0.8rem;
995
- font-weight: 600;
996
- text-transform: uppercase;
997
- letter-spacing: 0.03em;
998
- color: var(--text-secondary);
999
- border-bottom: 1px solid var(--border);
1000
- }
1001
-
1002
- .team-agents-bar-list {
1003
- display: flex;
1004
- flex-wrap: wrap;
1005
- gap: 8px;
1006
- padding: 10px 12px;
1007
- }
1008
-
1009
- .team-agent-card {
1010
- flex: 1;
1011
- min-width: 180px;
1012
- max-width: 300px;
1013
- padding: 10px 12px;
1014
- border-radius: 6px;
1015
- background: var(--bg-primary);
1016
- border: 1px solid var(--border);
1017
- cursor: pointer;
1018
- transition: border-color 0.15s;
1019
- }
1020
-
1021
- .team-agent-card:hover {
1022
- border-color: var(--accent);
1023
- }
1024
-
1025
- .team-agent-card-top {
1026
- display: flex;
1027
- align-items: center;
1028
- gap: 6px;
1029
- }
1030
-
1031
- .team-agent-card-name {
1032
- font-size: 0.82rem;
1033
- font-weight: 500;
1034
- color: var(--text-primary);
1035
- white-space: nowrap;
1036
- overflow: hidden;
1037
- text-overflow: ellipsis;
1038
- }
1039
-
1040
- .team-agent-card-status {
1041
- margin-left: auto;
1042
- font-size: 0.65rem;
1043
- font-weight: 500;
1044
- text-transform: uppercase;
1045
- letter-spacing: 0.03em;
1046
- padding: 1px 6px;
1047
- border-radius: 8px;
1048
- flex-shrink: 0;
1049
- }
1050
-
1051
- .team-agent-card-status-starting,
1052
- .team-agent-card-status-working {
1053
- background: rgba(59,130,246,0.15);
1054
- color: #3b82f6;
1055
- }
1056
-
1057
- .team-agent-card-status-done {
1058
- background: rgba(16,185,129,0.15);
1059
- color: #10b981;
1060
- }
1061
-
1062
- .team-agent-card-status-error {
1063
- background: rgba(239,68,68,0.15);
1064
- color: #ef4444;
1065
- }
1066
-
1067
- .team-agent-card-activity {
1068
- margin-top: 6px;
1069
- font-size: 0.75rem;
1070
- color: var(--text-secondary);
1071
- overflow: hidden;
1072
- text-overflow: ellipsis;
1073
- white-space: nowrap;
1074
- line-height: 1.3;
1075
- }
1076
-
1077
- .team-agents-empty {
1078
- padding: 16px 12px;
1079
- text-align: center;
1080
- font-size: 0.8rem;
1081
- color: var(--text-secondary);
1082
- opacity: 0.6;
1083
- }
1084
-
1085
- /* ── Agent detail view ── */
1086
- .team-agent-detail {
1087
- flex: 1;
1088
- display: flex;
1089
- flex-direction: column;
1090
- min-height: 0;
1091
- overflow: hidden;
1092
- }
1093
-
1094
- .team-agent-detail-header {
1095
- display: flex;
1096
- align-items: center;
1097
- gap: 8px;
1098
- padding: 10px 16px;
1099
- border-bottom: 1px solid var(--border);
1100
- flex-shrink: 0;
1101
- }
1102
-
1103
- .team-agent-back-btn {
1104
- display: flex;
1105
- align-items: center;
1106
- gap: 4px;
1107
- padding: 4px 10px;
1108
- border: 1px solid var(--border);
1109
- border-radius: 4px;
1110
- background: none;
1111
- color: var(--text-secondary);
1112
- font-size: 0.78rem;
1113
- cursor: pointer;
1114
- transition: color 0.15s, border-color 0.15s;
1115
- margin-right: 4px;
1116
- }
1117
-
1118
- .team-agent-back-btn:hover {
1119
- color: var(--text-primary);
1120
- border-color: var(--text-secondary);
1121
- }
1122
-
1123
- .team-agent-detail-name {
1124
- font-size: 0.9rem;
1125
- font-weight: 600;
1126
- color: var(--text-primary);
1127
- }
1128
-
1129
- .team-agent-detail-status {
1130
- font-size: 0.75rem;
1131
- color: var(--text-secondary);
1132
- text-transform: capitalize;
1133
- }
1134
-
1135
- .team-agent-messages {
1136
- flex: 1;
1137
- overflow-y: auto;
1138
- padding: 1rem 1.5rem;
1139
- min-height: 0;
1140
- }
1141
-
1142
- .team-agent-messages-inner {
1143
- max-width: 768px;
1144
- width: 100%;
1145
- margin: 0 auto;
1146
- display: flex;
1147
- flex-direction: column;
1148
- gap: 0.25rem;
1149
- }
1150
-
1151
- .team-agent-empty-msg {
1152
- text-align: center;
1153
- padding: 2rem;
1154
- color: var(--text-secondary);
1155
- font-size: 0.85rem;
1156
- }
1157
-
1158
- /* ── Agent prompt card ── */
1159
- .team-agent-prompt {
1160
- border: 1px solid var(--border);
1161
- border-radius: 8px;
1162
- background: var(--bg-secondary);
1163
- margin-bottom: 0.5rem;
1164
- }
1165
-
1166
- .team-agent-prompt-label {
1167
- padding: 8px 12px;
1168
- font-size: 0.75rem;
1169
- font-weight: 600;
1170
- text-transform: uppercase;
1171
- letter-spacing: 0.03em;
1172
- color: var(--text-secondary);
1173
- border-bottom: 1px solid var(--border);
1174
- }
1175
-
1176
- .team-agent-prompt-body {
1177
- padding: 10px 14px;
1178
- font-size: 0.85rem;
1179
- line-height: 1.5;
1180
- color: var(--text-primary);
1181
- }
1182
-
1183
- /* ── Agent detail name tag (above assistant bubbles) ── */
1184
- .team-agent-detail-name-tag {
1185
- font-size: 0.72rem;
1186
- font-weight: 600;
1187
- margin-bottom: 2px;
1188
- padding-left: 2px;
1189
- }
1190
-
1191
- /* ── New team launcher (after completion) ── */
1192
- .team-new-launcher {
1193
- border: 1px solid var(--border);
1194
- border-radius: 8px;
1195
- background: var(--bg-secondary);
1196
- padding: 12px;
1197
- flex-shrink: 0;
1198
- }
1199
- .team-new-launcher-input {
1200
- width: 100%;
1201
- box-sizing: border-box;
1202
- padding: 8px 10px;
1203
- border: 1px solid var(--border);
1204
- border-radius: 6px;
1205
- background: var(--bg-primary);
1206
- color: var(--text-primary);
1207
- font-size: 0.85rem;
1208
- font-family: inherit;
1209
- resize: vertical;
1210
- outline: none;
1211
- }
1212
- .team-new-launcher-input:focus {
1213
- border-color: var(--accent);
1214
- }
1215
- .team-new-launcher-actions {
1216
- display: flex;
1217
- gap: 8px;
1218
- margin-top: 8px;
1219
- justify-content: flex-end;
1220
- }
1221
-
1222
- /* ── Team Agent tool call styling in main chat ── */
1223
- .team-agent-tool-wrapper {
1224
- border-left: 3px solid #8B5CF6;
1225
- border-radius: 6px;
1226
- margin-left: 4px;
1227
- padding-left: 0;
1228
- }
1229
- .team-agent-tool-line {
1230
- background: linear-gradient(90deg, rgba(139, 92, 246, 0.08), transparent);
1231
- }
1232
- .team-agent-tool-line:hover {
1233
- background: linear-gradient(90deg, rgba(139, 92, 246, 0.14), transparent);
1234
- }
1235
- .team-agent-tool-icon {
1236
- display: inline-flex;
1237
- align-items: center;
1238
- color: #8B5CF6;
1239
- }
1240
- .team-agent-tool-name {
1241
- font-weight: 700;
1242
- color: #8B5CF6;
1243
- font-size: 0.82rem;
1244
- }
1245
- .team-agent-tool-desc {
1246
- flex: 1;
1247
- overflow: hidden;
1248
- text-overflow: ellipsis;
1249
- white-space: nowrap;
1250
- font-size: 0.8rem;
1251
- color: var(--text-secondary);
1252
- }
1253
- .team-agent-tool-expand {
1254
- border-top: 1px solid rgba(139, 92, 246, 0.15);
1255
- }
1256
- .team-agent-tool-result {
1257
- margin-top: 6px;
1258
- padding: 8px 10px;
1259
- background: rgba(139, 92, 246, 0.06);
1260
- border-radius: 4px;
1261
- border: 1px solid rgba(139, 92, 246, 0.12);
1262
- }
1263
- .team-agent-tool-result-label {
1264
- font-size: 0.72rem;
1265
- font-weight: 600;
1266
- color: #8B5CF6;
1267
- margin-bottom: 4px;
1268
- text-transform: uppercase;
1269
- letter-spacing: 0.5px;
1270
- }
1271
- .team-agent-tool-result-content {
1272
- font-size: 0.82rem;
1273
- line-height: 1.5;
1274
- max-height: 300px;
1275
- overflow-y: auto;
1276
- }
1277
-