@lenne.tech/cli 1.6.2 → 1.6.4
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/build/commands/claude/plugins.js +128 -350
- package/build/lib/claude-cli.js +95 -0
- package/build/lib/json-utils.js +20 -0
- package/build/lib/marketplace.js +160 -0
- package/build/lib/plugin-utils.js +453 -0
- package/build/lib/shell-config.js +110 -0
- package/docs/commands.md +34 -3
- package/package.json +1 -1
|
@@ -9,148 +9,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const path_1 = require("path");
|
|
12
|
+
const claude_cli_1 = require("../../lib/claude-cli");
|
|
13
|
+
const marketplace_1 = require("../../lib/marketplace");
|
|
14
|
+
const plugin_utils_1 = require("../../lib/plugin-utils");
|
|
16
15
|
/**
|
|
17
|
-
*
|
|
18
|
-
*/
|
|
19
|
-
const MARKETPLACE = {
|
|
20
|
-
apiBase: 'https://api.github.com/repos/lenneTech/claude-code/contents',
|
|
21
|
-
name: 'lenne-tech',
|
|
22
|
-
rawBase: 'https://raw.githubusercontent.com/lenneTech/claude-code/main',
|
|
23
|
-
repo: 'lenneTech/claude-code',
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* Fetch available plugins from GitHub repository
|
|
27
|
-
*/
|
|
28
|
-
function fetchAvailablePlugins(spin) {
|
|
29
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
-
const spinner = spin('Fetching available plugins from GitHub');
|
|
31
|
-
try {
|
|
32
|
-
// Get list of plugin directories
|
|
33
|
-
const dirResponse = yield fetch(`${MARKETPLACE.apiBase}/plugins`);
|
|
34
|
-
if (!dirResponse.ok) {
|
|
35
|
-
throw new Error(`Failed to fetch plugins directory: ${dirResponse.status}`);
|
|
36
|
-
}
|
|
37
|
-
const directories = yield dirResponse.json();
|
|
38
|
-
const pluginDirs = directories.filter(d => d.type === 'dir');
|
|
39
|
-
// Fetch plugin.json for each plugin
|
|
40
|
-
const plugins = [];
|
|
41
|
-
for (const dir of pluginDirs) {
|
|
42
|
-
try {
|
|
43
|
-
const manifestUrl = `${MARKETPLACE.rawBase}/plugins/${dir.name}/.claude-plugin/plugin.json`;
|
|
44
|
-
const manifestResponse = yield fetch(manifestUrl);
|
|
45
|
-
if (manifestResponse.ok) {
|
|
46
|
-
const manifest = yield manifestResponse.json();
|
|
47
|
-
plugins.push({
|
|
48
|
-
description: manifest.description,
|
|
49
|
-
marketplaceName: MARKETPLACE.name,
|
|
50
|
-
marketplaceRepo: MARKETPLACE.repo,
|
|
51
|
-
pluginName: manifest.name,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
catch (_a) {
|
|
56
|
-
// Skip plugins without valid manifest
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
spinner.succeed(`Found ${plugins.length} plugin${plugins.length !== 1 ? 's' : ''}`);
|
|
60
|
-
return plugins;
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
spinner.fail('Failed to fetch plugins from GitHub');
|
|
64
|
-
throw err;
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Find the claude CLI executable path
|
|
70
|
-
*/
|
|
71
|
-
function findClaudeCli() {
|
|
72
|
-
const possiblePaths = [
|
|
73
|
-
(0, path_1.join)((0, os_1.homedir)(), '.claude', 'local', 'claude'),
|
|
74
|
-
'/usr/local/bin/claude',
|
|
75
|
-
'/usr/bin/claude',
|
|
76
|
-
];
|
|
77
|
-
for (const p of possiblePaths) {
|
|
78
|
-
if ((0, fs_1.existsSync)(p)) {
|
|
79
|
-
return p;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
try {
|
|
83
|
-
const result = (0, child_process_1.execSync)('which claude', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
84
|
-
const path = result.trim();
|
|
85
|
-
if (path && (0, fs_1.existsSync)(path)) {
|
|
86
|
-
return path;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
catch (_a) {
|
|
90
|
-
// Ignore errors
|
|
91
|
-
}
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Recursively find all .md files in a directory
|
|
96
|
-
*/
|
|
97
|
-
function findMarkdownFiles(dir, basePath = '') {
|
|
98
|
-
const results = [];
|
|
99
|
-
if (!(0, fs_1.existsSync)(dir))
|
|
100
|
-
return results;
|
|
101
|
-
try {
|
|
102
|
-
const entries = (0, fs_1.readdirSync)(dir, { withFileTypes: true });
|
|
103
|
-
for (const entry of entries) {
|
|
104
|
-
const fullPath = (0, path_1.join)(dir, entry.name);
|
|
105
|
-
const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;
|
|
106
|
-
if (entry.isDirectory()) {
|
|
107
|
-
results.push(...findMarkdownFiles(fullPath, relativePath));
|
|
108
|
-
}
|
|
109
|
-
else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
110
|
-
// Convert path to command name (e.g., "git/commit-message.md" -> "/git:commit-message")
|
|
111
|
-
const commandName = relativePath
|
|
112
|
-
.replace(/\.md$/, '')
|
|
113
|
-
.replace(/\//g, ':');
|
|
114
|
-
results.push(`/${commandName}`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
catch (_a) {
|
|
119
|
-
// Ignore errors
|
|
120
|
-
}
|
|
121
|
-
return results;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Install a single plugin
|
|
16
|
+
* Install a single plugin (marketplace must already be added and updated)
|
|
125
17
|
*/
|
|
126
18
|
function installPlugin(plugin, cli, toolbox) {
|
|
127
19
|
return __awaiter(this, void 0, void 0, function* () {
|
|
128
20
|
const { print: { error, info, spin }, } = toolbox;
|
|
129
|
-
// Step 1:
|
|
130
|
-
const marketplaceSpinner = spin(`Adding marketplace for ${plugin.pluginName}`);
|
|
131
|
-
const addMarketplaceResult = runClaudeCommand(cli, `plugin marketplace add ${plugin.marketplaceRepo}`);
|
|
132
|
-
if (addMarketplaceResult.success || addMarketplaceResult.output.includes('already')) {
|
|
133
|
-
marketplaceSpinner.succeed(`Marketplace added for ${plugin.pluginName}`);
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
marketplaceSpinner.fail(`Failed to add marketplace for ${plugin.pluginName}`);
|
|
137
|
-
error(addMarketplaceResult.output);
|
|
138
|
-
return { action: 'failed', contents: readPluginContents(plugin.marketplaceName, plugin.pluginName), success: false };
|
|
139
|
-
}
|
|
140
|
-
// Step 2: Update marketplace cache to ensure latest version
|
|
141
|
-
const updateSpinner = spin(`Updating marketplace cache for ${plugin.marketplaceName}`);
|
|
142
|
-
const updateResult = runClaudeCommand(cli, `plugin marketplace update ${plugin.marketplaceName}`);
|
|
143
|
-
if (updateResult.success) {
|
|
144
|
-
updateSpinner.succeed(`Marketplace cache updated for ${plugin.marketplaceName}`);
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
// Non-fatal: continue with potentially cached version
|
|
148
|
-
updateSpinner.stopAndPersist({ symbol: '⚠', text: `Could not update marketplace cache, using cached version` });
|
|
149
|
-
}
|
|
150
|
-
// Step 3: Install or update plugin
|
|
21
|
+
// Step 1: Install or update plugin
|
|
151
22
|
const fullPluginName = `${plugin.pluginName}@${plugin.marketplaceName}`;
|
|
152
23
|
const pluginSpinner = spin(`Installing/updating ${plugin.pluginName}`);
|
|
153
|
-
const installResult = runClaudeCommand(cli, `plugin install ${fullPluginName}`);
|
|
24
|
+
const installResult = (0, claude_cli_1.runClaudeCommand)(cli, `plugin install ${fullPluginName}`);
|
|
154
25
|
let pluginAction = 'installed';
|
|
155
26
|
if (installResult.output.includes('already') || installResult.output.includes('up to date')) {
|
|
156
27
|
pluginAction = 'up to date';
|
|
@@ -168,19 +39,20 @@ function installPlugin(plugin, cli, toolbox) {
|
|
|
168
39
|
info('Manual installation:');
|
|
169
40
|
info(` /plugin marketplace add ${plugin.marketplaceRepo}`);
|
|
170
41
|
info(` /plugin install ${fullPluginName}`);
|
|
171
|
-
return { action: 'failed', contents:
|
|
42
|
+
return { action: 'failed', contents: plugin_utils_1.EMPTY_PLUGIN_CONTENTS, postInstall: null, success: false };
|
|
172
43
|
}
|
|
173
|
-
// Step
|
|
174
|
-
const pluginContents = readPluginContents(plugin.marketplaceName, plugin.pluginName);
|
|
175
|
-
// Warn if plugin seems empty
|
|
176
|
-
|
|
44
|
+
// Step 2: Read plugin contents
|
|
45
|
+
const pluginContents = (0, plugin_utils_1.readPluginContents)(plugin.marketplaceName, plugin.pluginName);
|
|
46
|
+
// Warn if plugin seems empty (but not for LSP plugins which don't have skills/commands)
|
|
47
|
+
const isLspPlugin = plugin.pluginName.endsWith('-lsp');
|
|
48
|
+
if (!isLspPlugin && pluginContents.skills.length === 0 && pluginContents.commands.length === 0) {
|
|
177
49
|
info('');
|
|
178
50
|
info(`Warning: No skills or commands found for ${plugin.pluginName}. Plugin may not be installed correctly.`);
|
|
179
51
|
}
|
|
180
|
-
// Step
|
|
52
|
+
// Step 3: Setup permissions
|
|
181
53
|
if (pluginContents.permissions.length > 0) {
|
|
182
54
|
const permSpinner = spin(`Configuring permissions for ${plugin.pluginName}`);
|
|
183
|
-
const permResult = setupPermissions(pluginContents.permissions, error);
|
|
55
|
+
const permResult = (0, plugin_utils_1.setupPermissions)(pluginContents.permissions, error);
|
|
184
56
|
if (permResult.success) {
|
|
185
57
|
if (permResult.added.length > 0) {
|
|
186
58
|
permSpinner.succeed(`Permissions configured for ${plugin.pluginName} (${permResult.added.length} added)`);
|
|
@@ -196,222 +68,88 @@ function installPlugin(plugin, cli, toolbox) {
|
|
|
196
68
|
info(JSON.stringify({ permissions: { allow: pluginContents.permissions } }, null, 2));
|
|
197
69
|
}
|
|
198
70
|
}
|
|
199
|
-
|
|
71
|
+
// Step 4: Process post-installation requirements (for LSP plugins, etc.)
|
|
72
|
+
const postInstallResult = (0, plugin_utils_1.processPostInstall)(plugin.pluginName, toolbox);
|
|
73
|
+
return { action: pluginAction, contents: pluginContents, postInstall: postInstallResult, success: true };
|
|
200
74
|
});
|
|
201
75
|
}
|
|
202
76
|
/**
|
|
203
|
-
*
|
|
204
|
-
|
|
205
|
-
function printPluginSummary(pluginName, contents, info) {
|
|
206
|
-
if (contents.skills.length > 0 || contents.commands.length > 0 || contents.agents.length > 0) {
|
|
207
|
-
info('');
|
|
208
|
-
info(`${pluginName}:`);
|
|
209
|
-
// Alphabetical order: Agents, Commands, Hooks, MCP Servers, Skills
|
|
210
|
-
if (contents.agents.length > 0) {
|
|
211
|
-
info(` Agents (${contents.agents.length}): ${contents.agents.join(', ')}`);
|
|
212
|
-
}
|
|
213
|
-
if (contents.commands.length > 0) {
|
|
214
|
-
const maxShow = 5;
|
|
215
|
-
const shown = contents.commands.slice(0, maxShow);
|
|
216
|
-
const remaining = contents.commands.length - maxShow;
|
|
217
|
-
const commandsStr = remaining > 0
|
|
218
|
-
? `${shown.join(', ')} and ${remaining} more`
|
|
219
|
-
: shown.join(', ');
|
|
220
|
-
info(` Commands (${contents.commands.length}): ${commandsStr}`);
|
|
221
|
-
}
|
|
222
|
-
if (contents.hooks > 0) {
|
|
223
|
-
info(` Hooks: ${contents.hooks} auto-detection hooks`);
|
|
224
|
-
}
|
|
225
|
-
if (contents.mcpServers.length > 0) {
|
|
226
|
-
info(` MCP Servers (${contents.mcpServers.length}): ${contents.mcpServers.join(', ')}`);
|
|
227
|
-
}
|
|
228
|
-
if (contents.skills.length > 0) {
|
|
229
|
-
info(` Skills (${contents.skills.length}): ${contents.skills.join(', ')}`);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Read plugin contents (skills, commands, hooks, agents, permissions, mcpServers)
|
|
77
|
+
* Prepare marketplaces (add and update cache) for a list of plugins
|
|
78
|
+
* Returns the set of successfully prepared marketplace names
|
|
235
79
|
*/
|
|
236
|
-
function
|
|
237
|
-
const
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
permissions: [],
|
|
244
|
-
skills: [],
|
|
245
|
-
};
|
|
246
|
-
// Read skills
|
|
247
|
-
const skillsDir = (0, path_1.join)(pluginDir, 'skills');
|
|
248
|
-
if ((0, fs_1.existsSync)(skillsDir)) {
|
|
249
|
-
try {
|
|
250
|
-
result.skills = (0, fs_1.readdirSync)(skillsDir, { withFileTypes: true })
|
|
251
|
-
.filter(dirent => dirent.isDirectory())
|
|
252
|
-
.map(dirent => dirent.name);
|
|
253
|
-
}
|
|
254
|
-
catch (_a) {
|
|
255
|
-
// Ignore
|
|
80
|
+
function prepareMarketplaces(plugins, cli, toolbox) {
|
|
81
|
+
const { print: { error, spin }, } = toolbox;
|
|
82
|
+
// Get unique marketplaces from plugins
|
|
83
|
+
const marketplaceMap = new Map();
|
|
84
|
+
for (const plugin of plugins) {
|
|
85
|
+
if (!marketplaceMap.has(plugin.marketplaceName)) {
|
|
86
|
+
marketplaceMap.set(plugin.marketplaceName, plugin);
|
|
256
87
|
}
|
|
257
88
|
}
|
|
258
|
-
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
// Read commands
|
|
271
|
-
const commandsDir = (0, path_1.join)(pluginDir, 'commands');
|
|
272
|
-
result.commands = findMarkdownFiles(commandsDir);
|
|
273
|
-
// Read hooks
|
|
274
|
-
const hooksPath = (0, path_1.join)(pluginDir, 'hooks', 'hooks.json');
|
|
275
|
-
if ((0, fs_1.existsSync)(hooksPath)) {
|
|
276
|
-
try {
|
|
277
|
-
const hooksContent = JSON.parse((0, fs_1.readFileSync)(hooksPath, 'utf-8'));
|
|
278
|
-
// Count hooks across all event types
|
|
279
|
-
for (const eventHooks of Object.values(hooksContent.hooks || {})) {
|
|
280
|
-
if (Array.isArray(eventHooks)) {
|
|
281
|
-
for (const hookGroup of eventHooks) {
|
|
282
|
-
if (hookGroup.hooks && Array.isArray(hookGroup.hooks)) {
|
|
283
|
-
result.hooks += hookGroup.hooks.length;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
}
|
|
89
|
+
const preparedMarketplaces = new Set();
|
|
90
|
+
for (const [marketplaceName, plugin] of marketplaceMap) {
|
|
91
|
+
// Check if marketplace already exists
|
|
92
|
+
const marketplaceExists = (0, claude_cli_1.checkMarketplaceExists)(marketplaceName);
|
|
93
|
+
// Add marketplace only if it doesn't exist yet
|
|
94
|
+
if (!marketplaceExists) {
|
|
95
|
+
const addSpinner = spin(`Adding marketplace ${marketplaceName}`);
|
|
96
|
+
const addResult = (0, claude_cli_1.runClaudeCommand)(cli, `plugin marketplace add ${plugin.marketplaceRepo}`);
|
|
97
|
+
if (addResult.success || addResult.output.includes('already')) {
|
|
98
|
+
addSpinner.succeed(`Marketplace ${marketplaceName} added`);
|
|
287
99
|
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
}
|
|
293
|
-
// Read MCP servers
|
|
294
|
-
const mcpPath = (0, path_1.join)(pluginDir, '.mcp.json');
|
|
295
|
-
if ((0, fs_1.existsSync)(mcpPath)) {
|
|
296
|
-
try {
|
|
297
|
-
const mcpContent = JSON.parse((0, fs_1.readFileSync)(mcpPath, 'utf-8'));
|
|
298
|
-
if (mcpContent.mcpServers) {
|
|
299
|
-
result.mcpServers = Object.keys(mcpContent.mcpServers);
|
|
100
|
+
else {
|
|
101
|
+
addSpinner.fail(`Failed to add marketplace ${marketplaceName}`);
|
|
102
|
+
error(addResult.output);
|
|
103
|
+
continue;
|
|
300
104
|
}
|
|
301
105
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
const permissionsPath = (0, path_1.join)(pluginDir, 'permissions.json');
|
|
308
|
-
if ((0, fs_1.existsSync)(permissionsPath)) {
|
|
309
|
-
try {
|
|
310
|
-
const content = (0, fs_1.readFileSync)(permissionsPath, 'utf-8');
|
|
311
|
-
const pluginPerms = JSON.parse(content);
|
|
312
|
-
result.permissions = pluginPerms.permissions.map(p => p.pattern);
|
|
313
|
-
}
|
|
314
|
-
catch (_e) {
|
|
315
|
-
// Ignore
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
return result;
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Execute a claude CLI command
|
|
322
|
-
*/
|
|
323
|
-
function runClaudeCommand(cli, args) {
|
|
324
|
-
try {
|
|
325
|
-
const result = (0, child_process_1.spawnSync)(cli, args.split(' '), {
|
|
326
|
-
encoding: 'utf-8',
|
|
327
|
-
shell: true,
|
|
328
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
329
|
-
});
|
|
330
|
-
return {
|
|
331
|
-
output: result.stdout + result.stderr,
|
|
332
|
-
success: result.status === 0,
|
|
333
|
-
};
|
|
334
|
-
}
|
|
335
|
-
catch (err) {
|
|
336
|
-
return {
|
|
337
|
-
output: err.message,
|
|
338
|
-
success: false,
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Setup permissions in settings.json
|
|
344
|
-
* Only adds new permissions, does not remove existing ones
|
|
345
|
-
* (User may have customized permissions that should be preserved)
|
|
346
|
-
*/
|
|
347
|
-
function setupPermissions(requiredPermissions, error) {
|
|
348
|
-
const settingsPath = (0, path_1.join)((0, os_1.homedir)(), '.claude', 'settings.json');
|
|
349
|
-
try {
|
|
350
|
-
// Read existing settings
|
|
351
|
-
let settings = {};
|
|
352
|
-
if ((0, fs_1.existsSync)(settingsPath)) {
|
|
353
|
-
const content = (0, fs_1.readFileSync)(settingsPath, 'utf-8');
|
|
354
|
-
settings = JSON.parse(content);
|
|
355
|
-
}
|
|
356
|
-
// Ensure permissions.allow exists
|
|
357
|
-
if (!settings.permissions) {
|
|
358
|
-
settings.permissions = {};
|
|
359
|
-
}
|
|
360
|
-
const perms = settings.permissions;
|
|
361
|
-
if (!perms.allow) {
|
|
362
|
-
perms.allow = [];
|
|
106
|
+
// Always update marketplace cache to get latest plugin versions
|
|
107
|
+
const updateSpinner = spin(`Updating ${marketplaceName} cache`);
|
|
108
|
+
const updateResult = (0, claude_cli_1.runClaudeCommand)(cli, `plugin marketplace update ${marketplaceName}`);
|
|
109
|
+
if (updateResult.success) {
|
|
110
|
+
updateSpinner.succeed(`${marketplaceName} cache updated`);
|
|
363
111
|
}
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
const added = [];
|
|
367
|
-
const existing = [];
|
|
368
|
-
requiredPermissions.forEach(perm => {
|
|
369
|
-
if (currentAllowList.includes(perm)) {
|
|
370
|
-
existing.push(perm);
|
|
371
|
-
}
|
|
372
|
-
else {
|
|
373
|
-
added.push(perm);
|
|
374
|
-
}
|
|
375
|
-
});
|
|
376
|
-
// Add new permissions
|
|
377
|
-
if (added.length > 0) {
|
|
378
|
-
perms.allow = [...currentAllowList, ...added];
|
|
379
|
-
(0, fs_1.writeFileSync)(settingsPath, JSON.stringify(settings, null, 2));
|
|
112
|
+
else {
|
|
113
|
+
updateSpinner.stopAndPersist({ symbol: '⚠', text: `Could not update ${marketplaceName} cache, using cached version` });
|
|
380
114
|
}
|
|
381
|
-
|
|
382
|
-
}
|
|
383
|
-
catch (err) {
|
|
384
|
-
error(`Could not configure permissions: ${err.message}`);
|
|
385
|
-
return { added: [], existing: [], success: false };
|
|
115
|
+
preparedMarketplaces.add(marketplaceName);
|
|
386
116
|
}
|
|
117
|
+
return preparedMarketplaces;
|
|
387
118
|
}
|
|
388
119
|
/**
|
|
389
120
|
* Install/update Claude Code Plugins
|
|
390
121
|
*/
|
|
391
|
-
const
|
|
122
|
+
const PluginsCommand = {
|
|
392
123
|
alias: ['p'],
|
|
393
124
|
description: 'Install Claude Code plugins',
|
|
394
|
-
hidden: false,
|
|
395
125
|
name: 'plugins',
|
|
396
126
|
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
397
|
-
var _a;
|
|
127
|
+
var _a, _b;
|
|
398
128
|
const { helper, parameters, print: { error, info, spin, success, warning }, system, } = toolbox;
|
|
399
129
|
// Start timer
|
|
400
130
|
const timer = system.startTimer();
|
|
131
|
+
// Check if claude CLI is available (before network requests)
|
|
132
|
+
const cli = (0, claude_cli_1.findClaudeCli)();
|
|
133
|
+
if (!cli) {
|
|
134
|
+
error('Claude CLI not found. Please install Claude Code first.');
|
|
135
|
+
info('');
|
|
136
|
+
info('Installation: https://docs.anthropic.com/en/docs/claude-code');
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
401
139
|
// Fetch available plugins from GitHub
|
|
402
140
|
let availablePlugins;
|
|
403
141
|
try {
|
|
404
|
-
availablePlugins = yield fetchAvailablePlugins(spin);
|
|
142
|
+
availablePlugins = yield (0, marketplace_1.fetchAvailablePlugins)(spin);
|
|
405
143
|
}
|
|
406
144
|
catch (err) {
|
|
407
145
|
error(`Failed to fetch plugins: ${err.message}`);
|
|
408
146
|
info('');
|
|
409
147
|
info('Check your internet connection or try again later.');
|
|
410
|
-
|
|
148
|
+
process.exit(1);
|
|
411
149
|
}
|
|
412
150
|
if (availablePlugins.length === 0) {
|
|
413
151
|
error('No plugins found in the repository.');
|
|
414
|
-
|
|
152
|
+
process.exit(1);
|
|
415
153
|
}
|
|
416
154
|
// Get plugin names from parameters (if provided)
|
|
417
155
|
const requestedPlugins = ((_a = parameters.array) === null || _a === void 0 ? void 0 : _a.filter((p) => typeof p === 'string')) || [];
|
|
@@ -438,31 +176,50 @@ const NewCommand = {
|
|
|
438
176
|
if (pluginsToInstall.length === 0) {
|
|
439
177
|
error('No valid plugins to install.');
|
|
440
178
|
info('');
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
info(` ${p.pluginName} - ${p.description}`);
|
|
444
|
-
});
|
|
445
|
-
return process.exit(1);
|
|
179
|
+
(0, marketplace_1.printAvailablePlugins)(availablePlugins, info);
|
|
180
|
+
process.exit(1);
|
|
446
181
|
}
|
|
447
182
|
info(`Installing ${pluginsToInstall.length} plugin${pluginsToInstall.length > 1 ? 's' : ''}: ${pluginsToInstall.map(p => p.pluginName).join(', ')}`);
|
|
448
183
|
}
|
|
449
184
|
else {
|
|
450
|
-
// Install all plugins
|
|
451
|
-
|
|
452
|
-
|
|
185
|
+
// Install all plugins from primary marketplace (lenne-tech) plus default external plugins
|
|
186
|
+
const primaryMarketplace = marketplace_1.MARKETPLACES[0].name;
|
|
187
|
+
const primaryPlugins = availablePlugins.filter(p => p.marketplaceName === primaryMarketplace);
|
|
188
|
+
// Add default external plugins
|
|
189
|
+
const externalPlugins = [];
|
|
190
|
+
for (const defaultPlugin of marketplace_1.DEFAULT_EXTERNAL_PLUGINS) {
|
|
191
|
+
const plugin = availablePlugins.find(p => p.pluginName === defaultPlugin.pluginName && p.marketplaceName === defaultPlugin.marketplaceName);
|
|
192
|
+
if (plugin) {
|
|
193
|
+
externalPlugins.push(plugin);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
pluginsToInstall = [...primaryPlugins, ...externalPlugins];
|
|
197
|
+
if (externalPlugins.length > 0) {
|
|
198
|
+
info(`Installing ${primaryPlugins.length} plugins from ${primaryMarketplace}`);
|
|
199
|
+
info(` + ${externalPlugins.length} default plugins: ${externalPlugins.map(p => p.pluginName).join(', ')}`);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
info(`Installing all plugins (${pluginsToInstall.length})...`);
|
|
203
|
+
}
|
|
453
204
|
}
|
|
454
205
|
info('');
|
|
455
|
-
//
|
|
456
|
-
const
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
info('');
|
|
460
|
-
info('Installation: https://docs.anthropic.com/en/docs/claude-code');
|
|
461
|
-
return process.exit(1);
|
|
462
|
-
}
|
|
463
|
-
// Install plugins
|
|
206
|
+
// Prepare marketplaces (add and update cache once per marketplace)
|
|
207
|
+
const preparedMarketplaces = prepareMarketplaces(pluginsToInstall, cli, toolbox);
|
|
208
|
+
info('');
|
|
209
|
+
// Install plugins (only from successfully prepared marketplaces)
|
|
464
210
|
const results = [];
|
|
465
211
|
for (const plugin of pluginsToInstall) {
|
|
212
|
+
// Skip plugins from marketplaces that failed to prepare
|
|
213
|
+
if (!preparedMarketplaces.has(plugin.marketplaceName)) {
|
|
214
|
+
results.push({
|
|
215
|
+
action: 'failed',
|
|
216
|
+
contents: plugin_utils_1.EMPTY_PLUGIN_CONTENTS,
|
|
217
|
+
plugin,
|
|
218
|
+
postInstall: null,
|
|
219
|
+
success: false,
|
|
220
|
+
});
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
466
223
|
const result = yield installPlugin(plugin, cli, toolbox);
|
|
467
224
|
results.push(Object.assign(Object.assign({}, result), { plugin }));
|
|
468
225
|
if (pluginsToInstall.length > 1 && results.length < pluginsToInstall.length) {
|
|
@@ -486,7 +243,7 @@ const NewCommand = {
|
|
|
486
243
|
info('');
|
|
487
244
|
info('Installed:');
|
|
488
245
|
for (const result of successfulResults) {
|
|
489
|
-
printPluginSummary(result.plugin.pluginName, result.contents, info);
|
|
246
|
+
(0, plugin_utils_1.printPluginSummary)(result.plugin.pluginName, result.contents, info);
|
|
490
247
|
}
|
|
491
248
|
}
|
|
492
249
|
// Print failed installations
|
|
@@ -506,22 +263,43 @@ const NewCommand = {
|
|
|
506
263
|
info(` ${name}`);
|
|
507
264
|
}
|
|
508
265
|
info('');
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
266
|
+
(0, marketplace_1.printAvailablePlugins)(availablePlugins, info);
|
|
267
|
+
}
|
|
268
|
+
// Collect missing environment variables from all successful installations
|
|
269
|
+
const allMissingEnvVars = new Map();
|
|
270
|
+
for (const result of successfulResults) {
|
|
271
|
+
if ((_b = result.postInstall) === null || _b === void 0 ? void 0 : _b.envVarsMissing) {
|
|
272
|
+
for (const envVar of result.postInstall.envVarsMissing) {
|
|
273
|
+
if (!allMissingEnvVars.has(envVar.name)) {
|
|
274
|
+
allMissingEnvVars.set(envVar.name, envVar);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
513
278
|
}
|
|
279
|
+
// Handle missing environment variables
|
|
280
|
+
const envVarsResult = yield (0, plugin_utils_1.handleMissingEnvVars)(allMissingEnvVars, toolbox);
|
|
281
|
+
// Show next steps
|
|
514
282
|
if (successCount > 0) {
|
|
515
283
|
info('');
|
|
516
284
|
info('Next:');
|
|
517
|
-
|
|
285
|
+
if (envVarsResult.needed && !envVarsResult.configured) {
|
|
286
|
+
info(' 1. Set required environment variables (see above)');
|
|
287
|
+
info(' 2. Restart Claude Code to activate the plugins');
|
|
288
|
+
}
|
|
289
|
+
else if (envVarsResult.configured || allMissingEnvVars.size > 0) {
|
|
290
|
+
info(' 1. Restart your terminal or run source command');
|
|
291
|
+
info(' 2. Restart Claude Code to activate the plugins');
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
info(' Restart Claude Code to activate the plugins');
|
|
295
|
+
}
|
|
518
296
|
}
|
|
519
297
|
info('');
|
|
520
298
|
if (!toolbox.parameters.options.fromGluegunMenu) {
|
|
521
299
|
process.exit(totalIssues > 0 ? 1 : 0);
|
|
522
300
|
}
|
|
523
|
-
return '
|
|
301
|
+
return `${successCount} plugin${successCount !== 1 ? 's' : ''} installed${totalIssues > 0 ? `, ${totalIssues} failed` : ''}`;
|
|
524
302
|
}),
|
|
525
303
|
};
|
|
526
|
-
exports.default =
|
|
527
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbGF1ZGUvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLGlEQUFvRDtBQUNwRCwyQkFBMEU7QUFFMUUsMkJBQTZCO0FBQzdCLCtCQUE0QjtBQUk1Qjs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHO0lBQ2xCLE9BQU8sRUFBRSw2REFBNkQ7SUFDdEUsSUFBSSxFQUFFLFlBQVk7SUFDbEIsT0FBTyxFQUFFLDhEQUE4RDtJQUN2RSxJQUFJLEVBQUUsdUJBQXVCO0NBQzlCLENBQUM7QUEyQ0Y7O0dBRUc7QUFDSCxTQUFlLHFCQUFxQixDQUNsQyxJQUFzRjs7UUFFdEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDO1lBQ0gsaUNBQWlDO1lBQ2pDLE1BQU0sV0FBVyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sVUFBVSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDOUUsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFxQixNQUFNLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUU3RCxvQ0FBb0M7WUFDcEMsTUFBTSxPQUFPLEdBQW1CLEVBQUUsQ0FBQztZQUVuQyxLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUM7b0JBQ0gsTUFBTSxXQUFXLEdBQUcsR0FB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
|
|
304
|
+
exports.default = PluginsCommand;
|
|
305
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbGF1ZGUvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLHFEQUErRjtBQUMvRix1REFNK0I7QUFDL0IseURBVWdDO0FBRWhDOztHQUVHO0FBQ0gsU0FBZSxhQUFhLENBQzFCLE1BQW9CLEVBQ3BCLEdBQVcsRUFDWCxPQUErQjs7UUFFL0IsTUFBTSxFQUNKLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQzdCLEdBQUcsT0FBTyxDQUFDO1FBRVosbUNBQW1DO1FBQ25DLE1BQU0sY0FBYyxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN2RSxNQUFNLGFBQWEsR0FBRyxJQUFBLDZCQUFnQixFQUFDLEdBQUcsRUFBRSxrQkFBa0IsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUVoRixJQUFJLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzVGLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvRixZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFD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
|