@channeulparks/woorido-skills 1.0.0 → 1.1.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.
Files changed (2) hide show
  1. package/bin/cli.js +70 -20
  2. package/package.json +2 -2
package/bin/cli.js CHANGED
@@ -4,9 +4,9 @@
4
4
  * WooriDo Skills CLI
5
5
  *
6
6
  * Usage:
7
- * npx woorido-skills install
8
- * npx woorido-skills install --dry-run
9
- * npx woorido-skills list
7
+ * npx @channeulparks/woorido-skills install
8
+ * npx @channeulparks/woorido-skills uninstall
9
+ * npx @channeulparks/woorido-skills list
10
10
  */
11
11
 
12
12
  const fs = require('fs');
@@ -29,14 +29,14 @@ const colors = {
29
29
  */
30
30
  function copyRecursive(src, dest, dryRun = false) {
31
31
  const files = [];
32
-
32
+
33
33
  function walk(srcPath, destPath) {
34
34
  const entries = fs.readdirSync(srcPath, { withFileTypes: true });
35
-
35
+
36
36
  for (const entry of entries) {
37
37
  const srcFile = path.join(srcPath, entry.name);
38
38
  const destFile = path.join(destPath, entry.name);
39
-
39
+
40
40
  if (entry.isDirectory()) {
41
41
  if (!dryRun && !fs.existsSync(destFile)) {
42
42
  fs.mkdirSync(destFile, { recursive: true });
@@ -48,7 +48,7 @@ function copyRecursive(src, dest, dryRun = false) {
48
48
  dest: destFile,
49
49
  relativeDest: path.relative(TARGET_DIR, destFile),
50
50
  });
51
-
51
+
52
52
  if (!dryRun) {
53
53
  const destDir = path.dirname(destFile);
54
54
  if (!fs.existsSync(destDir)) {
@@ -59,7 +59,7 @@ function copyRecursive(src, dest, dryRun = false) {
59
59
  }
60
60
  }
61
61
  }
62
-
62
+
63
63
  walk(src, dest);
64
64
  return files;
65
65
  }
@@ -69,25 +69,25 @@ function copyRecursive(src, dest, dryRun = false) {
69
69
  */
70
70
  function install(options = {}) {
71
71
  const { dryRun = false } = options;
72
-
72
+
73
73
  console.log();
74
74
  console.log(colors.blue('🚀 WooriDo Skills Installer'));
75
75
  console.log();
76
-
76
+
77
77
  if (dryRun) {
78
78
  console.log(colors.yellow('📋 Dry run mode - no files will be created'));
79
79
  console.log();
80
80
  }
81
-
81
+
82
82
  const files = copyRecursive(TEMPLATES_DIR, TARGET_DIR, dryRun);
83
-
83
+
84
84
  console.log(colors.dim('Installing files:'));
85
85
  console.log();
86
-
86
+
87
87
  for (const file of files) {
88
88
  console.log(` ${colors.green('✔')} ${file.relativeDest}`);
89
89
  }
90
-
90
+
91
91
  console.log();
92
92
  console.log(colors.green(`✨ Done! ${files.length} files installed.`));
93
93
  console.log();
@@ -101,6 +101,49 @@ function install(options = {}) {
101
101
  console.log();
102
102
  }
103
103
 
104
+ /**
105
+ * Uninstall command
106
+ */
107
+ function uninstall(options = {}) {
108
+ const { dryRun = false } = options;
109
+
110
+ console.log();
111
+ console.log(colors.blue('🗑️ WooriDo Skills Uninstaller'));
112
+ console.log();
113
+
114
+ if (dryRun) {
115
+ console.log(colors.yellow('📋 Dry run mode - no files will be deleted'));
116
+ console.log();
117
+ }
118
+
119
+ const pathsToDelete = [
120
+ path.join(TARGET_DIR, '.claude', 'skills', 'woorido'),
121
+ path.join(TARGET_DIR, '.agent', 'workflows'),
122
+ ];
123
+
124
+ let deletedCount = 0;
125
+
126
+ for (const targetPath of pathsToDelete) {
127
+ if (fs.existsSync(targetPath)) {
128
+ console.log(` ${colors.red('✖')} Removing ${path.relative(TARGET_DIR, targetPath)}`);
129
+ if (!dryRun) {
130
+ fs.rmSync(targetPath, { recursive: true, force: true });
131
+ }
132
+ deletedCount++;
133
+ } else {
134
+ console.log(` ${colors.dim('○')} ${path.relative(TARGET_DIR, targetPath)} (not found)`);
135
+ }
136
+ }
137
+
138
+ console.log();
139
+ if (deletedCount > 0) {
140
+ console.log(colors.green(`✨ Done! Removed ${deletedCount} directories.`));
141
+ } else {
142
+ console.log(colors.yellow('No WooriDo skills found to uninstall.'));
143
+ }
144
+ console.log();
145
+ }
146
+
104
147
  /**
105
148
  * List command
106
149
  */
@@ -108,11 +151,11 @@ function list() {
108
151
  console.log();
109
152
  console.log(colors.blue('📦 WooriDo Skills'));
110
153
  console.log();
111
-
154
+
112
155
  console.log(colors.dim('Unified SKILL.md:'));
113
156
  console.log(' .claude/skills/woorido/SKILL.md');
114
157
  console.log();
115
-
158
+
116
159
  console.log(colors.dim('Antigravity Workflows:'));
117
160
  const workflows = [
118
161
  '/component - Create WDS React component',
@@ -124,7 +167,7 @@ function list() {
124
167
  '/mybatis - Create MyBatis mapper',
125
168
  '/django-view - Create Django DRF viewset',
126
169
  ];
127
-
170
+
128
171
  for (const wf of workflows) {
129
172
  console.log(` ${wf}`);
130
173
  }
@@ -140,13 +183,17 @@ function help() {
140
183
  console.log();
141
184
  console.log('Commands:');
142
185
  console.log(' install Install skills to current directory');
143
- console.log(' install --dry-run Show files without installing');
186
+ console.log(' uninstall Remove installed skills');
144
187
  console.log(' list List available skills and workflows');
145
188
  console.log(' help Show this help message');
146
189
  console.log();
190
+ console.log('Options:');
191
+ console.log(' --dry-run Show what would happen without making changes');
192
+ console.log();
147
193
  console.log('Examples:');
148
- console.log(' npx woorido-skills install');
149
- console.log(' npx woorido-skills list');
194
+ console.log(' npx @channeulparks/woorido-skills install');
195
+ console.log(' npx @channeulparks/woorido-skills uninstall');
196
+ console.log(' npx @channeulparks/woorido-skills list');
150
197
  console.log();
151
198
  }
152
199
 
@@ -164,6 +211,9 @@ switch (command) {
164
211
  case 'install':
165
212
  install(options);
166
213
  break;
214
+ case 'uninstall':
215
+ uninstall(options);
216
+ break;
167
217
  case 'list':
168
218
  list();
169
219
  break;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@channeulparks/woorido-skills",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "WooriDo AI Coding Rules for Claude, Gemini, Antigravity and other AI coding assistants",
5
5
  "main": "bin/cli.js",
6
6
  "bin": {
@@ -32,4 +32,4 @@
32
32
  "type": "git",
33
33
  "url": "https://github.com/ParkChanNul/woorido-skills"
34
34
  }
35
- }
35
+ }