clay-server 4.0.0-beta.8 → 4.0.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.
- package/lib/capsule-display-floor.js +51 -0
- package/lib/capsule-frame-server.js +255 -0
- package/lib/capsule-mate-turn.js +105 -0
- package/lib/capsule-pig-logic.js +300 -0
- package/lib/capsule-server-runtimes.js +39 -0
- package/lib/capsules/pig/display.js +198 -0
- package/lib/capsules/pig/manifest.json +9 -0
- package/lib/capsules/pig/ui.json +84 -0
- package/lib/config.js +25 -1
- package/lib/daemon-projects.js +13 -8
- package/lib/daemon.js +127 -14
- package/lib/git-cli.js +95 -1
- package/lib/knowledge-import.js +436 -0
- package/lib/knowledge-record-store.js +188 -0
- package/lib/knowledge-search.js +240 -0
- package/lib/mate-knowledge-mcp-server.js +151 -0
- package/lib/mate-knowledge-migration.js +283 -0
- package/lib/mate-knowledge-service.js +488 -0
- package/lib/mate-knowledge-sync.js +482 -0
- package/lib/migrate-single-user.js +2 -0
- package/lib/notes-lifecycle.js +149 -0
- package/lib/notes.js +60 -3
- package/lib/os-users.js +3 -1
- package/lib/project-capsule-catalog.js +9 -1
- package/lib/project-capsule-turn.js +96 -0
- package/lib/project-connection.js +15 -1
- package/lib/project-file-history.js +223 -0
- package/lib/project-file-watch.js +77 -49
- package/lib/project-filesystem.js +31 -220
- package/lib/project-http.js +15 -1
- package/lib/project-knowledge.js +22 -0
- package/lib/project-log-context.js +172 -0
- package/lib/project-log-feedback-delivery.js +118 -0
- package/lib/project-logs-comments.js +137 -0
- package/lib/project-logs-context-state.js +42 -0
- package/lib/project-logs-mcp-server.js +328 -0
- package/lib/project-logs-query.js +185 -0
- package/lib/project-logs-root.js +75 -0
- package/lib/project-logs-schema.js +259 -0
- package/lib/project-logs-service.js +463 -0
- package/lib/project-logs-snapshot.js +205 -0
- package/lib/project-logs-store.js +495 -0
- package/lib/project-logs-versioning.js +132 -0
- package/lib/project-logs.js +400 -0
- package/lib/project-mate-interaction.js +14 -0
- package/lib/project-mate-knowledge.js +110 -0
- package/lib/project-memory.js +22 -0
- package/lib/project-message-delivery.js +70 -0
- package/lib/project-pair-lifecycle.js +460 -0
- package/lib/project-request-access.js +66 -0
- package/lib/project-session-handoff.js +1 -1
- package/lib/project-session-notes.js +64 -13
- package/lib/project-session-pair.js +159 -146
- package/lib/project-session-spawn.js +1 -1
- package/lib/project-sessions.js +58 -13
- package/lib/project-user-message.js +53 -4
- package/lib/project-worker-permission.js +430 -0
- package/lib/project-worker-proposal.js +208 -62
- package/lib/project.js +185 -6
- package/lib/public/app.js +63 -35
- package/lib/public/css/admin.css +2 -2
- package/lib/public/css/capsule-ui.css +38 -0
- package/lib/public/css/command-palette.css +19 -9
- package/lib/public/css/git-placard.css +154 -0
- package/lib/public/css/home-hub.css +4 -0
- package/lib/public/css/home-session-actions.css +66 -0
- package/lib/public/css/home-sidebar.css +66 -0
- package/lib/public/css/input.css +84 -3
- package/lib/public/css/messages.css +40 -1
- package/lib/public/css/mobile-nav.css +80 -0
- package/lib/public/css/notifications-center.css +67 -0
- package/lib/public/css/pane.css +97 -10
- package/lib/public/css/project-logs.css +198 -0
- package/lib/public/css/scheduler.css +1 -1
- package/lib/public/css/session-actions.css +16 -101
- package/lib/public/css/sidebar.css +103 -0
- package/lib/public/css/sticky-notes.css +237 -229
- package/lib/public/css/worker-proposal.css +36 -3
- package/lib/public/index.html +43 -11
- package/lib/public/modules/admin.js +8 -8
- package/lib/public/modules/app-connection.js +124 -6
- package/lib/public/modules/app-home-hub.js +12 -8
- package/lib/public/modules/app-message-cards.js +2 -1
- package/lib/public/modules/app-messages.js +92 -11
- package/lib/public/modules/app-misc.js +2 -14
- package/lib/public/modules/app-notifications.js +11 -7
- package/lib/public/modules/app-panels.js +3 -2
- package/lib/public/modules/app-projects.js +56 -18
- package/lib/public/modules/app-rendering.js +1 -0
- package/lib/public/modules/capsule-preference.js +44 -0
- package/lib/public/modules/chat-bubble-renderer.js +1 -1
- package/lib/public/modules/clay-log-links.js +70 -0
- package/lib/public/modules/command-palette.js +52 -15
- package/lib/public/modules/context-sources.js +0 -3
- package/lib/public/modules/git-agent-sessions.js +85 -0
- package/lib/public/modules/git-panel.js +111 -84
- package/lib/public/modules/git-placard.js +161 -0
- package/lib/public/modules/home-chat-empty-state.js +39 -0
- package/lib/public/modules/home-chat-identity.js +9 -0
- package/lib/public/modules/home-conversations-sheet.js +102 -48
- package/lib/public/modules/home-mate-chat.js +15 -35
- package/lib/public/modules/home-session-actions.js +6 -0
- package/lib/public/modules/home-sidebar-chat-list.js +101 -41
- package/lib/public/modules/home-sidebar.js +7 -0
- package/lib/public/modules/home-surface-boot.js +7 -3
- package/lib/public/modules/home-tool-frame.js +182 -0
- package/lib/public/modules/home-tools.js +138 -1
- package/lib/public/modules/input.js +38 -7
- package/lib/public/modules/markdown.js +2 -0
- package/lib/public/modules/mate-sidebar.js +0 -8
- package/lib/public/modules/message-delivery.js +97 -0
- package/lib/public/modules/paste-modal.js +84 -0
- package/lib/public/modules/project-activation.js +45 -0
- package/lib/public/modules/project-logs-render.js +405 -0
- package/lib/public/modules/project-logs.js +461 -0
- package/lib/public/modules/project-removal-target.js +26 -0
- package/lib/public/modules/scheduler.js +17 -3
- package/lib/public/modules/session-actions.js +29 -105
- package/lib/public/modules/session-hierarchy.js +54 -0
- package/lib/public/modules/sidebar-mobile.js +40 -15
- package/lib/public/modules/sidebar-session-hierarchy.js +214 -0
- package/lib/public/modules/sidebar-sessions.js +77 -11
- package/lib/public/modules/sidebar.js +17 -5
- package/lib/public/modules/split-group-helpers.js +8 -0
- package/lib/public/modules/split-pair-ui.js +15 -4
- package/lib/public/modules/split-view.js +5 -2
- package/lib/public/modules/split-worker-runtime.js +24 -0
- package/lib/public/modules/sticky-note-markdown.js +5 -0
- package/lib/public/modules/sticky-notes-browser.js +326 -0
- package/lib/public/modules/sticky-notes-card.js +360 -0
- package/lib/public/modules/sticky-notes-editor.js +291 -0
- package/lib/public/modules/sticky-notes-shared.js +90 -0
- package/lib/public/modules/sticky-notes.js +170 -946
- package/lib/public/modules/thinking-lifecycle.js +175 -0
- package/lib/public/modules/thinking-summary.js +28 -0
- package/lib/public/modules/thinking-view.js +75 -0
- package/lib/public/modules/tool-palette-order.js +143 -0
- package/lib/public/modules/tool-palette-overlays.js +159 -0
- package/lib/public/modules/tool-palette.js +21 -188
- package/lib/public/modules/tools.js +31 -123
- package/lib/public/modules/update-snooze.js +169 -0
- package/lib/public/modules/user-settings.js +4 -0
- package/lib/public/modules/worker-pane-lock.js +176 -0
- package/lib/public/modules/worker-proposal-state.js +16 -0
- package/lib/public/modules/worker-proposal.js +49 -20
- package/lib/public/style.css +3 -1
- package/lib/sdk-bridge.js +135 -46
- package/lib/sdk-message-processor.js +36 -19
- package/lib/server-experimental-settings.js +49 -0
- package/lib/server-global-ws.js +11 -0
- package/lib/server-home-chat-events.js +31 -1
- package/lib/server-home-chat.js +27 -4
- package/lib/server-home-clay-entry.js +1 -1
- package/lib/server-home-clay-session-links.js +34 -5
- package/lib/server-settings.js +5 -0
- package/lib/server-tools.js +127 -9
- package/lib/server.js +137 -22
- package/lib/session-driver-eligibility.js +38 -0
- package/lib/session-driver-orchestration.js +31 -0
- package/lib/session-hygiene.js +3 -0
- package/lib/session-notes-mcp-server.js +25 -5
- package/lib/session-pair-factory.js +247 -0
- package/lib/session-pair-mcp-server.js +46 -8
- package/lib/session-pair-prompts.js +79 -0
- package/lib/session-pair-turn-control.js +153 -0
- package/lib/session-provenance.js +119 -0
- package/lib/session-spawn-mcp-server.js +1 -1
- package/lib/session-split-groups.js +4 -1
- package/lib/session-title-policy.js +60 -0
- package/lib/session-visibility.js +41 -0
- package/lib/sessions.js +57 -10
- package/lib/tools-registry.js +89 -10
- package/lib/update-snooze.js +437 -0
- package/lib/users-experimental-preferences.js +30 -0
- package/lib/users-permissions.js +6 -6
- package/lib/users.js +22 -16
- package/lib/workspace-query-access.js +102 -0
- package/lib/workspace-query-service.js +24 -17
- package/lib/worktree.js +25 -38
- package/lib/ws-schema.js +38 -7
- package/lib/yoke/adapters/claude-worker.js +16 -6
- package/lib/yoke/adapters/claude.js +12 -0
- package/lib/yoke/adapters/codex.js +24 -14
- package/lib/yoke/vendor-registry.js +1 -1
- package/package.json +2 -2
|
@@ -319,6 +319,73 @@
|
|
|
319
319
|
.notif-banner-update-now:hover { opacity: 0.85; }
|
|
320
320
|
.notif-banner-update-now:disabled { opacity: 0.6; cursor: default; }
|
|
321
321
|
|
|
322
|
+
/* Snooze: the quiet sibling of "Update now". Same button metrics so the two
|
|
323
|
+
sit on one row, but a bordered surface instead of the accent fill, because
|
|
324
|
+
postponing should never read as the primary action. */
|
|
325
|
+
.notif-banner-snooze { position: relative; display: inline-flex; }
|
|
326
|
+
.notif-banner-snooze-btn {
|
|
327
|
+
display: inline-flex;
|
|
328
|
+
align-items: center;
|
|
329
|
+
gap: 4px;
|
|
330
|
+
padding: 4px 10px;
|
|
331
|
+
border-radius: 6px;
|
|
332
|
+
font-size: 11px;
|
|
333
|
+
font-weight: 600;
|
|
334
|
+
font-family: inherit;
|
|
335
|
+
cursor: pointer;
|
|
336
|
+
border: 1px solid rgba(var(--overlay-rgb), 0.22);
|
|
337
|
+
background: transparent;
|
|
338
|
+
color: inherit;
|
|
339
|
+
opacity: 0.85;
|
|
340
|
+
transition: opacity 0.15s, border-color 0.15s;
|
|
341
|
+
}
|
|
342
|
+
.notif-banner-snooze-btn:hover { opacity: 1; border-color: rgba(var(--overlay-rgb), 0.4); }
|
|
343
|
+
.notif-banner-snooze-btn:focus-visible {
|
|
344
|
+
outline: none;
|
|
345
|
+
opacity: 1;
|
|
346
|
+
border-color: var(--accent, #6c5ce7);
|
|
347
|
+
box-shadow: 0 0 0 2px rgba(var(--overlay-rgb), 0.18);
|
|
348
|
+
}
|
|
349
|
+
.notif-banner-snooze-btn .lucide { width: 11px; height: 11px; }
|
|
350
|
+
|
|
351
|
+
.notif-banner-snooze-menu {
|
|
352
|
+
position: absolute;
|
|
353
|
+
bottom: calc(100% + 4px);
|
|
354
|
+
left: 0;
|
|
355
|
+
z-index: 5;
|
|
356
|
+
min-width: 116px;
|
|
357
|
+
padding: 4px;
|
|
358
|
+
display: flex;
|
|
359
|
+
flex-direction: column;
|
|
360
|
+
gap: 1px;
|
|
361
|
+
border-radius: 8px;
|
|
362
|
+
border: 1px solid rgba(var(--overlay-rgb), 0.16);
|
|
363
|
+
background: var(--bg-alt, #20201d);
|
|
364
|
+
box-shadow: 0 8px 22px rgba(var(--shadow-rgb), 0.32);
|
|
365
|
+
}
|
|
366
|
+
.notif-banner-snooze-item {
|
|
367
|
+
padding: 5px 8px;
|
|
368
|
+
border: 0;
|
|
369
|
+
border-radius: 5px;
|
|
370
|
+
background: transparent;
|
|
371
|
+
color: inherit;
|
|
372
|
+
font-family: inherit;
|
|
373
|
+
font-size: 11px;
|
|
374
|
+
font-weight: 500;
|
|
375
|
+
text-align: left;
|
|
376
|
+
cursor: pointer;
|
|
377
|
+
}
|
|
378
|
+
.notif-banner-snooze-item:hover { background: rgba(var(--overlay-rgb), 0.1); }
|
|
379
|
+
.notif-banner-snooze-item:focus-visible {
|
|
380
|
+
outline: none;
|
|
381
|
+
background: rgba(var(--overlay-rgb), 0.14);
|
|
382
|
+
box-shadow: inset 0 0 0 1px var(--accent, #6c5ce7);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
@media (prefers-reduced-motion: reduce) {
|
|
386
|
+
.notif-banner-snooze-btn { transition: none; }
|
|
387
|
+
}
|
|
388
|
+
|
|
322
389
|
.light-theme .notif-banner-clear-all {
|
|
323
390
|
background:
|
|
324
391
|
linear-gradient(180deg, rgba(255,255,255,0.54), rgba(255,255,255,0.28)),
|
package/lib/public/css/pane.css
CHANGED
|
@@ -104,6 +104,49 @@ body.pane-mode #input-area {
|
|
|
104
104
|
flex-shrink: 0;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
+
.split-pane-header.has-worker-runtime {
|
|
108
|
+
flex-wrap: nowrap;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.split-pane-header.has-worker-runtime .split-pane-context {
|
|
112
|
+
order: 1;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.split-pane-header.has-worker-runtime .split-pane-close {
|
|
116
|
+
order: 2;
|
|
117
|
+
flex-shrink: 0;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.split-worker-runtime {
|
|
121
|
+
flex: 0 1 auto;
|
|
122
|
+
min-width: 0;
|
|
123
|
+
display: flex;
|
|
124
|
+
align-items: center;
|
|
125
|
+
gap: 8px;
|
|
126
|
+
font-size: 11px;
|
|
127
|
+
line-height: 18px;
|
|
128
|
+
white-space: nowrap;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.split-worker-runtime-model {
|
|
132
|
+
min-width: 0;
|
|
133
|
+
overflow: hidden;
|
|
134
|
+
text-overflow: ellipsis;
|
|
135
|
+
white-space: nowrap;
|
|
136
|
+
color: var(--text);
|
|
137
|
+
font-weight: 600;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.split-worker-runtime-thinking {
|
|
141
|
+
min-width: 0;
|
|
142
|
+
overflow: hidden;
|
|
143
|
+
text-overflow: ellipsis;
|
|
144
|
+
padding: 0 6px;
|
|
145
|
+
border-radius: 4px;
|
|
146
|
+
background: var(--bg-alt);
|
|
147
|
+
color: var(--text-secondary);
|
|
148
|
+
}
|
|
149
|
+
|
|
107
150
|
.split-pane-title {
|
|
108
151
|
flex: 0 1 auto;
|
|
109
152
|
max-width: 46%;
|
|
@@ -192,8 +235,7 @@ body.pane-mode #input-area {
|
|
|
192
235
|
@keyframes pair-divider-flow-left { 0%, 100% { transform: translateX(3px); opacity: 0.65; } 50% { transform: translateX(-3px); opacity: 1; } }
|
|
193
236
|
@keyframes pair-status-pulse { 50% { opacity: 0.55; } }
|
|
194
237
|
|
|
195
|
-
/* Worker
|
|
196
|
-
delegated turn. Informational only -- the composer stays enabled. */
|
|
238
|
+
/* Worker activity notice shown while this pane processes a delegated task. */
|
|
197
239
|
.pane-delegation-notice {
|
|
198
240
|
display: none;
|
|
199
241
|
align-items: center;
|
|
@@ -202,7 +244,7 @@ body.pane-mode #input-area {
|
|
|
202
244
|
max-width: var(--content-width);
|
|
203
245
|
margin: 0 auto;
|
|
204
246
|
padding: 4px 10px;
|
|
205
|
-
border-radius: 8px
|
|
247
|
+
border-radius: 8px;
|
|
206
248
|
background: color-mix(in srgb, var(--accent) 8%, var(--bg));
|
|
207
249
|
color: var(--text-secondary);
|
|
208
250
|
font-size: 11px;
|
|
@@ -210,13 +252,6 @@ body.pane-mode #input-area {
|
|
|
210
252
|
transition: box-shadow 0.2s;
|
|
211
253
|
}
|
|
212
254
|
.pane-delegation-notice.visible { display: flex; }
|
|
213
|
-
.pane-delegation-notice.visible:has(+ #input-wrapper #input-row:focus-within) {
|
|
214
|
-
box-shadow: 0 0 0 1px var(--border);
|
|
215
|
-
clip-path: inset(-1px -1px 0 -1px);
|
|
216
|
-
}
|
|
217
|
-
.pane-delegation-notice.visible + #input-wrapper #input-row {
|
|
218
|
-
border-radius: 0 0 8px 8px;
|
|
219
|
-
}
|
|
220
255
|
.pane-delegation-notice::before {
|
|
221
256
|
content: "";
|
|
222
257
|
width: 6px;
|
|
@@ -463,3 +498,55 @@ body.sticky-note-interacting .split-pane-frame {
|
|
|
463
498
|
font-size: 13px;
|
|
464
499
|
font-weight: 700;
|
|
465
500
|
}
|
|
501
|
+
|
|
502
|
+
/* Driver-operated Split Worker surface.
|
|
503
|
+
------------------------------------------------------------------
|
|
504
|
+
The composer is gone, so the region needs to read as "execution
|
|
505
|
+
surface", not "chat with a broken input". The whole treatment is one
|
|
506
|
+
line in the composer's own footprint: same content width, same
|
|
507
|
+
horizontal rhythm, deliberately shorter than the input it replaces so
|
|
508
|
+
the transcript gains the space rather than a warning banner taking it.
|
|
509
|
+
|
|
510
|
+
Utilitarian on purpose. A hairline top rule and a small steady dot
|
|
511
|
+
carry the state; there is no panel, no card, no icon set, no colour
|
|
512
|
+
alarm. The dot does not pulse — a standing condition should not
|
|
513
|
+
animate. Muted text, uppercase micro-label with wide tracking: it
|
|
514
|
+
reads as instrumentation, which is what it is. */
|
|
515
|
+
#input-area .worker-pane-status {
|
|
516
|
+
display: none;
|
|
517
|
+
align-items: center;
|
|
518
|
+
justify-content: center;
|
|
519
|
+
gap: 7px;
|
|
520
|
+
width: 100%;
|
|
521
|
+
max-width: var(--content-width);
|
|
522
|
+
margin: 0 auto;
|
|
523
|
+
padding: 9px 12px calc(9px + var(--safe-bottom, 0px));
|
|
524
|
+
border-top: 1px solid var(--border-subtle);
|
|
525
|
+
color: var(--text-dimmer);
|
|
526
|
+
font-family: inherit;
|
|
527
|
+
font-size: 10px;
|
|
528
|
+
font-weight: 600;
|
|
529
|
+
letter-spacing: 0.07em;
|
|
530
|
+
text-transform: uppercase;
|
|
531
|
+
user-select: none;
|
|
532
|
+
}
|
|
533
|
+
#input-area .worker-pane-status.visible { display: flex; }
|
|
534
|
+
|
|
535
|
+
.worker-pane-status-mark {
|
|
536
|
+
width: 5px;
|
|
537
|
+
height: 5px;
|
|
538
|
+
border-radius: 50%;
|
|
539
|
+
flex-shrink: 0;
|
|
540
|
+
background: var(--text-dimmer);
|
|
541
|
+
/* A faint halo so the dot reads as a live indicator at 5px rather than
|
|
542
|
+
as a stray period, without becoming a status "light". */
|
|
543
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--text-dimmer) 14%, transparent);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
/* The composer is hidden rather than removed, so the transcript keeps its
|
|
547
|
+
scroll container and nothing reflows when a pair dissolves. */
|
|
548
|
+
body.worker-pane-locked #input-wrapper { display: none; }
|
|
549
|
+
body.worker-pane-locked #input-area {
|
|
550
|
+
padding-top: 0;
|
|
551
|
+
background: transparent;
|
|
552
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/* Project Logs — a restrained editorial ledger, designed for close reading. */
|
|
2
|
+
|
|
3
|
+
/* Wide screens: bounded workbench window beside #app, matching the geometry of
|
|
4
|
+
the document viewer and the terminal. */
|
|
5
|
+
@media (min-width: 1024px) {
|
|
6
|
+
#project-logs-panel {
|
|
7
|
+
width: 50%;
|
|
8
|
+
max-width: 720px;
|
|
9
|
+
min-width: 360px;
|
|
10
|
+
height: calc(100% - 16px);
|
|
11
|
+
min-height: 0;
|
|
12
|
+
align-self: center;
|
|
13
|
+
margin: 8px 8px 8px 10px;
|
|
14
|
+
border: 1px solid var(--border);
|
|
15
|
+
border-radius: 12px;
|
|
16
|
+
background: var(--bg);
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
flex-shrink: 0;
|
|
21
|
+
box-shadow:
|
|
22
|
+
4px 8px 18px rgba(var(--shadow-rgb), 0.14),
|
|
23
|
+
2px 2px 4px rgba(var(--shadow-rgb), 0.08),
|
|
24
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.04);
|
|
25
|
+
animation: workbench-panel-in 0.18s cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
26
|
+
transition: max-width 0.2s ease, width 0.2s ease, box-shadow 0.2s ease;
|
|
27
|
+
}
|
|
28
|
+
#project-logs-panel.hidden { display: none; }
|
|
29
|
+
#project-logs-panel.project-logs-wide {
|
|
30
|
+
width: 70%;
|
|
31
|
+
max-width: 1200px;
|
|
32
|
+
}
|
|
33
|
+
#project-logs-panel.panel-fullscreen {
|
|
34
|
+
width: 100%;
|
|
35
|
+
max-width: none;
|
|
36
|
+
min-width: 0;
|
|
37
|
+
height: 100%;
|
|
38
|
+
margin: 0;
|
|
39
|
+
border: 0;
|
|
40
|
+
border-radius: 0;
|
|
41
|
+
box-shadow: none;
|
|
42
|
+
animation: none;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@media (prefers-reduced-motion: reduce) {
|
|
47
|
+
#project-logs-panel { animation: none; }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Narrow screens: full overlay, like the other workbench tools. */
|
|
51
|
+
@media (max-width: 1023px) {
|
|
52
|
+
#project-logs-panel {
|
|
53
|
+
position: fixed;
|
|
54
|
+
top: 0;
|
|
55
|
+
left: 0;
|
|
56
|
+
right: 0;
|
|
57
|
+
bottom: 0;
|
|
58
|
+
padding-top: var(--safe-top);
|
|
59
|
+
padding-bottom: var(--safe-bottom);
|
|
60
|
+
background: var(--bg);
|
|
61
|
+
z-index: 300;
|
|
62
|
+
display: flex;
|
|
63
|
+
flex-direction: column;
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
}
|
|
66
|
+
#project-logs-panel.hidden { display: none; }
|
|
67
|
+
/* Sizing controls are meaningless in the overlay presentation. */
|
|
68
|
+
#project-logs-wide,
|
|
69
|
+
#project-logs-fullscreen { display: none; }
|
|
70
|
+
}
|
|
71
|
+
.project-logs-topbar {
|
|
72
|
+
height: 48px;
|
|
73
|
+
display: flex;
|
|
74
|
+
align-items: center;
|
|
75
|
+
gap: 12px;
|
|
76
|
+
padding: 0 16px;
|
|
77
|
+
border-bottom: 1px solid var(--border-subtle);
|
|
78
|
+
flex: 0 0 auto;
|
|
79
|
+
}
|
|
80
|
+
.project-logs-title { display: inline-flex; align-items: center; gap: 7px; font-weight: 700; color: var(--text); }
|
|
81
|
+
.project-logs-title .lucide { width: 15px; color: var(--accent); }
|
|
82
|
+
.project-logs-subtitle { flex: 1; color: var(--text-dimmer); font-size: 12px; }
|
|
83
|
+
.project-logs-icon-btn {
|
|
84
|
+
border: 1px solid var(--border);
|
|
85
|
+
border-radius: 7px;
|
|
86
|
+
background: var(--bg-alt);
|
|
87
|
+
color: var(--text-secondary);
|
|
88
|
+
font: inherit;
|
|
89
|
+
cursor: pointer;
|
|
90
|
+
}
|
|
91
|
+
.project-logs-icon-btn { width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; }
|
|
92
|
+
.project-logs-icon-btn.hidden { display: none; }
|
|
93
|
+
.project-logs-icon-btn .lucide { width: 15px; }
|
|
94
|
+
.project-logs-icon-btn[aria-pressed="true"] { border-color: var(--accent); color: var(--accent); }
|
|
95
|
+
.project-logs-icon-btn:disabled { opacity: 0.4; cursor: default; }
|
|
96
|
+
.project-logs-window-actions { display: inline-flex; align-items: center; gap: 6px; }
|
|
97
|
+
/* The explicit tool button is the only discovery affordance. */
|
|
98
|
+
#project-logs-btn.project-logs-unread { color: var(--accent); }
|
|
99
|
+
#project-logs-count { background: var(--accent); color: #fff; }
|
|
100
|
+
|
|
101
|
+
/* --- Ledger toolbar --- */
|
|
102
|
+
.project-logs-toolbar { display: flex; align-items: center; gap: 8px; padding: 12px 14px; border-bottom: 1px solid var(--border-subtle); flex: 0 0 auto; background: color-mix(in srgb, var(--bg-alt) 72%, transparent); }
|
|
103
|
+
.project-logs-toolbar.hidden { display: none; }
|
|
104
|
+
.project-logs-search { flex: 1; min-width: 0; height: 36px; display: flex; align-items: center; gap: 8px; padding: 0 10px; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); color: var(--text-dimmer); }
|
|
105
|
+
.project-logs-search .lucide { width: 14px; flex: 0 0 auto; }
|
|
106
|
+
.project-logs-search input { width: 100%; border: 0; outline: 0; background: transparent; color: var(--text); font: inherit; font-size: 12px; }
|
|
107
|
+
.project-logs-search:focus-within, .project-logs-filter:focus-visible { outline: 2px solid color-mix(in srgb, var(--accent) 35%, transparent); border-color: var(--accent); }
|
|
108
|
+
.project-logs-filter { height: 36px; max-width: 180px; padding: 0 8px; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); color: var(--text-secondary); font: inherit; font-size: 12px; cursor: pointer; }
|
|
109
|
+
.project-logs-context-filter { max-width: 148px; }
|
|
110
|
+
.project-log-context-chip { display: inline-flex; align-items: center; min-height: 22px; padding: 2px 7px; border-radius: 999px; background: var(--bg-alt); color: var(--text-secondary); font-size: 11px; font-weight: 600; }
|
|
111
|
+
.project-log-context-chip[data-status="archived"] { opacity: .72; }
|
|
112
|
+
.project-log-context-chip[data-status="merged"] { color: var(--success, #2f8f57); }
|
|
113
|
+
|
|
114
|
+
/* --- Ledger list: full pane, chronological, commit-history feel --- */
|
|
115
|
+
.project-logs-list { flex: 1; min-height: 0; overflow-y: auto; padding: 8px 0 18px; }
|
|
116
|
+
.project-logs-list.hidden { display: none; }
|
|
117
|
+
.project-log-row { width: 100%; display: block; padding: 15px 18px 14px; border: 0; border-bottom: 1px solid var(--border-subtle); border-left: 2px solid transparent; background: transparent; color: inherit; text-align: left; cursor: pointer; transition: background 0.14s ease, border-color 0.14s ease; }
|
|
118
|
+
.project-log-row:hover { background: color-mix(in srgb, var(--accent) 5%, transparent); border-left-color: var(--accent); }
|
|
119
|
+
.project-log-row:focus-visible { outline: 2px solid var(--accent); outline-offset: -3px; }
|
|
120
|
+
.project-log-row:last-child { border-bottom: 0; }
|
|
121
|
+
.project-log-row-head { display: flex; align-items: baseline; gap: 7px; flex-wrap: wrap; }
|
|
122
|
+
.project-log-row-title { flex: 1; min-width: 0; font-size: 14px; font-weight: 700; letter-spacing: -0.01em; color: var(--text); }
|
|
123
|
+
.project-log-row-summary { margin: 7px 0 0; color: var(--text-secondary); font-size: 12.5px; line-height: 1.55; }
|
|
124
|
+
.project-log-row-meta { margin-top: 8px; color: var(--text-dimmer); font-size: 10.5px; font-family: var(--font-mono); }
|
|
125
|
+
.project-logs-list-empty { max-width: 320px; margin: 54px auto; padding: 20px; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); color: var(--text-dimmer); font-size: 12px; text-align: center; line-height: 1.7; }
|
|
126
|
+
.project-logs-list[aria-busy="true"] .project-logs-list-empty { color: var(--text-secondary); font-family: var(--font-mono); }
|
|
127
|
+
|
|
128
|
+
/* Category chip and priority signal. Categories are project-defined, so the
|
|
129
|
+
chip is deliberately neutral: no per-category selectors and no exhaustive
|
|
130
|
+
class list, because the vocabulary is not known at build time. Priority
|
|
131
|
+
carries the only stable colour, since urgency is a fixed scale. */
|
|
132
|
+
.project-log-chip { flex: 0 0 auto; max-width: 14em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 2px 7px; border-radius: 999px; background: rgba(var(--overlay-rgb), 0.08); color: var(--text-secondary); font-size: 10px; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase; }
|
|
133
|
+
.project-log-priority { flex: 0 0 auto; padding: 2px 6px; border-radius: 5px; font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; }
|
|
134
|
+
.project-log-priority[data-priority="important"] { background: color-mix(in srgb, #f5a524 18%, transparent); color: #f5a524; }
|
|
135
|
+
.project-log-priority[data-priority="urgent"] { background: color-mix(in srgb, #e5484d 20%, transparent); color: #e5484d; }
|
|
136
|
+
|
|
137
|
+
/* --- Entry detail: full pane, replaces the list --- */
|
|
138
|
+
.project-logs-detail { flex: 1; min-width: 0; min-height: 0; overflow-y: auto; }
|
|
139
|
+
.project-logs-detail.hidden { display: none; }
|
|
140
|
+
.project-log-document { max-width: 760px; margin: 0 auto; padding: 32px 28px 52px; }
|
|
141
|
+
#project-logs-panel.panel-fullscreen .project-log-document { padding: clamp(28px, 5vw, 64px); }
|
|
142
|
+
.project-log-doc-chips { display: flex; align-items: center; gap: 7px; margin-bottom: 10px; }
|
|
143
|
+
.project-log-document h1 { margin: 0 0 10px; color: var(--text); font-family: var(--font-display); font-size: clamp(24px, 2.8vw, 34px); letter-spacing: -0.025em; line-height: 1.12; }
|
|
144
|
+
.project-log-doc-summary { margin: 0 0 13px; color: var(--text-secondary); font-size: 14px; line-height: 1.6; }
|
|
145
|
+
.project-log-byline { margin: 0 0 25px; padding-bottom: 18px; border-bottom: 2px solid var(--border-subtle); color: var(--text-dimmer); font-size: 11px; font-family: var(--font-mono); }
|
|
146
|
+
.project-log-delete-button { display: inline-flex; align-items: center; gap: 6px; margin: -11px 0 24px; padding: 6px 9px; border: 1px solid color-mix(in srgb, var(--danger) 45%, var(--border)); border-radius: 7px; background: transparent; color: var(--danger); font: inherit; font-size: 11px; font-weight: 700; cursor: pointer; }
|
|
147
|
+
.project-log-delete-button .lucide { width: 13px; }
|
|
148
|
+
.project-log-markdown { font-size: 14px; line-height: 1.75; }
|
|
149
|
+
|
|
150
|
+
.project-log-delete-dialog { position: fixed; inset: 0; z-index: 420; display: flex; align-items: center; justify-content: center; padding: 20px; background: rgba(var(--shadow-rgb), 0.5); }
|
|
151
|
+
.project-log-delete-dialog.hidden { display: none; }
|
|
152
|
+
.project-log-delete-dialog-card { width: min(420px, 100%); padding: 20px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg); box-shadow: 0 18px 50px rgba(var(--shadow-rgb), 0.3); }
|
|
153
|
+
.project-log-delete-dialog-card h2 { margin: 0 0 9px; color: var(--text); font-family: var(--font-display); font-size: 18px; }
|
|
154
|
+
.project-log-delete-dialog-card p { margin: 0; color: var(--text-secondary); font-size: 13px; line-height: 1.55; }
|
|
155
|
+
.project-log-delete-dialog-title { margin-top: 9px !important; color: var(--text) !important; font-weight: 700; overflow-wrap: anywhere; }
|
|
156
|
+
.project-log-delete-dialog-status { min-height: 17px; margin-top: 11px !important; color: var(--danger) !important; font-size: 11px !important; }
|
|
157
|
+
.project-log-delete-dialog-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 14px; }
|
|
158
|
+
.project-log-delete-dialog-actions button { padding: 7px 12px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg-alt); color: var(--text-secondary); font: inherit; font-size: 12px; font-weight: 700; cursor: pointer; }
|
|
159
|
+
.project-log-delete-dialog-actions button.danger { border-color: var(--danger); background: var(--danger); color: #fff; }
|
|
160
|
+
.project-log-delete-dialog-actions button:disabled { opacity: 0.5; cursor: default; }
|
|
161
|
+
|
|
162
|
+
/* --- Discussion --- */
|
|
163
|
+
.project-log-discussion { margin-top: 30px; padding-top: 18px; border-top: 1px solid var(--border-subtle); }
|
|
164
|
+
.project-log-discussion h2 { margin: 0 0 12px; color: var(--text); font-family: var(--font-display); font-size: 15px; }
|
|
165
|
+
.project-log-discussion-empty { margin: 0; color: var(--text-dimmer); font-size: 12px; }
|
|
166
|
+
.project-log-comment { padding: 10px 12px; margin-bottom: 8px; border: 1px solid var(--border-subtle); border-radius: 9px; background: var(--bg-alt); }
|
|
167
|
+
.project-log-comment-meta { margin: 0 0 5px; color: var(--text-dimmer); font-size: 10.5px; font-family: var(--font-mono); }
|
|
168
|
+
.project-log-comment-body { margin: 0; color: var(--text); font-size: 13px; line-height: 1.55; white-space: pre-wrap; }
|
|
169
|
+
.project-log-comment-status-badge { display: inline-block; margin-top: 7px; padding: 2px 7px; border-radius: 999px; background: rgba(var(--overlay-rgb), 0.08); color: var(--text-dimmer); font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; }
|
|
170
|
+
.project-log-comment-status-badge[data-status="incorporated"] { background: color-mix(in srgb, var(--brand-green) 16%, transparent); color: var(--brand-green); }
|
|
171
|
+
.project-log-comment-status-badge[data-status="clarification-needed"] { background: color-mix(in srgb, #f5a524 18%, transparent); color: #f5a524; }
|
|
172
|
+
.project-log-comment-response { margin-top: 9px; padding: 8px 10px; border-left: 2px solid var(--accent); background: rgba(var(--overlay-rgb), 0.04); border-radius: 0 7px 7px 0; }
|
|
173
|
+
.project-log-comment-response-meta { margin: 0 0 4px; color: var(--text-dimmer); font-size: 10.5px; font-family: var(--font-mono); }
|
|
174
|
+
.project-log-comment-response-body { margin: 0; color: var(--text); font-size: 12.5px; line-height: 1.55; white-space: pre-wrap; }
|
|
175
|
+
.project-log-history { margin-top: 26px; padding-top: 16px; border-top: 1px solid var(--border-subtle); }
|
|
176
|
+
.project-log-history h2 { margin: 0 0 10px; color: var(--text); font-family: var(--font-display); font-size: 14px; }
|
|
177
|
+
.project-log-history-list { margin: 0; padding: 0; list-style: none; display: grid; gap: 5px; }
|
|
178
|
+
.project-log-history-row { display: flex; align-items: baseline; gap: 8px; font-size: 11.5px; }
|
|
179
|
+
.project-log-history-label { flex: 0 0 auto; color: var(--text-dimmer); font-family: var(--font-mono); font-weight: 700; }
|
|
180
|
+
.project-log-history-text { color: var(--text-secondary); }
|
|
181
|
+
.project-log-history-reason { color: var(--text-dimmer); font-style: italic; }
|
|
182
|
+
.project-log-comment-form { display: grid; gap: 8px; margin-top: 18px; }
|
|
183
|
+
.project-log-comment-form label { color: var(--text-secondary); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; }
|
|
184
|
+
.project-log-comment-form textarea { width: 100%; min-height: 80px; padding: 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-alt); color: var(--text); font: inherit; font-size: 13px; line-height: 1.55; resize: vertical; box-sizing: border-box; }
|
|
185
|
+
.project-log-comment-form textarea:focus { outline: 2px solid color-mix(in srgb, var(--accent) 35%, transparent); border-color: var(--accent); }
|
|
186
|
+
.project-log-comment-status { min-height: 16px; margin: 0; color: var(--text-dimmer); font-size: 11px; }
|
|
187
|
+
.project-log-comment-actions { display: flex; justify-content: flex-end; }
|
|
188
|
+
.project-log-comment-actions button { padding: 7px 14px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg-alt); color: var(--text-secondary); font: inherit; font-weight: 700; font-size: 12px; cursor: pointer; }
|
|
189
|
+
.project-log-comment-actions button.primary { border-color: var(--accent); background: var(--accent); color: #fff; }
|
|
190
|
+
|
|
191
|
+
@media (max-width: 768px) {
|
|
192
|
+
.project-logs-subtitle { display: none; }
|
|
193
|
+
.project-logs-topbar { gap: 8px; padding: 0 12px; }
|
|
194
|
+
.project-logs-toolbar { padding: 10px 12px; }
|
|
195
|
+
.project-logs-filter { max-width: 42%; }
|
|
196
|
+
.project-log-row { padding: 14px 14px 13px; }
|
|
197
|
+
.project-log-document { padding: 24px 18px 38px; }
|
|
198
|
+
}
|
|
@@ -1,119 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
.composer-session-action {
|
|
2
2
|
display: inline-flex;
|
|
3
3
|
align-items: center;
|
|
4
4
|
justify-content: center;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
height: 28px;
|
|
5
|
+
width: 36px;
|
|
6
|
+
height: 36px;
|
|
8
7
|
margin: 0;
|
|
9
|
-
padding: 0
|
|
10
|
-
border:
|
|
11
|
-
border-radius:
|
|
12
|
-
background:
|
|
13
|
-
color: var(--text-
|
|
8
|
+
padding: 0;
|
|
9
|
+
border: 0;
|
|
10
|
+
border-radius: 50%;
|
|
11
|
+
background: transparent;
|
|
12
|
+
color: var(--text-muted);
|
|
14
13
|
cursor: pointer;
|
|
15
14
|
flex-shrink: 0;
|
|
16
15
|
font: inherit;
|
|
17
|
-
|
|
18
|
-
font-weight: 650;
|
|
19
|
-
white-space: nowrap;
|
|
20
|
-
transition: color 0.15s, background 0.15s, border-color 0.15s;
|
|
16
|
+
transition: color 0.15s, background 0.15s, opacity 0.15s;
|
|
21
17
|
}
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
#header-session-actions-btn[aria-expanded="true"] {
|
|
19
|
+
.composer-session-action:hover:not(:disabled) {
|
|
25
20
|
color: var(--text);
|
|
26
|
-
background:
|
|
27
|
-
border-color: color-mix(in srgb, var(--brand-indigo) 32%, var(--border));
|
|
21
|
+
background: rgba(var(--overlay-rgb), 0.06);
|
|
28
22
|
}
|
|
29
23
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
border-color: color-mix(in srgb, var(--link) 48%, var(--border));
|
|
24
|
+
.composer-session-action:focus { outline: none; }
|
|
25
|
+
.composer-session-action:focus-visible {
|
|
33
26
|
box-shadow: 0 0 0 2px color-mix(in srgb, var(--link) 18%, transparent);
|
|
34
27
|
}
|
|
35
28
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
height: 14px;
|
|
40
|
-
color: color-mix(in srgb, var(--brand-indigo) 78%, var(--text));
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
#header-session-actions-btn .session-actions-trigger-chevron {
|
|
44
|
-
width: 13px;
|
|
45
|
-
height: 13px;
|
|
46
|
-
transition: transform 0.16s ease;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
#header-session-actions-btn[aria-expanded="true"] .session-actions-trigger-chevron {
|
|
50
|
-
transform: rotate(180deg);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.session-actions-menu {
|
|
54
|
-
position: fixed;
|
|
55
|
-
z-index: 10020;
|
|
56
|
-
width: min(300px, calc(100vw - 16px));
|
|
57
|
-
padding: 6px;
|
|
58
|
-
border: 1px solid var(--border);
|
|
59
|
-
border-radius: 12px;
|
|
60
|
-
background: color-mix(in srgb, var(--bg) 96%, transparent);
|
|
61
|
-
box-shadow: 0 14px 38px rgba(var(--shadow-rgb), 0.32), 0 2px 8px rgba(var(--shadow-rgb), 0.2);
|
|
62
|
-
backdrop-filter: blur(18px);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.session-actions-row {
|
|
66
|
-
width: 100%;
|
|
67
|
-
border: 0;
|
|
68
|
-
background: transparent;
|
|
69
|
-
color: var(--text);
|
|
70
|
-
font: inherit;
|
|
71
|
-
text-align: left;
|
|
72
|
-
cursor: pointer;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.session-actions-row {
|
|
76
|
-
display: grid;
|
|
77
|
-
grid-template-columns: 30px minmax(0, 1fr) 16px;
|
|
78
|
-
align-items: center;
|
|
79
|
-
gap: 8px;
|
|
80
|
-
min-height: 54px;
|
|
81
|
-
padding: 7px 8px;
|
|
82
|
-
border-radius: 8px;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.session-actions-row:hover { background: var(--bg-alt); }
|
|
86
|
-
.session-actions-row.is-primary {
|
|
87
|
-
background: color-mix(in srgb, var(--brand-indigo) 6%, transparent);
|
|
88
|
-
}
|
|
89
|
-
.session-actions-row.is-primary:hover {
|
|
90
|
-
background: color-mix(in srgb, var(--brand-indigo) 10%, transparent);
|
|
91
|
-
}
|
|
92
|
-
.session-actions-row.is-primary .session-actions-row-icon {
|
|
93
|
-
border-color: transparent;
|
|
94
|
-
background: var(--brand-indigo);
|
|
95
|
-
color: var(--brand-paper);
|
|
96
|
-
}
|
|
97
|
-
.session-actions-row:disabled { cursor: default; opacity: 0.42; }
|
|
98
|
-
.session-actions-row:disabled:hover { background: transparent; }
|
|
99
|
-
|
|
100
|
-
.session-actions-row-icon {
|
|
101
|
-
display: grid;
|
|
102
|
-
place-items: center;
|
|
103
|
-
width: 28px;
|
|
104
|
-
height: 28px;
|
|
105
|
-
border: 1px solid var(--border-subtle);
|
|
106
|
-
border-radius: 8px;
|
|
107
|
-
background: rgba(var(--overlay-rgb), 0.035);
|
|
108
|
-
color: color-mix(in srgb, var(--accent2) 38%, var(--text-secondary));
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.session-actions-row-icon .lucide { width: 15px; height: 15px; }
|
|
112
|
-
.session-actions-row-copy { display: flex; min-width: 0; flex-direction: column; gap: 2px; }
|
|
113
|
-
.session-actions-row-copy strong { font-size: 12px; font-weight: 750; }
|
|
114
|
-
.session-actions-row-copy > span { color: var(--text-muted); font-size: 11px; line-height: 1.35; }
|
|
115
|
-
.session-actions-row-chevron { color: var(--text-muted); }
|
|
116
|
-
.session-actions-row-chevron .lucide { width: 13px; height: 13px; }
|
|
29
|
+
.composer-session-action.hidden { display: none; }
|
|
30
|
+
.composer-session-action:disabled { cursor: default; opacity: 0.32; }
|
|
31
|
+
.composer-session-action .lucide { width: 20px; height: 20px; }
|
|
117
32
|
|
|
118
33
|
.handoff-modal { width: min(420px, calc(100vw - 32px)); }
|
|
119
34
|
.handoff-modal-desc { margin: -10px 0 14px; color: var(--text-dimmer); font-size: 12px; line-height: 1.45; }
|
|
@@ -926,6 +926,109 @@
|
|
|
926
926
|
transition: opacity 0.15s;
|
|
927
927
|
}
|
|
928
928
|
|
|
929
|
+
.session-driver-hierarchy {
|
|
930
|
+
position: relative;
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
.session-driver-header {
|
|
934
|
+
display: flex;
|
|
935
|
+
align-items: center;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
.session-driver-header > .session-item {
|
|
939
|
+
min-width: 0;
|
|
940
|
+
flex: 1;
|
|
941
|
+
padding-left: 0;
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
.session-driver-toggle {
|
|
945
|
+
width: 18px;
|
|
946
|
+
height: 24px;
|
|
947
|
+
padding: 0;
|
|
948
|
+
border: 0;
|
|
949
|
+
border-radius: 5px;
|
|
950
|
+
display: inline-flex;
|
|
951
|
+
align-items: center;
|
|
952
|
+
justify-content: center;
|
|
953
|
+
flex-shrink: 0;
|
|
954
|
+
color: var(--text-dimmer);
|
|
955
|
+
background: transparent;
|
|
956
|
+
cursor: pointer;
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
.session-driver-toggle:hover,
|
|
960
|
+
.session-driver-toggle:focus-visible,
|
|
961
|
+
.session-orphan-toggle:hover,
|
|
962
|
+
.session-orphan-toggle:focus-visible {
|
|
963
|
+
color: var(--text);
|
|
964
|
+
background: rgba(var(--overlay-rgb), 0.05);
|
|
965
|
+
outline: none;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
.session-driver-toggle .lucide,
|
|
969
|
+
.session-orphan-toggle .lucide {
|
|
970
|
+
width: 13px;
|
|
971
|
+
height: 13px;
|
|
972
|
+
transition: transform 0.15s ease;
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
.session-driver-toggle[aria-expanded="true"] .lucide,
|
|
976
|
+
.session-orphan-toggle[aria-expanded="true"] .lucide {
|
|
977
|
+
transform: rotate(90deg);
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
.session-worker-children {
|
|
981
|
+
margin-left: 17px;
|
|
982
|
+
padding-left: 8px;
|
|
983
|
+
border-left: 1px solid color-mix(in srgb, var(--text-dimmer) 22%, transparent);
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
.session-worker-item {
|
|
987
|
+
height: 33px;
|
|
988
|
+
border-radius: 7px;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
.session-worker-generation,
|
|
992
|
+
.session-worker-count {
|
|
993
|
+
flex-shrink: 0;
|
|
994
|
+
padding: 1px 5px;
|
|
995
|
+
border-radius: 999px;
|
|
996
|
+
color: var(--text-dimmer);
|
|
997
|
+
background: rgba(var(--overlay-rgb), 0.04);
|
|
998
|
+
font-size: 9px;
|
|
999
|
+
font-weight: 650;
|
|
1000
|
+
letter-spacing: 0.02em;
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
.session-worker-generation.current {
|
|
1004
|
+
color: var(--success);
|
|
1005
|
+
background: color-mix(in srgb, var(--success) 10%, transparent);
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
.session-orphan-toggle {
|
|
1009
|
+
width: 100%;
|
|
1010
|
+
height: 32px;
|
|
1011
|
+
padding: 0 9px 0 4px;
|
|
1012
|
+
border: 0;
|
|
1013
|
+
border-radius: 8px;
|
|
1014
|
+
display: flex;
|
|
1015
|
+
align-items: center;
|
|
1016
|
+
gap: 7px;
|
|
1017
|
+
color: var(--text-dimmer);
|
|
1018
|
+
background: transparent;
|
|
1019
|
+
cursor: pointer;
|
|
1020
|
+
font: inherit;
|
|
1021
|
+
text-align: left;
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
.session-orphan-title {
|
|
1025
|
+
flex: 1;
|
|
1026
|
+
overflow: hidden;
|
|
1027
|
+
text-overflow: ellipsis;
|
|
1028
|
+
white-space: nowrap;
|
|
1029
|
+
font-size: 12px;
|
|
1030
|
+
}
|
|
1031
|
+
|
|
929
1032
|
.split-group-text {
|
|
930
1033
|
display: flex;
|
|
931
1034
|
align-items: center;
|