claude-relay 2.2.4 → 2.3.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.
@@ -419,23 +419,34 @@
419
419
  .model-menu-item:hover { background: rgba(255,255,255,0.05); color: var(--text); }
420
420
  .model-menu-item.active { color: var(--accent); font-weight: 600; }
421
421
 
422
- /* --- Usage panel --- */
423
- #usage-panel {
422
+ /* --- Info panels container --- */
423
+ #info-panels {
424
424
  position: fixed;
425
425
  top: 80px;
426
426
  right: 16px;
427
427
  width: 280px;
428
428
  max-height: calc(100vh - 160px);
429
429
  overflow-y: auto;
430
+ z-index: 50;
431
+ display: flex;
432
+ flex-direction: column;
433
+ gap: 8px;
434
+ pointer-events: none;
435
+ }
436
+
437
+ #info-panels:empty { display: none; }
438
+
439
+ /* --- Usage panel --- */
440
+ #usage-panel, #status-panel, #context-panel {
430
441
  background: var(--bg-alt);
431
442
  border: 1px solid var(--border);
432
443
  border-radius: 12px;
433
444
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
434
- z-index: 50;
435
445
  font-size: 12px;
446
+ pointer-events: auto;
436
447
  }
437
448
 
438
- #usage-panel.hidden { display: none; }
449
+ #usage-panel.hidden, #status-panel.hidden, #context-panel.hidden { display: none; }
439
450
 
440
451
  .usage-panel-header {
441
452
  display: flex;
@@ -448,6 +459,11 @@
448
459
  color: var(--text);
449
460
  }
450
461
 
462
+ .usage-panel-actions {
463
+ display: flex;
464
+ gap: 2px;
465
+ }
466
+
451
467
  .usage-panel-header button {
452
468
  display: flex;
453
469
  align-items: center;
@@ -523,8 +539,76 @@
523
539
  font-weight: 500;
524
540
  }
525
541
 
542
+ /* --- Context bar --- */
543
+ .context-bar-wrap {
544
+ display: flex;
545
+ align-items: center;
546
+ gap: 8px;
547
+ margin: 6px 0 8px;
548
+ }
549
+ .context-bar {
550
+ flex: 1;
551
+ height: 6px;
552
+ background: var(--border);
553
+ border-radius: 3px;
554
+ overflow: hidden;
555
+ }
556
+ .context-bar-fill {
557
+ height: 100%;
558
+ width: 0%;
559
+ background: var(--success);
560
+ border-radius: 3px;
561
+ transition: width 0.3s ease, background 0.3s ease;
562
+ }
563
+ .context-bar-fill.warn { background: #E5A84B; }
564
+ .context-bar-fill.danger { background: var(--error); }
565
+ .context-bar-pct {
566
+ font-family: "SF Mono", Menlo, Monaco, monospace;
567
+ font-size: 11px;
568
+ font-weight: 600;
569
+ color: var(--text-secondary);
570
+ min-width: 32px;
571
+ text-align: right;
572
+ }
573
+
574
+ /* --- Context mini bar (in input area) --- */
575
+ #context-mini {
576
+ display: flex;
577
+ align-items: center;
578
+ gap: 8px;
579
+ padding: 6px 14px 2px;
580
+ cursor: pointer;
581
+ transition: opacity 0.15s;
582
+ }
583
+ #context-mini:hover { opacity: 0.8; }
584
+ #context-mini.hidden { display: none; }
585
+ .context-mini-bar {
586
+ flex: 1;
587
+ height: 4px;
588
+ background: var(--border);
589
+ border-radius: 2px;
590
+ overflow: hidden;
591
+ }
592
+ .context-mini-fill {
593
+ height: 100%;
594
+ width: 0%;
595
+ border-radius: 2px;
596
+ background: var(--success);
597
+ transition: width 0.3s ease, background 0.3s ease;
598
+ }
599
+ .context-mini-fill.warn { background: #E5A84B; }
600
+ .context-mini-fill.danger { background: var(--error); }
601
+ .context-mini-label {
602
+ font-family: "SF Mono", Menlo, Monaco, monospace;
603
+ font-size: 10px;
604
+ font-weight: 600;
605
+ color: var(--text-dimmer);
606
+ min-width: 24px;
607
+ text-align: right;
608
+ }
609
+
526
610
  @media (max-width: 768px) {
527
- #usage-panel {
611
+ #info-panels {
528
612
  top: auto;
529
613
  bottom: calc(var(--safe-bottom, 0px) + 64px);
530
614
  right: 12px;
@@ -130,6 +130,8 @@
130
130
  word-break: break-word;
131
131
  white-space: pre-wrap;
132
132
  color: var(--text);
133
+ unicode-bidi: plaintext;
134
+ text-align: start;
133
135
  }
134
136
 
135
137
  /* --- Assistant message --- */
@@ -176,6 +178,8 @@
176
178
  line-height: 1.7;
177
179
  word-break: break-word;
178
180
  color: var(--text);
181
+ unicode-bidi: plaintext;
182
+ text-align: start;
179
183
  }
180
184
 
181
185
  .md-content p { margin-bottom: 14px; }
@@ -282,7 +286,7 @@ pre:hover .code-copy-btn { opacity: 1; }
282
286
  .md-content th, .md-content td {
283
287
  border: 1px solid var(--border);
284
288
  padding: 8px 12px;
285
- text-align: left;
289
+ text-align: start;
286
290
  }
287
291
  .md-content th {
288
292
  background: rgba(255, 255, 255, 0.04);
@@ -407,6 +411,45 @@ pre.mermaid-error {
407
411
  max-height: 75vh;
408
412
  }
409
413
 
414
+ /* --- Image lightbox modal --- */
415
+ #image-modal { position: fixed; inset: 0; z-index: 300; display: flex; align-items: center; justify-content: center; }
416
+ #image-modal.hidden { display: none; }
417
+ #image-modal .confirm-backdrop { backdrop-filter: none; -webkit-backdrop-filter: none; background: rgba(0, 0, 0, 0.8); }
418
+
419
+ .image-modal-dialog {
420
+ position: relative;
421
+ z-index: 1;
422
+ display: flex;
423
+ align-items: center;
424
+ justify-content: center;
425
+ }
426
+
427
+ #image-modal-img {
428
+ max-width: 92vw;
429
+ max-height: 90vh;
430
+ border-radius: 12px;
431
+ object-fit: contain;
432
+ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6);
433
+ }
434
+
435
+ .image-modal-close {
436
+ position: fixed;
437
+ top: 16px;
438
+ right: 16px;
439
+ z-index: 2;
440
+ display: flex;
441
+ align-items: center;
442
+ justify-content: center;
443
+ background: rgba(0, 0, 0, 0.5);
444
+ border: none;
445
+ color: #fff;
446
+ cursor: pointer;
447
+ padding: 8px;
448
+ border-radius: 50%;
449
+ transition: background 0.15s;
450
+ }
451
+ .image-modal-close:hover { background: rgba(255, 255, 255, 0.2); }
452
+
410
453
  /* ==========================================================================
411
454
  Thinking
412
455
  ========================================================================== */
@@ -566,6 +609,37 @@ pre.mermaid-error {
566
609
  white-space: nowrap;
567
610
  }
568
611
 
612
+ .tool-desc.tool-desc-link {
613
+ cursor: pointer;
614
+ text-decoration: underline;
615
+ text-decoration-color: transparent;
616
+ text-underline-offset: 2px;
617
+ transition: color 0.15s, text-decoration-color 0.15s;
618
+ }
619
+
620
+ .tool-desc.tool-desc-link:hover {
621
+ color: var(--accent);
622
+ text-decoration-color: var(--accent);
623
+ }
624
+
625
+ .tool-desc-link-icon {
626
+ display: inline-flex;
627
+ align-items: center;
628
+ margin-left: 4px;
629
+ opacity: 0.3;
630
+ vertical-align: middle;
631
+ transition: opacity 0.15s;
632
+ }
633
+
634
+ .tool-desc-link-icon .lucide {
635
+ width: 11px;
636
+ height: 11px;
637
+ }
638
+
639
+ .tool-desc.tool-desc-link:hover .tool-desc-link-icon {
640
+ opacity: 0.8;
641
+ }
642
+
569
643
  .tool-status-icon {
570
644
  flex-shrink: 0;
571
645
  width: 16px;
@@ -670,6 +744,13 @@ pre.mermaid-error {
670
744
  }
671
745
 
672
746
  .edit-diff-path { flex: 1; }
747
+ .edit-diff-path-link {
748
+ cursor: pointer;
749
+ }
750
+ .edit-diff-path-link:hover {
751
+ color: var(--accent);
752
+ text-decoration: underline;
753
+ }
673
754
 
674
755
  .edit-diff-toggles {
675
756
  display: inline-flex;
@@ -695,61 +776,19 @@ pre.mermaid-error {
695
776
  .edit-diff-toggle.active { color: var(--text); background: var(--sidebar-active); }
696
777
  .edit-diff-toggle + .edit-diff-toggle { border-left: 1px solid var(--border); }
697
778
 
698
- .edit-diff-body {
699
- display: flex;
779
+ /* Constrain diff module tables inside tool results */
780
+ .edit-diff .diff-unified,
781
+ .edit-diff .diff-split-view,
782
+ .tool-result-block > .diff-unified {
700
783
  max-height: 300px;
701
- overflow-y: auto;
702
- overflow-x: hidden;
784
+ overflow: auto;
703
785
  }
704
786
 
705
- .edit-diff-body pre {
706
- margin: 0;
707
- max-height: none;
708
- overflow-y: visible;
709
- font-family: "SF Mono", Menlo, Monaco, monospace;
787
+ .edit-diff .diff-table,
788
+ .tool-result-block > .diff-unified .diff-table {
710
789
  font-size: 12px;
711
- line-height: 1.55;
712
- }
713
-
714
- .edit-diff-gutter {
715
- flex-shrink: 0;
716
- padding: 12px 12px 12px 14px;
717
- text-align: right;
718
- color: var(--text-dimmer);
719
- user-select: none;
720
- -webkit-user-select: none;
721
- min-width: 36px;
722
- border-right: 1px solid var(--border-subtle);
723
790
  }
724
791
 
725
- .edit-diff-content {
726
- flex: 1;
727
- padding: 12px 14px;
728
- white-space: pre-wrap;
729
- word-break: break-all;
730
- }
731
-
732
- .edit-diff-content .diff-add {
733
- color: #3FB950;
734
- background: rgba(63, 185, 80, 0.08);
735
- display: inline-block;
736
- width: 100%;
737
- }
738
-
739
- .edit-diff-content .diff-del {
740
- color: #F85149;
741
- background: rgba(248, 81, 73, 0.08);
742
- display: inline-block;
743
- width: 100%;
744
- }
745
-
746
- /* Split view */
747
- .edit-diff-split { overflow-x: auto; }
748
- .edit-diff-split .edit-diff-side-old { border-right: 1px solid var(--border); }
749
- .edit-diff-split .edit-diff-side-old,
750
- .edit-diff-split .edit-diff-side-new { min-width: 0; flex: 1; }
751
- .edit-diff-split .edit-diff-gutter { min-width: 30px; padding: 12px 8px 12px 10px; }
752
-
753
792
  /* --- Code viewer (Read tool) --- */
754
793
  .code-viewer {
755
794
  display: flex;
@@ -178,6 +178,24 @@
178
178
  #update-banner-close .lucide { width: 14px; height: 14px; }
179
179
  #update-banner-close:hover { color: var(--text-secondary); }
180
180
 
181
+ /* --- Skip permissions banner --- */
182
+ #skip-perms-banner {
183
+ flex-shrink: 0;
184
+ display: flex;
185
+ align-items: center;
186
+ justify-content: center;
187
+ gap: 8px;
188
+ padding: 7px 16px;
189
+ background: rgba(229, 83, 75, 0.12);
190
+ border-bottom: 1px solid rgba(229, 83, 75, 0.25);
191
+ font-size: 12px;
192
+ font-weight: 500;
193
+ color: #E5534B;
194
+ }
195
+
196
+ #skip-perms-banner.hidden { display: none; }
197
+ #skip-perms-banner .lucide { width: 14px; height: 14px; flex-shrink: 0; }
198
+
181
199
  /* --- Confirm modal --- */
182
200
  #confirm-modal {
183
201
  position: fixed;
@@ -287,6 +305,28 @@
287
305
 
288
306
  .rewind-modal-body p { margin: 0 0 10px; }
289
307
 
308
+ #rewind-mode-options {
309
+ display: flex;
310
+ flex-direction: column;
311
+ gap: 6px;
312
+ margin-bottom: 12px;
313
+ font-size: 13px;
314
+ color: var(--text-secondary);
315
+ }
316
+
317
+ #rewind-mode-options label {
318
+ display: flex;
319
+ align-items: center;
320
+ gap: 8px;
321
+ cursor: pointer;
322
+ padding: 4px 0;
323
+ }
324
+
325
+ #rewind-mode-options input[type="radio"] {
326
+ accent-color: var(--accent);
327
+ margin: 0;
328
+ }
329
+
290
330
  .rewind-file-section {
291
331
  margin-top: 10px;
292
332
  border: 1px solid var(--border-subtle);
@@ -71,6 +71,7 @@
71
71
  <div id="sidebar-panel-files" class="sidebar-panel hidden">
72
72
  <div id="file-panel-header">
73
73
  <button id="file-panel-back" type="button"><i data-lucide="arrow-left"></i> <span>Sessions</span></button>
74
+ <button id="file-panel-refresh" type="button" title="Refresh file tree"><i data-lucide="refresh-cw"></i></button>
74
75
  </div>
75
76
  <div id="file-tree"></div>
76
77
  </div>
@@ -83,6 +84,9 @@
83
84
  <a class="sidebar-menu-item" href="https://github.com/chadbyte/claude-relay" target="_blank" rel="noopener">
84
85
  <i data-lucide="github"></i> <span>GitHub</span>
85
86
  </a>
87
+ <button class="sidebar-menu-item" id="footer-status">
88
+ <i data-lucide="activity"></i> <span>Status</span>
89
+ </button>
86
90
  <button class="sidebar-menu-item" id="footer-update-check">
87
91
  <i data-lucide="refresh-cw"></i> <span>Check for updates</span>
88
92
  </button>
@@ -100,6 +104,10 @@
100
104
  <span class="onboarding-banner-text" id="onboarding-banner-text"></span>
101
105
  <button id="onboarding-banner-close" aria-label="Dismiss"><i data-lucide="x"></i></button>
102
106
  </div>
107
+ <div id="skip-perms-banner" class="hidden">
108
+ <i data-lucide="shield-off"></i>
109
+ <span>Skip permissions mode is active. All tool executions are auto-approved.</span>
110
+ </div>
103
111
  <div id="header">
104
112
  <div id="header-left">
105
113
  <button id="sidebar-expand-btn" title="Open sidebar"><i data-lucide="panel-left-open"></i></button>
@@ -131,7 +139,7 @@
131
139
  </div>
132
140
  </div>
133
141
  <div id="notif-menu-wrap">
134
- <button id="notif-btn" title="Notifications"><i data-lucide="sliders-horizontal"></i></button>
142
+ <button id="notif-btn" title="Notifications"><i data-lucide="bell"></i></button>
135
143
  <div id="notif-menu" class="hidden">
136
144
  <label class="notif-option" id="notif-push-row">
137
145
  <span><i data-lucide="smartphone" style="width:14px;height:14px"></i> Push notifications</span>
@@ -163,24 +171,79 @@
163
171
  </div>
164
172
  <div id="messages"></div>
165
173
 
166
- <div id="usage-panel" class="hidden">
167
- <div class="usage-panel-header">
168
- <span>Usage</span>
169
- <button id="usage-panel-close" aria-label="Close"><i data-lucide="x"></i></button>
174
+ <div id="info-panels">
175
+ <div id="usage-panel" class="hidden">
176
+ <div class="usage-panel-header">
177
+ <span>Usage</span>
178
+ <button id="usage-panel-close" aria-label="Close"><i data-lucide="x"></i></button>
179
+ </div>
180
+ <div class="usage-panel-body">
181
+ <a href="https://claude.ai/settings/usage" target="_blank" rel="noopener" class="usage-external-link">
182
+ <span>Check plan usage on claude.ai</span>
183
+ <i data-lucide="external-link"></i>
184
+ </a>
185
+ <div class="usage-divider"></div>
186
+ <div class="usage-section-label">Session</div>
187
+ <div class="usage-row"><span class="usage-label">Cost</span><span id="usage-cost" class="usage-value">$0.0000</span></div>
188
+ <div class="usage-row"><span class="usage-label">Input tokens</span><span id="usage-input" class="usage-value">0</span></div>
189
+ <div class="usage-row"><span class="usage-label">Output tokens</span><span id="usage-output" class="usage-value">0</span></div>
190
+ <div class="usage-row"><span class="usage-label">Cache read</span><span id="usage-cache-read" class="usage-value">0</span></div>
191
+ <div class="usage-row"><span class="usage-label">Cache write</span><span id="usage-cache-write" class="usage-value">0</span></div>
192
+ <div class="usage-row"><span class="usage-label">Turns</span><span id="usage-turns" class="usage-value">0</span></div>
193
+ </div>
170
194
  </div>
171
- <div class="usage-panel-body">
172
- <a href="https://claude.ai/settings/usage" target="_blank" rel="noopener" class="usage-external-link">
173
- <span>Check plan usage on claude.ai</span>
174
- <i data-lucide="external-link"></i>
175
- </a>
176
- <div class="usage-divider"></div>
177
- <div class="usage-section-label">Session</div>
178
- <div class="usage-row"><span class="usage-label">Cost</span><span id="usage-cost" class="usage-value">$0.0000</span></div>
179
- <div class="usage-row"><span class="usage-label">Input tokens</span><span id="usage-input" class="usage-value">0</span></div>
180
- <div class="usage-row"><span class="usage-label">Output tokens</span><span id="usage-output" class="usage-value">0</span></div>
181
- <div class="usage-row"><span class="usage-label">Cache read</span><span id="usage-cache-read" class="usage-value">0</span></div>
182
- <div class="usage-row"><span class="usage-label">Cache write</span><span id="usage-cache-write" class="usage-value">0</span></div>
183
- <div class="usage-row"><span class="usage-label">Turns</span><span id="usage-turns" class="usage-value">0</span></div>
195
+ <div id="status-panel" class="hidden">
196
+ <div class="usage-panel-header">
197
+ <span>Status</span>
198
+ <button id="status-panel-close" aria-label="Close"><i data-lucide="x"></i></button>
199
+ </div>
200
+ <div class="usage-panel-body">
201
+ <div class="usage-section-label">Process</div>
202
+ <div class="usage-row"><span class="usage-label">PID</span><span id="status-pid" class="usage-value">-</span></div>
203
+ <div class="usage-row"><span class="usage-label">Uptime</span><span id="status-uptime" class="usage-value">-</span></div>
204
+ <div class="usage-row"><span class="usage-label">RSS Memory</span><span id="status-rss" class="usage-value">-</span></div>
205
+ <div class="usage-row"><span class="usage-label">Heap Used</span><span id="status-heap-used" class="usage-value">-</span></div>
206
+ <div class="usage-row"><span class="usage-label">Heap Total</span><span id="status-heap-total" class="usage-value">-</span></div>
207
+ <div class="usage-row"><span class="usage-label">External</span><span id="status-external" class="usage-value">-</span></div>
208
+ <div class="usage-divider"></div>
209
+ <div class="usage-section-label">Sessions</div>
210
+ <div class="usage-row"><span class="usage-label">Active</span><span id="status-sessions" class="usage-value">-</span></div>
211
+ <div class="usage-row"><span class="usage-label">Processing</span><span id="status-processing" class="usage-value">-</span></div>
212
+ <div class="usage-row"><span class="usage-label">Clients</span><span id="status-clients" class="usage-value">-</span></div>
213
+ <div class="usage-row"><span class="usage-label">Terminals</span><span id="status-terminals" class="usage-value">-</span></div>
214
+ </div>
215
+ </div>
216
+ <div id="context-panel" class="hidden">
217
+ <div class="usage-panel-header">
218
+ <span>Context</span>
219
+ <div class="usage-panel-actions">
220
+ <button id="context-panel-minimize" aria-label="Minimize" title="Minimize to input"><i data-lucide="minus"></i></button>
221
+ <button id="context-panel-close" aria-label="Close"><i data-lucide="x"></i></button>
222
+ </div>
223
+ </div>
224
+ <div class="usage-panel-body">
225
+ <div class="usage-section-label">Context Window</div>
226
+ <div class="context-bar-wrap">
227
+ <div class="context-bar">
228
+ <div class="context-bar-fill" id="context-bar-fill"></div>
229
+ </div>
230
+ <span class="context-bar-pct" id="context-bar-pct">0%</span>
231
+ </div>
232
+ <div class="usage-row"><span class="usage-label">Used</span><span id="context-used" class="usage-value">-</span></div>
233
+ <div class="usage-row"><span class="usage-label">Window</span><span id="context-window" class="usage-value">-</span></div>
234
+ <div class="usage-row"><span class="usage-label">Max output</span><span id="context-max-output" class="usage-value">-</span></div>
235
+ <div class="usage-divider"></div>
236
+ <div class="usage-section-label">Session Tokens</div>
237
+ <div class="usage-row"><span class="usage-label">Input</span><span id="context-input" class="usage-value">0</span></div>
238
+ <div class="usage-row"><span class="usage-label">Output</span><span id="context-output" class="usage-value">0</span></div>
239
+ <div class="usage-row"><span class="usage-label">Cache read</span><span id="context-cache-read" class="usage-value">0</span></div>
240
+ <div class="usage-row"><span class="usage-label">Cache write</span><span id="context-cache-write" class="usage-value">0</span></div>
241
+ <div class="usage-divider"></div>
242
+ <div class="usage-section-label">Model</div>
243
+ <div class="usage-row"><span class="usage-label">Name</span><span id="context-model" class="usage-value">-</span></div>
244
+ <div class="usage-row"><span class="usage-label">Cost</span><span id="context-cost" class="usage-value">$0.0000</span></div>
245
+ <div class="usage-row"><span class="usage-label">Turns</span><span id="context-turns" class="usage-value">0</span></div>
246
+ </div>
184
247
  </div>
185
248
  </div>
186
249
  <div id="todo-sticky" class="hidden"></div>
@@ -189,8 +252,14 @@
189
252
  <div id="input-wrapper">
190
253
  <div id="slash-menu"></div>
191
254
  <div id="input-row">
255
+ <div id="context-mini" class="hidden">
256
+ <div class="context-mini-bar">
257
+ <div class="context-mini-fill" id="context-mini-fill"></div>
258
+ </div>
259
+ <span class="context-mini-label" id="context-mini-label">0%</span>
260
+ </div>
192
261
  <div id="image-preview-bar"></div>
193
- <textarea id="input" rows="1" placeholder="Message Claude Code..." enterkeyhint="send"></textarea>
262
+ <textarea id="input" rows="1" placeholder="Message Claude Code..." enterkeyhint="send" dir="auto"></textarea>
194
263
  <div id="input-bottom">
195
264
  <div id="attach-wrap">
196
265
  <button id="attach-btn" type="button" aria-label="Attach"><i data-lucide="plus"></i></button>
@@ -215,6 +284,7 @@
215
284
  <div class="file-viewer-header">
216
285
  <span class="file-viewer-path" id="file-viewer-path"></span>
217
286
  <button class="file-viewer-btn hidden" id="file-viewer-render" title="Toggle rendered view"><i data-lucide="book-open"></i></button>
287
+ <button class="file-viewer-btn hidden" id="file-viewer-history" title="Edit history"><i data-lucide="clock"></i></button>
218
288
  <button class="file-viewer-btn" id="file-viewer-copy" title="Copy contents"><i data-lucide="copy"></i></button>
219
289
  <button class="file-viewer-btn" id="file-viewer-close" title="Close"><i data-lucide="x"></i></button>
220
290
  </div>
@@ -253,6 +323,14 @@
253
323
  </div>
254
324
  </div>
255
325
 
326
+ <div id="image-modal" class="hidden">
327
+ <div class="confirm-backdrop"></div>
328
+ <div class="image-modal-dialog">
329
+ <img id="image-modal-img" src="" alt="">
330
+ <button class="image-modal-close"><i data-lucide="x" style="width:18px;height:18px"></i></button>
331
+ </div>
332
+ </div>
333
+
256
334
  <div id="mermaid-modal" class="hidden">
257
335
  <div class="confirm-backdrop"></div>
258
336
  <div class="mermaid-modal-dialog">
@@ -311,6 +389,11 @@
311
389
  <div class="rewind-modal-title">Rewind to this point?</div>
312
390
  <div class="rewind-modal-body">
313
391
  <p id="rewind-summary"></p>
392
+ <div id="rewind-mode-options">
393
+ <label><input type="radio" name="rewind-mode" value="both" checked> Conversation and files</label>
394
+ <label><input type="radio" name="rewind-mode" value="chat"> Conversation only</label>
395
+ <label><input type="radio" name="rewind-mode" value="files"> Files only</label>
396
+ </div>
314
397
  <div id="rewind-files-list"></div>
315
398
  </div>
316
399
  <div class="confirm-actions">