@siteboon/claude-code-ui 1.8.2 → 1.8.3

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 (92) hide show
  1. package/dist/assets/index-BNGSzSdr.css +32 -0
  2. package/dist/assets/index-BZctMHnE.js +900 -0
  3. package/{index.html → dist/index.html} +4 -3
  4. package/package.json +6 -1
  5. package/server/database/auth.db +0 -0
  6. package/.env.example +0 -12
  7. package/.nvmrc +0 -1
  8. package/postcss.config.js +0 -6
  9. package/src/App.jsx +0 -751
  10. package/src/components/ChatInterface.jsx +0 -3485
  11. package/src/components/ClaudeLogo.jsx +0 -11
  12. package/src/components/ClaudeStatus.jsx +0 -107
  13. package/src/components/CodeEditor.jsx +0 -422
  14. package/src/components/CreateTaskModal.jsx +0 -88
  15. package/src/components/CursorLogo.jsx +0 -9
  16. package/src/components/DarkModeToggle.jsx +0 -35
  17. package/src/components/DiffViewer.jsx +0 -41
  18. package/src/components/ErrorBoundary.jsx +0 -73
  19. package/src/components/FileTree.jsx +0 -480
  20. package/src/components/GitPanel.jsx +0 -1283
  21. package/src/components/ImageViewer.jsx +0 -54
  22. package/src/components/LoginForm.jsx +0 -110
  23. package/src/components/MainContent.jsx +0 -577
  24. package/src/components/MicButton.jsx +0 -272
  25. package/src/components/MobileNav.jsx +0 -88
  26. package/src/components/NextTaskBanner.jsx +0 -695
  27. package/src/components/PRDEditor.jsx +0 -871
  28. package/src/components/ProtectedRoute.jsx +0 -44
  29. package/src/components/QuickSettingsPanel.jsx +0 -262
  30. package/src/components/Settings.jsx +0 -2023
  31. package/src/components/SetupForm.jsx +0 -135
  32. package/src/components/Shell.jsx +0 -663
  33. package/src/components/Sidebar.jsx +0 -1665
  34. package/src/components/StandaloneShell.jsx +0 -106
  35. package/src/components/TaskCard.jsx +0 -210
  36. package/src/components/TaskDetail.jsx +0 -406
  37. package/src/components/TaskIndicator.jsx +0 -108
  38. package/src/components/TaskList.jsx +0 -1054
  39. package/src/components/TaskMasterSetupWizard.jsx +0 -603
  40. package/src/components/TaskMasterStatus.jsx +0 -86
  41. package/src/components/TodoList.jsx +0 -91
  42. package/src/components/Tooltip.jsx +0 -91
  43. package/src/components/ui/badge.jsx +0 -31
  44. package/src/components/ui/button.jsx +0 -46
  45. package/src/components/ui/input.jsx +0 -19
  46. package/src/components/ui/scroll-area.jsx +0 -23
  47. package/src/contexts/AuthContext.jsx +0 -158
  48. package/src/contexts/TaskMasterContext.jsx +0 -324
  49. package/src/contexts/TasksSettingsContext.jsx +0 -95
  50. package/src/contexts/ThemeContext.jsx +0 -94
  51. package/src/contexts/WebSocketContext.jsx +0 -29
  52. package/src/hooks/useAudioRecorder.js +0 -109
  53. package/src/hooks/useVersionCheck.js +0 -39
  54. package/src/index.css +0 -822
  55. package/src/lib/utils.js +0 -6
  56. package/src/main.jsx +0 -10
  57. package/src/utils/api.js +0 -141
  58. package/src/utils/websocket.js +0 -109
  59. package/src/utils/whisper.js +0 -37
  60. package/tailwind.config.js +0 -63
  61. package/vite.config.js +0 -29
  62. /package/{public → dist}/convert-icons.md +0 -0
  63. /package/{public → dist}/favicon.png +0 -0
  64. /package/{public → dist}/favicon.svg +0 -0
  65. /package/{public → dist}/generate-icons.js +0 -0
  66. /package/{public → dist}/icons/claude-ai-icon.svg +0 -0
  67. /package/{public → dist}/icons/cursor.svg +0 -0
  68. /package/{public → dist}/icons/generate-icons.md +0 -0
  69. /package/{public → dist}/icons/icon-128x128.png +0 -0
  70. /package/{public → dist}/icons/icon-128x128.svg +0 -0
  71. /package/{public → dist}/icons/icon-144x144.png +0 -0
  72. /package/{public → dist}/icons/icon-144x144.svg +0 -0
  73. /package/{public → dist}/icons/icon-152x152.png +0 -0
  74. /package/{public → dist}/icons/icon-152x152.svg +0 -0
  75. /package/{public → dist}/icons/icon-192x192.png +0 -0
  76. /package/{public → dist}/icons/icon-192x192.svg +0 -0
  77. /package/{public → dist}/icons/icon-384x384.png +0 -0
  78. /package/{public → dist}/icons/icon-384x384.svg +0 -0
  79. /package/{public → dist}/icons/icon-512x512.png +0 -0
  80. /package/{public → dist}/icons/icon-512x512.svg +0 -0
  81. /package/{public → dist}/icons/icon-72x72.png +0 -0
  82. /package/{public → dist}/icons/icon-72x72.svg +0 -0
  83. /package/{public → dist}/icons/icon-96x96.png +0 -0
  84. /package/{public → dist}/icons/icon-96x96.svg +0 -0
  85. /package/{public → dist}/icons/icon-template.svg +0 -0
  86. /package/{public → dist}/logo.svg +0 -0
  87. /package/{public → dist}/manifest.json +0 -0
  88. /package/{public → dist}/screenshots/cli-selection.png +0 -0
  89. /package/{public → dist}/screenshots/desktop-main.png +0 -0
  90. /package/{public → dist}/screenshots/mobile-chat.png +0 -0
  91. /package/{public → dist}/screenshots/tools-modal.png +0 -0
  92. /package/{public → dist}/sw.js +0 -0
@@ -1,106 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import Shell from './Shell.jsx';
3
-
4
- /**
5
- * Generic Shell wrapper that can be used in tabs, modals, and other contexts.
6
- * Provides a flexible API for both standalone and session-based usage.
7
- *
8
- * @param {Object} project - Project object with name, fullPath/path, displayName
9
- * @param {Object} session - Session object (optional, for tab usage)
10
- * @param {string} command - Initial command to run (optional)
11
- * @param {boolean} isActive - Whether the shell is active (for tab usage, default: true)
12
- * @param {boolean} isPlainShell - Use plain shell mode vs Claude CLI (default: auto-detect)
13
- * @param {boolean} autoConnect - Whether to auto-connect when mounted (default: true)
14
- * @param {function} onComplete - Callback when process completes (receives exitCode)
15
- * @param {function} onClose - Callback for close button (optional)
16
- * @param {string} title - Custom header title (optional)
17
- * @param {string} className - Additional CSS classes
18
- * @param {boolean} showHeader - Whether to show custom header (default: true)
19
- * @param {boolean} compact - Use compact layout (default: false)
20
- */
21
- function StandaloneShell({
22
- project,
23
- session = null,
24
- command = null,
25
- isActive = true,
26
- isPlainShell = null, // Auto-detect: true if command provided, false if session provided
27
- autoConnect = true,
28
- onComplete = null,
29
- onClose = null,
30
- title = null,
31
- className = "",
32
- showHeader = true,
33
- compact = false
34
- }) {
35
- const [isCompleted, setIsCompleted] = useState(false);
36
-
37
- // Auto-detect isPlainShell based on props
38
- const shouldUsePlainShell = isPlainShell !== null ? isPlainShell : (command !== null);
39
-
40
- // Handle process completion
41
- const handleProcessComplete = (exitCode) => {
42
- setIsCompleted(true);
43
- if (onComplete) {
44
- onComplete(exitCode);
45
- }
46
- };
47
-
48
- if (!project) {
49
- return (
50
- <div className={`h-full flex items-center justify-center ${className}`}>
51
- <div className="text-center text-gray-500 dark:text-gray-400">
52
- <div className="w-16 h-16 mx-auto mb-4 bg-gray-100 dark:bg-gray-800 rounded-full flex items-center justify-center">
53
- <svg className="w-8 h-8 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
54
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 002 2z" />
55
- </svg>
56
- </div>
57
- <h3 className="text-lg font-semibold mb-2">No Project Selected</h3>
58
- <p>A project is required to open a shell</p>
59
- </div>
60
- </div>
61
- );
62
- }
63
-
64
- return (
65
- <div className={`h-full flex flex-col ${className}`}>
66
- {/* Optional custom header */}
67
- {showHeader && title && (
68
- <div className="flex-shrink-0 bg-gray-800 border-b border-gray-700 px-4 py-2">
69
- <div className="flex items-center justify-between">
70
- <div className="flex items-center space-x-2">
71
- <h3 className="text-sm font-medium text-gray-200">{title}</h3>
72
- {isCompleted && (
73
- <span className="text-xs text-green-400">(Completed)</span>
74
- )}
75
- </div>
76
- {onClose && (
77
- <button
78
- onClick={onClose}
79
- className="text-gray-400 hover:text-white"
80
- title="Close"
81
- >
82
- <svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
83
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" />
84
- </svg>
85
- </button>
86
- )}
87
- </div>
88
- </div>
89
- )}
90
-
91
- {/* Shell component wrapper */}
92
- <div className="flex-1">
93
- <Shell
94
- selectedProject={project}
95
- selectedSession={session}
96
- isActive={isActive}
97
- initialCommand={command}
98
- isPlainShell={shouldUsePlainShell}
99
- onProcessComplete={handleProcessComplete}
100
- />
101
- </div>
102
- </div>
103
- );
104
- }
105
-
106
- export default StandaloneShell;
@@ -1,210 +0,0 @@
1
- import React from 'react';
2
- import { Clock, CheckCircle, Circle, AlertCircle, Pause, X, ArrowRight, ChevronUp, Minus, Flag } from 'lucide-react';
3
- import { cn } from '../lib/utils';
4
- import Tooltip from './Tooltip';
5
-
6
- const TaskCard = ({
7
- task,
8
- onClick,
9
- showParent = false,
10
- className = ''
11
- }) => {
12
- const getStatusConfig = (status) => {
13
- switch (status) {
14
- case 'done':
15
- return {
16
- icon: CheckCircle,
17
- bgColor: 'bg-green-50 dark:bg-green-950',
18
- borderColor: 'border-green-200 dark:border-green-800',
19
- iconColor: 'text-green-600 dark:text-green-400',
20
- textColor: 'text-green-900 dark:text-green-100',
21
- statusText: 'Done'
22
- };
23
-
24
- case 'in-progress':
25
- return {
26
- icon: Clock,
27
- bgColor: 'bg-blue-50 dark:bg-blue-950',
28
- borderColor: 'border-blue-200 dark:border-blue-800',
29
- iconColor: 'text-blue-600 dark:text-blue-400',
30
- textColor: 'text-blue-900 dark:text-blue-100',
31
- statusText: 'In Progress'
32
- };
33
-
34
- case 'review':
35
- return {
36
- icon: AlertCircle,
37
- bgColor: 'bg-amber-50 dark:bg-amber-950',
38
- borderColor: 'border-amber-200 dark:border-amber-800',
39
- iconColor: 'text-amber-600 dark:text-amber-400',
40
- textColor: 'text-amber-900 dark:text-amber-100',
41
- statusText: 'Review'
42
- };
43
-
44
- case 'deferred':
45
- return {
46
- icon: Pause,
47
- bgColor: 'bg-gray-50 dark:bg-gray-800',
48
- borderColor: 'border-gray-200 dark:border-gray-700',
49
- iconColor: 'text-gray-500 dark:text-gray-400',
50
- textColor: 'text-gray-700 dark:text-gray-300',
51
- statusText: 'Deferred'
52
- };
53
-
54
- case 'cancelled':
55
- return {
56
- icon: X,
57
- bgColor: 'bg-red-50 dark:bg-red-950',
58
- borderColor: 'border-red-200 dark:border-red-800',
59
- iconColor: 'text-red-600 dark:text-red-400',
60
- textColor: 'text-red-900 dark:text-red-100',
61
- statusText: 'Cancelled'
62
- };
63
-
64
- case 'pending':
65
- default:
66
- return {
67
- icon: Circle,
68
- bgColor: 'bg-slate-50 dark:bg-slate-800',
69
- borderColor: 'border-slate-200 dark:border-slate-700',
70
- iconColor: 'text-slate-500 dark:text-slate-400',
71
- textColor: 'text-slate-900 dark:text-slate-100',
72
- statusText: 'Pending'
73
- };
74
- }
75
- };
76
-
77
- const config = getStatusConfig(task.status);
78
- const Icon = config.icon;
79
-
80
- const getPriorityIcon = (priority) => {
81
- switch (priority) {
82
- case 'high':
83
- return (
84
- <Tooltip content="High Priority">
85
- <div className="w-4 h-4 bg-red-100 dark:bg-red-900/30 rounded flex items-center justify-center">
86
- <ChevronUp className="w-2.5 h-2.5 text-red-600 dark:text-red-400" />
87
- </div>
88
- </Tooltip>
89
- );
90
- case 'medium':
91
- return (
92
- <Tooltip content="Medium Priority">
93
- <div className="w-4 h-4 bg-amber-100 dark:bg-amber-900/30 rounded flex items-center justify-center">
94
- <Minus className="w-2.5 h-2.5 text-amber-600 dark:text-amber-400" />
95
- </div>
96
- </Tooltip>
97
- );
98
- case 'low':
99
- return (
100
- <Tooltip content="Low Priority">
101
- <div className="w-4 h-4 bg-blue-100 dark:bg-blue-900/30 rounded flex items-center justify-center">
102
- <Circle className="w-1.5 h-1.5 text-blue-600 dark:text-blue-400 fill-current" />
103
- </div>
104
- </Tooltip>
105
- );
106
- default:
107
- return (
108
- <Tooltip content="No Priority Set">
109
- <div className="w-4 h-4 bg-gray-100 dark:bg-gray-800 rounded flex items-center justify-center">
110
- <Circle className="w-1.5 h-1.5 text-gray-400 dark:text-gray-500" />
111
- </div>
112
- </Tooltip>
113
- );
114
- }
115
- };
116
-
117
- return (
118
- <div
119
- className={cn(
120
- 'bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700',
121
- 'hover:shadow-md hover:border-blue-300 dark:hover:border-blue-600 transition-all duration-200 cursor-pointer',
122
- 'p-3 space-y-3',
123
- onClick && 'hover:-translate-y-0.5',
124
- className
125
- )}
126
- onClick={onClick}
127
- >
128
- {/* Header with Task ID, Title, and Priority */}
129
- <div className="flex items-start justify-between gap-2 mb-2">
130
- {/* Task ID and Title */}
131
- <div className="flex-1 min-w-0">
132
- <div className="flex items-center gap-2 mb-1">
133
- <Tooltip content={`Task ID: ${task.id}`}>
134
- <span className="text-xs font-mono text-gray-500 dark:text-gray-400 bg-gray-100 dark:bg-gray-700 px-2 py-0.5 rounded">
135
- {task.id}
136
- </span>
137
- </Tooltip>
138
- </div>
139
- <h3 className="font-medium text-sm text-gray-900 dark:text-white line-clamp-2 leading-tight">
140
- {task.title}
141
- </h3>
142
- {showParent && task.parentId && (
143
- <span className="text-xs text-gray-500 dark:text-gray-400 font-medium">
144
- Task {task.parentId}
145
- </span>
146
- )}
147
- </div>
148
-
149
- {/* Priority Icon */}
150
- <div className="flex-shrink-0">
151
- {getPriorityIcon(task.priority)}
152
- </div>
153
- </div>
154
-
155
- {/* Footer with Dependencies and Status */}
156
- <div className="flex items-center justify-between">
157
- {/* Dependencies */}
158
- <div className="flex items-center">
159
- {task.dependencies && Array.isArray(task.dependencies) && task.dependencies.length > 0 && (
160
- <Tooltip content={`Depends on: ${task.dependencies.map(dep => `Task ${dep}`).join(', ')}`}>
161
- <div className="flex items-center gap-1 text-xs text-amber-600 dark:text-amber-400">
162
- <ArrowRight className="w-3 h-3" />
163
- <span>Depends on: {task.dependencies.join(', ')}</span>
164
- </div>
165
- </Tooltip>
166
- )}
167
- </div>
168
-
169
- {/* Status Badge */}
170
- <Tooltip content={`Status: ${config.statusText}`}>
171
- <div className="flex items-center gap-1">
172
- <div className={cn('w-2 h-2 rounded-full', config.iconColor.replace('text-', 'bg-'))} />
173
- <span className={cn('text-xs font-medium', config.textColor)}>
174
- {config.statusText}
175
- </span>
176
- </div>
177
- </Tooltip>
178
- </div>
179
-
180
- {/* Subtask Progress (if applicable) */}
181
- {task.subtasks && task.subtasks.length > 0 && (
182
- <div className="ml-3">
183
- <div className="flex items-center gap-2 mb-1">
184
- <span className="text-xs text-gray-500 dark:text-gray-400">Progress:</span>
185
- <Tooltip content={`${task.subtasks.filter(st => st.status === 'done').length} of ${task.subtasks.length} subtasks completed`}>
186
- <div className="flex-1 bg-gray-200 dark:bg-gray-700 rounded-full h-1.5">
187
- <div
188
- className={cn(
189
- 'h-full rounded-full transition-all duration-300',
190
- task.status === 'done' ? 'bg-green-500' : 'bg-blue-500'
191
- )}
192
- style={{
193
- width: `${Math.round((task.subtasks.filter(st => st.status === 'done').length / task.subtasks.length) * 100)}%`
194
- }}
195
- />
196
- </div>
197
- </Tooltip>
198
- <Tooltip content={`${task.subtasks.filter(st => st.status === 'done').length} completed, ${task.subtasks.filter(st => st.status === 'pending').length} pending, ${task.subtasks.filter(st => st.status === 'in-progress').length} in progress`}>
199
- <span className="text-xs text-gray-500 dark:text-gray-400">
200
- {task.subtasks.filter(st => st.status === 'done').length}/{task.subtasks.length}
201
- </span>
202
- </Tooltip>
203
- </div>
204
- </div>
205
- )}
206
- </div>
207
- );
208
- };
209
-
210
- export default TaskCard;