claude-task-viewer 1.4.0 → 1.5.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 (2) hide show
  1. package/package.json +1 -1
  2. package/public/index.html +47 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-task-viewer",
3
- "version": "1.4.0",
3
+ "version": "1.5.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
@@ -469,6 +469,26 @@
469
469
  color: var(--accent);
470
470
  }
471
471
 
472
+ .search-input {
473
+ background: var(--bg-elevated);
474
+ border: 1px solid var(--border);
475
+ border-radius: 6px;
476
+ padding: 8px 12px;
477
+ font-family: var(--mono);
478
+ font-size: 12px;
479
+ color: var(--text-primary);
480
+ width: 200px;
481
+ }
482
+
483
+ .search-input:focus {
484
+ outline: none;
485
+ border-color: var(--accent);
486
+ }
487
+
488
+ .search-input::placeholder {
489
+ color: var(--text-muted);
490
+ }
491
+
472
492
  .icon-btn {
473
493
  width: 32px;
474
494
  height: 32px;
@@ -1019,6 +1039,8 @@
1019
1039
  <p id="session-meta" class="view-meta"></p>
1020
1040
  </div>
1021
1041
  <div class="view-actions">
1042
+ <input type="text" id="task-search" class="search-input"
1043
+ placeholder="Search tasks..." oninput="searchTasks(this.value)">
1022
1044
  <div class="view-progress">
1023
1045
  <div class="progress-bar">
1024
1046
  <div id="progress-bar" class="progress-fill" style="width: 0%"></div>
@@ -1090,6 +1112,7 @@
1090
1112
  let viewMode = 'session';
1091
1113
  let sessionFilter = localStorage.getItem('sessionFilter') || 'all'; // 'all' or 'active'
1092
1114
  let filterProject = null; // null = all projects, or project path to filter
1115
+ let searchQuery = '';
1093
1116
 
1094
1117
  // DOM
1095
1118
  const sessionsList = document.getElementById('sessions-list');
@@ -1161,6 +1184,7 @@
1161
1184
  async function fetchTasks(sessionId) {
1162
1185
  try {
1163
1186
  viewMode = 'session';
1187
+ clearSearch();
1164
1188
  const res = await fetch(`/api/sessions/${sessionId}`);
1165
1189
  currentTasks = await res.json();
1166
1190
  currentSessionId = sessionId;
@@ -1174,6 +1198,7 @@
1174
1198
  try {
1175
1199
  viewMode = 'all';
1176
1200
  currentSessionId = null;
1201
+ clearSearch();
1177
1202
  const res = await fetch('/api/tasks/all');
1178
1203
  let tasks = await res.json();
1179
1204
  if (filterProject) {
@@ -1311,9 +1336,17 @@
1311
1336
  }
1312
1337
 
1313
1338
  function renderKanban() {
1314
- const pending = currentTasks.filter(t => t.status === 'pending');
1315
- const inProgress = currentTasks.filter(t => t.status === 'in_progress');
1316
- const completed = currentTasks.filter(t => t.status === 'completed');
1339
+ let filteredTasks = currentTasks;
1340
+ if (searchQuery) {
1341
+ filteredTasks = currentTasks.filter(t =>
1342
+ t.subject.toLowerCase().includes(searchQuery) ||
1343
+ (t.description && t.description.toLowerCase().includes(searchQuery))
1344
+ );
1345
+ }
1346
+
1347
+ const pending = filteredTasks.filter(t => t.status === 'pending');
1348
+ const inProgress = filteredTasks.filter(t => t.status === 'in_progress');
1349
+ const completed = filteredTasks.filter(t => t.status === 'completed');
1317
1350
 
1318
1351
  pendingCount.textContent = pending.length;
1319
1352
  inProgressCount.textContent = inProgress.length;
@@ -1505,6 +1538,17 @@
1505
1538
  showAllTasks();
1506
1539
  }
1507
1540
 
1541
+ function searchTasks(query) {
1542
+ searchQuery = query.toLowerCase();
1543
+ renderKanban();
1544
+ }
1545
+
1546
+ function clearSearch() {
1547
+ searchQuery = '';
1548
+ const searchInput = document.getElementById('task-search');
1549
+ if (searchInput) searchInput.value = '';
1550
+ }
1551
+
1508
1552
  function updateProjectDropdown() {
1509
1553
  const dropdown = document.getElementById('project-filter');
1510
1554
  const projects = [...new Set(sessions.map(s => s.project).filter(Boolean))].sort();