next-ai-editor 0.1.3 → 0.2.1

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.
Files changed (63) hide show
  1. package/dist/AIEditorProvider-CKA2K_g2.js +1428 -0
  2. package/dist/AIEditorProvider-CKA2K_g2.js.map +1 -0
  3. package/dist/AIEditorProvider-C_zRSAuV.cjs +1427 -0
  4. package/dist/AIEditorProvider-C_zRSAuV.cjs.map +1 -0
  5. package/dist/client/AIEditorProvider.d.ts +1 -33
  6. package/dist/client/AIEditorProvider.d.ts.map +1 -1
  7. package/dist/client/components/ChatPanel.d.ts +18 -0
  8. package/dist/client/components/ChatPanel.d.ts.map +1 -0
  9. package/dist/client/components/ControlPill.d.ts +8 -0
  10. package/dist/client/components/ControlPill.d.ts.map +1 -0
  11. package/dist/client/components/MessageItem.d.ts +7 -0
  12. package/dist/client/components/MessageItem.d.ts.map +1 -0
  13. package/dist/client/components/MessageList.d.ts +7 -0
  14. package/dist/client/components/MessageList.d.ts.map +1 -0
  15. package/dist/client/components/TaskHistoryPanel.d.ts +10 -0
  16. package/dist/client/components/TaskHistoryPanel.d.ts.map +1 -0
  17. package/dist/client/components/index.d.ts +11 -0
  18. package/dist/client/components/index.d.ts.map +1 -0
  19. package/dist/client/hooks/index.d.ts +3 -0
  20. package/dist/client/hooks/index.d.ts.map +1 -0
  21. package/dist/client/hooks/useChatStream.d.ts +66 -0
  22. package/dist/client/hooks/useChatStream.d.ts.map +1 -0
  23. package/dist/client/hooks/useHotReload.d.ts +10 -0
  24. package/dist/client/hooks/useHotReload.d.ts.map +1 -0
  25. package/dist/client/index.d.ts +3 -0
  26. package/dist/client/index.d.ts.map +1 -1
  27. package/dist/client.cjs +7 -1
  28. package/dist/client.cjs.map +1 -1
  29. package/dist/client.js +8 -2
  30. package/dist/client.js.map +1 -1
  31. package/dist/{index-DrmEf13c.js → comments-D3m0RsOO.js} +440 -15
  32. package/dist/comments-D3m0RsOO.js.map +1 -0
  33. package/dist/{index-CNJqd4EQ.cjs → comments-Daur80r4.cjs} +426 -1
  34. package/dist/comments-Daur80r4.cjs.map +1 -0
  35. package/dist/index.cjs +34 -27
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.js +22 -15
  38. package/dist/index.js.map +1 -1
  39. package/dist/next-ai-editor.css +880 -0
  40. package/dist/server/agent/sdk-client.d.ts +54 -0
  41. package/dist/server/agent/sdk-client.d.ts.map +1 -0
  42. package/dist/server/agent/session-store.d.ts +101 -0
  43. package/dist/server/agent/session-store.d.ts.map +1 -0
  44. package/dist/server/handlers/chat.d.ts +6 -0
  45. package/dist/server/handlers/chat.d.ts.map +1 -0
  46. package/dist/server/handlers/comments.d.ts +10 -0
  47. package/dist/server/handlers/comments.d.ts.map +1 -0
  48. package/dist/server/handlers/index.d.ts +2 -1
  49. package/dist/server/handlers/index.d.ts.map +1 -1
  50. package/dist/server/index.d.ts +1 -0
  51. package/dist/server/index.d.ts.map +1 -1
  52. package/dist/server.cjs +27 -26
  53. package/dist/server.cjs.map +1 -1
  54. package/dist/server.js +14 -13
  55. package/dist/shared/comment-types.d.ts +140 -0
  56. package/dist/shared/comment-types.d.ts.map +1 -0
  57. package/package.json +13 -4
  58. package/dist/AIEditorProvider-BGHm2xyU.cjs +0 -2167
  59. package/dist/AIEditorProvider-BGHm2xyU.cjs.map +0 -1
  60. package/dist/AIEditorProvider-CxdGjdLL.js +0 -2168
  61. package/dist/AIEditorProvider-CxdGjdLL.js.map +0 -1
  62. package/dist/index-CNJqd4EQ.cjs.map +0 -1
  63. package/dist/index-DrmEf13c.js.map +0 -1
@@ -0,0 +1,880 @@
1
+ /* Task History Panel - Right sidebar showing AI action history */
2
+ .task-history-panel {
3
+ position: fixed;
4
+ top: 0;
5
+ right: 0;
6
+ bottom: 0;
7
+ width: 100%;
8
+ z-index: 100000;
9
+ pointer-events: none;
10
+ color-scheme: light;
11
+ }
12
+
13
+ .task-history-overlay {
14
+ position: absolute;
15
+ top: 0;
16
+ left: 0;
17
+ right: 0;
18
+ bottom: 0;
19
+ background: rgba(0, 0, 0, 0.3);
20
+ backdrop-filter: blur(4px);
21
+ -webkit-backdrop-filter: blur(4px);
22
+ pointer-events: all;
23
+ animation: fadeIn 0.2s ease;
24
+ }
25
+
26
+ @keyframes fadeIn {
27
+ from {
28
+ opacity: 0;
29
+ }
30
+ to {
31
+ opacity: 1;
32
+ }
33
+ }
34
+
35
+ .task-history-content {
36
+ position: absolute;
37
+ top: 0;
38
+ right: 0;
39
+ bottom: 0;
40
+ width: 420px;
41
+ background: linear-gradient(
42
+ 145deg,
43
+ rgba(255, 255, 255, 0.98) 0%,
44
+ rgba(252, 252, 254, 0.96) 50%,
45
+ rgba(250, 250, 253, 0.95) 100%
46
+ );
47
+ backdrop-filter: blur(40px) saturate(200%);
48
+ -webkit-backdrop-filter: blur(40px) saturate(200%);
49
+ border-left: 1px solid rgba(255, 255, 255, 0.9);
50
+ box-shadow:
51
+ -20px 0 60px rgba(99, 102, 241, 0.2),
52
+ -10px 0 30px rgba(0, 0, 0, 0.15),
53
+ -5px 0 15px rgba(0, 0, 0, 0.08),
54
+ inset 2px 0 4px rgba(255, 255, 255, 0.9),
55
+ inset -2px 0 4px rgba(99, 102, 241, 0.05);
56
+ pointer-events: all;
57
+ display: flex;
58
+ flex-direction: column;
59
+ animation: slideIn 0.3s cubic-bezier(0.16, 1, 0.3, 1);
60
+ }
61
+
62
+ @keyframes slideIn {
63
+ from {
64
+ transform: translateX(100%);
65
+ }
66
+ to {
67
+ transform: translateX(0);
68
+ }
69
+ }
70
+
71
+ /* Header */
72
+ .task-history-header {
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: space-between;
76
+ padding: 1.25rem 1.5rem;
77
+ border-bottom: 1px solid rgba(99, 102, 241, 0.1);
78
+ background: linear-gradient(
79
+ 135deg,
80
+ rgba(255, 255, 255, 0.95) 0%,
81
+ rgba(252, 251, 255, 0.9) 100%
82
+ );
83
+ flex-shrink: 0;
84
+ }
85
+
86
+ .header-title {
87
+ display: flex;
88
+ align-items: center;
89
+ gap: 0.75rem;
90
+ }
91
+
92
+ .header-icon {
93
+ font-size: 1.5rem;
94
+ filter: drop-shadow(0 2px 4px rgba(99, 102, 241, 0.3));
95
+ }
96
+
97
+ .task-history-header h2 {
98
+ margin: 0;
99
+ font-size: 1.125rem;
100
+ font-weight: 700;
101
+ background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #d946ef 100%);
102
+ -webkit-background-clip: text;
103
+ -webkit-text-fill-color: transparent;
104
+ background-clip: text;
105
+ letter-spacing: -0.02em;
106
+ }
107
+
108
+ .task-history-header .close-btn {
109
+ padding: 0.5rem;
110
+ background: transparent;
111
+ border: none;
112
+ border-radius: 0.5rem;
113
+ cursor: pointer;
114
+ font-size: 1.25rem;
115
+ color: #6b7280;
116
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
117
+ line-height: 1;
118
+ }
119
+
120
+ .task-history-header .close-btn:hover {
121
+ background: rgba(0, 0, 0, 0.05);
122
+ color: #374151;
123
+ transform: scale(1.1);
124
+ }
125
+
126
+ /* Body */
127
+ .task-history-body {
128
+ flex: 1;
129
+ overflow-y: auto;
130
+ padding: 1rem;
131
+ background: linear-gradient(
132
+ 180deg,
133
+ rgba(250, 250, 254, 0.4) 0%,
134
+ rgba(248, 248, 252, 0.2) 100%
135
+ );
136
+ }
137
+
138
+ /* Empty State */
139
+ .empty-state {
140
+ display: flex;
141
+ flex-direction: column;
142
+ align-items: center;
143
+ justify-content: center;
144
+ padding: 3rem 2rem;
145
+ text-align: center;
146
+ color: #9ca3af;
147
+ }
148
+
149
+ .empty-icon {
150
+ font-size: 3rem;
151
+ margin-bottom: 1rem;
152
+ opacity: 0.5;
153
+ }
154
+
155
+ .empty-state h3 {
156
+ margin: 0 0 0.5rem 0;
157
+ font-size: 1.125rem;
158
+ font-weight: 600;
159
+ color: #6b7280;
160
+ }
161
+
162
+ .empty-state p {
163
+ margin: 0;
164
+ font-size: 0.875rem;
165
+ line-height: 1.5;
166
+ }
167
+
168
+ /* Task List */
169
+ .task-list {
170
+ display: flex;
171
+ flex-direction: column;
172
+ gap: 0.75rem;
173
+ }
174
+
175
+ /* Task Item */
176
+ .task-item {
177
+ padding: 1rem;
178
+ background: linear-gradient(
179
+ 135deg,
180
+ rgba(255, 255, 255, 0.95) 0%,
181
+ rgba(252, 251, 255, 0.9) 100%
182
+ );
183
+ border: 2px solid rgba(99, 102, 241, 0.15);
184
+ border-radius: 0.75rem;
185
+ cursor: pointer;
186
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
187
+ box-shadow:
188
+ 0 2px 8px rgba(99, 102, 241, 0.05),
189
+ inset 0 1px 2px rgba(99, 102, 241, 0.05);
190
+ }
191
+
192
+ .task-item:hover {
193
+ border-color: #6366f1;
194
+ transform: translateY(-2px);
195
+ box-shadow:
196
+ 0 4px 12px rgba(99, 102, 241, 0.15),
197
+ inset 0 1px 2px rgba(99, 102, 241, 0.1);
198
+ }
199
+
200
+ .task-item.status-pending {
201
+ border-left: 4px solid #f59e0b;
202
+ }
203
+
204
+ .task-item.status-done {
205
+ border-left: 4px solid #10b981;
206
+ }
207
+
208
+ .task-item.status-failed {
209
+ border-left: 4px solid #ef4444;
210
+ }
211
+
212
+ /* Task Header */
213
+ .task-header {
214
+ display: flex;
215
+ align-items: center;
216
+ justify-content: space-between;
217
+ margin-bottom: 0.5rem;
218
+ }
219
+
220
+ .task-status {
221
+ display: flex;
222
+ align-items: center;
223
+ gap: 0.375rem;
224
+ font-size: 0.75rem;
225
+ font-weight: 600;
226
+ }
227
+
228
+ .status-icon {
229
+ font-size: 0.875rem;
230
+ }
231
+
232
+ .status-label {
233
+ text-transform: uppercase;
234
+ letter-spacing: 0.05em;
235
+ }
236
+
237
+ .task-item.status-pending .status-label {
238
+ color: #f59e0b;
239
+ }
240
+
241
+ .task-item.status-done .status-label {
242
+ color: #10b981;
243
+ }
244
+
245
+ .task-item.status-failed .status-label {
246
+ color: #ef4444;
247
+ }
248
+
249
+ .task-time {
250
+ font-size: 0.75rem;
251
+ color: #9ca3af;
252
+ }
253
+
254
+ /* Task Request */
255
+ .task-request {
256
+ font-size: 0.875rem;
257
+ font-weight: 500;
258
+ color: #1f2937;
259
+ margin-bottom: 0.5rem;
260
+ line-height: 1.4;
261
+ }
262
+
263
+ /* Task Actions */
264
+ .task-actions {
265
+ display: flex;
266
+ flex-direction: column;
267
+ gap: 0.25rem;
268
+ margin-bottom: 0.5rem;
269
+ }
270
+
271
+ .action-item {
272
+ font-size: 0.75rem;
273
+ color: #6b7280;
274
+ }
275
+
276
+ .action-text {
277
+ display: flex;
278
+ align-items: center;
279
+ gap: 0.25rem;
280
+ }
281
+
282
+ .action-text.error {
283
+ color: #ef4444;
284
+ }
285
+
286
+ /* Task Files */
287
+ .task-files {
288
+ display: flex;
289
+ align-items: center;
290
+ gap: 0.375rem;
291
+ flex-wrap: wrap;
292
+ margin-top: 0.5rem;
293
+ }
294
+
295
+ .files-label {
296
+ font-size: 0.7rem;
297
+ font-weight: 600;
298
+ color: #9ca3af;
299
+ text-transform: uppercase;
300
+ letter-spacing: 0.05em;
301
+ }
302
+
303
+ .file-badge {
304
+ font-size: 0.7rem;
305
+ padding: 0.125rem 0.5rem;
306
+ background: rgba(99, 102, 241, 0.1);
307
+ color: #6366f1;
308
+ border-radius: 0.375rem;
309
+ font-family: ui-monospace, monospace;
310
+ font-weight: 500;
311
+ }
312
+ .chat-panel {
313
+ position: fixed;
314
+ bottom: 5.5rem;
315
+ left: 50%;
316
+ transform: translateX(-50%);
317
+ width: 600px;
318
+ max-width: 90vw;
319
+ display: flex;
320
+ flex-direction: column;
321
+ gap: 12px;
322
+ z-index: 100001;
323
+ animation: chatPanelSlideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1);
324
+ }
325
+
326
+ @keyframes chatPanelSlideUp {
327
+ from {
328
+ opacity: 0;
329
+ transform: translateX(-50%) translateY(20px);
330
+ }
331
+ to {
332
+ opacity: 1;
333
+ transform: translateX(-50%) translateY(0);
334
+ }
335
+ }
336
+
337
+ .chat-panel.light {
338
+ background: transparent;
339
+ border: none;
340
+ }
341
+
342
+ /* Messages */
343
+ .chat-panel-messages {
344
+ max-height: 400px;
345
+ overflow-y: auto;
346
+ padding: 20px;
347
+ background: rgba(0, 0, 0, 0.15);
348
+ backdrop-filter: blur(40px) saturate(150%);
349
+ -webkit-backdrop-filter: blur(40px) saturate(150%);
350
+ border: 1px solid rgba(255, 255, 255, 0.08);
351
+ border-radius: 16px;
352
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
353
+ }
354
+
355
+ .chat-panel.light .chat-panel-messages {
356
+ background: rgba(255, 255, 255, 0.4);
357
+ backdrop-filter: blur(40px) saturate(150%);
358
+ -webkit-backdrop-filter: blur(40px) saturate(150%);
359
+ border: 1px solid rgba(0, 0, 0, 0.08);
360
+ }
361
+
362
+ /* Scrollbar styling */
363
+ .chat-panel-messages::-webkit-scrollbar {
364
+ width: 8px;
365
+ }
366
+
367
+ .chat-panel-messages::-webkit-scrollbar-track {
368
+ background: rgba(0, 0, 0, 0.1);
369
+ border-radius: 4px;
370
+ }
371
+
372
+ .chat-panel-messages::-webkit-scrollbar-thumb {
373
+ background: rgba(255, 255, 255, 0.2);
374
+ border-radius: 4px;
375
+ }
376
+
377
+ .chat-panel-messages::-webkit-scrollbar-thumb:hover {
378
+ background: rgba(255, 255, 255, 0.3);
379
+ }
380
+
381
+ /* Input area */
382
+ .chat-panel-input {
383
+ padding: 16px 20px;
384
+ background: rgba(0, 0, 0, 0.95);
385
+ backdrop-filter: blur(40px) saturate(150%);
386
+ -webkit-backdrop-filter: blur(40px) saturate(150%);
387
+ border: 1px solid rgba(255, 255, 255, 0.1);
388
+ border-radius: 16px;
389
+ box-shadow:
390
+ 0 8px 32px rgba(0, 0, 0, 0.3),
391
+ inset 0 1px 1px rgba(255, 255, 255, 0.05);
392
+ }
393
+
394
+ .chat-panel.light .chat-panel-input {
395
+ background: rgba(255, 255, 255, 0.98);
396
+ backdrop-filter: blur(40px) saturate(150%);
397
+ -webkit-backdrop-filter: blur(40px) saturate(150%);
398
+ border: 1px solid rgba(0, 0, 0, 0.1);
399
+ }
400
+
401
+ /* Tools */
402
+ .chat-panel-tools {
403
+ display: flex;
404
+ gap: 6px;
405
+ margin-bottom: 12px;
406
+ }
407
+
408
+ .tool-button {
409
+ display: flex;
410
+ align-items: center;
411
+ justify-content: center;
412
+ width: 32px;
413
+ height: 32px;
414
+ border: none;
415
+ background: rgba(255, 255, 255, 0.05);
416
+ border-radius: 8px;
417
+ color: #9ca3af;
418
+ cursor: pointer;
419
+ transition: all 0.2s;
420
+ }
421
+
422
+ .tool-button:hover {
423
+ background: rgba(255, 255, 255, 0.1);
424
+ color: #e4e4e7;
425
+ transform: translateY(-1px);
426
+ }
427
+
428
+ .tool-button.active {
429
+ background: linear-gradient(135deg, #6366f1, #8b5cf6);
430
+ color: #ffffff;
431
+ box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
432
+ }
433
+
434
+ /* Context indicator (inline preview above input) */
435
+ .context-indicator {
436
+ display: flex;
437
+ align-items: center;
438
+ justify-content: space-between;
439
+ gap: 8px;
440
+ padding: 8px 12px;
441
+ margin-bottom: 8px;
442
+ background: rgba(99, 102, 241, 0.1);
443
+ border: 1px solid rgba(99, 102, 241, 0.3);
444
+ border-radius: 8px;
445
+ font-size: 12px;
446
+ color: #a5b4fc;
447
+ animation: contextAppear 0.2s ease-out;
448
+ }
449
+
450
+ @keyframes contextAppear {
451
+ from {
452
+ opacity: 0;
453
+ transform: translateY(-4px);
454
+ }
455
+ to {
456
+ opacity: 1;
457
+ transform: translateY(0);
458
+ }
459
+ }
460
+
461
+ .context-text {
462
+ flex: 1;
463
+ white-space: nowrap;
464
+ overflow: hidden;
465
+ text-overflow: ellipsis;
466
+ }
467
+
468
+ .context-clear {
469
+ display: flex;
470
+ align-items: center;
471
+ justify-content: center;
472
+ background: none;
473
+ border: none;
474
+ color: #a5b4fc;
475
+ cursor: pointer;
476
+ padding: 2px;
477
+ border-radius: 4px;
478
+ transition: all 0.15s;
479
+ }
480
+
481
+ .context-clear:hover {
482
+ background: rgba(99, 102, 241, 0.2);
483
+ color: #ffffff;
484
+ }
485
+
486
+ /* Input row */
487
+ .input-row {
488
+ display: flex;
489
+ gap: 8px;
490
+ align-items: flex-end;
491
+ }
492
+
493
+ .input-wrapper {
494
+ position: relative;
495
+ flex: 1;
496
+ }
497
+
498
+ .context-pills-container {
499
+ display: flex;
500
+ flex-wrap: wrap;
501
+ gap: 6px;
502
+ margin-bottom: 12px;
503
+ }
504
+
505
+ .context-pill-inline {
506
+ display: inline-flex;
507
+ align-items: center;
508
+ gap: 8px;
509
+ padding: 6px 12px;
510
+ background: rgba(30, 30, 46, 0.6);
511
+ border: 1px solid rgba(99, 102, 241, 0.3);
512
+ border-radius: 8px;
513
+ font-size: 13px;
514
+ color: #c4b5fd;
515
+ font-family: ui-monospace, monospace;
516
+ backdrop-filter: blur(8px);
517
+ }
518
+
519
+ .chat-panel.light .context-pill-inline {
520
+ background: rgba(249, 250, 251, 0.9);
521
+ border-color: rgba(99, 102, 241, 0.2);
522
+ color: #7c3aed;
523
+ }
524
+
525
+ .context-pill-remove {
526
+ display: flex;
527
+ align-items: center;
528
+ justify-content: center;
529
+ width: 16px;
530
+ height: 16px;
531
+ border-radius: 50%;
532
+ background: rgba(255, 255, 255, 0.1);
533
+ border: none;
534
+ color: #9ca3af;
535
+ cursor: pointer;
536
+ font-size: 14px;
537
+ line-height: 1;
538
+ transition: all 0.15s;
539
+ padding: 0;
540
+ }
541
+
542
+ .context-pill-remove:hover {
543
+ background: rgba(239, 68, 68, 0.2);
544
+ color: #ef4444;
545
+ }
546
+
547
+ .message-input {
548
+ flex: 1;
549
+ min-height: 40px;
550
+ max-height: 200px;
551
+ padding: 10px 14px;
552
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.02));
553
+ border: 2px solid rgba(99, 102, 241, 0.3);
554
+ border-radius: 12px;
555
+ color: #e4e4e7;
556
+ font-size: 14px;
557
+ font-family: system-ui, -apple-system, sans-serif;
558
+ resize: none;
559
+ transition: all 0.2s;
560
+ }
561
+
562
+ .chat-panel.light .message-input {
563
+ background: rgba(0, 0, 0, 0.02);
564
+ border-color: rgba(99, 102, 241, 0.2);
565
+ color: #18181b;
566
+ }
567
+
568
+ .message-input:focus {
569
+ outline: none;
570
+ border-color: #6366f1;
571
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
572
+ }
573
+
574
+ .message-input:disabled {
575
+ opacity: 0.6;
576
+ cursor: not-allowed;
577
+ }
578
+
579
+ .message-input::placeholder {
580
+ color: #71717a;
581
+ }
582
+
583
+ .send-button {
584
+ width: 40px;
585
+ height: 40px;
586
+ border: none;
587
+ background: linear-gradient(135deg, #6366f1, #a855f7);
588
+ border-radius: 10px;
589
+ color: white;
590
+ font-size: 20px;
591
+ font-weight: 600;
592
+ cursor: pointer;
593
+ transition: all 0.2s;
594
+ display: flex;
595
+ align-items: center;
596
+ justify-content: center;
597
+ flex-shrink: 0;
598
+ }
599
+
600
+ .send-button:hover:not(:disabled) {
601
+ transform: translateY(-1px);
602
+ box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);
603
+ }
604
+
605
+ .send-button:active:not(:disabled) {
606
+ transform: translateY(0);
607
+ }
608
+
609
+ .send-button:disabled {
610
+ opacity: 0.4;
611
+ cursor: not-allowed;
612
+ background: linear-gradient(135deg, #71717a, #52525b);
613
+ }
614
+
615
+ .input-hint {
616
+ margin-top: 8px;
617
+ font-size: 11px;
618
+ color: #71717a;
619
+ text-align: center;
620
+ }
621
+
622
+ /* Message List Empty State */
623
+ .message-list-empty {
624
+ display: flex;
625
+ align-items: center;
626
+ justify-content: center;
627
+ height: 100%;
628
+ min-height: 200px;
629
+ }
630
+
631
+ .empty-state {
632
+ text-align: center;
633
+ color: #71717a;
634
+ }
635
+
636
+ .empty-icon {
637
+ font-size: 48px;
638
+ margin-bottom: 12px;
639
+ opacity: 0.5;
640
+ }
641
+
642
+ .empty-state h3 {
643
+ font-size: 16px;
644
+ font-weight: 600;
645
+ color: #e4e4e7;
646
+ margin: 0 0 8px 0;
647
+ }
648
+
649
+ .chat-panel.light .empty-state h3 {
650
+ color: #18181b;
651
+ }
652
+
653
+ .empty-state p {
654
+ font-size: 13px;
655
+ margin: 0;
656
+ max-width: 280px;
657
+ }
658
+
659
+ /* Message styling */
660
+ .message-list {
661
+ display: flex;
662
+ flex-direction: column;
663
+ gap: 12px;
664
+ }
665
+
666
+ .message {
667
+ display: flex;
668
+ gap: 10px;
669
+ align-items: flex-start;
670
+ }
671
+
672
+ .message-user {
673
+ flex-direction: row-reverse;
674
+ }
675
+
676
+ .message-content {
677
+ background: #1f2937;
678
+ padding: 10px 14px;
679
+ border-radius: 12px;
680
+ font-size: 14px;
681
+ line-height: 1.5;
682
+ color: #e4e4e7;
683
+ max-width: 85%;
684
+ white-space: pre-wrap;
685
+ word-wrap: break-word;
686
+ }
687
+
688
+ .chat-panel.light .message-content {
689
+ background: #f3f4f6;
690
+ color: #18181b;
691
+ }
692
+
693
+ .message-user .message-content {
694
+ background: linear-gradient(135deg, #6366f1, #8b5cf6);
695
+ color: #ffffff;
696
+ }
697
+
698
+ .message-assistant .message-content {
699
+ background: #1f2937;
700
+ color: #e4e4e7;
701
+ }
702
+
703
+ /* Tool messages */
704
+ .message-tool {
705
+ display: flex;
706
+ align-items: center;
707
+ gap: 8px;
708
+ padding: 8px 12px;
709
+ background: rgba(168, 85, 247, 0.1);
710
+ border-radius: 8px;
711
+ font-size: 12px;
712
+ color: #c4b5fd;
713
+ }
714
+
715
+ .tool-icon {
716
+ font-size: 14px;
717
+ }
718
+
719
+ .tool-name {
720
+ font-weight: 500;
721
+ color: #e4e4e7;
722
+ }
723
+
724
+ .tool-description {
725
+ color: #71717a;
726
+ font-size: 11px;
727
+ }
728
+
729
+ /* Streaming indicator */
730
+ .message-streaming {
731
+ opacity: 0.7;
732
+ }
733
+
734
+ .streaming-indicator {
735
+ display: flex;
736
+ gap: 4px;
737
+ padding: 4px 0;
738
+ }
739
+
740
+ .streaming-indicator .dot {
741
+ width: 6px;
742
+ height: 6px;
743
+ background: #6366f1;
744
+ border-radius: 50%;
745
+ animation: streamingPulse 1.4s infinite;
746
+ }
747
+
748
+ .streaming-indicator .dot:nth-child(2) {
749
+ animation-delay: 0.2s;
750
+ }
751
+
752
+ .streaming-indicator .dot:nth-child(3) {
753
+ animation-delay: 0.4s;
754
+ }
755
+
756
+ @keyframes streamingPulse {
757
+ 0%, 60%, 100% {
758
+ opacity: 0.3;
759
+ transform: scale(0.8);
760
+ }
761
+ 30% {
762
+ opacity: 1;
763
+ transform: scale(1);
764
+ }
765
+ }
766
+ /* Control Pill - Bottom chat toggle */
767
+ .control-pill {
768
+ position: fixed;
769
+ bottom: 2rem;
770
+ left: 50%;
771
+ transform: translateX(-50%);
772
+ z-index: 100000;
773
+ animation: pillFadeIn 0.2s cubic-bezier(0.16, 1, 0.3, 1);
774
+ color-scheme: light;
775
+ cursor: pointer;
776
+ user-select: none;
777
+ }
778
+
779
+ @keyframes pillFadeIn {
780
+ from {
781
+ opacity: 0;
782
+ transform: translateX(-50%) translateY(10px);
783
+ }
784
+ to {
785
+ opacity: 1;
786
+ transform: translateX(-50%) translateY(0);
787
+ }
788
+ }
789
+
790
+ .control-pill-inner {
791
+ display: flex;
792
+ align-items: center;
793
+ gap: 0.75rem;
794
+ padding: 0.875rem 1.5rem;
795
+ background: linear-gradient(
796
+ 145deg,
797
+ rgba(255, 255, 255, 0.98) 0%,
798
+ rgba(252, 252, 254, 0.96) 50%,
799
+ rgba(250, 250, 253, 0.95) 100%
800
+ );
801
+ backdrop-filter: blur(40px) saturate(200%);
802
+ -webkit-backdrop-filter: blur(40px) saturate(200%);
803
+ border-radius: 50px;
804
+ border: 1px solid rgba(255, 255, 255, 0.9);
805
+ box-shadow:
806
+ 0 20px 60px rgba(99, 102, 241, 0.25),
807
+ 0 10px 30px rgba(0, 0, 0, 0.15),
808
+ 0 5px 15px rgba(0, 0, 0, 0.08),
809
+ inset 0 2px 4px rgba(255, 255, 255, 0.9),
810
+ inset 0 -2px 4px rgba(99, 102, 241, 0.05);
811
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
812
+ }
813
+
814
+ .control-pill:hover .control-pill-inner {
815
+ box-shadow:
816
+ 0 24px 70px rgba(99, 102, 241, 0.3),
817
+ 0 12px 35px rgba(0, 0, 0, 0.18),
818
+ 0 6px 18px rgba(0, 0, 0, 0.1),
819
+ inset 0 2px 4px rgba(255, 255, 255, 0.9),
820
+ inset 0 -2px 4px rgba(99, 102, 241, 0.08);
821
+ transform: translateY(-2px);
822
+ }
823
+
824
+ .control-pill:active .control-pill-inner {
825
+ transform: translateY(0);
826
+ }
827
+
828
+ .pill-icon {
829
+ font-size: 1.25rem;
830
+ line-height: 1;
831
+ }
832
+
833
+ .pill-label {
834
+ font-size: 0.9375rem;
835
+ font-weight: 600;
836
+ color: #4f46e5;
837
+ line-height: 1;
838
+ }
839
+
840
+ .active-tool-indicator {
841
+ display: flex;
842
+ align-items: center;
843
+ justify-content: center;
844
+ width: 24px;
845
+ height: 24px;
846
+ background: linear-gradient(135deg, #6366f1, #8b5cf6, #a855f7);
847
+ border-radius: 50%;
848
+ font-size: 12px;
849
+ box-shadow: 0 2px 8px rgba(99, 102, 241, 0.4);
850
+ animation: toolPulse 2s ease-in-out infinite;
851
+ }
852
+
853
+ @keyframes toolPulse {
854
+ 0%, 100% {
855
+ box-shadow: 0 2px 8px rgba(99, 102, 241, 0.4);
856
+ }
857
+ 50% {
858
+ box-shadow: 0 4px 16px rgba(99, 102, 241, 0.6);
859
+ }
860
+ }
861
+
862
+ .control-pill-hint {
863
+ margin-top: 0.625rem;
864
+ text-align: center;
865
+ font-size: 0.75rem;
866
+ color: #9ca3af;
867
+ opacity: 0.8;
868
+ }
869
+
870
+ .control-pill-hint kbd {
871
+ padding: 0.125rem 0.375rem;
872
+ background: rgba(255, 255, 255, 0.8);
873
+ border: 1px solid rgba(99, 102, 241, 0.2);
874
+ border-radius: 0.25rem;
875
+ font-family: ui-monospace, monospace;
876
+ font-size: 0.7rem;
877
+ color: #6366f1;
878
+ font-weight: 600;
879
+ box-shadow: 0 1px 2px rgba(99, 102, 241, 0.1);
880
+ }