@mooncompany/uplink-chat 0.32.3 → 0.34.0

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 (138) hide show
  1. package/bin/uplink.js +1 -1
  2. package/middleware/error-handler.js +1 -1
  3. package/package.json +1 -1
  4. package/public/css/{app.bc7e7484.css → app.09572269.css} +14 -13
  5. package/public/css/markdown.css +28 -0
  6. package/public/css/mobile.540efab9.css +610 -0
  7. package/public/css/mobile.css +9 -13
  8. package/public/css/{split-view.4bc23474.css → split-view.4e286356.css} +145 -9
  9. package/public/css/themes.css +687 -19
  10. package/public/dist/bundle.9b202855.js +1 -0
  11. package/public/img/wordmark.svg +2 -16
  12. package/public/index.html +107 -7
  13. package/public/js/agents-data.js +1 -1
  14. package/public/js/agents-ui.js +1 -1
  15. package/public/js/agents.js +1 -1
  16. package/public/js/app.js +1 -1
  17. package/public/js/appearance-settings.js +1 -1
  18. package/public/js/artifacts.js +1 -1
  19. package/public/js/audio-pcm-processor.js +1 -1
  20. package/public/js/audio-queue.js +1 -1
  21. package/public/js/bootstrap.js +1 -1
  22. package/public/js/chat.js +1 -1
  23. package/public/js/commands.js +1 -1
  24. package/public/js/connection-api.js +1 -1
  25. package/public/js/connection.js +1 -1
  26. package/public/js/context-tracker.js +1 -1
  27. package/public/js/core.js +1 -1
  28. package/public/js/cron-panel.js +1 -1
  29. package/public/js/dashboard.js +1 -1
  30. package/public/js/developer.js +1 -1
  31. package/public/js/encryption.js +1 -1
  32. package/public/js/errors.js +1 -1
  33. package/public/js/event-bus.js +1 -1
  34. package/public/js/fetch-utils.js +1 -1
  35. package/public/js/file-handler.js +1 -1
  36. package/public/js/files.js +1 -1
  37. package/public/js/gateway-chat.js +1 -1
  38. package/public/js/logger.js +1 -1
  39. package/public/js/markdown.js +1 -1
  40. package/public/js/message-actions.js +1 -1
  41. package/public/js/message-renderer.js +1 -1
  42. package/public/js/missed-messages.js +1 -1
  43. package/public/js/mobile-debug.js +1 -1
  44. package/public/js/notifications.js +1 -1
  45. package/public/js/offline-queue.js +1 -1
  46. package/public/js/onboarding.js +1 -1
  47. package/public/js/panels.js +1 -1
  48. package/public/js/premium.js +1 -1
  49. package/public/js/primary-header.js +1 -1
  50. package/public/js/realtime-voice.js +1 -1
  51. package/public/js/satellite-sync.js +1 -1
  52. package/public/js/satellite-ui.js +1 -1
  53. package/public/js/satellites.js +1 -1
  54. package/public/js/settings.js +1 -1
  55. package/public/js/shortcuts.js +1 -1
  56. package/public/js/split-chat.js +1 -1
  57. package/public/js/split-resize.js +1 -1
  58. package/public/js/splitview.js +1 -1
  59. package/public/js/storage.js +1 -1
  60. package/public/js/streaming-handler.js +1 -1
  61. package/public/js/stt-settings.js +1 -1
  62. package/public/js/themes.js +1 -1
  63. package/public/js/timestamps.js +1 -1
  64. package/public/js/tts-settings.js +1 -1
  65. package/public/js/ui.js +1 -1
  66. package/public/js/update-notifier.js +1 -1
  67. package/public/js/utils/constants.js +1 -1
  68. package/public/js/utils/icons.js +1 -1
  69. package/public/js/utils/sanitize.js +1 -1
  70. package/public/js/utils/sse-parser.js +1 -1
  71. package/public/js/vad.js +1 -1
  72. package/public/js/vendor/dompurify.min.js +1 -1
  73. package/public/js/voice-settings-v2.js +1 -1
  74. package/public/js/voice.js +1 -1
  75. package/public/sw.js +1 -1
  76. package/server/channel.js +1 -1
  77. package/server/chat.js +1 -1
  78. package/server/config-store.js +1 -1
  79. package/server/config.js +1 -1
  80. package/server/context.js +1 -1
  81. package/server/gateway-api-proxy.js +1 -1
  82. package/server/gateway-commands.js +1 -1
  83. package/server/gateway-proxy.js +1 -1
  84. package/server/index.js +1 -1
  85. package/server/logger.js +1 -1
  86. package/server/message-store.js +1 -1
  87. package/server/middleware/auth.js +1 -1
  88. package/server/middleware.js +1 -1
  89. package/server/openclaw-discover.js +1 -1
  90. package/server/premium/index.js +1 -1
  91. package/server/premium/license.js +1 -1
  92. package/server/realtime/bridge.js +1 -1
  93. package/server/realtime/index.js +1 -1
  94. package/server/realtime/tts-stream.js +1 -1
  95. package/server/routes/agents.js +1 -1
  96. package/server/routes/artifacts.js +1 -1
  97. package/server/routes/chat.js +1 -1
  98. package/server/routes/config-settings.js +1 -1
  99. package/server/routes/config.js +1 -1
  100. package/server/routes/cron.js +1 -1
  101. package/server/routes/files.js +1 -1
  102. package/server/routes/index.js +1 -1
  103. package/server/routes/media.js +1 -1
  104. package/server/routes/missed-messages.js +1 -1
  105. package/server/routes/premium.js +1 -1
  106. package/server/routes/push.js +1 -1
  107. package/server/routes/satellite.js +1 -1
  108. package/server/routes/status.js +1 -1
  109. package/server/routes/stt.js +1 -1
  110. package/server/routes/voice.js +1 -1
  111. package/server/routes/webhooks.js +1 -1
  112. package/server/routes.js +1 -1
  113. package/server/runtime-config.js +1 -1
  114. package/server/share.js +1 -1
  115. package/server/stt/faster-whisper.js +1 -1
  116. package/server/stt/groq.js +1 -1
  117. package/server/stt/index.js +1 -1
  118. package/server/stt/openai.js +1 -1
  119. package/server/sync.js +1 -1
  120. package/server/tailscale-https.js +1 -1
  121. package/server/tts.js +1 -1
  122. package/server/update-checker.js +1 -1
  123. package/server/utils/filename.js +1 -1
  124. package/server/utils.js +1 -1
  125. package/server/watchdog.js +1 -1
  126. package/server/websocket/broadcast.js +1 -1
  127. package/server/websocket/connections.js +1 -1
  128. package/server/websocket/index.js +1 -1
  129. package/server/websocket/routing.js +1 -1
  130. package/server/websocket/sync.js +1 -1
  131. package/server.js +1 -1
  132. package/utils/detect-tool-usage.js +1 -1
  133. package/utils/errors.js +1 -1
  134. package/utils/html-escape.js +1 -1
  135. package/utils/id-sanitize.js +1 -1
  136. package/utils/response.js +1 -1
  137. package/utils/with-retry.js +1 -1
  138. package/public/dist/bundle.493af136.js +0 -1
@@ -114,7 +114,7 @@ body.split-view-active #splitViewBtn::after {
114
114
  .split-pane-secondary {
115
115
  display: none;
116
116
  flex-direction: column;
117
- background: var(--bg-app, var(--bg));
117
+ background: transparent;
118
118
  overflow: hidden;
119
119
  min-width: 0;
120
120
  border-left: 1px solid var(--border);
@@ -218,7 +218,9 @@ body.split-view-active #splitViewBtn::after {
218
218
  justify-content: space-between;
219
219
  padding: var(--space-3) var(--space-4);
220
220
  border-bottom: 1px solid var(--border);
221
- background: var(--bg-header, var(--bg));
221
+ background: color-mix(in srgb, var(--bg) 70%, transparent);
222
+ -webkit-backdrop-filter: blur(12px) saturate(1.2);
223
+ backdrop-filter: blur(12px) saturate(1.2);
222
224
  flex-shrink: 0;
223
225
  min-height: 48px;
224
226
  }
@@ -293,12 +295,48 @@ body.split-view-active #splitViewBtn::after {
293
295
  color: var(--accent);
294
296
  }
295
297
 
298
+
299
+ /* Resync button — matches close button dimensions */
300
+ .split-secondary-resync {
301
+ margin-left: var(--space-2);
302
+ display: flex;
303
+ align-items: center;
304
+ justify-content: center;
305
+ width: 28px;
306
+ height: 28px;
307
+ border: none;
308
+ background: transparent;
309
+ color: var(--text-muted);
310
+ cursor: pointer;
311
+ border-radius: var(--radius-md);
312
+ transition: all 0.2s ease;
313
+ flex-shrink: 0;
314
+ }
315
+
316
+ .split-secondary-resync:hover {
317
+ background: var(--accent-10);
318
+ color: var(--accent);
319
+ }
320
+
321
+ .split-secondary-resync:active {
322
+ transform: scale(0.95);
323
+ }
324
+
325
+ .split-secondary-resync.spinning svg {
326
+ animation: resync-spin 0.8s ease-in-out;
327
+ }
328
+
329
+ @keyframes resync-spin {
330
+ from { transform: rotate(0deg); }
331
+ to { transform: rotate(360deg); }
332
+ }
333
+
296
334
  .split-secondary-close {
297
335
  display: flex;
298
336
  align-items: center;
299
337
  justify-content: center;
300
- width: 32px;
301
- height: 32px;
338
+ width: 28px;
339
+ height: 28px;
302
340
  border: none;
303
341
  background: transparent;
304
342
  color: var(--text-muted);
@@ -411,7 +449,9 @@ body.split-view-active #splitViewBtn::after {
411
449
 
412
450
  .split-secondary-input {
413
451
  padding: var(--space-3) var(--space-4);
414
- background: transparent;
452
+ background: color-mix(in srgb, var(--bg) 70%, transparent);
453
+ -webkit-backdrop-filter: blur(12px) saturate(1.2);
454
+ backdrop-filter: blur(12px) saturate(1.2);
415
455
  border-top: 1px solid var(--border);
416
456
  flex-shrink: 0;
417
457
  }
@@ -522,10 +562,11 @@ body.split-view-active #splitViewBtn::after {
522
562
  padding: var(--space-3) var(--space-4);
523
563
  border-bottom: 1px solid var(--border);
524
564
  flex-shrink: 0;
565
+ min-height: 48px;
525
566
  }
526
567
 
527
568
  .split-chat-picker-title {
528
- font-size: var(--text-base);
569
+ font-size: var(--text-sm);
529
570
  font-weight: 600;
530
571
  color: var(--text);
531
572
  text-transform: uppercase;
@@ -533,8 +574,8 @@ body.split-view-active #splitViewBtn::after {
533
574
  }
534
575
 
535
576
  .split-chat-picker-close {
536
- width: 32px;
537
- height: 32px;
577
+ width: 28px;
578
+ height: 28px;
538
579
  display: flex;
539
580
  align-items: center;
540
581
  justify-content: center;
@@ -833,6 +874,26 @@ body.split-view-active #splitViewBtn::after {
833
874
  /* Artifacts panel header shows its own close button in split mode */
834
875
  body.split-artifacts-active .split-artifacts-pane .artifacts-panel-header {
835
876
  display: flex;
877
+ padding: var(--space-3) var(--space-4);
878
+ padding-top: var(--space-3);
879
+ min-height: 48px;
880
+ background: var(--bg);
881
+ }
882
+
883
+ /* Shrink panel buttons in split mode to match chat header buttons */
884
+ body.split-artifacts-active .split-artifacts-pane .panel-close,
885
+ body.split-artifacts-active .split-artifacts-pane .artifacts-panel-refresh {
886
+ min-width: 28px;
887
+ min-height: 28px;
888
+ width: 28px;
889
+ height: 28px;
890
+ font-size: var(--text-lg);
891
+ }
892
+
893
+ body.split-artifacts-active .split-artifacts-pane .artifacts-tab {
894
+ padding: var(--space-1) var(--space-3);
895
+ font-size: var(--text-xs);
896
+ min-height: unset;
836
897
  }
837
898
 
838
899
  /* Override the panel-content to fill the pane */
@@ -855,4 +916,79 @@ body.split-artifacts-active #artifactsBtn {
855
916
  position: relative;
856
917
  border: 1px solid transparent;
857
918
  animation: streamingRainbow 4s linear infinite;
858
- }
919
+ }
920
+
921
+ /* Session selector — border-top to match border-bottom on mobile */
922
+ @media (max-width: 1023px) {
923
+ .split-primary-header {
924
+ border-top: 1px solid var(--border);
925
+ }
926
+ }
927
+
928
+ /* ==========================================================================
929
+ Split Chat File Upload
930
+ ========================================================================== */
931
+
932
+ .split-image-preview {
933
+ display: none;
934
+ position: relative;
935
+ padding: var(--space-2) var(--space-4);
936
+ border-top: 1px solid var(--border);
937
+ background: var(--bg-secondary);
938
+ }
939
+
940
+ .split-image-preview.visible {
941
+ display: flex;
942
+ align-items: center;
943
+ gap: var(--space-3);
944
+ }
945
+
946
+ .split-image-preview img {
947
+ max-height: 120px;
948
+ max-width: 200px;
949
+ border-radius: var(--radius-md);
950
+ object-fit: contain;
951
+ }
952
+
953
+ .split-file-label {
954
+ font-size: var(--text-sm);
955
+ color: var(--text-muted);
956
+ display: flex;
957
+ align-items: center;
958
+ gap: var(--space-2);
959
+ }
960
+
961
+ .split-file-label .file-size {
962
+ color: var(--text-dim);
963
+ font-size: var(--text-xs);
964
+ }
965
+
966
+ .split-preview-remove {
967
+ position: absolute;
968
+ top: var(--space-2);
969
+ right: var(--space-4);
970
+ }
971
+
972
+ .split-attach-btn {
973
+ display: flex;
974
+ align-items: center;
975
+ justify-content: center;
976
+ width: 36px;
977
+ height: 36px;
978
+ border: none;
979
+ background: transparent;
980
+ color: var(--text-muted);
981
+ cursor: pointer;
982
+ border-radius: var(--radius-md);
983
+ transition: all 0.15s ease;
984
+ flex-shrink: 0;
985
+ }
986
+
987
+ .split-attach-btn:hover {
988
+ background: var(--accent-10);
989
+ color: var(--accent);
990
+ }
991
+
992
+ .split-attach-btn:active {
993
+ transform: scale(0.95);
994
+ }