@skill4agent/cli 1.0.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.
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.add = add;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const inquirer_1 = __importDefault(require("inquirer"));
10
+ const os_1 = __importDefault(require("os"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const utils_1 = require("../utils");
13
+ const tools_1 = require("../tools");
14
+ const api_1 = require("../api");
15
+ const index_manager_1 = require("../index-manager");
16
+ function getAgentName(id) {
17
+ const agent = [...tools_1.UNIVERSAL_AGENTS, ...tools_1.OTHER_AGENTS].find(a => a.id === id);
18
+ return agent?.name || id;
19
+ }
20
+ async function promptTypeSelection(skillInfo) {
21
+ const isOriginalEnglish = skillInfo.originalLanguage === 'en';
22
+ const originalName = isOriginalEnglish ? 'English' : 'Chinese';
23
+ const translatedName = isOriginalEnglish ? 'Chinese' : 'English';
24
+ if (!skillInfo.hasTranslation) {
25
+ console.log(chalk_1.default.yellow(`\nā„¹ļø This skill does not have a ${translatedName} translation yet.`));
26
+ console.log(chalk_1.default.gray(` Installing ${originalName} version...\n`));
27
+ return 'original';
28
+ }
29
+ const { type } = await inquirer_1.default.prompt({
30
+ type: 'list',
31
+ name: 'type',
32
+ message: `Select version for "${skillInfo.name}"`,
33
+ choices: [
34
+ {
35
+ name: `${originalName} (Original)`,
36
+ value: 'original',
37
+ },
38
+ {
39
+ name: `${translatedName} (Translation)`,
40
+ value: 'translated',
41
+ },
42
+ ],
43
+ default: 'original',
44
+ });
45
+ return type;
46
+ }
47
+ async function promptScopeSelection() {
48
+ const { scope } = await inquirer_1.default.prompt({
49
+ type: 'list',
50
+ name: 'scope',
51
+ message: 'Installation scope',
52
+ choices: [
53
+ {
54
+ name: 'Project (Install in current directory (committed with your project))',
55
+ value: 'project',
56
+ },
57
+ {
58
+ name: 'Global (Install in home directory (available across all projects))',
59
+ value: 'global',
60
+ },
61
+ ],
62
+ default: 'project',
63
+ });
64
+ return scope;
65
+ }
66
+ async function promptAgentSelection(isGlobal) {
67
+ const universalNames = tools_1.UNIVERSAL_AGENTS.map(a => a.name).join(', ');
68
+ const universalDisplayPath = (0, tools_1.getAgentDisplayPath)(tools_1.UNIVERSAL_AGENTS[0].id, isGlobal);
69
+ const otherAgentChoices = tools_1.OTHER_AGENTS.map(agent => ({
70
+ name: `${agent.name} (${(0, tools_1.getAgentDisplayPath)(agent.id, isGlobal)})`,
71
+ value: agent.id,
72
+ }));
73
+ console.log(chalk_1.default.green(`āœ“ Universal (${universalDisplayPath}): ${universalNames} is always included`));
74
+ const { selectedOtherAgents } = await inquirer_1.default.prompt({
75
+ type: 'checkbox',
76
+ name: 'selectedOtherAgents',
77
+ message: 'Select additional agents:',
78
+ pageSize: 12,
79
+ loop: false,
80
+ choices: otherAgentChoices,
81
+ });
82
+ const selectedNames = selectedOtherAgents.map(id => tools_1.OTHER_AGENTS.find(a => a.id === id)?.name || id);
83
+ const displayNames = selectedNames.length > 0
84
+ ? ['Universal', ...selectedNames].join(', ')
85
+ : 'Universal';
86
+ console.log(chalk_1.default.green(`āœ“ Selected: ${displayNames}\n`));
87
+ const universalAgentIds = tools_1.UNIVERSAL_AGENTS.map(a => a.id);
88
+ return [...universalAgentIds, ...selectedOtherAgents];
89
+ }
90
+ async function promptMethodSelection() {
91
+ const { method } = await inquirer_1.default.prompt({
92
+ type: 'list',
93
+ name: 'method',
94
+ message: 'Installation method',
95
+ choices: [
96
+ {
97
+ name: 'Symlink (Recommended) (Single source of truth, easy updates)',
98
+ value: 'symlink',
99
+ },
100
+ {
101
+ name: 'Copy to all agents (Independent copies for each agent)',
102
+ value: 'copy',
103
+ },
104
+ ],
105
+ default: 'symlink',
106
+ });
107
+ return method;
108
+ }
109
+ function displaySummary(skillName, source, typeDisplay, scope, agents, method) {
110
+ const universalAgentIds = tools_1.UNIVERSAL_AGENTS.map(a => a.id);
111
+ const hasUniversal = agents.some(id => universalAgentIds.includes(id));
112
+ const otherAgents = agents.filter(id => !universalAgentIds.includes(id));
113
+ const otherAgentNames = otherAgents.map(id => getAgentName(id));
114
+ const agentDisplay = hasUniversal
115
+ ? ['Universal', ...otherAgentNames].join(', ')
116
+ : otherAgentNames.join(', ');
117
+ const agentCount = (hasUniversal ? 1 : 0) + otherAgentNames.length;
118
+ console.log(chalk_1.default.blue('\nšŸ“Š Installation Summary'));
119
+ console.log(chalk_1.default.gray('─'.repeat(50)));
120
+ console.log(`Skill: ${chalk_1.default.white(skillName)}`);
121
+ console.log(`Source: ${source}`);
122
+ console.log(`Type: ${typeDisplay}`);
123
+ console.log(`Scope: ${scope === 'global' ? 'Global' : 'Project'}`);
124
+ console.log(`Agents (${agentCount}): ${agentDisplay}`);
125
+ console.log(`Method: ${method === 'symlink' ? 'Symlink (Recommended)' : 'Copy'}`);
126
+ console.log(chalk_1.default.gray('─'.repeat(50)));
127
+ }
128
+ async function promptConfirmation() {
129
+ const { confirm } = await inquirer_1.default.prompt({
130
+ type: 'confirm',
131
+ name: 'confirm',
132
+ message: 'Proceed with installation?',
133
+ default: true,
134
+ });
135
+ return confirm;
136
+ }
137
+ async function add(topSource, skillName) {
138
+ console.log(chalk_1.default.blue(`\nšŸ“¦ Installing skill: ${skillName}`));
139
+ console.log(chalk_1.default.gray(` Source: ${topSource}\n`));
140
+ let result;
141
+ try {
142
+ result = await (0, api_1.getSkillInfo)(topSource, skillName);
143
+ }
144
+ catch (error) {
145
+ console.log(chalk_1.default.red(`\nāŒ Skill "${skillName}" not found in source "${topSource}".`));
146
+ console.log(chalk_1.default.gray(` Please check the source repository and skill name.\n`));
147
+ return;
148
+ }
149
+ if (!result.skill) {
150
+ console.log(chalk_1.default.red(`\nāŒ Skill "${skillName}" not found in source "${topSource}".`));
151
+ console.log(chalk_1.default.gray(` Please check the source repository and skill name.\n`));
152
+ return;
153
+ }
154
+ const skillInfo = result.skill;
155
+ console.log(chalk_1.default.blue(`\nšŸ“¦ Skill: ${chalk_1.default.white(skillInfo.name)}`));
156
+ console.log(chalk_1.default.gray(` Category: ${skillInfo.category?.nameEn || 'N/A'} | Installs: ${skillInfo.totalInstalls}`));
157
+ if (skillInfo.tags) {
158
+ console.log(chalk_1.default.gray(` Tags: ${skillInfo.tags}`));
159
+ }
160
+ if (!skillInfo.hasScript) {
161
+ console.log(chalk_1.default.gray(` šŸ“œ Scripts: No scripts`));
162
+ }
163
+ else {
164
+ const statusText = skillInfo.scriptCheckResult === 'safe' ? 'āœ… Check passed' : 'āš ļø Needs attention';
165
+ console.log(chalk_1.default.gray(` šŸ“œ Scripts: ${skillInfo.scriptCount} script(s) - ${statusText}`));
166
+ }
167
+ console.log(chalk_1.default.gray(` ${skillInfo.hasTranslation ? 'āœ…' : 'āŒ'} Translation available\n`));
168
+ const type = await promptTypeSelection(skillInfo);
169
+ const isOriginalEnglish = skillInfo.originalLanguage === 'en';
170
+ const typeDisplay = type === 'original'
171
+ ? (isOriginalEnglish ? 'English' : 'Chinese')
172
+ : (isOriginalEnglish ? 'Chinese' : 'English');
173
+ console.log(chalk_1.default.gray(` Type: ${typeDisplay}\n`));
174
+ const scope = await promptScopeSelection();
175
+ const isGlobal = scope === 'global';
176
+ const selectedAgentIds = await promptAgentSelection(isGlobal);
177
+ if (selectedAgentIds.length === 0) {
178
+ console.log(chalk_1.default.yellow('\nāš ļø No agents selected. Installation cancelled.'));
179
+ return;
180
+ }
181
+ const installMethod = await promptMethodSelection();
182
+ displaySummary(skillName, topSource, typeDisplay, scope, selectedAgentIds, installMethod);
183
+ const confirmed = await promptConfirmation();
184
+ if (!confirmed) {
185
+ console.log(chalk_1.default.yellow('\nāš ļø Installation cancelled.'));
186
+ return;
187
+ }
188
+ const basePath = isGlobal ? os_1.default.homedir() : process.cwd();
189
+ let tempZip;
190
+ try {
191
+ tempZip = await (0, api_1.downloadSkill)(topSource, skillName, type);
192
+ }
193
+ catch (error) {
194
+ if (error.response?.status === 404) {
195
+ console.log(chalk_1.default.red(`\nāŒ Failed to download skill "${skillName}".`));
196
+ console.log(chalk_1.default.gray(` The skill may not exist or the download link is invalid.\n`));
197
+ return;
198
+ }
199
+ console.log(chalk_1.default.red(`\nāŒ Download failed: ${error.message}`));
200
+ return;
201
+ }
202
+ if (installMethod === 'symlink') {
203
+ const universalFullPath = path_1.default.join(basePath, tools_1.UNIVERSAL_PATH);
204
+ fs_extra_1.default.ensureDirSync(universalFullPath);
205
+ const skillDir = path_1.default.join(universalFullPath, skillName);
206
+ if (fs_extra_1.default.existsSync(skillDir)) {
207
+ console.log(chalk_1.default.yellow(`\nāš ļø Skill "${skillName}" already exists. Overwriting...`));
208
+ fs_extra_1.default.removeSync(skillDir);
209
+ }
210
+ await (0, utils_1.extractZip)(tempZip, universalFullPath);
211
+ fs_extra_1.default.removeSync(tempZip);
212
+ console.log(chalk_1.default.green(`āœ… Installed to: ${skillDir}`));
213
+ const otherAgentIds = selectedAgentIds.filter(id => !tools_1.UNIVERSAL_AGENTS.some(a => a.id === id));
214
+ for (const agentId of otherAgentIds) {
215
+ const agent = tools_1.OTHER_AGENTS.find(a => a.id === agentId);
216
+ if (!agent)
217
+ continue;
218
+ const effectivePath = isGlobal && agent.globalPath ? agent.globalPath : agent.path;
219
+ const agentPath = path_1.default.join(basePath, effectivePath);
220
+ fs_extra_1.default.ensureDirSync(agentPath);
221
+ const destDir = path_1.default.join(agentPath, skillName);
222
+ if (fs_extra_1.default.existsSync(destDir)) {
223
+ fs_extra_1.default.removeSync(destDir);
224
+ }
225
+ if (isGlobal) {
226
+ fs_extra_1.default.symlinkSync(skillDir, destDir);
227
+ }
228
+ else {
229
+ const relativePath = path_1.default.relative(agentPath, skillDir);
230
+ fs_extra_1.default.symlinkSync(relativePath, destDir);
231
+ }
232
+ console.log(chalk_1.default.green(`āœ… Linked to: ${destDir}`));
233
+ }
234
+ }
235
+ else {
236
+ const universalFullPath = path_1.default.join(basePath, tools_1.UNIVERSAL_PATH);
237
+ fs_extra_1.default.ensureDirSync(universalFullPath);
238
+ if (fs_extra_1.default.existsSync(path_1.default.join(universalFullPath, skillName))) {
239
+ fs_extra_1.default.removeSync(path_1.default.join(universalFullPath, skillName));
240
+ }
241
+ await (0, utils_1.extractZip)(tempZip, universalFullPath);
242
+ fs_extra_1.default.removeSync(tempZip);
243
+ console.log(chalk_1.default.green(`āœ… Copied to: ${universalFullPath}`));
244
+ let copiedCount = 0;
245
+ const otherAgentIds = selectedAgentIds.filter(id => !tools_1.UNIVERSAL_AGENTS.some(a => a.id === id));
246
+ for (const agentId of otherAgentIds) {
247
+ const agent = tools_1.OTHER_AGENTS.find(a => a.id === agentId);
248
+ if (!agent)
249
+ continue;
250
+ const effectivePath = isGlobal && agent.globalPath ? agent.globalPath : agent.path;
251
+ const agentPath = path_1.default.join(basePath, effectivePath);
252
+ fs_extra_1.default.ensureDirSync(agentPath);
253
+ const destDir = path_1.default.join(agentPath, skillName);
254
+ if (fs_extra_1.default.existsSync(destDir)) {
255
+ fs_extra_1.default.removeSync(destDir);
256
+ }
257
+ fs_extra_1.default.copySync(path_1.default.join(universalFullPath, skillName), destDir);
258
+ console.log(chalk_1.default.green(`āœ… Copied to: ${destDir}`));
259
+ copiedCount++;
260
+ }
261
+ }
262
+ // Update installation count
263
+ await (0, api_1.incrementInstallCount)(topSource, skillName);
264
+ // Record installation info to index
265
+ const installScope = isGlobal ? 'global' : (0, index_manager_1.getCurrentScope)();
266
+ const skillDir = path_1.default.join(basePath, tools_1.UNIVERSAL_PATH, skillName);
267
+ // Collect symlink and copy directories
268
+ const symlinkDirs = [];
269
+ const copyDirs = [];
270
+ const otherAgentIds = selectedAgentIds.filter(id => !tools_1.UNIVERSAL_AGENTS.some(a => a.id === id));
271
+ for (const agentId of otherAgentIds) {
272
+ const agent = tools_1.OTHER_AGENTS.find(a => a.id === agentId);
273
+ if (!agent)
274
+ continue;
275
+ const effectivePath = isGlobal && agent.globalPath ? agent.globalPath : agent.path;
276
+ const agentPath = path_1.default.join(basePath, effectivePath);
277
+ const destDir = path_1.default.join(agentPath, skillName);
278
+ if (installMethod === 'symlink') {
279
+ symlinkDirs.push(destDir);
280
+ }
281
+ else {
282
+ copyDirs.push(destDir);
283
+ }
284
+ }
285
+ const metadata = (0, index_manager_1.createSkillMetadata)(skillName, topSource, installScope);
286
+ (0, index_manager_1.writeSkillMetadata)(skillDir, metadata);
287
+ (0, index_manager_1.addOrUpdateSkill)({
288
+ name: skillName,
289
+ source: topSource,
290
+ installedAt: metadata.installedAt,
291
+ scope: installScope,
292
+ locations: {
293
+ universal: skillDir,
294
+ symlink: symlinkDirs,
295
+ copy: copyDirs,
296
+ },
297
+ });
298
+ console.log(chalk_1.default.green('\nšŸŽ‰ Installation completed!\n'));
299
+ }
300
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface InstallOptions {
2
+ topSource: string;
3
+ skillName: string;
4
+ type: 'original' | 'translated';
5
+ global: boolean;
6
+ dirs: string[];
7
+ method: 'symlink' | 'copy';
8
+ }
9
+ export declare function install(options: InstallOptions): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AASA,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;CAC5B;AA4BD,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoLpE"}
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.install = install;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const utils_1 = require("../utils");
12
+ const tools_1 = require("../tools");
13
+ const api_1 = require("../api");
14
+ const index_manager_1 = require("../index-manager");
15
+ function getAgentNameFromPath(dirPath) {
16
+ const name = path_1.default.basename(dirPath);
17
+ return name.charAt(0).toUpperCase() + name.slice(1);
18
+ }
19
+ function getAgentDisplayName(dirPath) {
20
+ const dirname = path_1.default.basename(path_1.default.dirname(dirPath));
21
+ if (dirname === '.agents')
22
+ return 'Universal';
23
+ return dirname.charAt(0).toUpperCase() + dirname.slice(1);
24
+ }
25
+ function displaySummary(options, skillInfo, typeDisplay, allDirs) {
26
+ const dirNames = allDirs.map(d => getAgentDisplayName(d));
27
+ const dirCount = allDirs.length;
28
+ console.log(chalk_1.default.blue('\nšŸ“Š Installation Summary'));
29
+ console.log(chalk_1.default.gray('─'.repeat(50)));
30
+ console.log(`Skill: ${chalk_1.default.white(skillInfo.name)}`);
31
+ console.log(`Source: ${options.topSource}`);
32
+ console.log(`Type: ${typeDisplay}`);
33
+ console.log(`Scope: ${options.global ? 'Global' : 'Project'}`);
34
+ console.log(`Dirs (${dirCount}): ${dirNames.join(', ')}`);
35
+ console.log(`Method: ${options.method === 'symlink' ? 'Symlink (Recommended)' : 'Copy'}`);
36
+ console.log(chalk_1.default.gray('─'.repeat(50)));
37
+ }
38
+ async function install(options) {
39
+ const { topSource, skillName, type, global, dirs, method } = options;
40
+ console.log(chalk_1.default.blue(`\nšŸ“¦ Installing skill: ${skillName}`));
41
+ console.log(chalk_1.default.gray(` Source: ${topSource}\n`));
42
+ let result;
43
+ try {
44
+ result = await (0, api_1.getSkillInfo)(topSource, skillName);
45
+ }
46
+ catch (error) {
47
+ console.log(chalk_1.default.red(`\nāŒ Skill "${skillName}" not found in source "${topSource}".`));
48
+ console.log(chalk_1.default.gray(` Please check the source repository and skill name.\n`));
49
+ return;
50
+ }
51
+ if (!result.skill) {
52
+ console.log(chalk_1.default.red(`\nāŒ Skill "${skillName}" not found in source "${topSource}".`));
53
+ console.log(chalk_1.default.gray(` Please check the source repository and skill name.\n`));
54
+ return;
55
+ }
56
+ const skillInfo = result.skill;
57
+ console.log(chalk_1.default.blue(`\nšŸ“¦ Skill: ${chalk_1.default.white(skillInfo.name)}`));
58
+ console.log(chalk_1.default.gray(` Category: ${skillInfo.category?.nameEn || 'N/A'} | Installs: ${skillInfo.totalInstalls}`));
59
+ if (skillInfo.tags) {
60
+ console.log(chalk_1.default.gray(` Tags: ${skillInfo.tags}`));
61
+ }
62
+ if (!skillInfo.hasScript) {
63
+ console.log(chalk_1.default.gray(` šŸ“œ Scripts: No scripts`));
64
+ }
65
+ else {
66
+ const statusText = skillInfo.scriptCheckResult === 'safe' ? 'āœ… Check passed' : 'āš ļø Needs attention';
67
+ console.log(chalk_1.default.gray(` šŸ“œ Scripts: ${skillInfo.scriptCount} script(s) - ${statusText}`));
68
+ }
69
+ console.log(chalk_1.default.gray(` ${skillInfo.hasTranslation ? 'āœ…' : 'āŒ'} Translation available\n`));
70
+ let finalType = type;
71
+ const isOriginalEnglish = skillInfo.originalLanguage === 'en';
72
+ if (type === 'translated' && !skillInfo.hasTranslation) {
73
+ console.log(chalk_1.default.yellow(`āš ļø Translation not available. Using original (${isOriginalEnglish ? 'English' : 'Chinese'}) version.\n`));
74
+ finalType = 'original';
75
+ }
76
+ const typeDisplay = finalType === 'original'
77
+ ? (isOriginalEnglish ? 'English' : 'Chinese')
78
+ : (isOriginalEnglish ? 'Chinese' : 'English');
79
+ console.log(chalk_1.default.gray(` Type: ${typeDisplay}\n`));
80
+ const isGlobal = global;
81
+ const basePath = isGlobal ? os_1.default.homedir() : process.cwd();
82
+ const allDirs = [tools_1.UNIVERSAL_PATH, ...dirs.map((d) => d.endsWith('/skills') ? d : `${d}/skills`)];
83
+ const dirNames = allDirs.map(d => getAgentDisplayName(d));
84
+ console.log(chalk_1.default.green(`āœ“ Directories: ${dirNames.join(', ')}`));
85
+ if (allDirs.length === 0) {
86
+ console.log(chalk_1.default.yellow('\nāš ļø No directories selected. Installation cancelled.'));
87
+ return;
88
+ }
89
+ displaySummary({ topSource, skillName, type: finalType, global, dirs, method }, skillInfo, typeDisplay, allDirs);
90
+ let tempZip;
91
+ try {
92
+ tempZip = await (0, api_1.downloadSkill)(topSource, skillName, finalType);
93
+ }
94
+ catch (error) {
95
+ if (error.response?.status === 404) {
96
+ console.log(chalk_1.default.red(`\nāŒ Failed to download skill "${skillName}".`));
97
+ console.log(chalk_1.default.gray(` The skill may not exist or the download link is invalid.\n`));
98
+ return;
99
+ }
100
+ console.log(chalk_1.default.red(`\nāŒ Download failed: ${error.message}`));
101
+ return;
102
+ }
103
+ if (method === 'symlink') {
104
+ const universalFullPath = path_1.default.join(basePath, tools_1.UNIVERSAL_PATH);
105
+ fs_extra_1.default.ensureDirSync(universalFullPath);
106
+ const skillDir = path_1.default.join(universalFullPath, skillName);
107
+ if (fs_extra_1.default.existsSync(skillDir)) {
108
+ console.log(chalk_1.default.yellow(`\nāš ļø Skill "${skillName}" already exists. Overwriting...`));
109
+ fs_extra_1.default.removeSync(skillDir);
110
+ }
111
+ await (0, utils_1.extractZip)(tempZip, universalFullPath);
112
+ fs_extra_1.default.removeSync(tempZip);
113
+ console.log(chalk_1.default.green(`āœ… Installed to: ${skillDir}`));
114
+ for (const dir of dirs) {
115
+ const fullDir = dir.endsWith('/skills') ? dir : `${dir}/skills`;
116
+ const dirPath = path_1.default.join(basePath, fullDir);
117
+ fs_extra_1.default.ensureDirSync(dirPath);
118
+ const destDir = path_1.default.join(dirPath, skillName);
119
+ if (fs_extra_1.default.existsSync(destDir)) {
120
+ fs_extra_1.default.removeSync(destDir);
121
+ }
122
+ if (isGlobal) {
123
+ fs_extra_1.default.symlinkSync(skillDir, destDir);
124
+ }
125
+ else {
126
+ const relativePath = path_1.default.relative(dirPath, skillDir);
127
+ fs_extra_1.default.symlinkSync(relativePath, destDir);
128
+ }
129
+ console.log(chalk_1.default.green(`āœ… Linked to: ${destDir}`));
130
+ }
131
+ }
132
+ else {
133
+ const universalFullPath = path_1.default.join(basePath, tools_1.UNIVERSAL_PATH);
134
+ const skillDir = path_1.default.join(universalFullPath, skillName);
135
+ fs_extra_1.default.ensureDirSync(universalFullPath);
136
+ if (fs_extra_1.default.existsSync(skillDir)) {
137
+ fs_extra_1.default.removeSync(skillDir);
138
+ }
139
+ await (0, utils_1.extractZip)(tempZip, universalFullPath);
140
+ fs_extra_1.default.removeSync(tempZip);
141
+ console.log(chalk_1.default.green(`āœ… Copied to: ${skillDir}`));
142
+ for (const dir of dirs) {
143
+ const fullDir = dir.endsWith('/skills') ? dir : `${dir}/skills`;
144
+ const dirPath = path_1.default.join(basePath, fullDir);
145
+ fs_extra_1.default.ensureDirSync(dirPath);
146
+ const destDir = path_1.default.join(dirPath, skillName);
147
+ if (fs_extra_1.default.existsSync(destDir)) {
148
+ fs_extra_1.default.removeSync(destDir);
149
+ }
150
+ fs_extra_1.default.copySync(skillDir, destDir);
151
+ console.log(chalk_1.default.green(`āœ… Copied to: ${destDir}`));
152
+ }
153
+ }
154
+ // Update installation count
155
+ await (0, api_1.incrementInstallCount)(topSource, skillName);
156
+ // Record installation info to index
157
+ const installScope = isGlobal ? 'global' : (0, index_manager_1.getCurrentScope)();
158
+ const skillDir = path_1.default.join(basePath, tools_1.UNIVERSAL_PATH, skillName);
159
+ // Collect symlink and copy directories
160
+ const symlinkDirs = [];
161
+ const copyDirs = [];
162
+ for (const dir of dirs) {
163
+ const fullDir = dir.endsWith('/skills') ? dir : `${dir}/skills`;
164
+ const dirPath = path_1.default.join(basePath, fullDir);
165
+ const destDir = path_1.default.join(dirPath, skillName);
166
+ if (method === 'symlink') {
167
+ symlinkDirs.push(destDir);
168
+ }
169
+ else {
170
+ copyDirs.push(destDir);
171
+ }
172
+ }
173
+ const metadata = (0, index_manager_1.createSkillMetadata)(skillName, topSource, installScope);
174
+ (0, index_manager_1.writeSkillMetadata)(skillDir, metadata);
175
+ (0, index_manager_1.addOrUpdateSkill)({
176
+ name: skillName,
177
+ source: topSource,
178
+ installedAt: metadata.installedAt,
179
+ scope: installScope,
180
+ locations: {
181
+ universal: skillDir,
182
+ symlink: symlinkDirs,
183
+ copy: copyDirs,
184
+ },
185
+ });
186
+ console.log(chalk_1.default.green('\nšŸŽ‰ Installation completed!\n'));
187
+ }
188
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function list(): Promise<void>;
2
+ export declare function search(query: string): Promise<void>;
3
+ export declare function update(skillName?: string): Promise<void>;
4
+ export declare function uninstall(skillName: string): Promise<void>;
5
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AA8BA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA+C1C;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;AAED,wBAAsB,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhE"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.list = list;
7
+ exports.search = search;
8
+ exports.update = update;
9
+ exports.uninstall = uninstall;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const index_manager_1 = require("../index-manager");
12
+ function formatDate(dateStr) {
13
+ const date = new Date(dateStr);
14
+ return date.toLocaleDateString('zh-CN', {
15
+ year: 'numeric',
16
+ month: '2-digit',
17
+ day: '2-digit',
18
+ });
19
+ }
20
+ function truncate(str, maxLength) {
21
+ if (str.length <= maxLength)
22
+ return str;
23
+ return str.slice(0, maxLength - 3) + '...';
24
+ }
25
+ function getScopeDisplay(scopes) {
26
+ const hasGlobal = scopes.some(s => (0, index_manager_1.isGlobalScope)(s.scope));
27
+ const hasProject = scopes.some(s => !(0, index_manager_1.isGlobalScope)(s.scope));
28
+ if (hasGlobal && hasProject) {
29
+ return 'Global,Project';
30
+ }
31
+ else if (hasGlobal) {
32
+ return 'Global';
33
+ }
34
+ else {
35
+ return 'Project';
36
+ }
37
+ }
38
+ async function list() {
39
+ const allSkills = (0, index_manager_1.getAllSkills)();
40
+ if (allSkills.length === 0) {
41
+ console.log(chalk_1.default.gray('\nNo installed skills found.\n'));
42
+ console.log(chalk_1.default.gray('Use "npx skill4agent add <source> <skill>" to install.\n'));
43
+ return;
44
+ }
45
+ // Sort by name
46
+ allSkills.sort((a, b) => a.name.localeCompare(b.name));
47
+ // Calculate total installations
48
+ const totalInstalls = allSkills.reduce((sum, skill) => sum + skill.scopes.length, 0);
49
+ console.log(chalk_1.default.blue(`\nšŸ“¦ Installed Skills (${allSkills.length} skills, ${totalInstalls} installs)`));
50
+ console.log(chalk_1.default.gray('─'.repeat(80)));
51
+ // Table header
52
+ const nameWidth = 25;
53
+ const sourceWidth = 25;
54
+ const scopeWidth = 15;
55
+ console.log(chalk_1.default.bold(`${'Name'.padEnd(nameWidth)} ${'Source'.padEnd(sourceWidth)} ${'Scope'.padEnd(scopeWidth)} Installed`));
56
+ console.log(chalk_1.default.gray('─'.repeat(80)));
57
+ // Data rows
58
+ for (const { name, scopes } of allSkills) {
59
+ // Sort by time descending, get the latest installation
60
+ const latestScope = [...scopes].sort((a, b) => new Date(b.installedAt).getTime() - new Date(a.installedAt).getTime())[0];
61
+ const nameStr = truncate(name, nameWidth).padEnd(nameWidth);
62
+ const sourceStr = truncate(latestScope.source, sourceWidth).padEnd(sourceWidth);
63
+ const scopeStr = getScopeDisplay(scopes).padEnd(scopeWidth);
64
+ const dateStr = formatDate(latestScope.installedAt);
65
+ console.log(`${nameStr} ${sourceStr} ${scopeStr} ${dateStr}`);
66
+ }
67
+ console.log(chalk_1.default.gray('─'.repeat(80)));
68
+ console.log(chalk_1.default.gray(`\nTotal: ${allSkills.length} skill${allSkills.length > 1 ? 's' : ''} (${totalInstalls} install${totalInstalls > 1 ? 's' : ''})\n`));
69
+ }
70
+ async function search(query) {
71
+ console.log('search command', query);
72
+ }
73
+ async function update(skillName) {
74
+ console.log('update command', skillName);
75
+ }
76
+ async function uninstall(skillName) {
77
+ console.log('uninstall command', skillName);
78
+ }
79
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}