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.
- package/lib/git-cli.js +370 -0
- package/lib/git-session-attribution.js +219 -0
- package/lib/project-connection.js +1 -15
- package/lib/project-email.js +0 -61
- package/lib/project-http.js +104 -1
- package/lib/project-session-pair.js +129 -43
- package/lib/project-sessions.js +1 -11
- package/lib/project-user-message.js +2 -0
- package/lib/project-worker-proposal.js +317 -0
- package/lib/project.js +23 -8
- package/lib/public/app.js +14 -2
- package/lib/public/css/filebrowser.css +320 -0
- package/lib/public/css/git-panel.css +424 -0
- package/lib/public/css/input.css +0 -3
- package/lib/public/css/worker-proposal.css +127 -0
- package/lib/public/index.html +12 -15
- package/lib/public/modules/app-messages.js +11 -6
- package/lib/public/modules/context-sources.js +0 -90
- package/lib/public/modules/filebrowser.js +135 -21
- package/lib/public/modules/git-panel.js +456 -0
- package/lib/public/modules/input.js +8 -0
- package/lib/public/modules/markdown-slides.js +292 -0
- package/lib/public/modules/mate-sidebar.js +0 -7
- package/lib/public/modules/sidebar.js +42 -0
- package/lib/public/modules/tool-palette.js +1 -2
- package/lib/public/modules/worker-proposal.js +239 -0
- package/lib/public/style.css +2 -0
- package/lib/sdk-bridge.js +47 -6
- package/lib/sdk-message-processor.js +26 -2
- package/lib/session-pair-mcp-server.js +2 -2
- package/lib/sessions.js +1 -1
- package/lib/ws-schema.js +3 -0
- package/lib/yoke/adapters/claude.js +43 -17
- package/lib/yoke/index.js +19 -0
- package/package.json +1 -1
|
@@ -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
|
+
}
|
package/lib/public/css/input.css
CHANGED
|
@@ -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
|
+
}
|
package/lib/public/index.html
CHANGED
|
@@ -268,6 +268,16 @@
|
|
|
268
268
|
<kbd>↵</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
|
|
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;
|