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 +51 -0
- package/README_CN.md +51 -0
- package/bin/skill4agent.js +3 -0
- package/dist/api.d.ts +30 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +70 -0
- package/dist/api.js.map +1 -0
- package/dist/commands/add.d.ts +2 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +263 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/install.d.ts +11 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +155 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +19 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +71 -0
- package/dist/main.js.map +1 -0
- package/dist/tools.d.ts +16 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +106 -0
- package/dist/tools.js.map +1 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +30 -0
- package/dist/utils.js.map +1 -0
- package/package.json +39 -0
- package/src/api.ts +99 -0
- package/src/commands/add.ts +311 -0
- package/src/commands/install.ts +186 -0
- package/src/commands/list.ts +15 -0
- package/src/main.ts +78 -0
- package/src/tools.ts +111 -0
- package/src/utils.ts +28 -0
- package/tsconfig.json +19 -0
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
|
+
```
|
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
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|