@siteboon/claude-code-ui 1.8.2
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/.env.example +12 -0
- package/.nvmrc +1 -0
- package/LICENSE +675 -0
- package/README.md +275 -0
- package/index.html +48 -0
- package/package.json +84 -0
- package/postcss.config.js +6 -0
- package/public/convert-icons.md +53 -0
- package/public/favicon.png +0 -0
- package/public/favicon.svg +9 -0
- package/public/generate-icons.js +49 -0
- package/public/icons/claude-ai-icon.svg +1 -0
- package/public/icons/cursor.svg +1 -0
- package/public/icons/generate-icons.md +19 -0
- package/public/icons/icon-128x128.png +0 -0
- package/public/icons/icon-128x128.svg +12 -0
- package/public/icons/icon-144x144.png +0 -0
- package/public/icons/icon-144x144.svg +12 -0
- package/public/icons/icon-152x152.png +0 -0
- package/public/icons/icon-152x152.svg +12 -0
- package/public/icons/icon-192x192.png +0 -0
- package/public/icons/icon-192x192.svg +12 -0
- package/public/icons/icon-384x384.png +0 -0
- package/public/icons/icon-384x384.svg +12 -0
- package/public/icons/icon-512x512.png +0 -0
- package/public/icons/icon-512x512.svg +12 -0
- package/public/icons/icon-72x72.png +0 -0
- package/public/icons/icon-72x72.svg +12 -0
- package/public/icons/icon-96x96.png +0 -0
- package/public/icons/icon-96x96.svg +12 -0
- package/public/icons/icon-template.svg +12 -0
- package/public/logo.svg +9 -0
- package/public/manifest.json +61 -0
- package/public/screenshots/cli-selection.png +0 -0
- package/public/screenshots/desktop-main.png +0 -0
- package/public/screenshots/mobile-chat.png +0 -0
- package/public/screenshots/tools-modal.png +0 -0
- package/public/sw.js +49 -0
- package/server/claude-cli.js +391 -0
- package/server/cursor-cli.js +250 -0
- package/server/database/db.js +86 -0
- package/server/database/init.sql +16 -0
- package/server/index.js +1167 -0
- package/server/middleware/auth.js +80 -0
- package/server/projects.js +1063 -0
- package/server/routes/auth.js +135 -0
- package/server/routes/cursor.js +794 -0
- package/server/routes/git.js +823 -0
- package/server/routes/mcp-utils.js +48 -0
- package/server/routes/mcp.js +552 -0
- package/server/routes/taskmaster.js +1971 -0
- package/server/utils/mcp-detector.js +198 -0
- package/server/utils/taskmaster-websocket.js +129 -0
- package/src/App.jsx +751 -0
- package/src/components/ChatInterface.jsx +3485 -0
- package/src/components/ClaudeLogo.jsx +11 -0
- package/src/components/ClaudeStatus.jsx +107 -0
- package/src/components/CodeEditor.jsx +422 -0
- package/src/components/CreateTaskModal.jsx +88 -0
- package/src/components/CursorLogo.jsx +9 -0
- package/src/components/DarkModeToggle.jsx +35 -0
- package/src/components/DiffViewer.jsx +41 -0
- package/src/components/ErrorBoundary.jsx +73 -0
- package/src/components/FileTree.jsx +480 -0
- package/src/components/GitPanel.jsx +1283 -0
- package/src/components/ImageViewer.jsx +54 -0
- package/src/components/LoginForm.jsx +110 -0
- package/src/components/MainContent.jsx +577 -0
- package/src/components/MicButton.jsx +272 -0
- package/src/components/MobileNav.jsx +88 -0
- package/src/components/NextTaskBanner.jsx +695 -0
- package/src/components/PRDEditor.jsx +871 -0
- package/src/components/ProtectedRoute.jsx +44 -0
- package/src/components/QuickSettingsPanel.jsx +262 -0
- package/src/components/Settings.jsx +2023 -0
- package/src/components/SetupForm.jsx +135 -0
- package/src/components/Shell.jsx +663 -0
- package/src/components/Sidebar.jsx +1665 -0
- package/src/components/StandaloneShell.jsx +106 -0
- package/src/components/TaskCard.jsx +210 -0
- package/src/components/TaskDetail.jsx +406 -0
- package/src/components/TaskIndicator.jsx +108 -0
- package/src/components/TaskList.jsx +1054 -0
- package/src/components/TaskMasterSetupWizard.jsx +603 -0
- package/src/components/TaskMasterStatus.jsx +86 -0
- package/src/components/TodoList.jsx +91 -0
- package/src/components/Tooltip.jsx +91 -0
- package/src/components/ui/badge.jsx +31 -0
- package/src/components/ui/button.jsx +46 -0
- package/src/components/ui/input.jsx +19 -0
- package/src/components/ui/scroll-area.jsx +23 -0
- package/src/contexts/AuthContext.jsx +158 -0
- package/src/contexts/TaskMasterContext.jsx +324 -0
- package/src/contexts/TasksSettingsContext.jsx +95 -0
- package/src/contexts/ThemeContext.jsx +94 -0
- package/src/contexts/WebSocketContext.jsx +29 -0
- package/src/hooks/useAudioRecorder.js +109 -0
- package/src/hooks/useVersionCheck.js +39 -0
- package/src/index.css +822 -0
- package/src/lib/utils.js +6 -0
- package/src/main.jsx +10 -0
- package/src/utils/api.js +141 -0
- package/src/utils/websocket.js +109 -0
- package/src/utils/whisper.js +37 -0
- package/tailwind.config.js +63 -0
- package/vite.config.js +29 -0
package/README.md
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img src="public/logo.svg" alt="Claude Code UI" width="64" height="64">
|
|
3
|
+
<h1>Claude Code UI</h1>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
A desktop and mobile UI for [Claude Code](https://docs.anthropic.com/en/docs/claude-code), and [Cursor CLI](https://docs.cursor.com/en/cli/overview). You can use it locally or remotely to view your active projects and sessions in Claude Code or Cursor and make changes to them from everywhere (mobile or desktop). This gives you a proper interface that works everywhere. Supports models including **Claude Sonnet 4**, **Opus 4.1**, and **GPT-5**
|
|
8
|
+
|
|
9
|
+
## Screenshots
|
|
10
|
+
|
|
11
|
+
<div align="center">
|
|
12
|
+
|
|
13
|
+
<table>
|
|
14
|
+
<tr>
|
|
15
|
+
<td align="center">
|
|
16
|
+
<h3>Desktop View</h3>
|
|
17
|
+
<img src="public/screenshots/desktop-main.png" alt="Desktop Interface" width="400">
|
|
18
|
+
<br>
|
|
19
|
+
<em>Main interface showing project overview and chat</em>
|
|
20
|
+
</td>
|
|
21
|
+
<td align="center">
|
|
22
|
+
<h3>Mobile Experience</h3>
|
|
23
|
+
<img src="public/screenshots/mobile-chat.png" alt="Mobile Interface" width="250">
|
|
24
|
+
<br>
|
|
25
|
+
<em>Responsive mobile design with touch navigation</em>
|
|
26
|
+
</td>
|
|
27
|
+
</tr>
|
|
28
|
+
<tr>
|
|
29
|
+
<td align="center" colspan="2">
|
|
30
|
+
<h3>CLI Selection</h3>
|
|
31
|
+
<img src="public/screenshots/cli-selection.png" alt="CLI Selection" width="400">
|
|
32
|
+
<br>
|
|
33
|
+
<em>Select between Claude Code and Cursor CLI</em>
|
|
34
|
+
</td>
|
|
35
|
+
</tr>
|
|
36
|
+
</table>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
## Features
|
|
43
|
+
|
|
44
|
+
- **Responsive Design** - Works seamlessly across desktop, tablet, and mobile so you can also use Claude Code from mobile
|
|
45
|
+
- **Interactive Chat Interface** - Built-in chat interface for seamless communication with Claude Code or Cursor
|
|
46
|
+
- **Integrated Shell Terminal** - Direct access to Claude Code or Cursor CLI through built-in shell functionality
|
|
47
|
+
- **File Explorer** - Interactive file tree with syntax highlighting and live editing
|
|
48
|
+
- **Git Explorer** - View, stage and commit your changes. You can also switch branches
|
|
49
|
+
- **Session Management** - Resume conversations, manage multiple sessions, and track history
|
|
50
|
+
- **TaskMaster AI Integration** *(Optional)* - Advanced project management with AI-powered task planning, PRD parsing, and workflow automation
|
|
51
|
+
- **Model Compatibility** - Works with Claude Sonnet 4, Opus 4.1, and GPT-5
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
## Quick Start
|
|
55
|
+
|
|
56
|
+
### Prerequisites
|
|
57
|
+
|
|
58
|
+
- [Node.js](https://nodejs.org/) v20 or higher
|
|
59
|
+
- [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code) installed and configured, and/or
|
|
60
|
+
- [Cursor CLI](https://docs.cursor.com/en/cli/overview) installed and configured
|
|
61
|
+
|
|
62
|
+
### Installation
|
|
63
|
+
|
|
64
|
+
1. **Clone the repository:**
|
|
65
|
+
```bash
|
|
66
|
+
git clone https://github.com/siteboon/claudecodeui.git
|
|
67
|
+
cd claudecodeui
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
2. **Install dependencies:**
|
|
71
|
+
```bash
|
|
72
|
+
npm install
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
3. **Configure environment:**
|
|
76
|
+
```bash
|
|
77
|
+
cp .env.example .env
|
|
78
|
+
# Edit .env with your preferred settings
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
4. **Start the application:**
|
|
82
|
+
```bash
|
|
83
|
+
# Development mode (with hot reload)
|
|
84
|
+
npm run dev
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
The application will start at the port you specified in your .env
|
|
88
|
+
|
|
89
|
+
5. **Open your browser:**
|
|
90
|
+
- Development: `http://localhost:3001`
|
|
91
|
+
|
|
92
|
+
## Security & Tools Configuration
|
|
93
|
+
|
|
94
|
+
**🔒 Important Notice**: All Claude Code tools are **disabled by default**. This prevents potentially harmful operations from running automatically.
|
|
95
|
+
|
|
96
|
+
### Enabling Tools
|
|
97
|
+
|
|
98
|
+
To use Claude Code's full functionality, you'll need to manually enable tools:
|
|
99
|
+
|
|
100
|
+
1. **Open Tools Settings** - Click the gear icon in the sidebar
|
|
101
|
+
3. **Enable Selectively** - Turn on only the tools you need
|
|
102
|
+
4. **Apply Settings** - Your preferences are saved locally
|
|
103
|
+
|
|
104
|
+
<div align="center">
|
|
105
|
+
|
|
106
|
+

|
|
107
|
+
*Tools Settings interface - enable only what you need*
|
|
108
|
+
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
**Recommended approach**: Start with basic tools enabled and add more as needed. You can always adjust these settings later.
|
|
112
|
+
|
|
113
|
+
## TaskMaster AI Integration *(Optional)*
|
|
114
|
+
|
|
115
|
+
Claude Code UI supports **[TaskMaster AI](https://github.com/eyaltoledano/claude-task-master)** (aka claude-task-master) integration for advanced project management and AI-powered task planning.
|
|
116
|
+
|
|
117
|
+
It provides
|
|
118
|
+
- AI-powered task generation from PRDs (Product Requirements Documents)
|
|
119
|
+
- Smart task breakdown and dependency management
|
|
120
|
+
- Visual task boards and progress tracking
|
|
121
|
+
|
|
122
|
+
**Setup & Documentation**: Visit the [TaskMaster AI GitHub repository](https://github.com/eyaltoledano/claude-task-master) for installation instructions, configuration guides, and usage examples.
|
|
123
|
+
After installing it you should be able to enable it from the Settings
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
## Usage Guide
|
|
127
|
+
|
|
128
|
+
### Core Features
|
|
129
|
+
|
|
130
|
+
#### Project Management
|
|
131
|
+
The UI automatically discovers Claude Code projects from `~/.claude/projects/` and provides:
|
|
132
|
+
- **Visual Project Browser** - All available projects with metadata and session counts
|
|
133
|
+
- **Project Actions** - Rename, delete, and organize projects
|
|
134
|
+
- **Smart Navigation** - Quick access to recent projects and sessions
|
|
135
|
+
- **MCP support** - Add your own MCP servers through the UI
|
|
136
|
+
|
|
137
|
+
#### Chat Interface
|
|
138
|
+
- **Use responsive chat or Claude Code/Cursor CLI** - You can either use the adapted chat interface or use the shell button to connect to your selected CLI.
|
|
139
|
+
- **Real-time Communication** - Stream responses from Claude with WebSocket connection
|
|
140
|
+
- **Session Management** - Resume previous conversations or start fresh sessions
|
|
141
|
+
- **Message History** - Complete conversation history with timestamps and metadata
|
|
142
|
+
- **Multi-format Support** - Text, code blocks, and file references
|
|
143
|
+
|
|
144
|
+
#### File Explorer & Editor
|
|
145
|
+
- **Interactive File Tree** - Browse project structure with expand/collapse navigation
|
|
146
|
+
- **Live File Editing** - Read, modify, and save files directly in the interface
|
|
147
|
+
- **Syntax Highlighting** - Support for multiple programming languages
|
|
148
|
+
- **File Operations** - Create, rename, delete files and directories
|
|
149
|
+
|
|
150
|
+
#### Git Explorer
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
#### TaskMaster AI Integration *(Optional)*
|
|
154
|
+
- **Visual Task Board** - Kanban-style interface for managing development tasks
|
|
155
|
+
- **PRD Parser** - Create Product Requirements Documents and parse them into structured tasks
|
|
156
|
+
- **Progress Tracking** - Real-time status updates and completion tracking
|
|
157
|
+
|
|
158
|
+
#### Session Management
|
|
159
|
+
- **Session Persistence** - All conversations automatically saved
|
|
160
|
+
- **Session Organization** - Group sessions by project and timestamp
|
|
161
|
+
- **Session Actions** - Rename, delete, and export conversation history
|
|
162
|
+
- **Cross-device Sync** - Access sessions from any device
|
|
163
|
+
|
|
164
|
+
### Mobile App
|
|
165
|
+
- **Responsive Design** - Optimized for all screen sizes
|
|
166
|
+
- **Touch-friendly Interface** - Swipe gestures and touch navigation
|
|
167
|
+
- **Mobile Navigation** - Bottom tab bar for easy thumb navigation
|
|
168
|
+
- **Adaptive Layout** - Collapsible sidebar and smart content prioritization
|
|
169
|
+
- **Add shortcut to Home Screen** - Add a shortcut to your home screen and the app will behave like a PWA
|
|
170
|
+
|
|
171
|
+
## Architecture
|
|
172
|
+
|
|
173
|
+
### System Overview
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
177
|
+
│ Frontend │ │ Backend │ │ Claude CLI │
|
|
178
|
+
│ (React/Vite) │◄──►│ (Express/WS) │◄──►│ Integration │
|
|
179
|
+
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Backend (Node.js + Express)
|
|
183
|
+
- **Express Server** - RESTful API with static file serving
|
|
184
|
+
- **WebSocket Server** - Communication for chats and project refresh
|
|
185
|
+
- **CLI Integration (Claude Code / Cursor)** - Process spawning and management
|
|
186
|
+
- **Session Management** - JSONL parsing and conversation persistence
|
|
187
|
+
- **File System API** - Exposing file browser for projects
|
|
188
|
+
|
|
189
|
+
### Frontend (React + Vite)
|
|
190
|
+
- **React 18** - Modern component architecture with hooks
|
|
191
|
+
- **CodeMirror** - Advanced code editor with syntax highlighting
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
### Contributing
|
|
198
|
+
|
|
199
|
+
We welcome contributions! Please follow these guidelines:
|
|
200
|
+
|
|
201
|
+
#### Getting Started
|
|
202
|
+
1. **Fork** the repository
|
|
203
|
+
2. **Clone** your fork: `git clone <your-fork-url>`
|
|
204
|
+
3. **Install** dependencies: `npm install`
|
|
205
|
+
4. **Create** a feature branch: `git checkout -b feature/amazing-feature`
|
|
206
|
+
|
|
207
|
+
#### Development Process
|
|
208
|
+
1. **Make your changes** following the existing code style
|
|
209
|
+
2. **Test thoroughly** - ensure all features work correctly
|
|
210
|
+
3. **Run quality checks**: `npm run lint && npm run format`
|
|
211
|
+
4. **Commit** with descriptive messages following [Conventional Commits](https://conventionalcommits.org/)
|
|
212
|
+
5. **Push** to your branch: `git push origin feature/amazing-feature`
|
|
213
|
+
6. **Submit** a Pull Request with:
|
|
214
|
+
- Clear description of changes
|
|
215
|
+
- Screenshots for UI changes
|
|
216
|
+
- Test results if applicable
|
|
217
|
+
|
|
218
|
+
#### What to Contribute
|
|
219
|
+
- **Bug fixes** - Help us improve stability
|
|
220
|
+
- **New features** - Enhance functionality (discuss in issues first)
|
|
221
|
+
- **Documentation** - Improve guides and API docs
|
|
222
|
+
- **UI/UX improvements** - Better user experience
|
|
223
|
+
- **Performance optimizations** - Make it faster
|
|
224
|
+
|
|
225
|
+
## Troubleshooting
|
|
226
|
+
|
|
227
|
+
### Common Issues & Solutions
|
|
228
|
+
|
|
229
|
+
#### "No Claude projects found"
|
|
230
|
+
**Problem**: The UI shows no projects or empty project list
|
|
231
|
+
**Solutions**:
|
|
232
|
+
- Ensure [Claude CLI](https://docs.anthropic.com/en/docs/claude-code) is properly installed
|
|
233
|
+
- Run `claude` command in at least one project directory to initialize
|
|
234
|
+
- Verify `~/.claude/projects/` directory exists and has proper permissions
|
|
235
|
+
d
|
|
236
|
+
|
|
237
|
+
#### File Explorer Issues
|
|
238
|
+
**Problem**: Files not loading, permission errors, empty directories
|
|
239
|
+
**Solutions**:
|
|
240
|
+
- Check project directory permissions (`ls -la` in terminal)
|
|
241
|
+
- Verify the project path exists and is accessible
|
|
242
|
+
- Review server console logs for detailed error messages
|
|
243
|
+
- Ensure you're not trying to access system directories outside project scope
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
## License
|
|
247
|
+
|
|
248
|
+
GNU General Public License v3.0 - see [LICENSE](LICENSE) file for details.
|
|
249
|
+
|
|
250
|
+
This project is open source and free to use, modify, and distribute under the GPL v3 license.
|
|
251
|
+
|
|
252
|
+
## Acknowledgments
|
|
253
|
+
|
|
254
|
+
### Built With
|
|
255
|
+
- **[Claude Code](https://docs.anthropic.com/en/docs/claude-code)** - Anthropic's official CLI
|
|
256
|
+
- **[React](https://react.dev/)** - User interface library
|
|
257
|
+
- **[Vite](https://vitejs.dev/)** - Fast build tool and dev server
|
|
258
|
+
- **[Tailwind CSS](https://tailwindcss.com/)** - Utility-first CSS framework
|
|
259
|
+
- **[CodeMirror](https://codemirror.net/)** - Advanced code editor
|
|
260
|
+
- **[TaskMaster AI](https://github.com/eyaltoledano/claude-task-master)** *(Optional)* - AI-powered project management and task planning
|
|
261
|
+
|
|
262
|
+
## Support & Community
|
|
263
|
+
|
|
264
|
+
### Stay Updated
|
|
265
|
+
- **Star** this repository to show support
|
|
266
|
+
- **Watch** for updates and new releases
|
|
267
|
+
- **Follow** the project for announcements
|
|
268
|
+
|
|
269
|
+
### Sponsors
|
|
270
|
+
- [Siteboon - AI powered website builder](https://siteboon.ai)
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
<div align="center">
|
|
274
|
+
<strong>Made with care for the Claude Code community.</strong>
|
|
275
|
+
</div>
|
package/index.html
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
6
|
+
<link rel="icon" type="image/png" href="/favicon.png" />
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, viewport-fit=cover" />
|
|
8
|
+
<title>Claude Code UI</title>
|
|
9
|
+
|
|
10
|
+
<!-- PWA Manifest -->
|
|
11
|
+
<link rel="manifest" href="/manifest.json" />
|
|
12
|
+
|
|
13
|
+
<!-- iOS Safari PWA Meta Tags -->
|
|
14
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
15
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
|
16
|
+
<meta name="apple-mobile-web-app-title" content="Claude UI" />
|
|
17
|
+
|
|
18
|
+
<!-- iOS Safari Icons -->
|
|
19
|
+
<link rel="apple-touch-icon" sizes="152x152" href="/icons/icon-152x152.png" />
|
|
20
|
+
<link rel="apple-touch-icon" sizes="180x180" href="/icons/icon-192x192.png" />
|
|
21
|
+
|
|
22
|
+
<!-- Theme Color -->
|
|
23
|
+
<meta name="theme-color" content="#ffffff" />
|
|
24
|
+
<meta name="msapplication-TileColor" content="#ffffff" />
|
|
25
|
+
|
|
26
|
+
<!-- Prevent zoom on iOS -->
|
|
27
|
+
<meta name="format-detection" content="telephone=no" />
|
|
28
|
+
</head>
|
|
29
|
+
<body>
|
|
30
|
+
<div id="root"></div>
|
|
31
|
+
<script type="module" src="/src/main.jsx"></script>
|
|
32
|
+
|
|
33
|
+
<!-- Service Worker Registration -->
|
|
34
|
+
<script>
|
|
35
|
+
if ('serviceWorker' in navigator) {
|
|
36
|
+
window.addEventListener('load', () => {
|
|
37
|
+
navigator.serviceWorker.register('/sw.js')
|
|
38
|
+
.then(registration => {
|
|
39
|
+
console.log('SW registered: ', registration);
|
|
40
|
+
})
|
|
41
|
+
.catch(registrationError => {
|
|
42
|
+
console.log('SW registration failed: ', registrationError);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
</script>
|
|
47
|
+
</body>
|
|
48
|
+
</html>
|
package/package.json
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@siteboon/claude-code-ui",
|
|
3
|
+
"version": "1.8.2",
|
|
4
|
+
"description": "A web-based UI for Claude Code CLI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "server/index.js",
|
|
7
|
+
"homepage": "https://claudecodeui.siteboon.ai",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/siteboon/claudecodeui.git"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/siteboon/claudecodeui/issues"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"dev": "concurrently --kill-others \"npm run server\" \"npm run client\"",
|
|
17
|
+
"server": "node server/index.js",
|
|
18
|
+
"client": "vite --host",
|
|
19
|
+
"build": "vite build",
|
|
20
|
+
"preview": "vite preview",
|
|
21
|
+
"start": "npm run build && npm run server",
|
|
22
|
+
"release": "release-it"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"claude coode",
|
|
26
|
+
"ai",
|
|
27
|
+
"anthropic",
|
|
28
|
+
"ui",
|
|
29
|
+
"mobile"
|
|
30
|
+
],
|
|
31
|
+
"author": "Claude Code UI Contributors",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@codemirror/lang-css": "^6.3.1",
|
|
35
|
+
"@codemirror/lang-html": "^6.4.9",
|
|
36
|
+
"@codemirror/lang-javascript": "^6.2.4",
|
|
37
|
+
"@codemirror/lang-json": "^6.0.1",
|
|
38
|
+
"@codemirror/lang-markdown": "^6.3.3",
|
|
39
|
+
"@codemirror/lang-python": "^6.2.1",
|
|
40
|
+
"@codemirror/theme-one-dark": "^6.1.2",
|
|
41
|
+
"@tailwindcss/typography": "^0.5.16",
|
|
42
|
+
"@uiw/react-codemirror": "^4.23.13",
|
|
43
|
+
"@xterm/addon-clipboard": "^0.1.0",
|
|
44
|
+
"@xterm/addon-webgl": "^0.18.0",
|
|
45
|
+
"bcrypt": "^6.0.0",
|
|
46
|
+
"better-sqlite3": "^12.2.0",
|
|
47
|
+
"chokidar": "^4.0.3",
|
|
48
|
+
"class-variance-authority": "^0.7.1",
|
|
49
|
+
"clsx": "^2.1.1",
|
|
50
|
+
"cors": "^2.8.5",
|
|
51
|
+
"cross-spawn": "^7.0.3",
|
|
52
|
+
"express": "^4.18.2",
|
|
53
|
+
"jsonwebtoken": "^9.0.2",
|
|
54
|
+
"lucide-react": "^0.515.0",
|
|
55
|
+
"mime-types": "^3.0.1",
|
|
56
|
+
"multer": "^2.0.1",
|
|
57
|
+
"node-fetch": "^2.7.0",
|
|
58
|
+
"node-pty": "^1.1.0-beta34",
|
|
59
|
+
"react": "^18.2.0",
|
|
60
|
+
"react-dom": "^18.2.0",
|
|
61
|
+
"react-dropzone": "^14.2.3",
|
|
62
|
+
"react-markdown": "^10.1.0",
|
|
63
|
+
"react-router-dom": "^6.8.1",
|
|
64
|
+
"sqlite": "^5.1.1",
|
|
65
|
+
"sqlite3": "^5.1.7",
|
|
66
|
+
"tailwind-merge": "^3.3.1",
|
|
67
|
+
"ws": "^8.14.2",
|
|
68
|
+
"xterm": "^5.3.0",
|
|
69
|
+
"xterm-addon-fit": "^0.8.0"
|
|
70
|
+
},
|
|
71
|
+
"devDependencies": {
|
|
72
|
+
"@types/react": "^18.2.43",
|
|
73
|
+
"@types/react-dom": "^18.2.17",
|
|
74
|
+
"@vitejs/plugin-react": "^4.6.0",
|
|
75
|
+
"autoprefixer": "^10.4.16",
|
|
76
|
+
"concurrently": "^8.2.2",
|
|
77
|
+
"node-gyp": "^10.0.0",
|
|
78
|
+
"postcss": "^8.4.32",
|
|
79
|
+
"release-it": "^19.0.5",
|
|
80
|
+
"sharp": "^0.34.2",
|
|
81
|
+
"tailwindcss": "^3.4.0",
|
|
82
|
+
"vite": "^7.0.4"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Convert SVG Icons to PNG
|
|
2
|
+
|
|
3
|
+
I've created SVG versions of the app icons that match the MessageSquare design from the sidebar. To convert them to PNG format, you can use one of these methods:
|
|
4
|
+
|
|
5
|
+
## Method 1: Online Converter (Easiest)
|
|
6
|
+
1. Go to https://cloudconvert.com/svg-to-png
|
|
7
|
+
2. Upload each SVG file from the `/icons/` directory
|
|
8
|
+
3. Download the PNG versions
|
|
9
|
+
4. Replace the existing PNG files
|
|
10
|
+
|
|
11
|
+
## Method 2: Using Node.js (if you have it)
|
|
12
|
+
```bash
|
|
13
|
+
npm install sharp
|
|
14
|
+
node -e "
|
|
15
|
+
const sharp = require('sharp');
|
|
16
|
+
const fs = require('fs');
|
|
17
|
+
const sizes = [72, 96, 128, 144, 152, 192, 384, 512];
|
|
18
|
+
sizes.forEach(size => {
|
|
19
|
+
const svgPath = \`./icons/icon-\${size}x\${size}.svg\`;
|
|
20
|
+
const pngPath = \`./icons/icon-\${size}x\${size}.png\`;
|
|
21
|
+
if (fs.existsSync(svgPath)) {
|
|
22
|
+
sharp(svgPath).png().toFile(pngPath);
|
|
23
|
+
console.log(\`Converted \${svgPath} to \${pngPath}\`);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Method 3: Using ImageMagick (if installed)
|
|
30
|
+
```bash
|
|
31
|
+
cd public/icons
|
|
32
|
+
for size in 72 96 128 144 152 192 384 512; do
|
|
33
|
+
convert "icon-${size}x${size}.svg" "icon-${size}x${size}.png"
|
|
34
|
+
done
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Method 4: Using Inkscape (if installed)
|
|
38
|
+
```bash
|
|
39
|
+
cd public/icons
|
|
40
|
+
for size in 72 96 128 144 152 192 384 512; do
|
|
41
|
+
inkscape --export-type=png "icon-${size}x${size}.svg"
|
|
42
|
+
done
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Icon Design
|
|
46
|
+
The new icons feature:
|
|
47
|
+
- Clean MessageSquare (chat bubble) design matching the sidebar
|
|
48
|
+
- Primary color background with rounded corners
|
|
49
|
+
- White stroke icon that's clearly visible
|
|
50
|
+
- Consistent sizing and proportions across all sizes
|
|
51
|
+
- Proper PWA-compliant format
|
|
52
|
+
|
|
53
|
+
Once converted, the PNG files will replace the existing ones and provide a consistent icon experience across all platforms.
|
|
Binary file
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64">
|
|
2
|
+
<!-- Background fills entire canvas -->
|
|
3
|
+
<rect x="0" y="0" width="64" height="64" fill="hsl(240 5.9% 10%)"/>
|
|
4
|
+
|
|
5
|
+
<!-- MessageSquare icon - exact same as sidebar -->
|
|
6
|
+
<g transform="translate(32, 32) scale(1.333) translate(-12, -12)" stroke="white" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
7
|
+
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
|
|
8
|
+
</g>
|
|
9
|
+
</svg>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
// Icon sizes needed
|
|
5
|
+
const sizes = [72, 96, 128, 144, 152, 192, 384, 512];
|
|
6
|
+
|
|
7
|
+
// SVG template function
|
|
8
|
+
function createIconSVG(size) {
|
|
9
|
+
const cornerRadius = Math.round(size * 0.25); // 25% corner radius
|
|
10
|
+
const strokeWidth = Math.max(2, Math.round(size * 0.06)); // Scale stroke width
|
|
11
|
+
|
|
12
|
+
// MessageSquare path scaled to size
|
|
13
|
+
const padding = Math.round(size * 0.25);
|
|
14
|
+
const iconSize = size - (padding * 2);
|
|
15
|
+
const startX = padding;
|
|
16
|
+
const startY = Math.round(padding * 0.7);
|
|
17
|
+
const endX = startX + iconSize;
|
|
18
|
+
const endY = startY + Math.round(iconSize * 0.6);
|
|
19
|
+
const tailX = startX;
|
|
20
|
+
const tailY = endY + Math.round(iconSize * 0.3);
|
|
21
|
+
|
|
22
|
+
return `<svg width="${size}" height="${size}" viewBox="0 0 ${size} ${size}" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
23
|
+
<!-- Background with rounded corners -->
|
|
24
|
+
<rect width="${size}" height="${size}" rx="${cornerRadius}" fill="hsl(262.1 83.3% 57.8%)"/>
|
|
25
|
+
|
|
26
|
+
<!-- MessageSquare icon -->
|
|
27
|
+
<path d="M${startX} ${startY}C${startX} ${startY - 10} ${startX + 10} ${startY - 20} ${startX + 20} ${startY - 20}H${endX - 20}C${endX - 10} ${startY - 20} ${endX} ${startY - 10} ${endX} ${startY}V${endY - 20}C${endX} ${endY - 10} ${endX - 10} ${endY} ${endX - 20} ${endY}H${startX + Math.round(iconSize * 0.4)}L${tailX} ${tailY}V${startY}Z"
|
|
28
|
+
stroke="white"
|
|
29
|
+
stroke-width="${strokeWidth}"
|
|
30
|
+
stroke-linecap="round"
|
|
31
|
+
stroke-linejoin="round"
|
|
32
|
+
fill="none"/>
|
|
33
|
+
</svg>`;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Generate SVG files for each size
|
|
37
|
+
sizes.forEach(size => {
|
|
38
|
+
const svgContent = createIconSVG(size);
|
|
39
|
+
const filename = `icon-${size}x${size}.svg`;
|
|
40
|
+
const filepath = path.join(__dirname, 'icons', filename);
|
|
41
|
+
|
|
42
|
+
fs.writeFileSync(filepath, svgContent);
|
|
43
|
+
console.log(`Created ${filename}`);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
console.log('\nSVG icons created! To convert to PNG, you can use:');
|
|
47
|
+
console.log('1. Online converter like cloudconvert.com');
|
|
48
|
+
console.log('2. If you have ImageMagick: convert icon.svg icon.png');
|
|
49
|
+
console.log('3. If you have Inkscape: inkscape --export-type=png icon.svg');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 512 509.64"><path fill="#D77655" d="M115.612 0h280.775C459.974 0 512 52.026 512 115.612v278.415c0 63.587-52.026 115.612-115.613 115.612H115.612C52.026 509.639 0 457.614 0 394.027V115.612C0 52.026 52.026 0 115.612 0z"/><path fill="#FCF2EE" fill-rule="nonzero" d="M142.27 316.619l73.655-41.326 1.238-3.589-1.238-1.996-3.589-.001-12.31-.759-42.084-1.138-36.498-1.516-35.361-1.896-8.897-1.895-8.34-10.995.859-5.484 7.482-5.03 10.717.935 23.683 1.617 35.537 2.452 25.782 1.517 38.193 3.968h6.064l.86-2.451-2.073-1.517-1.618-1.517-36.776-24.922-39.81-26.338-20.852-15.166-11.273-7.683-5.687-7.204-2.451-15.721 10.237-11.273 13.75.935 3.513.936 13.928 10.716 29.749 23.027 38.848 28.612 5.687 4.727 2.275-1.617.278-1.138-2.553-4.271-21.13-38.193-22.546-38.848-10.035-16.101-2.654-9.655c-.935-3.968-1.617-7.304-1.617-11.374l11.652-15.823 6.445-2.073 15.545 2.073 6.547 5.687 9.655 22.092 15.646 34.78 24.265 47.291 7.103 14.028 3.791 12.992 1.416 3.968 2.449-.001v-2.275l1.997-26.641 3.69-32.707 3.589-42.084 1.239-11.854 5.863-14.206 11.652-7.683 9.099 4.348 7.482 10.716-1.036 6.926-4.449 28.915-8.72 45.294-5.687 30.331h3.313l3.792-3.791 15.342-20.372 25.782-32.227 11.374-12.789 13.27-14.129 8.517-6.724 16.1-.001 11.854 17.617-5.307 18.199-16.581 21.029-13.75 17.819-19.716 26.54-12.309 21.231 1.138 1.694 2.932-.278 44.536-9.479 24.062-4.347 28.714-4.928 12.992 6.066 1.416 6.167-5.106 12.613-30.71 7.583-36.018 7.204-53.636 12.689-.657.48.758.935 24.164 2.275 10.337.556h25.301l47.114 3.514 12.309 8.139 7.381 9.959-1.238 7.583-18.957 9.655-25.579-6.066-59.702-14.205-20.474-5.106-2.83-.001v1.694l17.061 16.682 31.266 28.233 39.152 36.397 1.997 8.999-5.03 7.102-5.307-.758-34.401-25.883-13.27-11.651-30.053-25.302-1.996-.001v2.654l6.926 10.136 36.574 54.975 1.895 16.859-2.653 5.485-9.479 3.311-10.414-1.895-21.408-30.054-22.092-33.844-17.819-30.331-2.173 1.238-10.515 113.261-4.929 5.788-11.374 4.348-9.478-7.204-5.03-11.652 5.03-23.027 6.066-30.052 4.928-23.886 4.449-29.674 2.654-9.858-.177-.657-2.173.278-22.37 30.71-34.021 45.977-26.919 28.815-6.445 2.553-11.173-5.789 1.037-10.337 6.243-9.2 37.257-47.392 22.47-29.371 14.508-16.961-.101-2.451h-.859l-98.954 64.251-17.618 2.275-7.583-7.103.936-11.652 3.589-3.791 29.749-20.474-.101.102.024.101z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Cursor</title><path d="M11.925 24l10.425-6-10.425-6L1.5 18l10.425 6z" fill="url(#lobe-icons-cursorundefined-fill-0)"></path><path d="M22.35 18V6L11.925 0v12l10.425 6z" fill="url(#lobe-icons-cursorundefined-fill-1)"></path><path d="M11.925 0L1.5 6v12l10.425-6V0z" fill="url(#lobe-icons-cursorundefined-fill-2)"></path><path d="M22.35 6L11.925 24V12L22.35 6z" fill="#555"></path><path d="M22.35 6l-10.425 6L1.5 6h20.85z" fill="#000"></path><defs><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-cursorundefined-fill-0" x1="11.925" x2="11.925" y1="12" y2="24"><stop offset=".16" stop-color="#000" stop-opacity=".39"></stop><stop offset=".658" stop-color="#000" stop-opacity=".8"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-cursorundefined-fill-1" x1="22.35" x2="11.925" y1="6.037" y2="12.15"><stop offset=".182" stop-color="#000" stop-opacity=".31"></stop><stop offset=".715" stop-color="#000" stop-opacity="0"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-cursorundefined-fill-2" x1="11.925" x2="1.5" y1="0" y2="18"><stop stop-color="#000" stop-opacity=".6"></stop><stop offset=".667" stop-color="#000" stop-opacity=".22"></stop></linearGradient></defs></svg>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# PWA Icons Required
|
|
2
|
+
|
|
3
|
+
Create the following icon files in this directory:
|
|
4
|
+
|
|
5
|
+
- icon-72x72.png
|
|
6
|
+
- icon-96x96.png
|
|
7
|
+
- icon-128x128.png
|
|
8
|
+
- icon-144x144.png
|
|
9
|
+
- icon-152x152.png
|
|
10
|
+
- icon-192x192.png
|
|
11
|
+
- icon-384x384.png
|
|
12
|
+
- icon-512x512.png
|
|
13
|
+
|
|
14
|
+
You can use any icon generator tool or create them manually. The icons should be square and represent your Claude Code UI application.
|
|
15
|
+
|
|
16
|
+
For a quick solution, you can:
|
|
17
|
+
1. Create a simple square PNG icon (512x512)
|
|
18
|
+
2. Use online tools like realfavicongenerator.net to generate all sizes
|
|
19
|
+
3. Or use ImageMagick: `convert icon-512x512.png -resize 192x192 icon-192x192.png`
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Background fills entire canvas - iOS will handle corner rounding -->
|
|
3
|
+
<rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
|
|
4
|
+
|
|
5
|
+
<!-- MessageSquare icon - scaled and centered -->
|
|
6
|
+
<path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
|
|
7
|
+
stroke="white"
|
|
8
|
+
stroke-width="32"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
fill="none"/>
|
|
12
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Background fills entire canvas - iOS will handle corner rounding -->
|
|
3
|
+
<rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
|
|
4
|
+
|
|
5
|
+
<!-- MessageSquare icon - scaled and centered -->
|
|
6
|
+
<path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
|
|
7
|
+
stroke="white"
|
|
8
|
+
stroke-width="32"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
fill="none"/>
|
|
12
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Background fills entire canvas - iOS will handle corner rounding -->
|
|
3
|
+
<rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
|
|
4
|
+
|
|
5
|
+
<!-- MessageSquare icon - scaled and centered -->
|
|
6
|
+
<path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
|
|
7
|
+
stroke="white"
|
|
8
|
+
stroke-width="32"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
fill="none"/>
|
|
12
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Background fills entire canvas - iOS will handle corner rounding -->
|
|
3
|
+
<rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
|
|
4
|
+
|
|
5
|
+
<!-- MessageSquare icon - scaled and centered -->
|
|
6
|
+
<path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
|
|
7
|
+
stroke="white"
|
|
8
|
+
stroke-width="32"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
fill="none"/>
|
|
12
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Background fills entire canvas - iOS will handle corner rounding -->
|
|
3
|
+
<rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
|
|
4
|
+
|
|
5
|
+
<!-- MessageSquare icon - scaled and centered -->
|
|
6
|
+
<path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
|
|
7
|
+
stroke="white"
|
|
8
|
+
stroke-width="32"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
fill="none"/>
|
|
12
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Background fills entire canvas - iOS will handle corner rounding -->
|
|
3
|
+
<rect width="512" height="512" fill="hsl(240 5.9% 10%)"/>
|
|
4
|
+
|
|
5
|
+
<!-- MessageSquare icon - scaled and centered -->
|
|
6
|
+
<path d="M128 144C128 126.327 142.327 112 160 112H352C369.673 112 384 126.327 384 144V272C384 289.673 369.673 304 352 304H224L128 400V144Z"
|
|
7
|
+
stroke="white"
|
|
8
|
+
stroke-width="32"
|
|
9
|
+
stroke-linecap="round"
|
|
10
|
+
stroke-linejoin="round"
|
|
11
|
+
fill="none"/>
|
|
12
|
+
</svg>
|