@hsupu/copilot-api 0.7.23 → 0.8.1-beta.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 (30) hide show
  1. package/config.example.yaml +4 -0
  2. package/dist/dist-8vhX0s4a.mjs +429 -0
  3. package/dist/dist-8vhX0s4a.mjs.map +1 -0
  4. package/dist/main.mjs +884 -248
  5. package/dist/main.mjs.map +1 -1
  6. package/package.json +1 -3
  7. package/ui/history-v3/dist/assets/DashboardPage-B1uByGH4.js +1 -0
  8. package/ui/history-v3/dist/assets/DashboardPage-CabImjCg.css +1 -0
  9. package/ui/history-v3/dist/assets/HistoryPage-CcuFI_7q.js +3 -0
  10. package/ui/history-v3/dist/assets/HistoryPage-MBmz_wrp.css +1 -0
  11. package/ui/history-v3/dist/assets/LogsPage-CTboGme2.js +1 -0
  12. package/ui/history-v3/dist/assets/LogsPage-DnfMvMyI.css +1 -0
  13. package/ui/history-v3/dist/assets/ModelsPage-BCijEIH1.css +1 -0
  14. package/ui/history-v3/dist/assets/ModelsPage-B_sjc_hg.js +1 -0
  15. package/ui/history-v3/dist/assets/ProgressBar-BQxTnwIj.js +1 -0
  16. package/ui/history-v3/dist/assets/ProgressBar-B_0VSeE9.css +1 -0
  17. package/ui/history-v3/dist/assets/UsagePage-Nx_clyfV.css +1 -0
  18. package/ui/history-v3/dist/assets/UsagePage-Nxy64EGo.js +1 -0
  19. package/ui/history-v3/dist/assets/index-D5HcAJB-.css +1 -0
  20. package/ui/history-v3/dist/assets/index-DOp9l2lW.js +2 -0
  21. package/ui/history-v3/dist/assets/useFormatters-BBIZmSf2.js +1 -0
  22. package/ui/history-v3/dist/assets/{vendor-BGG3lVOP.js → vendor-BJ2Uq5vY.js} +1 -1
  23. package/ui/history-v3/dist/assets/vue-CYcm9SLm.js +1 -0
  24. package/ui/history-v3/dist/index.html +3 -4
  25. package/ui/history-v1/index.html +0 -149
  26. package/ui/history-v1/script.js +0 -1799
  27. package/ui/history-v1/styles.css +0 -1467
  28. package/ui/history-v3/dist/assets/index-CaOzq3V0.js +0 -3
  29. package/ui/history-v3/dist/assets/index-Dfh3zN1X.css +0 -1
  30. package/ui/history-v3/dist/assets/vue-CJ6HbDRX.js +0 -1
@@ -1,1467 +0,0 @@
1
-
2
- :root {
3
- --bg: #0d1117;
4
- --bg-secondary: #161b22;
5
- --bg-tertiary: #21262d;
6
- --bg-hover: #30363d;
7
- --bg-selected: #1f2a37;
8
- --text: #e6edf3;
9
- --text-muted: #8b949e;
10
- --text-dim: #6e7681;
11
- --border: #30363d;
12
- --border-light: #21262d;
13
- --primary: #58a6ff;
14
- --primary-muted: rgba(88, 166, 255, 0.15);
15
- --success: #3fb950;
16
- --success-muted: rgba(63, 185, 80, 0.15);
17
- --error: #f85149;
18
- --error-muted: rgba(248, 81, 73, 0.15);
19
- --warning: #d29922;
20
- --warning-muted: rgba(210, 153, 34, 0.15);
21
- --purple: #a371f7;
22
- --purple-muted: rgba(163, 113, 247, 0.15);
23
- --cyan: #39c5cf;
24
- --cyan-muted: rgba(57, 197, 207, 0.15);
25
- --pink: #db61a2;
26
- --pink-muted: rgba(219, 97, 162, 0.15);
27
- --primary-contrast: #ffffff;
28
- }
29
-
30
- @media (prefers-color-scheme: light) {
31
- :root {
32
- --bg: #ffffff;
33
- --bg-secondary: #f6f8fa;
34
- --bg-tertiary: #eaeef2;
35
- --bg-hover: #d0d7de;
36
- --bg-selected: #ddf4ff;
37
- --text: #1f2328;
38
- --text-muted: #656d76;
39
- --text-dim: #8c959f;
40
- --border: #d0d7de;
41
- --border-light: #eaeef2;
42
- --primary-muted: rgba(9, 105, 218, 0.1);
43
- --success-muted: rgba(26, 127, 55, 0.1);
44
- --error-muted: rgba(207, 34, 46, 0.1);
45
- --warning-muted: rgba(154, 103, 0, 0.1);
46
- --purple-muted: rgba(130, 80, 223, 0.1);
47
- --cyan-muted: rgba(31, 136, 61, 0.1);
48
- --pink-muted: rgba(191, 57, 137, 0.1);
49
- }
50
- }
51
-
52
- * { box-sizing: border-box; margin: 0; padding: 0; }
53
-
54
- body {
55
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
56
- background: var(--bg);
57
- color: var(--text);
58
- line-height: 1.5;
59
- font-size: 13px;
60
- height: 100vh;
61
- overflow: hidden;
62
- }
63
-
64
- /* Layout */
65
- .app {
66
- display: flex;
67
- flex-direction: column;
68
- height: 100vh;
69
- }
70
-
71
- /* Header */
72
- .header {
73
- padding: 12px 16px;
74
- border-bottom: 1px solid var(--border);
75
- display: flex;
76
- align-items: center;
77
- justify-content: space-between;
78
- background: var(--bg-secondary);
79
- flex-shrink: 0;
80
- }
81
-
82
- .header-left {
83
- display: flex;
84
- align-items: center;
85
- gap: 16px;
86
- }
87
-
88
- .header h1 {
89
- font-size: 16px;
90
- font-weight: 600;
91
- }
92
-
93
- .header-right {
94
- display: flex;
95
- align-items: center;
96
- gap: 8px;
97
- }
98
-
99
- /* Export dropdown */
100
- .export-wrapper {
101
- position: relative;
102
- }
103
-
104
- .export-menu {
105
- display: none;
106
- position: absolute;
107
- top: 100%;
108
- right: 0;
109
- margin-top: 4px;
110
- background: var(--bg-secondary);
111
- border: 1px solid var(--border);
112
- z-index: 100;
113
- min-width: 150px;
114
- flex-direction: column;
115
- }
116
-
117
- .export-menu.open {
118
- display: flex;
119
- }
120
-
121
- .export-menu button {
122
- padding: 8px 12px;
123
- background: transparent;
124
- border: none;
125
- color: var(--text);
126
- font-size: 12px;
127
- cursor: pointer;
128
- text-align: left;
129
- }
130
-
131
- .export-menu button:hover {
132
- background: var(--bg-hover);
133
- }
134
-
135
- /* Session selector */
136
- .session-selector {
137
- position: relative;
138
- }
139
-
140
- .session-selector select {
141
- appearance: none;
142
- background: var(--bg-tertiary);
143
- border: 1px solid var(--border);
144
- color: var(--text);
145
- padding: 6px 28px 6px 10px;
146
- border-radius: 0;
147
- font-size: 12px;
148
- cursor: pointer;
149
- min-width: 180px;
150
- }
151
-
152
- .session-selector::after {
153
- content: "\25BC";
154
- position: absolute;
155
- right: 10px;
156
- top: 50%;
157
- transform: translateY(-50%);
158
- font-size: 8px;
159
- color: var(--text-muted);
160
- pointer-events: none;
161
- }
162
-
163
- /* Stats bar */
164
- .stats-bar {
165
- display: flex;
166
- gap: 20px;
167
- padding: 8px 16px;
168
- border-bottom: 1px solid var(--border);
169
- background: var(--bg-tertiary);
170
- font-size: 12px;
171
- flex-shrink: 0;
172
- }
173
-
174
- .stat {
175
- display: flex;
176
- align-items: center;
177
- gap: 6px;
178
- }
179
-
180
- .stat-value {
181
- font-weight: 600;
182
- }
183
-
184
- .stat-label {
185
- color: var(--text-muted);
186
- }
187
-
188
- .stat.success .stat-value { color: var(--success); }
189
- .stat.error .stat-value { color: var(--error); }
190
-
191
- /* Main layout */
192
- .main {
193
- display: flex;
194
- flex: 1;
195
- overflow: hidden;
196
- }
197
-
198
- /* Request list panel (left) */
199
- .list-panel {
200
- width: 320px;
201
- min-width: 280px;
202
- max-width: 400px;
203
- border-right: 1px solid var(--border);
204
- display: flex;
205
- flex-direction: column;
206
- background: var(--bg-secondary);
207
- flex-shrink: 0;
208
- }
209
-
210
- .list-controls {
211
- padding: 8px;
212
- border-bottom: 1px solid var(--border);
213
- display: flex;
214
- flex-direction: column;
215
- gap: 8px;
216
- }
217
-
218
- .list-search {
219
- position: relative;
220
- }
221
-
222
- .list-search input {
223
- width: 100%;
224
- padding: 6px 8px 6px 28px;
225
- background: var(--bg);
226
- border: 1px solid var(--border);
227
- border-radius: 0;
228
- color: var(--text);
229
- font-size: 12px;
230
- }
231
-
232
- .list-search input:focus {
233
- outline: none;
234
- border-color: var(--primary);
235
- }
236
-
237
- .list-search-icon {
238
- position: absolute;
239
- left: 8px;
240
- top: 50%;
241
- transform: translateY(-50%);
242
- color: var(--text-dim);
243
- font-size: 12px;
244
- }
245
-
246
- .list-filters {
247
- display: flex;
248
- gap: 6px;
249
- }
250
-
251
- .list-filters select {
252
- flex: 1;
253
- padding: 4px 6px;
254
- background: var(--bg);
255
- border: 1px solid var(--border);
256
- border-radius: 0;
257
- color: var(--text);
258
- font-size: 11px;
259
- cursor: pointer;
260
- }
261
-
262
- /* Request list */
263
- .request-list {
264
- flex: 1;
265
- overflow-y: auto;
266
- }
267
-
268
- .request-item {
269
- padding: 10px 12px;
270
- border-bottom: 1px solid var(--border-light);
271
- cursor: pointer;
272
- transition: background 0.1s;
273
- }
274
-
275
- .request-item:hover {
276
- background: var(--bg-hover);
277
- }
278
-
279
- .request-item.selected {
280
- background: var(--bg-selected);
281
- border-left: 3px solid var(--primary);
282
- padding-left: 9px;
283
- }
284
-
285
- .request-item-header {
286
- display: flex;
287
- align-items: center;
288
- gap: 8px;
289
- margin-bottom: 4px;
290
- }
291
-
292
- .request-status {
293
- width: 8px;
294
- height: 8px;
295
- border-radius: 50%;
296
- flex-shrink: 0;
297
- }
298
-
299
- .request-status.success { background: var(--success); }
300
- .request-status.error { background: var(--error); }
301
- .request-status.pending { background: var(--warning); animation: pulse 1.5s infinite; }
302
-
303
- @keyframes pulse {
304
- 0%, 100% { opacity: 1; }
305
- 50% { opacity: 0.5; }
306
- }
307
-
308
- .request-time {
309
- font-size: 11px;
310
- color: var(--text-muted);
311
- }
312
-
313
- .request-item-body {
314
- display: flex;
315
- flex-wrap: wrap;
316
- gap: 6px;
317
- align-items: center;
318
- margin-bottom: 4px;
319
- }
320
-
321
- .request-model {
322
- font-weight: 500;
323
- font-size: 12px;
324
- }
325
-
326
- .request-item-meta {
327
- display: flex;
328
- gap: 8px;
329
- font-size: 10px;
330
- color: var(--text-dim);
331
- }
332
-
333
- .request-preview {
334
- font-size: 11px;
335
- color: var(--text-muted);
336
- white-space: nowrap;
337
- overflow: hidden;
338
- text-overflow: ellipsis;
339
- margin-top: 4px;
340
- }
341
-
342
- /* Badges */
343
- .badge {
344
- display: inline-flex;
345
- align-items: center;
346
- padding: 2px 6px;
347
- border-radius: 0;
348
- font-size: 10px;
349
- font-weight: 500;
350
- }
351
-
352
- .badge.anthropic { background: var(--purple-muted); color: var(--purple); }
353
- .badge.openai { background: var(--warning-muted); color: var(--warning); }
354
- .badge.stream { background: var(--cyan-muted); color: var(--cyan); }
355
-
356
- /* Pagination */
357
- .list-pagination {
358
- padding: 8px;
359
- border-top: 1px solid var(--border);
360
- display: flex;
361
- justify-content: center;
362
- align-items: center;
363
- gap: 4px;
364
- background: var(--bg-secondary);
365
- }
366
-
367
- .list-pagination button {
368
- padding: 4px 8px;
369
- background: var(--bg-tertiary);
370
- border: 1px solid var(--border);
371
- border-radius: 0;
372
- color: var(--text);
373
- font-size: 11px;
374
- cursor: pointer;
375
- }
376
-
377
- .list-pagination button:hover:not(:disabled) {
378
- background: var(--bg-hover);
379
- }
380
-
381
- .list-pagination button:disabled {
382
- opacity: 0.5;
383
- cursor: not-allowed;
384
- }
385
-
386
- .list-pagination button.active {
387
- background: var(--primary);
388
- border-color: var(--primary);
389
- color: var(--primary-contrast);
390
- }
391
-
392
- .list-pagination span {
393
- font-size: 11px;
394
- color: var(--text-muted);
395
- padding: 0 4px;
396
- }
397
-
398
- /* Detail panel (right) */
399
- .detail-panel {
400
- flex: 1;
401
- display: flex;
402
- flex-direction: column;
403
- overflow: hidden;
404
- background: var(--bg);
405
- }
406
-
407
- .detail-empty {
408
- flex: 1;
409
- display: flex;
410
- align-items: center;
411
- justify-content: center;
412
- color: var(--text-muted);
413
- }
414
-
415
- .detail-toolbar {
416
- padding: 8px 12px;
417
- border-bottom: 1px solid var(--border);
418
- display: flex;
419
- align-items: center;
420
- gap: 12px;
421
- background: var(--bg-secondary);
422
- flex-wrap: wrap;
423
- }
424
-
425
- .detail-search {
426
- position: relative;
427
- flex: 1;
428
- min-width: 150px;
429
- max-width: 300px;
430
- }
431
-
432
- .detail-search input {
433
- width: 100%;
434
- padding: 5px 8px 5px 26px;
435
- background: var(--bg);
436
- border: 1px solid var(--border);
437
- border-radius: 0;
438
- color: var(--text);
439
- font-size: 12px;
440
- }
441
-
442
- .detail-search input:focus {
443
- outline: none;
444
- border-color: var(--primary);
445
- }
446
-
447
- .detail-search-icon {
448
- position: absolute;
449
- left: 8px;
450
- top: 50%;
451
- transform: translateY(-50%);
452
- color: var(--text-dim);
453
- font-size: 11px;
454
- }
455
-
456
- .detail-filters {
457
- display: flex;
458
- gap: 8px;
459
- align-items: center;
460
- }
461
-
462
- .detail-filters select {
463
- padding: 4px 8px;
464
- background: var(--bg);
465
- border: 1px solid var(--border);
466
- border-radius: 0;
467
- color: var(--text);
468
- font-size: 11px;
469
- cursor: pointer;
470
- }
471
-
472
- .detail-toggle {
473
- display: flex;
474
- align-items: center;
475
- gap: 6px;
476
- font-size: 11px;
477
- color: var(--text-muted);
478
- }
479
-
480
- .detail-toggle input[type="checkbox"] {
481
- cursor: pointer;
482
- }
483
-
484
- .detail-toggle label {
485
- cursor: pointer;
486
- }
487
-
488
- .view-toggle {
489
- display: flex;
490
- border: 1px solid var(--border);
491
- border-radius: 0;
492
- overflow: hidden;
493
- }
494
-
495
- .view-toggle button {
496
- padding: 4px 10px;
497
- background: var(--bg);
498
- border: none;
499
- color: var(--text-muted);
500
- font-size: 11px;
501
- cursor: pointer;
502
- transition: all 0.15s;
503
- }
504
-
505
- .view-toggle button:not(:last-child) {
506
- border-right: 1px solid var(--border);
507
- }
508
-
509
- .view-toggle button.active {
510
- background: var(--primary);
511
- color: var(--primary-contrast);
512
- }
513
-
514
- .view-toggle button:hover:not(.active) {
515
- background: var(--bg-hover);
516
- }
517
-
518
- /* Detail content */
519
- .detail-content {
520
- flex: 1;
521
- overflow-y: auto;
522
- padding: 16px;
523
- }
524
-
525
- /* Conversation flow */
526
- .conversation {
527
- display: flex;
528
- flex-direction: column;
529
- gap: 12px;
530
- }
531
-
532
- /* Collapsible sections */
533
- .section-block {
534
- border: 1px solid var(--border);
535
- border-radius: 0;
536
- overflow: hidden;
537
- }
538
-
539
- .section-header {
540
- display: flex;
541
- align-items: center;
542
- justify-content: space-between;
543
- padding: 8px 12px;
544
- background: var(--bg-tertiary);
545
- border-bottom: 1px solid var(--border);
546
- user-select: none;
547
- }
548
-
549
- .section-header-left {
550
- display: flex;
551
- align-items: center;
552
- gap: 8px;
553
- font-size: 11px;
554
- font-weight: 600;
555
- text-transform: uppercase;
556
- letter-spacing: 0.5px;
557
- color: var(--text-muted);
558
- cursor: pointer;
559
- padding: 2px 4px;
560
- margin: -2px -4px;
561
- }
562
-
563
- .section-header-left:hover {
564
- color: var(--text);
565
- }
566
-
567
- .section-header-actions {
568
- display: flex;
569
- gap: 4px;
570
- }
571
-
572
- .collapse-icon {
573
- font-size: 10px;
574
- color: var(--text-dim);
575
- transition: transform 0.15s;
576
- width: 12px;
577
- display: inline-flex;
578
- justify-content: center;
579
- flex-shrink: 0;
580
- }
581
-
582
- .section-badge {
583
- font-size: 10px;
584
- font-weight: 400;
585
- opacity: 0.7;
586
- }
587
-
588
- .section-body {
589
- padding: 12px;
590
- }
591
-
592
- /* Info card grid (meta info & usage) */
593
- .info-card {
594
- display: grid;
595
- grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
596
- gap: 1px;
597
- background: var(--border);
598
- border-bottom: 1px solid var(--border);
599
- }
600
-
601
- .info-item {
602
- display: flex;
603
- flex-direction: column;
604
- align-items: center;
605
- justify-content: center;
606
- padding: 10px 8px;
607
- background: var(--bg-secondary);
608
- text-align: center;
609
- gap: 4px;
610
- }
611
-
612
- .info-label {
613
- font-size: 10px;
614
- color: var(--text-dim);
615
- text-transform: uppercase;
616
- letter-spacing: 0.3px;
617
- }
618
-
619
- .info-value {
620
- font-size: 12px;
621
- font-weight: 500;
622
- font-family: 'SF Mono', Monaco, 'Courier New', monospace;
623
- }
624
-
625
- .info-value.number {
626
- font-weight: 700;
627
- }
628
-
629
- .status-ok { color: var(--success); }
630
- .status-fail { color: var(--error); }
631
-
632
- /* Collapsible message blocks */
633
- .message-block {
634
- border: 1px solid var(--border);
635
- border-radius: 0;
636
- margin-bottom: 10px;
637
- overflow: hidden;
638
- }
639
-
640
- .message-block:last-child {
641
- margin-bottom: 0;
642
- }
643
-
644
- .message-header {
645
- display: flex;
646
- align-items: center;
647
- justify-content: space-between;
648
- padding: 6px 10px;
649
- background: var(--bg-tertiary);
650
- border-bottom: 1px solid var(--border);
651
- }
652
-
653
- .message-header-left {
654
- display: flex;
655
- align-items: center;
656
- gap: 8px;
657
- min-width: 0;
658
- }
659
-
660
- .message-header-left .collapse-icon {
661
- cursor: pointer;
662
- }
663
-
664
- .message-header-left .collapse-icon:hover {
665
- opacity: 0.7;
666
- }
667
-
668
- .message-role {
669
- font-size: 10px;
670
- font-weight: 600;
671
- text-transform: uppercase;
672
- letter-spacing: 0.3px;
673
- flex-shrink: 0;
674
- }
675
-
676
- .message-role.user { color: var(--primary); }
677
- .message-role.assistant { color: var(--success); }
678
- .message-role.system { color: var(--warning); }
679
- .message-role.tool { color: var(--purple); }
680
-
681
- .collapsed-summary {
682
- font-size: 11px;
683
- color: var(--text-dim);
684
- overflow: hidden;
685
- text-overflow: ellipsis;
686
- white-space: nowrap;
687
- min-width: 0;
688
- }
689
-
690
- .message-header-actions {
691
- display: flex;
692
- align-items: center;
693
- gap: 4px;
694
- flex-shrink: 0;
695
- }
696
-
697
- .message-body {
698
- padding: 10px;
699
- }
700
-
701
- /* Collapsible content blocks */
702
- .content-block {
703
- border: 1px solid var(--border-light);
704
- border-radius: 0;
705
- margin-bottom: 8px;
706
- overflow: hidden;
707
- }
708
-
709
- .content-block:last-child {
710
- margin-bottom: 0;
711
- }
712
-
713
- .content-block-header {
714
- display: flex;
715
- align-items: center;
716
- justify-content: space-between;
717
- padding: 4px 8px;
718
- background: var(--bg-secondary);
719
- border-bottom: 1px solid var(--border-light);
720
- }
721
-
722
- .content-block-header-left {
723
- display: flex;
724
- align-items: center;
725
- gap: 6px;
726
- min-width: 0;
727
- }
728
-
729
- .content-block-header-left .collapse-icon {
730
- cursor: pointer;
731
- }
732
-
733
- .content-block-header-left .collapse-icon:hover {
734
- opacity: 0.7;
735
- }
736
-
737
- .content-type {
738
- font-size: 9px;
739
- font-weight: 600;
740
- text-transform: uppercase;
741
- padding: 2px 5px;
742
- border-radius: 0;
743
- flex-shrink: 0;
744
- }
745
-
746
- .content-type.text { background: var(--bg-tertiary); color: var(--text-muted); }
747
- .content-type.tool_use { background: var(--purple-muted); color: var(--purple); }
748
- .content-type.tool_result { background: var(--cyan-muted); color: var(--cyan); }
749
- .content-type.image { background: var(--pink-muted); color: var(--pink); }
750
- .content-type.thinking { background: var(--warning-muted); color: var(--warning); }
751
-
752
- .content-block-actions {
753
- display: flex;
754
- align-items: center;
755
- gap: 4px;
756
- flex-shrink: 0;
757
- }
758
-
759
- .content-block-body {
760
- padding: 8px;
761
- }
762
-
763
- .content-block-body.body-collapsed,
764
- .message-body.body-collapsed {
765
- max-height: 200px;
766
- overflow-y: auto;
767
- }
768
-
769
- .content-text {
770
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
771
- font-size: 13px;
772
- line-height: 1.6;
773
- white-space: pre-wrap;
774
- word-break: break-word;
775
- }
776
-
777
- /* Tool use specific */
778
- .tool-name {
779
- font-weight: 600;
780
- color: var(--purple);
781
- font-size: 12px;
782
- flex-shrink: 0;
783
- }
784
-
785
- .tool-id {
786
- font-size: 10px;
787
- color: var(--text-dim);
788
- font-family: 'SF Mono', Monaco, 'Courier New', monospace;
789
- overflow: hidden;
790
- text-overflow: ellipsis;
791
- white-space: nowrap;
792
- min-width: 0;
793
- }
794
-
795
- .tool-input {
796
- background: var(--bg-tertiary);
797
- border-radius: 0;
798
- padding: 8px;
799
- margin-top: 6px;
800
- font-family: 'SF Mono', Monaco, 'Courier New', monospace;
801
- font-size: 11px;
802
- white-space: pre-wrap;
803
- word-break: break-word;
804
- }
805
-
806
- /* Aggregated tool result */
807
- .tool-result-inline {
808
- margin-top: 8px;
809
- border: 1px dashed var(--cyan);
810
- border-radius: 0;
811
- overflow: hidden;
812
- }
813
-
814
- .tool-result-inline-header {
815
- display: flex;
816
- align-items: center;
817
- justify-content: space-between;
818
- padding: 4px 8px;
819
- background: var(--cyan-muted);
820
- font-size: 10px;
821
- color: var(--cyan);
822
- }
823
-
824
- .tool-result-inline-body {
825
- padding: 8px;
826
- font-family: 'SF Mono', Monaco, 'Courier New', monospace;
827
- font-size: 11px;
828
- white-space: pre-wrap;
829
- word-break: break-word;
830
- }
831
-
832
- /* Jump link */
833
- .tool-link {
834
- display: inline-flex;
835
- align-items: center;
836
- gap: 4px;
837
- color: var(--primary);
838
- font-size: 10px;
839
- cursor: pointer;
840
- text-decoration: none;
841
- }
842
-
843
- .tool-link:hover {
844
- text-decoration: underline;
845
- }
846
-
847
- /* Highlight flash animation for jump-to-block navigation */
848
- @keyframes highlight-flash {
849
- 0% { background: var(--primary-muted); }
850
- 100% { background: transparent; }
851
- }
852
-
853
- .highlight-flash {
854
- animation: highlight-flash 1.5s ease-out;
855
- }
856
-
857
- /* Truncation & rewrite visualization */
858
- .message-block.truncated {
859
- opacity: 0.45;
860
- }
861
-
862
- .message-block.truncated .message-header {
863
- background: var(--error-muted);
864
- }
865
-
866
- .message-block.rewritten {
867
- border-left: 3px solid var(--warning);
868
- }
869
-
870
- .rewrite-badge {
871
- font-size: 10px;
872
- font-weight: 600;
873
- }
874
-
875
- .rewrite-badge.deleted {
876
- color: var(--error);
877
- }
878
-
879
- .rewrite-badge.rewritten {
880
- color: var(--warning);
881
- }
882
-
883
- /* Rewrite view toggle (Original / Rewritten / Diff) */
884
- .rewrite-toggle {
885
- display: inline-flex;
886
- border: 1px solid var(--border);
887
- border-radius: 4px;
888
- overflow: hidden;
889
- margin-right: 8px;
890
- }
891
-
892
- .rewrite-tab {
893
- padding: 1px 8px;
894
- font-size: 10px;
895
- background: transparent;
896
- border: none;
897
- color: var(--text-muted);
898
- cursor: pointer;
899
- border-right: 1px solid var(--border);
900
- }
901
-
902
- .rewrite-tab:last-child {
903
- border-right: none;
904
- }
905
-
906
- .rewrite-tab.active {
907
- background: var(--bg-hover);
908
- color: var(--text);
909
- }
910
-
911
- .rewrite-tab:hover:not(.active) {
912
- background: var(--bg-tertiary);
913
- }
914
-
915
- /* Diff view - diff2html overrides */
916
- .message-body-diff {
917
- overflow-x: auto;
918
- }
919
-
920
- .message-body-diff .d2h-wrapper {
921
- min-width: 0;
922
- }
923
-
924
- .diff-no-changes {
925
- padding: 16px;
926
- text-align: center;
927
- color: var(--text-muted);
928
- font-style: italic;
929
- font-size: 12px;
930
- }
931
-
932
- .d2h-wrapper {
933
- font-size: 11px;
934
- }
935
-
936
- .d2h-file-wrapper {
937
- border: none;
938
- margin-bottom: 0;
939
- border-radius: 0;
940
- }
941
-
942
- .d2h-file-header {
943
- display: none;
944
- }
945
-
946
- .d2h-file-diff {
947
- overflow: auto;
948
- }
949
-
950
- /* Override absolute positioning of line numbers.
951
- diff2html uses position:absolute for line numbers, which breaks in our
952
- nested scrollable containers — they "stick" to the page instead of
953
- scrolling with content. Using position:static avoids this entirely.
954
- Also reset direction:rtl (used by diff2html for right-alignment trick). */
955
- .d2h-code-side-linenumber,
956
- .d2h-code-linenumber {
957
- position: static !important;
958
- direction: ltr;
959
- background: var(--bg-secondary);
960
- border-color: var(--border);
961
- color: var(--text-dim);
962
- }
963
-
964
- /* Reset the large padding that diff2html adds to make room for absolute-positioned
965
- line numbers. With static positioning, the <td> occupies its own cell space. */
966
- .d2h-code-side-line,
967
- .d2h-code-line {
968
- padding: 0;
969
- white-space: pre-wrap;
970
- word-break: break-word;
971
- background: var(--bg);
972
- color: var(--text);
973
- }
974
-
975
- .d2h-code-line-ctn {
976
- white-space: pre-wrap;
977
- word-break: break-word;
978
- }
979
-
980
- .d2h-code-side-line del,
981
- .d2h-code-line del,
982
- .d2h-code-side-line ins,
983
- .d2h-code-line ins {
984
- text-decoration: none;
985
- }
986
-
987
- .d2h-del {
988
- background: rgba(248, 81, 73, 0.1);
989
- border-color: transparent;
990
- }
991
-
992
- .d2h-del .d2h-code-side-linenumber,
993
- .d2h-del .d2h-code-linenumber {
994
- background: rgba(248, 81, 73, 0.15);
995
- border-color: transparent;
996
- color: var(--error);
997
- }
998
-
999
- .d2h-ins {
1000
- background: rgba(63, 185, 80, 0.1);
1001
- border-color: transparent;
1002
- }
1003
-
1004
- .d2h-ins .d2h-code-side-linenumber,
1005
- .d2h-ins .d2h-code-linenumber {
1006
- background: rgba(63, 185, 80, 0.15);
1007
- border-color: transparent;
1008
- color: var(--success);
1009
- }
1010
-
1011
- del.d2h-change {
1012
- background: rgba(248, 81, 73, 0.3);
1013
- }
1014
-
1015
- ins.d2h-change {
1016
- background: rgba(63, 185, 80, 0.3);
1017
- }
1018
-
1019
- .d2h-info {
1020
- background: var(--bg-tertiary);
1021
- border-color: var(--border);
1022
- color: var(--primary);
1023
- }
1024
-
1025
- .d2h-code-side-emptyplaceholder,
1026
- .d2h-emptyplaceholder {
1027
- background: var(--bg-secondary);
1028
- border-color: transparent;
1029
- }
1030
-
1031
- @media (prefers-color-scheme: light) {
1032
- .d2h-del {
1033
- background: rgba(255, 129, 130, 0.15);
1034
- }
1035
-
1036
- .d2h-del .d2h-code-side-linenumber,
1037
- .d2h-del .d2h-code-linenumber {
1038
- background: rgba(255, 129, 130, 0.2);
1039
- color: #cf222e;
1040
- }
1041
-
1042
- .d2h-ins {
1043
- background: rgba(63, 185, 80, 0.12);
1044
- }
1045
-
1046
- .d2h-ins .d2h-code-side-linenumber,
1047
- .d2h-ins .d2h-code-linenumber {
1048
- background: rgba(63, 185, 80, 0.18);
1049
- color: #1a7f37;
1050
- }
1051
-
1052
- del.d2h-change {
1053
- background: rgba(255, 129, 130, 0.4);
1054
- }
1055
-
1056
- ins.d2h-change {
1057
- background: rgba(63, 185, 80, 0.35);
1058
- }
1059
-
1060
- .d2h-code-side-linenumber,
1061
- .d2h-code-linenumber {
1062
- background: var(--bg-secondary);
1063
- color: var(--text-dim);
1064
- }
1065
-
1066
- .d2h-code-side-line,
1067
- .d2h-code-line {
1068
- background: var(--bg);
1069
- color: var(--text);
1070
- }
1071
-
1072
- .d2h-info {
1073
- background: var(--bg-tertiary);
1074
- color: var(--primary);
1075
- }
1076
-
1077
- .d2h-code-side-emptyplaceholder,
1078
- .d2h-emptyplaceholder {
1079
- background: var(--bg-secondary);
1080
- }
1081
- }
1082
-
1083
- .truncation-divider {
1084
- display: flex;
1085
- align-items: center;
1086
- gap: 12px;
1087
- margin: 8px 0;
1088
- padding: 0 4px;
1089
- }
1090
-
1091
- .truncation-divider-line {
1092
- flex: 1;
1093
- height: 1px;
1094
- background: var(--error);
1095
- opacity: 0.5;
1096
- }
1097
-
1098
- .truncation-divider-label {
1099
- font-size: 10px;
1100
- color: var(--error);
1101
- white-space: nowrap;
1102
- font-weight: 600;
1103
- letter-spacing: 0.3px;
1104
- text-transform: uppercase;
1105
- }
1106
-
1107
- .truncation-value {
1108
- color: var(--warning) !important;
1109
- }
1110
-
1111
- /* Error block */
1112
- .error-block {
1113
- padding: 12px;
1114
- background: var(--error-muted);
1115
- color: var(--error);
1116
- border-radius: 0;
1117
- margin-bottom: 12px;
1118
- }
1119
-
1120
- /* Aggregated tool result links */
1121
- .aggregated-links {
1122
- display: flex;
1123
- flex-wrap: wrap;
1124
- align-items: center;
1125
- gap: 8px;
1126
- font-size: 11px;
1127
- }
1128
-
1129
- .aggregated-label {
1130
- color: var(--text-dim);
1131
- }
1132
-
1133
- /* Search highlight */
1134
- .search-highlight {
1135
- background: var(--warning);
1136
- color: var(--bg);
1137
- padding: 0 2px;
1138
- border-radius: 0;
1139
- }
1140
-
1141
- /* JSON Tree view */
1142
- .json-tree {
1143
- font-family: 'SF Mono', Monaco, 'Courier New', monospace;
1144
- font-size: 12px;
1145
- line-height: 1.6;
1146
- }
1147
-
1148
- .json-tree ul {
1149
- list-style: none;
1150
- padding-left: 20px;
1151
- }
1152
-
1153
- .json-tree > ul {
1154
- padding-left: 0;
1155
- }
1156
-
1157
- .json-tree li {
1158
- position: relative;
1159
- }
1160
-
1161
- .json-tree .jt-toggle {
1162
- cursor: pointer;
1163
- user-select: none;
1164
- display: inline-flex;
1165
- width: 14px;
1166
- justify-content: center;
1167
- color: var(--text-dim);
1168
- font-size: 10px;
1169
- margin-right: 2px;
1170
- }
1171
-
1172
- .json-tree .jt-toggle:hover {
1173
- color: var(--text);
1174
- }
1175
-
1176
- .json-tree .jt-key {
1177
- color: #9cdcfe;
1178
- }
1179
-
1180
- .json-tree .jt-string {
1181
- color: #ce9178;
1182
- }
1183
-
1184
- .json-tree .jt-number {
1185
- color: #b5cea8;
1186
- }
1187
-
1188
- .json-tree .jt-boolean {
1189
- color: #569cd6;
1190
- }
1191
-
1192
- .json-tree .jt-null {
1193
- color: #569cd6;
1194
- font-style: italic;
1195
- }
1196
-
1197
- .json-tree .jt-bracket {
1198
- color: var(--text-dim);
1199
- }
1200
-
1201
- .json-tree .jt-collapsed-info {
1202
- color: var(--text-dim);
1203
- font-style: italic;
1204
- font-size: 11px;
1205
- }
1206
-
1207
- .json-tree .jt-comma {
1208
- color: var(--text-dim);
1209
- }
1210
-
1211
- .json-tree .jt-string-truncated {
1212
- word-break: break-all;
1213
- }
1214
-
1215
- .json-tree .jt-expand-string {
1216
- display: inline-block;
1217
- margin-left: 6px;
1218
- color: var(--primary);
1219
- font-size: 10px;
1220
- cursor: pointer;
1221
- font-style: italic;
1222
- user-select: none;
1223
- }
1224
-
1225
- .json-tree .jt-expand-string:hover {
1226
- text-decoration: underline;
1227
- }
1228
-
1229
-
1230
- /* Action buttons (icon + text) */
1231
- .action-btn {
1232
- display: inline-flex;
1233
- align-items: center;
1234
- gap: 3px;
1235
- padding: 2px 6px;
1236
- background: transparent;
1237
- border: none;
1238
- border-radius: 3px;
1239
- color: var(--text-muted);
1240
- cursor: pointer;
1241
- font-size: 11px;
1242
- font-family: inherit;
1243
- transition: all 0.15s;
1244
- white-space: nowrap;
1245
- }
1246
-
1247
- .action-btn:hover {
1248
- background: var(--bg-hover);
1249
- color: var(--text);
1250
- }
1251
-
1252
- .action-btn svg {
1253
- width: 13px;
1254
- height: 13px;
1255
- flex-shrink: 0;
1256
- }
1257
-
1258
- /* Icon-only buttons (header, modal close) */
1259
- .icon-btn {
1260
- display: inline-flex;
1261
- align-items: center;
1262
- justify-content: center;
1263
- width: 28px;
1264
- height: 28px;
1265
- padding: 0;
1266
- background: transparent;
1267
- border: none;
1268
- border-radius: 3px;
1269
- color: var(--text-muted);
1270
- cursor: pointer;
1271
- font-size: 12px;
1272
- transition: all 0.15s;
1273
- }
1274
-
1275
- .icon-btn:hover {
1276
- background: var(--bg-hover);
1277
- color: var(--text);
1278
- }
1279
-
1280
- .icon-btn svg {
1281
- width: 16px;
1282
- height: 16px;
1283
- }
1284
-
1285
- /* Regular buttons */
1286
- button {
1287
- background: var(--bg-tertiary);
1288
- border: 1px solid var(--border);
1289
- color: var(--text);
1290
- padding: 6px 12px;
1291
- border-radius: 0;
1292
- cursor: pointer;
1293
- font-size: 12px;
1294
- transition: all 0.15s;
1295
- display: inline-flex;
1296
- align-items: center;
1297
- gap: 6px;
1298
- }
1299
-
1300
- button svg {
1301
- width: 14px;
1302
- height: 14px;
1303
- flex-shrink: 0;
1304
- }
1305
-
1306
- button:hover {
1307
- background: var(--bg-hover);
1308
- }
1309
-
1310
- button.primary {
1311
- background: var(--primary);
1312
- border-color: var(--primary);
1313
- color: var(--primary-contrast);
1314
- }
1315
-
1316
- button.primary:hover {
1317
- opacity: 0.9;
1318
- }
1319
-
1320
- button.danger {
1321
- color: var(--error);
1322
- }
1323
-
1324
- button.danger:hover {
1325
- background: var(--error-muted);
1326
- }
1327
-
1328
- button:disabled {
1329
- opacity: 0.5;
1330
- cursor: not-allowed;
1331
- }
1332
-
1333
- button.small {
1334
- padding: 4px 8px;
1335
- font-size: 11px;
1336
- }
1337
-
1338
- /* Modal */
1339
- .modal-overlay {
1340
- position: fixed;
1341
- top: 0;
1342
- left: 0;
1343
- right: 0;
1344
- bottom: 0;
1345
- background: rgba(0, 0, 0, 0.6);
1346
- display: none;
1347
- justify-content: center;
1348
- align-items: center;
1349
- z-index: 1000;
1350
- }
1351
-
1352
- .modal-overlay.open {
1353
- display: flex;
1354
- }
1355
-
1356
- .modal {
1357
- background: #161b22;
1358
- border: 1px solid #30363d;
1359
- border-radius: 0;
1360
- width: calc(100vw - 48px);
1361
- height: calc(100vh - 48px);
1362
- display: flex;
1363
- flex-direction: column;
1364
- color: #e6edf3;
1365
- /* Force dark mode inside modals */
1366
- --bg: #0d1117;
1367
- --bg-secondary: #161b22;
1368
- --bg-tertiary: #21262d;
1369
- --bg-hover: #30363d;
1370
- --text: #e6edf3;
1371
- --text-muted: #8b949e;
1372
- --text-dim: #6e7681;
1373
- --border: #30363d;
1374
- --border-light: #21262d;
1375
- --primary: #58a6ff;
1376
- }
1377
-
1378
- .modal-header {
1379
- padding: 12px 16px;
1380
- border-bottom: 1px solid var(--border);
1381
- display: flex;
1382
- justify-content: space-between;
1383
- align-items: center;
1384
- }
1385
-
1386
- .modal-header h3 {
1387
- font-size: 14px;
1388
- font-weight: 600;
1389
- }
1390
-
1391
- .modal-body {
1392
- flex: 1;
1393
- overflow: auto;
1394
- padding: 16px;
1395
- }
1396
-
1397
- /* Scrollbar */
1398
- ::-webkit-scrollbar {
1399
- width: 8px;
1400
- height: 8px;
1401
- }
1402
-
1403
- ::-webkit-scrollbar-track {
1404
- background: var(--bg);
1405
- }
1406
-
1407
- ::-webkit-scrollbar-thumb {
1408
- background: var(--border);
1409
- border-radius: 0;
1410
- }
1411
-
1412
- ::-webkit-scrollbar-thumb:hover {
1413
- background: var(--text-dim);
1414
- }
1415
-
1416
- /* Loading */
1417
- .loading {
1418
- text-align: center;
1419
- padding: 20px;
1420
- color: var(--text-muted);
1421
- }
1422
-
1423
- /* Empty state */
1424
- .empty-state {
1425
- text-align: center;
1426
- padding: 40px 20px;
1427
- color: var(--text-muted);
1428
- }
1429
-
1430
- .empty-state h3 {
1431
- margin-bottom: 8px;
1432
- color: var(--text);
1433
- font-size: 14px;
1434
- }
1435
-
1436
- .empty-state p {
1437
- font-size: 12px;
1438
- }
1439
-
1440
- /* Responsive */
1441
- @media (max-width: 768px) {
1442
- .main {
1443
- flex-direction: column;
1444
- }
1445
-
1446
- .list-panel {
1447
- width: 100%;
1448
- max-width: none;
1449
- height: 40%;
1450
- border-right: none;
1451
- border-bottom: 1px solid var(--border);
1452
- }
1453
-
1454
- .detail-panel {
1455
- height: 60%;
1456
- }
1457
-
1458
- .header {
1459
- flex-wrap: wrap;
1460
- gap: 8px;
1461
- }
1462
-
1463
- .stats-bar {
1464
- flex-wrap: wrap;
1465
- gap: 12px;
1466
- }
1467
- }