clay-server 3.3.0-beta.1 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/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-sessions.js +1 -11
- package/lib/project-user-message.js +2 -0
- package/lib/project.js +18 -5
- 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/index.html +12 -15
- package/lib/public/modules/app-messages.js +1 -5
- 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/style.css +1 -0
- package/lib/sdk-bridge.js +46 -5
- package/lib/sdk-message-processor.js +26 -2
- package/lib/sessions.js +1 -1
- 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;
|
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>
|
|
@@ -33,7 +33,7 @@ import { handleTermList, handleTermCreated, sendTerminalCommand, handleTermOutpu
|
|
|
33
33
|
import { attachTuiView, detachTuiView, setTuiSuspendedView, tuiHandleTermOutput, tuiHandleTermResized, tuiHandleTermExited, tuiHandleTermClosed } from './session-tui-view.js';
|
|
34
34
|
import { handleTuiTranscriptState } from './tui-grab.js';
|
|
35
35
|
import { tuiModalHandleTermOutput, tuiModalHandleTermResized, tuiModalHandleTermExited, tuiModalHandleTermClosed, openTuiModal } from './tui-attention.js';
|
|
36
|
-
import { updateTerminalList, handleContextSourcesState, updateEmailAccountList, updateEmailUnreadCounts, handleEmailTestResult, handleEmailAddResult, handleEmailRemoveResult
|
|
36
|
+
import { updateTerminalList, handleContextSourcesState, updateEmailAccountList, updateEmailUnreadCounts, handleEmailTestResult, handleEmailAddResult, handleEmailRemoveResult } from './context-sources.js';
|
|
37
37
|
import { refreshEmailSettings } from './user-settings.js';
|
|
38
38
|
import { handleNotesList, handleNoteCreated, handleNoteUpdated, handleNoteDeleted, handleNoteWritten } from './sticky-notes.js';
|
|
39
39
|
import { handleSkillInstalled, handleSkillUninstalled } from './skills.js';
|
|
@@ -1393,10 +1393,6 @@ export function processMessage(msg) {
|
|
|
1393
1393
|
handleEmailRemoveResult(msg);
|
|
1394
1394
|
break;
|
|
1395
1395
|
|
|
1396
|
-
case "email_defaults":
|
|
1397
|
-
handleEmailDefaults(msg);
|
|
1398
|
-
break;
|
|
1399
|
-
|
|
1400
1396
|
case "extension_command":
|
|
1401
1397
|
sendExtensionCommand(msg.command, msg.args, msg.requestId);
|
|
1402
1398
|
break;
|
|
@@ -10,7 +10,6 @@ var emailUnreadCounts = {}; // accountId -> unread count
|
|
|
10
10
|
var _emailTestPassed = false;
|
|
11
11
|
var _emailPendingSave = false;
|
|
12
12
|
var _emailDoSave = null; // set by showEmailSetupModal
|
|
13
|
-
var emailDefaultAccountIds = []; // project-level defaults
|
|
14
13
|
|
|
15
14
|
export function initContextSources(_ctx) {
|
|
16
15
|
ctx = _ctx;
|
|
@@ -758,95 +757,6 @@ export function hasActiveSources() {
|
|
|
758
757
|
return activeSourceIds.size > 0;
|
|
759
758
|
}
|
|
760
759
|
|
|
761
|
-
// --- Email Defaults Modal (project-level) ---
|
|
762
|
-
|
|
763
|
-
export function handleEmailDefaults(msg) {
|
|
764
|
-
emailDefaultAccountIds = msg.accounts || [];
|
|
765
|
-
renderEmailDefaultsList();
|
|
766
|
-
}
|
|
767
|
-
|
|
768
|
-
export function initEmailDefaultsModal() {
|
|
769
|
-
var btn = document.getElementById("email-sidebar-btn");
|
|
770
|
-
var modal = document.getElementById("email-defaults-modal");
|
|
771
|
-
var closeBtn = document.getElementById("email-defaults-close");
|
|
772
|
-
if (!btn || !modal) return;
|
|
773
|
-
|
|
774
|
-
btn.addEventListener("click", function () {
|
|
775
|
-
modal.classList.remove("hidden");
|
|
776
|
-
// Request current defaults from server
|
|
777
|
-
if (ctx && ctx.ws && ctx.connected) {
|
|
778
|
-
ctx.ws.send(JSON.stringify({ type: "email_defaults_get" }));
|
|
779
|
-
}
|
|
780
|
-
renderEmailDefaultsList();
|
|
781
|
-
if (typeof lucide !== "undefined") lucide.createIcons();
|
|
782
|
-
});
|
|
783
|
-
|
|
784
|
-
if (closeBtn) {
|
|
785
|
-
closeBtn.addEventListener("click", function () {
|
|
786
|
-
modal.classList.add("hidden");
|
|
787
|
-
});
|
|
788
|
-
}
|
|
789
|
-
|
|
790
|
-
var backdrop = modal.querySelector(".confirm-backdrop");
|
|
791
|
-
if (backdrop) {
|
|
792
|
-
backdrop.addEventListener("click", function () {
|
|
793
|
-
modal.classList.add("hidden");
|
|
794
|
-
});
|
|
795
|
-
}
|
|
796
|
-
}
|
|
797
|
-
|
|
798
|
-
function renderEmailDefaultsList() {
|
|
799
|
-
var listEl = document.getElementById("email-defaults-list");
|
|
800
|
-
if (!listEl) return;
|
|
801
|
-
listEl.innerHTML = "";
|
|
802
|
-
|
|
803
|
-
if (emailAccountList.length === 0) {
|
|
804
|
-
var emptyEl = document.createElement("div");
|
|
805
|
-
emptyEl.className = "mcp-empty";
|
|
806
|
-
emptyEl.innerHTML = '<p>No email accounts connected.</p>' +
|
|
807
|
-
'<button class="us-email-add-btn" type="button" style="margin:12px auto 0">+ Add Account</button>';
|
|
808
|
-
var addBtn = emptyEl.querySelector("button");
|
|
809
|
-
addBtn.addEventListener("click", function () {
|
|
810
|
-
document.getElementById("email-defaults-modal").classList.add("hidden");
|
|
811
|
-
showEmailSetupModal();
|
|
812
|
-
});
|
|
813
|
-
listEl.appendChild(emptyEl);
|
|
814
|
-
return;
|
|
815
|
-
}
|
|
816
|
-
|
|
817
|
-
for (var i = 0; i < emailAccountList.length; i++) {
|
|
818
|
-
var acc = emailAccountList[i];
|
|
819
|
-
var isOn = emailDefaultAccountIds.indexOf(acc.id) !== -1;
|
|
820
|
-
|
|
821
|
-
var row = document.createElement("label");
|
|
822
|
-
row.className = "settings-toggle-row";
|
|
823
|
-
row.innerHTML =
|
|
824
|
-
'<div>' +
|
|
825
|
-
'<span class="settings-label">' + escapeHtml(acc.email) + '</span>' +
|
|
826
|
-
'<div class="settings-hint">' + escapeHtml(acc.label || acc.provider || "Custom") + '</div>' +
|
|
827
|
-
'</div>' +
|
|
828
|
-
'<input type="checkbox" data-account-id="' + escapeHtml(acc.id) + '"' + (isOn ? ' checked' : '') + '>' +
|
|
829
|
-
'<span class="toggle-track"><span class="toggle-thumb"></span></span>';
|
|
830
|
-
|
|
831
|
-
var checkbox = row.querySelector("input");
|
|
832
|
-
checkbox.addEventListener("change", function () {
|
|
833
|
-
var accId = this.getAttribute("data-account-id");
|
|
834
|
-
var idx = emailDefaultAccountIds.indexOf(accId);
|
|
835
|
-
if (this.checked && idx === -1) {
|
|
836
|
-
emailDefaultAccountIds.push(accId);
|
|
837
|
-
} else if (!this.checked && idx !== -1) {
|
|
838
|
-
emailDefaultAccountIds.splice(idx, 1);
|
|
839
|
-
}
|
|
840
|
-
// Save to server
|
|
841
|
-
if (ctx && ctx.ws && ctx.connected) {
|
|
842
|
-
ctx.ws.send(JSON.stringify({ type: "email_defaults_save", accounts: emailDefaultAccountIds }));
|
|
843
|
-
}
|
|
844
|
-
});
|
|
845
|
-
|
|
846
|
-
listEl.appendChild(row);
|
|
847
|
-
}
|
|
848
|
-
}
|
|
849
|
-
|
|
850
760
|
function escapeHtml(str) {
|
|
851
761
|
var div = document.createElement("div");
|
|
852
762
|
div.textContent = str;
|