zuppaclaude 1.2.0 → 1.3.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/assets/commands/zc/help.md +6 -0
- package/assets/commands/zc/hud.md +45 -0
- package/lib/components/cloud.js +89 -0
- package/lib/components/commands.js +2 -1
- package/lib/installer.js +38 -6
- package/package.json +1 -1
|
@@ -46,6 +46,12 @@ Display ZuppaClaude commands and documentation.
|
|
|
46
46
|
| `/zc:settings import` | Import settings |
|
|
47
47
|
| `/zc:settings reset` | Reset to defaults |
|
|
48
48
|
|
|
49
|
+
### Claude HUD
|
|
50
|
+
|
|
51
|
+
| Command | Description |
|
|
52
|
+
|---------|-------------|
|
|
53
|
+
| `/zc:hud` | Claude HUD setup instructions |
|
|
54
|
+
|
|
49
55
|
## Quick Start
|
|
50
56
|
|
|
51
57
|
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: zc:hud
|
|
3
|
+
description: "Claude HUD setup instructions"
|
|
4
|
+
category: utility
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /zc:hud - Claude HUD Setup
|
|
8
|
+
|
|
9
|
+
Display Claude HUD installation instructions.
|
|
10
|
+
|
|
11
|
+
## What is Claude HUD?
|
|
12
|
+
|
|
13
|
+
Claude HUD is a status display plugin that provides:
|
|
14
|
+
- Real-time context usage meter
|
|
15
|
+
- Active tool tracking
|
|
16
|
+
- Running agent status
|
|
17
|
+
- Todo progress display
|
|
18
|
+
|
|
19
|
+
## Installation Steps
|
|
20
|
+
|
|
21
|
+
Run these commands inside Claude Code:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
1. /plugin marketplace add jarrodwatts/claude-hud
|
|
25
|
+
2. /plugin install claude-hud
|
|
26
|
+
3. /claude-hud:setup
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Requirements
|
|
30
|
+
|
|
31
|
+
- Claude Code v1.0.80 or later
|
|
32
|
+
- Plugin support enabled
|
|
33
|
+
|
|
34
|
+
## CLI Alternative
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
setup-claude-hud
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Execution
|
|
41
|
+
|
|
42
|
+
When this command is invoked:
|
|
43
|
+
1. Show the Claude HUD information above
|
|
44
|
+
2. Guide the user through the installation steps
|
|
45
|
+
3. Explain that they need to run the plugin commands in Claude Code
|
package/lib/components/cloud.js
CHANGED
|
@@ -22,6 +22,95 @@ class CloudManager {
|
|
|
22
22
|
return this.platform.commandExists('rclone');
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Install rclone
|
|
27
|
+
*/
|
|
28
|
+
async installRclone() {
|
|
29
|
+
if (this.isRcloneInstalled()) {
|
|
30
|
+
this.logger.success('rclone is already installed');
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
this.logger.step('Installing rclone...');
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
if (this.platform.isMac) {
|
|
38
|
+
// Check if brew is available
|
|
39
|
+
if (this.platform.commandExists('brew')) {
|
|
40
|
+
this.platform.exec('brew install rclone', { silent: false, stdio: 'inherit' });
|
|
41
|
+
} else {
|
|
42
|
+
this.logger.warning('Homebrew not found, using curl installer');
|
|
43
|
+
this.platform.exec('curl https://rclone.org/install.sh | sudo bash', { silent: false, stdio: 'inherit' });
|
|
44
|
+
}
|
|
45
|
+
} else if (this.platform.isLinux) {
|
|
46
|
+
// Try package managers in order
|
|
47
|
+
if (this.platform.commandExists('apt')) {
|
|
48
|
+
this.platform.exec('sudo apt update && sudo apt install -y rclone', { silent: false, stdio: 'inherit' });
|
|
49
|
+
} else if (this.platform.commandExists('dnf')) {
|
|
50
|
+
this.platform.exec('sudo dnf install -y rclone', { silent: false, stdio: 'inherit' });
|
|
51
|
+
} else if (this.platform.commandExists('pacman')) {
|
|
52
|
+
this.platform.exec('sudo pacman -S --noconfirm rclone', { silent: false, stdio: 'inherit' });
|
|
53
|
+
} else {
|
|
54
|
+
// Fallback to curl installer
|
|
55
|
+
this.platform.exec('curl https://rclone.org/install.sh | sudo bash', { silent: false, stdio: 'inherit' });
|
|
56
|
+
}
|
|
57
|
+
} else if (this.platform.isWindows) {
|
|
58
|
+
// Windows - try winget first
|
|
59
|
+
if (this.platform.commandExists('winget')) {
|
|
60
|
+
this.platform.exec('winget install -e --id Rclone.Rclone', { silent: false, stdio: 'inherit' });
|
|
61
|
+
} else if (this.platform.commandExists('choco')) {
|
|
62
|
+
this.platform.exec('choco install rclone -y', { silent: false, stdio: 'inherit' });
|
|
63
|
+
} else {
|
|
64
|
+
this.logger.error('Please install rclone manually: https://rclone.org/install/');
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Verify installation
|
|
70
|
+
if (this.isRcloneInstalled()) {
|
|
71
|
+
this.logger.success('rclone installed successfully');
|
|
72
|
+
return true;
|
|
73
|
+
} else {
|
|
74
|
+
this.logger.warning('rclone installation may require terminal restart');
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
} catch (error) {
|
|
78
|
+
this.logger.error(`Failed to install rclone: ${error.message}`);
|
|
79
|
+
this.logger.info('Install manually: https://rclone.org/install/');
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Verify rclone installation
|
|
86
|
+
*/
|
|
87
|
+
verify() {
|
|
88
|
+
if (this.isRcloneInstalled()) {
|
|
89
|
+
try {
|
|
90
|
+
const version = this.platform.exec('rclone version', { silent: true });
|
|
91
|
+
const versionMatch = version?.match(/rclone v([\d.]+)/);
|
|
92
|
+
if (versionMatch) {
|
|
93
|
+
this.logger.success(`rclone: v${versionMatch[1]}`);
|
|
94
|
+
} else {
|
|
95
|
+
this.logger.success('rclone: Installed');
|
|
96
|
+
}
|
|
97
|
+
} catch {
|
|
98
|
+
this.logger.success('rclone: Installed');
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const remotes = this.getRemotes();
|
|
102
|
+
if (remotes.length > 0) {
|
|
103
|
+
this.logger.info(`Remotes: ${remotes.join(', ')}`);
|
|
104
|
+
} else {
|
|
105
|
+
this.logger.info('No remotes configured (run: rclone config)');
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
} else {
|
|
109
|
+
this.logger.warning('rclone: Not installed');
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
25
114
|
/**
|
|
26
115
|
* Get available rclone remotes
|
|
27
116
|
*/
|
|
@@ -53,7 +53,7 @@ class CommandsInstaller {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
this.logger.success(`Installed ${installed} slash commands`);
|
|
56
|
-
this.logger.info('Commands available: /zc:backup, /zc:restore, /zc:cloud, /zc:session, /zc:settings, /zc:help');
|
|
56
|
+
this.logger.info('Commands available: /zc:backup, /zc:restore, /zc:cloud, /zc:session, /zc:settings, /zc:hud, /zc:help');
|
|
57
57
|
|
|
58
58
|
return true;
|
|
59
59
|
} catch (error) {
|
|
@@ -120,6 +120,7 @@ class CommandsInstaller {
|
|
|
120
120
|
{ cmd: '/zc:cloud', desc: 'Cloud backup management' },
|
|
121
121
|
{ cmd: '/zc:session', desc: 'Session management' },
|
|
122
122
|
{ cmd: '/zc:settings', desc: 'Settings management' },
|
|
123
|
+
{ cmd: '/zc:hud', desc: 'Claude HUD setup instructions' },
|
|
123
124
|
{ cmd: '/zc:help', desc: 'Show help' }
|
|
124
125
|
];
|
|
125
126
|
|
package/lib/installer.js
CHANGED
|
@@ -12,7 +12,8 @@ const {
|
|
|
12
12
|
ConfigInstaller,
|
|
13
13
|
ClaudeZInstaller,
|
|
14
14
|
ClaudeHUDInstaller,
|
|
15
|
-
CommandsInstaller
|
|
15
|
+
CommandsInstaller,
|
|
16
|
+
CloudManager
|
|
16
17
|
} = require('./components');
|
|
17
18
|
|
|
18
19
|
class Installer {
|
|
@@ -29,6 +30,7 @@ class Installer {
|
|
|
29
30
|
this.claudeZ = new ClaudeZInstaller();
|
|
30
31
|
this.claudeHUD = new ClaudeHUDInstaller();
|
|
31
32
|
this.commands = new CommandsInstaller();
|
|
33
|
+
this.cloud = new CloudManager();
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
/**
|
|
@@ -38,7 +40,7 @@ class Installer {
|
|
|
38
40
|
this.logger.banner();
|
|
39
41
|
|
|
40
42
|
// Step 1: Check dependencies
|
|
41
|
-
this.logger.step('Step 1/
|
|
43
|
+
this.logger.step('Step 1/9: Checking Dependencies');
|
|
42
44
|
const depsOk = await this.checkDependencies();
|
|
43
45
|
if (!depsOk) {
|
|
44
46
|
this.logger.error('Dependency check failed. Please install required dependencies.');
|
|
@@ -112,12 +114,33 @@ class Installer {
|
|
|
112
114
|
this.logger.info('Skipping Claude HUD installation');
|
|
113
115
|
}
|
|
114
116
|
|
|
115
|
-
// Step 7: Install
|
|
116
|
-
this.logger.step('Step 7/
|
|
117
|
+
// Step 7: Install rclone for cloud backup (optional)
|
|
118
|
+
this.logger.step('Step 7/9: Cloud Backup Setup (rclone)');
|
|
119
|
+
let installRclone = false;
|
|
120
|
+
let rcloneInstalled = this.cloud.isRcloneInstalled();
|
|
121
|
+
|
|
122
|
+
if (rcloneInstalled) {
|
|
123
|
+
this.logger.success('rclone is already installed');
|
|
124
|
+
} else {
|
|
125
|
+
if (useExisting && existingSettings.rclone !== undefined) {
|
|
126
|
+
installRclone = existingSettings.rclone;
|
|
127
|
+
} else {
|
|
128
|
+
installRclone = await this.prompts.confirm('Install rclone for cloud backup (Google Drive, Dropbox, S3)?', true);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (installRclone) {
|
|
132
|
+
rcloneInstalled = await this.cloud.installRclone();
|
|
133
|
+
} else {
|
|
134
|
+
this.logger.info('Skipping rclone installation');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Step 8: Install ZuppaClaude Commands
|
|
139
|
+
this.logger.step('Step 8/9: Installing ZuppaClaude Slash Commands');
|
|
117
140
|
const cmdsInstalled = await this.commands.install();
|
|
118
141
|
|
|
119
|
-
// Step
|
|
120
|
-
this.logger.step('Step
|
|
142
|
+
// Step 9: Verification
|
|
143
|
+
this.logger.step('Step 9/9: Verifying Installation');
|
|
121
144
|
console.log('');
|
|
122
145
|
|
|
123
146
|
this.superClaude.verify();
|
|
@@ -125,6 +148,7 @@ class Installer {
|
|
|
125
148
|
this.config.verify();
|
|
126
149
|
if (installClaudeZ) this.claudeZ.verify();
|
|
127
150
|
if (installClaudeHUD) this.claudeHUD.verify();
|
|
151
|
+
this.cloud.verify();
|
|
128
152
|
this.commands.verify();
|
|
129
153
|
|
|
130
154
|
// Save settings
|
|
@@ -132,6 +156,7 @@ class Installer {
|
|
|
132
156
|
specKit: installSpecKit,
|
|
133
157
|
claudeZ: installClaudeZ,
|
|
134
158
|
claudeHUD: installClaudeHUD,
|
|
159
|
+
rclone: rcloneInstalled,
|
|
135
160
|
zaiApiKey: zaiApiKey ? this.settings.encodeApiKey(zaiApiKey) : null,
|
|
136
161
|
installedAt: new Date().toISOString(),
|
|
137
162
|
version: require('../package.json').version
|
|
@@ -147,6 +172,7 @@ class Installer {
|
|
|
147
172
|
config: cfgInstalled,
|
|
148
173
|
claudeZ: czInstalled,
|
|
149
174
|
claudeHUD: hudInstalled,
|
|
175
|
+
rclone: rcloneInstalled,
|
|
150
176
|
commands: cmdsInstalled
|
|
151
177
|
});
|
|
152
178
|
|
|
@@ -214,6 +240,7 @@ class Installer {
|
|
|
214
240
|
{ name: 'CLAUDE.md', installed: results.config },
|
|
215
241
|
{ name: 'Claude-Z', installed: results.claudeZ },
|
|
216
242
|
{ name: 'Claude HUD', installed: results.claudeHUD },
|
|
243
|
+
{ name: 'rclone', installed: results.rclone },
|
|
217
244
|
{ name: 'ZC Commands', installed: results.commands }
|
|
218
245
|
];
|
|
219
246
|
|
|
@@ -251,6 +278,11 @@ class Installer {
|
|
|
251
278
|
console.log(' For Claude HUD: run setup-claude-hud');
|
|
252
279
|
console.log('');
|
|
253
280
|
}
|
|
281
|
+
|
|
282
|
+
if (results.rclone) {
|
|
283
|
+
console.log(' Cloud backup ready! Configure with: rclone config');
|
|
284
|
+
console.log('');
|
|
285
|
+
}
|
|
254
286
|
}
|
|
255
287
|
}
|
|
256
288
|
|