claude-code-kanban 3.0.1 → 3.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-kanban",
3
- "version": "3.0.1",
3
+ "version": "3.1.1",
4
4
  "description": "A web-based Kanban board for viewing Claude Code tasks with agent teams support",
5
5
  "main": "server.js",
6
6
  "bin": {
package/public/app.js CHANGED
@@ -2124,13 +2124,12 @@ function renderSessions() {
2124
2124
  if (isActive) activeSessionIds.add(s.id);
2125
2125
  return isActive;
2126
2126
  });
2127
- if (revealedPlanSessionId && !filteredSessions.some((s) => s.id === revealedPlanSessionId)) {
2128
- const planSession = sessions.find((s) => s.id === revealedPlanSessionId);
2129
- if (planSession) filteredSessions.push(planSession);
2130
- }
2131
- if (revealedStorageSessionId && !filteredSessions.some((s) => s.id === revealedStorageSessionId)) {
2132
- const storageSession = sessions.find((s) => s.id === revealedStorageSessionId);
2133
- if (storageSession) filteredSessions.push(storageSession);
2127
+ const filteredIds = new Set(filteredSessions.map((s) => s.id));
2128
+ for (const id of [revealedPlanSessionId, revealedStorageSessionId, currentSessionId]) {
2129
+ if (id && !filteredIds.has(id)) {
2130
+ const session = sessions.find((s) => s.id === id);
2131
+ if (session) filteredSessions.push(session);
2132
+ }
2134
2133
  }
2135
2134
  }
2136
2135
  if (filterProject) {
@@ -2798,9 +2797,9 @@ function navigateSession(direction, items) {
2798
2797
  const restoredIdx = selectedSessionKbId ? items.findIndex((el) => getKbId(el) === selectedSessionKbId) : -1;
2799
2798
  newIdx = restoredIdx >= 0 ? restoredIdx : 0;
2800
2799
  }
2801
- if (newIdx >= 0 && newIdx < items.length) {
2802
- selectSessionByIndex(newIdx, items);
2803
- }
2800
+ if (newIdx < 0) newIdx = items.length - 1;
2801
+ else if (newIdx >= items.length) newIdx = 0;
2802
+ selectSessionByIndex(newIdx, items);
2804
2803
  }
2805
2804
 
2806
2805
  function setGroupCollapsed(header, collapsed) {
@@ -3981,6 +3980,27 @@ document.addEventListener('keydown', (e) => {
3981
3980
  toggleScratchpad();
3982
3981
  return;
3983
3982
  }
3983
+ if (e.key === '$' && !e.ctrlKey && !e.altKey && !e.metaKey) {
3984
+ e.preventDefault();
3985
+ hubNavigate('cost', contextSid ? `?view=detail&session=${encodeURIComponent(contextSid)}` : undefined);
3986
+ return;
3987
+ }
3988
+ if (matchKey(e, 'KeyM')) {
3989
+ e.preventDefault();
3990
+ const mSession = contextSid ? sessions.find((s) => s.id === contextSid) : null;
3991
+ hubNavigate('marketplace', mSession?.project ? `?project=${encodeURIComponent(mSession.project)}` : undefined);
3992
+ return;
3993
+ }
3994
+ if (matchKey(e, 'KeyR')) {
3995
+ e.preventDefault();
3996
+ location.reload();
3997
+ return;
3998
+ }
3999
+ if (matchKey(e, 'KeyT')) {
4000
+ e.preventDefault();
4001
+ toggleTheme();
4002
+ return;
4003
+ }
3984
4004
  if (e.key === '?' || (e.key === '/' && e.shiftKey)) {
3985
4005
  e.preventDefault();
3986
4006
  showHelpModal();
@@ -4601,7 +4621,6 @@ function updateThemeColor(isLight) {
4601
4621
  //#endregion
4602
4622
 
4603
4623
  //#region THEME
4604
- // biome-ignore lint/correctness/noUnusedVariables: used in HTML
4605
4624
  function toggleTheme() {
4606
4625
  const isCurrentlyLight = document.body.classList.contains('light');
4607
4626
  if (isCurrentlyLight) {
package/public/index.html CHANGED
@@ -46,7 +46,7 @@
46
46
  <header class="sidebar-header">
47
47
  <div class="logo">
48
48
  <div class="logo-mark">
49
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
49
+ <svg viewBox="4 6 16 12" fill="none" stroke="currentColor" stroke-width="2.5">
50
50
  <path d="M5 13l4 4L19 7"/>
51
51
  </svg>
52
52
  </div>
@@ -322,67 +322,89 @@
322
322
  </button>
323
323
  </div>
324
324
  <div class="modal-body">
325
- <div style="display: grid; gap: 16px;">
326
- <div>
327
- <h4 style="margin: 0 0 8px 0; color: var(--text-primary); font-size: 14px; font-weight: 600;">Global</h4>
328
- <table style="width: 100%; font-size: 13px;">
329
- <tr>
330
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">?</kbd></td>
331
- <td style="padding: 4px 0; color: var(--text-primary);">Show keyboard shortcuts</td>
332
- </tr>
333
- <tr>
334
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">Esc</kbd></td>
335
- <td style="padding: 4px 0; color: var(--text-primary);">Close panels or cancel</td>
336
- </tr>
337
- <tr>
338
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">Tab</kbd></td>
339
- <td style="padding: 4px 0; color: var(--text-primary);">Toggle sidebar / board focus</td>
340
- </tr>
341
- <tr>
342
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">[</kbd></td>
343
- <td style="padding: 4px 0; color: var(--text-primary);">Toggle sidebar collapse</td>
344
- </tr>
345
- </table>
325
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 0 24px;">
326
+ <div style="display: grid; gap: 16px; align-content: start;">
327
+ <div>
328
+ <h4 style="margin: 0 0 8px 0; color: var(--text-primary); font-size: 14px; font-weight: 600;">Global</h4>
329
+ <table style="width: 100%; font-size: 13px;">
330
+ <tr>
331
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">?</kbd></td>
332
+ <td style="padding: 4px 0; color: var(--text-primary);">Show keyboard shortcuts</td>
333
+ </tr>
334
+ <tr>
335
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">Esc</kbd></td>
336
+ <td style="padding: 4px 0; color: var(--text-primary);">Close panels or cancel</td>
337
+ </tr>
338
+ <tr>
339
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">Tab</kbd></td>
340
+ <td style="padding: 4px 0; color: var(--text-primary);">Toggle sidebar / board focus</td>
341
+ </tr>
342
+ <tr>
343
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">[</kbd></td>
344
+ <td style="padding: 4px 0; color: var(--text-primary);">Toggle sidebar collapse</td>
345
+ </tr>
346
+ <tr>
347
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">R</kbd></td>
348
+ <td style="padding: 4px 0; color: var(--text-primary);">Reload page</td>
349
+ </tr>
350
+ </table>
351
+ </div>
352
+ <div>
353
+ <h4 style="margin: 0 0 8px 0; color: var(--text-primary); font-size: 14px; font-weight: 600;">Navigation</h4>
354
+ <table style="width: 100%; font-size: 13px;">
355
+ <tr>
356
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">J</kbd> / <kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">&darr;</kbd></td>
357
+ <td style="padding: 4px 0; color: var(--text-primary);">Next task in column</td>
358
+ </tr>
359
+ <tr>
360
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">K</kbd> / <kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">&uarr;</kbd></td>
361
+ <td style="padding: 4px 0; color: var(--text-primary);">Previous task in column</td>
362
+ </tr>
363
+ <tr>
364
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">H</kbd> / <kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">&larr;</kbd></td>
365
+ <td style="padding: 4px 0; color: var(--text-primary);">Move to left column</td>
366
+ </tr>
367
+ <tr>
368
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">L</kbd> / <kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">&rarr;</kbd></td>
369
+ <td style="padding: 4px 0; color: var(--text-primary);">Move to right column</td>
370
+ </tr>
371
+ <tr>
372
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">Enter</kbd></td>
373
+ <td style="padding: 4px 0; color: var(--text-primary);">Toggle task detail panel</td>
374
+ </tr>
375
+ </table>
376
+ </div>
346
377
  </div>
347
- <div>
348
- <h4 style="margin: 0 0 8px 0; color: var(--text-primary); font-size: 14px; font-weight: 600;">Navigation</h4>
378
+ <div style="align-content: start;">
379
+ <h4 style="margin: 0 0 8px 0; color: var(--text-primary); font-size: 14px; font-weight: 600;">Actions</h4>
349
380
  <table style="width: 100%; font-size: 13px;">
350
381
  <tr>
351
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">J</kbd> / <kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">&darr;</kbd></td>
352
- <td style="padding: 4px 0; color: var(--text-primary);">Next task in column</td>
353
- </tr>
354
- <tr>
355
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">K</kbd> / <kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">&uarr;</kbd></td>
356
- <td style="padding: 4px 0; color: var(--text-primary);">Previous task in column</td>
382
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">P</kbd></td>
383
+ <td style="padding: 4px 0; color: var(--text-primary);">Open session plan</td>
357
384
  </tr>
358
385
  <tr>
359
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">H</kbd> / <kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">&larr;</kbd></td>
360
- <td style="padding: 4px 0; color: var(--text-primary);">Move to left column</td>
386
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">I</kbd></td>
387
+ <td style="padding: 4px 0; color: var(--text-primary);">Open session info</td>
361
388
  </tr>
362
389
  <tr>
363
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">L</kbd> / <kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">&rarr;</kbd></td>
364
- <td style="padding: 4px 0; color: var(--text-primary);">Move to right column</td>
390
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">D</kbd></td>
391
+ <td style="padding: 4px 0; color: var(--text-primary);">Delete selected task</td>
365
392
  </tr>
366
393
  <tr>
367
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">Enter</kbd></td>
368
- <td style="padding: 4px 0; color: var(--text-primary);">Toggle task detail panel</td>
394
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">N</kbd></td>
395
+ <td style="padding: 4px 0; color: var(--text-primary);">Toggle scratchpad</td>
369
396
  </tr>
370
- </table>
371
- </div>
372
- <div>
373
- <h4 style="margin: 0 0 8px 0; color: var(--text-primary); font-size: 14px; font-weight: 600;">Task Actions</h4>
374
- <table style="width: 100%; font-size: 13px;">
375
397
  <tr>
376
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">P</kbd></td>
377
- <td style="padding: 4px 0; color: var(--text-primary);">Open session plan</td>
398
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">T</kbd></td>
399
+ <td style="padding: 4px 0; color: var(--text-primary);">Toggle theme</td>
378
400
  </tr>
379
401
  <tr>
380
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">I</kbd></td>
381
- <td style="padding: 4px 0; color: var(--text-primary);">Open session info</td>
402
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">M</kbd></td>
403
+ <td style="padding: 4px 0; color: var(--text-primary);">Jump to marketplace</td>
382
404
  </tr>
383
405
  <tr>
384
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">D</kbd></td>
385
- <td style="padding: 4px 0; color: var(--text-primary);">Delete selected task</td>
406
+ <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">$</kbd></td>
407
+ <td style="padding: 4px 0; color: var(--text-primary);">Jump to cost</td>
386
408
  </tr>
387
409
  <tr>
388
410
  <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">Shift+L</kbd></td>
@@ -392,10 +414,6 @@
392
414
  <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">Shift+M</kbd></td>
393
415
  <td style="padding: 4px 0; color: var(--text-primary);">Open last message detail</td>
394
416
  </tr>
395
- <tr>
396
- <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">N</kbd></td>
397
- <td style="padding: 4px 0; color: var(--text-primary);">Toggle scratchpad</td>
398
- </tr>
399
417
  <tr>
400
418
  <td style="padding: 4px 0; color: var(--text-secondary);"><kbd style="background: var(--bg-hover); padding: 2px 6px; border-radius: 4px; font-family: monospace;">Shift+S</kbd></td>
401
419
  <td style="padding: 4px 0; color: var(--text-primary);">Storage manager</td>
package/public/style.css CHANGED
@@ -2651,11 +2651,11 @@ body.light .msg-assistant .msg-text {
2651
2651
  border: 1px solid var(--border);
2652
2652
  border-radius: 12px;
2653
2653
  width: 90%;
2654
- max-width: 500px;
2654
+ max-width: 860px;
2655
2655
  max-height: 90vh;
2656
2656
  padding: 24px;
2657
2657
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
2658
- overflow: hidden;
2658
+ overflow-y: auto;
2659
2659
  }
2660
2660
 
2661
2661
  .modal.fullscreen {