buddy-builder 1.4.4 → 1.4.6

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.
@@ -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
+ }
@@ -346,6 +346,17 @@
346
346
  background: rgba(245, 197, 24, 0.04);
347
347
  }
348
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
+
349
360
  .pinned-divider {
350
361
  height: 1px;
351
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.4",
3
+ "version": "1.4.6",
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": {