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.
@@ -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
@@ -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/8: Checking Dependencies');
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 ZuppaClaude Commands
116
- this.logger.step('Step 7/8: Installing ZuppaClaude Slash Commands');
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 8: Verification
120
- this.logger.step('Step 8/8: Verifying Installation');
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zuppaclaude",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Claude Code power-up installer - SuperClaude + Spec Kit + Claude-Z + Claude HUD",
5
5
  "main": "lib/index.js",
6
6
  "bin": {