sc-skill 1.0.5 → 1.0.7

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 (3) hide show
  1. package/README.md +29 -4
  2. package/dist/cli.js +67 -18
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # sc
1
+ # sczl
2
2
 
3
3
  团队技能同步工具 - 使用复制方式管理 Claude Code 技能
4
4
 
@@ -6,11 +6,20 @@
6
6
 
7
7
  - 🔄 从团队仓库同步技能到本地缓存
8
8
  - 🎯 交互式勾选启用/禁用技能
9
+ - ⚡ 一键开启或关闭全部缓存技能
9
10
  - 📋 通过复制方式启用/禁用技能
10
11
  - 📦 支持多平台 (Windows/macOS/Linux)
11
12
 
12
13
  ## 安装
13
14
 
15
+ ### 使用 npm 全局安装(推荐)
16
+
17
+ ```bash
18
+ npm install -g sc-skill
19
+ ```
20
+
21
+ ### 从源码安装
22
+
14
23
  ```bash
15
24
  pnpm install
16
25
  pnpm build
@@ -22,7 +31,7 @@ npm link
22
31
  ### 1. 同步技能到缓存
23
32
 
24
33
  ```bash
25
- sc sync
34
+ sczl sync
26
35
  ```
27
36
 
28
37
  从团队仓库 `https://codeup.aliyun.com/sczlcq/skills.git` 拉取最新技能到 `~/.sc/cache`
@@ -30,7 +39,7 @@ sc sync
30
39
  ### 2. 交互式管理技能
31
40
 
32
41
  ```bash
33
- sc toggle
42
+ sczl toggle
34
43
  ```
35
44
 
36
45
  使用空格键勾选/取消勾选技能,回车确认。选中的技能会直接复制到 `~/.claude/skills`
@@ -38,7 +47,23 @@ sc toggle
38
47
  ### 3. 查看技能状态
39
48
 
40
49
  ```bash
41
- sc list
50
+ sczl open
51
+ ```
52
+
53
+ 自动同步后,启用缓存中的全部技能
54
+
55
+ ### 4. 一键关闭全部技能
56
+
57
+ ```bash
58
+ sczl close
59
+ ```
60
+
61
+ 禁用缓存中的全部技能(仅影响已同步到缓存的技能,不会动到其他手动放入的本地技能)
62
+
63
+ ### 5. 查看技能状态
64
+
65
+ ```bash
66
+ sczl list
42
67
  ```
43
68
 
44
69
  显示所有缓存的技能及其启用状态
package/dist/cli.js CHANGED
@@ -7,7 +7,7 @@ import { DEFAULT_CONFIG, getConfigPath } from './config.js';
7
7
  import fs from 'fs-extra';
8
8
  const program = new Command();
9
9
  program
10
- .name('sc')
10
+ .name('sczl')
11
11
  .description('团队技能同步工具')
12
12
  .version('1.0.0');
13
13
  program
@@ -15,14 +15,8 @@ program
15
15
  .description('从团队仓库同步技能')
16
16
  .action(async () => {
17
17
  try {
18
- console.log('🔄 正在同步技能...');
19
- const config = await loadConfig();
20
- const git = new GitRepo();
21
- await git.clone(config.repo);
22
- console.log('✓ 已拉取最新技能到缓存');
23
- await saveLastSync();
24
- console.log('✅ 同步完成');
25
- console.log('\n💡 运行 sc toggle 来启用/禁用技能');
18
+ await syncSkills();
19
+ console.log('\n💡 运行 sczl toggle 来启用/禁用技能');
26
20
  }
27
21
  catch (error) {
28
22
  console.error('❌ 同步失败:', error);
@@ -34,14 +28,7 @@ program
34
28
  .description('交互式启用/禁用技能')
35
29
  .action(async () => {
36
30
  try {
37
- const manager = new SkillManager();
38
- const available = await manager.getAvailableSkills();
39
- const enabled = await manager.getEnabledSkills();
40
- const manageableEnabled = enabled.filter((skill) => available.includes(skill));
41
- if (available.length === 0) {
42
- console.log('❌ 缓存中没有技能,请先运行 sc sync');
43
- process.exit(1);
44
- }
31
+ const { manager, available, manageableEnabled } = await loadManageableSkills();
45
32
  const answers = await inquirer.prompt([
46
33
  {
47
34
  type: 'checkbox',
@@ -73,6 +60,44 @@ program
73
60
  process.exit(1);
74
61
  }
75
62
  });
63
+ program
64
+ .command('open')
65
+ .description('先同步,再启用缓存中的全部技能')
66
+ .action(async () => {
67
+ try {
68
+ await syncSkills();
69
+ const { manager, available, manageableEnabled } = await loadManageableSkills();
70
+ const toEnable = available.filter((skill) => !manageableEnabled.includes(skill));
71
+ if (toEnable.length === 0) {
72
+ console.log('✨ 所有缓存技能已启用');
73
+ return;
74
+ }
75
+ await manager.enableSkills(toEnable);
76
+ console.log(`✅ 已启用全部技能,共 ${available.length} 个`);
77
+ }
78
+ catch (error) {
79
+ console.error('❌ 操作失败:', error);
80
+ process.exit(1);
81
+ }
82
+ });
83
+ program
84
+ .command('close')
85
+ .description('禁用缓存中的全部技能')
86
+ .action(async () => {
87
+ try {
88
+ const { manager, manageableEnabled } = await loadManageableSkills();
89
+ if (manageableEnabled.length === 0) {
90
+ console.log('✨ 所有缓存技能已禁用');
91
+ return;
92
+ }
93
+ await manager.disableSkills(manageableEnabled);
94
+ console.log(`✅ 已禁用全部技能,共 ${manageableEnabled.length} 个`);
95
+ }
96
+ catch (error) {
97
+ console.error('❌ 操作失败:', error);
98
+ process.exit(1);
99
+ }
100
+ });
76
101
  program
77
102
  .command('list')
78
103
  .description('列出技能状态')
@@ -81,7 +106,7 @@ program
81
106
  const available = await manager.getAvailableSkills();
82
107
  const enabled = await manager.getEnabledSkills();
83
108
  if (available.length === 0) {
84
- console.log('缓存中没有技能,请先运行 sc sync');
109
+ console.log('缓存中没有技能,请先运行 sczl sync');
85
110
  return;
86
111
  }
87
112
  console.log(`\n📦 缓存中的技能 (${available.length}):`);
@@ -105,3 +130,27 @@ async function saveLastSync() {
105
130
  config.lastSync = new Date().toISOString();
106
131
  await fs.writeJson(configPath, config, { spaces: 2 });
107
132
  }
133
+ async function syncSkills() {
134
+ console.log('🔄 正在同步技能...');
135
+ const config = await loadConfig();
136
+ const git = new GitRepo();
137
+ await git.clone(config.repo);
138
+ console.log('✓ 已拉取最新技能到缓存');
139
+ await saveLastSync();
140
+ console.log('✅ 同步完成');
141
+ }
142
+ async function loadManageableSkills() {
143
+ const manager = new SkillManager();
144
+ const available = await manager.getAvailableSkills();
145
+ if (available.length === 0) {
146
+ console.log('❌ 缓存中没有技能,请先运行 sczl sync');
147
+ process.exit(1);
148
+ }
149
+ const enabled = await manager.getEnabledSkills();
150
+ const manageableEnabled = enabled.filter((skill) => available.includes(skill));
151
+ return {
152
+ manager,
153
+ available,
154
+ manageableEnabled,
155
+ };
156
+ }
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "sc-skill",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "团队技能同步工具",
5
5
  "type": "module",
6
6
  "main": "./dist/cli.js",
7
7
  "bin": {
8
- "sc": "./dist/cli.js"
8
+ "sczl": "./dist/cli.js"
9
9
  },
10
10
  "files": [
11
11
  "dist",