@luckydraw/cumulus 0.17.0 → 0.18.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.
@@ -1 +1 @@
1
- {"version":3,"file":"webchat.d.ts","sourceRoot":"","sources":["../../../src/gateway/adapters/webchat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAM7B,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAI9B,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,wCAAwC;IACxC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qEAAqE;IACrE,YAAY,CAAC,EAAE,OAAO,CACpB,IAAI,CAAC,sBAAsB,EAAE,UAAU,GAAG,YAAY,GAAG,eAAe,CAAC,CAC1E,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AA+DD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,OAAO,CA4BT;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,oBAAoB,GAC3B,oBAAoB,CAqHtB"}
1
+ {"version":3,"file":"webchat.d.ts","sourceRoot":"","sources":["../../../src/gateway/adapters/webchat.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAM7B,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAU9B,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,wCAAwC;IACxC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qEAAqE;IACrE,YAAY,CAAC,EAAE,OAAO,CACpB,IAAI,CAAC,sBAAsB,EAAE,UAAU,GAAG,YAAY,GAAG,eAAe,CAAC,CAC1E,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAsGD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,OAAO,CA4BT;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,oBAAoB,GAC3B,oBAAoB,CAmJtB"}
@@ -10,6 +10,8 @@ import * as path from 'path';
10
10
  import { fileURLToPath } from 'url';
11
11
  import { WebSocketServer } from 'ws';
12
12
  import { sendMessage, getOrCreateThread, } from '../../lib/gateway.js';
13
+ import { listAlwaysIncludeFiles, addAlwaysIncludeFile, removeAlwaysIncludeFile, } from '../../lib/config.js';
14
+ import { executeRevert } from '../../lib/revert.js';
13
15
  // ─── Rate limiting ───────────────────────────────────────────────────────────
14
16
  const RATE_LIMIT_WINDOW = 60_000; // 1 minute
15
17
  const RATE_LIMIT_MAX = 20; // messages per window
@@ -134,6 +136,31 @@ export function createWebChatAdapter(config) {
134
136
  await handleCreateThread(ws, data);
135
137
  return;
136
138
  }
139
+ // Handle include list
140
+ if (data.type === 'include_list') {
141
+ await handleIncludeList(ws, data);
142
+ return;
143
+ }
144
+ // Handle include add
145
+ if (data.type === 'include_add') {
146
+ await handleIncludeAdd(ws, data);
147
+ return;
148
+ }
149
+ // Handle include remove
150
+ if (data.type === 'include_remove') {
151
+ await handleIncludeRemove(ws, data);
152
+ return;
153
+ }
154
+ // Handle revert list
155
+ if (data.type === 'revert_list') {
156
+ await handleRevertList(ws, data);
157
+ return;
158
+ }
159
+ // Handle revert execute
160
+ if (data.type === 'revert_execute') {
161
+ await handleRevertExecute(ws, data);
162
+ return;
163
+ }
137
164
  // Handle chat message
138
165
  if (data.type === 'message') {
139
166
  // Rate limit
@@ -179,6 +206,7 @@ async function handleHistory(ws, data) {
179
206
  const limit = Math.min(data.limit || 50, 200);
180
207
  const slice = all.slice(-limit);
181
208
  const messages = slice.map((m) => ({
209
+ id: m.id,
182
210
  role: m.role,
183
211
  content: m.content,
184
212
  timestamp: m.timestamp,
@@ -258,6 +286,135 @@ async function handleCreateThread(ws, data) {
258
286
  });
259
287
  }
260
288
  }
289
+ async function handleIncludeList(ws, data) {
290
+ try {
291
+ const result = await listAlwaysIncludeFiles(data.threadName);
292
+ const files = [
293
+ ...result.global.map((p) => ({ path: p, scope: 'global' })),
294
+ ...result.thread.map((p) => ({ path: p, scope: 'thread' })),
295
+ ];
296
+ wsSend(ws, { type: 'include_list', threadName: data.threadName, files });
297
+ }
298
+ catch (err) {
299
+ wsSend(ws, {
300
+ type: 'error',
301
+ error: `Failed to list include files: ${err instanceof Error ? err.message : String(err)}`,
302
+ threadName: data.threadName,
303
+ });
304
+ }
305
+ }
306
+ async function handleIncludeAdd(ws, data) {
307
+ try {
308
+ if (!data.filePath) {
309
+ wsSend(ws, { type: 'error', error: 'Missing filePath', threadName: data.threadName });
310
+ return;
311
+ }
312
+ const threadName = data.scope === 'global' ? undefined : data.threadName;
313
+ await addAlwaysIncludeFile(data.filePath, threadName);
314
+ // Return updated list
315
+ await handleIncludeList(ws, { type: 'include_list', threadName: data.threadName });
316
+ wsSend(ws, {
317
+ type: 'include_added',
318
+ threadName: data.threadName,
319
+ filePath: data.filePath,
320
+ scope: data.scope || 'thread',
321
+ });
322
+ }
323
+ catch (err) {
324
+ wsSend(ws, {
325
+ type: 'error',
326
+ error: `Failed to add include file: ${err instanceof Error ? err.message : String(err)}`,
327
+ threadName: data.threadName,
328
+ });
329
+ }
330
+ }
331
+ async function handleIncludeRemove(ws, data) {
332
+ try {
333
+ if (!data.filePath) {
334
+ wsSend(ws, { type: 'error', error: 'Missing filePath', threadName: data.threadName });
335
+ return;
336
+ }
337
+ // Try removing from thread first, then global
338
+ try {
339
+ await removeAlwaysIncludeFile(data.filePath, data.threadName);
340
+ }
341
+ catch {
342
+ await removeAlwaysIncludeFile(data.filePath, undefined);
343
+ }
344
+ // Return updated list
345
+ await handleIncludeList(ws, { type: 'include_list', threadName: data.threadName });
346
+ wsSend(ws, {
347
+ type: 'include_removed',
348
+ threadName: data.threadName,
349
+ filePath: data.filePath,
350
+ });
351
+ }
352
+ catch (err) {
353
+ wsSend(ws, {
354
+ type: 'error',
355
+ error: `Failed to remove include file: ${err instanceof Error ? err.message : String(err)}`,
356
+ threadName: data.threadName,
357
+ });
358
+ }
359
+ }
360
+ async function handleRevertList(ws, data) {
361
+ try {
362
+ const thread = await getOrCreateThread(data.threadName);
363
+ const all = await thread.history.getAll();
364
+ // Build turn pairs (user + assistant) for the revert UI
365
+ const turns = [];
366
+ let turnIndex = 0;
367
+ for (let i = 0; i < all.length; i++) {
368
+ const msg = all[i];
369
+ if (msg.role === 'user') {
370
+ turnIndex++;
371
+ const preview = msg.content.slice(0, 80).replace(/\n/g, ' ');
372
+ turns.push({
373
+ index: turnIndex,
374
+ userMessageId: msg.id,
375
+ preview,
376
+ timestamp: msg.timestamp,
377
+ hasGitSnapshot: !!msg.metadata?.gitSnapshot,
378
+ messageCount: all.length - i, // messages that would be removed
379
+ });
380
+ }
381
+ }
382
+ // Newest first
383
+ turns.reverse();
384
+ wsSend(ws, { type: 'revert_list', threadName: data.threadName, turns });
385
+ }
386
+ catch (err) {
387
+ wsSend(ws, {
388
+ type: 'error',
389
+ error: `Failed to list turns: ${err instanceof Error ? err.message : String(err)}`,
390
+ threadName: data.threadName,
391
+ });
392
+ }
393
+ }
394
+ async function handleRevertExecute(ws, data) {
395
+ try {
396
+ if (!data.targetMessageId) {
397
+ wsSend(ws, { type: 'error', error: 'Missing targetMessageId', threadName: data.threadName });
398
+ return;
399
+ }
400
+ const thread = await getOrCreateThread(data.threadName);
401
+ const result = await executeRevert(thread.history, data.targetMessageId);
402
+ wsSend(ws, {
403
+ type: 'revert_done',
404
+ threadName: data.threadName,
405
+ success: result.success,
406
+ removedCount: result.removedCount,
407
+ error: result.error,
408
+ });
409
+ }
410
+ catch (err) {
411
+ wsSend(ws, {
412
+ type: 'error',
413
+ error: `Failed to revert: ${err instanceof Error ? err.message : String(err)}`,
414
+ threadName: data.threadName,
415
+ });
416
+ }
417
+ }
261
418
  async function handleChatMessage(ws, data, pipelineOpts) {
262
419
  const { threadName, message, images } = data;
263
420
  if (!threadName || !message) {
@@ -1 +1 @@
1
- {"version":3,"file":"webchat.js","sourceRoot":"","sources":["../../../src/gateway/adapters/webchat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webchat.js","sourceRoot":"","sources":["../../../src/gateway/adapters/webchat.ts"],"names":[],"mappings":"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"}
@@ -574,6 +574,148 @@
574
574
  '}',
575
575
  '.cumulus-topbar-title { font-weight: 600; font-size: 15px; color: #e0e0e0; }',
576
576
  '.cumulus-topbar-right { display: flex; align-items: center; gap: 10px; }',
577
+
578
+ /* ── Panel header action buttons ── */
579
+ '.cumulus-panel-actions { display: flex; align-items: center; gap: 4px; margin-left: auto; margin-right: 8px; }',
580
+ '.cumulus-panel-action-btn {',
581
+ ' background: none; border: 1px solid transparent; color: #777;',
582
+ ' cursor: pointer; font-size: 11px; padding: 2px 7px;',
583
+ ' border-radius: 3px; font-family: inherit; white-space: nowrap;',
584
+ '}',
585
+ '.cumulus-panel-action-btn:hover { color: #ddd; border-color: #555; }',
586
+
587
+ /* ── Overlay (covers the thread panel) ── */
588
+ '.cumulus-overlay {',
589
+ ' position: absolute; top: 0; left: 0; right: 0; bottom: 0;',
590
+ ' background: #1e1e1e; z-index: 10;',
591
+ ' display: flex; flex-direction: column;',
592
+ ' overflow: hidden;',
593
+ '}',
594
+ '.cumulus-overlay-header {',
595
+ ' display: flex; align-items: center; justify-content: space-between;',
596
+ ' padding: 0 0.85em; height: 40px;',
597
+ ' background: #2d2d2d; border-bottom: 1px solid #3a3a3a;',
598
+ ' flex-shrink: 0;',
599
+ '}',
600
+ '.cumulus-overlay-title { font-weight: 600; font-size: 14px; color: #e0e0e0; }',
601
+ '.cumulus-overlay-close {',
602
+ ' background: none; border: none; color: #666; cursor: pointer;',
603
+ ' font-size: 18px; padding: 2px 4px; line-height: 1;',
604
+ '}',
605
+ '.cumulus-overlay-close:hover { color: #e0e0e0; }',
606
+ '.cumulus-overlay-body {',
607
+ ' flex: 1; overflow-y: auto; padding: 0.75em;',
608
+ '}',
609
+ '.cumulus-overlay-footer {',
610
+ ' padding: 0.6em 0.85em; background: #2d2d2d;',
611
+ ' border-top: 1px solid #3a3a3a; flex-shrink: 0;',
612
+ '}',
613
+
614
+ /* ── Include list items ── */
615
+ '.cumulus-include-item {',
616
+ ' display: flex; align-items: center; justify-content: space-between;',
617
+ ' padding: 0.45em 0.6em; border-radius: 4px;',
618
+ ' border: 1px solid #333; margin-bottom: 0.35em;',
619
+ '}',
620
+ '.cumulus-include-item:hover { border-color: #555; }',
621
+ '.cumulus-include-path {',
622
+ ' font-family: "SF Mono", Consolas, monospace; font-size: 0.85em;',
623
+ ' color: #ccc; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1;',
624
+ '}',
625
+ '.cumulus-include-scope {',
626
+ ' font-size: 0.75em; color: #888; background: #2a2a2a;',
627
+ ' border: 1px solid #3a3a3a; border-radius: 3px;',
628
+ ' padding: 1px 6px; margin-left: 8px; flex-shrink: 0;',
629
+ '}',
630
+ '.cumulus-include-remove {',
631
+ ' background: none; border: none; color: #666; cursor: pointer;',
632
+ ' font-size: 16px; padding: 0 4px; margin-left: 6px; flex-shrink: 0;',
633
+ '}',
634
+ '.cumulus-include-remove:hover { color: #ef4444; }',
635
+
636
+ /* ── Include add row ── */
637
+ '.cumulus-include-add-row {',
638
+ ' display: flex; gap: 6px; align-items: center;',
639
+ '}',
640
+ '.cumulus-include-add-input {',
641
+ ' flex: 1; background: #1e1e1e; border: 1px solid #3a3a3a;',
642
+ ' color: #e0e0e0; padding: 0.4em 0.6em; border-radius: 4px;',
643
+ ' font-family: "SF Mono", Consolas, monospace; font-size: 0.85em;',
644
+ ' outline: none;',
645
+ '}',
646
+ '.cumulus-include-add-input:focus { border-color: #0066cc; }',
647
+ '.cumulus-include-add-input::placeholder { color: #555; }',
648
+ '.cumulus-scope-toggle {',
649
+ ' background: #2a2a2a; border: 1px solid #3a3a3a; color: #aaa;',
650
+ ' padding: 0.35em 0.6em; border-radius: 4px; cursor: pointer;',
651
+ ' font-size: 0.8em; white-space: nowrap;',
652
+ '}',
653
+ '.cumulus-scope-toggle:hover { border-color: #555; color: #ddd; }',
654
+ '.cumulus-include-add-btn {',
655
+ ' background: #0066cc; border: none; color: white;',
656
+ ' padding: 0.4em 0.8em; border-radius: 4px; cursor: pointer;',
657
+ ' font-size: 0.85em; white-space: nowrap;',
658
+ '}',
659
+ '.cumulus-include-add-btn:hover { background: #0077ee; }',
660
+
661
+ /* ── Revert turn items ── */
662
+ '.cumulus-revert-item {',
663
+ ' display: flex; align-items: center; gap: 0.6em;',
664
+ ' padding: 0.55em 0.6em; border-radius: 4px;',
665
+ ' border: 1px solid #333; margin-bottom: 0.35em; cursor: pointer;',
666
+ '}',
667
+ '.cumulus-revert-item:hover { border-color: #555; background: #252525; }',
668
+ '.cumulus-revert-turn-num {',
669
+ ' font-size: 0.8em; color: #888; background: #2a2a2a;',
670
+ ' border: 1px solid #3a3a3a; border-radius: 3px;',
671
+ ' padding: 1px 6px; flex-shrink: 0; min-width: 3em; text-align: center;',
672
+ '}',
673
+ '.cumulus-revert-preview {',
674
+ ' flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;',
675
+ ' color: #ccc; font-size: 0.9em;',
676
+ '}',
677
+ '.cumulus-revert-time {',
678
+ ' font-size: 0.75em; color: #666; flex-shrink: 0;',
679
+ '}',
680
+ '.cumulus-revert-git-badge {',
681
+ ' font-size: 0.7em; color: #22c55e; background: rgba(34,197,94,0.1);',
682
+ ' border: 1px solid rgba(34,197,94,0.3); border-radius: 3px;',
683
+ ' padding: 0 5px; flex-shrink: 0;',
684
+ '}',
685
+
686
+ /* ── Revert confirm panel ── */
687
+ '.cumulus-revert-confirm {',
688
+ ' padding: 1.5em; display: flex; flex-direction: column;',
689
+ ' align-items: center; gap: 1em; text-align: center;',
690
+ '}',
691
+ '.cumulus-revert-confirm-text { color: #ccc; font-size: 0.95em; }',
692
+ '.cumulus-revert-confirm-warn { color: #f59e0b; font-size: 0.85em; }',
693
+ '.cumulus-revert-confirm-actions { display: flex; gap: 8px; }',
694
+ '.cumulus-revert-confirm-btn {',
695
+ ' padding: 0.4em 1.2em; border-radius: 4px; cursor: pointer;',
696
+ ' font-size: 0.9em; border: 1px solid #3a3a3a;',
697
+ '}',
698
+ '.cumulus-revert-confirm-btn.danger {',
699
+ ' background: #8b2222; border-color: #a33; color: white;',
700
+ '}',
701
+ '.cumulus-revert-confirm-btn.danger:hover { background: #a33; }',
702
+ '.cumulus-revert-confirm-btn.cancel {',
703
+ ' background: #2a2a2a; color: #ccc;',
704
+ '}',
705
+ '.cumulus-revert-confirm-btn.cancel:hover { background: #3a3a3a; }',
706
+
707
+ /* ── Status message ── */
708
+ '.cumulus-overlay-status {',
709
+ ' padding: 0.4em 0.6em; font-size: 0.85em; border-radius: 4px;',
710
+ ' margin-top: 0.5em; text-align: center;',
711
+ '}',
712
+ '.cumulus-overlay-status.success { color: #22c55e; background: rgba(34,197,94,0.1); }',
713
+ '.cumulus-overlay-status.error { color: #ef4444; background: rgba(239,68,68,0.1); }',
714
+
715
+ /* ── Empty overlay state ── */
716
+ '.cumulus-overlay-empty {',
717
+ ' color: #555; font-size: 0.9em; text-align: center; padding: 2em;',
718
+ '}',
577
719
  ].join('\n');
578
720
 
579
721
  // ─── HTML Escaping ───────────────────────────────────────────────────────────
@@ -1774,6 +1916,7 @@
1774
1916
 
1775
1917
  var panel = document.createElement('div');
1776
1918
  panel.className = 'cumulus-thread-panel';
1919
+ panel.style.position = 'relative'; // for overlay positioning
1777
1920
  panel.setAttribute('data-testid', 'webchat-panel-' + threadName);
1778
1921
  panel.setAttribute('data-thread-panel', threadName);
1779
1922
 
@@ -1797,6 +1940,32 @@
1797
1940
 
1798
1941
  panelHeader.appendChild(titleLeft);
1799
1942
 
1943
+ // Action buttons (include + revert)
1944
+ var actions = document.createElement('div');
1945
+ actions.className = 'cumulus-panel-actions';
1946
+
1947
+ var includeBtn = document.createElement('button');
1948
+ includeBtn.className = 'cumulus-panel-action-btn';
1949
+ includeBtn.setAttribute('data-testid', 'webchat-include-btn');
1950
+ includeBtn.setAttribute('title', 'Manage always-include files');
1951
+ includeBtn.textContent = '/include';
1952
+ includeBtn.addEventListener('click', function () {
1953
+ openIncludeOverlay(panel, threadName);
1954
+ });
1955
+ actions.appendChild(includeBtn);
1956
+
1957
+ var revertBtn = document.createElement('button');
1958
+ revertBtn.className = 'cumulus-panel-action-btn';
1959
+ revertBtn.setAttribute('data-testid', 'webchat-revert-btn');
1960
+ revertBtn.setAttribute('title', 'Revert conversation to earlier point');
1961
+ revertBtn.textContent = '/revert';
1962
+ revertBtn.addEventListener('click', function () {
1963
+ openRevertOverlay(panel, threadName);
1964
+ });
1965
+ actions.appendChild(revertBtn);
1966
+
1967
+ panelHeader.appendChild(actions);
1968
+
1800
1969
  var closeBtn = document.createElement('button');
1801
1970
  closeBtn.className = 'cumulus-thread-panel-close';
1802
1971
  closeBtn.setAttribute('data-testid', 'webchat-panel-close');
@@ -2142,6 +2311,272 @@
2142
2311
  }
2143
2312
  }
2144
2313
 
2314
+ // ── Include overlay ──
2315
+ function openIncludeOverlay(panel, threadName) {
2316
+ // Remove existing overlay if any
2317
+ var existing = panel.querySelector('.cumulus-overlay');
2318
+ if (existing) { existing.remove(); return; }
2319
+
2320
+ var overlay = document.createElement('div');
2321
+ overlay.className = 'cumulus-overlay';
2322
+
2323
+ var header = document.createElement('div');
2324
+ header.className = 'cumulus-overlay-header';
2325
+ var title = document.createElement('span');
2326
+ title.className = 'cumulus-overlay-title';
2327
+ title.textContent = 'Always-Include Files';
2328
+ header.appendChild(title);
2329
+ var closeBtn = document.createElement('button');
2330
+ closeBtn.className = 'cumulus-overlay-close';
2331
+ closeBtn.textContent = '\xD7';
2332
+ closeBtn.addEventListener('click', function () { overlay.remove(); });
2333
+ header.appendChild(closeBtn);
2334
+ overlay.appendChild(header);
2335
+
2336
+ var body = document.createElement('div');
2337
+ body.className = 'cumulus-overlay-body';
2338
+ body.innerHTML = '<div class="cumulus-overlay-empty">Loading\u2026</div>';
2339
+ overlay.appendChild(body);
2340
+
2341
+ // Footer with add input
2342
+ var footer = document.createElement('div');
2343
+ footer.className = 'cumulus-overlay-footer';
2344
+ var addRow = document.createElement('div');
2345
+ addRow.className = 'cumulus-include-add-row';
2346
+
2347
+ var addInput = document.createElement('input');
2348
+ addInput.className = 'cumulus-include-add-input';
2349
+ addInput.setAttribute('placeholder', '/path/to/file');
2350
+ addInput.setAttribute('data-testid', 'webchat-include-add-input');
2351
+
2352
+ var currentScope = 'thread';
2353
+ var scopeBtn = document.createElement('button');
2354
+ scopeBtn.className = 'cumulus-scope-toggle';
2355
+ scopeBtn.textContent = 'thread';
2356
+ scopeBtn.setAttribute('data-testid', 'webchat-include-scope-toggle');
2357
+ scopeBtn.addEventListener('click', function () {
2358
+ currentScope = currentScope === 'thread' ? 'global' : 'thread';
2359
+ scopeBtn.textContent = currentScope;
2360
+ });
2361
+
2362
+ var addBtn = document.createElement('button');
2363
+ addBtn.className = 'cumulus-include-add-btn';
2364
+ addBtn.textContent = 'Add';
2365
+ addBtn.setAttribute('data-testid', 'webchat-include-add-btn');
2366
+ addBtn.addEventListener('click', function () {
2367
+ var filePath = addInput.value.trim();
2368
+ if (!filePath) return;
2369
+ connection && connection.send(JSON.stringify({
2370
+ type: 'include_add', threadName: threadName,
2371
+ filePath: filePath, scope: currentScope,
2372
+ }));
2373
+ addInput.value = '';
2374
+ });
2375
+
2376
+ addInput.addEventListener('keydown', function (e) {
2377
+ if (e.key === 'Enter') { addBtn.click(); }
2378
+ });
2379
+
2380
+ addRow.appendChild(addInput);
2381
+ addRow.appendChild(scopeBtn);
2382
+ addRow.appendChild(addBtn);
2383
+ footer.appendChild(addRow);
2384
+ overlay.appendChild(footer);
2385
+
2386
+ // Store references for the message handler to update
2387
+ overlay._includeBody = body;
2388
+ overlay._threadName = threadName;
2389
+
2390
+ panel.appendChild(overlay);
2391
+
2392
+ // Request the list
2393
+ connection && connection.send(JSON.stringify({ type: 'include_list', threadName: threadName }));
2394
+ }
2395
+
2396
+ function renderIncludeList(panel, threadName, files) {
2397
+ var overlay = panel.querySelector('.cumulus-overlay');
2398
+ if (!overlay || overlay._threadName !== threadName) return;
2399
+ var body = overlay._includeBody;
2400
+ if (!body) return;
2401
+
2402
+ body.innerHTML = '';
2403
+ if (files.length === 0) {
2404
+ body.innerHTML = '<div class="cumulus-overlay-empty">No always-include files configured.</div>';
2405
+ return;
2406
+ }
2407
+
2408
+ files.forEach(function (f) {
2409
+ var item = document.createElement('div');
2410
+ item.className = 'cumulus-include-item';
2411
+
2412
+ var pathEl = document.createElement('span');
2413
+ pathEl.className = 'cumulus-include-path';
2414
+ pathEl.textContent = f.path;
2415
+ pathEl.setAttribute('title', f.path);
2416
+ item.appendChild(pathEl);
2417
+
2418
+ var scopeEl = document.createElement('span');
2419
+ scopeEl.className = 'cumulus-include-scope';
2420
+ scopeEl.textContent = f.scope;
2421
+ item.appendChild(scopeEl);
2422
+
2423
+ var removeBtn = document.createElement('button');
2424
+ removeBtn.className = 'cumulus-include-remove';
2425
+ removeBtn.textContent = '\xD7';
2426
+ removeBtn.setAttribute('title', 'Remove');
2427
+ removeBtn.addEventListener('click', function () {
2428
+ connection && connection.send(JSON.stringify({
2429
+ type: 'include_remove', threadName: threadName, filePath: f.path,
2430
+ }));
2431
+ });
2432
+ item.appendChild(removeBtn);
2433
+
2434
+ body.appendChild(item);
2435
+ });
2436
+ }
2437
+
2438
+ // ── Revert overlay ──
2439
+ function openRevertOverlay(panel, threadName) {
2440
+ var existing = panel.querySelector('.cumulus-overlay');
2441
+ if (existing) { existing.remove(); return; }
2442
+
2443
+ var overlay = document.createElement('div');
2444
+ overlay.className = 'cumulus-overlay';
2445
+
2446
+ var header = document.createElement('div');
2447
+ header.className = 'cumulus-overlay-header';
2448
+ var title = document.createElement('span');
2449
+ title.className = 'cumulus-overlay-title';
2450
+ title.textContent = 'Revert Conversation';
2451
+ header.appendChild(title);
2452
+ var closeBtn = document.createElement('button');
2453
+ closeBtn.className = 'cumulus-overlay-close';
2454
+ closeBtn.textContent = '\xD7';
2455
+ closeBtn.addEventListener('click', function () { overlay.remove(); });
2456
+ header.appendChild(closeBtn);
2457
+ overlay.appendChild(header);
2458
+
2459
+ var body = document.createElement('div');
2460
+ body.className = 'cumulus-overlay-body';
2461
+ body.innerHTML = '<div class="cumulus-overlay-empty">Loading\u2026</div>';
2462
+ overlay.appendChild(body);
2463
+
2464
+ overlay._revertBody = body;
2465
+ overlay._threadName = threadName;
2466
+
2467
+ panel.appendChild(overlay);
2468
+
2469
+ // Request the turn list
2470
+ connection && connection.send(JSON.stringify({ type: 'revert_list', threadName: threadName }));
2471
+ }
2472
+
2473
+ function renderRevertList(panel, threadName, turns) {
2474
+ var overlay = panel.querySelector('.cumulus-overlay');
2475
+ if (!overlay || overlay._threadName !== threadName) return;
2476
+ var body = overlay._revertBody;
2477
+ if (!body) return;
2478
+
2479
+ body.innerHTML = '';
2480
+ if (turns.length === 0) {
2481
+ body.innerHTML = '<div class="cumulus-overlay-empty">No turns to revert to.</div>';
2482
+ return;
2483
+ }
2484
+
2485
+ // Skip the first turn (most recent) — nothing to revert to
2486
+ var revertableTurns = turns.length > 1 ? turns.slice(1) : turns;
2487
+
2488
+ revertableTurns.forEach(function (turn) {
2489
+ var item = document.createElement('div');
2490
+ item.className = 'cumulus-revert-item';
2491
+ item.setAttribute('data-testid', 'webchat-revert-turn');
2492
+
2493
+ var numEl = document.createElement('span');
2494
+ numEl.className = 'cumulus-revert-turn-num';
2495
+ numEl.textContent = '#' + turn.index;
2496
+ item.appendChild(numEl);
2497
+
2498
+ var previewEl = document.createElement('span');
2499
+ previewEl.className = 'cumulus-revert-preview';
2500
+ previewEl.textContent = turn.preview;
2501
+ item.appendChild(previewEl);
2502
+
2503
+ if (turn.hasGitSnapshot) {
2504
+ var gitBadge = document.createElement('span');
2505
+ gitBadge.className = 'cumulus-revert-git-badge';
2506
+ gitBadge.textContent = 'git';
2507
+ item.appendChild(gitBadge);
2508
+ }
2509
+
2510
+ var timeEl = document.createElement('span');
2511
+ timeEl.className = 'cumulus-revert-time';
2512
+ timeEl.textContent = formatTime(turn.timestamp);
2513
+ item.appendChild(timeEl);
2514
+
2515
+ item.addEventListener('click', function () {
2516
+ showRevertConfirm(overlay, threadName, turn);
2517
+ });
2518
+
2519
+ body.appendChild(item);
2520
+ });
2521
+ }
2522
+
2523
+ function showRevertConfirm(overlay, threadName, turn) {
2524
+ var body = overlay._revertBody;
2525
+ if (!body) return;
2526
+
2527
+ body.innerHTML = '';
2528
+ var confirm = document.createElement('div');
2529
+ confirm.className = 'cumulus-revert-confirm';
2530
+
2531
+ var text = document.createElement('div');
2532
+ text.className = 'cumulus-revert-confirm-text';
2533
+ text.textContent = 'Revert to after turn #' + turn.index + '?';
2534
+ confirm.appendChild(text);
2535
+
2536
+ var warn = document.createElement('div');
2537
+ warn.className = 'cumulus-revert-confirm-warn';
2538
+ warn.textContent = turn.messageCount + ' message(s) will be removed. This cannot be undone.';
2539
+ confirm.appendChild(warn);
2540
+
2541
+ var actions = document.createElement('div');
2542
+ actions.className = 'cumulus-revert-confirm-actions';
2543
+
2544
+ var cancelBtn = document.createElement('button');
2545
+ cancelBtn.className = 'cumulus-revert-confirm-btn cancel';
2546
+ cancelBtn.textContent = 'Cancel';
2547
+ cancelBtn.addEventListener('click', function () {
2548
+ // Re-request list
2549
+ connection && connection.send(JSON.stringify({ type: 'revert_list', threadName: threadName }));
2550
+ });
2551
+ actions.appendChild(cancelBtn);
2552
+
2553
+ var revertBtn = document.createElement('button');
2554
+ revertBtn.className = 'cumulus-revert-confirm-btn danger';
2555
+ revertBtn.setAttribute('data-testid', 'webchat-revert-confirm');
2556
+ revertBtn.textContent = 'Revert';
2557
+ revertBtn.addEventListener('click', function () {
2558
+ revertBtn.disabled = true;
2559
+ revertBtn.textContent = 'Reverting\u2026';
2560
+ connection && connection.send(JSON.stringify({
2561
+ type: 'revert_execute', threadName: threadName,
2562
+ targetMessageId: turn.userMessageId,
2563
+ }));
2564
+ });
2565
+ actions.appendChild(revertBtn);
2566
+
2567
+ confirm.appendChild(actions);
2568
+ body.appendChild(confirm);
2569
+ }
2570
+
2571
+ function formatTime(ts) {
2572
+ var d = new Date(typeof ts === 'number' ? ts : Date.parse(ts));
2573
+ var h = d.getHours();
2574
+ var m = d.getMinutes();
2575
+ var ampm = h >= 12 ? 'PM' : 'AM';
2576
+ h = h % 12 || 12;
2577
+ return h + ':' + (m < 10 ? '0' : '') + m + ' ' + ampm;
2578
+ }
2579
+
2145
2580
  // ── Message router ──
2146
2581
  function handleServerMessage(data) {
2147
2582
  switch (data.type) {
@@ -2187,7 +2622,7 @@
2187
2622
  var state = getThreadState(data.threadName);
2188
2623
  if (data.messages && data.messages.length > 0) {
2189
2624
  state.messages = data.messages.map(function (m) {
2190
- return { role: m.role, content: m.content };
2625
+ return { id: m.id, role: m.role, content: m.content };
2191
2626
  });
2192
2627
  }
2193
2628
  refreshThreadPanel(data.threadName);
@@ -2249,6 +2684,52 @@
2249
2684
  refreshThreadPanel(data.threadName);
2250
2685
  }
2251
2686
  break;
2687
+
2688
+ // ── Include/Revert responses ──
2689
+ case 'include_list':
2690
+ if (data.threadName && data.files) {
2691
+ var panel = document.querySelector('[data-thread-panel="' + data.threadName + '"]');
2692
+ if (panel) renderIncludeList(panel, data.threadName, data.files);
2693
+ }
2694
+ break;
2695
+
2696
+ case 'include_added':
2697
+ case 'include_removed':
2698
+ // List already updated by the handler — no extra action needed
2699
+ break;
2700
+
2701
+ case 'revert_list':
2702
+ if (data.threadName && data.turns) {
2703
+ var panel = document.querySelector('[data-thread-panel="' + data.threadName + '"]');
2704
+ if (panel) renderRevertList(panel, data.threadName, data.turns);
2705
+ }
2706
+ break;
2707
+
2708
+ case 'revert_done':
2709
+ if (data.threadName) {
2710
+ var panel = document.querySelector('[data-thread-panel="' + data.threadName + '"]');
2711
+ if (panel) {
2712
+ var overlay = panel.querySelector('.cumulus-overlay');
2713
+ if (data.success) {
2714
+ // Reload history and close overlay
2715
+ var tState = getThreadState(data.threadName);
2716
+ tState.messages = [];
2717
+ tState.historyLoaded = false;
2718
+ // Re-request history
2719
+ connection && connection.send(JSON.stringify({
2720
+ type: 'history', threadName: data.threadName, limit: 200,
2721
+ }));
2722
+ if (overlay) overlay.remove();
2723
+ } else {
2724
+ // Show error in overlay
2725
+ if (overlay && overlay._revertBody) {
2726
+ overlay._revertBody.innerHTML = '<div class="cumulus-overlay-status error">' +
2727
+ escapeHtml(data.error || 'Revert failed') + '</div>';
2728
+ }
2729
+ }
2730
+ }
2731
+ }
2732
+ break;
2252
2733
  }
2253
2734
  }
2254
2735
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luckydraw/cumulus",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "description": "RLM-based CLI chat wrapper for Claude with external history context management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",