clay-server 2.26.0-beta.1 → 2.26.0-beta.10

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 (42) hide show
  1. package/bin/cli.js +5 -9
  2. package/lib/browser-mcp-server.js +496 -0
  3. package/lib/daemon.js +1 -1
  4. package/lib/os-users.js +23 -0
  5. package/lib/project-debate.js +206 -88
  6. package/lib/project-mate-interaction.js +766 -0
  7. package/lib/project-memory.js +677 -0
  8. package/lib/project.js +546 -1361
  9. package/lib/public/app.js +817 -175
  10. package/lib/public/css/debate.css +224 -2
  11. package/lib/public/css/icon-strip.css +10 -10
  12. package/lib/public/css/input.css +263 -83
  13. package/lib/public/css/mates.css +56 -57
  14. package/lib/public/css/mention.css +7 -4
  15. package/lib/public/css/menus.css +7 -0
  16. package/lib/public/css/messages.css +17 -0
  17. package/lib/public/css/mobile-nav.css +3 -1
  18. package/lib/public/css/overlays.css +181 -0
  19. package/lib/public/css/rewind.css +79 -0
  20. package/lib/public/css/server-settings.css +1 -0
  21. package/lib/public/css/sidebar.css +10 -0
  22. package/lib/public/css/title-bar.css +189 -3
  23. package/lib/public/index.html +53 -16
  24. package/lib/public/modules/context-sources.js +313 -0
  25. package/lib/public/modules/debate.js +184 -97
  26. package/lib/public/modules/input.js +18 -1
  27. package/lib/public/modules/mate-knowledge.js +11 -11
  28. package/lib/public/modules/mate-memory.js +5 -5
  29. package/lib/public/modules/mate-sidebar.js +13 -9
  30. package/lib/public/modules/mention.js +40 -2
  31. package/lib/public/modules/notifications.js +109 -1
  32. package/lib/public/modules/rewind.js +36 -0
  33. package/lib/public/modules/sidebar.js +107 -28
  34. package/lib/public/modules/terminal.js +8 -0
  35. package/lib/public/modules/theme.js +2 -1
  36. package/lib/public/modules/tools.js +69 -24
  37. package/lib/sdk-bridge.js +81 -7
  38. package/lib/sdk-worker.js +13 -1
  39. package/lib/server.js +42 -0
  40. package/lib/sessions.js +39 -7
  41. package/lib/terminal-manager.js +36 -6
  42. package/package.json +2 -2
@@ -271,6 +271,181 @@
271
271
  border-color: var(--error);
272
272
  }
273
273
 
274
+ /* ==========================================================================
275
+ Context Sources — chips above input
276
+ ========================================================================== */
277
+
278
+ #context-sources-bar {
279
+ display: flex;
280
+ align-items: center;
281
+ flex-wrap: wrap;
282
+ gap: 4px;
283
+ padding: 0 8px 4px;
284
+ position: relative;
285
+ }
286
+
287
+ #context-sources-add {
288
+ display: inline-flex;
289
+ align-items: center;
290
+ gap: 6px;
291
+ padding: 6px 12px;
292
+ border-radius: 6px;
293
+ border: 1px dashed var(--border);
294
+ background: transparent;
295
+ color: var(--text-dimmer);
296
+ font-family: inherit;
297
+ font-size: 12px;
298
+ font-weight: 500;
299
+ cursor: pointer;
300
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
301
+ }
302
+
303
+ #context-sources-add .lucide { width: 12px; height: 12px; }
304
+
305
+ #context-sources-add:hover {
306
+ color: var(--text-secondary);
307
+ border-color: var(--text-dimmer);
308
+ background: var(--sidebar-hover);
309
+ }
310
+
311
+ #context-sources-chips {
312
+ display: flex;
313
+ align-items: center;
314
+ flex-wrap: wrap;
315
+ gap: 4px;
316
+ }
317
+
318
+ .context-chip {
319
+ display: inline-flex;
320
+ align-items: stretch;
321
+ padding: 0;
322
+ border-radius: 8px;
323
+ background: var(--bg-alt);
324
+ color: var(--text);
325
+ font-size: 13px;
326
+ font-weight: 500;
327
+ line-height: 1;
328
+ white-space: nowrap;
329
+ border: 1px solid var(--border);
330
+ transition: border-color 0.15s;
331
+ animation: chipIn 0.3s ease-out;
332
+ }
333
+
334
+ @keyframes chipIn {
335
+ from { opacity: 0; transform: translateY(6px) scale(0.95); }
336
+ to { opacity: 1; transform: translateY(0) scale(1); }
337
+ }
338
+
339
+ .context-chip-label {
340
+ display: inline-flex;
341
+ align-items: center;
342
+ gap: 6px;
343
+ padding: 6px 10px 6px 12px;
344
+ }
345
+
346
+ .context-chip-label .lucide { width: 14px; height: 14px; flex-shrink: 0; color: var(--accent); }
347
+
348
+ .context-chip-remove {
349
+ display: inline-flex;
350
+ align-items: center;
351
+ justify-content: center;
352
+ width: 30px;
353
+ border: none;
354
+ border-left: 1px solid var(--border);
355
+ background: transparent;
356
+ color: var(--text-muted);
357
+ cursor: pointer;
358
+ padding: 0;
359
+ border-radius: 0 8px 8px 0;
360
+ transition: color 0.15s, background 0.15s;
361
+ }
362
+
363
+ .context-chip-remove:hover {
364
+ color: var(--text);
365
+ background: rgba(var(--overlay-rgb), 0.08);
366
+ }
367
+
368
+ .context-chip-remove .lucide { width: 14px; height: 14px; }
369
+
370
+ #context-sources-picker.hidden { display: none; }
371
+
372
+ #context-sources-picker {
373
+ position: absolute;
374
+ bottom: calc(100% + 4px);
375
+ left: 0;
376
+ min-width: 200px;
377
+ max-height: 320px;
378
+ overflow-y: auto;
379
+ background: var(--sidebar-bg);
380
+ border: 1px solid var(--border);
381
+ border-radius: 10px;
382
+ padding: 4px 0;
383
+ box-shadow: 0 4px 12px rgba(var(--shadow-rgb), 0.15);
384
+ z-index: 200;
385
+ animation: ctxPickerAppear 0.12s ease-out;
386
+ }
387
+
388
+ @keyframes ctxPickerAppear {
389
+ from { opacity: 0; transform: scale(0.95); }
390
+ to { opacity: 1; transform: scale(1); }
391
+ }
392
+
393
+ .context-picker-section-label {
394
+ font-size: 10px;
395
+ font-weight: 600;
396
+ color: var(--text-dimmer);
397
+ text-transform: uppercase;
398
+ letter-spacing: 0.5px;
399
+ padding: 8px 12px 4px;
400
+ }
401
+
402
+ .context-picker-item {
403
+ display: flex;
404
+ align-items: center;
405
+ gap: 8px;
406
+ width: 100%;
407
+ padding: 8px 12px;
408
+ font-size: 13px;
409
+ color: var(--text-secondary);
410
+ background: none;
411
+ border: none;
412
+ cursor: pointer;
413
+ transition: background 0.15s;
414
+ }
415
+
416
+ .context-picker-item:hover {
417
+ background: rgba(var(--overlay-rgb), 0.05);
418
+ }
419
+
420
+ .context-picker-item .lucide { width: 14px; height: 14px; flex-shrink: 0; }
421
+
422
+ .context-picker-check {
423
+ margin-left: auto;
424
+ width: 14px;
425
+ height: 14px;
426
+ color: var(--accent);
427
+ display: none;
428
+ }
429
+
430
+ .context-picker-item.active .context-picker-check {
431
+ display: block;
432
+ }
433
+
434
+ .context-picker-empty {
435
+ padding: 12px;
436
+ color: var(--text-dimmer);
437
+ font-size: 13px;
438
+ text-align: center;
439
+ }
440
+
441
+ .context-picker-favicon {
442
+ width: 14px;
443
+ height: 14px;
444
+ border-radius: 2px;
445
+ flex-shrink: 0;
446
+ object-fit: contain;
447
+ }
448
+
274
449
  /* ==========================================================================
275
450
  Input Area — Claude-style unified container
276
451
  ========================================================================== */
@@ -291,15 +466,14 @@
291
466
  display: flex;
292
467
  flex-direction: column;
293
468
  background: var(--input-bg);
294
- border: 1px solid var(--border);
469
+ border: none;
295
470
  border-radius: 8px;
296
- padding: 6px;
297
- transition: border-color 0.2s, box-shadow 0.2s;
471
+ padding: 7px;
472
+ transition: box-shadow 0.2s;
298
473
  }
299
474
 
300
475
  #input-row:focus-within {
301
- border-color: var(--text-dimmer);
302
- box-shadow: 0 0 0 1px rgba(109, 104, 96, 0.15);
476
+ box-shadow: 0 0 0 1px var(--border);
303
477
  }
304
478
 
305
479
  #input {
@@ -378,7 +552,7 @@
378
552
  border-radius: 10px;
379
553
  border: 1px solid transparent;
380
554
  background:
381
- linear-gradient(var(--bg, #282a36), var(--bg, #282a36)) padding-box,
555
+ linear-gradient(var(--ask-mate-bg, var(--bg)), var(--ask-mate-bg, var(--bg))) padding-box,
382
556
  linear-gradient(135deg, #4ecdc4 0%, #4ecdc4 25%, #556bf7, #a855f7, #f857a6, #ff6b6b) border-box;
383
557
  color: transparent;
384
558
  cursor: pointer;
@@ -521,98 +695,48 @@
521
695
  #suggestion-chips {
522
696
  display: flex;
523
697
  flex-wrap: wrap;
524
- gap: 6px;
525
- padding: 8px 6px;
526
- position: absolute;
527
- bottom: 100%;
528
- left: 0;
529
- right: 0;
530
- z-index: 5;
531
- background: transparent;
698
+ gap: 4px;
699
+ padding: 4px 6px;
532
700
  }
533
701
 
534
702
  #suggestion-chips.hidden { display: none; }
535
703
 
536
704
  .suggestion-chip {
537
705
  display: inline-flex;
538
- align-items: stretch;
539
- padding: 0;
540
- border-radius: 16px;
706
+ align-items: center;
707
+ gap: 5px;
708
+ padding: 4px 10px 4px 8px;
709
+ border-radius: 6px;
541
710
  border: 1px solid var(--border);
542
- background: var(--bg-alt);
711
+ background: rgba(var(--overlay-rgb), 0.08);
543
712
  color: var(--text-secondary);
544
- font-size: 13px;
713
+ font-size: 12px;
545
714
  font-family: inherit;
546
715
  cursor: pointer;
547
- transition: border-color 0.15s;
716
+ transition: border-color 0.15s, background 0.15s, color 0.15s;
548
717
  text-align: left;
549
718
  max-width: 100%;
550
- line-height: 1.3;
551
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
719
+ line-height: 1.2;
552
720
  }
553
721
 
554
722
  .suggestion-chip:hover {
555
723
  border-color: var(--accent);
724
+ background: var(--accent-bg);
725
+ color: var(--accent);
556
726
  }
557
727
 
558
728
  .suggestion-chip .lucide {
559
- width: 14px;
560
- height: 14px;
729
+ width: 12px;
730
+ height: 12px;
561
731
  flex-shrink: 0;
562
732
  color: var(--accent);
563
733
  }
564
734
 
565
- .suggestion-chip-send {
566
- display: inline-flex;
567
- align-items: center;
568
- gap: 5px;
569
- flex: 1;
570
- min-width: 0;
571
- padding: 8px 10px 8px 14px;
572
- border-radius: 16px 0 0 16px;
573
- transition: background 0.15s, color 0.15s;
574
- }
575
-
576
- .suggestion-chip-send:hover {
577
- background: var(--accent-bg);
578
- color: var(--accent);
579
- }
580
-
581
735
  .suggestion-chip-text {
582
736
  flex: 1;
583
737
  min-width: 0;
584
738
  }
585
739
 
586
- .suggestion-chip-edit {
587
- display: inline-flex;
588
- align-items: center;
589
- justify-content: center;
590
- padding: 8px 12px;
591
- border-left: 1px solid var(--border);
592
- border-radius: 0 16px 16px 0;
593
- background: rgba(128, 128, 128, 0.07);
594
- cursor: pointer;
595
- transition: background 0.15s, border-color 0.15s;
596
- }
597
-
598
- .suggestion-chip:hover .suggestion-chip-edit {
599
- border-left-color: var(--accent);
600
- }
601
-
602
- .suggestion-chip-edit:hover {
603
- background: var(--accent-bg);
604
- }
605
-
606
- .suggestion-chip-edit .lucide {
607
- width: 14px;
608
- height: 14px;
609
- color: var(--text-secondary);
610
- }
611
-
612
- .suggestion-chip-edit:hover .lucide {
613
- color: var(--accent);
614
- }
615
-
616
740
  /* ==========================================================================
617
741
  Animations
618
742
  ========================================================================== */
@@ -809,27 +933,83 @@
809
933
  flex: 1;
810
934
  }
811
935
 
812
- .scheduled-msg-cancel {
813
- display: flex;
936
+
937
+ /* Channel mode: scheduled badge in header row */
938
+ .scheduled-msg-badge {
939
+ display: inline-flex;
814
940
  align-items: center;
815
- justify-content: center;
816
- width: 22px;
817
- height: 22px;
941
+ gap: 5px;
942
+ padding: 3px 10px;
943
+ border-radius: 12px;
944
+ font-size: 12px;
945
+ font-weight: 600;
946
+ line-height: 1;
947
+ color: var(--accent);
948
+ background: color-mix(in srgb, var(--accent) 12%, transparent);
949
+ vertical-align: middle;
950
+ }
951
+ .scheduled-msg-badge svg,
952
+ .scheduled-msg-badge .lucide {
953
+ width: 13px;
954
+ height: 13px;
955
+ }
956
+ /* Scheduled message action links (shared by both modes) */
957
+ .scheduled-msg-actions {
958
+ display: inline-flex;
959
+ align-items: center;
960
+ gap: 6px;
961
+ margin-left: 4px;
962
+ }
963
+ .scheduled-msg-send-now {
964
+ padding: 0;
818
965
  border: none;
819
- border-radius: 4px;
820
966
  background: none;
821
- color: var(--text-dimmer);
967
+ color: var(--accent);
968
+ font-size: 12px;
969
+ font-weight: 500;
970
+ font-family: inherit;
822
971
  cursor: pointer;
972
+ transition: text-decoration 0.15s;
973
+ }
974
+ .scheduled-msg-send-now:hover {
975
+ text-decoration: underline;
976
+ }
977
+ .scheduled-msg-sep {
978
+ color: var(--text-dimmer);
979
+ font-size: 12px;
980
+ user-select: none;
981
+ }
982
+ .scheduled-msg-cancel {
823
983
  padding: 0;
824
- transition: background 0.15s, color 0.15s;
984
+ border: none;
985
+ background: none;
986
+ color: var(--text-dimmer);
987
+ font-size: 12px;
988
+ font-weight: 500;
989
+ font-family: inherit;
990
+ cursor: pointer;
991
+ transition: color 0.15s;
825
992
  }
826
-
827
993
  .scheduled-msg-cancel:hover {
828
- background: rgba(var(--overlay-rgb), 0.08);
829
994
  color: var(--error);
830
995
  }
831
996
 
832
- .scheduled-msg-cancel .lucide {
833
- width: 14px;
834
- height: 14px;
997
+ /* Channel mode: strip bubble box styling, render as plain text */
998
+ body.wide-view .scheduled-msg-wrap .bubble {
999
+ background: none;
1000
+ border: none;
1001
+ box-shadow: none;
1002
+ padding: 0;
1003
+ border-radius: 0;
1004
+ }
1005
+
1006
+ /* Channel mode: header alignment */
1007
+ body.wide-view .scheduled-msg-wrap .dm-bubble-header {
1008
+ display: flex;
1009
+ align-items: center;
1010
+ gap: 6px;
1011
+ }
1012
+ body.wide-view .scheduled-msg-wrap .scheduled-msg-countdown {
1013
+ font-size: inherit;
1014
+ color: inherit;
835
1015
  }
@@ -487,24 +487,24 @@
487
487
  background: var(--border, #333);
488
488
  }
489
489
 
490
- /* === Mate badge in user strip === */
491
- .icon-strip-user-mate-badge {
492
- position: absolute;
493
- bottom: 0;
494
- right: 0;
495
- width: 14px;
496
- height: 14px;
497
- background: var(--accent, #6c5ce7);
498
- border-radius: 50%;
499
- border: 2px solid var(--bg, #282a36);
500
- display: flex;
501
- align-items: center;
502
- justify-content: center;
490
+ /* === Mate avatar in user strip: squircle + desaturate === */
491
+ .icon-strip-mate .icon-strip-user-avatar {
492
+ border-radius: 8px;
493
+ filter: saturate(0.65);
503
494
  }
504
- .icon-strip-user-mate-badge svg {
505
- width: 8px;
506
- height: 8px;
507
- color: #fff;
495
+ .icon-strip-mate:hover .icon-strip-user-avatar,
496
+ .icon-strip-mate.mention-active .icon-strip-user-avatar {
497
+ filter: saturate(1);
498
+ }
499
+ .icon-strip-mate.active .icon-strip-user-avatar {
500
+ filter: saturate(1);
501
+ box-shadow: 0 0 0 2px var(--accent);
502
+ border-radius: 8px;
503
+ }
504
+
505
+ /* Hide legacy bot badge (replaced by squircle shape) */
506
+ .icon-strip-user-mate-badge {
507
+ display: none;
508
508
  }
509
509
 
510
510
  /* Mate item in DM picker */
@@ -2342,7 +2342,9 @@ body.mate-dm-active .turn-meta {
2342
2342
  ========================================================================== */
2343
2343
 
2344
2344
  /* --- Mate Thinking: flex layout matching msg-assistant --- */
2345
- body.mate-dm-active .mate-thinking {
2345
+ /* Applies in both Mate DM and channel project chat */
2346
+ body.mate-dm-active .mate-thinking,
2347
+ body.wide-view .mate-thinking {
2346
2348
  display: flex;
2347
2349
  flex-direction: row;
2348
2350
  align-items: flex-start;
@@ -2351,10 +2353,12 @@ body.mate-dm-active .mate-thinking {
2351
2353
  margin: 0;
2352
2354
  max-width: 100%;
2353
2355
  }
2354
- body.mate-dm-active .mate-thinking:hover {
2356
+ body.mate-dm-active .mate-thinking:hover,
2357
+ body.wide-view .mate-thinking:hover {
2355
2358
  background: var(--bg-alt);
2356
2359
  }
2357
- body.mate-dm-active .mate-thinking > .dm-bubble-avatar {
2360
+ body.mate-dm-active .mate-thinking > .dm-bubble-avatar,
2361
+ body.wide-view .mate-thinking > .dm-bubble-avatar {
2358
2362
  display: block;
2359
2363
  width: 36px;
2360
2364
  height: 36px;
@@ -2362,7 +2366,8 @@ body.mate-dm-active .mate-thinking > .dm-bubble-avatar {
2362
2366
  flex-shrink: 0;
2363
2367
  margin-top: 2px;
2364
2368
  }
2365
- body.mate-dm-active .mate-thinking > .dm-bubble-content {
2369
+ body.mate-dm-active .mate-thinking > .dm-bubble-content,
2370
+ body.wide-view .mate-thinking > .dm-bubble-content {
2366
2371
  flex: 1;
2367
2372
  min-width: 0;
2368
2373
  }
@@ -2373,7 +2378,8 @@ body.mate-dm-active .mate-thinking > .dm-bubble-content {
2373
2378
  gap: 4px;
2374
2379
  padding: 4px 0;
2375
2380
  }
2376
- body.mate-dm-active .mate-thinking:not(.done) .mate-thinking-row {
2381
+ body.mate-dm-active .mate-thinking:not(.done) .mate-thinking-row,
2382
+ body.wide-view .mate-thinking:not(.done) .mate-thinking-row {
2377
2383
  display: flex;
2378
2384
  }
2379
2385
  .mate-thinking-dots {
@@ -2400,10 +2406,16 @@ body.mate-dm-active .mate-thinking:not(.done) .mate-thinking-row {
2400
2406
  }
2401
2407
 
2402
2408
  /* When done, hide mate row (JS does this too), show compact expandable header */
2403
- body.mate-dm-active .mate-thinking.done .mate-thinking-row {
2409
+ body.mate-dm-active .mate-thinking.done .mate-thinking-row,
2410
+ body.wide-view .mate-thinking.done .mate-thinking-row {
2404
2411
  display: none;
2405
2412
  }
2406
- body.mate-dm-active .mate-thinking.done .thinking-header {
2413
+ body.mate-dm-active .mate-thinking.done .mate-thinking-activity,
2414
+ body.wide-view .mate-thinking.done .mate-thinking-activity {
2415
+ display: none;
2416
+ }
2417
+ body.mate-dm-active .mate-thinking.done .thinking-header,
2418
+ body.wide-view .mate-thinking.done .thinking-header {
2407
2419
  display: inline-flex !important;
2408
2420
  font-size: 12px;
2409
2421
  padding: 4px 10px;
@@ -2412,16 +2424,19 @@ body.mate-dm-active .mate-thinking.done .thinking-header {
2412
2424
  opacity: 0.7;
2413
2425
  transition: opacity 0.15s;
2414
2426
  }
2415
- body.mate-dm-active .mate-thinking.done .thinking-header:hover {
2427
+ body.mate-dm-active .mate-thinking.done .thinking-header:hover,
2428
+ body.wide-view .mate-thinking.done .thinking-header:hover {
2416
2429
  opacity: 1;
2417
2430
  background: rgba(var(--overlay-rgb), 0.08);
2418
2431
  }
2419
- body.mate-dm-active .mate-thinking .thinking-content {
2432
+ body.mate-dm-active .mate-thinking .thinking-content,
2433
+ body.wide-view .mate-thinking .thinking-content {
2420
2434
  max-height: 0;
2421
2435
  overflow: hidden;
2422
2436
  transition: max-height 0.25s ease;
2423
2437
  }
2424
- body.mate-dm-active .mate-thinking.expanded .thinking-content {
2438
+ body.mate-dm-active .mate-thinking.expanded .thinking-content,
2439
+ body.wide-view .mate-thinking.expanded .thinking-content {
2425
2440
  max-height: 2000px;
2426
2441
  }
2427
2442
 
@@ -2476,8 +2491,10 @@ body.mate-dm-active .mate-tool-group .tool-name {
2476
2491
  color: var(--text-muted);
2477
2492
  }
2478
2493
 
2479
- /* --- Mate Permission: flex layout matching msg-assistant --- */
2480
- body.mate-dm-active .mate-permission {
2494
+ /* --- Conversational Permission: flex layout matching msg-assistant --- */
2495
+ /* Applies in both Mate DM and channel project chat */
2496
+ body.mate-dm-active .mate-permission,
2497
+ body.wide-view .mate-permission {
2481
2498
  display: flex;
2482
2499
  flex-direction: row;
2483
2500
  align-items: flex-start;
@@ -2490,10 +2507,12 @@ body.mate-dm-active .mate-permission {
2490
2507
  margin: 0;
2491
2508
  max-width: 100%;
2492
2509
  }
2493
- body.mate-dm-active .mate-permission:hover {
2510
+ body.mate-dm-active .mate-permission:hover,
2511
+ body.wide-view .mate-permission:hover {
2494
2512
  background: var(--bg-alt);
2495
2513
  }
2496
- body.mate-dm-active .mate-permission > .dm-bubble-avatar {
2514
+ body.mate-dm-active .mate-permission > .dm-bubble-avatar,
2515
+ body.wide-view .mate-permission > .dm-bubble-avatar {
2497
2516
  display: block;
2498
2517
  width: 36px;
2499
2518
  height: 36px;
@@ -2501,7 +2520,8 @@ body.mate-dm-active .mate-permission > .dm-bubble-avatar {
2501
2520
  flex-shrink: 0;
2502
2521
  margin-top: 2px;
2503
2522
  }
2504
- body.mate-dm-active .mate-permission > .dm-bubble-content {
2523
+ body.mate-dm-active .mate-permission > .dm-bubble-content,
2524
+ body.wide-view .mate-permission > .dm-bubble-content {
2505
2525
  flex: 1;
2506
2526
  min-width: 0;
2507
2527
  }
@@ -2569,14 +2589,14 @@ body.mate-dm-active .mate-permission > .dm-bubble-content {
2569
2589
  .mate-permission-deny {
2570
2590
  color: var(--text-muted);
2571
2591
  }
2572
- /* Resolved state */
2573
- body.mate-dm-active .mate-permission.resolved .mate-permission-actions {
2592
+ /* Resolved state (works in both Mate DM and channel project chat) */
2593
+ .mate-permission.resolved .mate-permission-actions {
2574
2594
  pointer-events: none;
2575
2595
  }
2576
- body.mate-dm-active .mate-permission.resolved .mate-permission-reply {
2596
+ .mate-permission.resolved .mate-permission-reply {
2577
2597
  display: none;
2578
2598
  }
2579
- body.mate-dm-active .mate-permission.resolved .permission-decision-label {
2599
+ .mate-permission.resolved .permission-decision-label {
2580
2600
  font-size: 12px;
2581
2601
  color: var(--text-dimmer);
2582
2602
  }
@@ -2732,27 +2752,6 @@ body.mate-dm-active .activity-inline:not(.mention-activity-bar):not(.mate-pre-ac
2732
2752
  -webkit-tap-highlight-color: transparent;
2733
2753
  }
2734
2754
 
2735
- .mate-mobile-back {
2736
- display: flex;
2737
- align-items: center;
2738
- justify-content: center;
2739
- width: 44px;
2740
- height: 44px;
2741
- flex-shrink: 0;
2742
- background: none;
2743
- border: none;
2744
- color: #fff;
2745
- cursor: pointer;
2746
- padding: 0;
2747
- touch-action: manipulation;
2748
- -webkit-tap-highlight-color: transparent;
2749
- }
2750
-
2751
- .mate-mobile-back svg {
2752
- width: 22px;
2753
- height: 22px;
2754
- }
2755
-
2756
2755
  .mate-mobile-avatar {
2757
2756
  width: 32px;
2758
2757
  height: 32px;
@@ -107,8 +107,8 @@
107
107
  padding: 3px 6px 3px 4px;
108
108
  margin: 0 0 4px 0;
109
109
  border-radius: 6px;
110
- background: color-mix(in srgb, var(--chip-color, #6c5ce7) 12%, transparent);
111
- border: 1px solid color-mix(in srgb, var(--chip-color, #6c5ce7) 25%, transparent);
110
+ background: color-mix(in srgb, var(--chip-color, #6c5ce7) 15%, var(--bg-alt));
111
+ border: 1px solid color-mix(in srgb, var(--chip-color, #6c5ce7) 30%, var(--border));
112
112
  cursor: default;
113
113
  flex-shrink: 0;
114
114
  width: fit-content;
@@ -131,19 +131,22 @@
131
131
  font-size: 13px;
132
132
  font-weight: 600;
133
133
  white-space: nowrap;
134
+ line-height: 18px;
134
135
  }
135
136
 
136
137
  .input-mention-chip-remove {
137
138
  background: none;
138
139
  border: none;
139
- padding: 0 2px;
140
+ padding: 0;
140
141
  margin: 0;
141
142
  cursor: pointer;
142
143
  font-size: 15px;
143
- line-height: 1;
144
+ line-height: 18px;
144
145
  color: var(--text-dimmer);
145
146
  opacity: 0.6;
146
147
  transition: opacity 0.1s;
148
+ display: flex;
149
+ align-items: center;
147
150
  }
148
151
 
149
152
  .input-mention-chip-remove:hover {
@@ -474,6 +474,13 @@
474
474
 
475
475
  #config-chip .lucide { width: 10px; height: 10px; }
476
476
  #config-chip .config-chip-icon { display: none; }
477
+
478
+ @media (max-width: 1000px) {
479
+ #config-chip .config-chip-icon { display: inline-flex; width: 16px; height: 16px; }
480
+ #config-chip-label { display: none; }
481
+ #config-chip .lucide:last-child { display: none; }
482
+ #config-chip { padding: 0 6px; }
483
+ }
477
484
  #config-chip:hover { color: var(--text-secondary); background: rgba(var(--overlay-rgb),0.06); }
478
485
  #config-chip.active { color: var(--text-secondary); background: rgba(var(--overlay-rgb),0.06); }
479
486
 
@@ -1798,6 +1798,23 @@ body.wide-view .msg-assistant:hover {
1798
1798
  background: var(--bg-alt);
1799
1799
  }
1800
1800
 
1801
+ /* Grouped messages: same sender within same minute, hide avatar + header */
1802
+ body.wide-view .msg-user.grouped > .dm-bubble-avatar,
1803
+ body.wide-view .msg-assistant.grouped > .dm-bubble-avatar,
1804
+ body.mate-dm-active .msg-assistant.grouped > .dm-bubble-avatar {
1805
+ visibility: hidden;
1806
+ }
1807
+ body.wide-view .msg-user.grouped .dm-bubble-header,
1808
+ body.wide-view .msg-assistant.grouped .dm-bubble-header,
1809
+ body.mate-dm-active .msg-assistant.grouped .dm-bubble-header {
1810
+ display: none;
1811
+ }
1812
+ body.wide-view .msg-user.grouped,
1813
+ body.wide-view .msg-assistant.grouped,
1814
+ body.mate-dm-active .msg-assistant.grouped {
1815
+ padding-top: 1px;
1816
+ }
1817
+
1801
1818
  body.wide-view .msg-user {
1802
1819
  justify-content: flex-start;
1803
1820
  }