Subject-Emu-5259 commited on
Commit
e317252
·
verified ·
1 Parent(s): 9b3726c

sync: update from-scratch/web_ui/templates/index.html

Browse files
from-scratch/web_ui/templates/index.html CHANGED
@@ -594,6 +594,16 @@ body.dark-mode .history-item.active {
594
  word-wrap: break-word;
595
  }
596
 
 
 
 
 
 
 
 
 
 
 
597
  .msg.user .msg-bubble {
598
  background: linear-gradient(135deg, #1e3a5f 0%, #1e40af 50%, #3b82f6 100%);
599
  color: #f0f9ff;
@@ -985,6 +995,167 @@ body:not(.dark-mode) .msg code {
985
  40% { transform: scale(1); opacity: 1; }
986
  }
987
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
988
  /* ===== EXECUTION OUTPUT STYLING ===== */
989
 
990
  .exec-output {
@@ -1300,55 +1471,59 @@ body.dark-mode .drop-zone {
1300
  .file-card {
1301
  display: flex;
1302
  align-items: center;
1303
- justify-content: space-between;
1304
- background: #fff;
1305
- border: 1px solid #dadce0;
1306
  border-radius: 16px;
1307
- padding: 16px;
1308
  cursor: pointer;
1309
  transition: all 0.2s ease;
1310
- box-shadow: 0 2px 8px rgba(0,0,0,0.04);
1311
  }
1312
 
1313
  .file-card:hover {
1314
  transform: translateY(-2px);
1315
- box-shadow: 0 8px 16px rgba(0,0,0,0.08);
1316
  border-color: #3b82f6;
 
1317
  }
1318
 
1319
- body.dark-mode .file-card {
1320
- background: #161b22;
1321
- border-color: #30363d;
1322
- box-shadow: 0 4px 12px rgba(0,0,0,0.2);
 
1323
  }
1324
 
1325
- body.dark-mode .file-card:hover {
1326
  border-color: #3b82f6;
1327
- background: #1c2128;
1328
  }
1329
 
1330
- .file-info {
1331
- display: flex;
1332
- align-items: center;
1333
- gap: 14px;
1334
- flex: 1;
1335
  overflow: hidden;
1336
- }
1337
-
1338
- .file-icon {
1339
- width: 48px;
1340
- height: 48px;
1341
  background: linear-gradient(135deg, rgba(59,130,246,0.1), rgba(139,92,246,0.1));
1342
- border-radius: 12px;
1343
  display: flex;
1344
  align-items: center;
1345
  justify-content: center;
1346
  color: #3b82f6;
1347
- font-size: 24px;
1348
- flex-shrink: 0;
 
 
 
 
 
1349
  }
1350
 
1351
- .file-name-wrapper {
 
 
 
1352
  flex: 1;
1353
  overflow: hidden;
1354
  }
@@ -1356,15 +1531,22 @@ body.dark-mode .file-card:hover {
1356
  .file-name {
1357
  font-size: 15px;
1358
  font-weight: 500;
1359
- color: #202124;
1360
  white-space: nowrap;
1361
  overflow: hidden;
1362
  text-overflow: ellipsis;
1363
- margin-bottom: 4px;
1364
  }
1365
 
1366
  .file-meta {
1367
  font-size: 12px;
 
 
 
 
 
 
 
 
1368
  color: #5f6368;
1369
  }
1370
 
@@ -1382,7 +1564,7 @@ body.dark-mode .file-card:hover {
1382
  .file-action-btn {
1383
  border: none;
1384
  background: rgba(139, 148, 158, 0.1);
1385
- color: #5f6368;
1386
  cursor: pointer;
1387
  padding: 8px;
1388
  border-radius: 8px;
@@ -1392,22 +1574,29 @@ body.dark-mode .file-card:hover {
1392
  justify-content: center;
1393
  }
1394
 
1395
- body.dark-mode .file-action-btn {
1396
- color: #8b949e;
1397
  }
1398
 
1399
  .file-action-btn:hover {
 
 
 
 
 
 
 
 
 
 
1400
  background: #e8f0fe;
1401
  color: #1a73e8;
1402
  }
1403
 
1404
- .file-action-btn.delete:hover {
1405
  background: #fce8e6;
1406
  color: #ea4335;
1407
  }
1408
-
1409
- body.dark-mode .file-action-btn:hover {
1410
- background: rgba(59, 130, 246, 0.2);
1411
  color: #60a5fa;
1412
  }
1413
 
@@ -2867,6 +3056,7 @@ body.dark-mode .onboarding-close:hover {
2867
  <span id="userGreeting" class="product-name" style="margin-right: 12px;"></span>
2868
  <button id="logoutBtn" class="top-btn" onclick="logout()">Logout</button>
2869
  <button class="top-btn" onclick="toggleDarkMode()">🌙 Theme</button>
 
2870
  </div>
2871
  </div>
2872
 
@@ -2890,7 +3080,7 @@ body.dark-mode .onboarding-close:hover {
2890
  <span class="status-dot online" id="uplinkDot"></span>
2891
  <span class="status-label" id="uplinkLabel">Ready</span>
2892
  </div>
2893
- <p class="muted">Fine-tuned SmolLM2-360M running locally</p>
2894
  </div>
2895
  <div class="sidebar-footer">
2896
  <div class="sidebar-footer-links">
@@ -2946,10 +3136,13 @@ body.dark-mode .onboarding-close:hover {
2946
  <section class="files-section">
2947
  <div class="files-header">
2948
  <h2><span style="font-size:28px;">🗂️</span> NeuralDrive</h2>
2949
- <button class="upload-btn" id="uploadBtn">
2950
- <svg width="20" height="20" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"></path></svg>
2951
- Upload File
2952
- </button>
 
 
 
2953
  </div>
2954
 
2955
  <div class="neural-drive-toolbar">
@@ -3128,6 +3321,43 @@ body.dark-mode .onboarding-close:hover {
3128
  </div>
3129
  </div>
3130
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3131
  <div class="settings-card">
3132
  <h3>Architecture & Node Status</h3>
3133
  <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 12px;">
@@ -3163,7 +3393,8 @@ body.dark-mode .onboarding-close:hover {
3163
  <!-- Bottom input bar -->
3164
  <section class="chat-input-bar">
3165
  <button id="voiceBtn" class="voice-btn" title="Live Conversation">🎤</button>
3166
- <textarea id="chatInput" placeholder="Ask NeuralAI anything..." rows="1"></textarea>
 
3167
  <button id="sendBtn" style="background:linear-gradient(135deg,#ef4444,#dc2626);box-shadow:0 4px 14px rgba(239,68,68,0.3);">Send</button>
3168
  </section>
3169
 
@@ -3181,6 +3412,32 @@ body.dark-mode .onboarding-close:hover {
3181
  </div>
3182
  </div>
3183
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3184
  <!-- LIVE VOICE OVERLAY -->
3185
  <div id="liveVoiceOverlay" class="hidden">
3186
  <div class="live-orb" id="liveOrb"></div>
@@ -3189,6 +3446,6 @@ body.dark-mode .onboarding-close:hover {
3189
  <button class="close-live-btn" id="closeLiveBtn">End Conversation</button>
3190
  </div>
3191
 
3192
- <script src="/static/js/main_v2.js"></script>
3193
  </body>
3194
  </html>
 
594
  word-wrap: break-word;
595
  }
596
 
597
+ .gen-image {
598
+ display: block;
599
+ max-width: 100%;
600
+ width: auto;
601
+ height: auto;
602
+ border-radius: 12px;
603
+ margin: 8px 0;
604
+ box-shadow: 0 4px 16px rgba(0,0,0,0.35);
605
+ }
606
+
607
  .msg.user .msg-bubble {
608
  background: linear-gradient(135deg, #1e3a5f 0%, #1e40af 50%, #3b82f6 100%);
609
  color: #f0f9ff;
 
995
  40% { transform: scale(1); opacity: 1; }
996
  }
997
 
998
+ /* ===== TYPING LABEL ===== */
999
+ .typing-label {
1000
+ font-style: italic;
1001
+ }
1002
+
1003
+ /* ===== TOOL CARD ===== */
1004
+ .tool-card {
1005
+ display: inline-flex;
1006
+ align-items: center;
1007
+ gap: 8px;
1008
+ background: rgba(139, 92, 246, 0.08);
1009
+ border: 1px solid rgba(139, 92, 246, 0.3);
1010
+ border-radius: 10px;
1011
+ padding: 8px 12px;
1012
+ margin: 6px 0;
1013
+ font-size: 13px;
1014
+ color: #c4b5fd;
1015
+ }
1016
+ .tool-icon { font-size: 15px; }
1017
+ .tool-text { font-weight: 500; }
1018
+
1019
+ /* ===== UNREAD BADGE ===== */
1020
+ .unread-badge {
1021
+ background: #ef4444;
1022
+ color: #fff;
1023
+ font-size: 10px;
1024
+ font-weight: 700;
1025
+ padding: 2px 6px;
1026
+ border-radius: 10px;
1027
+ margin-left: 6px;
1028
+ letter-spacing: 0.5px;
1029
+ }
1030
+
1031
+ /* ===== CHAT INPUT FEATURE BUTTONS ===== */
1032
+ .feature-btn {
1033
+ background: rgba(255,255,255,0.06);
1034
+ border: 1px solid rgba(255,255,255,0.1);
1035
+ border-radius: 10px;
1036
+ color: #e4e4e7;
1037
+ font-size: 16px;
1038
+ cursor: pointer;
1039
+ padding: 0 10px;
1040
+ height: 40px;
1041
+ transition: background 0.15s ease;
1042
+ }
1043
+ .feature-btn:hover { background: rgba(255,255,255,0.12); }
1044
+
1045
+ .stop-btn {
1046
+ background: #ef4444;
1047
+ border: none;
1048
+ border-radius: 10px;
1049
+ color: #fff;
1050
+ font-size: 14px;
1051
+ font-weight: 700;
1052
+ cursor: pointer;
1053
+ padding: 0 14px;
1054
+ height: 40px;
1055
+ display: inline-flex;
1056
+ align-items: center;
1057
+ justify-content: center;
1058
+ }
1059
+ .stop-btn:hover { background: #dc2626; }
1060
+
1061
+ /* ===== MODAL (Code Editor) ===== */
1062
+ .modal-overlay {
1063
+ position: fixed;
1064
+ inset: 0;
1065
+ background: rgba(0,0,0,0.6);
1066
+ display: flex;
1067
+ align-items: center;
1068
+ justify-content: center;
1069
+ z-index: 200;
1070
+ }
1071
+ .modal-box {
1072
+ background: #0d1117;
1073
+ border: 1px solid #30363d;
1074
+ border-radius: 14px;
1075
+ width: min(640px, 92vw);
1076
+ padding: 18px;
1077
+ box-shadow: 0 20px 60px rgba(0,0,0,0.5);
1078
+ }
1079
+ .modal-header {
1080
+ display: flex;
1081
+ align-items: center;
1082
+ justify-content: space-between;
1083
+ font-size: 16px;
1084
+ font-weight: 600;
1085
+ color: #e4e4e7;
1086
+ margin-bottom: 12px;
1087
+ }
1088
+ #codeEditor {
1089
+ width: 100%;
1090
+ height: 200px;
1091
+ background: #09090b;
1092
+ border: 1px solid rgba(255,255,255,0.1);
1093
+ border-radius: 10px;
1094
+ padding: 12px;
1095
+ color: #e4e4e7;
1096
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1097
+ font-size: 13px;
1098
+ resize: vertical;
1099
+ outline: none;
1100
+ }
1101
+ .modal-actions {
1102
+ display: flex;
1103
+ gap: 8px;
1104
+ margin: 12px 0;
1105
+ }
1106
+ #codeOutput {
1107
+ max-height: 200px;
1108
+ overflow-y: auto;
1109
+ font-size: 12px;
1110
+ }
1111
+ .release-notes-body {
1112
+ max-height: 60vh;
1113
+ overflow-y: auto;
1114
+ display: flex;
1115
+ flex-direction: column;
1116
+ gap: 12px;
1117
+ padding-right: 4px;
1118
+ }
1119
+ .rn-item {
1120
+ border: 1px solid rgba(255,255,255,0.08);
1121
+ border-radius: 10px;
1122
+ padding: 12px 14px;
1123
+ background: rgba(255,255,255,0.02);
1124
+ }
1125
+ .rn-item-head {
1126
+ display: flex;
1127
+ align-items: center;
1128
+ gap: 8px;
1129
+ margin-bottom: 4px;
1130
+ }
1131
+ .rn-tag {
1132
+ font-size: 10px;
1133
+ font-weight: 700;
1134
+ text-transform: uppercase;
1135
+ letter-spacing: 0.05em;
1136
+ padding: 2px 8px;
1137
+ border-radius: 999px;
1138
+ }
1139
+ .rn-tag.New { background: #1a73e8; color: #fff; }
1140
+ .rn-tag.Fixed { background: #34a853; color: #fff; }
1141
+ .rn-tag.Roadmap { background: #a855f7; color: #fff; }
1142
+ .rn-tag.Vision { background: #f97316; color: #fff; }
1143
+ .rn-item-title {
1144
+ font-size: 14px;
1145
+ font-weight: 600;
1146
+ color: #e4e4e7;
1147
+ }
1148
+ .rn-item-body {
1149
+ font-size: 13px;
1150
+ color: #9aa0a6;
1151
+ line-height: 1.5;
1152
+ }
1153
+ .rn-meta {
1154
+ font-size: 12px;
1155
+ color: #6b7280;
1156
+ margin-bottom: 12px;
1157
+ }
1158
+
1159
  /* ===== EXECUTION OUTPUT STYLING ===== */
1160
 
1161
  .exec-output {
 
1471
  .file-card {
1472
  display: flex;
1473
  align-items: center;
1474
+ gap: 14px;
1475
+ background: #161b22;
1476
+ border: 1px solid #30363d;
1477
  border-radius: 16px;
1478
+ padding: 14px;
1479
  cursor: pointer;
1480
  transition: all 0.2s ease;
1481
+ box-shadow: 0 4px 12px rgba(0,0,0,0.2);
1482
  }
1483
 
1484
  .file-card:hover {
1485
  transform: translateY(-2px);
1486
+ box-shadow: 0 8px 16px rgba(0,0,0,0.3);
1487
  border-color: #3b82f6;
1488
+ background: #1c2128;
1489
  }
1490
 
1491
+ /* Light mode override (only when explicitly not dark) */
1492
+ body:not(.dark-mode) .file-card {
1493
+ background: #fff;
1494
+ border-color: #dadce0;
1495
+ box-shadow: 0 2px 8px rgba(0,0,0,0.04);
1496
  }
1497
 
1498
+ body:not(.dark-mode) .file-card:hover {
1499
  border-color: #3b82f6;
1500
+ background: #f8f9fa;
1501
  }
1502
 
1503
+ .file-preview {
1504
+ width: 56px;
1505
+ height: 56px;
1506
+ border-radius: 12px;
 
1507
  overflow: hidden;
1508
+ flex-shrink: 0;
 
 
 
 
1509
  background: linear-gradient(135deg, rgba(59,130,246,0.1), rgba(139,92,246,0.1));
 
1510
  display: flex;
1511
  align-items: center;
1512
  justify-content: center;
1513
  color: #3b82f6;
1514
+ font-size: 26px;
1515
+ }
1516
+
1517
+ .file-thumb {
1518
+ width: 100%;
1519
+ height: 100%;
1520
+ object-fit: cover;
1521
  }
1522
 
1523
+ .file-info {
1524
+ display: flex;
1525
+ flex-direction: column;
1526
+ gap: 4px;
1527
  flex: 1;
1528
  overflow: hidden;
1529
  }
 
1531
  .file-name {
1532
  font-size: 15px;
1533
  font-weight: 500;
1534
+ color: #e4e4e7;
1535
  white-space: nowrap;
1536
  overflow: hidden;
1537
  text-overflow: ellipsis;
 
1538
  }
1539
 
1540
  .file-meta {
1541
  font-size: 12px;
1542
+ color: #8b949e;
1543
+ }
1544
+
1545
+ body:not(.dark-mode) .file-name {
1546
+ color: #202124;
1547
+ }
1548
+
1549
+ body:not(.dark-mode) .file-meta {
1550
  color: #5f6368;
1551
  }
1552
 
 
1564
  .file-action-btn {
1565
  border: none;
1566
  background: rgba(139, 148, 158, 0.1);
1567
+ color: #8b949e;
1568
  cursor: pointer;
1569
  padding: 8px;
1570
  border-radius: 8px;
 
1574
  justify-content: center;
1575
  }
1576
 
1577
+ body:not(.dark-mode) .file-action-btn {
1578
+ color: #5f6368;
1579
  }
1580
 
1581
  .file-action-btn:hover {
1582
+ background: rgba(59, 130, 246, 0.2);
1583
+ color: #3b82f6;
1584
+ }
1585
+
1586
+ .file-action-btn.delete:hover {
1587
+ background: rgba(234, 67, 53, 0.15);
1588
+ color: #ea4335;
1589
+ }
1590
+
1591
+ body:not(.dark-mode) .file-action-btn:hover {
1592
  background: #e8f0fe;
1593
  color: #1a73e8;
1594
  }
1595
 
1596
+ body:not(.dark-mode) .file-action-btn.delete:hover {
1597
  background: #fce8e6;
1598
  color: #ea4335;
1599
  }
 
 
 
1600
  color: #60a5fa;
1601
  }
1602
 
 
3056
  <span id="userGreeting" class="product-name" style="margin-right: 12px;"></span>
3057
  <button id="logoutBtn" class="top-btn" onclick="logout()">Logout</button>
3058
  <button class="top-btn" onclick="toggleDarkMode()">🌙 Theme</button>
3059
+ <button class="top-btn" id="whatsNewBtn" onclick="openReleaseNotes()" title="What's New">✨ What's New</button>
3060
  </div>
3061
  </div>
3062
 
 
3080
  <span class="status-dot online" id="uplinkDot"></span>
3081
  <span class="status-label" id="uplinkLabel">Ready</span>
3082
  </div>
3083
+ <p class="muted">NeuralAI v16 · SmolLM2-360M + LoRA · DPO-aligned · 679 preference pairs</p>
3084
  </div>
3085
  <div class="sidebar-footer">
3086
  <div class="sidebar-footer-links">
 
3136
  <section class="files-section">
3137
  <div class="files-header">
3138
  <h2><span style="font-size:28px;">🗂️</span> NeuralDrive</h2>
3139
+ <div style="display:flex; gap:10px;">
3140
+ <button class="upload-btn" id="newFolderBtn" style="background:rgba(255,255,255,0.06); border:1px solid rgba(255,255,255,0.1);">📁 New Folder</button>
3141
+ <button class="upload-btn" id="uploadBtn">
3142
+ <svg width="20" height="20" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"></path></svg>
3143
+ Upload File
3144
+ </button>
3145
+ </div>
3146
  </div>
3147
 
3148
  <div class="neural-drive-toolbar">
 
3321
  </div>
3322
  </div>
3323
 
3324
+ <div class="settings-card">
3325
+ <h3 style="font-size:14px; color:#22d3ee; margin-bottom:12px;">🔌 Developer / API Access (BYO API)</h3>
3326
+ <p style="font-size:12px; color:#8a8a9a; margin-bottom:12px;">Generate a personal API key to use NeuralAI as an OpenAI-compatible backend on other hosts (e.g. ZO Computer's "Bring Your Own API"). Paste the Base URL + key into Zo's Bring Your Own Key (BYOK) “Base URL” field.</p>
3327
+
3328
+ <div id="apiKeyArea">
3329
+ <button class="auth-btn" style="background:#0891b2; margin-top:4px;" onclick="generateApiKey()">Generate API Key</button>
3330
+ <button class="auth-btn" style="background:#7f1d1d; margin-top:4px; display:none;" id="revokeApiKeyBtn" onclick="revokeApiKey()">Revoke Key</button>
3331
+ </div>
3332
+
3333
+ <div id="apiKeyResult" class="hidden" style="margin-top:16px; padding:14px; background:rgba(0,0,0,0.25); border-radius:10px; border:1px solid rgba(34,211,238,0.25);">
3334
+ <p style="font-size:12px; color:#22d3ee; margin:0 0 6px;">Your API Key (shown once — copy it now):</p>
3335
+ <div style="display:flex; gap:8px; margin-bottom:12px;">
3336
+ <input type="text" id="apiKeyField" readonly style="flex:1; padding:10px 12px; border-radius:8px; border:1px solid rgba(255,255,255,0.1); background:#09090b; color:#22d3ee; font-family:'JetBrains Mono',monospace; font-size:12px;" />
3337
+ <button onclick="copyApiKey()" style="padding:10px 14px; background:#22d3ee; border:none; border-radius:8px; color:#04141a; cursor:pointer; font-weight:600;">Copy</button>
3338
+ </div>
3339
+ <p style="font-size:12px; color:#8a8a9a; margin:0 0 6px;">Base URL — paste into Zo's BYOK “Base URL” field:</p>
3340
+ <div style="display:flex; gap:8px;">
3341
+ <input type="text" id="apiEndpointField" readonly value="https://neuralai-web-ui-deandrewharris.zocomputer.io/v1" style="flex:1; padding:10px 12px; border-radius:8px; border:1px solid rgba(255,255,255,0.1); background:#09090b; color:#e4e4e7; font-family:'JetBrains Mono',monospace; font-size:12px;" />
3342
+ <button onclick="copyApiEndpoint()" style="padding:10px 14px; background:#3b82f6; border:none; border-radius:8px; color:#fff; cursor:pointer; font-weight:600;">Copy</button>
3343
+ </div>
3344
+ <p style="font-size:11px; color:#6b7280; margin:10px 0 0;">Model name: <code style="color:#a78bfa;">neuralai</code> &nbsp;•&nbsp; Chat endpoint is this base URL + <code style="color:#a78bfa;">/chat/completions</code></p>
3345
+ </div>
3346
+ <div id="selfUpdateArea" style="margin-top:16px; padding-top:14px; border-top:1px solid rgba(255,255,255,0.06); display:none;">
3347
+ <p style="font-size:12px; color:#8a8a9a; margin:0 0 8px;">Founder tools — pull latest code from GitHub and restart the service in place.</p>
3348
+ <button class="auth-btn" style="background:#7c3aed; margin-top:4px;" onclick="selfUpdate()">⬇️ Update &amp; Restart</button>
3349
+ </div>
3350
+ </div>
3351
+
3352
+ <div class="settings-card">
3353
+ <h3 style="font-size:14px; color:#a78bfa; margin-bottom:12px;">Neural Uplink (Multi-Agent)</h3>
3354
+ <p style="font-size:12px; color:#8a8a9a; margin-bottom:12px;">Route your prompt through 4 parallel expert agents (DIALOG, DATA, OPS, WORLD) for richer answers.</p>
3355
+ <label style="display:flex; align-items:center; gap:10px; cursor:pointer;">
3356
+ <input type="checkbox" id="uplinkToggle" style="width:18px; height:18px; accent-color:#a78bfa;" />
3357
+ <span style="font-size:14px; color:#e4e4e7;">Enable Neural Uplink</span>
3358
+ </label>
3359
+ </div>
3360
+
3361
  <div class="settings-card">
3362
  <h3>Architecture & Node Status</h3>
3363
  <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 12px;">
 
3393
  <!-- Bottom input bar -->
3394
  <section class="chat-input-bar">
3395
  <button id="voiceBtn" class="voice-btn" title="Live Conversation">🎤</button>
3396
+ <textarea id="chatInput" placeholder="Ask NeuralAI anything... (try: 'generate an image of a sunset' or 'run this code: print(42)')" rows="1"></textarea>
3397
+ <button id="stopBtn" class="stop-btn" style="display:none;" title="Stop generating">■</button>
3398
  <button id="sendBtn" style="background:linear-gradient(135deg,#ef4444,#dc2626);box-shadow:0 4px 14px rgba(239,68,68,0.3);">Send</button>
3399
  </section>
3400
 
 
3412
  </div>
3413
  </div>
3414
 
3415
+ <!-- CODE EDITOR MODAL -->
3416
+ <div id="codeModal" class="modal-overlay hidden">
3417
+ <div class="modal-box">
3418
+ <div class="modal-header">
3419
+ <span>💻 Code Runner</span>
3420
+ <button id="closeCodeModal" class="term-close">×</button>
3421
+ </div>
3422
+ <textarea id="codeEditor" spellcheck="false" placeholder="print('Hello from NeuralAI')"></textarea>
3423
+ <div class="modal-actions">
3424
+ <button id="runCodeBtn" class="auth-btn" style="background:#10b981;">Run Code</button>
3425
+ </div>
3426
+ <pre id="codeOutput" class="exec-output" style="white-space:pre-wrap;"></pre>
3427
+ </div>
3428
+ </div>
3429
+
3430
+ <!-- RELEASE NOTES MODAL -->
3431
+ <div id="releaseNotesModal" class="modal-overlay hidden">
3432
+ <div class="modal-box" style="max-width:560px;">
3433
+ <div class="modal-header">
3434
+ <span id="releaseNotesTitle">✨ What's New</span>
3435
+ <button id="closeReleaseNotes" class="term-close">×</button>
3436
+ </div>
3437
+ <div id="releaseNotesBody" class="release-notes-body"></div>
3438
+ </div>
3439
+ </div>
3440
+
3441
  <!-- LIVE VOICE OVERLAY -->
3442
  <div id="liveVoiceOverlay" class="hidden">
3443
  <div class="live-orb" id="liveOrb"></div>
 
3446
  <button class="close-live-btn" id="closeLiveBtn">End Conversation</button>
3447
  </div>
3448
 
3449
+ <script src="/static/js/main_v2.js?v={{BUILD_VERSION}}"></script>
3450
  </body>
3451
  </html>