clay-server 4.3.0-beta.9 → 4.3.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.
@@ -358,10 +358,15 @@
358
358
  background: rgba(var(--overlay-rgb), 0.06);
359
359
  }
360
360
 
361
- /* Primary creation action + a labeled provider selector. */
361
+ .mobile-session-new:focus-visible {
362
+ outline: 2px solid var(--accent);
363
+ outline-offset: 2px;
364
+ }
365
+
366
+ /* Primary creation action with an adjacent icon-only provider selector. */
362
367
  .mobile-session-new-row {
363
368
  display: flex;
364
- gap: 6px;
369
+ gap: 0;
365
370
  padding: 6px 8px 8px;
366
371
  }
367
372
 
@@ -369,36 +374,43 @@
369
374
  flex: 1 1 auto;
370
375
  width: auto;
371
376
  margin-bottom: 0;
377
+ min-width: 0;
372
378
  padding: 10px 12px;
373
379
  border: 1px solid var(--border-subtle);
374
380
  border-radius: 8px;
375
381
  background: rgba(var(--overlay-rgb), 0.03);
376
382
  color: var(--text);
377
383
  gap: 8px;
384
+ border-radius: 8px 0 0 8px;
385
+ white-space: normal;
386
+ line-height: 1.2;
378
387
  }
379
388
  .mobile-session-new-row .mobile-session-new-provider {
380
- flex: 0 1 132px;
381
- width: 132px;
382
- min-width: 104px;
389
+ flex: 0 0 34px;
390
+ width: 34px;
391
+ min-width: 34px;
383
392
  margin-bottom: 0;
384
- padding: 6px 9px;
393
+ padding: 0;
385
394
  border: 1px solid var(--border-subtle);
386
- border-radius: 8px;
395
+ border-left-color: var(--border);
396
+ border-radius: 0 8px 8px 0;
387
397
  background: rgba(var(--overlay-rgb), 0.03);
388
398
  color: var(--text-muted);
389
- display: grid;
390
- gap: 2px;
391
- }
392
- .mobile-session-new-row .mobile-session-new-provider.expanded .session-create-provider-chevron svg {
393
- transform: rotate(180deg);
399
+ display: inline-flex;
400
+ align-items: center;
401
+ gap: 0;
402
+ justify-content: center;
394
403
  }
395
404
  .mobile-session-new-row .mobile-session-new-main:active,
396
405
  .mobile-session-new-row .mobile-session-new-provider:active {
397
406
  background: rgba(var(--overlay-rgb), 0.1);
398
407
  }
399
408
 
400
- .mobile-session-new-row .session-create-provider-label { font-size: 9px; }
401
- .mobile-session-new-row .session-create-provider-name { font-size: 12px; }
409
+ .mobile-session-new-row .session-create-provider-chevron .lucide,
410
+ .mobile-session-new-row .session-create-provider-chevron svg {
411
+ width: 14px;
412
+ height: 14px;
413
+ }
402
414
 
403
415
  .mobile-vendor-list {
404
416
  display: flex;
@@ -1262,77 +1262,81 @@
1262
1262
  opacity: 1;
1263
1263
  }
1264
1264
 
1265
- /* Primary creation action + a visibly grouped provider selector. */
1265
+ .session-top-action:focus-visible {
1266
+ outline: 2px solid var(--accent);
1267
+ outline-offset: 2px;
1268
+ }
1269
+
1270
+ /* Primary creation action with an adjacent icon-only provider selector. */
1266
1271
  .session-top-action-split {
1267
1272
  display: flex;
1268
- flex-wrap: wrap;
1273
+ flex-wrap: nowrap;
1269
1274
  align-items: stretch;
1270
- gap: 6px;
1275
+ gap: 0;
1271
1276
  min-width: 0;
1272
1277
  }
1273
1278
 
1274
1279
  .session-top-action-split .split-main {
1275
- flex: 1 1 110px;
1280
+ flex: 1 1 auto;
1276
1281
  width: auto;
1277
- min-width: 110px;
1278
- border: 1px solid color-mix(in srgb, var(--accent) 34%, transparent);
1279
- background: color-mix(in srgb, var(--accent) 13%, transparent);
1282
+ min-width: 0;
1283
+ padding: 0 9px;
1284
+ gap: 6px;
1285
+ font-size: 12px;
1286
+ line-height: 1.2;
1287
+ border: 1px solid var(--border-subtle);
1288
+ background: color-mix(in srgb, var(--sidebar-hover) 46%, transparent);
1280
1289
  color: var(--text);
1281
- font-weight: 600;
1282
- white-space: nowrap;
1290
+ font-weight: 500;
1291
+ white-space: normal;
1292
+ text-align: left;
1293
+ border-radius: 9px 0 0 9px;
1283
1294
  }
1284
1295
 
1285
1296
  .session-top-action-split .split-main:hover {
1286
- border-color: color-mix(in srgb, var(--accent) 50%, transparent);
1287
- background: color-mix(in srgb, var(--accent) 19%, transparent);
1297
+ border-color: var(--border);
1298
+ background: var(--sidebar-hover);
1288
1299
  }
1289
1300
 
1290
1301
  .session-top-action-split .split-provider {
1291
- flex: 1 1 104px;
1292
- width: auto;
1293
- min-width: 104px;
1294
- padding: 5px 8px;
1302
+ flex: 0 0 26px;
1303
+ width: 26px;
1304
+ min-width: 26px;
1305
+ padding: 0;
1295
1306
  border: 1px solid var(--border-subtle);
1296
- background: color-mix(in srgb, var(--sidebar-hover) 48%, transparent);
1297
- border-radius: 9px;
1298
- display: grid;
1299
- gap: 1px;
1300
- }
1301
-
1302
- .session-create-provider-label {
1303
- display: block;
1304
- color: var(--text-dimmer);
1305
- font-size: 9px;
1306
- font-weight: 600;
1307
- line-height: 1;
1308
- letter-spacing: 0.03em;
1309
- text-transform: uppercase;
1307
+ border-left-color: var(--border);
1308
+ background: color-mix(in srgb, var(--sidebar-hover) 46%, transparent);
1309
+ border-radius: 0 9px 9px 0;
1310
+ display: inline-flex;
1311
+ align-items: center;
1312
+ gap: 2px;
1313
+ justify-content: center;
1310
1314
  }
1311
1315
 
1312
- .session-create-provider-choice {
1313
- display: flex;
1314
- align-items: center;
1315
- gap: 5px;
1316
- min-width: 0;
1316
+ .session-top-action-split .split-provider:hover {
1317
+ background: var(--sidebar-hover);
1317
1318
  }
1318
1319
 
1319
- .session-create-provider-name {
1320
- overflow: hidden;
1321
- color: var(--text-secondary);
1322
- font-size: 11px;
1323
- font-weight: 600;
1324
- line-height: 1.2;
1325
- text-overflow: ellipsis;
1326
- white-space: nowrap;
1320
+ .session-create-provider-icon {
1321
+ width: 16px;
1322
+ height: 16px;
1323
+ margin-right: 0;
1324
+ border-radius: 4px;
1325
+ object-fit: cover;
1327
1326
  }
1328
1327
 
1329
1328
  .session-create-provider-chevron {
1330
1329
  display: inline-flex;
1331
- margin-left: auto;
1332
1330
  }
1333
1331
 
1334
- .session-create-provider[aria-expanded="true"] .session-create-provider-chevron svg {
1335
- transform: rotate(180deg);
1332
+ .session-create-provider-chevron .lucide,
1333
+ .session-create-provider-chevron svg {
1334
+ width: 14px;
1335
+ height: 14px;
1336
+ }
1337
+
1338
+ .session-create-provider[aria-expanded="true"] {
1339
+ background: var(--sidebar-hover);
1336
1340
  }
1337
1341
 
1338
1342
  .session-favorites-section {
@@ -2,6 +2,19 @@
2
2
 
3
3
  import { iconHtml } from './icons.js';
4
4
 
5
+ var SESSION_VENDOR_LABELS = {
6
+ claude: "Claude",
7
+ codex: "Codex",
8
+ antigravity: "Antigravity",
9
+ opencode: "OpenCode",
10
+ kimi: "Kimi",
11
+ grok: "Grok",
12
+ copilot: "Copilot",
13
+ qwen: "Qwen",
14
+ junie: "Junie",
15
+ kiro: "Kiro",
16
+ };
17
+
5
18
  export function renderSessionCreationCta(options) {
6
19
  var row = document.createElement("div");
7
20
  row.className = options.rowClass + " session-create-cta";
@@ -9,7 +22,10 @@ export function renderSessionCreationCta(options) {
9
22
  var createButton = document.createElement("button");
10
23
  createButton.className = options.createClass + " session-create-primary";
11
24
  createButton.type = "button";
12
- createButton.textContent = "Create session";
25
+ var vendorLabel = SESSION_VENDOR_LABELS[options.vendorKey] || options.vendorName;
26
+ createButton.innerHTML = '<img src="' + options.vendorAvatar +
27
+ '" class="' + options.iconClass + ' session-create-provider-icon" alt="">' +
28
+ '<span>Create new ' + vendorLabel + ' session</span>';
13
29
  createButton.title = options.createTitle;
14
30
  createButton.setAttribute("aria-label", options.createTitle);
15
31
  createButton.addEventListener("click", options.onCreate);
@@ -19,13 +35,10 @@ export function renderSessionCreationCta(options) {
19
35
  providerButton.className = options.providerClass + " session-create-provider";
20
36
  providerButton.type = "button";
21
37
  providerButton.title = options.providerTitle;
22
- providerButton.setAttribute("aria-label", "AI provider: " + options.vendorName + ". " + options.providerTitle);
38
+ providerButton.setAttribute("aria-label", "Switch AI provider (current: " + options.vendorName + ")");
23
39
  providerButton.setAttribute("aria-expanded", "false");
24
40
  providerButton.setAttribute("aria-controls", options.menuId);
25
- providerButton.innerHTML = '<span class="session-create-provider-label">AI provider</span>' +
26
- '<span class="session-create-provider-choice"><img src="' + options.vendorAvatar +
27
- '" class="' + options.iconClass + ' session-create-provider-icon" alt=""><span class="session-create-provider-name">' +
28
- options.vendorName + '</span>' + iconHtml("chevron-down", "session-create-provider-chevron") + '</span>';
41
+ providerButton.innerHTML = iconHtml("chevron-down", "session-create-provider-chevron");
29
42
  providerButton.addEventListener("click", options.onProvider);
30
43
  row.appendChild(providerButton);
31
44
 
@@ -689,10 +689,11 @@ export function renderMobileSessionsInto(container) {
689
689
  createClass: "mobile-session-new mobile-session-new-main",
690
690
  providerClass: "mobile-session-new mobile-session-new-provider",
691
691
  iconClass: "mobile-session-new-icon",
692
+ vendorKey: mobileDefaultVendor,
692
693
  vendorName: mobileVendorName,
693
694
  vendorAvatar: VENDOR_AVATARS[mobileDefaultVendor] || VENDOR_AVATARS.claude,
694
695
  createTitle: mobileCreateTitle,
695
- providerTitle: "Choose an AI provider",
696
+ providerTitle: "Switch AI provider (current: " + mobileVendorName + ")",
696
697
  menuId: vendorList.id,
697
698
  onCreate: function () { startNewSession(mobileDefaultVendor); closeMobileSheet(); },
698
699
  onProvider: function () {
@@ -372,10 +372,11 @@ export function renderSessionTopActions() {
372
372
  createClass: "session-top-action split-main",
373
373
  providerClass: "session-top-action split-provider",
374
374
  iconClass: "session-top-action-icon",
375
+ vendorKey: defaultVendor,
375
376
  vendorName: vendorName,
376
377
  vendorAvatar: VENDOR_AVATARS[defaultVendor] || VENDOR_AVATARS.claude,
377
378
  createTitle: createTitle,
378
- providerTitle: "Choose an AI provider or launch mode",
379
+ providerTitle: "Switch AI provider (current: " + vendorName + ")",
379
380
  menuId: "session-new-menu",
380
381
  onCreate: function () { startNewSession(defaultVendor); },
381
382
  onProvider: function (e) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clay-server",
3
- "version": "4.3.0-beta.9",
3
+ "version": "4.3.0",
4
4
  "description": "Self-hosted team workspace for Claude Code and Codex. Multi-user, browser-based, with persistent AI mates.",
5
5
  "bin": {
6
6
  "clay-server": "./bin/cli.js"