clay-server 4.0.0-beta.2 → 4.0.0-beta.21
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/background-task-timing.js +105 -0
- 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 +14 -1
- 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-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-vendor-login.js +20 -3
- package/lib/project-worker-permission.js +430 -0
- package/lib/project-worker-proposal.js +208 -62
- package/lib/project.js +178 -6
- package/lib/public/app.js +58 -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 +163 -28
- package/lib/public/css/mobile-nav.css +80 -0
- package/lib/public/css/notifications-center.css +67 -0
- package/lib/public/css/pane.css +52 -0
- 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 +34 -1
- package/lib/public/index.html +45 -11
- package/lib/public/modules/admin.js +8 -8
- package/lib/public/modules/app-connection.js +109 -4
- package/lib/public/modules/app-home-hub.js +19 -7
- package/lib/public/modules/app-message-cards.js +2 -1
- package/lib/public/modules/app-messages.js +84 -7
- 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 +46 -4
- package/lib/public/modules/app-projects.js +13 -8
- package/lib/public/modules/app-rendering.js +1 -0
- package/lib/public/modules/background-tasks-ui.js +139 -16
- 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-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-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-view.js +5 -2
- 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/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 +21 -1
- 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 -12
- package/lib/public/style.css +3 -1
- package/lib/sdk-bridge.js +132 -46
- package/lib/sdk-message-processor.js +60 -14
- 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 +124 -18
- 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 +39 -0
- package/lib/sessions.js +61 -11
- 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 +2 -2
- 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 +81 -4
- package/lib/yoke/adapters/codex.js +63 -15
- package/lib/yoke/codex-background-tasks.js +8 -2
- package/lib/yoke/vendor-registry.js +1 -1
- package/package.json +3 -3
|
@@ -384,6 +384,44 @@ textarea.tool-input { min-height: 92px; resize: vertical; }
|
|
|
384
384
|
.tool-pagination { flex-wrap: wrap; justify-content: flex-start; }
|
|
385
385
|
}
|
|
386
386
|
|
|
387
|
+
/* Capsule engagement note in the Mate transcript: a quiet system line, not a
|
|
388
|
+
speech bubble, because no one typed it. */
|
|
389
|
+
.home-capsule-turn-note {
|
|
390
|
+
align-self: center;
|
|
391
|
+
margin: 6px auto;
|
|
392
|
+
padding: 3px 12px;
|
|
393
|
+
border-radius: 999px;
|
|
394
|
+
background: color-mix(in srgb, var(--text-muted) 10%, transparent);
|
|
395
|
+
color: var(--text-muted);
|
|
396
|
+
font-size: 11.5px;
|
|
397
|
+
text-align: center;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/* Rich Display frame: the additive sandboxed element above the floor. */
|
|
401
|
+
/* There is no global .hidden utility, so the capsule surfaces scope their own:
|
|
402
|
+
the frame stays invisible until its bridge reports ready, the floor hides
|
|
403
|
+
behind the toggle, and a cleared error leaves the screen. */
|
|
404
|
+
.home-tool-frame-wrap.hidden,
|
|
405
|
+
.home-tool-frame-toggle.hidden,
|
|
406
|
+
.home-tool-display.hidden,
|
|
407
|
+
.home-tool-error.hidden { display: none; }
|
|
408
|
+
.home-tool-frame-wrap { width: 100%; }
|
|
409
|
+
.home-tool-frame { display: block; width: 100%; min-height: 0; border: 0; border-radius: 10px; background: var(--bg); }
|
|
410
|
+
.home-tool-frame-toggle {
|
|
411
|
+
display: block; margin: 6px 0 0 auto; padding: 3px 10px;
|
|
412
|
+
border: 1px solid var(--border-subtle); border-radius: 999px;
|
|
413
|
+
background: transparent; color: var(--text-muted); font-size: 11px; cursor: pointer;
|
|
414
|
+
}
|
|
415
|
+
.home-tool-frame-toggle:hover { color: var(--text); border-color: var(--accent); }
|
|
416
|
+
|
|
417
|
+
/* Host-side attribution flash when the other seat's act changes state. */
|
|
418
|
+
@keyframes capsule-remote-act-flash {
|
|
419
|
+
0% { box-shadow: 0 0 0 2px var(--accent); }
|
|
420
|
+
100% { box-shadow: 0 0 0 2px transparent; }
|
|
421
|
+
}
|
|
422
|
+
.capsule-remote-act { animation: capsule-remote-act-flash 0.8s ease-out; }
|
|
423
|
+
|
|
387
424
|
@media (prefers-reduced-motion: reduce) {
|
|
388
425
|
.tool-button, .tool-input, .tool-select { transition: none; }
|
|
426
|
+
.capsule-remote-act { animation: none; }
|
|
389
427
|
}
|
|
@@ -486,7 +486,8 @@ body.mate-dm-active .search-clay-transcript .search-clay-message-user .bubble,
|
|
|
486
486
|
.search-clay-activity-item small { color: var(--text-dimmer); font-size: 10px; line-height: 1.35; }
|
|
487
487
|
@keyframes searchClaySpin { to { transform: rotate(360deg); } }
|
|
488
488
|
|
|
489
|
-
.clayos-session-link
|
|
489
|
+
.clayos-session-link,
|
|
490
|
+
.clayos-log-link {
|
|
490
491
|
display: inline-flex;
|
|
491
492
|
align-items: center;
|
|
492
493
|
gap: 6px;
|
|
@@ -503,7 +504,8 @@ body.mate-dm-active .search-clay-transcript .search-clay-message-user .bubble,
|
|
|
503
504
|
vertical-align: middle;
|
|
504
505
|
cursor: pointer;
|
|
505
506
|
}
|
|
506
|
-
.clayos-session-link::before
|
|
507
|
+
.clayos-session-link::before,
|
|
508
|
+
.clayos-log-link::before {
|
|
507
509
|
content: "\2197";
|
|
508
510
|
display: grid;
|
|
509
511
|
place-items: center;
|
|
@@ -514,13 +516,21 @@ body.mate-dm-active .search-clay-transcript .search-clay-message-user .bubble,
|
|
|
514
516
|
color: var(--accent);
|
|
515
517
|
font-size: 12px;
|
|
516
518
|
}
|
|
517
|
-
.clayos-
|
|
518
|
-
.clayos-session-link >
|
|
519
|
-
.clayos-
|
|
520
|
-
.clayos-session-link
|
|
521
|
-
.clayos-
|
|
522
|
-
.clayos-session-link
|
|
523
|
-
.clayos-
|
|
519
|
+
.clayos-log-link::before { content: "\2261"; }
|
|
520
|
+
.clayos-session-link > span,
|
|
521
|
+
.clayos-log-link > span { font-weight: 620; }
|
|
522
|
+
.clayos-session-link > small,
|
|
523
|
+
.clayos-log-link > small { color: var(--text-muted); font-size: 10px; }
|
|
524
|
+
.clayos-session-link:hover,
|
|
525
|
+
.clayos-log-link:hover { border-color: color-mix(in srgb, var(--accent) 52%, var(--border)); background: color-mix(in srgb, var(--accent) 11%, var(--bg-alt)); }
|
|
526
|
+
.clayos-session-link:focus-visible,
|
|
527
|
+
.clayos-log-link:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
528
|
+
.clayos-session-link.is-loading,
|
|
529
|
+
.clayos-log-link.is-loading { opacity: 0.62; cursor: progress; }
|
|
530
|
+
.clayos-session-link.is-loading::before,
|
|
531
|
+
.clayos-log-link.is-loading::before { animation: searchClaySpin 1.2s linear infinite; }
|
|
532
|
+
.clayos-session-link.is-error,
|
|
533
|
+
.clayos-log-link.is-error { border-color: color-mix(in srgb, var(--warning) 48%, var(--border)); }
|
|
524
534
|
|
|
525
535
|
.search-clay-pending {
|
|
526
536
|
align-self: flex-start;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/* Repository placard — the always-visible Git block directly under the tool
|
|
2
|
+
strip. Refined utilitarian: it borrows the panel's own surface tokens and
|
|
3
|
+
type scale so it reads as part of the sidebar chrome, and stays visually
|
|
4
|
+
subordinate to the tool tiles above it while remaining legible at a glance.
|
|
5
|
+
No new palette, no card shadow, no dashboard framing. */
|
|
6
|
+
|
|
7
|
+
.git-placard {
|
|
8
|
+
display: grid;
|
|
9
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
10
|
+
align-items: center;
|
|
11
|
+
gap: 6px;
|
|
12
|
+
margin: 2px 8px 0;
|
|
13
|
+
padding: 7px 7px 7px 8px;
|
|
14
|
+
border: 1px solid var(--border-subtle);
|
|
15
|
+
border-radius: 8px;
|
|
16
|
+
background: var(--bg-alt);
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
font-family: "Pretendard", "Twemoji", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.git-placard.hidden { display: none; }
|
|
22
|
+
.git-placard:hover { border-color: var(--border); }
|
|
23
|
+
|
|
24
|
+
.git-placard-body { min-width: 0; }
|
|
25
|
+
|
|
26
|
+
.git-placard-identity {
|
|
27
|
+
display: flex;
|
|
28
|
+
align-items: center;
|
|
29
|
+
gap: 6px;
|
|
30
|
+
min-width: 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.git-placard-glyph {
|
|
34
|
+
display: inline-flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
justify-content: center;
|
|
37
|
+
flex-shrink: 0;
|
|
38
|
+
color: var(--accent);
|
|
39
|
+
}
|
|
40
|
+
.git-placard-glyph svg { width: 13px; height: 13px; }
|
|
41
|
+
|
|
42
|
+
.git-placard-names { display: block; min-width: 0; }
|
|
43
|
+
|
|
44
|
+
.git-placard-repo {
|
|
45
|
+
display: block;
|
|
46
|
+
color: var(--text);
|
|
47
|
+
font-size: 11px;
|
|
48
|
+
font-weight: 700;
|
|
49
|
+
line-height: 1.3;
|
|
50
|
+
overflow: hidden;
|
|
51
|
+
text-overflow: ellipsis;
|
|
52
|
+
white-space: nowrap;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.git-placard-branch {
|
|
56
|
+
display: block;
|
|
57
|
+
color: var(--text-muted);
|
|
58
|
+
font-size: 10px;
|
|
59
|
+
font-weight: 500;
|
|
60
|
+
line-height: 1.35;
|
|
61
|
+
overflow: hidden;
|
|
62
|
+
text-overflow: ellipsis;
|
|
63
|
+
white-space: nowrap;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.git-placard-meta {
|
|
67
|
+
display: flex;
|
|
68
|
+
align-items: center;
|
|
69
|
+
gap: 4px;
|
|
70
|
+
flex-wrap: wrap;
|
|
71
|
+
margin: 5px 0 0 19px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.git-placard-badge {
|
|
75
|
+
padding: 1px 5px;
|
|
76
|
+
border: 1px solid var(--border-subtle);
|
|
77
|
+
border-radius: 999px;
|
|
78
|
+
background: var(--bg);
|
|
79
|
+
color: var(--text-dimmer);
|
|
80
|
+
font-size: 9px;
|
|
81
|
+
font-weight: 700;
|
|
82
|
+
letter-spacing: 0.02em;
|
|
83
|
+
text-transform: uppercase;
|
|
84
|
+
white-space: nowrap;
|
|
85
|
+
}
|
|
86
|
+
.git-placard-badge-warn {
|
|
87
|
+
border-color: color-mix(in srgb, var(--warning) 38%, var(--border-subtle));
|
|
88
|
+
color: var(--warning);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.git-placard-stat {
|
|
92
|
+
display: inline-flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
gap: 2px;
|
|
95
|
+
color: var(--text-dimmer);
|
|
96
|
+
font-size: 9px;
|
|
97
|
+
font-weight: 600;
|
|
98
|
+
font-variant-numeric: tabular-nums;
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
}
|
|
101
|
+
.git-placard-stat svg { width: 9px; height: 9px; }
|
|
102
|
+
.git-placard-stat-active { color: var(--text-muted); }
|
|
103
|
+
.git-placard-stat-warn { color: var(--error); }
|
|
104
|
+
|
|
105
|
+
.git-placard-remote {
|
|
106
|
+
display: flex;
|
|
107
|
+
align-items: center;
|
|
108
|
+
gap: 4px;
|
|
109
|
+
margin: 4px 0 0 19px;
|
|
110
|
+
color: var(--text-dimmer);
|
|
111
|
+
font-size: 9px;
|
|
112
|
+
min-width: 0;
|
|
113
|
+
}
|
|
114
|
+
.git-placard-remote svg { width: 9px; height: 9px; flex-shrink: 0; }
|
|
115
|
+
.git-placard-remote span {
|
|
116
|
+
overflow: hidden;
|
|
117
|
+
text-overflow: ellipsis;
|
|
118
|
+
white-space: nowrap;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* The single focusable control in the block. Everything else is a pointer
|
|
122
|
+
convenience that forwards here, so keyboard users get one stop and one
|
|
123
|
+
action rather than a row of ambiguous targets. */
|
|
124
|
+
.git-placard-more {
|
|
125
|
+
display: inline-flex;
|
|
126
|
+
align-items: center;
|
|
127
|
+
gap: 2px;
|
|
128
|
+
align-self: center;
|
|
129
|
+
padding: 3px 5px;
|
|
130
|
+
border: 1px solid var(--border-subtle);
|
|
131
|
+
border-radius: 6px;
|
|
132
|
+
background: var(--bg);
|
|
133
|
+
color: var(--text-dimmer);
|
|
134
|
+
font-family: inherit;
|
|
135
|
+
font-size: 9px;
|
|
136
|
+
font-weight: 700;
|
|
137
|
+
letter-spacing: 0.02em;
|
|
138
|
+
text-transform: uppercase;
|
|
139
|
+
cursor: pointer;
|
|
140
|
+
transition: color 140ms ease, border-color 140ms ease;
|
|
141
|
+
}
|
|
142
|
+
.git-placard-more svg { width: 10px; height: 10px; }
|
|
143
|
+
.git-placard:hover .git-placard-more,
|
|
144
|
+
.git-placard-more:hover { color: var(--text-muted); border-color: var(--border); }
|
|
145
|
+
.git-placard-more:focus-visible {
|
|
146
|
+
outline: none;
|
|
147
|
+
border-color: var(--accent);
|
|
148
|
+
box-shadow: 0 0 0 2px var(--accent-25);
|
|
149
|
+
color: var(--text);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@media (prefers-reduced-motion: reduce) {
|
|
153
|
+
.git-placard-more { transition: none; }
|
|
154
|
+
}
|
|
@@ -12,6 +12,10 @@ body.home-active #sidebar-overlay,
|
|
|
12
12
|
body.home-active .title-bar-content,
|
|
13
13
|
body.home-active #user-island { display: none !important; }
|
|
14
14
|
|
|
15
|
+
body.capsules-disabled #home-tools-btn,
|
|
16
|
+
body.capsules-disabled #home-dock-divider,
|
|
17
|
+
body.capsules-disabled #home-tool-workbench { display: none !important; }
|
|
18
|
+
|
|
15
19
|
body.home-active #main-area { border: 0; border-radius: 0; }
|
|
16
20
|
|
|
17
21
|
body.home-surface-boot-pending #connect-overlay.hidden {
|
|
@@ -22,6 +22,72 @@
|
|
|
22
22
|
.home-sidebar-recent-item .home-sidebar-recent-row:hover,
|
|
23
23
|
.home-conversations-sheet-item .home-conversations-sheet-row:hover { background: transparent; }
|
|
24
24
|
|
|
25
|
+
.home-conversations-driver-header {
|
|
26
|
+
display: flex;
|
|
27
|
+
align-items: stretch;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.home-conversations-driver-header > .home-conversations-sheet-item {
|
|
31
|
+
min-width: 0;
|
|
32
|
+
flex: 1;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.home-conversations-driver-toggle {
|
|
36
|
+
width: 32px;
|
|
37
|
+
padding: 0;
|
|
38
|
+
border: 0;
|
|
39
|
+
border-radius: 8px;
|
|
40
|
+
display: inline-flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
justify-content: center;
|
|
43
|
+
flex-shrink: 0;
|
|
44
|
+
color: var(--text-dimmer);
|
|
45
|
+
background: transparent;
|
|
46
|
+
cursor: pointer;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.home-conversations-driver-toggle:hover,
|
|
50
|
+
.home-conversations-driver-toggle:focus-visible {
|
|
51
|
+
color: var(--text);
|
|
52
|
+
background: rgba(var(--overlay-rgb), 0.05);
|
|
53
|
+
outline: none;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.home-conversations-driver-toggle .lucide {
|
|
57
|
+
width: 14px;
|
|
58
|
+
height: 14px;
|
|
59
|
+
transition: transform 0.15s ease;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.home-conversations-driver-toggle[aria-expanded="true"] .lucide {
|
|
63
|
+
transform: rotate(90deg);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.home-conversations-driver-header:not(:has(.home-conversations-sheet-item)) .home-conversations-driver-toggle {
|
|
67
|
+
width: 100%;
|
|
68
|
+
min-height: 38px;
|
|
69
|
+
padding: 0 10px;
|
|
70
|
+
justify-content: flex-start;
|
|
71
|
+
gap: 9px;
|
|
72
|
+
font: inherit;
|
|
73
|
+
font-size: 11px;
|
|
74
|
+
text-align: left;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.home-conversations-driver-header:not(:has(.home-conversations-sheet-item)) .home-conversations-driver-toggle span:first-of-type {
|
|
78
|
+
flex: 1;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.home-conversations-worker-children {
|
|
82
|
+
margin-left: 16px;
|
|
83
|
+
padding-left: 10px;
|
|
84
|
+
border-left: 1px solid color-mix(in srgb, var(--text-dimmer) 22%, transparent);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.home-conversations-worker-item .home-conversations-sheet-row {
|
|
88
|
+
padding-block: 8px;
|
|
89
|
+
}
|
|
90
|
+
|
|
25
91
|
.home-sidebar-recent-row:focus-visible,
|
|
26
92
|
.home-conversations-sheet-row:focus-visible {
|
|
27
93
|
position: relative;
|
|
@@ -478,6 +478,72 @@
|
|
|
478
478
|
line-height: 1.45;
|
|
479
479
|
}
|
|
480
480
|
|
|
481
|
+
.home-sidebar-driver-header {
|
|
482
|
+
display: flex;
|
|
483
|
+
align-items: stretch;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
.home-sidebar-driver-header > .home-sidebar-recent-item {
|
|
487
|
+
min-width: 0;
|
|
488
|
+
flex: 1;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
.home-sidebar-driver-toggle {
|
|
492
|
+
width: 27px;
|
|
493
|
+
padding: 0;
|
|
494
|
+
border: 0;
|
|
495
|
+
border-radius: 7px;
|
|
496
|
+
display: inline-flex;
|
|
497
|
+
align-items: center;
|
|
498
|
+
justify-content: center;
|
|
499
|
+
flex-shrink: 0;
|
|
500
|
+
color: var(--text-dimmer);
|
|
501
|
+
background: transparent;
|
|
502
|
+
cursor: pointer;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
.home-sidebar-driver-toggle:hover,
|
|
506
|
+
.home-sidebar-driver-toggle:focus-visible {
|
|
507
|
+
color: var(--text);
|
|
508
|
+
background: rgba(var(--overlay-rgb), 0.05);
|
|
509
|
+
outline: none;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
.home-sidebar-driver-toggle .lucide {
|
|
513
|
+
width: 13px;
|
|
514
|
+
height: 13px;
|
|
515
|
+
transition: transform 0.15s ease;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
.home-sidebar-driver-toggle[aria-expanded="true"] .lucide {
|
|
519
|
+
transform: rotate(90deg);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
.home-sidebar-worker-children {
|
|
523
|
+
margin-left: 13px;
|
|
524
|
+
padding-left: 8px;
|
|
525
|
+
border-left: 1px solid color-mix(in srgb, var(--text-dimmer) 22%, transparent);
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
.home-sidebar-worker-item .home-sidebar-recent-row {
|
|
529
|
+
min-height: 38px;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
.home-sidebar-orphan-toggle {
|
|
533
|
+
width: 100%;
|
|
534
|
+
min-height: 34px;
|
|
535
|
+
padding: 0 8px;
|
|
536
|
+
justify-content: flex-start;
|
|
537
|
+
gap: 7px;
|
|
538
|
+
font: inherit;
|
|
539
|
+
font-size: 11px;
|
|
540
|
+
text-align: left;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
.home-sidebar-orphan-toggle span:first-of-type {
|
|
544
|
+
flex: 1;
|
|
545
|
+
}
|
|
546
|
+
|
|
481
547
|
.home-sidebar-expand {
|
|
482
548
|
position: absolute;
|
|
483
549
|
top: 8px;
|
package/lib/public/css/input.css
CHANGED
|
@@ -52,11 +52,32 @@
|
|
|
52
52
|
background: var(--bg-alt);
|
|
53
53
|
border: 1px solid var(--border);
|
|
54
54
|
border-radius: 10px;
|
|
55
|
-
padding:
|
|
55
|
+
padding: 0;
|
|
56
56
|
font-size: 12px;
|
|
57
57
|
max-width: 200px;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
.pasted-chip-open {
|
|
61
|
+
display: inline-flex;
|
|
62
|
+
align-items: center;
|
|
63
|
+
gap: 6px;
|
|
64
|
+
min-width: 0;
|
|
65
|
+
padding: 6px 4px 6px 10px;
|
|
66
|
+
border: 0;
|
|
67
|
+
background: transparent;
|
|
68
|
+
color: inherit;
|
|
69
|
+
cursor: pointer;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.pasted-chip-open:hover .pasted-chip-preview,
|
|
73
|
+
.pasted-chip-open:focus-visible .pasted-chip-preview { color: var(--text); }
|
|
74
|
+
|
|
75
|
+
.pasted-chip-open:focus-visible,
|
|
76
|
+
.pasted-chip-remove:focus-visible {
|
|
77
|
+
outline: 2px solid var(--accent);
|
|
78
|
+
outline-offset: 1px;
|
|
79
|
+
}
|
|
80
|
+
|
|
60
81
|
.pasted-chip-preview {
|
|
61
82
|
color: var(--text-muted);
|
|
62
83
|
overflow: hidden;
|
|
@@ -87,6 +108,7 @@
|
|
|
87
108
|
cursor: pointer;
|
|
88
109
|
padding: 0;
|
|
89
110
|
flex-shrink: 0;
|
|
111
|
+
margin-right: 6px;
|
|
90
112
|
}
|
|
91
113
|
|
|
92
114
|
.pasted-chip-remove .lucide { width: 12px; height: 12px; }
|
|
@@ -156,6 +178,59 @@
|
|
|
156
178
|
min-height: 0;
|
|
157
179
|
}
|
|
158
180
|
|
|
181
|
+
.paste-modal-editor,
|
|
182
|
+
.paste-modal-footer { display: none; }
|
|
183
|
+
|
|
184
|
+
.paste-modal-editing .paste-modal-body { display: none; }
|
|
185
|
+
|
|
186
|
+
.paste-modal-editing .paste-modal-editor {
|
|
187
|
+
display: block;
|
|
188
|
+
width: 100%;
|
|
189
|
+
min-height: min(52vh, 420px);
|
|
190
|
+
resize: vertical;
|
|
191
|
+
border: 0;
|
|
192
|
+
border-radius: 0;
|
|
193
|
+
outline: 0;
|
|
194
|
+
padding: 16px 20px;
|
|
195
|
+
background: var(--bg);
|
|
196
|
+
color: var(--text-secondary);
|
|
197
|
+
font-family: "Roboto Mono", monospace;
|
|
198
|
+
font-size: 13px;
|
|
199
|
+
line-height: 1.55;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.paste-modal-editing .paste-modal-editor:focus {
|
|
203
|
+
box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--accent) 55%, transparent);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.paste-modal-editing .paste-modal-footer {
|
|
207
|
+
display: flex;
|
|
208
|
+
justify-content: flex-end;
|
|
209
|
+
gap: 8px;
|
|
210
|
+
padding: 12px 16px;
|
|
211
|
+
border-top: 1px solid var(--border-subtle);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.paste-modal-cancel,
|
|
215
|
+
.paste-modal-save {
|
|
216
|
+
border: 1px solid var(--border);
|
|
217
|
+
border-radius: 8px;
|
|
218
|
+
padding: 7px 12px;
|
|
219
|
+
font: inherit;
|
|
220
|
+
cursor: pointer;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.paste-modal-cancel {
|
|
224
|
+
background: transparent;
|
|
225
|
+
color: var(--text-secondary);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.paste-modal-save {
|
|
229
|
+
border-color: var(--accent);
|
|
230
|
+
background: var(--accent);
|
|
231
|
+
color: var(--accent-text, white);
|
|
232
|
+
}
|
|
233
|
+
|
|
159
234
|
/* --- File chips (input preview) --- */
|
|
160
235
|
.file-chip {
|
|
161
236
|
display: inline-flex;
|
|
@@ -286,9 +361,11 @@
|
|
|
286
361
|
#context-sources-add {
|
|
287
362
|
display: inline-flex;
|
|
288
363
|
align-items: center;
|
|
289
|
-
|
|
364
|
+
justify-content: center;
|
|
365
|
+
position: relative;
|
|
366
|
+
width: 36px;
|
|
290
367
|
height: 36px;
|
|
291
|
-
padding: 0
|
|
368
|
+
padding: 0;
|
|
292
369
|
border-radius: 18px;
|
|
293
370
|
border: none;
|
|
294
371
|
background: transparent;
|
|
@@ -322,6 +399,9 @@
|
|
|
322
399
|
font-size: 10px;
|
|
323
400
|
font-weight: 700;
|
|
324
401
|
line-height: 1;
|
|
402
|
+
position: absolute;
|
|
403
|
+
top: 0;
|
|
404
|
+
right: -1px;
|
|
325
405
|
}
|
|
326
406
|
|
|
327
407
|
.context-chip {
|
|
@@ -667,49 +747,103 @@
|
|
|
667
747
|
position: relative;
|
|
668
748
|
}
|
|
669
749
|
|
|
750
|
+
/* Sidebar session-row badge. Formerly shared its rule with the composer's
|
|
751
|
+
background-tasks chip; it is standalone now that the composer bar no longer
|
|
752
|
+
uses a filled numeric badge. */
|
|
753
|
+
.session-background-task-count {
|
|
754
|
+
display: inline-flex;
|
|
755
|
+
align-items: center;
|
|
756
|
+
justify-content: center;
|
|
757
|
+
min-width: 16px;
|
|
758
|
+
height: 16px;
|
|
759
|
+
padding: 0 4px;
|
|
760
|
+
border-radius: 8px;
|
|
761
|
+
background: var(--accent);
|
|
762
|
+
color: var(--bg);
|
|
763
|
+
font-size: 10px;
|
|
764
|
+
font-weight: 700;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/* --- Background tasks status line (above the composer) ---
|
|
768
|
+
Reads as a calm status line that belongs to the input surface: subtle
|
|
769
|
+
border, no fill, muted text. Progress is conveyed by the animated dots
|
|
770
|
+
rather than by color or size. */
|
|
670
771
|
.background-tasks-bar {
|
|
671
772
|
max-width: var(--content-width);
|
|
672
|
-
margin: 0 auto
|
|
673
|
-
border: 1px solid var(--border);
|
|
674
|
-
border-radius:
|
|
675
|
-
background:
|
|
773
|
+
margin: 0 auto 6px;
|
|
774
|
+
border: 1px solid var(--border-subtle);
|
|
775
|
+
border-radius: 10px;
|
|
776
|
+
background: transparent;
|
|
676
777
|
overflow: hidden;
|
|
778
|
+
transition: border-color .15s ease, background-color .15s ease;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
.background-tasks-bar:hover,
|
|
782
|
+
.background-tasks-bar.expanded {
|
|
783
|
+
border-color: var(--border);
|
|
784
|
+
background: var(--input-bg);
|
|
677
785
|
}
|
|
678
786
|
|
|
679
787
|
.background-tasks-toggle {
|
|
680
788
|
width: 100%;
|
|
681
789
|
display: flex;
|
|
682
790
|
align-items: center;
|
|
683
|
-
gap:
|
|
684
|
-
padding:
|
|
791
|
+
gap: 9px;
|
|
792
|
+
padding: 7px 11px;
|
|
685
793
|
border: 0;
|
|
686
794
|
background: transparent;
|
|
687
|
-
color: var(--text-
|
|
795
|
+
color: var(--text-muted);
|
|
688
796
|
cursor: pointer;
|
|
689
797
|
font: inherit;
|
|
798
|
+
font-size: 12px;
|
|
690
799
|
text-align: left;
|
|
691
800
|
}
|
|
692
801
|
|
|
693
|
-
.background-tasks-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
802
|
+
.background-tasks-toggle:hover { color: var(--text-secondary); }
|
|
803
|
+
.background-tasks-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: 10px; }
|
|
804
|
+
|
|
805
|
+
.background-tasks-summary { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
806
|
+
|
|
807
|
+
/* Quiet three-dot activity indicator. Same motion as the Home debate dots
|
|
808
|
+
(home-debate-planning.css) but muted instead of accent-colored, since this
|
|
809
|
+
is ambient status rather than something asking to be read. */
|
|
810
|
+
.background-tasks-activity { display: inline-flex; align-items: center; gap: 3px; color: var(--text-muted); flex: none; }
|
|
811
|
+
.background-tasks-activity i { width: 4px; height: 4px; border-radius: 50%; background: currentColor; animation: background-tasks-pulse 1.4s ease-in-out infinite; }
|
|
812
|
+
.background-tasks-activity i:nth-child(2) { animation-delay: .18s; }
|
|
813
|
+
.background-tasks-activity i:nth-child(3) { animation-delay: .36s; }
|
|
814
|
+
@keyframes background-tasks-pulse { 0%, 70%, 100% { opacity: .28; } 35% { opacity: .95; } }
|
|
815
|
+
|
|
816
|
+
.background-tasks-chevron { display: inline-flex; flex: none; color: var(--text-muted); transition: transform .15s ease; }
|
|
817
|
+
.background-tasks-chevron i { width: 14px; height: 14px; }
|
|
818
|
+
.background-tasks-bar.expanded .background-tasks-chevron { transform: rotate(90deg); }
|
|
819
|
+
|
|
820
|
+
.background-tasks-list { padding: 0 11px 7px; }
|
|
821
|
+
.background-task-row { display: flex; align-items: center; gap: 9px; padding: 7px 0; border-top: 1px solid var(--border-subtle); font-size: 12px; }
|
|
822
|
+
.background-task-icon { display: inline-flex; flex: none; color: var(--text-muted); }
|
|
823
|
+
.background-task-icon i { width: 13px; height: 13px; }
|
|
824
|
+
.background-task-description { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text-secondary); }
|
|
825
|
+
/* Housekeeping group: visible so the user can see what Clay runs on its own,
|
|
826
|
+
but subordinate to the work they actually asked for. */
|
|
827
|
+
.background-tasks-section-label { padding: 9px 0 1px; border-top: 1px solid var(--border-subtle); color: var(--text-muted); font-size: 10px; font-weight: 600; letter-spacing: .07em; text-transform: uppercase; }
|
|
828
|
+
.background-tasks-section-label + .background-task-row { border-top: 0; }
|
|
829
|
+
.background-task-row.ambient .background-task-description { color: var(--text-muted); }
|
|
830
|
+
.background-task-row.ambient .background-task-icon { opacity: .7; }
|
|
831
|
+
.background-task-meta { display: inline-flex; align-items: center; gap: 7px; flex: none; color: var(--text-muted); }
|
|
832
|
+
.background-task-type { font-size: 11px; }
|
|
833
|
+
.background-task-elapsed { font-variant-numeric: tabular-nums; font-size: 11px; min-width: 44px; text-align: right; }
|
|
834
|
+
.background-task-stop { flex: none; border: 1px solid var(--border-subtle); border-radius: 6px; padding: 3px 8px; background: transparent; color: var(--text-muted); cursor: pointer; font: inherit; font-size: 11px; }
|
|
835
|
+
.background-task-stop:hover { color: var(--text); border-color: var(--border); }
|
|
836
|
+
.background-task-stop:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
|
837
|
+
|
|
838
|
+
@media (prefers-reduced-motion: reduce) {
|
|
839
|
+
.background-tasks-activity i { animation: none; opacity: .7; }
|
|
840
|
+
.background-tasks-bar, .background-tasks-chevron { transition: none; }
|
|
705
841
|
}
|
|
706
842
|
|
|
707
|
-
|
|
708
|
-
.background-task-
|
|
709
|
-
.background-task-
|
|
710
|
-
|
|
711
|
-
.background-task-stop { border: 1px solid var(--border); border-radius: 5px; padding: 3px 7px; background: transparent; color: var(--text-secondary); cursor: pointer; font: inherit; font-size: 12px; }
|
|
712
|
-
.background-task-stop:hover { color: var(--text); border-color: var(--text-muted); }
|
|
843
|
+
@media (max-width: 600px) {
|
|
844
|
+
.background-task-meta { gap: 5px; }
|
|
845
|
+
.background-task-type { display: none; }
|
|
846
|
+
}
|
|
713
847
|
|
|
714
848
|
#input-row {
|
|
715
849
|
display: flex;
|
|
@@ -1216,6 +1350,7 @@
|
|
|
1216
1350
|
Attach (files/images -> path injection) and voice input stay available. */
|
|
1217
1351
|
body.tui-composer-active #schedule-btn,
|
|
1218
1352
|
body.tui-composer-active #ask-mate-btn,
|
|
1353
|
+
body.tui-composer-active .composer-session-action,
|
|
1219
1354
|
body.tui-composer-active #active-vendor-indicator,
|
|
1220
1355
|
body.tui-composer-active #config-chip-wrap {
|
|
1221
1356
|
display: none !important;
|