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
|
@@ -0,0 +1,155 @@
|
|
|
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
|
+
function getAgentNameFromPath(dirPath) {
|
|
15
|
+
const name = path_1.default.basename(dirPath);
|
|
16
|
+
return name.charAt(0).toUpperCase() + name.slice(1);
|
|
17
|
+
}
|
|
18
|
+
function getAgentDisplayName(dirPath) {
|
|
19
|
+
const dirname = path_1.default.basename(path_1.default.dirname(dirPath));
|
|
20
|
+
if (dirname === '.agents')
|
|
21
|
+
return 'Universal';
|
|
22
|
+
return dirname.charAt(0).toUpperCase() + dirname.slice(1);
|
|
23
|
+
}
|
|
24
|
+
function displaySummary(options, skillInfo, typeDisplay, allDirs) {
|
|
25
|
+
const dirNames = allDirs.map(d => getAgentDisplayName(d));
|
|
26
|
+
const dirCount = allDirs.length;
|
|
27
|
+
console.log(chalk_1.default.blue('\nš Installation Summary'));
|
|
28
|
+
console.log(chalk_1.default.gray('ā'.repeat(50)));
|
|
29
|
+
console.log(`Skill: ${chalk_1.default.white(skillInfo.name)}`);
|
|
30
|
+
console.log(`Source: ${options.topSource}`);
|
|
31
|
+
console.log(`Type: ${typeDisplay}`);
|
|
32
|
+
console.log(`Scope: ${options.global ? 'Global' : 'Project'}`);
|
|
33
|
+
console.log(`Dirs (${dirCount}): ${dirNames.join(', ')}`);
|
|
34
|
+
console.log(`Method: ${options.method === 'symlink' ? 'Symlink (Recommended)' : 'Copy'}`);
|
|
35
|
+
console.log(chalk_1.default.gray('ā'.repeat(50)));
|
|
36
|
+
}
|
|
37
|
+
async function install(options) {
|
|
38
|
+
const { topSource, skillName, type, global, dirs, method } = options;
|
|
39
|
+
console.log(chalk_1.default.blue(`\nš¦ Installing skill: ${skillName}`));
|
|
40
|
+
console.log(chalk_1.default.gray(` Source: ${topSource}\n`));
|
|
41
|
+
let result;
|
|
42
|
+
try {
|
|
43
|
+
result = await (0, api_1.getSkillInfo)(topSource, skillName);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.log(chalk_1.default.red(`\nā Skill "${skillName}" not found in source "${topSource}".`));
|
|
47
|
+
console.log(chalk_1.default.gray(` Please check the source repository and skill name.\n`));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (!result.skill) {
|
|
51
|
+
console.log(chalk_1.default.red(`\nā Skill "${skillName}" not found in source "${topSource}".`));
|
|
52
|
+
console.log(chalk_1.default.gray(` Please check the source repository and skill name.\n`));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const skillInfo = result.skill;
|
|
56
|
+
console.log(chalk_1.default.blue(`\nš¦ Skill: ${chalk_1.default.white(skillInfo.name)}`));
|
|
57
|
+
console.log(chalk_1.default.gray(` Category: ${skillInfo.category?.nameEn || 'N/A'} | Installs: ${skillInfo.installs}`));
|
|
58
|
+
if (skillInfo.tags) {
|
|
59
|
+
console.log(chalk_1.default.gray(` Tags: ${skillInfo.tags}`));
|
|
60
|
+
}
|
|
61
|
+
if (!skillInfo.hasScript) {
|
|
62
|
+
console.log(chalk_1.default.gray(` š Scripts: No scripts`));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
const statusText = skillInfo.scriptCheckResult === 'safe' ? 'ā
Check passed' : 'ā ļø Needs attention';
|
|
66
|
+
console.log(chalk_1.default.gray(` š Scripts: ${skillInfo.scriptCount} script(s) - ${statusText}`));
|
|
67
|
+
}
|
|
68
|
+
console.log(chalk_1.default.gray(` ${skillInfo.hasTranslation ? 'ā
' : 'ā'} Translation available\n`));
|
|
69
|
+
let finalType = type;
|
|
70
|
+
const isOriginalEnglish = skillInfo.originalLanguage === 'en';
|
|
71
|
+
if (type === 'translated' && !skillInfo.hasTranslation) {
|
|
72
|
+
console.log(chalk_1.default.yellow(`ā ļø Translation not available. Using original (${isOriginalEnglish ? 'English' : 'Chinese'}) version.\n`));
|
|
73
|
+
finalType = 'original';
|
|
74
|
+
}
|
|
75
|
+
const typeDisplay = finalType === 'original'
|
|
76
|
+
? (isOriginalEnglish ? 'English' : 'Chinese')
|
|
77
|
+
: (isOriginalEnglish ? 'Chinese' : 'English');
|
|
78
|
+
console.log(chalk_1.default.gray(` Type: ${typeDisplay}\n`));
|
|
79
|
+
const isGlobal = global;
|
|
80
|
+
const basePath = isGlobal ? os_1.default.homedir() : process.cwd();
|
|
81
|
+
const allDirs = [tools_1.UNIVERSAL_PATH, ...dirs.map((d) => d.endsWith('/skills') ? d : `${d}/skills`)];
|
|
82
|
+
const dirNames = allDirs.map(d => getAgentDisplayName(d));
|
|
83
|
+
console.log(chalk_1.default.green(`ā Directories: ${dirNames.join(', ')}`));
|
|
84
|
+
if (allDirs.length === 0) {
|
|
85
|
+
console.log(chalk_1.default.yellow('\nā ļø No directories selected. Installation cancelled.'));
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
displaySummary({ topSource, skillName, type: finalType, global, dirs, method }, skillInfo, typeDisplay, allDirs);
|
|
89
|
+
let tempZip;
|
|
90
|
+
try {
|
|
91
|
+
tempZip = await (0, api_1.downloadSkill)(topSource, skillName, finalType);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
if (error.response?.status === 404) {
|
|
95
|
+
console.log(chalk_1.default.red(`\nā Failed to download skill "${skillName}".`));
|
|
96
|
+
console.log(chalk_1.default.gray(` The skill may not exist or the download link is invalid.\n`));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
console.log(chalk_1.default.red(`\nā Download failed: ${error.message}`));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (method === 'symlink') {
|
|
103
|
+
const universalFullPath = path_1.default.join(basePath, tools_1.UNIVERSAL_PATH);
|
|
104
|
+
fs_extra_1.default.ensureDirSync(universalFullPath);
|
|
105
|
+
const skillDir = path_1.default.join(universalFullPath, skillName);
|
|
106
|
+
if (fs_extra_1.default.existsSync(skillDir)) {
|
|
107
|
+
console.log(chalk_1.default.yellow(`\nā ļø Skill "${skillName}" already exists. Overwriting...`));
|
|
108
|
+
fs_extra_1.default.removeSync(skillDir);
|
|
109
|
+
}
|
|
110
|
+
await (0, utils_1.extractZip)(tempZip, universalFullPath);
|
|
111
|
+
fs_extra_1.default.removeSync(tempZip);
|
|
112
|
+
console.log(chalk_1.default.green(`ā
Installed to: ${skillDir}`));
|
|
113
|
+
for (const dir of dirs) {
|
|
114
|
+
const fullDir = dir.endsWith('/skills') ? dir : `${dir}/skills`;
|
|
115
|
+
const dirPath = path_1.default.join(basePath, fullDir);
|
|
116
|
+
fs_extra_1.default.ensureDirSync(dirPath);
|
|
117
|
+
const destDir = path_1.default.join(dirPath, skillName);
|
|
118
|
+
if (fs_extra_1.default.existsSync(destDir)) {
|
|
119
|
+
fs_extra_1.default.removeSync(destDir);
|
|
120
|
+
}
|
|
121
|
+
if (isGlobal) {
|
|
122
|
+
fs_extra_1.default.symlinkSync(skillDir, destDir);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
const relativePath = path_1.default.relative(dirPath, skillDir);
|
|
126
|
+
fs_extra_1.default.symlinkSync(relativePath, destDir);
|
|
127
|
+
}
|
|
128
|
+
console.log(chalk_1.default.green(`ā
Linked to: ${destDir}`));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const universalFullPath = path_1.default.join(basePath, tools_1.UNIVERSAL_PATH);
|
|
133
|
+
const skillDir = path_1.default.join(universalFullPath, skillName);
|
|
134
|
+
fs_extra_1.default.ensureDirSync(universalFullPath);
|
|
135
|
+
if (fs_extra_1.default.existsSync(skillDir)) {
|
|
136
|
+
fs_extra_1.default.removeSync(skillDir);
|
|
137
|
+
}
|
|
138
|
+
await (0, utils_1.extractZip)(tempZip, universalFullPath);
|
|
139
|
+
fs_extra_1.default.removeSync(tempZip);
|
|
140
|
+
console.log(chalk_1.default.green(`ā
Copied to: ${skillDir}`));
|
|
141
|
+
for (const dir of dirs) {
|
|
142
|
+
const fullDir = dir.endsWith('/skills') ? dir : `${dir}/skills`;
|
|
143
|
+
const dirPath = path_1.default.join(basePath, fullDir);
|
|
144
|
+
fs_extra_1.default.ensureDirSync(dirPath);
|
|
145
|
+
const destDir = path_1.default.join(dirPath, skillName);
|
|
146
|
+
if (fs_extra_1.default.existsSync(destDir)) {
|
|
147
|
+
fs_extra_1.default.removeSync(destDir);
|
|
148
|
+
}
|
|
149
|
+
fs_extra_1.default.copySync(skillDir, destDir);
|
|
150
|
+
console.log(chalk_1.default.green(`ā
Copied to: ${destDir}`));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
console.log(chalk_1.default.green('\nš Installation completed!\n'));
|
|
154
|
+
}
|
|
155
|
+
//# 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":"AAAA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1C;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,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.list = list;
|
|
4
|
+
exports.search = search;
|
|
5
|
+
exports.update = update;
|
|
6
|
+
exports.uninstall = uninstall;
|
|
7
|
+
async function list() {
|
|
8
|
+
console.log('list command');
|
|
9
|
+
}
|
|
10
|
+
async function search(query) {
|
|
11
|
+
console.log('search command', query);
|
|
12
|
+
}
|
|
13
|
+
async function update(skillName) {
|
|
14
|
+
console.log('update command', skillName);
|
|
15
|
+
}
|
|
16
|
+
async function uninstall(skillName) {
|
|
17
|
+
console.log('uninstall command', skillName);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;AAAA,oBAEC;AAED,wBAEC;AAED,wBAEC;AAED,8BAEC;AAdM,KAAK,UAAU,IAAI;IACxB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC9B,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,KAAa;IACxC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,SAAkB;IAC7C,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,SAAiB;IAC/C,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;AAC9C,CAAC"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
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
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const install_1 = require("./commands/install");
|
|
9
|
+
const add_1 = require("./commands/add");
|
|
10
|
+
const list_1 = require("./commands/list");
|
|
11
|
+
const program = new commander_1.Command();
|
|
12
|
+
program
|
|
13
|
+
.name('skill4agent')
|
|
14
|
+
.description('CLI tool for installing and managing agent skills')
|
|
15
|
+
.version('1.0.0');
|
|
16
|
+
program
|
|
17
|
+
.command('add <top_source> <skill_name>')
|
|
18
|
+
.description('Interactive installation with guided prompts')
|
|
19
|
+
.action(async (topSource, skillName) => {
|
|
20
|
+
await (0, add_1.add)(topSource, skillName);
|
|
21
|
+
});
|
|
22
|
+
program
|
|
23
|
+
.command('install <top_source> <skill_name>')
|
|
24
|
+
.description('Non-interactive installation with command-line options')
|
|
25
|
+
.option('--type <type>', 'Package type: original or translated', 'original')
|
|
26
|
+
.option('--global', 'Install to global storage')
|
|
27
|
+
.option('--dirs <dirs>', 'Additional directories (comma-separated): .trae,.cursor,.qwen')
|
|
28
|
+
.option('--method <method>', 'Installation method: symlink or copy', 'symlink')
|
|
29
|
+
.action(async (topSource, skillName, options) => {
|
|
30
|
+
if (options.type && !['original', 'translated'].includes(options.type)) {
|
|
31
|
+
console.log(chalk_1.default.red('\nā Invalid --type value. Must be "original" or "translated".\n'));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
if (options.method && !['symlink', 'copy'].includes(options.method)) {
|
|
35
|
+
console.log(chalk_1.default.red('\nā Invalid --method value. Must be "symlink" or "copy".\n'));
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
const dirsArray = options.dirs
|
|
39
|
+
? options.dirs.split(',').map((a) => a.trim()).filter((a) => a.length > 0)
|
|
40
|
+
: [];
|
|
41
|
+
await (0, install_1.install)({
|
|
42
|
+
topSource,
|
|
43
|
+
skillName,
|
|
44
|
+
type: options.type || 'original',
|
|
45
|
+
global: !!options.global,
|
|
46
|
+
dirs: dirsArray,
|
|
47
|
+
method: options.method || 'symlink',
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
program
|
|
51
|
+
.command('list')
|
|
52
|
+
.description('List installed skills')
|
|
53
|
+
.action(list_1.list);
|
|
54
|
+
program
|
|
55
|
+
.command('search <query>')
|
|
56
|
+
.description('Search for skills')
|
|
57
|
+
.action(list_1.search);
|
|
58
|
+
program
|
|
59
|
+
.command('update [skill_name]')
|
|
60
|
+
.description('Update installed skills')
|
|
61
|
+
.action(list_1.update);
|
|
62
|
+
program
|
|
63
|
+
.command('uninstall <skill_name>')
|
|
64
|
+
.description('Uninstall a skill')
|
|
65
|
+
.action(list_1.uninstall);
|
|
66
|
+
program.parse();
|
|
67
|
+
process.on('unhandledRejection', (reason) => {
|
|
68
|
+
console.error(chalk_1.default.red('Error:'), reason);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface Agent {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
path: string;
|
|
5
|
+
universal: boolean;
|
|
6
|
+
globalPath?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const UNIVERSAL_AGENTS: Agent[];
|
|
9
|
+
export declare const UNIVERSAL_PATH = ".agents/skills";
|
|
10
|
+
export declare const OTHER_AGENTS: Agent[];
|
|
11
|
+
export declare function getGlobalStoragePath(): string;
|
|
12
|
+
export declare function getAgentPath(agentId: string, isGlobal: boolean): string | null;
|
|
13
|
+
export declare function checkAgentExists(agentPath: string): boolean;
|
|
14
|
+
export declare function getAllAgents(): Agent[];
|
|
15
|
+
export declare function getAgentDisplayPath(agentId: string, isGlobal: boolean): string;
|
|
16
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,EAOnC,CAAC;AAEF,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAE/C,eAAO,MAAM,YAAY,EAAE,KAAK,EAiC/B,CAAC;AAEF,wBAAgB,oBAAoB,IAAI,MAAM,CAa7C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAY9E;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAG3D;AAED,wBAAgB,YAAY,IAAI,KAAK,EAAE,CAEtC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAc9E"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
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.OTHER_AGENTS = exports.UNIVERSAL_PATH = exports.UNIVERSAL_AGENTS = void 0;
|
|
7
|
+
exports.getGlobalStoragePath = getGlobalStoragePath;
|
|
8
|
+
exports.getAgentPath = getAgentPath;
|
|
9
|
+
exports.checkAgentExists = checkAgentExists;
|
|
10
|
+
exports.getAllAgents = getAllAgents;
|
|
11
|
+
exports.getAgentDisplayPath = getAgentDisplayPath;
|
|
12
|
+
const fs_1 = __importDefault(require("fs"));
|
|
13
|
+
const os_1 = __importDefault(require("os"));
|
|
14
|
+
const path_1 = __importDefault(require("path"));
|
|
15
|
+
exports.UNIVERSAL_AGENTS = [
|
|
16
|
+
{ id: 'amp', name: 'Amp', path: '.agents/skills', universal: true },
|
|
17
|
+
{ id: 'codex', name: 'Codex', path: '.agents/skills', universal: true },
|
|
18
|
+
{ id: 'gemini-cli', name: 'Gemini CLI', path: '.agents/skills', universal: true },
|
|
19
|
+
{ id: 'github-copilot', name: 'GitHub Copilot', path: '.agents/skills', universal: true },
|
|
20
|
+
{ id: 'kimi-code-cli', name: 'Kimi Code CLI', path: '.agents/skills', universal: true },
|
|
21
|
+
{ id: 'opencode', name: 'OpenCode', path: '.agents/skills', universal: true },
|
|
22
|
+
];
|
|
23
|
+
exports.UNIVERSAL_PATH = '.agents/skills';
|
|
24
|
+
exports.OTHER_AGENTS = [
|
|
25
|
+
{ id: 'antigravity', name: 'Antigravity', path: '.agent/skills', universal: false },
|
|
26
|
+
{ id: 'augment', name: 'Augment', path: '.augment/rules', universal: false },
|
|
27
|
+
{ id: 'claude-code', name: 'Claude Code', path: '.claude/skills', universal: false },
|
|
28
|
+
{ id: 'openclaw', name: 'OpenClaw', path: 'skills', universal: false },
|
|
29
|
+
{ id: 'cline', name: 'Cline', path: '.cline/skills', universal: false },
|
|
30
|
+
{ id: 'codebuddy', name: 'CodeBuddy', path: '.codebuddy/skills', universal: false },
|
|
31
|
+
{ id: 'command-code', name: 'Command Code', path: '.commandcode/skills', universal: false },
|
|
32
|
+
{ id: 'continue', name: 'Continue', path: '.continue/skills', universal: false },
|
|
33
|
+
{ id: 'crush', name: 'Crush', path: '.crush/skills', universal: false },
|
|
34
|
+
{ id: 'cursor', name: 'Cursor', path: '.cursor/skills', universal: false },
|
|
35
|
+
{ id: 'droid', name: 'Droid', path: '.factory/skills', universal: false },
|
|
36
|
+
{ id: 'goose', name: 'Goose', path: '.goose/skills', universal: false },
|
|
37
|
+
{ id: 'junie', name: 'Junie', path: '.junie/skills', universal: false },
|
|
38
|
+
{ id: 'iflow-cli', name: 'iFlow CLI', path: '.iflow/skills', universal: false },
|
|
39
|
+
{ id: 'kilo-code', name: 'Kilo Code', path: '.kilocode/skills', universal: false },
|
|
40
|
+
{ id: 'kiro-cli', name: 'Kiro CLI', path: '.kiro/skills', universal: false },
|
|
41
|
+
{ id: 'kode', name: 'Kode', path: '.kode/skills', universal: false },
|
|
42
|
+
{ id: 'mcpjam', name: 'MCPJam', path: '.mcpjam/skills', universal: false },
|
|
43
|
+
{ id: 'mistral-vibe', name: 'Mistral Vibe', path: '.vibe/skills', universal: false },
|
|
44
|
+
{ id: 'mux', name: 'Mux', path: '.mux/skills', universal: false },
|
|
45
|
+
{ id: 'openhands', name: 'OpenHands', path: '.openhands/skills', universal: false },
|
|
46
|
+
{ id: 'pi', name: 'Pi', path: '.pi/skills', universal: false },
|
|
47
|
+
{ id: 'qoder', name: 'Qoder', path: '.qoder/skills', universal: false },
|
|
48
|
+
{ id: 'qwen-code', name: 'Qwen Code', path: '.qwen/skills', universal: false },
|
|
49
|
+
{ id: 'roo-code', name: 'Roo Code', path: '.roo/skills', universal: false },
|
|
50
|
+
{ id: 'trae', name: 'Trae', path: '.trae/skills', universal: false },
|
|
51
|
+
{ id: 'trae-cn', name: 'Trae CN', path: '.trae/skills', globalPath: '.trae-cn/skills', universal: false },
|
|
52
|
+
{ id: 'windsurf', name: 'Windsurf', path: '.windsurf/skills', universal: false },
|
|
53
|
+
{ id: 'zencoder', name: 'Zencoder', path: '.zencoder/skills', universal: false },
|
|
54
|
+
{ id: 'neovate', name: 'Neovate', path: '.neovate/skills', universal: false },
|
|
55
|
+
{ id: 'pochi', name: 'Pochi', path: '.pochi/skills', universal: false },
|
|
56
|
+
{ id: 'adal', name: 'AdaL', path: '.adal/skills', universal: false },
|
|
57
|
+
];
|
|
58
|
+
function getGlobalStoragePath() {
|
|
59
|
+
const platform = os_1.default.platform();
|
|
60
|
+
const homeDir = os_1.default.homedir();
|
|
61
|
+
switch (platform) {
|
|
62
|
+
case 'win32':
|
|
63
|
+
return path_1.default.join(process.env.LOCALAPPDATA || path_1.default.join(homeDir, 'AppData', 'Local'), 'skill4agent', 'skills');
|
|
64
|
+
case 'linux':
|
|
65
|
+
return path_1.default.join(process.env.XDG_DATA_HOME || path_1.default.join(homeDir, '.local', 'share'), 'skill4agent', 'skills');
|
|
66
|
+
case 'darwin':
|
|
67
|
+
default:
|
|
68
|
+
return path_1.default.join(homeDir, '.skill4agent', 'skills');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function getAgentPath(agentId, isGlobal) {
|
|
72
|
+
const allAgents = [...exports.UNIVERSAL_AGENTS, ...exports.OTHER_AGENTS];
|
|
73
|
+
const agent = allAgents.find(a => a.id === agentId);
|
|
74
|
+
if (!agent)
|
|
75
|
+
return null;
|
|
76
|
+
const effectivePath = isGlobal && agent.globalPath ? agent.globalPath : agent.path;
|
|
77
|
+
if (isGlobal) {
|
|
78
|
+
return path_1.default.join(os_1.default.homedir(), effectivePath);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
return path_1.default.resolve(process.cwd(), effectivePath);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function checkAgentExists(agentPath) {
|
|
85
|
+
const parentDir = path_1.default.dirname(agentPath);
|
|
86
|
+
return fs_1.default.existsSync(parentDir);
|
|
87
|
+
}
|
|
88
|
+
function getAllAgents() {
|
|
89
|
+
return [...exports.UNIVERSAL_AGENTS, ...exports.OTHER_AGENTS];
|
|
90
|
+
}
|
|
91
|
+
function getAgentDisplayPath(agentId, isGlobal) {
|
|
92
|
+
const allAgents = [...exports.UNIVERSAL_AGENTS, ...exports.OTHER_AGENTS];
|
|
93
|
+
const agent = allAgents.find(a => a.id === agentId);
|
|
94
|
+
if (!agent)
|
|
95
|
+
return 'unknown';
|
|
96
|
+
const effectivePath = isGlobal && agent.globalPath ? agent.globalPath : agent.path;
|
|
97
|
+
if (isGlobal) {
|
|
98
|
+
const homeDir = os_1.default.homedir();
|
|
99
|
+
const fullPath = path_1.default.join(homeDir, effectivePath);
|
|
100
|
+
return fullPath.replace(os_1.default.homedir(), '~');
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
return effectivePath;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYjE"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractZip = extractZip;
|
|
4
|
+
exports.formatSize = formatSize;
|
|
5
|
+
exports.getSkillDirFromZip = getSkillDirFromZip;
|
|
6
|
+
async function extractZip(zipPath, destDir) {
|
|
7
|
+
const AdmZip = require('adm-zip');
|
|
8
|
+
const zip = new AdmZip(zipPath);
|
|
9
|
+
zip.extractAllTo(destDir, true);
|
|
10
|
+
}
|
|
11
|
+
function formatSize(bytes) {
|
|
12
|
+
if (bytes < 1024)
|
|
13
|
+
return bytes + ' B';
|
|
14
|
+
if (bytes < 1024 * 1024)
|
|
15
|
+
return (bytes / 1024).toFixed(1) + ' KB';
|
|
16
|
+
return (bytes / (1024 * 1024)).toFixed(1) + ' MB';
|
|
17
|
+
}
|
|
18
|
+
function getSkillDirFromZip(zipPath) {
|
|
19
|
+
const AdmZip = require('adm-zip');
|
|
20
|
+
const zip = new AdmZip(zipPath);
|
|
21
|
+
const entries = zip.getEntries();
|
|
22
|
+
for (const entry of entries) {
|
|
23
|
+
const parts = entry.entryName.split('/');
|
|
24
|
+
if (parts.length > 1 && parts[0] !== '__MACOSX') {
|
|
25
|
+
return parts[0];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AAGA,gCAIC;AAED,gCAIC;AAED,gDAYC;AAxBM,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,OAAe;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,KAAK,GAAG,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAClE,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACpD,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAAe;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "skill4agent",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI tool for installing agent skills",
|
|
5
|
+
"main": "dist/main.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"skill4agent": "./bin/skill4agent.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"dev": "ts-node src/main.ts",
|
|
12
|
+
"link": "npm run build && npm link",
|
|
13
|
+
"test": "ts-node src/main.ts install vercel-labs/agent-skills frontend-design --skip-prompts"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"cli",
|
|
17
|
+
"agent",
|
|
18
|
+
"skill",
|
|
19
|
+
"ai"
|
|
20
|
+
],
|
|
21
|
+
"author": "",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"adm-zip": "^0.5.10",
|
|
25
|
+
"axios": "^1.6.0",
|
|
26
|
+
"chalk": "^4.1.2",
|
|
27
|
+
"commander": "^11.1.0",
|
|
28
|
+
"fs-extra": "^11.1.1",
|
|
29
|
+
"inquirer": "^9.2.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/adm-zip": "^0.5.2",
|
|
33
|
+
"@types/fs-extra": "^11.0.4",
|
|
34
|
+
"@types/inquirer": "^9.0.3",
|
|
35
|
+
"@types/node": "^20.10.0",
|
|
36
|
+
"typescript": "^5.3.0",
|
|
37
|
+
"ts-node": "^10.9.2"
|
|
38
|
+
}
|
|
39
|
+
}
|
package/src/api.ts
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
|
|
6
|
+
const API_BASE = 'https://skill4agent.com/api';
|
|
7
|
+
|
|
8
|
+
export interface SkillInfo {
|
|
9
|
+
skillName: string;
|
|
10
|
+
name: string;
|
|
11
|
+
nameCn: string;
|
|
12
|
+
description: string;
|
|
13
|
+
descriptionCn: string;
|
|
14
|
+
descriptionTranslated: string;
|
|
15
|
+
category: {
|
|
16
|
+
nameCn: string;
|
|
17
|
+
nameEn: string;
|
|
18
|
+
} | null;
|
|
19
|
+
tags: string;
|
|
20
|
+
tagsCn: string;
|
|
21
|
+
originalLanguage: string;
|
|
22
|
+
hasTranslation: boolean;
|
|
23
|
+
hasScript: boolean;
|
|
24
|
+
scriptCount: number;
|
|
25
|
+
scriptCheckResult: string;
|
|
26
|
+
hasDownloaded: boolean;
|
|
27
|
+
downloadStatus: string;
|
|
28
|
+
installs: number;
|
|
29
|
+
trending24h: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export async function downloadSkill(
|
|
33
|
+
topSource: string,
|
|
34
|
+
skillName: string,
|
|
35
|
+
type: 'original' | 'translated' = 'original'
|
|
36
|
+
): Promise<string> {
|
|
37
|
+
const url = `${API_BASE}/download?top_source=${encodeURIComponent(topSource)}&skill_name=${encodeURIComponent(skillName)}&type=${type}`;
|
|
38
|
+
|
|
39
|
+
const response = await axios.get(url, {
|
|
40
|
+
responseType: 'arraybuffer',
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'skill4agent-'));
|
|
44
|
+
const fileName = `${skillName}.zip`;
|
|
45
|
+
const filePath = path.join(tempDir, fileName);
|
|
46
|
+
|
|
47
|
+
fs.writeFileSync(filePath, Buffer.from(response.data));
|
|
48
|
+
|
|
49
|
+
return filePath;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export async function getSkillInfo(topSource: string, skillName: string): Promise<{ skill: SkillInfo | null; sourceExists: boolean }> {
|
|
53
|
+
try {
|
|
54
|
+
const url = `${API_BASE}/skills/info?top_source=${encodeURIComponent(topSource)}&skill_name=${encodeURIComponent(skillName)}`;
|
|
55
|
+
const response = await axios.get(url);
|
|
56
|
+
|
|
57
|
+
if (response.status === 404) {
|
|
58
|
+
return { skill: null, sourceExists: false };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const skill = response.data.data;
|
|
62
|
+
if (!skill) {
|
|
63
|
+
return { skill: null, sourceExists: true };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
skill: {
|
|
68
|
+
skillName: skill.skillName,
|
|
69
|
+
name: skill.name,
|
|
70
|
+
nameCn: skill.nameCn,
|
|
71
|
+
description: skill.description,
|
|
72
|
+
descriptionCn: skill.descriptionCn,
|
|
73
|
+
descriptionTranslated: skill.descriptionTranslated,
|
|
74
|
+
category: skill.category,
|
|
75
|
+
tags: skill.tags,
|
|
76
|
+
tagsCn: skill.tagsCn,
|
|
77
|
+
originalLanguage: skill.originalLanguage,
|
|
78
|
+
hasTranslation: skill.hasTranslation,
|
|
79
|
+
hasScript: skill.hasScript,
|
|
80
|
+
scriptCount: skill.scriptCount,
|
|
81
|
+
scriptCheckResult: skill.scriptCheckResult,
|
|
82
|
+
hasDownloaded: skill.hasDownloaded,
|
|
83
|
+
downloadStatus: skill.downloadStatus,
|
|
84
|
+
installs: skill.installs,
|
|
85
|
+
trending24h: skill.trending24h,
|
|
86
|
+
},
|
|
87
|
+
sourceExists: true,
|
|
88
|
+
};
|
|
89
|
+
} catch (error: any) {
|
|
90
|
+
if (error.response?.status === 404) {
|
|
91
|
+
return { skill: null, sourceExists: false };
|
|
92
|
+
}
|
|
93
|
+
return { skill: null, sourceExists: false };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function getDownloadUrl(topSource: string, skillName: string, type: 'original' | 'translated' = 'original'): string {
|
|
98
|
+
return `${API_BASE}/download?top_source=${encodeURIComponent(topSource)}&skill_name=${encodeURIComponent(skillName)}&type=${type}`;
|
|
99
|
+
}
|