claude-task-viewer 1.1.0 → 1.2.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.
package/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  A web-based Kanban board for viewing Claude Code tasks. Watch your tasks update in real-time as Claude works.
4
4
 
5
+ ![Dark mode](screenshot-dark.png)
6
+
7
+ ![Light mode](screenshot-light.png)
8
+
5
9
  ## Installation
6
10
 
7
11
  ### Quick start (npx)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-task-viewer",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "A web-based Kanban board for viewing Claude Code tasks",
5
5
  "main": "server.js",
6
6
  "bin": {
package/public/index.html CHANGED
@@ -111,6 +111,10 @@
111
111
  </svg>
112
112
  <span class="text-sm text-gray-300">All Tasks</span>
113
113
  </button>
114
+ <label class="flex items-center gap-2 px-3 py-2 mt-1 text-xs text-gray-500 cursor-pointer hover:text-gray-400">
115
+ <input type="checkbox" id="hide-inactive" onchange="toggleHideInactive()" class="rounded border-gray-600 bg-gray-800 text-claude-orange focus:ring-claude-orange focus:ring-offset-0">
116
+ <span>Show active only</span>
117
+ </label>
114
118
  </div>
115
119
 
116
120
  <nav id="sessions-list" class="flex-1 overflow-y-auto p-2">
@@ -122,7 +126,7 @@
122
126
  <span class="mx-2">·</span>
123
127
  <a href="https://policylayer.com" target="_blank" class="hover:text-gray-400">PolicyLayer</a>
124
128
  <span class="mx-2">·</span>
125
- <span>v1.1.0</span>
129
+ <span>v1.2.0</span>
126
130
  </footer>
127
131
  </aside>
128
132
 
@@ -224,6 +228,7 @@
224
228
  let currentSessionId = null;
225
229
  let currentTasks = [];
226
230
  let viewMode = 'session'; // 'session' or 'all'
231
+ let hideInactive = localStorage.getItem('hideInactive') === 'true';
227
232
 
228
233
  // DOM elements
229
234
  const sessionsList = document.getElementById('sessions-list');
@@ -309,17 +314,22 @@
309
314
  }`;
310
315
  }
311
316
 
312
- if (sessions.length === 0) {
317
+ // Filter sessions based on hideInactive
318
+ const filteredSessions = hideInactive
319
+ ? sessions.filter(s => s.pending > 0 || s.inProgress > 0)
320
+ : sessions;
321
+
322
+ if (filteredSessions.length === 0) {
313
323
  sessionsList.innerHTML = `
314
324
  <div class="text-gray-500 text-sm p-4 text-center">
315
- <p>No sessions found</p>
316
- <p class="mt-2 text-xs">Tasks will appear here when you use Claude Code</p>
325
+ <p>${hideInactive ? 'No active sessions' : 'No sessions found'}</p>
326
+ <p class="mt-2 text-xs">${hideInactive ? 'Uncheck "Show active only" to see all' : 'Tasks will appear here when you use Claude Code'}</p>
317
327
  </div>
318
328
  `;
319
329
  return;
320
330
  }
321
331
 
322
- sessionsList.innerHTML = sessions.map(session => {
332
+ sessionsList.innerHTML = filteredSessions.map(session => {
323
333
  const total = session.taskCount;
324
334
  const percent = total > 0 ? Math.round((session.completed / total) * 100) : 0;
325
335
  const isActive = session.id === currentSessionId && viewMode === 'session';
@@ -541,6 +551,13 @@
541
551
  return div.innerHTML;
542
552
  }
543
553
 
554
+ // Toggle hide inactive sessions
555
+ function toggleHideInactive() {
556
+ hideInactive = document.getElementById('hide-inactive').checked;
557
+ localStorage.setItem('hideInactive', hideInactive);
558
+ renderSessions();
559
+ }
560
+
544
561
  // Theme toggle
545
562
  function toggleTheme() {
546
563
  const body = document.body;
@@ -569,8 +586,14 @@
569
586
  }
570
587
  }
571
588
 
589
+ // Load saved preferences
590
+ function loadPreferences() {
591
+ document.getElementById('hide-inactive').checked = hideInactive;
592
+ }
593
+
572
594
  // Initialize
573
595
  loadTheme();
596
+ loadPreferences();
574
597
  fetchSessions();
575
598
  setupEventSource();
576
599