tsheep-skills 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/NPM_PUBLISH.md +174 -0
- package/README.md +80 -0
- package/ab-experiment-cleanup/EXAMPLE.md +448 -0
- package/ab-experiment-cleanup/README.md +152 -0
- package/ab-experiment-cleanup/SKILL.md +635 -0
- package/check-npm-auth.js +66 -0
- package/cli.js +126 -0
- package/package.json +30 -0
- package/skills.json +17 -0
package/cli.js
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const { execSync } = require('child_process');
|
|
6
|
+
|
|
7
|
+
// ANSI color codes for terminal output
|
|
8
|
+
const colors = {
|
|
9
|
+
reset: '\x1b[0m',
|
|
10
|
+
green: '\x1b[32m',
|
|
11
|
+
blue: '\x1b[34m',
|
|
12
|
+
yellow: '\x1b[33m',
|
|
13
|
+
red: '\x1b[31m',
|
|
14
|
+
cyan: '\x1b[36m'
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
function log(message, color = 'reset') {
|
|
18
|
+
console.log(`${colors[color]}${message}${colors.reset}`);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function getClaudeSkillsDir() {
|
|
22
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE;
|
|
23
|
+
return path.join(homeDir, '.claude', 'skills');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function ensureSkillsDirExists() {
|
|
27
|
+
const skillsDir = getClaudeSkillsDir();
|
|
28
|
+
if (!fs.existsSync(skillsDir)) {
|
|
29
|
+
fs.mkdirSync(skillsDir, { recursive: true });
|
|
30
|
+
log(`โ Created skills directory: ${skillsDir}`, 'green');
|
|
31
|
+
}
|
|
32
|
+
return skillsDir;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function copyDirectory(src, dest) {
|
|
36
|
+
if (!fs.existsSync(dest)) {
|
|
37
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
41
|
+
|
|
42
|
+
for (const entry of entries) {
|
|
43
|
+
const srcPath = path.join(src, entry.name);
|
|
44
|
+
const destPath = path.join(dest, entry.name);
|
|
45
|
+
|
|
46
|
+
if (entry.isDirectory()) {
|
|
47
|
+
copyDirectory(srcPath, destPath);
|
|
48
|
+
} else {
|
|
49
|
+
fs.copyFileSync(srcPath, destPath);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function installSkill(skillName) {
|
|
55
|
+
const skillsDir = ensureSkillsDirExists();
|
|
56
|
+
const sourceDir = path.join(__dirname, skillName);
|
|
57
|
+
const destDir = path.join(skillsDir, skillName);
|
|
58
|
+
|
|
59
|
+
if (!fs.existsSync(sourceDir)) {
|
|
60
|
+
log(`โ Skill "${skillName}" not found in this package`, 'red');
|
|
61
|
+
log(`Available skills: ab-experiment-cleanup`, 'yellow');
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (fs.existsSync(destDir)) {
|
|
66
|
+
log(`โ Skill "${skillName}" already exists. Updating...`, 'yellow');
|
|
67
|
+
fs.rmSync(destDir, { recursive: true, force: true });
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
log(`Installing skill: ${skillName}...`, 'blue');
|
|
71
|
+
copyDirectory(sourceDir, destDir);
|
|
72
|
+
log(`โ Successfully installed "${skillName}" to ${destDir}`, 'green');
|
|
73
|
+
log(`\nYou can now use it with: /${skillName}`, 'cyan');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function listSkills() {
|
|
77
|
+
log('Available skills:', 'blue');
|
|
78
|
+
const skillsData = JSON.parse(fs.readFileSync(path.join(__dirname, 'skills.json'), 'utf8'));
|
|
79
|
+
skillsData.skills.forEach(skill => {
|
|
80
|
+
log(`\n ${skill.name}`, 'green');
|
|
81
|
+
log(` ${skill.description}`, 'reset');
|
|
82
|
+
log(` Install: npx tsheep-skills add ${skill.name}`, 'cyan');
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function main() {
|
|
87
|
+
const args = process.argv.slice(2);
|
|
88
|
+
const command = args[0];
|
|
89
|
+
const skillName = args[1];
|
|
90
|
+
|
|
91
|
+
log('\n๐ TSheep Skills Installer\n', 'cyan');
|
|
92
|
+
|
|
93
|
+
if (!command || command === 'help' || command === '-h' || command === '--help') {
|
|
94
|
+
log('Usage:', 'blue');
|
|
95
|
+
log(' npx tsheep-skills add <skill-name> Install a skill', 'reset');
|
|
96
|
+
log(' npx tsheep-skills list List available skills', 'reset');
|
|
97
|
+
log(' npx tsheep-skills help Show this help message', 'reset');
|
|
98
|
+
log('\nExample:', 'blue');
|
|
99
|
+
log(' npx tsheep-skills add ab-experiment-cleanup', 'cyan');
|
|
100
|
+
process.exit(0);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
switch (command) {
|
|
104
|
+
case 'add':
|
|
105
|
+
case 'install':
|
|
106
|
+
if (!skillName) {
|
|
107
|
+
log('โ Please specify a skill name', 'red');
|
|
108
|
+
log('Usage: npx tsheep-skills add <skill-name>', 'yellow');
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
installSkill(skillName);
|
|
112
|
+
break;
|
|
113
|
+
|
|
114
|
+
case 'list':
|
|
115
|
+
case 'ls':
|
|
116
|
+
listSkills();
|
|
117
|
+
break;
|
|
118
|
+
|
|
119
|
+
default:
|
|
120
|
+
log(`โ Unknown command: ${command}`, 'red');
|
|
121
|
+
log('Run "npx tsheep-skills help" for usage information', 'yellow');
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
main();
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tsheep-skills",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A collection of Claude Code agent skills",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"tsheep-skills": "cli.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"claude",
|
|
14
|
+
"claude-code",
|
|
15
|
+
"skills",
|
|
16
|
+
"agent",
|
|
17
|
+
"ab-testing",
|
|
18
|
+
"experiment"
|
|
19
|
+
],
|
|
20
|
+
"author": "tsheep",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/luo29/tsheep-skills.git"
|
|
25
|
+
},
|
|
26
|
+
"homepage": "https://github.com/luo29/tsheep-skills#readme",
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=14.0.0"
|
|
29
|
+
}
|
|
30
|
+
}
|
package/skills.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"skills": [
|
|
4
|
+
{
|
|
5
|
+
"name": "ab-experiment-cleanup",
|
|
6
|
+
"displayName": "A/B Experiment Cleanup",
|
|
7
|
+
"description": "ๆธ
็ๅทฒๆจๅ
จ็ A/B ๅฎ้ชไปฃ็ ๏ผ็ๆๅฝฑๅ้ขๅๆๅๅๆตๆฅๅ",
|
|
8
|
+
"description_en": "Clean up fully rolled-out A/B experiment code, generate impact analysis and regression test reports",
|
|
9
|
+
"path": "ab-experiment-cleanup",
|
|
10
|
+
"version": "1.0.0",
|
|
11
|
+
"author": "tsheep",
|
|
12
|
+
"tags": ["experiment", "cleanup", "ab-testing", "code-quality"],
|
|
13
|
+
"languages": ["zh-CN", "en"],
|
|
14
|
+
"installUrl": "https://github.com/luo29/tsheep-skills.git/ab-experiment-cleanup"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|