@siteboon/claude-code-ui 1.12.0 → 1.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -16
- package/dist/api-docs.html +30 -8
- package/dist/assets/index-BL1HpeHJ.js +1206 -0
- package/dist/assets/index-Cc6pl7ji.css +32 -0
- package/dist/assets/{vendor-xterm-jI4BCHEb.js → vendor-xterm-DfaPXD3y.js} +12 -12
- package/dist/icons/codex-white.svg +3 -0
- package/dist/icons/codex.svg +3 -0
- package/dist/icons/cursor-white.svg +12 -0
- package/dist/index.html +4 -4
- package/dist/logo-128.png +0 -0
- package/dist/logo-256.png +0 -0
- package/dist/logo-32.png +0 -0
- package/dist/logo-512.png +0 -0
- package/dist/logo-64.png +0 -0
- package/dist/logo.svg +17 -9
- package/package.json +4 -1
- package/server/claude-sdk.js +32 -30
- package/server/cursor-cli.js +24 -24
- package/server/database/db.js +64 -0
- package/server/database/init.sql +4 -1
- package/server/index.js +278 -31
- package/server/openai-codex.js +388 -0
- package/server/projects.js +448 -7
- package/server/routes/agent.js +54 -8
- package/server/routes/cli-auth.js +263 -0
- package/server/routes/codex.js +310 -0
- package/server/routes/commands.js +6 -57
- package/server/routes/cursor.js +2 -1
- package/server/routes/git.js +123 -28
- package/server/routes/taskmaster.js +2 -10
- package/server/routes/user.js +106 -0
- package/server/utils/gitConfig.js +24 -0
- package/dist/assets/index-DXtzL-q9.css +0 -32
- package/dist/assets/index-Do2w3FiK.js +0 -1189
- package/server/database/auth.db +0 -0
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
</div>
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
A desktop and mobile UI for [Claude Code](https://docs.anthropic.com/en/docs/claude-code),
|
|
7
|
+
A desktop and mobile UI for [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Cursor CLI](https://docs.cursor.com/en/cli/overview) and [Codex](https://developers.openai.com/codex). You can use it locally or remotely to view your active projects and sessions in Claude Code, Cursor, or Codex and make changes to them from everywhere (mobile or desktop). This gives you a proper interface that works everywhere.
|
|
8
8
|
|
|
9
9
|
## Screenshots
|
|
10
10
|
|
|
@@ -30,7 +30,7 @@ A desktop and mobile UI for [Claude Code](https://docs.anthropic.com/en/docs/cla
|
|
|
30
30
|
<h3>CLI Selection</h3>
|
|
31
31
|
<img src="public/screenshots/cli-selection.png" alt="CLI Selection" width="400">
|
|
32
32
|
<br>
|
|
33
|
-
<em>Select between Claude Code
|
|
33
|
+
<em>Select between Claude Code, Cursor CLI and Codex</em>
|
|
34
34
|
</td>
|
|
35
35
|
</tr>
|
|
36
36
|
</table>
|
|
@@ -41,14 +41,14 @@ A desktop and mobile UI for [Claude Code](https://docs.anthropic.com/en/docs/cla
|
|
|
41
41
|
|
|
42
42
|
## Features
|
|
43
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
|
|
46
|
-
- **Integrated Shell Terminal** - Direct access to Claude Code
|
|
44
|
+
- **Responsive Design** - Works seamlessly across desktop, tablet, and mobile so you can also use Claude Code, Cursor, or Codex from mobile
|
|
45
|
+
- **Interactive Chat Interface** - Built-in chat interface for seamless communication with Claude Code, Cursor, or Codex
|
|
46
|
+
- **Integrated Shell Terminal** - Direct access to Claude Code, Cursor CLI, or Codex through built-in shell functionality
|
|
47
47
|
- **File Explorer** - Interactive file tree with syntax highlighting and live editing
|
|
48
48
|
- **Git Explorer** - View, stage and commit your changes. You can also switch branches
|
|
49
49
|
- **Session Management** - Resume conversations, manage multiple sessions, and track history
|
|
50
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.
|
|
51
|
+
- **Model Compatibility** - Works with Claude Sonnet 4.5, Opus 4.5, and GPT-5.2
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
## Quick Start
|
|
@@ -57,7 +57,8 @@ A desktop and mobile UI for [Claude Code](https://docs.anthropic.com/en/docs/cla
|
|
|
57
57
|
|
|
58
58
|
- [Node.js](https://nodejs.org/) v20 or higher
|
|
59
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
|
|
60
|
+
- [Cursor CLI](https://docs.cursor.com/en/cli/overview) installed and configured, and/or
|
|
61
|
+
- [Codex](https://developers.openai.com/codex) installed and configured
|
|
61
62
|
|
|
62
63
|
### One-click Operation (Recommended)
|
|
63
64
|
|
|
@@ -218,15 +219,15 @@ After installing it you should be able to enable it from the Settings
|
|
|
218
219
|
### Core Features
|
|
219
220
|
|
|
220
221
|
#### Project Management
|
|
221
|
-
|
|
222
|
-
|
|
222
|
+
It automatically discovers Claude Code, Cursor or Codex sessions when available and groups them together into projects
|
|
223
|
+
session counts
|
|
223
224
|
- **Project Actions** - Rename, delete, and organize projects
|
|
224
225
|
- **Smart Navigation** - Quick access to recent projects and sessions
|
|
225
226
|
- **MCP support** - Add your own MCP servers through the UI
|
|
226
227
|
|
|
227
228
|
#### Chat Interface
|
|
228
|
-
- **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.
|
|
229
|
-
- **Real-time Communication** - Stream responses from Claude with WebSocket connection
|
|
229
|
+
- **Use responsive chat or Claude Code/Cursor CLI/Codex CLI** - You can either use the adapted chat interface or use the shell button to connect to your selected CLI.
|
|
230
|
+
- **Real-time Communication** - Stream responses from your selected CLI (Claude Code/Cursor/Codex) with WebSocket connection
|
|
230
231
|
- **Session Management** - Resume previous conversations or start fresh sessions
|
|
231
232
|
- **Message History** - Complete conversation history with timestamps and metadata
|
|
232
233
|
- **Multi-format Support** - Text, code blocks, and file references
|
|
@@ -264,16 +265,16 @@ The UI automatically discovers Claude Code projects from `~/.claude/projects/` a
|
|
|
264
265
|
|
|
265
266
|
```
|
|
266
267
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
267
|
-
│ Frontend │ │ Backend │ │
|
|
268
|
+
│ Frontend │ │ Backend │ │ Agent │
|
|
268
269
|
│ (React/Vite) │◄──►│ (Express/WS) │◄──►│ Integration │
|
|
270
|
+
│ │ │ │ │ │
|
|
269
271
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
270
272
|
```
|
|
271
273
|
|
|
272
274
|
### Backend (Node.js + Express)
|
|
273
275
|
- **Express Server** - RESTful API with static file serving
|
|
274
276
|
- **WebSocket Server** - Communication for chats and project refresh
|
|
275
|
-
- **
|
|
276
|
-
- **Session Management** - JSONL parsing and conversation persistence
|
|
277
|
+
- **Agent Integration (Claude Code / Cursor CLI / Codex)** - Process spawning and management
|
|
277
278
|
- **File System API** - Exposing file browser for projects
|
|
278
279
|
|
|
279
280
|
### Frontend (React + Vite)
|
|
@@ -320,7 +321,7 @@ We welcome contributions! Please follow these guidelines:
|
|
|
320
321
|
#### "No Claude projects found"
|
|
321
322
|
**Problem**: The UI shows no projects or empty project list
|
|
322
323
|
**Solutions**:
|
|
323
|
-
- Ensure [Claude
|
|
324
|
+
- Ensure [Claude Code](https://docs.anthropic.com/en/docs/claude-code) is properly installed
|
|
324
325
|
- Run `claude` command in at least one project directory to initialize
|
|
325
326
|
- Verify `~/.claude/projects/` directory exists and has proper permissions
|
|
326
327
|
|
|
@@ -343,6 +344,8 @@ This project is open source and free to use, modify, and distribute under the GP
|
|
|
343
344
|
|
|
344
345
|
### Built With
|
|
345
346
|
- **[Claude Code](https://docs.anthropic.com/en/docs/claude-code)** - Anthropic's official CLI
|
|
347
|
+
- **[Cursor CLI](https://docs.cursor.com/en/cli/overview)** - Cursor's official CLI
|
|
348
|
+
- **[Codex](https://developers.openai.com/codex)** - OpenAI Codex
|
|
346
349
|
- **[React](https://react.dev/)** - User interface library
|
|
347
350
|
- **[Vite](https://vitejs.dev/)** - Fast build tool and dev server
|
|
348
351
|
- **[Tailwind CSS](https://tailwindcss.com/)** - Utility-first CSS framework
|
|
@@ -361,5 +364,5 @@ This project is open source and free to use, modify, and distribute under the GP
|
|
|
361
364
|
---
|
|
362
365
|
|
|
363
366
|
<div align="center">
|
|
364
|
-
<strong>Made with care for the Claude Code community.</strong>
|
|
367
|
+
<strong>Made with care for the Claude Code, Cursor and Codex community.</strong>
|
|
365
368
|
</div>
|
package/dist/api-docs.html
CHANGED
|
@@ -489,7 +489,7 @@
|
|
|
489
489
|
<span class="endpoint-path"><span class="api-url">http://localhost:3001</span>/api/agent</span>
|
|
490
490
|
</div>
|
|
491
491
|
|
|
492
|
-
<p>Trigger an AI agent (Claude or
|
|
492
|
+
<p>Trigger an AI agent (Claude, Cursor, or Codex) to work on a project.</p>
|
|
493
493
|
|
|
494
494
|
<h4>Request Body Parameters</h4>
|
|
495
495
|
<table>
|
|
@@ -524,7 +524,7 @@
|
|
|
524
524
|
<td><code>provider</code></td>
|
|
525
525
|
<td>string</td>
|
|
526
526
|
<td><span class="badge badge-optional">Optional</span></td>
|
|
527
|
-
<td><code>claude</code> or <code>
|
|
527
|
+
<td><code>claude</code>, <code>cursor</code>, or <code>codex</code> (default: <code>claude</code>)</td>
|
|
528
528
|
</tr>
|
|
529
529
|
<tr>
|
|
530
530
|
<td><code>stream</code></td>
|
|
@@ -536,7 +536,9 @@
|
|
|
536
536
|
<td><code>model</code></td>
|
|
537
537
|
<td>string</td>
|
|
538
538
|
<td><span class="badge badge-optional">Optional</span></td>
|
|
539
|
-
<td
|
|
539
|
+
<td id="model-options-cell">
|
|
540
|
+
Model identifier for the AI provider (loading from constants...)
|
|
541
|
+
</td>
|
|
540
542
|
</tr>
|
|
541
543
|
<tr>
|
|
542
544
|
<td><code>cleanup</code></td>
|
|
@@ -818,31 +820,51 @@ data: {"type":"done"}</code></pre>
|
|
|
818
820
|
</div>
|
|
819
821
|
</div>
|
|
820
822
|
|
|
821
|
-
<script>
|
|
823
|
+
<script type="module">
|
|
824
|
+
// Import model constants
|
|
825
|
+
import { CLAUDE_MODELS, CURSOR_MODELS, CODEX_MODELS } from '/shared/modelConstants.js';
|
|
826
|
+
|
|
822
827
|
// Dynamic URL replacement
|
|
823
828
|
const apiUrl = window.location.origin;
|
|
824
829
|
document.querySelectorAll('.api-url').forEach(el => {
|
|
825
830
|
el.textContent = apiUrl;
|
|
826
831
|
});
|
|
827
832
|
|
|
833
|
+
// Dynamically populate model documentation
|
|
834
|
+
window.addEventListener('DOMContentLoaded', () => {
|
|
835
|
+
const modelCell = document.getElementById('model-options-cell');
|
|
836
|
+
if (modelCell) {
|
|
837
|
+
const claudeModels = CLAUDE_MODELS.OPTIONS.map(m => `<code>${m.value}</code>`).join(', ');
|
|
838
|
+
const cursorModels = CURSOR_MODELS.OPTIONS.slice(0, 8).map(m => `<code>${m.value}</code>`).join(', ');
|
|
839
|
+
const codexModels = CODEX_MODELS.OPTIONS.map(m => `<code>${m.value}</code>`).join(', ');
|
|
840
|
+
|
|
841
|
+
modelCell.innerHTML = `
|
|
842
|
+
Model identifier for the AI provider:<br><br>
|
|
843
|
+
<strong>Claude:</strong> ${claudeModels} (default: <code>${CLAUDE_MODELS.DEFAULT}</code>)<br><br>
|
|
844
|
+
<strong>Cursor:</strong> ${cursorModels}, and more (default: <code>${CURSOR_MODELS.DEFAULT}</code>)<br><br>
|
|
845
|
+
<strong>Codex:</strong> ${codexModels} (default: <code>${CODEX_MODELS.DEFAULT}</code>)
|
|
846
|
+
`;
|
|
847
|
+
}
|
|
848
|
+
});
|
|
849
|
+
|
|
828
850
|
// Tab switching
|
|
829
|
-
function
|
|
851
|
+
window.showTab = function(tabName) {
|
|
830
852
|
const parentBlock = event.target.closest('.example-block');
|
|
831
853
|
if (!parentBlock) return;
|
|
832
|
-
|
|
854
|
+
|
|
833
855
|
parentBlock.querySelectorAll('.tab-content').forEach(tab => {
|
|
834
856
|
tab.classList.remove('active');
|
|
835
857
|
});
|
|
836
858
|
parentBlock.querySelectorAll('.tab-button').forEach(btn => {
|
|
837
859
|
btn.classList.remove('active');
|
|
838
860
|
});
|
|
839
|
-
|
|
861
|
+
|
|
840
862
|
const targetTab = parentBlock.querySelector('#' + tabName);
|
|
841
863
|
if (targetTab) {
|
|
842
864
|
targetTab.classList.add('active');
|
|
843
865
|
event.target.classList.add('active');
|
|
844
866
|
}
|
|
845
|
-
}
|
|
867
|
+
};
|
|
846
868
|
</script>
|
|
847
869
|
|
|
848
870
|
<!-- Prism.js -->
|