clay-server 3.2.2-beta.3 → 3.3.0-beta.2

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.
@@ -0,0 +1,424 @@
1
+ /* Project Git panel — compact, information-dense, and native to the sidebar. */
2
+
3
+ #sidebar-panel-git {
4
+ background: var(--filebrowser-bg);
5
+ border: 1px solid var(--filebrowser-border);
6
+ border-radius: 8px;
7
+ margin: 6px 6px 12px;
8
+ overflow: hidden;
9
+ display: flex;
10
+ flex-direction: column;
11
+ font-family: "Pretendard", "Twemoji", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
12
+ }
13
+
14
+ #sidebar-panel-git.hidden { display: none; }
15
+ #sidebar-panel-git.fb-enter { animation: fb-in 0.2s ease-out both; }
16
+ #sidebar-panel-git.fb-exit { animation: fb-out 0.15s ease-in both; }
17
+ #sidebar-panel-git button { font-family: inherit; }
18
+
19
+ .git-panel-titlebar {
20
+ display: grid;
21
+ grid-template-columns: 24px 1fr 24px;
22
+ align-items: center;
23
+ gap: 4px;
24
+ padding: 6px;
25
+ border-bottom: 1px solid var(--filebrowser-border);
26
+ color: var(--text-secondary);
27
+ font-size: 12px;
28
+ font-weight: 700;
29
+ text-align: center;
30
+ flex-shrink: 0;
31
+ }
32
+
33
+ .git-panel-titlebar button,
34
+ .git-icon-btn {
35
+ width: 24px;
36
+ height: 24px;
37
+ display: inline-flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ border: 0;
41
+ border-radius: 6px;
42
+ background: transparent;
43
+ color: var(--text-dimmer);
44
+ cursor: pointer;
45
+ padding: 0;
46
+ }
47
+
48
+ .git-panel-titlebar button:hover,
49
+ .git-icon-btn:hover { color: var(--text); background: var(--sidebar-hover); }
50
+ .git-panel-titlebar svg,
51
+ .git-icon-btn svg { width: 13px; height: 13px; }
52
+ #git-panel-refresh.spinning svg { animation: git-panel-spin 0.65s linear infinite; }
53
+
54
+ @keyframes git-panel-spin { to { transform: rotate(360deg); } }
55
+
56
+ .git-panel-body {
57
+ flex: 1;
58
+ min-height: 0;
59
+ overflow: hidden;
60
+ padding: 8px;
61
+ display: flex;
62
+ flex-direction: column;
63
+ }
64
+
65
+ .git-panel-loading,
66
+ .git-panel-empty {
67
+ min-height: 150px;
68
+ display: flex;
69
+ flex-direction: column;
70
+ align-items: center;
71
+ justify-content: center;
72
+ gap: 10px;
73
+ color: var(--text-dimmer);
74
+ text-align: center;
75
+ font-size: 12px;
76
+ line-height: 1.5;
77
+ padding: 18px;
78
+ }
79
+
80
+ .git-panel-loading { flex-direction: row; min-height: 90px; }
81
+ .git-panel-empty svg { width: 26px; height: 26px; opacity: 0.55; }
82
+
83
+ .git-panel-spinner {
84
+ width: 13px;
85
+ height: 13px;
86
+ border: 2px solid var(--border);
87
+ border-top-color: var(--accent);
88
+ border-radius: 50%;
89
+ animation: git-panel-spin 0.7s linear infinite;
90
+ }
91
+
92
+ .git-repo-card {
93
+ border: 1px solid var(--border-subtle);
94
+ border-radius: 8px;
95
+ background: var(--bg-alt);
96
+ padding: 9px;
97
+ margin-bottom: 9px;
98
+ flex-shrink: 0;
99
+ }
100
+
101
+ .git-repo-primary {
102
+ display: flex;
103
+ align-items: center;
104
+ gap: 7px;
105
+ min-width: 0;
106
+ }
107
+
108
+ .git-repo-primary > svg { width: 15px; height: 15px; color: var(--accent); flex-shrink: 0; }
109
+ .git-repo-name { color: var(--text); font-size: 12px; font-weight: 800; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
110
+ .git-branch-name { color: var(--text-muted); font-size: 11px; font-weight: 500; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
111
+
112
+ .git-badges { display: flex; gap: 4px; margin: 7px 0 0 22px; flex-wrap: wrap; }
113
+ .git-badge {
114
+ padding: 2px 6px;
115
+ border-radius: 999px;
116
+ border: 1px solid var(--border-subtle);
117
+ color: var(--text-dimmer);
118
+ background: var(--bg);
119
+ font-size: 9px;
120
+ font-weight: 700;
121
+ letter-spacing: 0.02em;
122
+ text-transform: uppercase;
123
+ }
124
+ .git-badge.detached { color: var(--warning, #d89b42); }
125
+
126
+ .git-origin,
127
+ .git-repo-path {
128
+ display: flex;
129
+ align-items: center;
130
+ gap: 6px;
131
+ min-width: 0;
132
+ color: var(--text-dimmer);
133
+ font-size: 10px;
134
+ font-weight: 450;
135
+ line-height: 1.3;
136
+ }
137
+ .git-repo-path { margin-top: 7px; }
138
+ .git-origin { margin-top: 7px; padding-top: 7px; border-top: 1px solid var(--border-subtle); }
139
+ .git-origin svg,
140
+ .git-repo-path svg { width: 12px; height: 12px; flex-shrink: 0; }
141
+ .git-origin span,
142
+ .git-repo-path span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
143
+
144
+ .git-sync-row { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-bottom: 12px; flex-shrink: 0; }
145
+ .git-action-btn {
146
+ min-height: 30px;
147
+ border: 1px solid var(--border-subtle);
148
+ border-radius: 7px;
149
+ background: var(--bg-alt);
150
+ color: var(--text-muted);
151
+ font-size: 11px;
152
+ font-weight: 700;
153
+ display: inline-flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+ gap: 5px;
157
+ cursor: pointer;
158
+ padding: 5px 8px;
159
+ }
160
+ .git-action-btn:hover:not(:disabled) { border-color: var(--accent); color: var(--text); }
161
+ .git-action-btn:disabled { opacity: 0.42; cursor: default; }
162
+ .git-action-btn svg { width: 13px; height: 13px; }
163
+ .git-sync-count { color: var(--accent); font-size: 10px; font-weight: 700; font-variant-numeric: tabular-nums; }
164
+
165
+ .git-review-all {
166
+ width: 100%;
167
+ min-height: 36px;
168
+ margin-bottom: 9px;
169
+ padding: 7px 9px;
170
+ border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border-subtle));
171
+ border-radius: 7px;
172
+ background: color-mix(in srgb, var(--accent) 6%, var(--bg));
173
+ color: var(--text);
174
+ display: flex;
175
+ align-items: center;
176
+ justify-content: space-between;
177
+ cursor: pointer;
178
+ font-size: 10px;
179
+ flex-shrink: 0;
180
+ }
181
+ .git-review-all:hover { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 10%, var(--bg)); }
182
+ .git-review-all > span { display: inline-flex; align-items: center; gap: 6px; }
183
+ .git-review-all svg { width: 12px; height: 12px; color: var(--accent); }
184
+ .git-review-count { color: var(--text-dimmer); font-size: 9px; font-weight: 600; font-variant-numeric: tabular-nums; }
185
+ .git-review-count svg { width: 9px; height: 9px; color: currentColor; }
186
+
187
+ .git-section {
188
+ min-height: 0;
189
+ margin-bottom: 11px;
190
+ display: flex;
191
+ flex-direction: column;
192
+ }
193
+ .git-section-staged { flex: 0 1 auto; max-height: 32%; }
194
+ .git-section-changes { flex: 1 1 120px; }
195
+ .git-section-only { flex: 1 1 120px; max-height: none; }
196
+ .git-section-header {
197
+ min-height: 25px;
198
+ display: flex;
199
+ align-items: center;
200
+ gap: 6px;
201
+ padding: 0 2px;
202
+ color: var(--text-secondary);
203
+ font-size: 10px;
204
+ font-weight: 800;
205
+ letter-spacing: 0.055em;
206
+ text-transform: uppercase;
207
+ flex-shrink: 0;
208
+ }
209
+ .git-section-count { color: var(--text-dimmer); font-size: 9px; font-weight: 700; font-variant-numeric: tabular-nums; }
210
+ .git-section-header .git-action-btn { min-height: 22px; margin-left: auto; padding: 2px 7px; font-size: 9px; }
211
+
212
+ .git-file-list {
213
+ min-height: 0;
214
+ border: 1px solid var(--border-subtle);
215
+ border-radius: 7px;
216
+ overflow-x: hidden;
217
+ overflow-y: auto;
218
+ overscroll-behavior: contain;
219
+ scrollbar-gutter: stable;
220
+ }
221
+ .git-file-row {
222
+ display: grid;
223
+ grid-template-columns: 20px minmax(0, 1fr) 27px;
224
+ min-height: 42px;
225
+ align-items: center;
226
+ background: var(--bg);
227
+ border-bottom: 1px solid var(--border-subtle);
228
+ cursor: pointer;
229
+ transition: background-color 180ms ease, box-shadow 180ms ease;
230
+ }
231
+ .git-file-row:last-child { border-bottom: 0; }
232
+ .git-file-row:hover { background: var(--sidebar-hover); }
233
+ .git-file-row.active {
234
+ background: color-mix(in srgb, var(--accent) 7%, var(--bg));
235
+ box-shadow: inset 2px 0 0 color-mix(in srgb, var(--accent) 70%, transparent);
236
+ }
237
+ .git-file-status {
238
+ text-align: center;
239
+ color: var(--text-dimmer);
240
+ font-family: inherit;
241
+ font-size: 9px;
242
+ font-weight: 750;
243
+ line-height: 1;
244
+ letter-spacing: -0.02em;
245
+ }
246
+ .git-file-status.untracked { color: #48a868; }
247
+ .git-file-status.conflicted { color: var(--danger, #d85b5b); }
248
+ .git-file-main { min-width: 0; padding: 5px 2px; cursor: pointer; outline: none; }
249
+ .git-file-main:focus-visible { border-radius: 4px; box-shadow: 0 0 0 1px var(--accent); }
250
+ .git-file-name { color: var(--text); font-size: 11px; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
251
+ .git-file-subline {
252
+ display: flex;
253
+ align-items: center;
254
+ gap: 4px;
255
+ min-width: 0;
256
+ margin-top: 1px;
257
+ height: 14px;
258
+ color: var(--text-dimmer);
259
+ font-size: 9px;
260
+ font-weight: 450;
261
+ line-height: 1.2;
262
+ }
263
+ .git-file-dir { min-width: 24px; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
264
+ .git-file-meta-separator { flex-shrink: 0; color: var(--border); }
265
+ .git-session-link {
266
+ min-width: 0;
267
+ max-width: 92px;
268
+ border: 0;
269
+ background: transparent;
270
+ color: var(--text-dimmer);
271
+ padding: 0;
272
+ display: inline-flex;
273
+ align-items: center;
274
+ cursor: pointer;
275
+ overflow: hidden;
276
+ flex-shrink: 1;
277
+ font: inherit;
278
+ letter-spacing: 0;
279
+ text-align: left;
280
+ }
281
+ .git-session-link span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
282
+ .git-session-link:hover:not(:disabled) { color: var(--accent); }
283
+ .git-session-link:disabled { cursor: default; }
284
+ .git-file-actions {
285
+ display: grid;
286
+ grid-template-columns: repeat(2, minmax(0, 1fr));
287
+ gap: 4px;
288
+ max-height: 0;
289
+ margin-top: 0;
290
+ padding-top: 0;
291
+ border-top: 1px solid transparent;
292
+ opacity: 0;
293
+ overflow: hidden;
294
+ visibility: hidden;
295
+ transform: translateY(-4px);
296
+ pointer-events: none;
297
+ transition:
298
+ max-height 220ms cubic-bezier(0.22, 1, 0.36, 1),
299
+ margin-top 220ms cubic-bezier(0.22, 1, 0.36, 1),
300
+ padding-top 220ms cubic-bezier(0.22, 1, 0.36, 1),
301
+ border-color 160ms ease,
302
+ opacity 140ms ease,
303
+ transform 220ms cubic-bezier(0.22, 1, 0.36, 1),
304
+ visibility 0s linear 220ms;
305
+ }
306
+ .git-file-actions.open {
307
+ max-height: 64px;
308
+ margin-top: 5px;
309
+ padding-top: 5px;
310
+ border-top-color: var(--border-subtle);
311
+ opacity: 1;
312
+ visibility: visible;
313
+ transform: translateY(0);
314
+ pointer-events: auto;
315
+ transition-delay: 0s;
316
+ }
317
+ .git-file-text-action {
318
+ min-width: 0;
319
+ min-height: 26px;
320
+ padding: 3px 5px;
321
+ border: 1px solid var(--border-subtle);
322
+ border-radius: 5px;
323
+ background: var(--bg-alt);
324
+ color: var(--text-muted);
325
+ display: inline-flex;
326
+ align-items: center;
327
+ justify-content: center;
328
+ gap: 4px;
329
+ font-size: 10px;
330
+ font-weight: 550;
331
+ cursor: pointer;
332
+ white-space: nowrap;
333
+ }
334
+ .git-file-actions > .git-file-text-action:only-child { grid-column: 1 / -1; }
335
+ .git-file-text-action-wide { grid-column: 1 / -1; }
336
+ .git-file-text-action:hover { color: var(--text); border-color: var(--accent); }
337
+ .git-file-text-action svg { width: 11px; height: 11px; color: var(--accent); flex-shrink: 0; }
338
+
339
+ @media (prefers-reduced-motion: reduce) {
340
+ .git-file-row,
341
+ .git-file-actions { transition: none; }
342
+ }
343
+
344
+ .git-diff-review-nav {
345
+ display: inline-flex;
346
+ align-items: center;
347
+ gap: 5px;
348
+ margin-left: auto;
349
+ color: var(--text-dimmer);
350
+ font-family: "Pretendard", "Twemoji", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
351
+ font-size: 10px;
352
+ font-weight: 600;
353
+ font-variant-numeric: tabular-nums;
354
+ }
355
+ .git-diff-review-nav button {
356
+ min-width: 25px;
357
+ height: 24px;
358
+ border: 1px solid var(--border-subtle);
359
+ border-radius: 5px;
360
+ background: var(--bg);
361
+ color: var(--text-muted);
362
+ cursor: pointer;
363
+ font: inherit;
364
+ line-height: 1;
365
+ }
366
+ .git-diff-review-nav button:hover:not(:disabled) { border-color: var(--accent); color: var(--text); }
367
+ .git-diff-review-nav button:disabled { opacity: 0.35; cursor: default; }
368
+ .git-diff-review-nav .git-diff-ask-agent {
369
+ width: auto;
370
+ padding: 0 7px;
371
+ gap: 4px;
372
+ font-size: 11px;
373
+ font-weight: 500;
374
+ display: inline-flex;
375
+ align-items: center;
376
+ border-color: var(--border-subtle);
377
+ color: var(--text-muted);
378
+ }
379
+ .git-diff-review-nav .git-diff-ask-agent svg { width: 11px; height: 11px; color: var(--accent); }
380
+ .git-diff-review-nav .git-diff-ask-agent:hover { background: var(--sidebar-hover); }
381
+
382
+ .git-agent-commit {
383
+ border-top: 1px solid var(--border-subtle);
384
+ padding-top: 10px;
385
+ margin-top: 5px;
386
+ flex-shrink: 0;
387
+ }
388
+
389
+ .git-agent-commit-copy {
390
+ display: grid;
391
+ grid-template-columns: 28px minmax(0, 1fr);
392
+ gap: 8px;
393
+ align-items: center;
394
+ margin-bottom: 8px;
395
+ }
396
+ .git-agent-commit-icon {
397
+ width: 28px;
398
+ height: 28px;
399
+ display: inline-flex;
400
+ align-items: center;
401
+ justify-content: center;
402
+ border: 1px solid color-mix(in srgb, var(--accent) 38%, var(--border-subtle));
403
+ border-radius: 8px;
404
+ color: var(--accent);
405
+ background: color-mix(in srgb, var(--accent) 8%, var(--bg));
406
+ }
407
+ .git-agent-commit-icon svg { width: 14px; height: 14px; }
408
+ .git-agent-commit-copy strong { display: block; color: var(--text); font-size: 11px; line-height: 1.3; }
409
+ .git-agent-commit-copy span:not(.git-agent-commit-icon) { display: block; color: var(--text-dimmer); font-size: 9px; line-height: 1.4; margin-top: 2px; }
410
+ .git-agent-commit-btn { width: 100%; background: var(--accent); border-color: var(--accent); color: #fff; }
411
+ .git-agent-commit-btn:hover:not(:disabled) { color: #fff; filter: brightness(1.05); }
412
+ .git-next-action { padding-top: 8px; }
413
+
414
+ .git-panel-error {
415
+ margin-bottom: 8px;
416
+ padding: 7px 8px;
417
+ border: 1px solid color-mix(in srgb, var(--danger, #d85b5b) 35%, transparent);
418
+ border-radius: 7px;
419
+ background: color-mix(in srgb, var(--danger, #d85b5b) 8%, transparent);
420
+ color: var(--danger, #d85b5b);
421
+ font-size: 10px;
422
+ line-height: 1.4;
423
+ word-break: break-word;
424
+ }
@@ -512,9 +512,6 @@
512
512
  }
513
513
 
514
514
  /* --- Email setup modal --- */
515
- #email-defaults-modal { position: fixed; inset: 0; z-index: 300; display: flex; align-items: center; justify-content: center; }
516
- #email-defaults-modal.hidden { display: none; }
517
-
518
515
  .email-setup-overlay {
519
516
  position: fixed;
520
517
  inset: 0;
@@ -0,0 +1,127 @@
1
+ /* Inline approval surface for Fable's Driver/Worker recommendation. */
2
+
3
+ .worker-proposal-card {
4
+ width: min(var(--content-width), calc(100% - 40px));
5
+ margin: 16px auto;
6
+ padding: 16px;
7
+ border: 1px solid color-mix(in srgb, var(--accent2) 30%, var(--border));
8
+ border-radius: 16px;
9
+ background:
10
+ radial-gradient(circle at 100% 0%, color-mix(in srgb, var(--accent2) 10%, transparent), transparent 42%),
11
+ var(--bg-alt);
12
+ box-shadow: 0 12px 32px rgba(var(--shadow-rgb), 0.12);
13
+ }
14
+
15
+ .worker-proposal-header {
16
+ display: flex;
17
+ align-items: center;
18
+ gap: 10px;
19
+ }
20
+
21
+ .worker-proposal-mark {
22
+ width: 34px;
23
+ height: 34px;
24
+ display: grid;
25
+ place-items: center;
26
+ flex-shrink: 0;
27
+ border-radius: 11px;
28
+ background: color-mix(in srgb, var(--accent2) 14%, var(--bg));
29
+ color: var(--accent2);
30
+ }
31
+
32
+ .worker-proposal-mark .lucide { width: 17px; height: 17px; }
33
+ .worker-proposal-heading { min-width: 0; display: grid; gap: 1px; }
34
+ .worker-proposal-heading strong { color: var(--text); font-size: 14px; line-height: 1.25; }
35
+ .worker-proposal-kicker { color: var(--accent2); font-size: 8px; font-weight: 800; letter-spacing: 0.14em; }
36
+
37
+ .worker-proposal-status {
38
+ margin-left: auto;
39
+ padding: 3px 8px;
40
+ border-radius: 999px;
41
+ background: color-mix(in srgb, var(--accent2) 10%, transparent);
42
+ color: var(--accent2);
43
+ font-size: 9px;
44
+ font-weight: 700;
45
+ white-space: nowrap;
46
+ }
47
+
48
+ .worker-proposal-summary {
49
+ margin: 12px 0 10px;
50
+ color: var(--text-secondary);
51
+ font-size: 13px;
52
+ line-height: 1.5;
53
+ }
54
+
55
+ .worker-proposal-plan {
56
+ display: grid;
57
+ gap: 5px;
58
+ margin: 0 0 14px;
59
+ padding: 10px 12px 10px 32px;
60
+ border: 1px solid var(--border-subtle);
61
+ border-radius: 11px;
62
+ background: color-mix(in srgb, var(--bg) 72%, transparent);
63
+ color: var(--text-muted);
64
+ font-size: 11px;
65
+ line-height: 1.45;
66
+ }
67
+
68
+ .worker-proposal-plan li::marker { color: var(--accent2); font-weight: 700; }
69
+
70
+ .worker-proposal-config {
71
+ display: grid;
72
+ grid-template-columns: minmax(120px, 0.8fr) minmax(160px, 1.2fr) minmax(190px, auto);
73
+ gap: 9px;
74
+ align-items: end;
75
+ }
76
+
77
+ .worker-proposal-field { min-width: 0; display: grid; gap: 5px; }
78
+ .worker-proposal-field > span { color: var(--text-dimmer); font-size: 9px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; }
79
+ .worker-proposal-vendor-control { position: relative; display: flex; align-items: center; }
80
+ .worker-proposal-vendor-control img { position: absolute; left: 9px; width: 15px; height: 15px; border-radius: 4px; pointer-events: none; z-index: 1; }
81
+ .worker-proposal-vendor-control .worker-proposal-select { padding-left: 30px; }
82
+
83
+ .worker-proposal-select {
84
+ width: 100%;
85
+ height: 34px;
86
+ min-width: 0;
87
+ padding: 0 28px 0 10px;
88
+ border: 1px solid var(--border);
89
+ border-radius: 9px;
90
+ background: var(--input-bg);
91
+ color: var(--text);
92
+ font: inherit;
93
+ font-size: 11px;
94
+ outline: none;
95
+ }
96
+
97
+ .worker-proposal-select:focus { border-color: var(--accent2); }
98
+ .worker-proposal-effort-buttons { display: flex; height: 34px; padding: 3px; border: 1px solid var(--border); border-radius: 9px; background: var(--input-bg); }
99
+ .worker-proposal-effort-btn { flex: 1; min-width: 38px; border: 0; border-radius: 6px; background: transparent; color: var(--text-dimmer); font: inherit; font-size: 9px; font-weight: 650; cursor: pointer; }
100
+ .worker-proposal-effort-btn:hover { color: var(--text); }
101
+ .worker-proposal-effort-btn.active { background: color-mix(in srgb, var(--accent2) 18%, var(--bg)); color: var(--accent2); }
102
+
103
+ .worker-proposal-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 14px; }
104
+ .worker-proposal-action { min-height: 34px; padding: 0 13px; border-radius: 9px; font: inherit; font-size: 11px; font-weight: 700; cursor: pointer; }
105
+ .worker-proposal-action.secondary { border: 1px solid var(--border); background: transparent; color: var(--text-muted); }
106
+ .worker-proposal-action.primary { display: inline-flex; align-items: center; gap: 6px; border: 1px solid color-mix(in srgb, var(--accent2) 55%, var(--border)); background: color-mix(in srgb, var(--accent2) 16%, var(--bg)); color: var(--accent2); }
107
+ .worker-proposal-action.primary .lucide { width: 13px; height: 13px; }
108
+ .worker-proposal-action:not(:disabled):hover { filter: brightness(1.12); }
109
+ .worker-proposal-action:disabled, .worker-proposal-select:disabled, .worker-proposal-effort-btn:disabled { cursor: default; opacity: 0.58; }
110
+
111
+ .worker-proposal-error, .worker-proposal-result { margin-top: 10px; padding: 8px 10px; border-radius: 8px; font-size: 10px; line-height: 1.45; }
112
+ .worker-proposal-error { color: var(--error); background: var(--error-8); }
113
+ .worker-proposal-result { max-height: 96px; overflow: hidden; color: var(--text-muted); background: color-mix(in srgb, var(--success) 7%, transparent); white-space: pre-wrap; }
114
+ .worker-proposal-card[data-status="starting"] .worker-proposal-status,
115
+ .worker-proposal-card[data-status="running"] .worker-proposal-status { animation: worker-proposal-pulse 1.6s ease-in-out infinite; }
116
+ .worker-proposal-card[data-status="completed"] { border-color: color-mix(in srgb, var(--success) 35%, var(--border)); }
117
+ .worker-proposal-card[data-status="completed"] .worker-proposal-status { color: var(--success); background: var(--success-8); }
118
+ .worker-proposal-card[data-status="declined"] .worker-proposal-status { color: var(--text-muted); background: rgba(var(--overlay-rgb), 0.04); }
119
+
120
+ @keyframes worker-proposal-pulse { 50% { opacity: 0.55; } }
121
+
122
+ @media (max-width: 720px) {
123
+ .worker-proposal-card { width: calc(100% - 24px); padding: 14px; }
124
+ .worker-proposal-config { grid-template-columns: 1fr 1fr; }
125
+ .worker-proposal-effort { grid-column: 1 / -1; }
126
+ .worker-proposal-status { display: none; }
127
+ }
@@ -268,6 +268,16 @@
268
268
  <kbd>&#8629;</kbd><span>open</span>
269
269
  </div>
270
270
  </div>
271
+ <div id="sidebar-panel-git" class="sidebar-panel hidden">
272
+ <div class="git-panel-titlebar">
273
+ <button id="git-panel-refresh" type="button" title="Refresh Git status"><i data-lucide="refresh-cw"></i></button>
274
+ <span>Git</span>
275
+ <button id="git-panel-close" type="button" title="Close Git panel"><i data-lucide="x"></i></button>
276
+ </div>
277
+ <div id="git-panel-body" class="git-panel-body">
278
+ <div class="git-panel-loading"><span class="git-panel-spinner"></span> Reading repository</div>
279
+ </div>
280
+ </div>
271
281
  </div>
272
282
  </div>
273
283
  <div id="sidebar-resize-handle"></div>
@@ -642,6 +652,8 @@
642
652
  </span>
643
653
  <button class="file-viewer-btn hidden" id="file-viewer-render" title="Toggle rendered view"><i data-lucide="book-open"></i></button>
644
654
  <button class="file-viewer-btn hidden" id="file-viewer-pdf" title="Export PDF"><i data-lucide="file-down"></i></button>
655
+ <button class="file-viewer-btn hidden" id="file-viewer-slides" title="Present as slides" aria-label="Present Markdown as slides" aria-pressed="false"><i data-lucide="presentation"></i></button>
656
+ <button class="file-viewer-btn file-viewer-slide-level hidden" id="file-viewer-slide-level" title="Split slides by heading level" aria-haspopup="menu" aria-expanded="false"><span>H1</span><i data-lucide="chevron-down"></i></button>
645
657
  <button class="file-viewer-btn hidden" id="file-viewer-history" title="Edit history"><i data-lucide="clock"></i></button>
646
658
  <button class="file-viewer-btn" id="file-viewer-refresh" title="Refresh"><i data-lucide="refresh-cw"></i></button>
647
659
  <button class="file-viewer-btn" id="file-viewer-copy" title="Copy contents" aria-label="Copy contents"><i data-lucide="copy"></i></button>
@@ -1703,21 +1715,6 @@
1703
1715
  </div>
1704
1716
  </div>
1705
1717
 
1706
- <!-- Email Defaults Modal -->
1707
- <div id="email-defaults-modal" class="hidden">
1708
- <div class="confirm-backdrop"></div>
1709
- <div class="confirm-dialog mcp-dialog">
1710
- <div class="mcp-header">
1711
- <span class="mcp-title"><i data-lucide="mail"></i> Email</span>
1712
- <button class="skills-close" id="email-defaults-close"><i data-lucide="x"></i></button>
1713
- </div>
1714
- <div class="mcp-content" id="email-defaults-content">
1715
- <p class="mcp-desc">Toggle email accounts to auto-enable them for every new session in this project.</p>
1716
- <div id="email-defaults-list"></div>
1717
- </div>
1718
- </div>
1719
- </div>
1720
-
1721
1718
  <!-- Debate Modal (Wizard) -->
1722
1719
  <div id="debate-modal" class="hidden">
1723
1720
  <div class="debate-modal-backdrop"></div>
@@ -21,6 +21,7 @@ import { handlePaletteSessionSwitch, setPaletteVersion } from './command-palette
21
21
  import { handleFindInSessionResults } from './session-search.js';
22
22
  import { syncPaneTitles, maybeRestoreSplitGroup, openGroup } from './split-view.js';
23
23
  import { showPairDialog, handlePairCreated, handleSplitDelegation, showWorkerDelegationNotice, hideWorkerDelegationNotice } from './split-pair-ui.js';
24
+ import { renderWorkerProposal, updateWorkerProposal } from './worker-proposal.js';
24
25
  import { handleInputSync, autoResize, builtinCommands, setScheduleBtnDisabled } from './input.js';
25
26
  import { startThinking, appendThinking, stopThinking, resetThinkingGroup, createToolItem, updateToolExecuting, updateToolResult, markAllToolsDone, closeToolGroup, removeToolFromGroup, resetToolState, getTools, getPlanContent, setPlanContent, renderPlanBanner, renderPlanCard, getTodoTools, handleTodoWrite, handleTaskCreate, handleTaskUpdate, applyDeadSessionTodoCompaction, isPlanFilePath, enableMainInput, addTurnMeta, updateSubagentActivity, addSubagentToolEntry, markSubagentDone, initSubagentStop, updateSubagentProgress, updateSubagentTaskStatus, renderAskUserQuestion, markAskUserAnswered, renderPermissionRequest, markPermissionCancelled, markPermissionResolved, renderElicitationRequest, markElicitationResolved, renderUserDialogRequest, markUserDialogResolved, updateThinkingTokens } from './tools.js';
26
27
  import { showDoneNotification, playDoneSound, isNotifAlertEnabled, isNotifSoundEnabled } from './notifications.js';
@@ -32,7 +33,7 @@ import { handleTermList, handleTermCreated, sendTerminalCommand, handleTermOutpu
32
33
  import { attachTuiView, detachTuiView, setTuiSuspendedView, tuiHandleTermOutput, tuiHandleTermResized, tuiHandleTermExited, tuiHandleTermClosed } from './session-tui-view.js';
33
34
  import { handleTuiTranscriptState } from './tui-grab.js';
34
35
  import { tuiModalHandleTermOutput, tuiModalHandleTermResized, tuiModalHandleTermExited, tuiModalHandleTermClosed, openTuiModal } from './tui-attention.js';
35
- import { updateTerminalList, handleContextSourcesState, updateEmailAccountList, updateEmailUnreadCounts, handleEmailTestResult, handleEmailAddResult, handleEmailRemoveResult, handleEmailDefaults } from './context-sources.js';
36
+ import { updateTerminalList, handleContextSourcesState, updateEmailAccountList, updateEmailUnreadCounts, handleEmailTestResult, handleEmailAddResult, handleEmailRemoveResult } from './context-sources.js';
36
37
  import { refreshEmailSettings } from './user-settings.js';
37
38
  import { handleNotesList, handleNoteCreated, handleNoteUpdated, handleNoteDeleted, handleNoteWritten } from './sticky-notes.js';
38
39
  import { handleSkillInstalled, handleSkillUninstalled } from './skills.js';
@@ -587,6 +588,14 @@ export function processMessage(msg) {
587
588
  if (createdPairGroup) openGroup(createdPairGroup);
588
589
  break;
589
590
 
591
+ case "worker_proposal":
592
+ renderWorkerProposal(msg);
593
+ break;
594
+
595
+ case "worker_proposal_update":
596
+ updateWorkerProposal(msg);
597
+ break;
598
+
590
599
  case "split_delegation":
591
600
  handleSplitDelegation(msg);
592
601
  syncPaneTitles();
@@ -932,7 +941,7 @@ export function processMessage(msg) {
932
941
  }
933
942
  renderPlanBanner("exit");
934
943
  getTools()[msg.id] = { el: null, name: msg.name, input: null, done: true, hidden: true };
935
- } else if (msg.name === "propose_debate" || (msg.name && msg.name.indexOf("propose_debate") !== -1)) {
944
+ } else if (msg.name === "propose_debate" || (msg.name && msg.name.indexOf("propose_debate") !== -1) || (msg.name && msg.name.indexOf("propose_worker") !== -1)) {
936
945
  getTools()[msg.id] = { el: null, name: msg.name, input: null, done: true, hidden: true };
937
946
  } else if (msg.name === "ask_user_questions") {
938
947
  getTools()[msg.id] = { el: null, name: msg.name, input: null, done: true, hidden: true };
@@ -1384,10 +1393,6 @@ export function processMessage(msg) {
1384
1393
  handleEmailRemoveResult(msg);
1385
1394
  break;
1386
1395
 
1387
- case "email_defaults":
1388
- handleEmailDefaults(msg);
1389
- break;
1390
-
1391
1396
  case "extension_command":
1392
1397
  sendExtensionCommand(msg.command, msg.args, msg.requestId);
1393
1398
  break;