skill4agent 1.0.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/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # skill4agent CLI
2
+
3
+ A command-line tool for installing Agent Skills.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ # Interactive installation (recommended for beginners)
9
+ npx skill4agent add <source> <skill>
10
+
11
+ # Non-interactive installation (for scripts and AI automation)
12
+ npx skill4agent install <source> <skill> [options]
13
+ ```
14
+
15
+ ## install Command Options
16
+
17
+ | Option | Description | Default |
18
+ |--------|-------------|---------|
19
+ | `--type` | `original` or `translated` | original |
20
+ | `--global` | Install globally (available to all projects) | project dir |
21
+ | `--dirs` | Installation directories (comma-separated): `.trae,.cursor` | `.agents` only |
22
+ | `--method` | `symlink` or `copy` | symlink |
23
+
24
+ ## Examples
25
+
26
+ ```bash
27
+ # Minimal: install with all defaults
28
+ npx skill4agent install anthropics/skills frontend-design
29
+
30
+ # Install to specific directories (comma-separated)
31
+ npx skill4agent install anthropics/skills frontend-design --dirs ".trae,.cursor"
32
+
33
+ # Global installation (available to all projects)
34
+ npx skill4agent install anthropics/skills frontend-design --global
35
+
36
+ # Full options
37
+ npx skill4agent install anthropics/skills frontend-design \
38
+ --type original \
39
+ --global \
40
+ --dirs ".trae,.cursor" \
41
+ --method symlink
42
+ ```
43
+
44
+ ## Other Commands
45
+
46
+ ```bash
47
+ npx skill4agent list # List installed skills
48
+ npx skill4agent search <keyword> # Search for skills
49
+ npx skill4agent update # Update all skills
50
+ npx skill4agent uninstall <name> # Uninstall a skill
51
+ ```
package/README_CN.md ADDED
@@ -0,0 +1,51 @@
1
+ # skill4agent CLI
2
+
3
+ 一个用于安装 Agent Skills 的命令行工具。
4
+
5
+ ## 快速开始
6
+
7
+ ```bash
8
+ # 交互式安装(推荐新手,按照步骤选项安装)
9
+ npx skill4agent add <源仓库> <技能名>
10
+
11
+ # 非交互式安装(适合脚本自动化、AI操作使用)
12
+ npx skill4agent install <源仓库> <技能名> [选项]
13
+ ```
14
+
15
+ ## install 命令选项
16
+
17
+ | 选项 | 说明 | 默认值 |
18
+ |------|------|--------|
19
+ | `--type` | `original` 或 `translated` | original |
20
+ | `--global` | 是否全局安装,不传则安装在项目目录 | 项目目录 |
21
+ | `--dirs` | 安装目录(逗号分隔),如 ".trae,.cursor" | 默认仅安装在".agents"目录下 |
22
+ | `--method` | `symlink` 或 `copy` | symlink |
23
+
24
+ ## 示例
25
+
26
+ ```bash
27
+ # 最简:以所有默认参数安装
28
+ npx skill4agent install anthropics/skills frontend-design
29
+
30
+ # 安装到指定目录,多个目录逗号分隔
31
+ npx skill4agent install anthropics/skills frontend-design --dirs ".trae,.cursor"
32
+
33
+ # 全局安装,所有项目可用
34
+ npx skill4agent install anthropics/skills frontend-design --global
35
+
36
+ # 完整参数
37
+ npx skill4agent install anthropics/skills frontend-design \
38
+ --type original \
39
+ --global \
40
+ --agents ".trae,.cursor" \
41
+ --method symlink
42
+ ```
43
+
44
+ ## 其他命令
45
+
46
+ ```bash
47
+ npx skill4agent list # 查看已安装的技能
48
+ npx skill4agent search <关键词> # 搜索技能
49
+ npx skill4agent update # 更新所有技能
50
+ npx skill4agent uninstall <名> # 卸载技能
51
+ ```
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ require('../dist/main');
package/dist/api.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ export interface SkillInfo {
2
+ skillName: string;
3
+ name: string;
4
+ nameCn: string;
5
+ description: string;
6
+ descriptionCn: string;
7
+ descriptionTranslated: string;
8
+ category: {
9
+ nameCn: string;
10
+ nameEn: string;
11
+ } | null;
12
+ tags: string;
13
+ tagsCn: string;
14
+ originalLanguage: string;
15
+ hasTranslation: boolean;
16
+ hasScript: boolean;
17
+ scriptCount: number;
18
+ scriptCheckResult: string;
19
+ hasDownloaded: boolean;
20
+ downloadStatus: string;
21
+ installs: number;
22
+ trending24h: number;
23
+ }
24
+ export declare function downloadSkill(topSource: string, skillName: string, type?: 'original' | 'translated'): Promise<string>;
25
+ export declare function getSkillInfo(topSource: string, skillName: string): Promise<{
26
+ skill: SkillInfo | null;
27
+ sourceExists: boolean;
28
+ }>;
29
+ export declare function getDownloadUrl(topSource: string, skillName: string, type?: 'original' | 'translated'): string;
30
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,UAAU,GAAG,YAAyB,GAC3C,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC,CA2CpI;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,UAAU,GAAG,YAAyB,GAAG,MAAM,CAEzH"}
package/dist/api.js ADDED
@@ -0,0 +1,70 @@
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.downloadSkill = downloadSkill;
7
+ exports.getSkillInfo = getSkillInfo;
8
+ exports.getDownloadUrl = getDownloadUrl;
9
+ const axios_1 = __importDefault(require("axios"));
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const os_1 = __importDefault(require("os"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const API_BASE = 'https://skill4agent.com/api';
14
+ async function downloadSkill(topSource, skillName, type = 'original') {
15
+ const url = `${API_BASE}/download?top_source=${encodeURIComponent(topSource)}&skill_name=${encodeURIComponent(skillName)}&type=${type}`;
16
+ const response = await axios_1.default.get(url, {
17
+ responseType: 'arraybuffer',
18
+ });
19
+ const tempDir = fs_extra_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'skill4agent-'));
20
+ const fileName = `${skillName}.zip`;
21
+ const filePath = path_1.default.join(tempDir, fileName);
22
+ fs_extra_1.default.writeFileSync(filePath, Buffer.from(response.data));
23
+ return filePath;
24
+ }
25
+ async function getSkillInfo(topSource, skillName) {
26
+ try {
27
+ const url = `${API_BASE}/skills/info?top_source=${encodeURIComponent(topSource)}&skill_name=${encodeURIComponent(skillName)}`;
28
+ const response = await axios_1.default.get(url);
29
+ if (response.status === 404) {
30
+ return { skill: null, sourceExists: false };
31
+ }
32
+ const skill = response.data.data;
33
+ if (!skill) {
34
+ return { skill: null, sourceExists: true };
35
+ }
36
+ return {
37
+ skill: {
38
+ skillName: skill.skillName,
39
+ name: skill.name,
40
+ nameCn: skill.nameCn,
41
+ description: skill.description,
42
+ descriptionCn: skill.descriptionCn,
43
+ descriptionTranslated: skill.descriptionTranslated,
44
+ category: skill.category,
45
+ tags: skill.tags,
46
+ tagsCn: skill.tagsCn,
47
+ originalLanguage: skill.originalLanguage,
48
+ hasTranslation: skill.hasTranslation,
49
+ hasScript: skill.hasScript,
50
+ scriptCount: skill.scriptCount,
51
+ scriptCheckResult: skill.scriptCheckResult,
52
+ hasDownloaded: skill.hasDownloaded,
53
+ downloadStatus: skill.downloadStatus,
54
+ installs: skill.installs,
55
+ trending24h: skill.trending24h,
56
+ },
57
+ sourceExists: true,
58
+ };
59
+ }
60
+ catch (error) {
61
+ if (error.response?.status === 404) {
62
+ return { skill: null, sourceExists: false };
63
+ }
64
+ return { skill: null, sourceExists: false };
65
+ }
66
+ }
67
+ function getDownloadUrl(topSource, skillName, type = 'original') {
68
+ return `${API_BASE}/download?top_source=${encodeURIComponent(topSource)}&skill_name=${encodeURIComponent(skillName)}&type=${type}`;
69
+ }
70
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function add(topSource: string, skillName: string): Promise<void>;
2
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AA+JA,wBAAsB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuJ7E"}
@@ -0,0 +1,263 @@
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
+ function getAgentName(id) {
16
+ const agent = [...tools_1.UNIVERSAL_AGENTS, ...tools_1.OTHER_AGENTS].find(a => a.id === id);
17
+ return agent?.name || id;
18
+ }
19
+ async function promptTypeSelection(skillInfo) {
20
+ const isOriginalEnglish = skillInfo.originalLanguage === 'en';
21
+ const originalName = isOriginalEnglish ? 'English' : 'Chinese';
22
+ const translatedName = isOriginalEnglish ? 'Chinese' : 'English';
23
+ if (!skillInfo.hasTranslation) {
24
+ console.log(chalk_1.default.yellow(`\nℹ️ This skill does not have a ${translatedName} translation yet.`));
25
+ console.log(chalk_1.default.gray(` Installing ${originalName} version...\n`));
26
+ return 'original';
27
+ }
28
+ const { type } = await inquirer_1.default.prompt({
29
+ type: 'list',
30
+ name: 'type',
31
+ message: `Select version for "${skillInfo.name}"`,
32
+ choices: [
33
+ {
34
+ name: `${originalName} (Original)`,
35
+ value: 'original',
36
+ },
37
+ {
38
+ name: `${translatedName} (Translation)`,
39
+ value: 'translated',
40
+ },
41
+ ],
42
+ default: 'original',
43
+ });
44
+ return type;
45
+ }
46
+ async function promptScopeSelection() {
47
+ const { scope } = await inquirer_1.default.prompt({
48
+ type: 'list',
49
+ name: 'scope',
50
+ message: 'Installation scope',
51
+ choices: [
52
+ {
53
+ name: 'Project (Install in current directory (committed with your project))',
54
+ value: 'project',
55
+ },
56
+ {
57
+ name: 'Global (Install in home directory (available across all projects))',
58
+ value: 'global',
59
+ },
60
+ ],
61
+ default: 'project',
62
+ });
63
+ return scope;
64
+ }
65
+ async function promptAgentSelection(isGlobal) {
66
+ const universalNames = tools_1.UNIVERSAL_AGENTS.map(a => a.name).join(', ');
67
+ const universalDisplayPath = (0, tools_1.getAgentDisplayPath)(tools_1.UNIVERSAL_AGENTS[0].id, isGlobal);
68
+ const otherAgentChoices = tools_1.OTHER_AGENTS.map(agent => ({
69
+ name: `${agent.name} (${(0, tools_1.getAgentDisplayPath)(agent.id, isGlobal)})`,
70
+ value: agent.id,
71
+ }));
72
+ console.log(chalk_1.default.green(`✓ Universal (${universalDisplayPath}): ${universalNames} is always included`));
73
+ const { selectedOtherAgents } = await inquirer_1.default.prompt({
74
+ type: 'checkbox',
75
+ name: 'selectedOtherAgents',
76
+ message: 'Select additional agents:',
77
+ pageSize: 12,
78
+ loop: false,
79
+ choices: otherAgentChoices,
80
+ });
81
+ const selectedNames = selectedOtherAgents.map(id => tools_1.OTHER_AGENTS.find(a => a.id === id)?.name || id);
82
+ const displayNames = selectedNames.length > 0
83
+ ? ['Universal', ...selectedNames].join(', ')
84
+ : 'Universal';
85
+ console.log(chalk_1.default.green(`✓ Selected: ${displayNames}\n`));
86
+ const universalAgentIds = tools_1.UNIVERSAL_AGENTS.map(a => a.id);
87
+ return [...universalAgentIds, ...selectedOtherAgents];
88
+ }
89
+ async function promptMethodSelection() {
90
+ const { method } = await inquirer_1.default.prompt({
91
+ type: 'list',
92
+ name: 'method',
93
+ message: 'Installation method',
94
+ choices: [
95
+ {
96
+ name: 'Symlink (Recommended) (Single source of truth, easy updates)',
97
+ value: 'symlink',
98
+ },
99
+ {
100
+ name: 'Copy to all agents (Independent copies for each agent)',
101
+ value: 'copy',
102
+ },
103
+ ],
104
+ default: 'symlink',
105
+ });
106
+ return method;
107
+ }
108
+ function displaySummary(skillName, source, typeDisplay, scope, agents, method) {
109
+ const universalAgentIds = tools_1.UNIVERSAL_AGENTS.map(a => a.id);
110
+ const hasUniversal = agents.some(id => universalAgentIds.includes(id));
111
+ const otherAgents = agents.filter(id => !universalAgentIds.includes(id));
112
+ const otherAgentNames = otherAgents.map(id => getAgentName(id));
113
+ const agentDisplay = hasUniversal
114
+ ? ['Universal', ...otherAgentNames].join(', ')
115
+ : otherAgentNames.join(', ');
116
+ const agentCount = (hasUniversal ? 1 : 0) + otherAgentNames.length;
117
+ console.log(chalk_1.default.blue('\n📊 Installation Summary'));
118
+ console.log(chalk_1.default.gray('─'.repeat(50)));
119
+ console.log(`Skill: ${chalk_1.default.white(skillName)}`);
120
+ console.log(`Source: ${source}`);
121
+ console.log(`Type: ${typeDisplay}`);
122
+ console.log(`Scope: ${scope === 'global' ? 'Global' : 'Project'}`);
123
+ console.log(`Agents (${agentCount}): ${agentDisplay}`);
124
+ console.log(`Method: ${method === 'symlink' ? 'Symlink (Recommended)' : 'Copy'}`);
125
+ console.log(chalk_1.default.gray('─'.repeat(50)));
126
+ }
127
+ async function promptConfirmation() {
128
+ const { confirm } = await inquirer_1.default.prompt({
129
+ type: 'confirm',
130
+ name: 'confirm',
131
+ message: 'Proceed with installation?',
132
+ default: true,
133
+ });
134
+ return confirm;
135
+ }
136
+ async function add(topSource, skillName) {
137
+ console.log(chalk_1.default.blue(`\n📦 Installing skill: ${skillName}`));
138
+ console.log(chalk_1.default.gray(` Source: ${topSource}\n`));
139
+ let result;
140
+ try {
141
+ result = await (0, api_1.getSkillInfo)(topSource, skillName);
142
+ }
143
+ catch (error) {
144
+ console.log(chalk_1.default.red(`\n❌ Skill "${skillName}" not found in source "${topSource}".`));
145
+ console.log(chalk_1.default.gray(` Please check the source repository and skill name.\n`));
146
+ return;
147
+ }
148
+ if (!result.skill) {
149
+ console.log(chalk_1.default.red(`\n❌ Skill "${skillName}" not found in source "${topSource}".`));
150
+ console.log(chalk_1.default.gray(` Please check the source repository and skill name.\n`));
151
+ return;
152
+ }
153
+ const skillInfo = result.skill;
154
+ console.log(chalk_1.default.blue(`\n📦 Skill: ${chalk_1.default.white(skillInfo.name)}`));
155
+ console.log(chalk_1.default.gray(` Category: ${skillInfo.category?.nameEn || 'N/A'} | Installs: ${skillInfo.installs}`));
156
+ if (skillInfo.tags) {
157
+ console.log(chalk_1.default.gray(` Tags: ${skillInfo.tags}`));
158
+ }
159
+ if (!skillInfo.hasScript) {
160
+ console.log(chalk_1.default.gray(` 📜 Scripts: No scripts`));
161
+ }
162
+ else {
163
+ const statusText = skillInfo.scriptCheckResult === 'safe' ? '✅ Check passed' : '⚠️ Needs attention';
164
+ console.log(chalk_1.default.gray(` 📜 Scripts: ${skillInfo.scriptCount} script(s) - ${statusText}`));
165
+ }
166
+ console.log(chalk_1.default.gray(` ${skillInfo.hasTranslation ? '✅' : '❌'} Translation available\n`));
167
+ const type = await promptTypeSelection(skillInfo);
168
+ const isOriginalEnglish = skillInfo.originalLanguage === 'en';
169
+ const typeDisplay = type === 'original'
170
+ ? (isOriginalEnglish ? 'English' : 'Chinese')
171
+ : (isOriginalEnglish ? 'Chinese' : 'English');
172
+ console.log(chalk_1.default.gray(` Type: ${typeDisplay}\n`));
173
+ const scope = await promptScopeSelection();
174
+ const isGlobal = scope === 'global';
175
+ const selectedAgentIds = await promptAgentSelection(isGlobal);
176
+ if (selectedAgentIds.length === 0) {
177
+ console.log(chalk_1.default.yellow('\n⚠️ No agents selected. Installation cancelled.'));
178
+ return;
179
+ }
180
+ const installMethod = await promptMethodSelection();
181
+ displaySummary(skillName, topSource, typeDisplay, scope, selectedAgentIds, installMethod);
182
+ const confirmed = await promptConfirmation();
183
+ if (!confirmed) {
184
+ console.log(chalk_1.default.yellow('\n⚠️ Installation cancelled.'));
185
+ return;
186
+ }
187
+ const basePath = isGlobal ? os_1.default.homedir() : process.cwd();
188
+ let tempZip;
189
+ try {
190
+ tempZip = await (0, api_1.downloadSkill)(topSource, skillName, type);
191
+ }
192
+ catch (error) {
193
+ if (error.response?.status === 404) {
194
+ console.log(chalk_1.default.red(`\n❌ Failed to download skill "${skillName}".`));
195
+ console.log(chalk_1.default.gray(` The skill may not exist or the download link is invalid.\n`));
196
+ return;
197
+ }
198
+ console.log(chalk_1.default.red(`\n❌ Download failed: ${error.message}`));
199
+ return;
200
+ }
201
+ if (installMethod === 'symlink') {
202
+ const universalFullPath = path_1.default.join(basePath, tools_1.UNIVERSAL_PATH);
203
+ fs_extra_1.default.ensureDirSync(universalFullPath);
204
+ const skillDir = path_1.default.join(universalFullPath, skillName);
205
+ if (fs_extra_1.default.existsSync(skillDir)) {
206
+ console.log(chalk_1.default.yellow(`\n⚠️ Skill "${skillName}" already exists. Overwriting...`));
207
+ fs_extra_1.default.removeSync(skillDir);
208
+ }
209
+ await (0, utils_1.extractZip)(tempZip, universalFullPath);
210
+ fs_extra_1.default.removeSync(tempZip);
211
+ console.log(chalk_1.default.green(`✅ Installed to: ${skillDir}`));
212
+ const otherAgentIds = selectedAgentIds.filter(id => !tools_1.UNIVERSAL_AGENTS.some(a => a.id === id));
213
+ for (const agentId of otherAgentIds) {
214
+ const agent = tools_1.OTHER_AGENTS.find(a => a.id === agentId);
215
+ if (!agent)
216
+ continue;
217
+ const effectivePath = isGlobal && agent.globalPath ? agent.globalPath : agent.path;
218
+ const agentPath = path_1.default.join(basePath, effectivePath);
219
+ fs_extra_1.default.ensureDirSync(agentPath);
220
+ const destDir = path_1.default.join(agentPath, skillName);
221
+ if (fs_extra_1.default.existsSync(destDir)) {
222
+ fs_extra_1.default.removeSync(destDir);
223
+ }
224
+ if (isGlobal) {
225
+ fs_extra_1.default.symlinkSync(skillDir, destDir);
226
+ }
227
+ else {
228
+ const relativePath = path_1.default.relative(agentPath, skillDir);
229
+ fs_extra_1.default.symlinkSync(relativePath, destDir);
230
+ }
231
+ console.log(chalk_1.default.green(`✅ Linked to: ${destDir}`));
232
+ }
233
+ }
234
+ else {
235
+ const universalFullPath = path_1.default.join(basePath, tools_1.UNIVERSAL_PATH);
236
+ fs_extra_1.default.ensureDirSync(universalFullPath);
237
+ if (fs_extra_1.default.existsSync(path_1.default.join(universalFullPath, skillName))) {
238
+ fs_extra_1.default.removeSync(path_1.default.join(universalFullPath, skillName));
239
+ }
240
+ await (0, utils_1.extractZip)(tempZip, universalFullPath);
241
+ fs_extra_1.default.removeSync(tempZip);
242
+ console.log(chalk_1.default.green(`✅ Copied to: ${universalFullPath}`));
243
+ let copiedCount = 0;
244
+ const otherAgentIds = selectedAgentIds.filter(id => !tools_1.UNIVERSAL_AGENTS.some(a => a.id === id));
245
+ for (const agentId of otherAgentIds) {
246
+ const agent = tools_1.OTHER_AGENTS.find(a => a.id === agentId);
247
+ if (!agent)
248
+ continue;
249
+ const effectivePath = isGlobal && agent.globalPath ? agent.globalPath : agent.path;
250
+ const agentPath = path_1.default.join(basePath, effectivePath);
251
+ fs_extra_1.default.ensureDirSync(agentPath);
252
+ const destDir = path_1.default.join(agentPath, skillName);
253
+ if (fs_extra_1.default.existsSync(destDir)) {
254
+ fs_extra_1.default.removeSync(destDir);
255
+ }
256
+ fs_extra_1.default.copySync(path_1.default.join(universalFullPath, skillName), destDir);
257
+ console.log(chalk_1.default.green(`✅ Copied to: ${destDir}`));
258
+ copiedCount++;
259
+ }
260
+ }
261
+ console.log(chalk_1.default.green('\n🎉 Installation completed!\n'));
262
+ }
263
+ //# 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":"AAQA,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,CA8IpE"}