clay-server 4.3.0-beta.2 → 4.3.0-beta.4
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.
|
@@ -518,7 +518,7 @@ button.top-bar-pill.pill-accent:hover { background: color-mix(in srgb, var(--acc
|
|
|
518
518
|
.popover-copy:hover { color: var(--text); border-color: var(--text-dimmer); }
|
|
519
519
|
.popover-copy.copied { color: var(--success); border-color: var(--success); }
|
|
520
520
|
|
|
521
|
-
/*
|
|
521
|
+
/* Quiet native toolbar control for session permission mode. */
|
|
522
522
|
.session-permission-control {
|
|
523
523
|
display: inline-flex;
|
|
524
524
|
align-items: center;
|
|
@@ -535,35 +535,40 @@ button.top-bar-pill.pill-accent:hover { background: color-mix(in srgb, var(--acc
|
|
|
535
535
|
flex: 0 0 auto;
|
|
536
536
|
gap: 1px;
|
|
537
537
|
padding: 2px;
|
|
538
|
-
border: 1px solid color-mix(in srgb, var(--border
|
|
539
|
-
border-radius:
|
|
540
|
-
background: color-mix(in srgb, var(--
|
|
541
|
-
box-shadow: inset 0 1px 0 rgba(255,255,255,.04), 0 2px 8px rgba(0,0,0,.12);
|
|
538
|
+
border: 1px solid color-mix(in srgb, var(--border) 82%, transparent);
|
|
539
|
+
border-radius: 8px;
|
|
540
|
+
background: color-mix(in srgb, var(--bg-alt) 72%, transparent);
|
|
542
541
|
}
|
|
543
542
|
.session-permission-segmented button {
|
|
544
543
|
position: relative;
|
|
545
|
-
flex: 0 0
|
|
544
|
+
flex: 0 0 48px;
|
|
545
|
+
width: 48px;
|
|
546
|
+
height: 22px;
|
|
546
547
|
border: 0;
|
|
547
548
|
border-radius: 7px;
|
|
548
|
-
padding: 4px
|
|
549
|
-
color: var(--text-
|
|
549
|
+
padding: 3px 4px;
|
|
550
|
+
color: var(--text-secondary);
|
|
550
551
|
background: transparent;
|
|
551
552
|
font: inherit;
|
|
553
|
+
font-weight: 500;
|
|
552
554
|
font-size: 11px;
|
|
553
555
|
line-height: 1;
|
|
554
556
|
white-space: nowrap;
|
|
555
557
|
cursor: pointer;
|
|
556
|
-
transition: color .15s ease, background .15s ease, box-shadow .15s ease;
|
|
557
|
-
}
|
|
558
|
-
.session-permission-segmented button:hover:not(:disabled) { color: var(--text
|
|
559
|
-
.session-permission-segmented button:focus-visible { outline: 2px solid var(--accent
|
|
560
|
-
.session-permission-segmented button.active { background: var(--
|
|
561
|
-
.session-permission-segmented button
|
|
558
|
+
transition: color .15s ease, background .15s ease, box-shadow .15s ease, border-color .15s ease;
|
|
559
|
+
}
|
|
560
|
+
.session-permission-segmented button:hover:not(:disabled) { color: var(--text); background: color-mix(in srgb, var(--bg) 76%, transparent); }
|
|
561
|
+
.session-permission-segmented button:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; z-index: 1; }
|
|
562
|
+
.session-permission-segmented button.active { border: 1px solid var(--border); background: var(--input-bg); color: var(--text); font-weight: var(--font-weight-heading, 600); box-shadow: 0 1px 2px rgba(var(--shadow-rgb), .12); }
|
|
563
|
+
:root.light-theme .session-permission-segmented button.active { background: var(--bg); }
|
|
564
|
+
.session-permission-segmented button:disabled { cursor: not-allowed; }
|
|
565
|
+
.session-permission-control:not(.permission-pending) .session-permission-segmented button:disabled { color: var(--text-muted); opacity: .65; }
|
|
562
566
|
.session-permission-control.permission-pending .session-permission-segmented button:disabled { cursor: wait; }
|
|
563
|
-
.session-permission-segmented button.pending { color:
|
|
564
|
-
.permission-
|
|
567
|
+
.session-permission-segmented button.pending { color: var(--text); background: color-mix(in srgb, var(--bg) 42%, transparent); }
|
|
568
|
+
.session-permission-segmented button.pending .permission-label { visibility: hidden; }
|
|
569
|
+
.permission-spinner { position: absolute; inset: 50% auto auto 50%; display: block; visibility: hidden; width: 10px; height: 10px; transform: translate(-50%, -50%); border: 1.5px solid currentColor; border-right-color: transparent; border-radius: 50%; }
|
|
565
570
|
.session-permission-segmented button.pending .permission-spinner { visibility: visible; animation: permission-spin .7s linear infinite; }
|
|
566
|
-
@keyframes permission-spin { to { transform: rotate(360deg); } }
|
|
571
|
+
@keyframes permission-spin { to { transform: translate(-50%, -50%) rotate(360deg); } }
|
|
567
572
|
.session-permission-status {
|
|
568
573
|
flex: 0 1 auto;
|
|
569
574
|
min-width: 0;
|
|
@@ -592,12 +597,8 @@ button.top-bar-pill.pill-accent:hover { background: color-mix(in srgb, var(--acc
|
|
|
592
597
|
}
|
|
593
598
|
.permission-runtime-fallback .session-permission-status { color: var(--warning, #d49a55); }
|
|
594
599
|
.permission-globally-forced .session-permission-status { color: var(--warning, #d49a55); }
|
|
595
|
-
.permission-label-short { display: none; }
|
|
596
600
|
@media (max-width: 760px) {
|
|
597
|
-
.permission-label-long { display: none; }
|
|
598
|
-
.permission-label-short { display: inline; }
|
|
599
601
|
.session-permission-control { column-gap: 4px; }
|
|
600
|
-
.session-permission-segmented button { padding-inline: 7px; }
|
|
601
602
|
.session-permission-status {
|
|
602
603
|
max-width: 132px;
|
|
603
604
|
font-size: 9px;
|
package/lib/public/css/pane.css
CHANGED
|
@@ -365,31 +365,35 @@ body.pane-mode #input-area {
|
|
|
365
365
|
line-height: 1;
|
|
366
366
|
}
|
|
367
367
|
|
|
368
|
-
/* Header-scoped
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
368
|
+
/* Header-scoped selectors keep the compact permission control clear of the
|
|
369
|
+
title and close affordance while preserving the shared header rhythm. */
|
|
370
|
+
.split-pane-header {
|
|
371
|
+
height: 28px;
|
|
372
|
+
min-height: 28px;
|
|
373
|
+
}
|
|
374
|
+
|
|
372
375
|
.split-pane-header .split-pane-full-access {
|
|
373
|
-
height:
|
|
376
|
+
height: 24px;
|
|
374
377
|
align-self: center;
|
|
375
378
|
margin-left: 0;
|
|
376
379
|
padding: 0;
|
|
377
380
|
gap: 4px;
|
|
378
|
-
font-size:
|
|
381
|
+
font-size: 11px;
|
|
379
382
|
letter-spacing: 0.02em;
|
|
380
383
|
flex-wrap: nowrap;
|
|
381
384
|
flex: 0 0 auto;
|
|
382
|
-
overflow: hidden;
|
|
383
385
|
}
|
|
384
386
|
|
|
385
387
|
.split-pane-header .session-permission-segmented button {
|
|
386
|
-
min-height:
|
|
387
|
-
|
|
388
|
-
font-size:
|
|
388
|
+
min-height: 20px;
|
|
389
|
+
height: 20px;
|
|
390
|
+
font-size: 11px;
|
|
389
391
|
}
|
|
390
392
|
|
|
391
|
-
.split-pane-header .permission-
|
|
392
|
-
|
|
393
|
+
.split-pane-header .session-permission-segmented {
|
|
394
|
+
height: 24px;
|
|
395
|
+
padding: 1px;
|
|
396
|
+
}
|
|
393
397
|
|
|
394
398
|
.split-pane-header .session-permission-status {
|
|
395
399
|
flex: 0 0 auto;
|
package/lib/public/index.html
CHANGED
|
@@ -410,9 +410,9 @@
|
|
|
410
410
|
<button id="header-info-btn" type="button" title="Session info"><i data-lucide="info"></i></button>
|
|
411
411
|
<div id="header-full-access-btn" class="session-permission-control hidden" role="group" aria-label="Session permission mode">
|
|
412
412
|
<div class="session-permission-segmented">
|
|
413
|
-
<button type="button" data-permission-mode="default"><span class="permission-label">Ask</span><span class="permission-spinner" aria-hidden="true"></span></button>
|
|
414
|
-
<button type="button" data-permission-mode="auto"><span class="permission-label">Auto</span><span class="permission-spinner" aria-hidden="true"></span></button>
|
|
415
|
-
<button type="button" data-permission-mode="bypassPermissions" aria-label="Skip permissions" title="Skip permissions"><span class="permission-label
|
|
413
|
+
<button type="button" data-permission-mode="default" aria-label="Ask permissions" title="Ask permissions"><span class="permission-label">Ask</span><span class="permission-spinner" aria-hidden="true"></span></button>
|
|
414
|
+
<button type="button" data-permission-mode="auto" aria-label="Auto permissions" title="Auto permissions"><span class="permission-label">Auto</span><span class="permission-spinner" aria-hidden="true"></span></button>
|
|
415
|
+
<button type="button" data-permission-mode="bypassPermissions" aria-label="Skip permissions" title="Skip permissions"><span class="permission-label">Skip</span><span class="permission-spinner" aria-hidden="true"></span></button>
|
|
416
416
|
</div>
|
|
417
417
|
<span class="session-permission-status hidden" aria-live="polite"></span>
|
|
418
418
|
</div>
|
|
@@ -841,6 +841,7 @@ export function processMessage(msg) {
|
|
|
841
841
|
var _effectiveTerminalId = (typeof msg.runtimeTerminalId === "number")
|
|
842
842
|
? msg.runtimeTerminalId
|
|
843
843
|
: (typeof msg.terminalId === "number" ? msg.terminalId : null);
|
|
844
|
+
store.set({ activeSessionId: msg.id, sessionOriginId: msg.sessionOriginId || null, cliSessionId: msg.cliSessionId || null, currentModel: msg.model || "", currentEffort: msg.effort || store.get('currentEffort'), vendorCapabilities: msg.capabilities || {}, sessionIsProcessing: !!msg.isProcessing, activeSessionMode: _effectiveMode, activeTerminalId: _effectiveTerminalId, sessionHasHistory: !!msg.hasHistory, sessionVendorBound: !!msg.vendor || !!msg.hasHistory, sessionFullAccess: msg.permissionMode === "bypassPermissions", currentMode: msg.permissionMode || store.get('currentMode'), effectivePermissionMode: msg.effectivePermissionMode || null, permissionCapabilities: msg.permissionCapabilities || { auto: false, mcpOverride: false }, mcpPermissionModeOverrides: msg.mcpPermissionModeOverrides || {} });
|
|
844
845
|
handleScheduledTaskSessionSwitched(msg);
|
|
845
846
|
requestLoopInterviewState();
|
|
846
847
|
activateDeliverySession(msg.id, msg.cliSessionId || null, msg.sessionOriginId || null);
|
|
@@ -46,9 +46,9 @@ export function createPermissionControl(className, ariaLabel) {
|
|
|
46
46
|
control.setAttribute("role", "group");
|
|
47
47
|
control.setAttribute("aria-label", ariaLabel || "Session permission mode");
|
|
48
48
|
control.innerHTML = '<div class="session-permission-segmented">' +
|
|
49
|
-
'<button type="button" data-permission-mode="default"><span class="permission-label">Ask</span><span class="permission-spinner" aria-hidden="true"></span></button>' +
|
|
50
|
-
'<button type="button" data-permission-mode="auto"><span class="permission-label">Auto</span><span class="permission-spinner" aria-hidden="true"></span></button>' +
|
|
51
|
-
'<button type="button" data-permission-mode="bypassPermissions" aria-label="Skip permissions" title="Skip permissions"><span class="permission-label
|
|
49
|
+
'<button type="button" data-permission-mode="default" aria-label="Ask permissions" title="Ask permissions"><span class="permission-label">Ask</span><span class="permission-spinner" aria-hidden="true"></span></button>' +
|
|
50
|
+
'<button type="button" data-permission-mode="auto" aria-label="Auto permissions" title="Auto permissions"><span class="permission-label">Auto</span><span class="permission-spinner" aria-hidden="true"></span></button>' +
|
|
51
|
+
'<button type="button" data-permission-mode="bypassPermissions" aria-label="Skip permissions" title="Skip permissions"><span class="permission-label">Skip</span><span class="permission-spinner" aria-hidden="true"></span></button>' +
|
|
52
52
|
'</div><span class="session-permission-status" aria-live="polite"></span>';
|
|
53
53
|
control.querySelector(".session-permission-status").setAttribute("aria-atomic", "true");
|
|
54
54
|
return control;
|
|
@@ -101,6 +101,7 @@ export function renderPermissionControl(control, state) {
|
|
|
101
101
|
control.classList.toggle("permission-globally-forced", globallyForced);
|
|
102
102
|
control.classList.toggle("permission-runtime-fallback", state.permissionMode === "auto" && !!state.effectivePermissionMode && state.effectivePermissionMode !== "auto");
|
|
103
103
|
control.setAttribute("aria-busy", pending ? "true" : "false");
|
|
104
|
+
var buttonTitles = { default: "Ask permissions", auto: "Auto permissions", bypassPermissions: "Skip permissions" };
|
|
104
105
|
var buttons = control.querySelectorAll("[data-permission-mode]");
|
|
105
106
|
for (var i = 0; i < buttons.length; i++) {
|
|
106
107
|
var mode = buttons[i].dataset.permissionMode;
|
|
@@ -113,8 +114,7 @@ export function renderPermissionControl(control, state) {
|
|
|
113
114
|
buttons[i].classList.toggle("pending", requested);
|
|
114
115
|
buttons[i].setAttribute("aria-pressed", selected ? "true" : "false");
|
|
115
116
|
buttons[i].setAttribute("aria-busy", requested ? "true" : "false");
|
|
116
|
-
|
|
117
|
-
else buttons[i].removeAttribute("title");
|
|
117
|
+
buttons[i].title = unsupported ? "Auto permissions are unavailable for this Claude session." : buttonTitles[mode];
|
|
118
118
|
}
|
|
119
119
|
var status = control.querySelector(".session-permission-status");
|
|
120
120
|
if (status) {
|
package/package.json
CHANGED