claude-ws 0.1.8 β 0.1.10
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 +77 -37
- package/bin/claudekanban.js +55 -20
- package/package.json +4 -3
- package/src/lib/update-checker.ts +35 -0
package/README.md
CHANGED
|
@@ -1,72 +1,93 @@
|
|
|
1
1
|
# Claude Workspace
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Visual workspace for Claude Code with Kanban board, code editor, and Git integration.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Local-first SQLite database. Real-time streaming. Plugin system for custom agents and skills.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## Why Claude Workspace?
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
### β¨ Intuitive Management
|
|
21
|
-
Drag-and-drop across columns. Watch responses stream live. Navigate conversation history. File browser with git status. Everything where you expect it.
|
|
22
|
-
|
|
23
|
-
### π Flexible Plugins
|
|
24
|
-
Agent Factory manages Claude skills, commands, and agents per project. Install what you need. Your toolkit, your rules.
|
|
25
|
-
|
|
26
|
-
### π Powered by Claude Code
|
|
27
|
-
Native CLI integration. Real-time streaming. File attachments. Full persistence. All the power, none of the friction.
|
|
11
|
+
| Feature | Benefit |
|
|
12
|
+
|---------|---------|
|
|
13
|
+
| π **Work Everywhere** | SQLite-based local storageβno cloud dependency, works offline anywhere |
|
|
14
|
+
| β‘ **Consistent Performance** | Lightweight footprint, instant startup, responsive UI on any connection |
|
|
15
|
+
| π― **Unique Workflow** | Conversation checkpointsβrewind, branch, and continue at any point |
|
|
16
|
+
| β¨ **Intuitive Management** | Drag-and-drop Kanban, live streaming, file browser with Git status |
|
|
17
|
+
| π **Flexible Plugins** | Agent Factoryβinstall only the skills and agents your project needs |
|
|
18
|
+
| π **Claude Code Native** | Full CLI integration with real-time streaming and file attachments |
|
|
28
19
|
|
|
29
20
|
---
|
|
30
21
|
|
|
31
22
|
## Features
|
|
32
23
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
24
|
+
**Task Management**
|
|
25
|
+
- Kanban board: To Do β In Progress β In Review β Done β Cancelled
|
|
26
|
+
- Drag-and-drop task cards with auto-save
|
|
27
|
+
- Full conversation history per task
|
|
28
|
+
|
|
29
|
+
**AI Interaction**
|
|
30
|
+
- Real-time streaming of Claude responses via Socket.io
|
|
31
|
+
- Checkpoints: Save and rewind to any conversation state
|
|
32
|
+
- File attachments for context
|
|
33
|
+
- Custom commands: `/cook`, `/plan`, `/fix`, `/brainstorm`
|
|
34
|
+
- Detachable chat window
|
|
35
|
+
|
|
36
|
+
**Code Editor**
|
|
37
|
+
- Tabbed CodeMirror editor with syntax highlighting
|
|
38
|
+
- AI-powered inline code suggestions
|
|
39
|
+
- Go-to-definition navigation
|
|
40
|
+
- Multi-file editing
|
|
41
|
+
|
|
42
|
+
**File System**
|
|
43
|
+
- Interactive file tree browser
|
|
44
|
+
- Unified search (files + content)
|
|
45
|
+
- File preview
|
|
46
|
+
|
|
47
|
+
**Git Integration**
|
|
48
|
+
- Full Git workflow: status, stage, commit, diff
|
|
49
|
+
- Visual Git graph
|
|
50
|
+
- Checkpoint Git snapshots for time-travel debugging
|
|
51
|
+
|
|
52
|
+
**Agent Factory**
|
|
53
|
+
- Plugin system for Claude skills, commands, agents
|
|
54
|
+
- Dependency management
|
|
55
|
+
- Per-project plugin installation
|
|
56
|
+
|
|
57
|
+
**Developer Tools**
|
|
58
|
+
- Background shell process manager
|
|
59
|
+
- Terminal output streaming
|
|
60
|
+
- Multi-project workspace support
|
|
61
|
+
- Themes: Light, Dark, VS Code variants, Dracula
|
|
45
62
|
|
|
46
63
|
---
|
|
47
64
|
|
|
48
65
|
## Quick Start
|
|
49
66
|
|
|
50
|
-
### Option 1: Run with npx
|
|
67
|
+
### Option 1: Run with npx
|
|
51
68
|
|
|
52
69
|
**Prerequisites:** Node.js 20+, pnpm 9+, [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)
|
|
53
70
|
|
|
54
71
|
```bash
|
|
55
|
-
npx
|
|
72
|
+
npx -y claude-ws
|
|
56
73
|
```
|
|
57
74
|
|
|
75
|
+
The `-y` flag skips the "Ok to proceed?" prompt.
|
|
76
|
+
|
|
58
77
|
The first run will:
|
|
59
78
|
- Auto-create SQLite database in `~/.claude-ws/`
|
|
60
|
-
-
|
|
79
|
+
- Install dependencies and build automatically
|
|
61
80
|
- Start the server on http://localhost:8556
|
|
62
81
|
|
|
63
|
-
### Option 2: Install globally
|
|
82
|
+
### Option 2: Install globally (Recommended)
|
|
64
83
|
|
|
65
84
|
```bash
|
|
66
|
-
npm install -g
|
|
67
|
-
|
|
85
|
+
npm install -g claude-ws
|
|
86
|
+
claude-ws
|
|
68
87
|
```
|
|
69
88
|
|
|
89
|
+
Global installation avoids npx prompts and rebuilding on every run.
|
|
90
|
+
|
|
70
91
|
### Option 3: Development from source
|
|
71
92
|
|
|
72
93
|
```bash
|
|
@@ -81,6 +102,25 @@ Open [http://localhost:8556](http://localhost:8556)
|
|
|
81
102
|
|
|
82
103
|
---
|
|
83
104
|
|
|
105
|
+
## Updating
|
|
106
|
+
|
|
107
|
+
### Check current version
|
|
108
|
+
```bash
|
|
109
|
+
claude-ws --version
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Update to latest version
|
|
113
|
+
```bash
|
|
114
|
+
npm update -g claude-ws
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Force reinstall
|
|
118
|
+
```bash
|
|
119
|
+
npm install -g claude-ws@latest
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
84
124
|
## Tech Stack
|
|
85
125
|
|
|
86
126
|
- **Framework**: Next.js 16 + React 19
|
package/bin/claudekanban.js
CHANGED
|
@@ -17,6 +17,32 @@ const os = require('os');
|
|
|
17
17
|
// Get package root directory
|
|
18
18
|
const packageRoot = path.resolve(__dirname, '..');
|
|
19
19
|
|
|
20
|
+
// Handle CLI flags
|
|
21
|
+
if (process.argv.includes('--version') || process.argv.includes('-v')) {
|
|
22
|
+
const pkg = require(path.join(packageRoot, 'package.json'));
|
|
23
|
+
console.log(`v${pkg.version}`);
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
28
|
+
console.log(`
|
|
29
|
+
Claude Workspace - Visual workspace for Claude Code
|
|
30
|
+
|
|
31
|
+
Usage:
|
|
32
|
+
claude-ws [options]
|
|
33
|
+
|
|
34
|
+
Options:
|
|
35
|
+
-v, --version Show version number
|
|
36
|
+
-h, --help Show this help message
|
|
37
|
+
|
|
38
|
+
Examples:
|
|
39
|
+
claude-ws Start Claude Workspace server
|
|
40
|
+
|
|
41
|
+
For more info: https://github.com/Claude-Workspace/claude-ws
|
|
42
|
+
`);
|
|
43
|
+
process.exit(0);
|
|
44
|
+
}
|
|
45
|
+
|
|
20
46
|
// Database path (in user's home directory for persistence)
|
|
21
47
|
const DB_DIR = path.join(os.homedir(), '.claude-ws');
|
|
22
48
|
const DB_PATH = path.join(DB_DIR, 'claude-ws.db');
|
|
@@ -35,36 +61,43 @@ async function startServer() {
|
|
|
35
61
|
|
|
36
62
|
const serverPath = path.join(packageRoot, 'server.ts');
|
|
37
63
|
const nextBuildDir = path.join(packageRoot, '.next');
|
|
64
|
+
const nodeModulesDir = path.join(packageRoot, 'node_modules');
|
|
65
|
+
|
|
66
|
+
// Check if dependencies are installed
|
|
67
|
+
if (!fs.existsSync(nodeModulesDir) || !fs.existsSync(path.join(nodeModulesDir, 'next'))) {
|
|
68
|
+
console.log('[Claude Workspace] Installing dependencies...');
|
|
69
|
+
const { execSync } = require('child_process');
|
|
70
|
+
|
|
71
|
+
let installCmd = 'npm install --production=false';
|
|
72
|
+
try {
|
|
73
|
+
execSync('which pnpm', { stdio: 'ignore' });
|
|
74
|
+
installCmd = 'pnpm install --no-frozen-lockfile';
|
|
75
|
+
} catch {
|
|
76
|
+
// pnpm not found, use npm
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
execSync(installCmd, {
|
|
81
|
+
cwd: packageRoot,
|
|
82
|
+
stdio: 'inherit',
|
|
83
|
+
env: { ...process.env }
|
|
84
|
+
});
|
|
85
|
+
} catch (error) {
|
|
86
|
+
console.error('[Claude Workspace] Failed to install dependencies:', error.message);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
38
90
|
|
|
39
91
|
// Check if .next directory exists, if not, build it first
|
|
40
92
|
if (!fs.existsSync(nextBuildDir)) {
|
|
41
|
-
console.log('[Claude Workspace]
|
|
93
|
+
console.log('[Claude Workspace] Building production bundle...');
|
|
42
94
|
console.log('[Claude Workspace] This may take a minute...');
|
|
43
95
|
console.log('');
|
|
44
96
|
|
|
45
97
|
const { execSync } = require('child_process');
|
|
46
98
|
try {
|
|
47
|
-
// Use local next binary directly to avoid module singleton conflicts
|
|
48
|
-
// when running via npx (which fetches from registry)
|
|
49
99
|
const nextBin = path.join(packageRoot, 'node_modules', '.bin', 'next');
|
|
50
100
|
|
|
51
|
-
if (!fs.existsSync(nextBin)) {
|
|
52
|
-
// Dependencies not installed, install them first
|
|
53
|
-
console.log('[Claude Workspace] Installing dependencies...');
|
|
54
|
-
let installCmd = 'npm install --production=false';
|
|
55
|
-
try {
|
|
56
|
-
execSync('which pnpm', { stdio: 'ignore' });
|
|
57
|
-
installCmd = 'pnpm install';
|
|
58
|
-
} catch {
|
|
59
|
-
// pnpm not found, use npm
|
|
60
|
-
}
|
|
61
|
-
execSync(installCmd, {
|
|
62
|
-
cwd: packageRoot,
|
|
63
|
-
stdio: 'inherit',
|
|
64
|
-
env: { ...process.env }
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
|
|
68
101
|
// Run next build using local binary directly
|
|
69
102
|
execSync(`"${nextBin}" build`, {
|
|
70
103
|
cwd: packageRoot,
|
|
@@ -84,6 +117,8 @@ async function startServer() {
|
|
|
84
117
|
console.error('[Claude Workspace] Please ensure all dependencies are installed');
|
|
85
118
|
process.exit(1);
|
|
86
119
|
}
|
|
120
|
+
} else {
|
|
121
|
+
console.log('[Claude Workspace] Using cached build from:', nextBuildDir);
|
|
87
122
|
}
|
|
88
123
|
|
|
89
124
|
// Try to find tsx binary in different possible locations
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-ws",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
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": [
|
|
@@ -65,7 +65,8 @@
|
|
|
65
65
|
"version:patch": "npm version patch --no-git-tag-version",
|
|
66
66
|
"version:minor": "npm version minor --no-git-tag-version",
|
|
67
67
|
"version:major": "npm version major --no-git-tag-version",
|
|
68
|
-
"
|
|
68
|
+
"prepublishOnly": "pnpm run build",
|
|
69
|
+
"publish:npm": "npm publish --access public"
|
|
69
70
|
},
|
|
70
71
|
"dependencies": {
|
|
71
72
|
"@anthropic-ai/claude-agent-sdk": "^0.2.5",
|
|
@@ -144,4 +145,4 @@
|
|
|
144
145
|
"typescript": "^5"
|
|
145
146
|
},
|
|
146
147
|
"packageManager": "pnpm@10.28.0+sha512.05df71d1421f21399e053fde567cea34d446fa02c76571441bfc1c7956e98e363088982d940465fd34480d4d90a0668bc12362f8aa88000a64e83d0b0e47be48"
|
|
147
|
-
}
|
|
148
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check for available updates on npm registry
|
|
3
|
+
* Shows notification if newer version available
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { execSync } from 'child_process';
|
|
7
|
+
import { readFileSync } from 'fs';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
|
|
10
|
+
export async function checkForUpdates() {
|
|
11
|
+
try {
|
|
12
|
+
const pkgPath = join(process.cwd(), 'package.json');
|
|
13
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
14
|
+
const currentVersion = pkg.version;
|
|
15
|
+
|
|
16
|
+
// Quick check - don't block startup
|
|
17
|
+
const latestVersion = execSync('npm show claude-ws version', {
|
|
18
|
+
encoding: 'utf-8',
|
|
19
|
+
timeout: 3000,
|
|
20
|
+
stdio: ['pipe', 'pipe', 'ignore'], // Suppress errors
|
|
21
|
+
}).trim();
|
|
22
|
+
|
|
23
|
+
if (latestVersion && latestVersion !== currentVersion) {
|
|
24
|
+
console.log('');
|
|
25
|
+
console.log('\x1b[33m%s\x1b[0m', 'βββββββββββββββββββββββββββββββββββββββββββββββ');
|
|
26
|
+
console.log('\x1b[33m%s\x1b[0m', 'β Update available! β');
|
|
27
|
+
console.log('\x1b[33m%s\x1b[0m', `β ${currentVersion} β ${latestVersion} β`);
|
|
28
|
+
console.log('\x1b[33m%s\x1b[0m', 'β Run: npm update -g claude-ws β');
|
|
29
|
+
console.log('\x1b[33m%s\x1b[0m', 'βββββββββββββββββββββββββββββββββββββββββββββββ');
|
|
30
|
+
console.log('');
|
|
31
|
+
}
|
|
32
|
+
} catch (error) {
|
|
33
|
+
// Silently fail - don't block startup for update check
|
|
34
|
+
}
|
|
35
|
+
}
|