claude-ws 0.1.25 → 0.1.27
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 +42 -269
- package/bin/claudekanban.js +6 -3
- package/drizzle.config.ts +6 -3
- package/package.json +23 -29
- package/public/docs/swagger/api-docs.html +96 -0
- package/public/docs/swagger/index.html +465 -0
- package/public/docs/swagger/swagger.yaml +4330 -0
- package/public/logo.png +0 -0
- package/public/logo.svg +11 -0
- package/public/manifest.json +17 -0
- package/scripts/check-dependencies.sh +64 -0
- package/scripts/db-fix-columns.ts +64 -0
- package/scripts/test-package.sh +82 -0
- package/scripts/update-swagger-server.sh +63 -0
- package/server.ts +111 -18
- package/src/app/api/agent-factory/discover/route.ts +2 -2
- package/src/app/api/agent-factory/projects/[projectId]/plugins/route.ts +37 -2
- package/src/app/api/agent-factory/upload/route.ts +124 -103
- package/src/app/api/attempts/[id]/route.ts +79 -5
- package/src/app/api/attempts/route.ts +223 -42
- package/src/app/api/checkpoints/rewind/route.ts +63 -19
- package/src/app/api/commands/route.ts +107 -10
- package/src/app/docs/swagger/page.tsx +17 -0
- package/src/app/layout.tsx +7 -1
- package/src/app/page.tsx +8 -2
- package/src/components/agent-factory/plugin-list.tsx +6 -1
- package/src/components/agent-factory/upload-dialog.tsx +13 -3
- package/src/components/claude/tool-use-block.tsx +66 -2
- package/src/components/editor/code-editor-with-definitions.tsx +2 -0
- package/src/components/editor/code-editor-with-inline-edit.tsx +2 -0
- package/src/components/editor/code-mirror-editor.tsx +2 -0
- package/src/components/editor/extensions/goto-definition.ts +6 -3
- package/src/components/header.tsx +13 -4
- package/src/components/kanban/board.tsx +17 -3
- package/src/components/kanban/column.tsx +3 -1
- package/src/components/kanban/create-task-dialog.tsx +3 -2
- package/src/components/kanban/task-card.tsx +22 -3
- package/src/components/settings/setup-dialog.tsx +11 -4
- package/src/components/sidebar/file-browser/file-tab-content.tsx +146 -215
- package/src/components/sidebar/file-browser/file-tabs-panel.tsx +21 -17
- package/src/components/sidebar/file-browser/unified-search.tsx +4 -4
- package/src/components/sidebar/git-changes/diff-tabs-panel.tsx +11 -10
- package/src/components/sidebar/git-changes/git-panel.tsx +11 -3
- package/src/components/task/command-selector.tsx +17 -4
- package/src/components/task/conversation-view.tsx +110 -2
- package/src/components/task/interactive-command/checkpoint-list.tsx +28 -15
- package/src/components/task/prompt-input.tsx +88 -3
- package/src/components/task/task-detail-panel.tsx +26 -4
- package/src/components/task/task-shell-indicator.tsx +7 -3
- package/src/components/ui/detachable-window.tsx +1 -1
- package/src/components/ui/dialog.tsx +2 -2
- package/src/components/ui/textarea.tsx +1 -1
- package/src/hooks/use-attempt-stream.ts +16 -0
- package/src/lib/agent-factory-dir.ts +20 -16
- package/src/lib/agent-manager.ts +317 -45
- package/src/lib/attempt-waiter.ts +109 -0
- package/src/lib/checkpoint-manager.ts +16 -3
- package/src/lib/content-types.ts +71 -0
- package/src/lib/db/index.ts +51 -3
- package/src/lib/db/schema.ts +3 -0
- package/src/lib/file-utils.ts +10 -0
- package/src/lib/output-formatter.ts +313 -0
- package/src/lib/sdk-event-adapter.ts +45 -1
- package/src/lib/session-manager.ts +7 -5
- package/src/lib/shell-manager.ts +105 -9
- package/src/lib/system-prompt.ts +79 -74
- package/src/types/index.ts +20 -0
package/README.md
CHANGED
|
@@ -1,321 +1,94 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ClaudeWS
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> **DISCLAIMER:** This software is provided "AS IS" without warranty. [Read full disclaimer](./DISCLAIMER.md).
|
|
4
4
|
|
|
5
|
-
**Visual workspace for Claude Code
|
|
5
|
+
**Visual workspace for Claude Code** — Kanban board, code editor, Git integration, local-first SQLite.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Why Claude Workspace?
|
|
12
|
-
|
|
13
|
-
| Feature | Benefit |
|
|
14
|
-
|---------|---------|
|
|
15
|
-
| 🌍 **Work Everywhere** | SQLite-based local storage—no cloud dependency, works offline anywhere |
|
|
16
|
-
| ⚡ **Consistent Performance** | Lightweight footprint, instant startup, responsive UI on any connection |
|
|
17
|
-
| 🎯 **Unique Workflow** | Conversation checkpoints—rewind, branch, and continue at any point |
|
|
18
|
-
| ✨ **Intuitive Management** | Drag-and-drop Kanban, live streaming, file browser with Git status |
|
|
19
|
-
| 🔌 **Flexible Plugins** | Agent Factory—install only the skills and agents your project needs |
|
|
20
|
-
| 🔋 **Claude Code Native** | Full CLI integration with real-time streaming and file attachments |
|
|
7
|
+

|
|
21
8
|
|
|
22
9
|
---
|
|
23
10
|
|
|
24
11
|
## Features
|
|
25
12
|
|
|
26
|
-
**
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
**
|
|
32
|
-
-
|
|
33
|
-
- Checkpoints: Save and rewind to any conversation state
|
|
34
|
-
- File attachments for context
|
|
35
|
-
- Custom commands: `/cook`, `/plan`, `/fix`, `/brainstorm`
|
|
36
|
-
- Detachable chat window
|
|
37
|
-
|
|
38
|
-
**Code Editor**
|
|
39
|
-
- Tabbed CodeMirror editor with syntax highlighting
|
|
40
|
-
- AI-powered inline code suggestions
|
|
41
|
-
- Go-to-definition navigation
|
|
42
|
-
- Multi-file editing
|
|
43
|
-
|
|
44
|
-
**File System**
|
|
45
|
-
- Interactive file tree browser
|
|
46
|
-
- Unified search (files + content)
|
|
47
|
-
- File preview
|
|
48
|
-
|
|
49
|
-
**Git Integration**
|
|
50
|
-
- Full Git workflow: status, stage, commit, diff
|
|
51
|
-
- Visual Git graph
|
|
52
|
-
- Checkpoint Git snapshots for time-travel debugging
|
|
53
|
-
|
|
54
|
-
**Agent Factory**
|
|
55
|
-
- Plugin system for Claude skills, commands, agents
|
|
56
|
-
- Dependency management
|
|
57
|
-
- Per-project plugin installation
|
|
58
|
-
|
|
59
|
-
**Developer Tools**
|
|
60
|
-
- Background shell process manager
|
|
61
|
-
- Terminal output streaming
|
|
62
|
-
- Multi-project workspace support
|
|
63
|
-
- Themes: Light, Dark, VS Code variants, Dracula
|
|
13
|
+
- **Kanban Board** — Drag-and-drop task management with full conversation history
|
|
14
|
+
- **Real-time Streaming** — Live Claude responses via Socket.io
|
|
15
|
+
- **Checkpoints** — Save and rewind to any conversation state
|
|
16
|
+
- **Code Editor** — Tabbed CodeMirror with syntax highlighting and AI suggestions
|
|
17
|
+
- **Git Integration** — Status, stage, commit, diff, visual graph
|
|
18
|
+
- **Agent Factory** — Plugin system for custom skills, commands, agents
|
|
19
|
+
- **Themes** — Light, Dark, VS Code variants, Dracula
|
|
64
20
|
|
|
65
21
|
---
|
|
66
22
|
|
|
67
23
|
## Quick Start
|
|
68
24
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
**Prerequisites:** Node.js 20+, pnpm 9+, [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)
|
|
25
|
+
**Prerequisites:** Node.js 20+, [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)
|
|
72
26
|
|
|
73
27
|
```bash
|
|
74
|
-
npx
|
|
75
|
-
|
|
28
|
+
# Option 1: npx (quick try)
|
|
29
|
+
npx -y claudews
|
|
76
30
|
|
|
77
|
-
|
|
31
|
+
# Option 2: Global install (recommended)
|
|
32
|
+
npm install -g claudews
|
|
33
|
+
claudews
|
|
78
34
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
### Option 2: Install globally (Recommended)
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
npm install -g claude-ws
|
|
88
|
-
claude-ws
|
|
35
|
+
# Option 3: From source
|
|
36
|
+
git clone https://github.com/Claude-Workspace/claudews.git
|
|
37
|
+
cd claudews
|
|
38
|
+
pnpm install && pnpm dev
|
|
89
39
|
```
|
|
90
40
|
|
|
91
|
-
|
|
41
|
+
Open http://localhost:8556
|
|
92
42
|
|
|
93
|
-
|
|
43
|
+
---
|
|
94
44
|
|
|
95
|
-
|
|
96
|
-
git clone https://github.com/Claude-Workspace/claude-ws.git
|
|
97
|
-
cd claude-ws
|
|
98
|
-
pnpm install
|
|
99
|
-
pnpm db:migrate
|
|
100
|
-
pnpm dev
|
|
101
|
-
```
|
|
45
|
+
## API Documentation
|
|
102
46
|
|
|
103
|
-
|
|
47
|
+
See [Swagger API Docs](README-docs-swagger.md)
|
|
104
48
|
|
|
105
49
|
---
|
|
106
50
|
|
|
107
51
|
## Configuration
|
|
108
52
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
For secure deployments, you can enable API authentication by setting an `API_ACCESS_KEY`:
|
|
112
|
-
|
|
113
|
-
1. Create a `.env` file in your project directory (or use the global one in `~/.claude-ws/.env`)
|
|
114
|
-
2. Add your API access key:
|
|
53
|
+
Create `.env` file (or use `~/.claudews/.env`):
|
|
115
54
|
|
|
116
55
|
```bash
|
|
117
|
-
#
|
|
118
|
-
API_ACCESS_KEY=your-secret-key
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
3. All API requests must include the key in the `x-api-key` header:
|
|
56
|
+
# Optional: API authentication for remote access
|
|
57
|
+
API_ACCESS_KEY=your-secret-key
|
|
122
58
|
|
|
123
|
-
|
|
124
|
-
|
|
59
|
+
# Optional: Custom Claude CLI path
|
|
60
|
+
CLAUDE_PATH=/path/to/claude
|
|
125
61
|
```
|
|
126
62
|
|
|
127
|
-
**Note:** Leave `API_ACCESS_KEY` empty to disable authentication (default for local development).
|
|
128
|
-
|
|
129
|
-
### Claude Code CLI Path
|
|
130
|
-
|
|
131
|
-
Claude Workspace requires the Claude Code CLI to be installed. Set the `CLAUDE_PATH` environment variable to point to your Claude executable:
|
|
132
|
-
|
|
133
|
-
**Linux/Ubuntu:**
|
|
134
|
-
```bash
|
|
135
|
-
CLAUDE_PATH=/home/$(whoami)/.local/bin/claude
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
**macOS (Homebrew):**
|
|
139
|
-
```bash
|
|
140
|
-
CLAUDE_PATH=/opt/homebrew/bin/claude
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
**Windows:**
|
|
144
|
-
```bash
|
|
145
|
-
CLAUDE_PATH=%USERPROFILE%\.local\bin\claude.exe
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
Add this to your `.env` file in the project directory, or the global `.env` at `~/.claude-ws/.env`.
|
|
149
|
-
|
|
150
|
-
### Environment Variables
|
|
151
|
-
|
|
152
63
|
| Variable | Description | Default |
|
|
153
64
|
|----------|-------------|---------|
|
|
154
|
-
| `
|
|
155
|
-
| `
|
|
156
|
-
| `
|
|
157
|
-
| `API_ACCESS_KEY` | API authentication key | (empty, no auth) |
|
|
158
|
-
| `DATABASE_URL` | SQLite database path | `./data.db` |
|
|
159
|
-
| `AGENT_FACTORY_DIR` | Agent Factory plugins directory | `~/.claude/agentfactory` |
|
|
65
|
+
| `PORT` | Server port | `8556` |
|
|
66
|
+
| `API_ACCESS_KEY` | API authentication key | (empty) |
|
|
67
|
+
| `CLAUDE_PATH` | Claude CLI path | Auto-detected |
|
|
160
68
|
|
|
161
69
|
---
|
|
162
70
|
|
|
163
|
-
##
|
|
164
|
-
|
|
165
|
-
Access Claude Workspace securely from anywhere using Cloudflare Tunnel + Access.
|
|
166
|
-
|
|
167
|
-
### 1. Install cloudflared
|
|
168
|
-
|
|
169
|
-
```bash
|
|
170
|
-
# macOS
|
|
171
|
-
brew install cloudflared
|
|
172
|
-
|
|
173
|
-
# Linux
|
|
174
|
-
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
|
|
175
|
-
chmod +x cloudflared && sudo mv cloudflared /usr/local/bin/
|
|
176
|
-
|
|
177
|
-
# Windows
|
|
178
|
-
winget install Cloudflare.cloudflared
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### 2. Authenticate with Cloudflare
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
cloudflared tunnel login
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### 3. Create Tunnel
|
|
71
|
+
## Production (PM2)
|
|
188
72
|
|
|
189
73
|
```bash
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
Create `~/.cloudflared/config.yml`:
|
|
196
|
-
|
|
197
|
-
```yaml
|
|
198
|
-
tunnel: claude-workspace
|
|
199
|
-
credentials-file: ~/.cloudflared/<TUNNEL_ID>.json
|
|
200
|
-
|
|
201
|
-
ingress:
|
|
202
|
-
- hostname: claude-ws.yourdomain.com
|
|
203
|
-
service: http://localhost:8556
|
|
204
|
-
- service: http_status:404
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
### 5. Add DNS Record
|
|
208
|
-
|
|
209
|
-
```bash
|
|
210
|
-
cloudflared tunnel route dns claude-workspace claude-ws.yourdomain.com
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### 6. Run Tunnel
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
# Foreground
|
|
217
|
-
cloudflared tunnel run claude-workspace
|
|
218
|
-
|
|
219
|
-
# Or as service (recommended)
|
|
220
|
-
sudo cloudflared service install
|
|
221
|
-
sudo systemctl enable cloudflared
|
|
222
|
-
sudo systemctl start cloudflared
|
|
74
|
+
npm install -g pm2
|
|
75
|
+
pnpm pm2:start # Start server (auto-builds)
|
|
76
|
+
pnpm pm2:logs # View logs
|
|
77
|
+
pnpm pm2:restart # Restart
|
|
78
|
+
pnpm pm2:stop # Stop
|
|
223
79
|
```
|
|
224
80
|
|
|
225
|
-
### 7. Setup Cloudflare Access (Authentication)
|
|
226
|
-
|
|
227
|
-
1. Go to [Cloudflare Zero Trust Dashboard](https://one.dash.cloudflare.com/)
|
|
228
|
-
2. Navigate to **Access** → **Applications** → **Add an application**
|
|
229
|
-
3. Select **Self-hosted**
|
|
230
|
-
4. Configure:
|
|
231
|
-
- **Application name**: Claude Workspace
|
|
232
|
-
- **Session duration**: 24 hours (or your preference)
|
|
233
|
-
- **Application domain**: `claude-ws.yourdomain.com`
|
|
234
|
-
5. Add **Access Policy**:
|
|
235
|
-
- **Policy name**: Allowed Users
|
|
236
|
-
- **Action**: Allow
|
|
237
|
-
- **Include**: Emails ending in `@yourdomain.com` or specific email addresses
|
|
238
|
-
6. Save and deploy
|
|
239
|
-
|
|
240
|
-
Now access `https://claude-ws.yourdomain.com` from anywhere with Cloudflare authentication.
|
|
241
|
-
|
|
242
81
|
---
|
|
243
82
|
|
|
244
|
-
##
|
|
245
|
-
|
|
246
|
-
### Check current version
|
|
247
|
-
```bash
|
|
248
|
-
claude-ws --version
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
### Update to latest version
|
|
252
|
-
```bash
|
|
253
|
-
npm update -g claude-ws
|
|
254
|
-
```
|
|
83
|
+
## Remote Access
|
|
255
84
|
|
|
256
|
-
|
|
257
|
-
```bash
|
|
258
|
-
npm install -g claude-ws@latest
|
|
259
|
-
```
|
|
85
|
+
For secure remote access, see [Cloudflare Tunnel Setup](./docs/cloudflare-tunnel.md).
|
|
260
86
|
|
|
261
87
|
---
|
|
262
88
|
|
|
263
89
|
## Tech Stack
|
|
264
90
|
|
|
265
|
-
|
|
266
|
-
- **Database**: SQLite + Drizzle ORM
|
|
267
|
-
- **Real-time**: Socket.io
|
|
268
|
-
- **Styling**: Tailwind CSS 4
|
|
269
|
-
- **UI**: Radix UI primitives
|
|
270
|
-
- **State**: Zustand
|
|
271
|
-
- **Drag & Drop**: dnd-kit
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## Scripts
|
|
276
|
-
|
|
277
|
-
| Command | Description |
|
|
278
|
-
|---------|-------------|
|
|
279
|
-
| `pnpm dev` | Start development server |
|
|
280
|
-
| `pnpm build` | Build for production |
|
|
281
|
-
| `pnpm start` | Start production server |
|
|
282
|
-
| `pnpm lint` | Run ESLint |
|
|
283
|
-
| `pnpm db:migrate` | Run database migrations |
|
|
284
|
-
| `pnpm pm2:start` | Start with PM2 process manager |
|
|
285
|
-
| `pnpm pm2:stop` | Stop PM2 process |
|
|
286
|
-
| `pnpm pm2:restart` | Restart PM2 process |
|
|
287
|
-
| `pnpm pm2:logs` | View PM2 logs |
|
|
288
|
-
| `pnpm pm2:monit` | Monitor PM2 process |
|
|
289
|
-
|
|
290
|
-
### Running with PM2
|
|
291
|
-
|
|
292
|
-
For production deployments with auto-restart and process management:
|
|
293
|
-
|
|
294
|
-
```bash
|
|
295
|
-
# Install PM2 globally (if not already installed)
|
|
296
|
-
npm install -g pm2
|
|
297
|
-
|
|
298
|
-
# Start the server
|
|
299
|
-
pnpm pm2:start
|
|
300
|
-
|
|
301
|
-
# View logs
|
|
302
|
-
pnpm pm2:logs
|
|
303
|
-
|
|
304
|
-
# Monitor process
|
|
305
|
-
pnpm pm2:monit
|
|
306
|
-
|
|
307
|
-
# Restart
|
|
308
|
-
pnpm pm2:restart
|
|
309
|
-
|
|
310
|
-
# Stop
|
|
311
|
-
pnpm pm2:stop
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
PM2 Features:
|
|
315
|
-
- Auto-restart on crash (max 10 attempts)
|
|
316
|
-
- Memory limit monitoring (500MB)
|
|
317
|
-
- Log rotation and management
|
|
318
|
-
- Process status tracking
|
|
91
|
+
Next.js 16, React 19, SQLite + Drizzle ORM, Socket.io, Tailwind CSS 4, Radix UI, Zustand
|
|
319
92
|
|
|
320
93
|
---
|
|
321
94
|
|
package/bin/claudekanban.js
CHANGED
|
@@ -14,6 +14,9 @@ const path = require('path');
|
|
|
14
14
|
const fs = require('fs');
|
|
15
15
|
const os = require('os');
|
|
16
16
|
|
|
17
|
+
// Load environment variables
|
|
18
|
+
require('dotenv').config({ path: path.join(__dirname, '..', '.env') });
|
|
19
|
+
|
|
17
20
|
// Get package root directory
|
|
18
21
|
const packageRoot = path.resolve(__dirname, '..');
|
|
19
22
|
|
|
@@ -43,11 +46,11 @@ For more info: https://github.com/Claude-Workspace/claude-ws
|
|
|
43
46
|
process.exit(0);
|
|
44
47
|
}
|
|
45
48
|
|
|
46
|
-
// Database path
|
|
47
|
-
const DB_DIR = path.join(
|
|
49
|
+
// Database path - use DATA_DIR from env if configured, otherwise default to project data dir
|
|
50
|
+
const DB_DIR = process.env.DATA_DIR || path.join(packageRoot, 'data');
|
|
48
51
|
const DB_PATH = path.join(DB_DIR, 'claude-ws.db');
|
|
49
52
|
|
|
50
|
-
// Ensure
|
|
53
|
+
// Ensure database directory exists
|
|
51
54
|
if (!fs.existsSync(DB_DIR)) {
|
|
52
55
|
console.log('[Claude Workspace] Creating database directory:', DB_DIR);
|
|
53
56
|
fs.mkdirSync(DB_DIR, { recursive: true });
|
package/drizzle.config.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { Config } from 'drizzle-kit';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import os from 'os';
|
|
4
3
|
import fs from 'fs';
|
|
4
|
+
import { config } from 'dotenv';
|
|
5
5
|
|
|
6
|
-
//
|
|
7
|
-
const
|
|
6
|
+
// Load environment variables
|
|
7
|
+
const env = config();
|
|
8
|
+
|
|
9
|
+
// Database location - use DATA_DIR from env if configured, otherwise default to project data dir
|
|
10
|
+
const DB_DIR = process.env.DATA_DIR || path.join(process.cwd(), 'data');
|
|
8
11
|
const DB_PATH = path.join(DB_DIR, 'claude-ws.db');
|
|
9
12
|
|
|
10
13
|
// Ensure directory exists before drizzle-kit tries to connect
|
package/package.json
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-ws",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.27",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A beautifully crafted workspace interface for Claude Code with real-time streaming and local SQLite database",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"claude",
|
|
8
|
+
"claudews",
|
|
9
|
+
"claude-ws",
|
|
8
10
|
"claude-code",
|
|
9
11
|
"workspace",
|
|
10
12
|
"task-management",
|
|
@@ -29,6 +31,7 @@
|
|
|
29
31
|
"files": [
|
|
30
32
|
"bin",
|
|
31
33
|
"drizzle",
|
|
34
|
+
"scripts",
|
|
32
35
|
"src",
|
|
33
36
|
"public",
|
|
34
37
|
"server.ts",
|
|
@@ -57,24 +60,11 @@
|
|
|
57
60
|
},
|
|
58
61
|
"scripts": {
|
|
59
62
|
"dev": "tsx server.ts",
|
|
60
|
-
"dev:next": "next dev",
|
|
61
63
|
"build": "NODE_ENV=production next build",
|
|
62
64
|
"start": "NODE_ENV=production tsx server.ts",
|
|
63
|
-
"lint": "eslint",
|
|
64
65
|
"db:generate": "drizzle-kit generate",
|
|
65
|
-
"db:
|
|
66
|
-
"
|
|
67
|
-
"pm2:stop": "pm2 stop claude-ws",
|
|
68
|
-
"pm2:restart": "pm2 restart claude-ws",
|
|
69
|
-
"pm2:delete": "pm2 delete claude-ws",
|
|
70
|
-
"pm2:logs": "pm2 logs claude-ws",
|
|
71
|
-
"pm2:monit": "pm2 monit",
|
|
72
|
-
"version:patch": "npm version patch --no-git-tag-version",
|
|
73
|
-
"version:minor": "npm version minor --no-git-tag-version",
|
|
74
|
-
"version:major": "npm version major --no-git-tag-version",
|
|
75
|
-
"prepublishOnly": "npm run build",
|
|
76
|
-
"test:package": "./scripts/test-package.sh",
|
|
77
|
-
"publish:npm": "npm publish --access public"
|
|
66
|
+
"db:fix": "tsx scripts/db-fix-columns.ts",
|
|
67
|
+
"prepublishOnly": "npm run build"
|
|
78
68
|
},
|
|
79
69
|
"dependencies": {
|
|
80
70
|
"@anthropic-ai/claude-agent-sdk": "^0.2.5",
|
|
@@ -110,6 +100,12 @@
|
|
|
110
100
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
111
101
|
"@radix-ui/react-toast": "^1.2.15",
|
|
112
102
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
103
|
+
"@tailwindcss/postcss": "^4",
|
|
104
|
+
"@types/adm-zip": "^0.5.7",
|
|
105
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
106
|
+
"@types/node": "^20",
|
|
107
|
+
"@types/react": "^19",
|
|
108
|
+
"@types/react-dom": "^19",
|
|
113
109
|
"@uiw/react-codemirror": "^4.25.4",
|
|
114
110
|
"adm-zip": "^0.5.16",
|
|
115
111
|
"better-sqlite3": "^12.5.0",
|
|
@@ -119,8 +115,12 @@
|
|
|
119
115
|
"date-fns": "^4.1.0",
|
|
120
116
|
"diff": "^8.0.3",
|
|
121
117
|
"dotenv": "^17.2.3",
|
|
118
|
+
"drizzle-kit": "^0.31.8",
|
|
122
119
|
"drizzle-orm": "^0.45.1",
|
|
120
|
+
"eslint": "^9",
|
|
121
|
+
"eslint-config-next": "^16.1.3",
|
|
123
122
|
"highlight.js": "^11.11.1",
|
|
123
|
+
"js-yaml": "^4.1.1",
|
|
124
124
|
"lucide-react": "^0.562.0",
|
|
125
125
|
"nanoid": "^5.1.6",
|
|
126
126
|
"next": "^16.1.3",
|
|
@@ -134,22 +134,16 @@
|
|
|
134
134
|
"socket.io-client": "^4.8.3",
|
|
135
135
|
"sonner": "^2.0.7",
|
|
136
136
|
"tailwind-merge": "^3.4.0",
|
|
137
|
+
"tailwindcss": "^4",
|
|
137
138
|
"tar": "^7.5.2",
|
|
138
139
|
"tsx": "^4.21.0",
|
|
140
|
+
"tw-animate-css": "^1.4.0",
|
|
139
141
|
"typescript": "^5",
|
|
140
142
|
"vscode-icons-js": "^11.6.1",
|
|
141
|
-
"zustand": "^5.0.9"
|
|
142
|
-
"@tailwindcss/postcss": "^4",
|
|
143
|
-
"tailwindcss": "^4",
|
|
144
|
-
"tw-animate-css": "^1.4.0",
|
|
145
|
-
"drizzle-kit": "^0.31.8",
|
|
146
|
-
"@types/adm-zip": "^0.5.7",
|
|
147
|
-
"@types/better-sqlite3": "^7.6.13",
|
|
148
|
-
"@types/node": "^20",
|
|
149
|
-
"@types/react": "^19",
|
|
150
|
-
"@types/react-dom": "^19",
|
|
151
|
-
"eslint": "^9",
|
|
152
|
-
"eslint-config-next": "^16.1.3"
|
|
143
|
+
"zustand": "^5.0.9"
|
|
153
144
|
},
|
|
154
|
-
"packageManager": "pnpm@10.28.0+sha512.05df71d1421f21399e053fde567cea34d446fa02c76571441bfc1c7956e98e363088982d940465fd34480d4d90a0668bc12362f8aa88000a64e83d0b0e47be48"
|
|
145
|
+
"packageManager": "pnpm@10.28.0+sha512.05df71d1421f21399e053fde567cea34d446fa02c76571441bfc1c7956e98e363088982d940465fd34480d4d90a0668bc12362f8aa88000a64e83d0b0e47be48",
|
|
146
|
+
"devDependencies": {
|
|
147
|
+
"@types/js-yaml": "^4.0.9"
|
|
148
|
+
}
|
|
155
149
|
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Claude Workspace API Documentation</title>
|
|
7
|
+
<link rel="stylesheet" type="text/css" href="https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui.css">
|
|
8
|
+
<style>
|
|
9
|
+
html {
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
overflow: -moz-scrollbars-vertical;
|
|
12
|
+
overflow-y: scroll;
|
|
13
|
+
}
|
|
14
|
+
*, *:before, *:after {
|
|
15
|
+
box-sizing: inherit;
|
|
16
|
+
}
|
|
17
|
+
body {
|
|
18
|
+
margin: 0;
|
|
19
|
+
padding: 0;
|
|
20
|
+
font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
21
|
+
}
|
|
22
|
+
.topbar {
|
|
23
|
+
background-color: #1a1a1a;
|
|
24
|
+
padding: 15px 0;
|
|
25
|
+
}
|
|
26
|
+
.topbar-wrapper {
|
|
27
|
+
max-width: 1460px;
|
|
28
|
+
margin: 0 auto;
|
|
29
|
+
padding: 0 20px;
|
|
30
|
+
display: flex;
|
|
31
|
+
align-items: center;
|
|
32
|
+
justify-content: space-between;
|
|
33
|
+
}
|
|
34
|
+
.topbar-wrapper .link {
|
|
35
|
+
display: flex;
|
|
36
|
+
align-items: center;
|
|
37
|
+
color: #ffffff;
|
|
38
|
+
text-decoration: none;
|
|
39
|
+
}
|
|
40
|
+
.topbar-wrapper .link img {
|
|
41
|
+
height: 40px;
|
|
42
|
+
margin-right: 12px;
|
|
43
|
+
}
|
|
44
|
+
.topbar-wrapper .link span {
|
|
45
|
+
font-size: 1.2em;
|
|
46
|
+
font-weight: 600;
|
|
47
|
+
}
|
|
48
|
+
.info {
|
|
49
|
+
margin: 40px 0;
|
|
50
|
+
}
|
|
51
|
+
</style>
|
|
52
|
+
</head>
|
|
53
|
+
<body>
|
|
54
|
+
<div class="topbar">
|
|
55
|
+
<div class="topbar-wrapper">
|
|
56
|
+
<a href="https://github.com/Claude-Workspace/claude-ws" class="link">
|
|
57
|
+
<svg height="32" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true" fill="white">
|
|
58
|
+
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>
|
|
59
|
+
</svg>
|
|
60
|
+
<span>Claude Workspace API</span>
|
|
61
|
+
</a>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
<div id="swagger-ui"></div>
|
|
65
|
+
<script src="https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-bundle.js" charset="UTF-8"></script>
|
|
66
|
+
<script src="https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-standalone-preset.js" charset="UTF-8"></script>
|
|
67
|
+
<script>
|
|
68
|
+
window.onload = function() {
|
|
69
|
+
const ui = SwaggerUIBundle({
|
|
70
|
+
url: "/docs/swagger/swagger.yaml",
|
|
71
|
+
dom_id: '#swagger-ui',
|
|
72
|
+
deepLinking: true,
|
|
73
|
+
presets: [
|
|
74
|
+
SwaggerUIBundle.presets.apis,
|
|
75
|
+
SwaggerUIStandalonePreset
|
|
76
|
+
],
|
|
77
|
+
plugins: [
|
|
78
|
+
SwaggerUIBundle.plugins.DownloadUrl
|
|
79
|
+
],
|
|
80
|
+
layout: "StandaloneLayout",
|
|
81
|
+
defaultModelsExpandDepth: 1,
|
|
82
|
+
defaultModelExpandDepth: 1,
|
|
83
|
+
docExpansion: "list",
|
|
84
|
+
filter: true,
|
|
85
|
+
tryItOutEnabled: true,
|
|
86
|
+
persistAuthorization: true,
|
|
87
|
+
syntaxHighlight: {
|
|
88
|
+
activate: true,
|
|
89
|
+
theme: "monokai"
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
window.ui = ui;
|
|
93
|
+
};
|
|
94
|
+
</script>
|
|
95
|
+
</body>
|
|
96
|
+
</html>
|