buddy-builder 1.4.3 → 1.4.5

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.
@@ -142,7 +142,7 @@ body {
142
142
 
143
143
  .title-search-input {
144
144
  width: 100%;
145
- padding: 3px 26px 3px 28px;
145
+ padding: 6px 26px 6px 28px;
146
146
  border: 1px solid var(--border);
147
147
  border-radius: var(--radius);
148
148
  background: var(--bg-2);
@@ -102,6 +102,116 @@
102
102
  margin-left: 8px;
103
103
  }
104
104
 
105
+ .model-badge.clickable {
106
+ cursor: pointer;
107
+ border: 1px solid transparent;
108
+ transition: background 0.15s, border-color 0.15s;
109
+ }
110
+
111
+ .model-badge.clickable:hover {
112
+ background: var(--hover-bg);
113
+ border-color: var(--border-strong);
114
+ }
115
+
116
+ .model-badge.clickable.disabled {
117
+ cursor: default;
118
+ opacity: 0.5;
119
+ }
120
+
121
+ .model-badge.clickable.disabled:hover {
122
+ background: var(--bg-3);
123
+ border-color: transparent;
124
+ }
125
+
126
+ /* ─── Effort picker ─── */
127
+ .effort-picker-wrap { position: relative; margin-left: 4px; }
128
+
129
+ .effort-badge {
130
+ font-size: 11px;
131
+ font-family: var(--font-mono);
132
+ color: var(--text-muted);
133
+ background: var(--bg-3);
134
+ border: 1px solid var(--border);
135
+ border-radius: var(--radius);
136
+ padding: 2px 8px;
137
+ white-space: nowrap;
138
+ flex-shrink: 0;
139
+ }
140
+
141
+ .effort-badge.clickable {
142
+ cursor: pointer;
143
+ border: 1px solid transparent;
144
+ transition: background 0.15s, border-color 0.15s;
145
+ }
146
+
147
+ .effort-badge.clickable:hover {
148
+ background: var(--hover-bg);
149
+ border-color: var(--border-strong);
150
+ }
151
+
152
+ .effort-badge.clickable.disabled {
153
+ cursor: default;
154
+ opacity: 0.5;
155
+ }
156
+
157
+ .effort-badge.clickable.disabled:hover {
158
+ background: var(--bg-3);
159
+ border-color: transparent;
160
+ }
161
+
162
+ .model-picker-wrap {
163
+ position: relative;
164
+ }
165
+
166
+ .model-chevron {
167
+ font-size: 9px;
168
+ color: var(--text-muted);
169
+ margin-left: 4px;
170
+ }
171
+
172
+ .model-dropdown {
173
+ position: absolute;
174
+ top: calc(100% + 4px);
175
+ left: 0;
176
+ background: var(--bg-3);
177
+ border: 1px solid var(--border-strong);
178
+ border-radius: var(--radius-lg);
179
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
180
+ z-index: 50;
181
+ min-width: 140px;
182
+ padding: 4px;
183
+ animation: dropdown-in 0.12s ease-out;
184
+ }
185
+
186
+ .model-dropdown-item {
187
+ display: flex;
188
+ align-items: center;
189
+ gap: 10px;
190
+ width: 100%;
191
+ padding: 8px 12px;
192
+ border: none;
193
+ background: none;
194
+ color: var(--text-secondary);
195
+ font-size: 13px;
196
+ font-family: var(--font-mono);
197
+ cursor: pointer;
198
+ border-radius: var(--radius);
199
+ transition: background 0.1s;
200
+ }
201
+
202
+ .model-dropdown-item:hover {
203
+ background: var(--hover-bg);
204
+ color: var(--text);
205
+ }
206
+
207
+ .model-dropdown-item.active {
208
+ color: var(--text);
209
+ font-weight: 600;
210
+ }
211
+
212
+ .model-dropdown-label { flex: 1; text-align: left; }
213
+ .model-dropdown-check { color: var(--accent); font-size: 14px; }
214
+
105
215
  .token-counter {
106
216
  font-size: 11px;
107
217
  font-family: var(--font-mono);
@@ -110,6 +220,41 @@
110
220
  white-space: nowrap;
111
221
  }
112
222
 
223
+ /* ─── Context usage meter ─── */
224
+
225
+ .context-meter {
226
+ display: flex;
227
+ flex-direction: column;
228
+ align-items: flex-end;
229
+ gap: 2px;
230
+ padding: 2px 8px;
231
+ }
232
+
233
+ .context-meter-stats {
234
+ font-size: 11px;
235
+ font-family: var(--font-mono);
236
+ color: var(--text-muted);
237
+ white-space: nowrap;
238
+ }
239
+
240
+ .context-meter-bar {
241
+ width: 80px;
242
+ height: 3px;
243
+ background: var(--bg-3);
244
+ border-radius: 2px;
245
+ overflow: hidden;
246
+ }
247
+
248
+ .context-meter-fill {
249
+ height: 100%;
250
+ border-radius: 2px;
251
+ transition: width 0.3s ease;
252
+ }
253
+
254
+ .context-meter-fill.low { background: var(--accent); }
255
+ .context-meter-fill.mid { background: #e0a030; }
256
+ .context-meter-fill.high { background: #d04040; }
257
+
113
258
  /* ─── Rate limit banner ─── */
114
259
 
115
260
  .rate-limit-banner {
@@ -183,6 +328,43 @@
183
328
  background: var(--accent-bg);
184
329
  }
185
330
 
331
+ /* ─── Rewind banner ─── */
332
+
333
+ .rewind-banner {
334
+ display: flex;
335
+ align-items: center;
336
+ justify-content: center;
337
+ gap: 10px;
338
+ padding: 6px 12px;
339
+ background: rgba(0,168,232,0.08);
340
+ border-top: 1px solid var(--accent);
341
+ font-size: 12px;
342
+ color: var(--text-secondary);
343
+ }
344
+
345
+ .rewind-banner-btn {
346
+ padding: 3px 12px;
347
+ border-radius: var(--radius);
348
+ border: 1px solid var(--accent);
349
+ background: transparent;
350
+ color: var(--accent);
351
+ font-size: 12px;
352
+ font-family: inherit;
353
+ cursor: pointer;
354
+ font-weight: 600;
355
+ }
356
+
357
+ .rewind-banner-btn:hover { background: rgba(0,168,232,0.1); }
358
+
359
+ .export-btn-wrap { position: relative; }
360
+
361
+ .compact-btn:disabled,
362
+ .fork-btn:disabled {
363
+ opacity: 0.35;
364
+ cursor: default;
365
+ pointer-events: none;
366
+ }
367
+
186
368
  /* ─── PolicyPicker (shared component) ─── */
187
369
 
188
370
  .policy-picker-wrap {
@@ -223,3 +223,198 @@
223
223
  }
224
224
 
225
225
  .browse-btn:hover { background: var(--bg-3, var(--bg-1)); }
226
+
227
+ /* ─── New Session Dialog ─── */
228
+
229
+ .modal-panel {
230
+ background: var(--bg-3);
231
+ border: 1px solid var(--border-strong);
232
+ border-radius: var(--radius-lg);
233
+ width: 440px;
234
+ max-width: 90vw;
235
+ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6);
236
+ overflow: hidden;
237
+ }
238
+
239
+ .modal-header {
240
+ display: flex;
241
+ align-items: center;
242
+ justify-content: space-between;
243
+ padding: 16px 18px 12px;
244
+ border-bottom: 1px solid var(--border-subtle);
245
+ }
246
+
247
+ .modal-title {
248
+ font-size: 16px;
249
+ font-weight: 700;
250
+ color: var(--text);
251
+ margin: 0;
252
+ }
253
+
254
+ .field-label {
255
+ display: block;
256
+ font-size: 12px;
257
+ font-weight: 600;
258
+ color: var(--text-secondary);
259
+ margin: 12px 0 4px;
260
+ }
261
+
262
+ .field-label:first-child { margin-top: 0; }
263
+
264
+ .field-input {
265
+ width: 100%;
266
+ padding: 7px 10px;
267
+ border-radius: var(--radius);
268
+ border: 1px solid var(--border);
269
+ background: var(--bg-1);
270
+ color: var(--text);
271
+ font-family: inherit;
272
+ font-size: 13px;
273
+ outline: none;
274
+ box-sizing: border-box;
275
+ }
276
+
277
+ .field-input:focus { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
278
+
279
+ .field-row {
280
+ display: flex;
281
+ gap: 6px;
282
+ }
283
+
284
+ .field-row .field-input { flex: 1; min-width: 0; }
285
+
286
+ .field-btn {
287
+ padding: 6px 14px;
288
+ border-radius: var(--radius);
289
+ border: 1px solid var(--border);
290
+ background: var(--bg-2);
291
+ color: var(--text-primary);
292
+ font-size: 13px;
293
+ font-family: inherit;
294
+ cursor: pointer;
295
+ white-space: nowrap;
296
+ }
297
+
298
+ .field-btn:hover { background: var(--bg-3); }
299
+
300
+ .field-select {
301
+ width: 100%;
302
+ padding: 7px 10px;
303
+ border-radius: var(--radius);
304
+ border: 1px solid var(--border);
305
+ background: var(--bg-1);
306
+ color: var(--text);
307
+ font-family: inherit;
308
+ font-size: 13px;
309
+ outline: none;
310
+ box-sizing: border-box;
311
+ cursor: pointer;
312
+ }
313
+
314
+ .field-select:focus { border-color: var(--accent); }
315
+
316
+ .field-textarea {
317
+ width: 100%;
318
+ padding: 8px 10px;
319
+ border-radius: var(--radius);
320
+ border: 1px solid var(--border);
321
+ background: var(--bg-1);
322
+ color: var(--text);
323
+ font-family: inherit;
324
+ font-size: 13px;
325
+ outline: none;
326
+ resize: vertical;
327
+ min-height: 60px;
328
+ box-sizing: border-box;
329
+ }
330
+
331
+ .field-textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
332
+
333
+ .modal-btn-primary {
334
+ padding: 7px 18px;
335
+ border-radius: var(--radius);
336
+ border: none;
337
+ background: var(--accent);
338
+ color: #fff;
339
+ font-weight: 600;
340
+ font-family: inherit;
341
+ font-size: 13px;
342
+ cursor: pointer;
343
+ }
344
+
345
+ .modal-btn-primary:hover { background: var(--accent-dim); }
346
+
347
+ .modal-btn-secondary {
348
+ padding: 7px 18px;
349
+ border-radius: var(--radius);
350
+ border: 1px solid var(--border);
351
+ background: none;
352
+ color: var(--text-secondary);
353
+ font-weight: 500;
354
+ font-family: inherit;
355
+ font-size: 13px;
356
+ cursor: pointer;
357
+ margin-right: 8px;
358
+ }
359
+
360
+ .modal-btn-secondary:hover { background: var(--bg-2); }
361
+
362
+ /* ─── Additional directories picker ─── */
363
+
364
+ .field-add-dirs {
365
+ display: flex;
366
+ flex-direction: column;
367
+ gap: 4px;
368
+ }
369
+
370
+ .field-add-dir-item {
371
+ display: flex;
372
+ align-items: center;
373
+ gap: 6px;
374
+ padding: 4px 8px;
375
+ background: var(--bg-1);
376
+ border: 1px solid var(--border);
377
+ border-radius: var(--radius);
378
+ font-size: 12px;
379
+ font-family: var(--font-mono);
380
+ color: var(--text-secondary);
381
+ }
382
+
383
+ .field-add-dir-path {
384
+ flex: 1;
385
+ min-width: 0;
386
+ overflow: hidden;
387
+ text-overflow: ellipsis;
388
+ white-space: nowrap;
389
+ }
390
+
391
+ .field-add-dir-remove {
392
+ background: none;
393
+ border: none;
394
+ color: var(--text-muted);
395
+ font-size: 16px;
396
+ cursor: pointer;
397
+ padding: 0 4px;
398
+ line-height: 1;
399
+ flex-shrink: 0;
400
+ }
401
+
402
+ .field-add-dir-remove:hover { color: var(--danger, #d04040); }
403
+
404
+ /* ─── Checkbox toggle ─── */
405
+
406
+ .field-toggle {
407
+ display: flex;
408
+ align-items: center;
409
+ gap: 8px;
410
+ font-size: 13px;
411
+ color: var(--text-secondary);
412
+ cursor: pointer;
413
+ }
414
+
415
+ .field-toggle input[type="checkbox"] {
416
+ width: 16px;
417
+ height: 16px;
418
+ accent-color: var(--accent);
419
+ cursor: pointer;
420
+ }
@@ -278,6 +278,20 @@
278
278
  .session-dot.state-busy { background: var(--warning); animation: pulse 1.5s ease-in-out infinite; }
279
279
  .session-dot.state-dead { background: var(--text-muted); opacity: 0.7; }
280
280
 
281
+ .session-item-text {
282
+ flex: 1;
283
+ min-width: 0;
284
+ display: flex;
285
+ flex-direction: column;
286
+ gap: 2px;
287
+ }
288
+
289
+ .session-item-row {
290
+ display: flex;
291
+ align-items: center;
292
+ gap: 8px;
293
+ }
294
+
281
295
  .session-label {
282
296
  flex: 1;
283
297
  overflow: hidden;
@@ -285,6 +299,22 @@
285
299
  white-space: nowrap;
286
300
  }
287
301
 
302
+ .session-snippet {
303
+ font-size: 11px;
304
+ color: var(--text-muted);
305
+ overflow: hidden;
306
+ text-overflow: ellipsis;
307
+ white-space: nowrap;
308
+ line-height: 1.3;
309
+ }
310
+
311
+ .session-snippet mark {
312
+ background: rgba(88, 166, 255, 0.25);
313
+ color: var(--text);
314
+ border-radius: 2px;
315
+ padding: 0 1px;
316
+ }
317
+
288
318
  /* ─── Favorite star ─── */
289
319
 
290
320
  .session-fav {
@@ -316,6 +346,17 @@
316
346
  background: rgba(245, 197, 24, 0.04);
317
347
  }
318
348
 
349
+ /* ─── Search highlight / dim for live sessions ─── */
350
+
351
+ .session-highlighted {
352
+ background: var(--accent-bg);
353
+ border-left: 2px solid var(--accent);
354
+ }
355
+
356
+ .session-dimmed {
357
+ opacity: 0.4;
358
+ }
359
+
319
360
  .pinned-divider {
320
361
  height: 1px;
321
362
  margin: 4px 12px;
@@ -67,3 +67,40 @@
67
67
  .welcome-new-btn:active {
68
68
  transform: scale(0.97);
69
69
  }
70
+
71
+ .welcome-btn-group {
72
+ display: flex;
73
+ align-items: center;
74
+ gap: 8px;
75
+ margin-top: 16px;
76
+ }
77
+
78
+ .welcome-btn-group .welcome-new-btn {
79
+ margin-top: 0;
80
+ }
81
+
82
+ .welcome-advanced-btn {
83
+ display: flex;
84
+ align-items: center;
85
+ gap: 6px;
86
+ padding: 10px 16px;
87
+ border: 1px solid var(--border);
88
+ border-radius: var(--radius-lg);
89
+ background: none;
90
+ color: var(--text-secondary);
91
+ font-size: 13px;
92
+ font-weight: 500;
93
+ font-family: inherit;
94
+ cursor: pointer;
95
+ transition: background 0.15s, border-color 0.15s, color 0.15s;
96
+ }
97
+
98
+ .welcome-advanced-btn:hover {
99
+ background: var(--bg-3);
100
+ border-color: var(--border-strong);
101
+ color: var(--text);
102
+ }
103
+
104
+ .welcome-advanced-btn:active {
105
+ transform: scale(0.97);
106
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "buddy-builder",
3
- "version": "1.4.3",
3
+ "version": "1.4.5",
4
4
  "description": "A desktop GUI for Claude Code. Manage multiple sessions, search conversations, and work with AI — visually.",
5
5
  "main": "dist/main.cjs",
6
6
  "bin": {