clay-server 2.26.0-beta.8 → 2.26.0

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.
@@ -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 {
@@ -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
  }
@@ -342,7 +342,6 @@
342
342
  margin-bottom: 4px;
343
343
  background: none;
344
344
  border: none;
345
- border-bottom: 1px solid var(--border-subtle);
346
345
  color: var(--accent);
347
346
  font-family: "Pretendard", system-ui, sans-serif;
348
347
  font-size: 15px;
@@ -351,6 +350,9 @@
351
350
  text-align: left;
352
351
  -webkit-tap-highlight-color: transparent;
353
352
  }
353
+ .mobile-session-new:last-of-type {
354
+ border-bottom: 1px solid var(--border-subtle);
355
+ }
354
356
 
355
357
  .mobile-session-new:active {
356
358
  background: rgba(var(--overlay-rgb), 0.06);
@@ -197,8 +197,13 @@
197
197
  }
198
198
 
199
199
  .context-card-header .context-card-icon {
200
- font-size: 13px;
201
200
  opacity: 0.7;
201
+ display: inline-flex;
202
+ align-items: center;
203
+ }
204
+ .context-card-header .context-card-icon .lucide {
205
+ width: 14px;
206
+ height: 14px;
202
207
  }
203
208
 
204
209
  .context-card-screenshot {
@@ -226,10 +231,16 @@
226
231
 
227
232
  .context-card-meta {
228
233
  display: flex;
229
- justify-content: space-between;
230
- align-items: baseline;
234
+ align-items: center;
231
235
  margin-top: 8px;
232
- gap: 12px;
236
+ gap: 6px;
237
+ }
238
+ .context-card-favicon {
239
+ width: 14px;
240
+ height: 14px;
241
+ border-radius: 2px;
242
+ flex-shrink: 0;
243
+ object-fit: contain;
233
244
  }
234
245
 
235
246
  .context-card-title {
@@ -240,6 +251,8 @@
240
251
  text-overflow: ellipsis;
241
252
  flex: 1;
242
253
  min-width: 0;
254
+ flex: 1;
255
+ min-width: 0;
243
256
  }
244
257
 
245
258
  .context-card-domain {
@@ -256,11 +256,11 @@
256
256
  <button id="mate-sticky-notes-btn"><i data-lucide="sticky-note"></i> <span>Sticky Notes</span></button>
257
257
  <button id="mate-skills-btn"><i data-lucide="puzzle"></i> <span>Skills</span></button>
258
258
  <button id="mate-scheduler-btn"><i data-lucide="calendar-clock"></i> <span>Scheduled Tasks</span></button>
259
- <button id="mate-debate-btn"><i data-lucide="mic"></i> <span>Debate</span></button>
260
259
  </div>
261
260
  <div id="mate-sidebar-conversations">
262
261
  <div class="mate-sidebar-sessions-header">
263
262
  <span>Conversations</span>
263
+ <button id="mate-debate-btn" class="mate-debate-pill" title="New Debate"><i data-lucide="mic"></i> Debate</button>
264
264
  <div class="mate-sidebar-actions">
265
265
  <button id="mate-search-session-btn" type="button" title="Search sessions"><i data-lucide="search"></i></button>
266
266
  <button id="mate-new-session-btn" type="button" title="New session"><i data-lucide="plus"></i></button>
@@ -332,7 +332,6 @@
332
332
  <button id="header-info-btn" type="button" title="Session info"><i data-lucide="info"></i></button>
333
333
  <button id="header-rename-btn" type="button" title="Rename session"><i data-lucide="pencil"></i></button>
334
334
  <div id="mate-mobile-title" class="mate-mobile-title hidden">
335
- <button id="mate-mobile-back" class="mate-mobile-back" type="button" aria-label="Back"><i data-lucide="chevron-left"></i></button>
336
335
  <img id="mate-mobile-avatar" class="mate-mobile-avatar" alt="">
337
336
  <span id="mate-mobile-name" class="mate-mobile-name"></span>
338
337
  </div>
@@ -1507,30 +1506,38 @@
1507
1506
  </div>
1508
1507
  </div>
1509
1508
 
1510
- <!-- Debate Modal -->
1509
+ <!-- Debate Modal (Wizard) -->
1511
1510
  <div id="debate-modal" class="hidden">
1512
1511
  <div class="debate-modal-backdrop"></div>
1513
1512
  <div class="debate-modal-card">
1514
1513
  <div class="debate-modal-header">
1515
1514
  <span><i data-lucide="mic"></i> New Debate</span>
1515
+ <div class="debate-wizard-steps">
1516
+ <span class="debate-step-dot active" data-step="0"></span>
1517
+ <span class="debate-step-dot" data-step="1"></span>
1518
+ </div>
1516
1519
  <button id="debate-modal-close">&times;</button>
1517
1520
  </div>
1518
- <div class="debate-modal-body">
1519
- <label class="debate-field-label" for="debate-topic-input">Topic <span class="debate-field-req">*</span></label>
1520
- <textarea id="debate-topic-input" rows="2" placeholder="e.g. Should AI development be regulated?"></textarea>
1521
- <label class="debate-field-label" for="debate-panel-list">Select panelists</label>
1522
- <div id="debate-panel-list" class="debate-panel-list"></div>
1523
- <div id="debate-skip-setup-row" class="debate-skip-setup-row hidden">
1524
- <label class="debate-toggle-label">
1525
- <input type="checkbox" id="debate-skip-setup-toggle">
1526
- <span>Skip setup</span>
1527
- <span class="debate-skip-setup-hint">Moderator generates the brief automatically from conversation context</span>
1528
- </label>
1521
+ <!-- Step 0: Topic -->
1522
+ <div class="debate-wizard-page active" data-step="0">
1523
+ <div class="debate-modal-body">
1524
+ <label class="debate-field-label" for="debate-topic-input">Topic <span class="debate-field-req">*</span></label>
1525
+ <textarea id="debate-topic-input" rows="2" placeholder="e.g. Should AI development be regulated?"></textarea>
1526
+ </div>
1527
+ </div>
1528
+ <!-- Step 1: Panelists -->
1529
+ <div class="debate-wizard-page" data-step="1">
1530
+ <div class="debate-modal-body">
1531
+ <label class="debate-field-label" for="debate-panel-list">Select panelists</label>
1532
+ <div id="debate-panel-list" class="debate-panel-list"></div>
1529
1533
  </div>
1530
1534
  </div>
1531
1535
  <div class="debate-modal-footer">
1532
1536
  <button id="debate-modal-cancel" class="debate-btn-cancel">Cancel</button>
1533
- <button id="debate-modal-start" class="debate-btn-start">Start</button>
1537
+ <button id="debate-modal-back" class="debate-btn-back hidden">Back</button>
1538
+ <button id="debate-modal-quick" class="debate-btn-quick hidden">Quick Start</button>
1539
+ <button id="debate-modal-next" class="debate-btn-next hidden">Choose Panel</button>
1540
+ <button id="debate-modal-start" class="debate-btn-start hidden">Design Debate</button>
1534
1541
  </div>
1535
1542
  </div>
1536
1543
  </div>
@@ -2033,6 +2040,7 @@
2033
2040
  <script src="https://cdn.jsdelivr.net/npm/@xterm/xterm@5/lib/xterm.min.js"></script>
2034
2041
  <script src="https://cdn.jsdelivr.net/npm/@xterm/addon-fit@0/lib/addon-fit.min.js"></script>
2035
2042
  <script src="https://cdn.jsdelivr.net/npm/@xterm/addon-web-links@0/lib/addon-web-links.min.js"></script>
2043
+ <script src="https://cdn.jsdelivr.net/npm/@xterm/addon-webgl@0/lib/addon-webgl.min.js"></script>
2036
2044
  <script type="module" src="app.js"></script>
2037
2045
  <div id="pwa-install-modal" class="pwa-modal hidden">
2038
2046
  <div class="pwa-modal-backdrop"></div>
@@ -223,12 +223,27 @@ function renderPicker() {
223
223
  var tabSection = document.getElementById("context-picker-tabs");
224
224
  tabSection.innerHTML = "";
225
225
 
226
- if (browserTabList.length > 0) {
227
- var tabLabel = document.createElement("div");
228
- tabLabel.className = "context-picker-section-label";
229
- tabLabel.textContent = "Browser Tabs";
230
- tabSection.appendChild(tabLabel);
231
-
226
+ var tabLabel = document.createElement("div");
227
+ tabLabel.className = "context-picker-section-label";
228
+ tabLabel.textContent = "Browser Tabs";
229
+ tabSection.appendChild(tabLabel);
230
+
231
+ if (browserTabList.length === 0) {
232
+ // Extension not connected: show notice with setup button
233
+ var notice = document.createElement("div");
234
+ notice.className = "context-picker-ext-notice";
235
+ notice.innerHTML =
236
+ '<span class="context-picker-ext-notice-text">Chrome extension required to access browser tabs.</span>' +
237
+ '<button class="context-picker-ext-btn" type="button"><i data-lucide="puzzle"></i> Setup Extension</button>';
238
+ var setupBtn = notice.querySelector(".context-picker-ext-btn");
239
+ setupBtn.addEventListener("click", function (e) {
240
+ e.stopPropagation();
241
+ closePicker();
242
+ var extPill = document.getElementById("ext-pill");
243
+ if (extPill) extPill.click();
244
+ });
245
+ tabSection.appendChild(notice);
246
+ } else {
232
247
  for (var j = 0; j < browserTabList.length; j++) {
233
248
  var tab = browserTabList[j];
234
249
  var tabSourceId = "tab:" + tab.id;