agentgui 1.0.118 → 1.0.120

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentgui",
3
- "version": "1.0.118",
3
+ "version": "1.0.120",
4
4
  "description": "Multi-agent ACP client with real-time communication",
5
5
  "type": "module",
6
6
  "main": "server.js",
package/static/index.html CHANGED
@@ -65,7 +65,6 @@
65
65
  display: flex;
66
66
  flex-direction: column;
67
67
  background-color: var(--color-bg-secondary);
68
- border-right: 1px solid var(--color-border);
69
68
  overflow: hidden;
70
69
  transition: width 0.25s ease, min-width 0.25s ease;
71
70
  }
@@ -78,7 +77,6 @@
78
77
 
79
78
  .sidebar-header {
80
79
  padding: 0.75rem 1rem;
81
- border-bottom: 1px solid var(--color-border);
82
80
  display: flex;
83
81
  justify-content: space-between;
84
82
  align-items: center;
@@ -235,7 +233,6 @@
235
233
  min-height: var(--header-height);
236
234
  flex-shrink: 0;
237
235
  background-color: var(--color-bg-secondary);
238
- border-bottom: 1px solid var(--color-border);
239
236
  }
240
237
 
241
238
  .sidebar-toggle-btn {
@@ -245,7 +242,7 @@
245
242
  width: 36px;
246
243
  height: 36px;
247
244
  background: none;
248
- border: 1px solid var(--color-border);
245
+ border: none;
249
246
  border-radius: 0.375rem;
250
247
  cursor: pointer;
251
248
  color: var(--color-text-secondary);
@@ -290,7 +287,6 @@
290
287
  font-size: 0.75rem;
291
288
  font-weight: 500;
292
289
  background-color: var(--color-bg-primary);
293
- border: 1px solid var(--color-border);
294
290
  }
295
291
 
296
292
  .status-indicator {
@@ -314,7 +310,7 @@
314
310
  width: 36px;
315
311
  height: 36px;
316
312
  background: none;
317
- border: 1px solid var(--color-border);
313
+ border: none;
318
314
  border-radius: 0.375rem;
319
315
  cursor: pointer;
320
316
  color: var(--color-text-secondary);
@@ -330,7 +326,6 @@
330
326
  .view-toggle-bar {
331
327
  display: flex;
332
328
  gap: 0;
333
- border-bottom: 1px solid var(--color-border);
334
329
  background: var(--color-bg-secondary);
335
330
  flex-shrink: 0;
336
331
  padding: 0 1rem;
@@ -382,7 +377,6 @@
382
377
  /* --- Conversation display --- */
383
378
  .conversation-header {
384
379
  padding: 0.75rem 0;
385
- border-bottom: 1px solid var(--color-border);
386
380
  margin-bottom: 1rem;
387
381
  }
388
382
 
@@ -409,7 +403,6 @@
409
403
 
410
404
  .message-assistant {
411
405
  background-color: var(--color-bg-secondary);
412
- border: 1px solid var(--color-border);
413
406
  margin-right: auto;
414
407
  border-bottom-left-radius: 0.25rem;
415
408
  }
@@ -484,7 +477,6 @@
484
477
  padding: 0.5rem 0.75rem;
485
478
  margin: 0.25rem 0;
486
479
  background: rgba(59,130,246,0.08);
487
- border: 1px solid rgba(59,130,246,0.2);
488
480
  border-radius: 0.375rem;
489
481
  font-size: 0.8rem;
490
482
  display: flex;
@@ -536,7 +528,6 @@
536
528
  html.dark .tool-use-name { color: #22d3ee; }
537
529
 
538
530
  .tool-input-details {
539
- border-top: 1px solid rgba(6,182,212,0.15);
540
531
  }
541
532
 
542
533
  .tool-input-summary {
@@ -576,7 +567,6 @@
576
567
  .tool-result-header {
577
568
  padding: 0.375rem 0.75rem;
578
569
  font-size: 0.7rem;
579
- border-bottom: 1px solid rgba(255,255,255,0.05);
580
570
  }
581
571
 
582
572
  .tool-result-ok-badge {
@@ -607,7 +597,6 @@
607
597
  }
608
598
 
609
599
  .streaming-block-tool-result.tool-result-error {
610
- border: 1px solid rgba(239,68,68,0.3);
611
600
  }
612
601
 
613
602
  .streaming-block-result {
@@ -615,7 +604,6 @@
615
604
  margin: 0.5rem 0;
616
605
  border-radius: 0.375rem;
617
606
  background: rgba(16,185,129,0.08);
618
- border: 1px solid rgba(16,185,129,0.2);
619
607
  font-size: 0.8rem;
620
608
  display: flex;
621
609
  align-items: center;
@@ -624,7 +612,6 @@
624
612
 
625
613
  .streaming-block-result.result-error {
626
614
  background: rgba(239,68,68,0.08);
627
- border-color: rgba(239,68,68,0.2);
628
615
  }
629
616
 
630
617
  .result-status {
@@ -646,7 +633,6 @@
646
633
  /* --- Input area: fixed at bottom --- */
647
634
  .input-section {
648
635
  flex-shrink: 0;
649
- border-top: 1px solid var(--color-border);
650
636
  background-color: var(--color-bg-primary);
651
637
  padding: 0.75rem 1rem;
652
638
  }
@@ -662,7 +648,7 @@
662
648
 
663
649
  .agent-selector {
664
650
  padding: 0.5rem;
665
- border: 1px solid var(--color-border);
651
+ border: none;
666
652
  border-radius: 0.375rem;
667
653
  background-color: var(--color-bg-secondary);
668
654
  color: var(--color-text-primary);
@@ -674,7 +660,7 @@
674
660
  .message-textarea {
675
661
  flex: 1;
676
662
  padding: 0.625rem 0.875rem;
677
- border: 1px solid var(--color-border);
663
+ border: none;
678
664
  border-radius: 0.75rem;
679
665
  background-color: var(--color-bg-secondary);
680
666
  color: var(--color-text-primary);
@@ -689,7 +675,6 @@
689
675
 
690
676
  .message-textarea:focus {
691
677
  outline: none;
692
- border-color: var(--color-primary);
693
678
  box-shadow: 0 0 0 2px rgba(59,130,246,0.15);
694
679
  }
695
680
 
@@ -733,7 +718,6 @@
733
718
  .html-rendered-label {
734
719
  padding: 0.5rem;
735
720
  background: #eff6ff;
736
- border: 1px solid #bfdbfe;
737
721
  border-radius: 0.25rem;
738
722
  font-size: 0.75rem;
739
723
  font-weight: 600;
@@ -743,20 +727,19 @@
743
727
  margin-bottom: 0.5rem;
744
728
  }
745
729
 
746
- html.dark .html-rendered-label { background: #1e3a5f; border-color: #2563eb; color: #93c5fd; }
730
+ html.dark .html-rendered-label { background: #1e3a5f; color: #93c5fd; }
747
731
 
748
732
  .html-content {
749
733
  background: #ffffff;
750
734
  padding: 1rem;
751
735
  border-radius: 0.375rem;
752
- border: 1px solid var(--color-border);
753
736
  overflow-x: auto;
754
737
  }
755
738
 
756
739
  html.dark .html-content { background: #1f2937; }
757
740
 
758
741
  .html-content table { border-collapse: collapse; width: 100%; margin: 0.5rem 0; }
759
- .html-content th, .html-content td { border: 1px solid var(--color-border); padding: 0.5rem 0.75rem; text-align: left; font-size: 0.875rem; }
742
+ .html-content th, .html-content td { padding: 0.5rem 0.75rem; text-align: left; font-size: 0.875rem; }
760
743
  .html-content th { background: var(--color-bg-secondary); font-weight: 600; }
761
744
  .html-content ul, .html-content ol { padding-left: 1.5rem; margin: 0.5rem 0; }
762
745
  .html-content li { margin: 0.25rem 0; }
@@ -772,31 +755,31 @@
772
755
  /* ===== Folder Browser Modal ===== */
773
756
  .folder-modal-overlay { display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.5); z-index:2000; align-items:center; justify-content:center; }
774
757
  .folder-modal-overlay.visible { display:flex; }
775
- .folder-modal { background:var(--color-bg-primary); border:1px solid var(--color-border); border-radius:0.5rem; width:500px; max-width:90vw; max-height:80vh; display:flex; flex-direction:column; box-shadow:0 20px 60px rgba(0,0,0,0.3); }
776
- .folder-modal-header { padding:1rem; border-bottom:1px solid var(--color-border); display:flex; justify-content:space-between; align-items:center; flex-shrink:0; }
758
+ .folder-modal { background:var(--color-bg-primary); border-radius:0.5rem; width:500px; max-width:90vw; max-height:80vh; display:flex; flex-direction:column; box-shadow:0 20px 60px rgba(0,0,0,0.3); }
759
+ .folder-modal-header { padding:1rem; display:flex; justify-content:space-between; align-items:center; flex-shrink:0; }
777
760
  .folder-modal-header h3 { margin:0; font-size:1rem; font-weight:600; }
778
761
  .folder-modal-close { background:none; border:none; font-size:1.25rem; cursor:pointer; color:var(--color-text-secondary); padding:0.25rem; line-height:1; }
779
762
  .folder-modal-close:hover { color:var(--color-text-primary); }
780
- .folder-breadcrumb { padding:0.75rem 1rem; border-bottom:1px solid var(--color-border); font-size:0.8rem; font-family:'Monaco','Menlo',monospace; color:var(--color-text-secondary); background:var(--color-bg-secondary); display:flex; align-items:center; gap:0.25rem; flex-shrink:0; overflow-x:auto; white-space:nowrap; }
763
+ .folder-breadcrumb { padding:0.75rem 1rem; font-size:0.8rem; font-family:'Monaco','Menlo',monospace; color:var(--color-text-secondary); background:var(--color-bg-secondary); display:flex; align-items:center; gap:0.25rem; flex-shrink:0; overflow-x:auto; white-space:nowrap; }
781
764
  .folder-breadcrumb-segment { cursor:pointer; color:var(--color-primary); padding:0.125rem 0.25rem; border-radius:0.25rem; }
782
765
  .folder-breadcrumb-segment:hover { background:var(--color-bg-primary); text-decoration:underline; }
783
766
  .folder-breadcrumb-separator { color:var(--color-text-secondary); }
784
767
  .folder-list { flex:1; overflow-y:auto; min-height:200px; max-height:400px; list-style:none; margin:0; padding:0; }
785
- .folder-list-item { padding:0.5rem 1rem; cursor:pointer; display:flex; align-items:center; gap:0.5rem; font-size:0.875rem; border-bottom:1px solid var(--color-border); transition:background-color 0.15s; }
768
+ .folder-list-item { padding:0.5rem 1rem; cursor:pointer; display:flex; align-items:center; gap:0.5rem; font-size:0.875rem; transition:background-color 0.15s; }
786
769
  .folder-list-item:hover { background:var(--color-bg-secondary); }
787
770
  .folder-list-item-icon { font-size:1rem; flex-shrink:0; width:1.25rem; text-align:center; }
788
771
  .folder-list-item-name { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
789
772
  .folder-list-empty { padding:2rem 1rem; text-align:center; color:var(--color-text-secondary); font-size:0.875rem; }
790
773
  .folder-list-loading { padding:2rem 1rem; text-align:center; color:var(--color-text-secondary); font-size:0.875rem; }
791
774
  .folder-list-error { padding:1rem; text-align:center; color:var(--color-error); font-size:0.875rem; }
792
- .folder-modal-footer { padding:0.75rem 1rem; border-top:1px solid var(--color-border); display:flex; justify-content:flex-end; gap:0.5rem; flex-shrink:0; }
775
+ .folder-modal-footer { padding:0.75rem 1rem; display:flex; justify-content:flex-end; gap:0.5rem; flex-shrink:0; }
793
776
  .folder-modal-footer .btn { padding:0.5rem 1rem; font-size:0.8rem; }
794
777
 
795
778
  .btn { padding:0.5rem 1rem; border:none; border-radius:0.375rem; font-weight:500; cursor:pointer; transition:all 0.15s; font-size:0.875rem; }
796
779
  .btn-primary { background-color:var(--color-primary); color:white; }
797
780
  .btn-primary:hover:not(:disabled) { background-color:var(--color-primary-dark); }
798
781
  .btn:disabled { opacity:0.5; cursor:not-allowed; }
799
- .btn-secondary { background:var(--color-bg-secondary); color:var(--color-text-primary); border:1px solid var(--color-border); }
782
+ .btn-secondary { background:var(--color-bg-secondary); color:var(--color-text-primary); border:none; }
800
783
  .btn-secondary:hover { background:var(--color-border); }
801
784
 
802
785
  /* ===== Drop zone ===== */
@@ -936,7 +919,6 @@
936
919
  padding: 1rem;
937
920
  background: var(--color-bg-primary);
938
921
  border-radius: 0.5rem;
939
- border: 1px solid var(--color-border);
940
922
  line-height: 1.7;
941
923
  font-size: 0.9rem;
942
924
  }
@@ -945,7 +927,6 @@
945
927
  margin-bottom: 0.75rem;
946
928
  border-radius: 0.5rem;
947
929
  overflow: hidden;
948
- border: 1px solid var(--color-border);
949
930
  }
950
931
 
951
932
  .block-code .code-header {
@@ -955,7 +936,6 @@
955
936
  gap: 0.5rem;
956
937
  background: #1f2937;
957
938
  padding: 0.5rem 1rem;
958
- border-bottom: 1px solid #374151;
959
939
  }
960
940
 
961
941
  .block-code .code-header .lang-badge {
@@ -993,12 +973,11 @@
993
973
  .block-thinking {
994
974
  margin-bottom: 0.75rem;
995
975
  border-radius: 0.5rem;
996
- border: 2px solid #c4b5fd;
997
976
  background: #f5f3ff;
998
977
  overflow: hidden;
999
978
  }
1000
979
 
1001
- html.dark .block-thinking { border-color: #5b21b6; background: #1e1033; }
980
+ html.dark .block-thinking { background: #1e1033; }
1002
981
 
1003
982
  .block-thinking summary {
1004
983
  padding: 0.75rem 1rem;
@@ -1019,36 +998,33 @@
1019
998
 
1020
999
  .block-thinking .thinking-content {
1021
1000
  padding: 0.75rem 1rem;
1022
- border-top: 1px solid #c4b5fd;
1023
1001
  font-size: 0.85rem;
1024
1002
  color: #5b21b6;
1025
1003
  white-space: pre-wrap;
1026
1004
  line-height: 1.6;
1027
1005
  }
1028
1006
 
1029
- html.dark .block-thinking .thinking-content { border-color: #5b21b6; color: #c4b5fd; }
1007
+ html.dark .block-thinking .thinking-content { color: #c4b5fd; }
1030
1008
 
1031
1009
  /* --- Tool Use Block --- */
1032
1010
  .block-tool-use {
1033
1011
  margin-bottom: 0.75rem;
1034
1012
  border-radius: 0.5rem;
1035
- border: 1px solid #a5f3fc;
1036
1013
  background: #ecfeff;
1037
1014
  overflow: hidden;
1038
1015
  }
1039
1016
 
1040
- html.dark .block-tool-use { border-color: #155e75; background: #0c1a24; }
1017
+ html.dark .block-tool-use { background: #0c1a24; }
1041
1018
 
1042
1019
  .block-tool-use .tool-header {
1043
1020
  padding: 0.625rem 1rem;
1044
- border-bottom: 1px solid #a5f3fc;
1045
1021
  display: flex;
1046
1022
  align-items: center;
1047
1023
  gap: 0.5rem;
1048
1024
  background: #cffafe;
1049
1025
  }
1050
1026
 
1051
- html.dark .block-tool-use .tool-header { border-color: #155e75; background: #0e2a3a; }
1027
+ html.dark .block-tool-use .tool-header { background: #0e2a3a; }
1052
1028
 
1053
1029
  .block-tool-use .tool-header .tool-icon {
1054
1030
  display: flex;
@@ -1098,7 +1074,6 @@
1098
1074
  gap: 0.5rem;
1099
1075
  padding: 0.5rem 0.75rem;
1100
1076
  background: var(--color-bg-primary);
1101
- border: 1px solid #a5f3fc;
1102
1077
  border-radius: 0.375rem;
1103
1078
  font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1104
1079
  font-size: 0.8rem;
@@ -1106,8 +1081,6 @@
1106
1081
  overflow-x: auto;
1107
1082
  }
1108
1083
 
1109
- html.dark .tool-param-file { border-color: #155e75; }
1110
-
1111
1084
  .tool-param-file .file-icon { color: #0891b2; flex-shrink: 0; font-size: 1rem; }
1112
1085
  .tool-param-file .file-dir { color: var(--color-text-secondary); }
1113
1086
  .tool-param-file .file-name { font-weight: 600; color: var(--color-text-primary); }
@@ -1131,7 +1104,6 @@
1131
1104
  .tool-param-diff {
1132
1105
  border-radius: 0.375rem;
1133
1106
  overflow: hidden;
1134
- border: 1px solid var(--color-border);
1135
1107
  font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1136
1108
  font-size: 0.75rem;
1137
1109
  }
@@ -1139,7 +1111,6 @@
1139
1111
  .tool-param-diff .diff-header {
1140
1112
  padding: 0.375rem 0.75rem;
1141
1113
  background: var(--color-bg-secondary);
1142
- border-bottom: 1px solid var(--color-border);
1143
1114
  font-weight: 600;
1144
1115
  font-size: 0.7rem;
1145
1116
  text-transform: uppercase;
@@ -1151,7 +1122,6 @@
1151
1122
  padding: 0.5rem 0.75rem;
1152
1123
  background: #fef2f2;
1153
1124
  color: #991b1b;
1154
- border-bottom: 1px solid var(--color-border);
1155
1125
  white-space: pre-wrap;
1156
1126
  word-break: break-all;
1157
1127
  max-height: 200px;
@@ -1178,12 +1148,9 @@
1178
1148
  gap: 0.5rem;
1179
1149
  padding: 0.5rem 0.75rem;
1180
1150
  background: var(--color-bg-primary);
1181
- border: 1px solid #a5f3fc;
1182
1151
  border-radius: 0.375rem;
1183
1152
  font-size: 0.85rem;
1184
1153
  }
1185
-
1186
- html.dark .tool-param-query { border-color: #155e75; }
1187
1154
  .tool-param-query .query-icon { flex-shrink: 0; font-size: 1rem; }
1188
1155
 
1189
1156
  .tool-param-url {
@@ -1192,7 +1159,6 @@
1192
1159
  gap: 0.5rem;
1193
1160
  padding: 0.5rem 0.75rem;
1194
1161
  background: var(--color-bg-primary);
1195
- border: 1px solid #a5f3fc;
1196
1162
  border-radius: 0.375rem;
1197
1163
  font-family: 'Monaco','Menlo','Ubuntu Mono', monospace;
1198
1164
  font-size: 0.8rem;
@@ -1200,7 +1166,7 @@
1200
1166
  word-break: break-all;
1201
1167
  }
1202
1168
 
1203
- html.dark .tool-param-url { border-color: #155e75; color: #60a5fa; }
1169
+ html.dark .tool-param-url { color: #60a5fa; }
1204
1170
  .tool-param-url .url-icon { flex-shrink: 0; font-size: 1rem; }
1205
1171
 
1206
1172
  .tool-param-todos {
@@ -1217,7 +1183,6 @@
1217
1183
  border-radius: 0.25rem;
1218
1184
  font-size: 0.8rem;
1219
1185
  background: var(--color-bg-primary);
1220
- border: 1px solid var(--color-border);
1221
1186
  }
1222
1187
 
1223
1188
  .tool-param-todos .todo-status {
@@ -1230,13 +1195,10 @@
1230
1195
 
1231
1196
  .tool-param-json {
1232
1197
  background: var(--color-bg-primary);
1233
- border: 1px solid #a5f3fc;
1234
1198
  border-radius: 0.375rem;
1235
1199
  overflow: hidden;
1236
1200
  }
1237
1201
 
1238
- html.dark .tool-param-json { border-color: #155e75; }
1239
-
1240
1202
  .tool-param-json pre {
1241
1203
  margin: 0;
1242
1204
  padding: 0.625rem 0.875rem;
@@ -1251,7 +1213,6 @@
1251
1213
  .tool-param-content-preview {
1252
1214
  border-radius: 0.375rem;
1253
1215
  overflow: hidden;
1254
- border: 1px solid var(--color-border);
1255
1216
  }
1256
1217
 
1257
1218
  .tool-param-content-preview .preview-header {
@@ -1262,7 +1223,6 @@
1262
1223
  text-transform: uppercase;
1263
1224
  letter-spacing: 0.03em;
1264
1225
  color: var(--color-text-secondary);
1265
- border-bottom: 1px solid var(--color-border);
1266
1226
  display: flex;
1267
1227
  justify-content: space-between;
1268
1228
  align-items: center;
@@ -1286,7 +1246,6 @@
1286
1246
  color: var(--color-text-secondary);
1287
1247
  background: var(--color-bg-secondary);
1288
1248
  text-align: center;
1289
- border-top: 1px solid var(--color-border);
1290
1249
  }
1291
1250
 
1292
1251
  /* --- Tool Result Block --- */
@@ -1296,10 +1255,10 @@
1296
1255
  overflow: hidden;
1297
1256
  }
1298
1257
 
1299
- .block-tool-result.result-success { border: 1px solid #86efac; background: #f0fdf4; }
1300
- .block-tool-result.result-error { border: 1px solid #fca5a5; background: #fef2f2; }
1301
- html.dark .block-tool-result.result-success { border-color: #166534; background: #0a1f0f; }
1302
- html.dark .block-tool-result.result-error { border-color: #991b1b; background: #1c0f0f; }
1258
+ .block-tool-result.result-success { background: #f0fdf4; }
1259
+ .block-tool-result.result-error { background: #fef2f2; }
1260
+ html.dark .block-tool-result.result-success { background: #0a1f0f; }
1261
+ html.dark .block-tool-result.result-error { background: #1c0f0f; }
1303
1262
 
1304
1263
  .block-tool-result .result-header {
1305
1264
  padding: 0.5rem 1rem;
@@ -1308,10 +1267,10 @@
1308
1267
  justify-content: space-between;
1309
1268
  }
1310
1269
 
1311
- .block-tool-result.result-success .result-header { background: #dcfce7; border-bottom: 1px solid #86efac; }
1312
- .block-tool-result.result-error .result-header { background: #fee2e2; border-bottom: 1px solid #fca5a5; }
1313
- html.dark .block-tool-result.result-success .result-header { background: #0f2b1a; border-color: #166534; }
1314
- html.dark .block-tool-result.result-error .result-header { background: #2c1010; border-color: #991b1b; }
1270
+ .block-tool-result.result-success .result-header { background: #dcfce7; }
1271
+ .block-tool-result.result-error .result-header { background: #fee2e2; }
1272
+ html.dark .block-tool-result.result-success .result-header { background: #0f2b1a; }
1273
+ html.dark .block-tool-result.result-error .result-header { background: #2c1010; }
1315
1274
 
1316
1275
  .block-tool-result .result-header .status-label {
1317
1276
  display: flex;
@@ -1360,7 +1319,6 @@
1360
1319
  padding: 0.375rem;
1361
1320
  background: var(--color-bg-secondary);
1362
1321
  border: none;
1363
- border-top: 1px solid var(--color-border);
1364
1322
  cursor: pointer;
1365
1323
  font-size: 0.75rem;
1366
1324
  color: var(--color-primary);
@@ -1385,16 +1343,14 @@
1385
1343
 
1386
1344
  .block-result.result-ok {
1387
1345
  background: linear-gradient(135deg, #ecfdf5, #f0fdf4);
1388
- border: 1px solid #86efac;
1389
1346
  }
1390
1347
 
1391
1348
  .block-result.result-err {
1392
1349
  background: linear-gradient(135deg, #fef2f2, #fff1f2);
1393
- border: 1px solid #fca5a5;
1394
1350
  }
1395
1351
 
1396
- html.dark .block-result.result-ok { background: linear-gradient(135deg, #0a1f0f, #0f2b1a); border-color: #166534; }
1397
- html.dark .block-result.result-err { background: linear-gradient(135deg, #1c0f0f, #2c1010); border-color: #991b1b; }
1352
+ html.dark .block-result.result-ok { background: linear-gradient(135deg, #0a1f0f, #0f2b1a); }
1353
+ html.dark .block-result.result-err { background: linear-gradient(135deg, #1c0f0f, #2c1010); }
1398
1354
 
1399
1355
  .block-result .result-summary-header {
1400
1356
  padding: 0.625rem 1rem;
@@ -1430,7 +1386,6 @@
1430
1386
 
1431
1387
  .block-result .result-content {
1432
1388
  padding: 0.625rem 1rem;
1433
- border-top: 1px solid var(--color-border);
1434
1389
  font-size: 0.85rem;
1435
1390
  white-space: pre-wrap;
1436
1391
  word-break: break-word;
@@ -1443,23 +1398,21 @@
1443
1398
  .block-system {
1444
1399
  margin-bottom: 0.75rem;
1445
1400
  border-radius: 0.5rem;
1446
- border: 1px solid #c7d2fe;
1447
1401
  background: #eef2ff;
1448
1402
  overflow: hidden;
1449
1403
  }
1450
1404
 
1451
- html.dark .block-system { border-color: #3730a3; background: #15103a; }
1405
+ html.dark .block-system { background: #15103a; }
1452
1406
 
1453
1407
  .block-system .system-header {
1454
1408
  padding: 0.625rem 1rem;
1455
1409
  background: #e0e7ff;
1456
- border-bottom: 1px solid #c7d2fe;
1457
1410
  font-weight: 600;
1458
1411
  font-size: 0.85rem;
1459
1412
  color: #3730a3;
1460
1413
  }
1461
1414
 
1462
- html.dark .block-system .system-header { background: #1e1b4b; border-color: #3730a3; color: #a5b4fc; }
1415
+ html.dark .block-system .system-header { background: #1e1b4b; color: #a5b4fc; }
1463
1416
 
1464
1417
  .block-system .system-body {
1465
1418
  padding: 0.75rem 1rem;
@@ -1503,13 +1456,11 @@
1503
1456
  margin-bottom: 0.75rem;
1504
1457
  border-radius: 0.5rem;
1505
1458
  overflow: hidden;
1506
- border: 1px solid #374151;
1507
1459
  background: #111827;
1508
1460
  }
1509
1461
 
1510
1462
  .block-bash .bash-command {
1511
1463
  padding: 0.625rem 1rem;
1512
- border-bottom: 1px solid #374151;
1513
1464
  display: flex;
1514
1465
  align-items: flex-start;
1515
1466
  gap: 0.5rem;
@@ -1539,7 +1490,6 @@
1539
1490
  margin-bottom: 0.75rem;
1540
1491
  padding: 0.75rem 1rem;
1541
1492
  border-radius: 0.5rem;
1542
- border: 1px solid var(--color-border);
1543
1493
  background: var(--color-bg-secondary);
1544
1494
  }
1545
1495
 
@@ -1583,18 +1533,16 @@
1583
1533
  margin-bottom: 0.75rem;
1584
1534
  padding: 0.75rem 1rem;
1585
1535
  border-radius: 0.5rem;
1586
- border: 1px solid #fca5a5;
1587
1536
  background: #fef2f2;
1588
1537
  }
1589
1538
 
1590
- html.dark .block-error { border-color: #991b1b; background: #1c0f0f; }
1539
+ html.dark .block-error { background: #1c0f0f; }
1591
1540
 
1592
1541
  /* --- Image Block --- */
1593
1542
  .block-image {
1594
1543
  margin-bottom: 0.75rem;
1595
1544
  border-radius: 0.5rem;
1596
1545
  overflow: hidden;
1597
- border: 1px solid var(--color-border);
1598
1546
  }
1599
1547
 
1600
1548
  .block-image img { max-width: 100%; height: auto; max-height: 24rem; object-fit: contain; display: block; }
@@ -1605,24 +1553,22 @@
1605
1553
  margin-bottom: 0.75rem;
1606
1554
  padding: 0.75rem 1rem;
1607
1555
  background: #eff6ff;
1608
- border: 1px solid #bfdbfe;
1609
1556
  border-radius: 0.5rem;
1610
1557
  display: flex;
1611
1558
  align-items: center;
1612
1559
  gap: 0.625rem;
1613
1560
  }
1614
1561
 
1615
- html.dark .event-streaming-start { background: #0c1a2e; border-color: #1e40af; }
1562
+ html.dark .event-streaming-start { background: #0c1a2e; }
1616
1563
 
1617
1564
  .event-streaming-complete {
1618
1565
  margin-bottom: 0.75rem;
1619
1566
  padding: 0.75rem 1rem;
1620
1567
  background: linear-gradient(135deg, #ecfdf5, #f0fdf4);
1621
- border: 1px solid #86efac;
1622
1568
  border-radius: 0.5rem;
1623
1569
  }
1624
1570
 
1625
- html.dark .event-streaming-complete { background: linear-gradient(135deg, #0a1f0f, #0f2b1a); border-color: #166534; }
1571
+ html.dark .event-streaming-complete { background: linear-gradient(135deg, #0a1f0f, #0f2b1a); }
1626
1572
  </style>
1627
1573
  </head>
1628
1574
  <body>
@@ -708,8 +708,8 @@ class AgentGUIClient {
708
708
  html += `<div class="streaming-block-tool-use"><div class="tool-use-header"><span class="tool-use-icon">&#9881;</span> <span class="tool-use-name">${this.escapeHtml(block.name || 'unknown')}</span></div>${inputHtml}</div>`;
709
709
  } else if (block.type === 'tool_result') {
710
710
  const content = typeof block.content === 'string' ? block.content : JSON.stringify(block.content);
711
- const displayContent = content.length > 2000 ? content.substring(0, 2000) + '\n... (truncated)' : content;
712
- html += `<div class="streaming-block-tool-result${block.is_error ? ' tool-result-error' : ''}"><div class="tool-result-header">${block.is_error ? '<span class="tool-result-error-badge">Error</span>' : '<span class="tool-result-ok-badge">Result</span>'}</div><pre class="tool-result-pre">${this.escapeHtml(displayContent)}</pre></div>`;
711
+ const smartHtml = typeof StreamingRenderer !== 'undefined' ? StreamingRenderer.renderSmartContentHTML(content, this.escapeHtml.bind(this)) : `<pre class="tool-result-pre">${this.escapeHtml(content.length > 2000 ? content.substring(0, 2000) + '\n... (truncated)' : content)}</pre>`;
712
+ html += `<div class="streaming-block-tool-result${block.is_error ? ' tool-result-error' : ''}"><div class="tool-result-header">${block.is_error ? '<span class="tool-result-error-badge">Error</span>' : '<span class="tool-result-ok-badge">Result</span>'}</div>${smartHtml}</div>`;
713
713
  }
714
714
  });
715
715
  }
@@ -1234,8 +1234,8 @@ class AgentGUIClient {
1234
1234
  contentHtml += `<div class="streaming-block-tool-use"><div class="tool-use-header"><span class="tool-use-icon">&#9881;</span> <span class="tool-use-name">${this.escapeHtml(block.name || 'unknown')}</span></div>${inputHtml}</div>`;
1235
1235
  } else if (block.type === 'tool_result') {
1236
1236
  const content = typeof block.content === 'string' ? block.content : JSON.stringify(block.content);
1237
- const displayContent = content.length > 2000 ? content.substring(0, 2000) + '\n... (truncated)' : content;
1238
- contentHtml += `<div class="streaming-block-tool-result${block.is_error ? ' tool-result-error' : ''}"><div class="tool-result-header">${block.is_error ? '<span class="tool-result-error-badge">Error</span>' : '<span class="tool-result-ok-badge">Result</span>'}</div><pre class="tool-result-pre">${this.escapeHtml(displayContent)}</pre></div>`;
1237
+ const smartHtml = typeof StreamingRenderer !== 'undefined' ? StreamingRenderer.renderSmartContentHTML(content, this.escapeHtml.bind(this)) : `<pre class="tool-result-pre">${this.escapeHtml(content.length > 2000 ? content.substring(0, 2000) + '\n... (truncated)' : content)}</pre>`;
1238
+ contentHtml += `<div class="streaming-block-tool-result${block.is_error ? ' tool-result-error' : ''}"><div class="tool-result-header">${block.is_error ? '<span class="tool-result-error-badge">Error</span>' : '<span class="tool-result-ok-badge">Result</span>'}</div>${smartHtml}</div>`;
1239
1239
  }
1240
1240
  });
1241
1241
  }
@@ -620,6 +620,150 @@ class StreamingRenderer {
620
620
  return div;
621
621
  }
622
622
 
623
+ /**
624
+ * Render content smartly - detect JSON, images, file lists, markdown
625
+ */
626
+ renderSmartContent(contentStr) {
627
+ const trimmed = contentStr.trim();
628
+
629
+ if (trimmed.startsWith('data:image/')) {
630
+ return `<div style="padding:0.5rem"><img src="${this.escapeHtml(trimmed)}" style="max-width:100%;max-height:24rem;border-radius:0.375rem" loading="lazy"></div>`;
631
+ }
632
+
633
+ if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {
634
+ try {
635
+ const parsed = JSON.parse(trimmed);
636
+ return `<div style="padding:0.625rem 1rem">${this.renderParametersBeautiful(parsed)}</div>`;
637
+ } catch (e) {}
638
+ }
639
+
640
+ const lines = trimmed.split('\n');
641
+ const allFilePaths = lines.length > 1 && lines.every(l => l.trim() === '' || l.trim().startsWith('/'));
642
+ if (allFilePaths && lines.filter(l => l.trim()).length > 0) {
643
+ const fileHtml = lines.filter(l => l.trim()).map(l => {
644
+ const p = l.trim();
645
+ const parts = p.split('/');
646
+ const name = parts.pop();
647
+ const dir = parts.join('/');
648
+ return `<div style="display:flex;align-items:center;gap:0.375rem;padding:0.1875rem 0;font-family:'Monaco','Menlo','Ubuntu Mono',monospace;font-size:0.75rem"><span style="opacity:0.5">&#128196;</span><span style="color:var(--color-text-secondary)">${this.escapeHtml(dir)}/</span><span style="font-weight:600">${this.escapeHtml(name)}</span></div>`;
649
+ }).join('');
650
+ return `<div style="padding:0.625rem 1rem">${fileHtml}</div>`;
651
+ }
652
+
653
+ if (trimmed.length > 1500) {
654
+ return `<div class="result-body collapsed" style="padding:0.625rem 1rem;font-family:'Monaco','Menlo','Ubuntu Mono',monospace;font-size:0.75rem;white-space:pre-wrap;word-break:break-all;line-height:1.5">${this.escapeHtml(trimmed)}</div><button class="expand-btn" onclick="this.previousElementSibling.classList.toggle('collapsed');this.textContent=this.textContent==='Show more'?'Show less':'Show more'">Show more</button>`;
655
+ }
656
+
657
+ return `<div style="padding:0.625rem 1rem;font-family:'Monaco','Menlo','Ubuntu Mono',monospace;font-size:0.75rem;white-space:pre-wrap;word-break:break-all;line-height:1.5">${this.escapeHtml(trimmed)}</div>`;
658
+ }
659
+
660
+ /**
661
+ * Render parsed JSON/object as formatted key-value display
662
+ */
663
+ renderParametersBeautiful(data, depth = 0) {
664
+ if (data === null || data === undefined) return `<span style="color:var(--color-text-secondary);font-style:italic">null</span>`;
665
+ if (typeof data === 'boolean') return `<span style="color:#d97706;font-weight:600">${data}</span>`;
666
+ if (typeof data === 'number') return `<span style="color:#7c3aed;font-weight:600">${data}</span>`;
667
+
668
+ if (typeof data === 'string') {
669
+ if (data.length > 500) {
670
+ const lines = data.split('\n').length;
671
+ return `<div style="font-family:'Monaco','Menlo','Ubuntu Mono',monospace;font-size:0.75rem;white-space:pre-wrap;word-break:break-all;max-height:200px;overflow-y:auto;background:var(--color-bg-code);color:#d1d5db;padding:0.5rem;border-radius:0.375rem;line-height:1.5">${this.escapeHtml(data.substring(0, 1000))}${data.length > 1000 ? '\n... (' + (data.length - 1000) + ' more chars, ' + lines + ' lines)' : ''}</div>`;
672
+ }
673
+ if (data.startsWith('/') && !data.includes(' ') && data.includes('.')) return this.renderFilePath(data);
674
+ return `<span style="color:var(--color-text-primary)">${this.escapeHtml(data)}</span>`;
675
+ }
676
+
677
+ if (Array.isArray(data)) {
678
+ if (data.length === 0) return `<span style="color:var(--color-text-secondary)">[]</span>`;
679
+ if (data.every(i => typeof i === 'string') && data.length <= 20) {
680
+ return `<div style="display:flex;flex-wrap:wrap;gap:0.25rem">${data.map(i => `<span style="display:inline-block;padding:0.125rem 0.5rem;background:var(--color-bg-secondary);border-radius:1rem;font-size:0.7rem;font-family:'Monaco','Menlo','Ubuntu Mono',monospace">${this.escapeHtml(i)}</span>`).join('')}</div>`;
681
+ }
682
+ return `<div style="display:flex;flex-direction:column;gap:0.25rem;${depth > 0 ? 'padding-left:1rem' : ''}">${data.map((item, i) => `<div style="display:flex;gap:0.5rem;align-items:flex-start"><span style="color:var(--color-text-secondary);font-size:0.7rem;min-width:1.5rem;text-align:right;flex-shrink:0">${i}</span><div style="flex:1;min-width:0">${this.renderParametersBeautiful(item, depth + 1)}</div></div>`).join('')}</div>`;
683
+ }
684
+
685
+ if (typeof data === 'object') {
686
+ const entries = Object.entries(data);
687
+ if (entries.length === 0) return `<span style="color:var(--color-text-secondary)">{}</span>`;
688
+ return `<div style="display:flex;flex-direction:column;gap:0.375rem;${depth > 0 ? 'padding-left:1rem' : ''}">${entries.map(([k, v]) => `<div style="display:flex;gap:0.5rem;align-items:flex-start"><span style="font-weight:600;font-size:0.75rem;color:#0891b2;flex-shrink:0;min-width:fit-content;font-family:'Monaco','Menlo','Ubuntu Mono',monospace">${this.escapeHtml(k)}</span><div style="flex:1;min-width:0;font-size:0.8rem">${this.renderParametersBeautiful(v, depth + 1)}</div></div>`).join('')}</div>`;
689
+ }
690
+
691
+ return `<span>${this.escapeHtml(String(data))}</span>`;
692
+ }
693
+
694
+ /**
695
+ * Static HTML version of smart content rendering for use in string templates
696
+ */
697
+ static renderSmartContentHTML(contentStr, escapeHtml) {
698
+ const trimmed = contentStr.trim();
699
+ const esc = escapeHtml || (t => t.replace(/[&<>"']/g, c => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c])));
700
+
701
+ if (trimmed.startsWith('data:image/')) {
702
+ return `<div style="padding:0.5rem"><img src="${esc(trimmed)}" style="max-width:100%;max-height:24rem;border-radius:0.375rem" loading="lazy"></div>`;
703
+ }
704
+
705
+ if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {
706
+ try {
707
+ const parsed = JSON.parse(trimmed);
708
+ return `<div style="padding:0.625rem 1rem">${StreamingRenderer.renderParamsHTML(parsed, 0, esc)}</div>`;
709
+ } catch (e) {}
710
+ }
711
+
712
+ const lines = trimmed.split('\n');
713
+ const allFilePaths = lines.length > 1 && lines.every(l => l.trim() === '' || l.trim().startsWith('/'));
714
+ if (allFilePaths && lines.filter(l => l.trim()).length > 0) {
715
+ const fileHtml = lines.filter(l => l.trim()).map(l => {
716
+ const p = l.trim();
717
+ const parts = p.split('/');
718
+ const name = parts.pop();
719
+ const dir = parts.join('/');
720
+ return `<div style="display:flex;align-items:center;gap:0.375rem;padding:0.1875rem 0;font-family:'Monaco','Menlo','Ubuntu Mono',monospace;font-size:0.75rem"><span style="opacity:0.5">&#128196;</span><span style="color:var(--color-text-secondary)">${esc(dir)}/</span><span style="font-weight:600">${esc(name)}</span></div>`;
721
+ }).join('');
722
+ return `<div style="padding:0.625rem 1rem">${fileHtml}</div>`;
723
+ }
724
+
725
+ const displayContent = trimmed.length > 2000 ? trimmed.substring(0, 2000) + '\n... (truncated)' : trimmed;
726
+ return `<pre class="tool-result-pre">${esc(displayContent)}</pre>`;
727
+ }
728
+
729
+ /**
730
+ * Static HTML version of parameter rendering
731
+ */
732
+ static renderParamsHTML(data, depth, esc) {
733
+ if (data === null || data === undefined) return `<span style="color:var(--color-text-secondary);font-style:italic">null</span>`;
734
+ if (typeof data === 'boolean') return `<span style="color:#d97706;font-weight:600">${data}</span>`;
735
+ if (typeof data === 'number') return `<span style="color:#7c3aed;font-weight:600">${data}</span>`;
736
+
737
+ if (typeof data === 'string') {
738
+ if (data.length > 500) {
739
+ return `<div style="font-family:'Monaco','Menlo','Ubuntu Mono',monospace;font-size:0.75rem;white-space:pre-wrap;word-break:break-all;max-height:200px;overflow-y:auto;background:var(--color-bg-code);color:#d1d5db;padding:0.5rem;border-radius:0.375rem;line-height:1.5">${esc(data.substring(0, 1000))}${data.length > 1000 ? '\n... (' + (data.length - 1000) + ' more chars)' : ''}</div>`;
740
+ }
741
+ if (data.startsWith('/') && !data.includes(' ') && data.includes('.')) {
742
+ const parts = data.split('/');
743
+ const name = parts.pop();
744
+ const dir = parts.join('/');
745
+ return `<div style="display:flex;align-items:center;gap:0.375rem;font-family:'Monaco','Menlo','Ubuntu Mono',monospace;font-size:0.8rem"><span style="opacity:0.5">&#128196;</span><span style="color:var(--color-text-secondary)">${esc(dir)}/</span><span style="font-weight:600">${esc(name)}</span></div>`;
746
+ }
747
+ return `<span style="color:var(--color-text-primary)">${esc(data)}</span>`;
748
+ }
749
+
750
+ if (Array.isArray(data)) {
751
+ if (data.length === 0) return `<span style="color:var(--color-text-secondary)">[]</span>`;
752
+ if (data.every(i => typeof i === 'string') && data.length <= 20) {
753
+ return `<div style="display:flex;flex-wrap:wrap;gap:0.25rem">${data.map(i => `<span style="display:inline-block;padding:0.125rem 0.5rem;background:var(--color-bg-secondary);border-radius:1rem;font-size:0.7rem;font-family:'Monaco','Menlo','Ubuntu Mono',monospace">${esc(i)}</span>`).join('')}</div>`;
754
+ }
755
+ return `<div style="display:flex;flex-direction:column;gap:0.25rem;${depth > 0 ? 'padding-left:1rem' : ''}">${data.map((item, i) => `<div style="display:flex;gap:0.5rem;align-items:flex-start"><span style="color:var(--color-text-secondary);font-size:0.7rem;min-width:1.5rem;text-align:right;flex-shrink:0">${i}</span><div style="flex:1;min-width:0">${StreamingRenderer.renderParamsHTML(item, depth + 1, esc)}</div></div>`).join('')}</div>`;
756
+ }
757
+
758
+ if (typeof data === 'object') {
759
+ const entries = Object.entries(data);
760
+ if (entries.length === 0) return `<span style="color:var(--color-text-secondary)">{}</span>`;
761
+ return `<div style="display:flex;flex-direction:column;gap:0.375rem;${depth > 0 ? 'padding-left:1rem' : ''}">${entries.map(([k, v]) => `<div style="display:flex;gap:0.5rem;align-items:flex-start"><span style="font-weight:600;font-size:0.75rem;color:#0891b2;flex-shrink:0;min-width:fit-content;font-family:'Monaco','Menlo','Ubuntu Mono',monospace">${esc(k)}</span><div style="flex:1;min-width:0;font-size:0.8rem">${StreamingRenderer.renderParamsHTML(v, depth + 1, esc)}</div></div>`).join('')}</div>`;
762
+ }
763
+
764
+ return `<span>${esc(String(data))}</span>`;
765
+ }
766
+
623
767
  /**
624
768
  * Render tool result block with smart content display
625
769
  */
@@ -631,21 +775,17 @@ class StreamingRenderer {
631
775
  const content = block.content || '';
632
776
  const contentStr = typeof content === 'string' ? content : JSON.stringify(content, null, 2);
633
777
  const toolUseId = block.tool_use_id || '';
634
- const isLong = contentStr.length > 1500;
635
778
 
636
779
  const iconSvg = isError
637
780
  ? '<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clip-rule="evenodd"/></svg>'
638
781
  : '<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>';
639
782
 
640
- const displayContent = isLong ? contentStr.substring(0, 1500) : contentStr;
641
-
642
783
  div.innerHTML = `
643
784
  <div class="result-header">
644
785
  <span class="status-label">${iconSvg} ${isError ? 'Error' : 'Success'}</span>
645
786
  ${toolUseId ? `<span class="result-id">${this.escapeHtml(toolUseId)}</span>` : ''}
646
787
  </div>
647
- <div class="result-body${isLong ? ' collapsed' : ''}">${this.escapeHtml(displayContent)}</div>
648
- ${isLong ? '<button class="expand-btn" onclick="this.previousElementSibling.classList.toggle(\'collapsed\');this.textContent=this.textContent===\'Show more\'?\'Show less\':\'Show more\'">Show more</button>' : ''}
788
+ ${this.renderSmartContent(contentStr)}
649
789
  `;
650
790
 
651
791
  return div;
package/static/styles.css CHANGED
@@ -86,7 +86,6 @@ html, body {
86
86
  .sidebar {
87
87
  width: 280px;
88
88
  background: var(--bg-primary);
89
- border-right: 1px solid var(--border-color);
90
89
  display: flex;
91
90
  flex-direction: column;
92
91
  flex-shrink: 0;
@@ -96,7 +95,6 @@ html, body {
96
95
 
97
96
  .sidebar-header {
98
97
  padding: 1.5rem 1.25rem;
99
- border-bottom: 1px solid var(--border-color);
100
98
  display: flex;
101
99
  align-items: center;
102
100
  justify-content: space-between;
@@ -133,7 +131,6 @@ html, body {
133
131
  margin: 1rem 1.25rem;
134
132
  padding: 0.625rem 1rem;
135
133
  background: var(--bg-tertiary);
136
- border: 1px solid var(--border-color);
137
134
  border-radius: 0.5rem;
138
135
  font-size: 0.875rem;
139
136
  font-weight: 500;
@@ -175,7 +172,6 @@ html, body {
175
172
  .chat-item {
176
173
  padding: 0.75rem;
177
174
  background: var(--bg-secondary);
178
- border: 1px solid transparent;
179
175
  border-radius: 0.5rem;
180
176
  cursor: pointer;
181
177
  transition: var(--transition-smooth);
@@ -220,13 +216,11 @@ html, body {
220
216
 
221
217
  .chat-item:hover {
222
218
  background: var(--bg-tertiary);
223
- border-color: var(--border-color);
224
219
  }
225
220
 
226
221
  .chat-item.active {
227
222
  background: var(--color-primary-lighter);
228
223
  color: var(--color-primary);
229
- border-color: var(--color-primary);
230
224
  font-weight: 500;
231
225
  }
232
226
 
@@ -242,7 +236,6 @@ html, body {
242
236
 
243
237
  .sidebar-footer {
244
238
  padding: 0 1.25rem 1.5rem;
245
- border-top: 1px solid var(--border-color);
246
239
  margin-top: 1rem;
247
240
  }
248
241
 
@@ -250,7 +243,6 @@ html, body {
250
243
  width: 100%;
251
244
  padding: 0.625rem 1rem;
252
245
  background: var(--bg-tertiary);
253
- border: 1px solid var(--border-color);
254
246
  border-radius: 0.5rem;
255
247
  font-size: 0.875rem;
256
248
  font-weight: 500;
@@ -301,7 +293,6 @@ html, body {
301
293
  gap: 0.75rem;
302
294
  padding: 1rem;
303
295
  background: var(--bg-secondary);
304
- border: 1px solid var(--border-color);
305
296
  border-radius: 0.5rem;
306
297
  font-size: 0.875rem;
307
298
  color: var(--text-secondary);
@@ -361,7 +352,6 @@ html, body {
361
352
  .agent-card {
362
353
  padding: 1rem 1.5rem;
363
354
  background: var(--bg-secondary);
364
- border: 1px solid var(--border-color);
365
355
  border-radius: 0.5rem;
366
356
  cursor: pointer;
367
357
  transition: var(--transition-smooth);
@@ -378,14 +368,12 @@ html, body {
378
368
 
379
369
  .agent-card:hover {
380
370
  background: var(--bg-tertiary);
381
- border-color: var(--color-primary);
382
371
  color: var(--color-primary);
383
372
  }
384
373
 
385
374
  .agent-card.active {
386
375
  background: var(--color-primary-lighter);
387
376
  color: var(--color-primary);
388
- border-color: var(--color-primary);
389
377
  font-weight: 500;
390
378
  }
391
379
 
@@ -405,7 +393,6 @@ html, body {
405
393
  .chat-input-section {
406
394
  padding: 1.5rem 2rem;
407
395
  background: var(--bg-primary);
408
- border-top: 1px solid var(--border-color);
409
396
  flex-shrink: 0;
410
397
  min-height: 60px; /* Ensure input area never becomes too small */
411
398
  }
@@ -419,7 +406,6 @@ html, body {
419
406
  .chat-input {
420
407
  flex: 1;
421
408
  padding: 0.75rem 1rem;
422
- border: 1px solid var(--border-color);
423
409
  border-radius: 0.75rem;
424
410
  font-family: inherit;
425
411
  font-size: 1rem;
@@ -447,7 +433,6 @@ html, body {
447
433
  .action-btn {
448
434
  padding: 0.625rem;
449
435
  background: var(--bg-secondary);
450
- border: 1px solid var(--border-color);
451
436
  border-radius: 0.5rem;
452
437
  cursor: pointer;
453
438
  color: var(--text-tertiary);
@@ -461,14 +446,12 @@ html, body {
461
446
 
462
447
  .action-btn:hover {
463
448
  background: var(--bg-tertiary);
464
- border-color: var(--color-primary);
465
449
  color: var(--color-primary);
466
450
  }
467
451
 
468
452
  .action-btn.send-btn {
469
453
  background: var(--color-primary);
470
454
  color: white;
471
- border-color: var(--color-primary);
472
455
  }
473
456
 
474
457
  .action-btn.send-btn:hover {
@@ -478,7 +461,6 @@ html, body {
478
461
  .action-btn.send-btn:disabled {
479
462
  background: var(--bg-tertiary);
480
463
  color: var(--text-tertiary);
481
- border-color: var(--border-color);
482
464
  cursor: not-allowed;
483
465
  }
484
466
 
@@ -486,7 +468,6 @@ html, body {
486
468
  .chat-footer {
487
469
  padding: 1rem 2rem;
488
470
  background: var(--bg-secondary);
489
- border-top: 1px solid var(--border-color);
490
471
  flex-shrink: 0;
491
472
  font-size: 0.8rem;
492
473
  }
@@ -535,7 +516,6 @@ html, body {
535
516
 
536
517
  .settings-header {
537
518
  padding: 1.5rem;
538
- border-bottom: 1px solid var(--border-color);
539
519
  display: flex;
540
520
  justify-content: space-between;
541
521
  align-items: center;
@@ -568,7 +548,6 @@ html, body {
568
548
 
569
549
  .setting-group {
570
550
  padding: 1.5rem;
571
- border-bottom: 1px solid var(--border-color);
572
551
  }
573
552
 
574
553
  .setting-group:last-child {
@@ -595,7 +574,6 @@ html, body {
595
574
  .gm-input {
596
575
  width: 100%;
597
576
  padding: 0.75rem;
598
- border: 1px solid var(--border-color);
599
577
  border-radius: 0.5rem;
600
578
  font-size: 0.875rem;
601
579
  font-family: inherit;
@@ -638,7 +616,6 @@ html, body {
638
616
  .message.assistant .message-bubble {
639
617
  background: var(--bg-secondary);
640
618
  color: var(--text-primary);
641
- border: 1px solid var(--border-color);
642
619
  }
643
620
 
644
621
  .message.system .message-bubble {
@@ -660,7 +637,6 @@ html, body {
660
637
  .stream-text-block {
661
638
  padding: 0.75rem 1rem;
662
639
  background: var(--bg-secondary);
663
- border: 1px solid var(--border-color);
664
640
  border-radius: 0.5rem;
665
641
  color: var(--text-primary);
666
642
  word-wrap: break-word;
@@ -680,14 +656,12 @@ html, body {
680
656
  .stream-error {
681
657
  padding: 0.5rem 0.75rem;
682
658
  background: rgba(239, 68, 68, 0.1);
683
- border: 1px solid var(--color-danger);
684
659
  border-radius: 0.5rem;
685
660
  color: var(--color-danger);
686
661
  font-size: 0.875rem;
687
662
  }
688
663
 
689
664
  .thought-block {
690
- border: 1px solid var(--border-color);
691
665
  border-radius: 0.5rem;
692
666
  overflow: hidden;
693
667
  }
@@ -716,7 +690,6 @@ html, body {
716
690
  }
717
691
 
718
692
  .tool-block {
719
- border: 1px solid var(--border-color);
720
693
  border-radius: 0.5rem;
721
694
  overflow: hidden;
722
695
  font-size: 0.875rem;
@@ -793,7 +766,6 @@ html, body {
793
766
  }
794
767
 
795
768
  .plan-block {
796
- border: 1px solid var(--border-color);
797
769
  border-radius: 0.5rem;
798
770
  overflow: hidden;
799
771
  }
@@ -813,7 +785,6 @@ html, body {
813
785
  }
814
786
 
815
787
  .html-block {
816
- border: 1px solid var(--border-color);
817
788
  border-radius: 0.5rem;
818
789
  overflow: visible;
819
790
  background: var(--bg-secondary);
@@ -826,7 +797,6 @@ html, body {
826
797
  font-weight: 500;
827
798
  font-size: 0.75rem;
828
799
  color: white;
829
- border-bottom: 1px solid var(--border-color);
830
800
  text-transform: uppercase;
831
801
  letter-spacing: 0.5px;
832
802
  }
@@ -837,7 +807,6 @@ html, body {
837
807
  }
838
808
 
839
809
  .code-block {
840
- border: 1px solid var(--border-color);
841
810
  border-radius: 0.5rem;
842
811
  overflow-x: auto;
843
812
  background: var(--bg-tertiary);
@@ -860,7 +829,6 @@ html, body {
860
829
 
861
830
  .image-block {
862
831
  flex: 0 1 100%;
863
- border: 1px solid var(--border-color);
864
832
  border-radius: 0.5rem;
865
833
  overflow: hidden;
866
834
  background: var(--bg-secondary);
@@ -873,7 +841,6 @@ html, body {
873
841
  font-weight: 500;
874
842
  font-size: 0.875rem;
875
843
  color: var(--text-primary);
876
- border-bottom: 1px solid var(--border-color);
877
844
  }
878
845
 
879
846
  .image-content {
@@ -891,7 +858,6 @@ html, body {
891
858
  padding: 0.5rem 1rem;
892
859
  font-size: 0.875rem;
893
860
  color: var(--text-secondary);
894
- border-bottom: 1px solid var(--border-color);
895
861
  background: var(--bg-secondary);
896
862
  transition: var(--transition-smooth);
897
863
  }
@@ -996,7 +962,6 @@ html, body {
996
962
 
997
963
  .gm-modal-header {
998
964
  padding: 1.5rem;
999
- border-bottom: 1px solid var(--border-color);
1000
965
  display: flex;
1001
966
  justify-content: space-between;
1002
967
  align-items: center;
@@ -1018,7 +983,6 @@ html, body {
1018
983
 
1019
984
  .gm-modal-footer {
1020
985
  padding: 1rem 1.5rem;
1021
- border-top: 1px solid var(--border-color);
1022
986
  display: flex;
1023
987
  gap: 0.75rem;
1024
988
  justify-content: flex-end;
@@ -1030,7 +994,6 @@ html, body {
1030
994
  gap: 1rem;
1031
995
  padding: 1rem 1.25rem;
1032
996
  background: var(--bg-secondary);
1033
- border: 1px solid var(--border-color);
1034
997
  border-radius: 0.5rem;
1035
998
  cursor: pointer;
1036
999
  transition: var(--transition-smooth);
@@ -1040,7 +1003,6 @@ html, body {
1040
1003
 
1041
1004
  .chat-option-btn:hover {
1042
1005
  background: var(--bg-tertiary);
1043
- border-color: var(--color-primary);
1044
1006
  }
1045
1007
 
1046
1008
  .chat-option-btn:active {
@@ -1112,7 +1074,6 @@ html, body {
1112
1074
  .gm-btn-secondary {
1113
1075
  background: var(--bg-tertiary);
1114
1076
  color: var(--text-primary);
1115
- border: 1px solid var(--border-color);
1116
1077
  }
1117
1078
 
1118
1079
  .gm-btn-secondary:hover {
@@ -1502,7 +1463,6 @@ p code {
1502
1463
  /* Metadata display */
1503
1464
  .response-metadata {
1504
1465
  background: #f9f9f9;
1505
- border: 1px solid #e0e0e0;
1506
1466
  border-radius: 8px;
1507
1467
  padding: 1rem;
1508
1468
  margin: 1rem 0 0 0;
@@ -1551,7 +1511,6 @@ p code {
1551
1511
 
1552
1512
  .metadata-section.thinking {
1553
1513
  background: #fff9e6;
1554
- border: 1px solid #f5e6cc;
1555
1514
  }
1556
1515
 
1557
1516
  .metadata-section.thinking summary {
@@ -1707,7 +1666,6 @@ p code {
1707
1666
  padding: 0.75rem 1rem;
1708
1667
  border-radius: 0.5rem;
1709
1668
  background: var(--bg-secondary);
1710
- border: 1px solid var(--border-color);
1711
1669
  word-wrap: break-word;
1712
1670
  }
1713
1671
 
@@ -1765,18 +1723,15 @@ p code {
1765
1723
  .block-text a {
1766
1724
  color: var(--color-primary);
1767
1725
  text-decoration: none;
1768
- border-bottom: 1px solid transparent;
1769
1726
  transition: var(--transition-fast);
1770
1727
  }
1771
1728
 
1772
1729
  .block-text a:hover {
1773
- border-bottom-color: var(--color-primary);
1774
1730
  text-decoration: underline;
1775
1731
  }
1776
1732
 
1777
1733
  .block-tool-use {
1778
1734
  background: rgba(59, 130, 246, 0.05);
1779
- border: 1px solid rgba(59, 130, 246, 0.2);
1780
1735
  border-radius: 0.5rem;
1781
1736
  padding: 0.75rem;
1782
1737
  }
@@ -1816,7 +1771,6 @@ p code {
1816
1771
 
1817
1772
  .block-tool-result {
1818
1773
  background: rgba(16, 185, 129, 0.05);
1819
- border: 1px solid rgba(16, 185, 129, 0.2);
1820
1774
  border-radius: 0.5rem;
1821
1775
  padding: 0.75rem;
1822
1776
  }
@@ -1853,7 +1807,6 @@ p code {
1853
1807
 
1854
1808
  .block-file-op {
1855
1809
  background: rgba(245, 158, 11, 0.05);
1856
- border: 1px solid rgba(245, 158, 11, 0.2);
1857
1810
  border-radius: 0.5rem;
1858
1811
  padding: 0.75rem;
1859
1812
  }