claude-code-workflow 6.0.4 → 6.1.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 (120) hide show
  1. package/.claude/agents/action-planning-agent.md +1 -1
  2. package/.claude/agents/cli-execution-agent.md +269 -269
  3. package/.claude/agents/cli-explore-agent.md +182 -182
  4. package/.claude/agents/context-search-agent.md +582 -582
  5. package/.claude/agents/memory-bridge.md +93 -93
  6. package/.claude/commands/cli/cli-init.md +1 -1
  7. package/.claude/commands/memory/docs-full-cli.md +471 -471
  8. package/.claude/commands/memory/docs-related-cli.md +386 -386
  9. package/.claude/commands/memory/docs.md +615 -615
  10. package/.claude/commands/memory/load.md +1 -1
  11. package/.claude/commands/memory/update-full.md +332 -332
  12. package/.claude/commands/memory/update-related.md +5 -5
  13. package/.claude/commands/workflow/init.md +1 -1
  14. package/.claude/commands/workflow/lite-fix.md +621 -621
  15. package/.claude/commands/workflow/lite-plan.md +592 -592
  16. package/.claude/commands/workflow/tools/context-gather.md +434 -434
  17. package/.claude/commands/workflow/ui-design/generate.md +504 -504
  18. package/.claude/commands/workflow/ui-design/import-from-code.md +537 -537
  19. package/.claude/scripts/classify-folders.sh +4 -0
  20. package/.claude/scripts/convert_tokens_to_css.sh +4 -0
  21. package/.claude/scripts/detect_changed_modules.sh +5 -1
  22. package/.claude/scripts/discover-design-files.sh +87 -83
  23. package/.claude/scripts/generate_module_docs.sh +717 -713
  24. package/.claude/scripts/get_modules_by_depth.sh +5 -1
  25. package/.claude/scripts/ui-generate-preview.sh +4 -0
  26. package/.claude/scripts/ui-instantiate-prototypes.sh +4 -0
  27. package/.claude/scripts/update_module_claude.sh +4 -0
  28. package/.claude/skills/command-guide/index/all-commands.json +1 -12
  29. package/.claude/skills/command-guide/index/by-category.json +1 -12
  30. package/.claude/skills/command-guide/index/by-use-case.json +1 -12
  31. package/.claude/skills/command-guide/index/essential-commands.json +1 -12
  32. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +127 -71
  33. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +269 -269
  34. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +182 -182
  35. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +18 -38
  36. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +582 -577
  37. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +93 -93
  38. package/.claude/skills/command-guide/reference/commands/cli/cli-init.md +1 -1
  39. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +471 -471
  40. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +386 -386
  41. package/.claude/skills/command-guide/reference/commands/memory/docs.md +615 -610
  42. package/.claude/skills/command-guide/reference/commands/memory/load.md +1 -1
  43. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +332 -332
  44. package/.claude/skills/command-guide/reference/commands/memory/update-related.md +5 -5
  45. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/artifacts.md +299 -451
  46. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +14 -37
  47. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/synthesis.md +252 -350
  48. package/.claude/skills/command-guide/reference/commands/workflow/init.md +2 -2
  49. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +52 -0
  50. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +621 -602
  51. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +46 -36
  52. package/.claude/skills/command-guide/reference/commands/workflow/review-fix.md +18 -58
  53. package/.claude/skills/command-guide/reference/commands/workflow/review-module-cycle.md +22 -52
  54. package/.claude/skills/command-guide/reference/commands/workflow/review-session-cycle.md +19 -48
  55. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +25 -5
  56. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +1 -1
  57. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +7 -7
  58. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +434 -434
  59. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +151 -11
  60. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +4 -4
  61. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-task-generate.md +1 -1
  62. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/generate.md +504 -504
  63. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +537 -537
  64. package/.claude/workflows/context-search-strategy.md +77 -77
  65. package/.claude/workflows/tool-strategy.md +90 -71
  66. package/.claude/workflows/workflow-architecture.md +1 -1
  67. package/ccw/package.json +6 -6
  68. package/ccw/src/cli.js +16 -0
  69. package/ccw/src/commands/stop.js +101 -0
  70. package/ccw/src/commands/tool.js +181 -0
  71. package/ccw/src/core/dashboard-generator.js +18 -3
  72. package/ccw/src/core/lite-scanner.js +35 -11
  73. package/ccw/src/core/server.js +583 -17
  74. package/ccw/src/templates/dashboard-css/01-base.css +161 -0
  75. package/ccw/src/templates/dashboard-css/02-session.css +726 -0
  76. package/ccw/src/templates/dashboard-css/03-tasks.css +512 -0
  77. package/ccw/src/templates/dashboard-css/04-lite-tasks.css +843 -0
  78. package/ccw/src/templates/dashboard-css/05-context.css +2206 -0
  79. package/ccw/src/templates/dashboard-css/06-cards.css +1570 -0
  80. package/ccw/src/templates/dashboard-css/07-managers.css +936 -0
  81. package/ccw/src/templates/dashboard-css/08-review.css +1266 -0
  82. package/ccw/src/templates/dashboard-css/09-explorer.css +1397 -0
  83. package/ccw/src/templates/dashboard-js/components/global-notifications.js +219 -0
  84. package/ccw/src/templates/dashboard-js/components/hook-manager.js +10 -0
  85. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +24 -2
  86. package/ccw/src/templates/dashboard-js/components/navigation.js +11 -5
  87. package/ccw/src/templates/dashboard-js/components/tabs-context.js +20 -20
  88. package/ccw/src/templates/dashboard-js/components/tabs-other.js +11 -11
  89. package/ccw/src/templates/dashboard-js/components/theme.js +29 -1
  90. package/ccw/src/templates/dashboard-js/main.js +4 -0
  91. package/ccw/src/templates/dashboard-js/state.js +5 -0
  92. package/ccw/src/templates/dashboard-js/views/explorer.js +852 -0
  93. package/ccw/src/templates/dashboard-js/views/home.js +13 -9
  94. package/ccw/src/templates/dashboard-js/views/hook-manager.js +8 -5
  95. package/ccw/src/templates/dashboard-js/views/lite-tasks.js +21 -16
  96. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +148 -8
  97. package/ccw/src/templates/dashboard-js/views/project-overview.js +15 -11
  98. package/ccw/src/templates/dashboard-js/views/review-session.js +3 -3
  99. package/ccw/src/templates/dashboard-js/views/session-detail.js +38 -28
  100. package/ccw/src/templates/dashboard.html +129 -28
  101. package/ccw/src/tools/classify-folders.js +204 -0
  102. package/ccw/src/tools/convert-tokens-to-css.js +250 -0
  103. package/ccw/src/tools/detect-changed-modules.js +288 -0
  104. package/ccw/src/tools/discover-design-files.js +134 -0
  105. package/ccw/src/tools/edit-file.js +266 -0
  106. package/ccw/src/tools/generate-module-docs.js +416 -0
  107. package/ccw/src/tools/get-modules-by-depth.js +308 -0
  108. package/ccw/src/tools/index.js +176 -0
  109. package/ccw/src/tools/ui-generate-preview.js +327 -0
  110. package/ccw/src/tools/ui-instantiate-prototypes.js +301 -0
  111. package/ccw/src/tools/update-module-claude.js +380 -0
  112. package/ccw/src/utils/browser-launcher.js +15 -4
  113. package/package.json +1 -1
  114. package/.claude/skills/command-guide/reference/commands/workflow/status.md +0 -352
  115. package/ccw/src/core/server.js.bak +0 -385
  116. package/ccw/src/core/server_original.bak +0 -385
  117. package/ccw/src/templates/dashboard.css +0 -8114
  118. package/ccw/src/templates/dashboard_tailwind.html +0 -42
  119. package/ccw/src/templates/dashboard_test.html +0 -37
  120. package/ccw/src/templates/tailwind-base.css +0 -212
@@ -81,26 +81,26 @@ function showSessionDetailPage(sessionKey) {
81
81
  <!-- Tab Navigation -->
82
82
  <div class="detail-tabs">
83
83
  <button class="detail-tab active" data-tab="tasks" onclick="switchDetailTab('tasks')">
84
- <span class="tab-icon">📋</span>
84
+ <span class="tab-icon"><i data-lucide="list-checks" class="w-4 h-4"></i></span>
85
85
  <span class="tab-text">Tasks</span>
86
86
  <span class="tab-count">${tasks.length}</span>
87
87
  </button>
88
88
  <button class="detail-tab" data-tab="context" onclick="switchDetailTab('context')">
89
- <span class="tab-icon">📦</span>
89
+ <span class="tab-icon"><i data-lucide="package" class="w-4 h-4"></i></span>
90
90
  <span class="tab-text">Context</span>
91
91
  </button>
92
92
  <button class="detail-tab" data-tab="summary" onclick="switchDetailTab('summary')">
93
- <span class="tab-icon">📝</span>
93
+ <span class="tab-icon"><i data-lucide="file-text" class="w-4 h-4"></i></span>
94
94
  <span class="tab-text">Summary</span>
95
95
  </button>
96
96
  <button class="detail-tab" data-tab="impl-plan" onclick="switchDetailTab('impl-plan')">
97
- <span class="tab-icon">📐</span>
97
+ <span class="tab-icon"><i data-lucide="ruler" class="w-4 h-4"></i></span>
98
98
  <span class="tab-text">IMPL Plan</span>
99
99
  </button>
100
- <button class="detail-tab" data-tab="conflict" onclick="switchDetailTab('conflict')"> <span class="tab-icon">⚖️</span> <span class="tab-text">Conflict</span> </button>
100
+ <button class="detail-tab" data-tab="conflict" onclick="switchDetailTab('conflict')"> <span class="tab-icon"><i data-lucide="scale" class="w-4 h-4"></i></span> <span class="tab-text">Conflict</span> </button>
101
101
  ${session.hasReview ? `
102
102
  <button class="detail-tab" data-tab="review" onclick="switchDetailTab('review')">
103
- <span class="tab-icon">🔍</span>
103
+ <span class="tab-icon"><i data-lucide="search" class="w-4 h-4"></i></span>
104
104
  <span class="tab-text">Review</span>
105
105
  </button>
106
106
  ` : ''}
@@ -112,6 +112,9 @@ function showSessionDetailPage(sessionKey) {
112
112
  </div>
113
113
  </div>
114
114
  `;
115
+
116
+ // Initialize Lucide icons
117
+ if (typeof lucide !== 'undefined') lucide.createIcons();
115
118
  }
116
119
 
117
120
  function goBackToSessions() {
@@ -175,21 +178,21 @@ function renderTasksTab(session, tasks, completed, inProgress, pending) {
175
178
  <!-- Combined Stats & Actions Bar -->
176
179
  <div class="task-toolbar">
177
180
  <div class="task-stats-bar">
178
- <span class="task-stat completed">✓ ${completed} completed</span>
179
- <span class="task-stat in-progress">⟳ ${inProgress} in progress</span>
180
- <span class="task-stat pending">○ ${pending} pending</span>
181
+ <span class="task-stat completed"><i data-lucide="check-circle" class="w-4 h-4 inline mr-1"></i>${completed} completed</span>
182
+ <span class="task-stat in-progress"><i data-lucide="loader-2" class="w-4 h-4 inline mr-1"></i>${inProgress} in progress</span>
183
+ <span class="task-stat pending"><i data-lucide="circle" class="w-4 h-4 inline mr-1"></i>${pending} pending</span>
181
184
  </div>
182
185
  <div class="toolbar-divider"></div>
183
186
  <div class="task-bulk-actions">
184
187
  <span class="bulk-label">Quick Actions:</span>
185
188
  <button class="bulk-action-btn" onclick="bulkSetAllStatus('pending')" title="Set all tasks to pending">
186
- <span class="bulk-icon">○</span> All Pending
189
+ <span class="bulk-icon"><i data-lucide="circle" class="w-4 h-4"></i></span> All Pending
187
190
  </button>
188
191
  <button class="bulk-action-btn" onclick="bulkSetAllStatus('in_progress')" title="Set all tasks to in progress">
189
- <span class="bulk-icon">⟳</span> All In Progress
192
+ <span class="bulk-icon"><i data-lucide="loader-2" class="w-4 h-4"></i></span> All In Progress
190
193
  </button>
191
194
  <button class="bulk-action-btn completed" onclick="bulkSetAllStatus('completed')" title="Set all tasks to completed">
192
- <span class="bulk-icon">✓</span> All Completed
195
+ <span class="bulk-icon"><i data-lucide="check-circle" class="w-4 h-4"></i></span> All Completed
193
196
  </button>
194
197
  </div>
195
198
  </div>
@@ -199,7 +202,7 @@ function renderTasksTab(session, tasks, completed, inProgress, pending) {
199
202
  <div class="tab-loading">Loading task details...</div>
200
203
  ` : (tasks.length === 0 ? `
201
204
  <div class="tab-empty-state">
202
- <div class="empty-icon">📋</div>
205
+ <div class="empty-icon"><i data-lucide="clipboard-list" class="w-12 h-12"></i></div>
203
206
  <div class="empty-title">No Tasks</div>
204
207
  <div class="empty-text">This session has no tasks defined.</div>
205
208
  </div>
@@ -227,11 +230,12 @@ async function loadFullTaskDetails() {
227
230
  } else {
228
231
  tasksContainer.innerHTML = `
229
232
  <div class="tab-empty-state">
230
- <div class="empty-icon">📋</div>
233
+ <div class="empty-icon"><i data-lucide="clipboard-list" class="w-12 h-12"></i></div>
231
234
  <div class="empty-title">No Task Files</div>
232
235
  <div class="empty-text">No IMPL-*.json files found in .task/</div>
233
236
  </div>
234
237
  `;
238
+ if (typeof lucide !== 'undefined') lucide.createIcons();
235
239
  }
236
240
  }
237
241
  } catch (err) {
@@ -267,9 +271,9 @@ function renderDetailTaskItem(task) {
267
271
 
268
272
  function formatStatusLabel(status) {
269
273
  const labels = {
270
- 'pending': ' Pending',
271
- 'in_progress': ' In Progress',
272
- 'completed': ' Completed'
274
+ 'pending': '<i data-lucide="circle" class="w-3 h-3 inline mr-1"></i>Pending',
275
+ 'in_progress': '<i data-lucide="loader-2" class="w-3 h-3 inline mr-1"></i>In Progress',
276
+ 'completed': '<i data-lucide="check-circle" class="w-3 h-3 inline mr-1"></i>Completed'
273
277
  };
274
278
  return labels[status] || status;
275
279
  }
@@ -429,11 +433,12 @@ async function loadAndRenderContextTab(session, contentArea) {
429
433
  // Fallback: show placeholder
430
434
  contentArea.innerHTML = `
431
435
  <div class="tab-empty-state">
432
- <div class="empty-icon">📦</div>
436
+ <div class="empty-icon"><i data-lucide="package" class="w-12 h-12"></i></div>
433
437
  <div class="empty-title">Context Data</div>
434
438
  <div class="empty-text">Context data will be loaded from context-package.json</div>
435
439
  </div>
436
440
  `;
441
+ if (typeof lucide !== 'undefined') lucide.createIcons();
437
442
  } catch (err) {
438
443
  contentArea.innerHTML = `<div class="tab-error">Failed to load context: ${err.message}</div>`;
439
444
  }
@@ -453,11 +458,12 @@ async function loadAndRenderSummaryTab(session, contentArea) {
453
458
  }
454
459
  contentArea.innerHTML = `
455
460
  <div class="tab-empty-state">
456
- <div class="empty-icon">📝</div>
461
+ <div class="empty-icon"><i data-lucide="file-text" class="w-12 h-12"></i></div>
457
462
  <div class="empty-title">Summaries</div>
458
463
  <div class="empty-text">Session summaries will be loaded from .summaries/</div>
459
464
  </div>
460
465
  `;
466
+ if (typeof lucide !== 'undefined') lucide.createIcons();
461
467
  } catch (err) {
462
468
  contentArea.innerHTML = `<div class="tab-error">Failed to load summaries: ${err.message}</div>`;
463
469
  }
@@ -477,11 +483,12 @@ async function loadAndRenderImplPlanTab(session, contentArea) {
477
483
  }
478
484
  contentArea.innerHTML = `
479
485
  <div class="tab-empty-state">
480
- <div class="empty-icon">📐</div>
486
+ <div class="empty-icon"><i data-lucide="ruler" class="w-12 h-12"></i></div>
481
487
  <div class="empty-title">IMPL Plan</div>
482
488
  <div class="empty-text">IMPL plan will be loaded from IMPL_PLAN.md</div>
483
489
  </div>
484
490
  `;
491
+ if (typeof lucide !== 'undefined') lucide.createIcons();
485
492
  } catch (err) {
486
493
  contentArea.innerHTML = `<div class="tab-error">Failed to load IMPL plan: ${err.message}</div>`;
487
494
  }
@@ -501,11 +508,12 @@ async function loadAndRenderReviewTab(session, contentArea) {
501
508
  }
502
509
  contentArea.innerHTML = `
503
510
  <div class="tab-empty-state">
504
- <div class="empty-icon">🔍</div>
511
+ <div class="empty-icon"><i data-lucide="search" class="w-12 h-12"></i></div>
505
512
  <div class="empty-title">Review Data</div>
506
513
  <div class="empty-text">Review data will be loaded from review files</div>
507
514
  </div>
508
515
  `;
516
+ if (typeof lucide !== 'undefined') lucide.createIcons();
509
517
  } catch (err) {
510
518
  contentArea.innerHTML = `<div class="tab-error">Failed to load review: ${err.message}</div>`;
511
519
  }
@@ -574,7 +582,7 @@ async function updateSingleTaskStatus(taskId, newStatus) {
574
582
  // Update UI
575
583
  updateTaskItemUI(taskId, newStatus);
576
584
  updateTaskStatsBar();
577
- showToast(`Task ${taskId} ${formatStatusLabel(newStatus)}`, 'success');
585
+ showToast(`Task ${taskId} status updated`, 'success');
578
586
  } else {
579
587
  showToast(result.error || 'Failed to update status', 'error');
580
588
  // Revert select
@@ -616,7 +624,7 @@ async function bulkSetAllStatus(newStatus) {
616
624
  // Update all task UIs
617
625
  taskIds.forEach(id => updateTaskItemUI(id, newStatus));
618
626
  updateTaskStatsBar();
619
- showToast(`All ${taskIds.length} tasks → ${formatStatusLabel(newStatus)}`, 'success');
627
+ showToast(`All ${taskIds.length} tasks updated`, 'success');
620
628
  } else {
621
629
  showToast(result.error || 'Failed to bulk update', 'error');
622
630
  }
@@ -656,7 +664,7 @@ async function bulkSetPendingToInProgress() {
656
664
  if (result.success) {
657
665
  pendingTaskIds.forEach(id => updateTaskItemUI(id, 'in_progress'));
658
666
  updateTaskStatsBar();
659
- showToast(`${pendingTaskIds.length} tasks: Pending In Progress`, 'success');
667
+ showToast(`${pendingTaskIds.length} tasks moved to In Progress`, 'success');
660
668
  } else {
661
669
  showToast(result.error || 'Failed to update', 'error');
662
670
  }
@@ -696,7 +704,7 @@ async function bulkSetInProgressToCompleted() {
696
704
  if (result.success) {
697
705
  inProgressTaskIds.forEach(id => updateTaskItemUI(id, 'completed'));
698
706
  updateTaskStatsBar();
699
- showToast(`${inProgressTaskIds.length} tasks: In Progress → Completed`, 'success');
707
+ showToast(`${inProgressTaskIds.length} tasks completed`, 'success');
700
708
  } else {
701
709
  showToast(result.error || 'Failed to update', 'error');
702
710
  }
@@ -735,10 +743,12 @@ function updateTaskStatsBar() {
735
743
  const statsBar = document.querySelector('.task-stats-bar');
736
744
  if (statsBar) {
737
745
  statsBar.innerHTML = `
738
- <span class="task-stat completed">✓ ${completed} completed</span>
739
- <span class="task-stat in-progress">⟳ ${inProgress} in progress</span>
740
- <span class="task-stat pending">○ ${pending} pending</span>
746
+ <span class="task-stat completed"><i data-lucide="check-circle" class="w-4 h-4 inline mr-1"></i>${completed} completed</span>
747
+ <span class="task-stat in-progress"><i data-lucide="loader-2" class="w-4 h-4 inline mr-1"></i>${inProgress} in progress</span>
748
+ <span class="task-stat pending"><i data-lucide="circle" class="w-4 h-4 inline mr-1"></i>${pending} pending</span>
741
749
  `;
750
+ // Reinitialize Lucide icons
751
+ if (typeof lucide !== 'undefined') lucide.createIcons();
742
752
  }
743
753
  }
744
754
 
@@ -18,9 +18,11 @@
18
18
  'bg-card', 'bg-background', 'bg-hover', 'bg-accent', 'bg-muted', 'bg-primary', 'bg-success', 'bg-warning',
19
19
  'bg-success-light', 'bg-warning-light', 'bg-primary-light', 'bg-sidebar-background', 'bg-destructive',
20
20
  'bg-destructive/5', 'bg-destructive/10', 'bg-warning/5',
21
+ 'bg-info', 'bg-info-light', 'bg-indigo', 'bg-indigo-light', 'bg-orange', 'bg-orange-light',
21
22
  // Text colors
22
23
  'text-foreground', 'text-muted-foreground', 'text-primary', 'text-card-foreground', 'text-success', 'text-warning',
23
24
  'text-primary-foreground', 'text-accent-foreground', 'text-sidebar-foreground', 'text-destructive',
25
+ 'text-info', 'text-indigo', 'text-orange',
24
26
  // Border colors
25
27
  'border', 'border-border', 'border-primary', 'border-success', 'border-warning', 'border-muted',
26
28
  'border-l-success', 'border-l-warning', 'border-l-muted-foreground', 'border-l-primary',
@@ -74,6 +76,12 @@
74
76
  'success-light': 'hsl(var(--success-light))',
75
77
  warning: 'hsl(var(--warning))',
76
78
  'warning-light': 'hsl(var(--warning-light))',
79
+ info: 'hsl(var(--info))',
80
+ 'info-light': 'hsl(var(--info-light))',
81
+ indigo: 'hsl(var(--indigo))',
82
+ 'indigo-light': 'hsl(var(--indigo-light))',
83
+ orange: 'hsl(var(--orange))',
84
+ 'orange-light': 'hsl(var(--orange-light))',
77
85
  },
78
86
  fontFamily: {
79
87
  sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],
@@ -117,6 +125,12 @@
117
125
  --success-light: 142 76% 90%;
118
126
  --warning: 38 92% 50%;
119
127
  --warning-light: 48 96% 89%;
128
+ --info: 210 80% 55%;
129
+ --info-light: 210 80% 92%;
130
+ --indigo: 239 65% 60%;
131
+ --indigo-light: 239 65% 92%;
132
+ --orange: 25 90% 55%;
133
+ --orange-light: 25 90% 92%;
120
134
  }
121
135
 
122
136
  /* Dark Mode */
@@ -146,6 +160,12 @@
146
160
  --success-light: 142 50% 20%;
147
161
  --warning: 38 85% 45%;
148
162
  --warning-light: 40 50% 20%;
163
+ --info: 210 75% 50%;
164
+ --info-light: 210 50% 20%;
165
+ --indigo: 239 60% 55%;
166
+ --indigo-light: 239 40% 20%;
167
+ --orange: 25 85% 50%;
168
+ --orange-light: 25 50% 20%;
149
169
  }
150
170
 
151
171
  /* Scrollbar styling */
@@ -190,7 +210,35 @@
190
210
  .task-detail-drawer.open { transform: translateX(0); }
191
211
  .drawer-overlay.active { display: block; }
192
212
 
193
- /* Injected from dashboard.css */
213
+ /* Unified Icon System */
214
+ .nav-icon {
215
+ width: 18px;
216
+ height: 18px;
217
+ flex-shrink: 0;
218
+ stroke-width: 2;
219
+ }
220
+ .nav-section-icon {
221
+ width: 16px;
222
+ height: 16px;
223
+ flex-shrink: 0;
224
+ stroke-width: 2;
225
+ opacity: 0.8;
226
+ }
227
+ .sidebar.collapsed .nav-icon {
228
+ width: 20px;
229
+ height: 20px;
230
+ }
231
+
232
+ /* Icon Animations */
233
+ @keyframes spin {
234
+ from { transform: rotate(0deg); }
235
+ to { transform: rotate(360deg); }
236
+ }
237
+ .animate-spin {
238
+ animation: spin 1s linear infinite;
239
+ }
240
+
241
+ /* Injected from dashboard-css/*.css modules */
194
242
  {{CSS_CONTENT}}
195
243
  </style>
196
244
  </head>
@@ -199,9 +247,11 @@
199
247
  <!-- Top Bar -->
200
248
  <header class="flex items-center justify-between px-5 h-14 bg-card border-b border-border sticky top-0 z-50 shadow-sm">
201
249
  <div class="flex items-center gap-4">
202
- <button class="hidden md:hidden p-2 text-foreground hover:bg-hover rounded menu-toggle-btn" id="menuToggle">☰</button>
250
+ <button class="hidden md:hidden p-2 text-foreground hover:bg-hover rounded menu-toggle-btn" id="menuToggle">
251
+ <i data-lucide="menu" class="w-5 h-5"></i>
252
+ </button>
203
253
  <div class="flex items-center gap-2 text-lg font-semibold text-primary">
204
- <span class="text-2xl">⚡</span>
254
+ <i data-lucide="workflow" class="w-6 h-6"></i>
205
255
  <span class="hidden sm:inline">Claude Code Workflow</span>
206
256
  </div>
207
257
  </div>
@@ -223,7 +273,8 @@
223
273
  </div>
224
274
  <div class="p-2 border-t border-border">
225
275
  <button class="w-full flex items-center justify-center gap-2 px-3 py-2 bg-background border border-border rounded text-sm text-muted-foreground hover:bg-hover" id="browsePath">
226
- 📂 Browse...
276
+ <i data-lucide="folder-open" class="w-4 h-4"></i>
277
+ <span>Browse...</span>
227
278
  </button>
228
279
  </div>
229
280
  </div>
@@ -240,7 +291,10 @@
240
291
  </div>
241
292
 
242
293
  <!-- Theme Toggle -->
243
- <button class="p-2 text-xl hover:bg-hover rounded" id="themeToggle" title="Toggle theme">🌙</button>
294
+ <button class="p-2 hover:bg-hover rounded flex items-center justify-center" id="themeToggle" title="Toggle theme">
295
+ <i data-lucide="moon" class="w-5 h-5 theme-icon-dark"></i>
296
+ <i data-lucide="sun" class="w-5 h-5 theme-icon-light hidden"></i>
297
+ </button>
244
298
  </div>
245
299
  </header>
246
300
 
@@ -255,38 +309,42 @@
255
309
  <!-- Project Overview Section -->
256
310
  <div class="mb-2" id="projectOverviewNav">
257
311
  <div class="flex items-center px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide">
258
- <span class="mr-2">🏗️</span>
312
+ <i data-lucide="layout-dashboard" class="nav-section-icon mr-2"></i>
259
313
  <span class="nav-section-title">Project</span>
260
314
  </div>
261
315
  <ul class="space-y-0.5">
262
316
  <li class="nav-item flex items-center gap-2 mx-2 px-3 py-2.5 text-sm text-muted-foreground hover:bg-hover hover:text-foreground rounded cursor-pointer transition-colors" data-view="project-overview" data-tooltip="Project Overview">
263
- <span>📊</span>
317
+ <i data-lucide="bar-chart-3" class="nav-icon"></i>
264
318
  <span class="nav-text flex-1">Overview</span>
265
319
  </li>
320
+ <li class="nav-item flex items-center gap-2 mx-2 px-3 py-2.5 text-sm text-muted-foreground hover:bg-hover hover:text-foreground rounded cursor-pointer transition-colors" data-view="explorer" data-tooltip="File Explorer">
321
+ <i data-lucide="folder-tree" class="nav-icon"></i>
322
+ <span class="nav-text flex-1">Explorer</span>
323
+ </li>
266
324
  </ul>
267
325
  </div>
268
326
 
269
327
  <!-- Sessions Section -->
270
328
  <div class="mb-2">
271
329
  <div class="flex items-center px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide">
272
- <span class="mr-2">📁</span>
330
+ <i data-lucide="history" class="nav-section-icon mr-2"></i>
273
331
  <span class="nav-section-title">Sessions</span>
274
332
  </div>
275
333
  <ul class="space-y-0.5">
276
334
  <li class="nav-item flex items-center gap-2 mx-2 px-3 py-2.5 text-sm text-muted-foreground hover:bg-hover hover:text-foreground rounded cursor-pointer transition-colors active" data-filter="all" data-tooltip="All Sessions">
277
- <span>📋</span>
335
+ <i data-lucide="list" class="nav-icon"></i>
278
336
  <span class="nav-text flex-1">All</span>
279
337
  <span class="badge px-2 py-0.5 text-xs font-semibold rounded-full bg-hover text-muted-foreground" id="badgeAll">0</span>
280
338
  </li>
281
339
  <li class="nav-item flex items-center gap-2 mx-2 px-3 py-2.5 text-sm text-muted-foreground hover:bg-hover hover:text-foreground rounded cursor-pointer transition-colors" data-filter="active" data-tooltip="Active Sessions">
282
- <span>🟢</span>
340
+ <i data-lucide="play-circle" class="nav-icon text-success"></i>
283
341
  <span class="nav-text flex-1">Active</span>
284
342
  <span class="badge px-2 py-0.5 text-xs font-semibold rounded-full bg-success-light text-success" id="badgeActive">0</span>
285
343
  </li>
286
344
  <li class="nav-item flex items-center gap-2 mx-2 px-3 py-2.5 text-sm text-muted-foreground hover:bg-hover hover:text-foreground rounded cursor-pointer transition-colors" data-filter="archived" data-tooltip="Archived Sessions">
287
- <span>📦</span>
345
+ <i data-lucide="archive" class="nav-icon text-info"></i>
288
346
  <span class="nav-text flex-1">Archived</span>
289
- <span class="badge px-2 py-0.5 text-xs font-semibold rounded-full bg-hover text-muted-foreground" id="badgeArchived">0</span>
347
+ <span class="badge px-2 py-0.5 text-xs font-semibold rounded-full bg-info-light text-info" id="badgeArchived">0</span>
290
348
  </li>
291
349
  </ul>
292
350
  </div>
@@ -294,19 +352,19 @@
294
352
  <!-- Lite Tasks Section -->
295
353
  <div class="mb-2" id="liteTasksNav">
296
354
  <div class="flex items-center px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide">
297
- <span class="mr-2">⚡</span>
355
+ <i data-lucide="zap" class="nav-section-icon mr-2"></i>
298
356
  <span class="nav-section-title">Lite Tasks</span>
299
357
  </div>
300
358
  <ul class="space-y-0.5">
301
359
  <li class="nav-item flex items-center gap-2 mx-2 px-3 py-2.5 text-sm text-muted-foreground hover:bg-hover hover:text-foreground rounded cursor-pointer transition-colors" data-lite="lite-plan" data-tooltip="Lite Plan Sessions">
302
- <span>📝</span>
360
+ <i data-lucide="file-edit" class="nav-icon text-indigo"></i>
303
361
  <span class="nav-text flex-1">Lite Plan</span>
304
- <span class="badge px-2 py-0.5 text-xs font-semibold rounded-full bg-hover text-muted-foreground" id="badgeLitePlan">0</span>
362
+ <span class="badge px-2 py-0.5 text-xs font-semibold rounded-full bg-indigo-light text-indigo" id="badgeLitePlan">0</span>
305
363
  </li>
306
364
  <li class="nav-item flex items-center gap-2 mx-2 px-3 py-2.5 text-sm text-muted-foreground hover:bg-hover hover:text-foreground rounded cursor-pointer transition-colors" data-lite="lite-fix" data-tooltip="Lite Fix Sessions">
307
- <span>🔧</span>
365
+ <i data-lucide="wrench" class="nav-icon text-orange"></i>
308
366
  <span class="nav-text flex-1">Lite Fix</span>
309
- <span class="badge px-2 py-0.5 text-xs font-semibold rounded-full bg-hover text-muted-foreground" id="badgeLiteFix">0</span>
367
+ <span class="badge px-2 py-0.5 text-xs font-semibold rounded-full bg-orange-light text-orange" id="badgeLiteFix">0</span>
310
368
  </li>
311
369
  </ul>
312
370
  </div>
@@ -314,12 +372,12 @@
314
372
  <!-- MCP Servers Section -->
315
373
  <div class="mb-2" id="mcpServersNav">
316
374
  <div class="flex items-center px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide">
317
- <span class="mr-2">🔌</span>
375
+ <i data-lucide="plug" class="nav-section-icon mr-2"></i>
318
376
  <span class="nav-section-title">MCP Servers</span>
319
377
  </div>
320
378
  <ul class="space-y-0.5">
321
379
  <li class="nav-item flex items-center gap-2 mx-2 px-3 py-2.5 text-sm text-muted-foreground hover:bg-hover hover:text-foreground rounded cursor-pointer transition-colors" data-view="mcp-manager" data-tooltip="MCP Server Management">
322
- <span>⚙️</span>
380
+ <i data-lucide="settings" class="nav-icon"></i>
323
381
  <span class="nav-text flex-1">Manage</span>
324
382
  <span class="badge px-2 py-0.5 text-xs font-semibold rounded-full bg-hover text-muted-foreground" id="badgeMcpServers">0</span>
325
383
  </li>
@@ -329,12 +387,12 @@
329
387
  <!-- Hooks Section -->
330
388
  <div class="mb-2" id="hooksNav">
331
389
  <div class="flex items-center px-4 py-2 text-xs font-semibold text-muted-foreground uppercase tracking-wide">
332
- <span class="mr-2">🪝</span>
390
+ <i data-lucide="webhook" class="nav-section-icon mr-2"></i>
333
391
  <span class="nav-section-title">Hooks</span>
334
392
  </div>
335
393
  <ul class="space-y-0.5">
336
394
  <li class="nav-item flex items-center gap-2 mx-2 px-3 py-2.5 text-sm text-muted-foreground hover:bg-hover hover:text-foreground rounded cursor-pointer transition-colors" data-view="hook-manager" data-tooltip="Hook Management">
337
- <span>⚙️</span>
395
+ <i data-lucide="cable" class="nav-icon"></i>
338
396
  <span class="nav-text flex-1">Manage</span>
339
397
  <span class="badge px-2 py-0.5 text-xs font-semibold rounded-full bg-hover text-muted-foreground" id="badgeHooks">0</span>
340
398
  </li>
@@ -345,7 +403,7 @@
345
403
  <!-- Sidebar Footer -->
346
404
  <div class="p-3 border-t border-border">
347
405
  <button class="flex items-center justify-center gap-2 w-full px-3 py-2 border border-border rounded text-sm text-muted-foreground hover:bg-hover transition-colors" id="sidebarToggle">
348
- <span class="toggle-icon transition-transform duration-300">◀</span>
406
+ <i data-lucide="panel-left-close" class="toggle-icon w-4 h-4 transition-transform duration-300"></i>
349
407
  <span class="toggle-text">Collapse</span>
350
408
  </button>
351
409
  </div>
@@ -358,22 +416,22 @@
358
416
  <!-- Left: 4 Metrics Grid -->
359
417
  <div class="stats-metrics grid grid-cols-2 gap-3 shrink-0">
360
418
  <div class="bg-card border border-border rounded-lg p-4 text-center hover:shadow-md transition-all duration-200 min-w-[140px]">
361
- <div class="text-xl mb-1">📊</div>
419
+ <div class="flex justify-center mb-1 text-primary"><i data-lucide="layers" class="w-5 h-5"></i></div>
362
420
  <div class="text-2xl font-bold text-foreground" id="statTotalSessions">0</div>
363
421
  <div class="text-xs text-muted-foreground mt-1">Total Sessions</div>
364
422
  </div>
365
423
  <div class="bg-card border border-border rounded-lg p-4 text-center hover:shadow-md transition-all duration-200 min-w-[140px]">
366
- <div class="text-xl mb-1">🟢</div>
424
+ <div class="flex justify-center mb-1 text-success"><i data-lucide="activity" class="w-5 h-5"></i></div>
367
425
  <div class="text-2xl font-bold text-foreground" id="statActiveSessions">0</div>
368
426
  <div class="text-xs text-muted-foreground mt-1">Active Sessions</div>
369
427
  </div>
370
428
  <div class="bg-card border border-border rounded-lg p-4 text-center hover:shadow-md transition-all duration-200 min-w-[140px]">
371
- <div class="text-xl mb-1">📋</div>
429
+ <div class="flex justify-center mb-1 text-primary"><i data-lucide="clipboard-list" class="w-5 h-5"></i></div>
372
430
  <div class="text-2xl font-bold text-foreground" id="statTotalTasks">0</div>
373
431
  <div class="text-xs text-muted-foreground mt-1">Total Tasks</div>
374
432
  </div>
375
433
  <div class="bg-card border border-border rounded-lg p-4 text-center hover:shadow-md transition-all duration-200 min-w-[140px]">
376
- <div class="text-xl mb-1">✅</div>
434
+ <div class="flex justify-center mb-1 text-success"><i data-lucide="check-circle-2" class="w-5 h-5"></i></div>
377
435
  <div class="text-2xl font-bold text-foreground" id="statCompletedTasks">0</div>
378
436
  <div class="text-xs text-muted-foreground mt-1">Completed Tasks</div>
379
437
  </div>
@@ -386,7 +444,7 @@
386
444
  <!-- Dynamic carousel slides -->
387
445
  <div class="carousel-empty flex items-center justify-center h-full text-muted-foreground">
388
446
  <div class="text-center">
389
- <div class="text-3xl mb-2">🎯</div>
447
+ <div class="flex justify-center mb-2"><i data-lucide="target" class="w-8 h-8"></i></div>
390
448
  <p class="text-sm">No active sessions</p>
391
449
  </div>
392
450
  </div>
@@ -421,7 +479,7 @@
421
479
  <div class="flex items-center justify-between flex-wrap gap-3 mb-5">
422
480
  <h2 class="text-xl font-semibold text-foreground" id="contentTitle">All Sessions</h2>
423
481
  <div class="relative">
424
- <span class="absolute left-3 top-1/2 -translate-y-1/2 text-sm">🔍</span>
482
+ <i data-lucide="search" class="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"></i>
425
483
  <input type="text" placeholder="Search..." id="searchInput"
426
484
  class="pl-9 pr-4 py-2 w-60 border border-border rounded-lg bg-background text-foreground text-sm focus:outline-none focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all">
427
485
  </div>
@@ -618,10 +676,53 @@
618
676
  </div>
619
677
  </div>
620
678
 
679
+ <!-- Update CLAUDE.md Modal -->
680
+ <div id="updateClaudeMdModal" class="claude-md-modal hidden fixed inset-0 z-[100] flex items-center justify-center">
681
+ <div class="claude-md-modal-backdrop absolute inset-0 bg-black/60" onclick="closeUpdateClaudeMdModal()"></div>
682
+ <div class="claude-md-modal-content relative bg-card border border-border rounded-lg shadow-2xl w-[90vw] max-w-md flex flex-col">
683
+ <div class="claude-md-modal-header flex items-center justify-between px-4 py-3 border-b border-border">
684
+ <h3 class="text-lg font-semibold text-foreground">Update CLAUDE.md</h3>
685
+ <button class="w-8 h-8 flex items-center justify-center text-xl text-muted-foreground hover:text-foreground hover:bg-hover rounded" onclick="closeUpdateClaudeMdModal()">&times;</button>
686
+ </div>
687
+ <div class="claude-md-modal-body p-4 space-y-4">
688
+ <div class="claude-md-form-group">
689
+ <label>Target Directory</label>
690
+ <div class="claude-md-target-path" id="claudeMdTargetPath">-</div>
691
+ </div>
692
+ <div class="claude-md-form-group">
693
+ <label for="claudeMdTool">CLI Tool</label>
694
+ <select id="claudeMdTool">
695
+ <option value="gemini">Gemini (gemini-2.5-flash)</option>
696
+ <option value="qwen">Qwen (coder-model)</option>
697
+ <option value="codex">Codex (gpt5-codex)</option>
698
+ </select>
699
+ </div>
700
+ <div class="claude-md-form-group">
701
+ <label for="claudeMdStrategy">Strategy</label>
702
+ <select id="claudeMdStrategy">
703
+ <option value="single-layer">Single Layer - Current dir + child CLAUDE.md refs</option>
704
+ <option value="multi-layer">Multi Layer - Generate CLAUDE.md in all subdirs</option>
705
+ </select>
706
+ </div>
707
+ <div class="claude-md-status" id="claudeMdStatus"></div>
708
+ </div>
709
+ <div class="claude-md-modal-footer flex justify-end gap-2 px-4 py-3 border-t border-border">
710
+ <button class="px-4 py-2 text-sm bg-muted text-foreground rounded-lg hover:bg-hover transition-colors" onclick="closeUpdateClaudeMdModal()">Cancel</button>
711
+ <button class="px-4 py-2 text-sm bg-primary text-primary-foreground rounded-lg hover:opacity-90 transition-opacity" id="claudeMdExecuteBtn" onclick="executeUpdateClaudeMd()">Execute</button>
712
+ </div>
713
+ </div>
714
+ </div>
715
+
716
+ <!-- Lucide Icons -->
717
+ <script src="https://unpkg.com/lucide@latest"></script>
621
718
  <!-- D3.js for Flowchart -->
622
719
  <script src="https://d3js.org/d3.v7.min.js"></script>
623
720
  <!-- Marked.js for Markdown rendering -->
624
721
  <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
722
+ <!-- Highlight.js for Syntax Highlighting -->
723
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/styles/github-dark.min.css" id="hljs-theme-dark">
724
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/styles/github.min.css" id="hljs-theme-light" disabled>
725
+ <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/highlight.min.js"></script>
625
726
 
626
727
  <script>
627
728
  {{JS_CONTENT}}