claudedesk 1.0.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.
- package/LICENSE +21 -0
- package/README.md +431 -0
- package/config/repos.example.json +128 -0
- package/config/settings.example.json +64 -0
- package/config/skills/code-review.md +76 -0
- package/config/skills/full-check.md +26 -0
- package/config/skills/lint-fix.md +23 -0
- package/dist/api/agent-routes.d.ts +2 -0
- package/dist/api/agent-routes.d.ts.map +1 -0
- package/dist/api/agent-routes.js +251 -0
- package/dist/api/agent-routes.js.map +1 -0
- package/dist/api/app-routes.d.ts +2 -0
- package/dist/api/app-routes.d.ts.map +1 -0
- package/dist/api/app-routes.js +150 -0
- package/dist/api/app-routes.js.map +1 -0
- package/dist/api/docker-routes.d.ts +2 -0
- package/dist/api/docker-routes.d.ts.map +1 -0
- package/dist/api/docker-routes.js +167 -0
- package/dist/api/docker-routes.js.map +1 -0
- package/dist/api/middleware.d.ts +6 -0
- package/dist/api/middleware.d.ts.map +1 -0
- package/dist/api/middleware.js +293 -0
- package/dist/api/middleware.js.map +1 -0
- package/dist/api/pin-auth.d.ts +65 -0
- package/dist/api/pin-auth.d.ts.map +1 -0
- package/dist/api/pin-auth.js +218 -0
- package/dist/api/pin-auth.js.map +1 -0
- package/dist/api/routes.d.ts +2 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +473 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/api/settings-routes.d.ts +2 -0
- package/dist/api/settings-routes.d.ts.map +1 -0
- package/dist/api/settings-routes.js +570 -0
- package/dist/api/settings-routes.js.map +1 -0
- package/dist/api/skill-routes.d.ts +2 -0
- package/dist/api/skill-routes.d.ts.map +1 -0
- package/dist/api/skill-routes.js +88 -0
- package/dist/api/skill-routes.js.map +1 -0
- package/dist/api/terminal-routes.d.ts +2 -0
- package/dist/api/terminal-routes.d.ts.map +1 -0
- package/dist/api/terminal-routes.js +3524 -0
- package/dist/api/terminal-routes.js.map +1 -0
- package/dist/api/tunnel-routes.d.ts +2 -0
- package/dist/api/tunnel-routes.d.ts.map +1 -0
- package/dist/api/tunnel-routes.js +196 -0
- package/dist/api/tunnel-routes.js.map +1 -0
- package/dist/api/workspace-routes.d.ts +3 -0
- package/dist/api/workspace-routes.d.ts.map +1 -0
- package/dist/api/workspace-routes.js +649 -0
- package/dist/api/workspace-routes.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +276 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/assets/index-B4r0njGe.js +780 -0
- package/dist/client/assets/index-CY_9MyE0.css +1 -0
- package/dist/client/favicon.svg +5 -0
- package/dist/client/icons/icon-192.svg +5 -0
- package/dist/client/icons/icon-512.svg +5 -0
- package/dist/client/icons/logo-with-message.png +0 -0
- package/dist/client/icons/logo.png +0 -0
- package/dist/client/index.html +25 -0
- package/dist/client/manifest.json +62 -0
- package/dist/client/sw.js +243 -0
- package/dist/config/agent-usage.d.ts +34 -0
- package/dist/config/agent-usage.d.ts.map +1 -0
- package/dist/config/agent-usage.js +87 -0
- package/dist/config/agent-usage.js.map +1 -0
- package/dist/config/repos.d.ts +34 -0
- package/dist/config/repos.d.ts.map +1 -0
- package/dist/config/repos.js +412 -0
- package/dist/config/repos.js.map +1 -0
- package/dist/config/settings.d.ts +634 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +459 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/config/skills.d.ts +18 -0
- package/dist/config/skills.d.ts.map +1 -0
- package/dist/config/skills.js +174 -0
- package/dist/config/skills.js.map +1 -0
- package/dist/config/workspaces.d.ts +961 -0
- package/dist/config/workspaces.d.ts.map +1 -0
- package/dist/config/workspaces.js +482 -0
- package/dist/config/workspaces.js.map +1 -0
- package/dist/core/app-manager.d.ts +85 -0
- package/dist/core/app-manager.d.ts.map +1 -0
- package/dist/core/app-manager.js +447 -0
- package/dist/core/app-manager.js.map +1 -0
- package/dist/core/claude-invoker.d.ts +49 -0
- package/dist/core/claude-invoker.d.ts.map +1 -0
- package/dist/core/claude-invoker.js +583 -0
- package/dist/core/claude-invoker.js.map +1 -0
- package/dist/core/claude-session-reader.d.ts +25 -0
- package/dist/core/claude-session-reader.d.ts.map +1 -0
- package/dist/core/claude-session-reader.js +184 -0
- package/dist/core/claude-session-reader.js.map +1 -0
- package/dist/core/claude-usage-query.d.ts +78 -0
- package/dist/core/claude-usage-query.d.ts.map +1 -0
- package/dist/core/claude-usage-query.js +294 -0
- package/dist/core/claude-usage-query.js.map +1 -0
- package/dist/core/git-credential-helper.d.ts +57 -0
- package/dist/core/git-credential-helper.d.ts.map +1 -0
- package/dist/core/git-credential-helper.js +176 -0
- package/dist/core/git-credential-helper.js.map +1 -0
- package/dist/core/git-sandbox.d.ts +135 -0
- package/dist/core/git-sandbox.d.ts.map +1 -0
- package/dist/core/git-sandbox.js +907 -0
- package/dist/core/git-sandbox.js.map +1 -0
- package/dist/core/github-integration.d.ts +66 -0
- package/dist/core/github-integration.d.ts.map +1 -0
- package/dist/core/github-integration.js +350 -0
- package/dist/core/github-integration.js.map +1 -0
- package/dist/core/github-oauth.d.ts +88 -0
- package/dist/core/github-oauth.d.ts.map +1 -0
- package/dist/core/github-oauth.js +244 -0
- package/dist/core/github-oauth.js.map +1 -0
- package/dist/core/gitlab-integration.d.ts +66 -0
- package/dist/core/gitlab-integration.d.ts.map +1 -0
- package/dist/core/gitlab-integration.js +353 -0
- package/dist/core/gitlab-integration.js.map +1 -0
- package/dist/core/gitlab-oauth.d.ts +100 -0
- package/dist/core/gitlab-oauth.d.ts.map +1 -0
- package/dist/core/gitlab-oauth.js +366 -0
- package/dist/core/gitlab-oauth.js.map +1 -0
- package/dist/core/insights-extractor.d.ts +68 -0
- package/dist/core/insights-extractor.d.ts.map +1 -0
- package/dist/core/insights-extractor.js +402 -0
- package/dist/core/insights-extractor.js.map +1 -0
- package/dist/core/logger.d.ts +27 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +70 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/process-runner.d.ts +27 -0
- package/dist/core/process-runner.d.ts.map +1 -0
- package/dist/core/process-runner.js +147 -0
- package/dist/core/process-runner.js.map +1 -0
- package/dist/core/project-detector.d.ts +30 -0
- package/dist/core/project-detector.d.ts.map +1 -0
- package/dist/core/project-detector.js +482 -0
- package/dist/core/project-detector.js.map +1 -0
- package/dist/core/qr-generator.d.ts +18 -0
- package/dist/core/qr-generator.d.ts.map +1 -0
- package/dist/core/qr-generator.js +61 -0
- package/dist/core/qr-generator.js.map +1 -0
- package/dist/core/remote-tunnel-manager.d.ts +59 -0
- package/dist/core/remote-tunnel-manager.d.ts.map +1 -0
- package/dist/core/remote-tunnel-manager.js +235 -0
- package/dist/core/remote-tunnel-manager.js.map +1 -0
- package/dist/core/shared-docker-manager.d.ts +41 -0
- package/dist/core/shared-docker-manager.d.ts.map +1 -0
- package/dist/core/shared-docker-manager.js +409 -0
- package/dist/core/shared-docker-manager.js.map +1 -0
- package/dist/core/skill-executor.d.ts +25 -0
- package/dist/core/skill-executor.d.ts.map +1 -0
- package/dist/core/skill-executor.js +171 -0
- package/dist/core/skill-executor.js.map +1 -0
- package/dist/core/terminal-session.d.ts +149 -0
- package/dist/core/terminal-session.d.ts.map +1 -0
- package/dist/core/terminal-session.js +2340 -0
- package/dist/core/terminal-session.js.map +1 -0
- package/dist/core/tunnel-manager.d.ts +35 -0
- package/dist/core/tunnel-manager.d.ts.map +1 -0
- package/dist/core/tunnel-manager.js +137 -0
- package/dist/core/tunnel-manager.js.map +1 -0
- package/dist/core/usage-manager.d.ts +57 -0
- package/dist/core/usage-manager.d.ts.map +1 -0
- package/dist/core/usage-manager.js +363 -0
- package/dist/core/usage-manager.js.map +1 -0
- package/dist/core/ws-manager.d.ts +39 -0
- package/dist/core/ws-manager.d.ts.map +1 -0
- package/dist/core/ws-manager.js +190 -0
- package/dist/core/ws-manager.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +229 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +868 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +119 -0
- package/dist/types.js.map +1 -0
- package/package.json +96 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 ClaudeDesk Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
# ClaudeDesk
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/claudedesk)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
|
|
7
|
+
A web interface for Claude Code with session persistence, visual tool activity, and safe shipping workflows.
|
|
8
|
+
|
|
9
|
+
**See what Claude does. Review before you ship.**
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
## Important Security Information
|
|
14
|
+
|
|
15
|
+
**ClaudeDesk grants Claude Code autonomous access to your local file system and command execution.**
|
|
16
|
+
|
|
17
|
+
By default, Claude can:
|
|
18
|
+
- Read, edit, and delete files in configured workspaces
|
|
19
|
+
- Execute arbitrary shell commands on your machine
|
|
20
|
+
- Install packages and modify system configuration
|
|
21
|
+
- Access network resources and external APIs
|
|
22
|
+
|
|
23
|
+
**Before using ClaudeDesk:**
|
|
24
|
+
- Only configure trusted repositories in workspaces
|
|
25
|
+
- Review all changes before committing or deploying
|
|
26
|
+
- Use read-only permission mode when exploring unfamiliar codebases
|
|
27
|
+
- Keep ClaudeDesk bound to localhost (default) unless you specifically need remote access
|
|
28
|
+
- Never configure system directories or sensitive paths
|
|
29
|
+
- Never run ClaudeDesk with elevated privileges unless absolutely necessary
|
|
30
|
+
|
|
31
|
+
ClaudeDesk is designed for development environments. Use production deployments with caution.
|
|
32
|
+
|
|
33
|
+
## What is ClaudeDesk?
|
|
34
|
+
|
|
35
|
+
ClaudeDesk is a companion interface for developers who already use Claude Code CLI. It provides visual oversight of AI actions, persistent sessions you can resume anytime, and a structured workflow for reviewing and shipping changes safely.
|
|
36
|
+
|
|
37
|
+
It is not an IDE. It is not a replacement for Claude Code. It is a session manager that gives you control and visibility.
|
|
38
|
+
|
|
39
|
+
## Features
|
|
40
|
+
|
|
41
|
+
- **Session Management** - Create, persist, resume, search, and export Claude Code sessions
|
|
42
|
+
- **Visual Tool Timeline** - See every Read, Edit, Bash action in real-time as Claude works
|
|
43
|
+
- **Git Worktree Isolation** - Each session runs in its own worktree branch for safe experimentation
|
|
44
|
+
- **Ship Workflow** - Review diffs, commit, push, and create PRs in one guided flow
|
|
45
|
+
- **Multi-Repo Sessions** - Work across multiple repositories from a single interface
|
|
46
|
+
- **Quota Tracking** - Monitor your Claude API usage and costs
|
|
47
|
+
- **GitHub/GitLab OAuth** - Push and create PRs using OAuth tokens
|
|
48
|
+
- **Plan Mode** - Review and approve Claude's plan before execution
|
|
49
|
+
|
|
50
|
+
## Installation
|
|
51
|
+
|
|
52
|
+
### Option 1: npm (Recommended)
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Install globally
|
|
56
|
+
npm install -g claudedesk
|
|
57
|
+
claudedesk
|
|
58
|
+
|
|
59
|
+
# Or run without installing
|
|
60
|
+
npx claudedesk
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Prerequisites:** Node.js 18+ and [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)
|
|
64
|
+
|
|
65
|
+
### Option 2: Docker
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
cd deploy
|
|
69
|
+
cp .env.example .env
|
|
70
|
+
docker compose up -d
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
See [deploy/README.md](deploy/README.md) for full Docker deployment instructions.
|
|
74
|
+
|
|
75
|
+
**Prerequisites:** Docker Engine 20.10+ and Docker Compose 2.0+
|
|
76
|
+
|
|
77
|
+
### Option 3: From Source (Development)
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
git clone https://github.com/carloluisito/claudedesk.git
|
|
81
|
+
cd claude-desk
|
|
82
|
+
npm install
|
|
83
|
+
npm run dev
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Prerequisites:** Node.js 18+, npm, Git, and [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)
|
|
87
|
+
|
|
88
|
+
## CLI Reference
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
claudedesk [options]
|
|
92
|
+
|
|
93
|
+
Options:
|
|
94
|
+
-p, --port <port> Port to listen on (default: 8787)
|
|
95
|
+
-d, --data-dir <path> Data directory for config and artifacts
|
|
96
|
+
--skip-wizard Skip the initial setup wizard
|
|
97
|
+
--allow-remote Allow remote network access (binds to 0.0.0.0)
|
|
98
|
+
-h, --help Show help message
|
|
99
|
+
-v, --version Show version number
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Examples
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Start on default port
|
|
106
|
+
claudedesk
|
|
107
|
+
|
|
108
|
+
# Start on custom port
|
|
109
|
+
claudedesk --port 3000
|
|
110
|
+
|
|
111
|
+
# Use custom data directory
|
|
112
|
+
claudedesk --data-dir /opt/claudedesk-data
|
|
113
|
+
|
|
114
|
+
# Skip setup wizard (for automated deployments)
|
|
115
|
+
claudedesk --skip-wizard
|
|
116
|
+
|
|
117
|
+
# Allow remote access (see security warning below)
|
|
118
|
+
claudedesk --allow-remote --port 8080
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Remote Access Security Warning
|
|
122
|
+
|
|
123
|
+
By default, ClaudeDesk binds to `127.0.0.1` (localhost only). Using `--allow-remote` binds to `0.0.0.0`, exposing ClaudeDesk to your entire network.
|
|
124
|
+
|
|
125
|
+
**Risks of `--allow-remote`:**
|
|
126
|
+
- Anyone on your network can access the ClaudeDesk interface
|
|
127
|
+
- With your auth token, they can access your configured repositories
|
|
128
|
+
- Claude can execute arbitrary commands on your machine
|
|
129
|
+
- Your code and file system are exposed
|
|
130
|
+
|
|
131
|
+
**Only use `--allow-remote` when:**
|
|
132
|
+
- You are on a trusted private network
|
|
133
|
+
- You have additional authentication/firewall in place
|
|
134
|
+
- You specifically need mobile or remote access
|
|
135
|
+
|
|
136
|
+
**Safer alternative:** Use the built-in tunnel feature for secure remote access without exposing your local network.
|
|
137
|
+
|
|
138
|
+
## Configuration
|
|
139
|
+
|
|
140
|
+
### Data Directory
|
|
141
|
+
|
|
142
|
+
ClaudeDesk stores all configuration and data in a dedicated directory:
|
|
143
|
+
|
|
144
|
+
**Default locations:**
|
|
145
|
+
- Linux/macOS: `~/.claudedesk`
|
|
146
|
+
- Windows: `%APPDATA%\claudedesk`
|
|
147
|
+
|
|
148
|
+
**Custom location:**
|
|
149
|
+
```bash
|
|
150
|
+
claudedesk --data-dir /custom/path
|
|
151
|
+
# Or via environment variable
|
|
152
|
+
export CLAUDEDESK_DATA_DIR=/custom/path
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Directory structure:**
|
|
156
|
+
```
|
|
157
|
+
.claudedesk/
|
|
158
|
+
config/
|
|
159
|
+
settings.json # App settings
|
|
160
|
+
repos.json # Repository configuration
|
|
161
|
+
workspaces.json # Workspace definitions
|
|
162
|
+
skills/ # Custom Claude skills
|
|
163
|
+
usage/ # API usage tracking
|
|
164
|
+
artifacts/ # Session artifacts and exports
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Environment Variables
|
|
168
|
+
|
|
169
|
+
ClaudeDesk can be configured via environment variables:
|
|
170
|
+
|
|
171
|
+
| Variable | Default | Description |
|
|
172
|
+
|----------|---------|-------------|
|
|
173
|
+
| `CLAUDEDESK_PORT` | 8787 | Port to listen on |
|
|
174
|
+
| `CLAUDEDESK_DATA_DIR` | `~/.claudedesk` | Data directory path |
|
|
175
|
+
| `ALLOW_REMOTE` | false | Set to `true` for remote access |
|
|
176
|
+
| `GITHUB_CLIENT_ID` | - | GitHub OAuth client ID |
|
|
177
|
+
| `GITHUB_CLIENT_SECRET` | - | GitHub OAuth client secret |
|
|
178
|
+
| `GITLAB_CLIENT_ID` | - | GitLab OAuth client ID |
|
|
179
|
+
| `GITLAB_CLIENT_SECRET` | - | GitLab OAuth client secret |
|
|
180
|
+
|
|
181
|
+
Example:
|
|
182
|
+
```bash
|
|
183
|
+
CLAUDEDESK_PORT=3000 ALLOW_REMOTE=true claudedesk
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Workspaces
|
|
187
|
+
|
|
188
|
+
Configure your repositories in `config/repos.json` (inside your data directory):
|
|
189
|
+
|
|
190
|
+
```json
|
|
191
|
+
{
|
|
192
|
+
"allowedBasePaths": ["/path/to/repos"],
|
|
193
|
+
"repos": [
|
|
194
|
+
{
|
|
195
|
+
"id": "my-project",
|
|
196
|
+
"path": "/path/to/repos/my-project"
|
|
197
|
+
}
|
|
198
|
+
]
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### GitHub OAuth (Optional)
|
|
203
|
+
|
|
204
|
+
To enable push and PR creation via OAuth:
|
|
205
|
+
|
|
206
|
+
1. Create a GitHub OAuth App at https://github.com/settings/developers
|
|
207
|
+
2. Set the callback URL to `http://localhost:<PORT>/api/auth/github/callback`
|
|
208
|
+
- Replace `<PORT>` with your configured port (default: 8787)
|
|
209
|
+
3. Add credentials to your environment:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
export GITHUB_CLIENT_ID=your_client_id
|
|
213
|
+
export GITHUB_CLIENT_SECRET=your_client_secret
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### GitLab OAuth (Optional)
|
|
217
|
+
|
|
218
|
+
1. Create a GitLab Application at https://gitlab.com/-/user_settings/applications
|
|
219
|
+
2. Set the callback URL to `http://localhost:<PORT>/api/auth/gitlab/callback`
|
|
220
|
+
- Replace `<PORT>` with your configured port (default: 8787)
|
|
221
|
+
3. Add credentials to your environment:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
export GITLAB_CLIENT_ID=your_client_id
|
|
225
|
+
export GITLAB_CLIENT_SECRET=your_client_secret
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## API Reference
|
|
229
|
+
|
|
230
|
+
### Health Check
|
|
231
|
+
|
|
232
|
+
**GET `/api/health`**
|
|
233
|
+
|
|
234
|
+
Returns server health status and version information. Used for Docker healthchecks and monitoring.
|
|
235
|
+
|
|
236
|
+
```json
|
|
237
|
+
{
|
|
238
|
+
"success": true,
|
|
239
|
+
"data": {
|
|
240
|
+
"status": "ok",
|
|
241
|
+
"version": "2.0.0",
|
|
242
|
+
"uptime": 12345,
|
|
243
|
+
"timestamp": "2024-01-27T12:00:00.000Z"
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Ship Workflow Endpoints
|
|
249
|
+
|
|
250
|
+
These endpoints power the commit, push, and PR creation workflow.
|
|
251
|
+
|
|
252
|
+
#### Get Ship Summary
|
|
253
|
+
|
|
254
|
+
**GET `/api/terminal/sessions/:id/ship-summary`**
|
|
255
|
+
|
|
256
|
+
Returns the current state of changes ready to ship.
|
|
257
|
+
|
|
258
|
+
Query parameters:
|
|
259
|
+
- `repoId` (optional) - For multi-repo sessions
|
|
260
|
+
|
|
261
|
+
```json
|
|
262
|
+
{
|
|
263
|
+
"files": [
|
|
264
|
+
{
|
|
265
|
+
"path": "src/index.ts",
|
|
266
|
+
"status": "modified",
|
|
267
|
+
"insertions": 10,
|
|
268
|
+
"deletions": 3,
|
|
269
|
+
"oldPath": null
|
|
270
|
+
}
|
|
271
|
+
],
|
|
272
|
+
"totalInsertions": 10,
|
|
273
|
+
"totalDeletions": 3,
|
|
274
|
+
"currentBranch": "feature/my-feature",
|
|
275
|
+
"baseBranch": "main",
|
|
276
|
+
"hasUncommittedChanges": true,
|
|
277
|
+
"hasChangesToShip": true,
|
|
278
|
+
"unpushedCommits": 0,
|
|
279
|
+
"hasStagedChanges": false,
|
|
280
|
+
"hasUnstagedChanges": true,
|
|
281
|
+
"existingPR": null
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
#### Generate PR Content
|
|
286
|
+
|
|
287
|
+
**POST `/api/terminal/sessions/:id/generate-pr-content`**
|
|
288
|
+
|
|
289
|
+
Uses AI to generate a PR title and description based on the changes.
|
|
290
|
+
|
|
291
|
+
Request body:
|
|
292
|
+
```json
|
|
293
|
+
{
|
|
294
|
+
"repoId": "optional-repo-id",
|
|
295
|
+
"targetBranch": "main"
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Response:
|
|
300
|
+
```json
|
|
301
|
+
{
|
|
302
|
+
"title": "Add user authentication flow",
|
|
303
|
+
"description": "## Summary\n- Implements login/logout functionality\n- Adds session management\n\n## Changes\n- New auth middleware\n- Updated routes"
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
#### Ship Changes
|
|
308
|
+
|
|
309
|
+
**POST `/api/terminal/sessions/:id/ship`**
|
|
310
|
+
|
|
311
|
+
Commits, pushes, and optionally creates a PR.
|
|
312
|
+
|
|
313
|
+
Request body:
|
|
314
|
+
```json
|
|
315
|
+
{
|
|
316
|
+
"commitMessage": "Add user authentication",
|
|
317
|
+
"push": true,
|
|
318
|
+
"createPR": true,
|
|
319
|
+
"prTitle": "Add user authentication flow",
|
|
320
|
+
"prBody": "## Summary\n...",
|
|
321
|
+
"targetBranch": "main",
|
|
322
|
+
"repoId": "optional-repo-id"
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
Response:
|
|
327
|
+
```json
|
|
328
|
+
{
|
|
329
|
+
"success": true,
|
|
330
|
+
"committed": true,
|
|
331
|
+
"pushed": true,
|
|
332
|
+
"prUrl": "https://github.com/user/repo/pull/123",
|
|
333
|
+
"commitHash": "abc1234"
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
For complete API documentation, see [ARCHITECTURE.md](ARCHITECTURE.md).
|
|
338
|
+
|
|
339
|
+
## Troubleshooting
|
|
340
|
+
|
|
341
|
+
### Installation Issues
|
|
342
|
+
|
|
343
|
+
**"Permission denied" when installing globally**
|
|
344
|
+
```bash
|
|
345
|
+
# Use npx instead (no global install needed)
|
|
346
|
+
npx claudedesk
|
|
347
|
+
|
|
348
|
+
# Or fix npm permissions (Linux/macOS)
|
|
349
|
+
sudo npm install -g claudedesk
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**"Command not found: claudedesk"**
|
|
353
|
+
```bash
|
|
354
|
+
# Check npm global bin directory is in PATH
|
|
355
|
+
npm config get prefix
|
|
356
|
+
# Add to PATH if needed:
|
|
357
|
+
export PATH="$PATH:$(npm config get prefix)/bin"
|
|
358
|
+
|
|
359
|
+
# Or use npx
|
|
360
|
+
npx claudedesk
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### Runtime Issues
|
|
364
|
+
|
|
365
|
+
**"Port 8787 already in use"**
|
|
366
|
+
```bash
|
|
367
|
+
claudedesk --port 3000
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
**"Cannot create data directory"**
|
|
371
|
+
```bash
|
|
372
|
+
# Check permissions
|
|
373
|
+
ls -la ~/.claudedesk
|
|
374
|
+
|
|
375
|
+
# Use custom location with write access
|
|
376
|
+
claudedesk --data-dir ./my-data
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
**"Claude CLI not found"**
|
|
380
|
+
|
|
381
|
+
ClaudeDesk requires Claude Code CLI for terminal sessions. Install it from:
|
|
382
|
+
https://docs.anthropic.com/en/docs/claude-code
|
|
383
|
+
|
|
384
|
+
ClaudeDesk will show a warning but continue running without terminal features if Claude CLI is not found.
|
|
385
|
+
|
|
386
|
+
## Data Migration
|
|
387
|
+
|
|
388
|
+
### Backing Up Your Data
|
|
389
|
+
|
|
390
|
+
```bash
|
|
391
|
+
# Linux/macOS
|
|
392
|
+
tar -czf claudedesk-backup.tar.gz ~/.claudedesk
|
|
393
|
+
|
|
394
|
+
# Windows (PowerShell)
|
|
395
|
+
Compress-Archive -Path "$env:APPDATA\claudedesk" -DestinationPath claudedesk-backup.zip
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Restoring Data
|
|
399
|
+
|
|
400
|
+
```bash
|
|
401
|
+
# Linux/macOS
|
|
402
|
+
tar -xzf claudedesk-backup.tar.gz -C ~
|
|
403
|
+
|
|
404
|
+
# Or specify custom location
|
|
405
|
+
claudedesk --data-dir /path/to/restored/data
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
## Architecture
|
|
409
|
+
|
|
410
|
+
```
|
|
411
|
+
src/
|
|
412
|
+
api/ # Express routes
|
|
413
|
+
core/ # Claude invoker, git operations, session management
|
|
414
|
+
config/ # Settings, workspaces, skills
|
|
415
|
+
ui/app/ # React frontend
|
|
416
|
+
config/
|
|
417
|
+
repos.json # Repository configuration (example)
|
|
418
|
+
skills/ # Custom skill definitions
|
|
419
|
+
deploy/
|
|
420
|
+
docker-compose.yml # Production Docker deployment
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
## Contributing
|
|
424
|
+
|
|
425
|
+
Contributions welcome. Please open an issue first to discuss significant changes.
|
|
426
|
+
|
|
427
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
|
|
428
|
+
|
|
429
|
+
## License
|
|
430
|
+
|
|
431
|
+
MIT
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Copy this file to repos.json and customize for your environment. Remove this _comment field.",
|
|
3
|
+
|
|
4
|
+
"allowedBasePaths": [
|
|
5
|
+
"./repos",
|
|
6
|
+
"/path/to/your/repositories"
|
|
7
|
+
],
|
|
8
|
+
|
|
9
|
+
"scanPaths": [
|
|
10
|
+
"/path/to/scan/for/repos",
|
|
11
|
+
"/another/scan/path"
|
|
12
|
+
],
|
|
13
|
+
|
|
14
|
+
"branchPrefix": "claudedesk",
|
|
15
|
+
|
|
16
|
+
"repos": [
|
|
17
|
+
{
|
|
18
|
+
"_comment": "Example: Node.js web application with API health check proof",
|
|
19
|
+
"id": "my-web-app",
|
|
20
|
+
"path": "/path/to/your/repositories/my-web-app",
|
|
21
|
+
"commands": {
|
|
22
|
+
"install": "npm install",
|
|
23
|
+
"build": "npm run build",
|
|
24
|
+
"test": "npm test",
|
|
25
|
+
"run": "npm run dev"
|
|
26
|
+
},
|
|
27
|
+
"proof": {
|
|
28
|
+
"mode": "api",
|
|
29
|
+
"api": {
|
|
30
|
+
"healthUrl": "http://localhost:3000/api/health",
|
|
31
|
+
"timeout": 30000
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"port": 3000,
|
|
35
|
+
"tunnel": {
|
|
36
|
+
"enabled": false
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"_comment": "Example: Frontend app with web screenshot proof",
|
|
41
|
+
"id": "my-frontend",
|
|
42
|
+
"path": "/path/to/your/repositories/my-frontend",
|
|
43
|
+
"commands": {
|
|
44
|
+
"install": "npm install",
|
|
45
|
+
"build": "npm run build",
|
|
46
|
+
"test": "npm test",
|
|
47
|
+
"run": "npm run dev"
|
|
48
|
+
},
|
|
49
|
+
"proof": {
|
|
50
|
+
"mode": "web",
|
|
51
|
+
"web": {
|
|
52
|
+
"url": "http://localhost:5173",
|
|
53
|
+
"waitForSelector": "#app",
|
|
54
|
+
"assertText": "Welcome"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"port": 5173
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"_comment": "Example: CLI tool with stdout assertion proof",
|
|
61
|
+
"id": "my-cli-tool",
|
|
62
|
+
"path": "/path/to/your/repositories/my-cli-tool",
|
|
63
|
+
"commands": {
|
|
64
|
+
"install": "npm install",
|
|
65
|
+
"build": "npm run build",
|
|
66
|
+
"test": "npm test"
|
|
67
|
+
},
|
|
68
|
+
"proof": {
|
|
69
|
+
"mode": "cli",
|
|
70
|
+
"cli": {
|
|
71
|
+
"command": "node dist/cli.js --version",
|
|
72
|
+
"assertStdout": "v1.0.0",
|
|
73
|
+
"assertRegex": "^v\\d+\\.\\d+\\.\\d+$"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"_comment": "Example: Monorepo with multiple services",
|
|
79
|
+
"id": "my-monorepo",
|
|
80
|
+
"path": "/path/to/your/repositories/my-monorepo",
|
|
81
|
+
"commands": {
|
|
82
|
+
"install": "npm install",
|
|
83
|
+
"build": "npm run build",
|
|
84
|
+
"test": "npm test"
|
|
85
|
+
},
|
|
86
|
+
"proof": {
|
|
87
|
+
"mode": "api",
|
|
88
|
+
"api": {
|
|
89
|
+
"healthUrl": "http://localhost:3001/health",
|
|
90
|
+
"timeout": 30000
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"isMonorepo": true,
|
|
94
|
+
"services": [
|
|
95
|
+
{
|
|
96
|
+
"id": "@myapp/frontend",
|
|
97
|
+
"name": "frontend",
|
|
98
|
+
"path": "packages/frontend",
|
|
99
|
+
"framework": "Next.js",
|
|
100
|
+
"runScript": "dev",
|
|
101
|
+
"suggestedPort": 3000,
|
|
102
|
+
"proof": {
|
|
103
|
+
"mode": "web",
|
|
104
|
+
"web": {
|
|
105
|
+
"url": "http://localhost:3000"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "@myapp/api",
|
|
111
|
+
"name": "api",
|
|
112
|
+
"path": "packages/api",
|
|
113
|
+
"framework": "Express",
|
|
114
|
+
"runScript": "dev",
|
|
115
|
+
"suggestedPort": 3001,
|
|
116
|
+
"proof": {
|
|
117
|
+
"mode": "api",
|
|
118
|
+
"api": {
|
|
119
|
+
"healthUrl": "http://localhost:3001/health",
|
|
120
|
+
"timeout": 30000
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
],
|
|
125
|
+
"primaryService": "@myapp/frontend"
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Copy this file to settings.json and fill in your values. Remove this _comment field.",
|
|
3
|
+
|
|
4
|
+
"setupCompleted": false,
|
|
5
|
+
|
|
6
|
+
"general": {
|
|
7
|
+
"theme": "dark",
|
|
8
|
+
"defaultProofMode": "web",
|
|
9
|
+
"logRetentionDays": 30,
|
|
10
|
+
"autoCleanupArtifacts": false
|
|
11
|
+
},
|
|
12
|
+
|
|
13
|
+
"voice": {
|
|
14
|
+
"whisperModel": "small.en",
|
|
15
|
+
"enabled": true
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
"notifications": {
|
|
19
|
+
"enabled": true,
|
|
20
|
+
"sound": true,
|
|
21
|
+
"jobComplete": true,
|
|
22
|
+
"jobFailed": true
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
"favorites": {
|
|
26
|
+
"repos": [],
|
|
27
|
+
"recentRepos": []
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
"github": {
|
|
31
|
+
"_comment": "Create a GitHub OAuth App at https://github.com/settings/developers",
|
|
32
|
+
"clientId": "your-github-oauth-client-id"
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
"gitlab": {
|
|
36
|
+
"_comment": "Create a GitLab OAuth App at https://gitlab.com/-/user_settings/applications",
|
|
37
|
+
"clientId": "your-gitlab-oauth-client-id"
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
"docker": {
|
|
41
|
+
"enabled": false,
|
|
42
|
+
"autoStart": false,
|
|
43
|
+
"services": {
|
|
44
|
+
"postgres": {
|
|
45
|
+
"enabled": false,
|
|
46
|
+
"port": 5432,
|
|
47
|
+
"image": "postgres",
|
|
48
|
+
"version": "16-alpine",
|
|
49
|
+
"username": "claudedesk",
|
|
50
|
+
"password": "your-secure-random-password",
|
|
51
|
+
"database": "claudedesk_dev",
|
|
52
|
+
"dataVolume": true
|
|
53
|
+
},
|
|
54
|
+
"redis": {
|
|
55
|
+
"enabled": false,
|
|
56
|
+
"port": 6379,
|
|
57
|
+
"image": "redis",
|
|
58
|
+
"version": "7-alpine",
|
|
59
|
+
"dataVolume": false
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"networkName": "claudedesk-dev-network"
|
|
63
|
+
}
|
|
64
|
+
}
|