joyskills-cli 0.2.6 → 0.2.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.
- package/README.md +81 -195
- package/package.json +21 -12
- package/src/commands/install.js +616 -211
- package/src/commands/list.js +54 -25
- package/src/commands/manage.js +102 -0
- package/src/commands/read.js +61 -118
- package/src/commands/remove.js +28 -20
- package/src/commands/status.js +31 -41
- package/src/commands/sync.js +155 -244
- package/src/commands/team.js +267 -47
- package/src/commands/upgrade.js +311 -0
- package/src/index.js +10 -12
- package/src/local.js +2 -9
- package/LICENSE +0 -21
- package/spec/cli-spec.md +0 -167
- package/spec/lockfile-spec.md +0 -108
- package/spec/registry-spec.md +0 -117
package/README.md
CHANGED
|
@@ -1,54 +1,29 @@
|
|
|
1
|
-
# joySkills -
|
|
1
|
+
# joySkills - 新一代团队 Skill 治理平台
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 在协议层兼容 open skill / Claude Skills,在能力层扩展企业级治理能力
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/joyskills-cli)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
|
|
8
|
-
**🔗 Links:** [npm Package](https://www.npmjs.com/package/joyskills-cli) | [Git Repository](https://
|
|
8
|
+
**🔗 Links:** [npm Package](https://www.npmjs.com/package/joyskills-cli) | [Git Repository](https://coding.jd.com/rc-ai/joyskill)
|
|
9
9
|
|
|
10
|
-
## 💡
|
|
10
|
+
## 💡 为什么需要 joySkills?
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
在 AI 原生开发时代,**Skill**(技能)成为了比 function 更友好的能力抽象单元。然而当团队规模扩大,单纯的本地 skill 管理会遇到:
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- ✅ 100% 兼容 Claude Code / Cursor / Windsurf
|
|
14
|
+
- ❌ **版本混乱**:不同项目使用不同版本的 skill,难以统一升级
|
|
15
|
+
- ❌ **安全风险**:无法及时发现和处理已废弃或有风险的 skill 版本
|
|
16
|
+
- ❌ **缺乏治理**:谁在用什么 skill?如何审批新版本?
|
|
17
|
+
- ❌ **协作困难**:团队成员各自维护 skill,无法共享和复用
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
- ✅ **版本锁定**:joySkills.lock 确保团队版本统一
|
|
22
|
-
- ✅ **团队 Registry**:从 Git 仓库安装内部 skill
|
|
23
|
-
- ✅ **安全审计**:自动检测废弃和有风险的 skill
|
|
24
|
-
- ✅ **状态管理**:draft → review → approved → deprecated
|
|
19
|
+
joySkills 提供了一套**完整的团队级 Skill 治理方案**,同时保持与现有生态的 100% 兼容。
|
|
25
20
|
|
|
26
21
|
## ✨ 核心特性
|
|
27
22
|
|
|
28
|
-
### 📦
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# 安装内部 skill(需配置 Registry)
|
|
34
|
-
joySkills install team://your-team/rc-onboarding
|
|
35
|
-
|
|
36
|
-
# 统一同步
|
|
37
|
-
joySkills sync # 生成 AGENTS.md + joySkills.lock
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
**核心价值**:
|
|
41
|
-
- ✅ 公开 + 内部 skill 统一管理,一个命令搞定
|
|
42
|
-
- ✅ 版本锁定(joySkills.lock),团队环境一致
|
|
43
|
-
- ✅ 100% 兼容 OpenSkills,随时可回退
|
|
44
|
-
|
|
45
|
-
**路径设计**:
|
|
46
|
-
| 安装方式 | joySkills | OpenSkills |
|
|
47
|
-
|---------|-----------|------------|
|
|
48
|
-
| 项目级 | `.agent/skills` | `.agent/skills` (--universal) |
|
|
49
|
-
| 全局 | `~/.agent/skills` | `~/.claude/skills` (--global) |
|
|
50
|
-
|
|
51
|
-
**优先级**:项目级 > 全局,不同项目可用不同版本
|
|
23
|
+
### 📦 统一 Skill 源(Registry)
|
|
24
|
+
- 团队/组织级 Skill 仓库
|
|
25
|
+
- 基于 Git 的版本管理
|
|
26
|
+
- 支持私有部署和权限控制
|
|
52
27
|
|
|
53
28
|
### 🔒 版本锁定(joySkills.lock)
|
|
54
29
|
- 项目级版本锁定,确保环境一致
|
|
@@ -70,220 +45,131 @@ joySkills sync # 生成 AGENTS.md + joySkills.lock
|
|
|
70
45
|
- 安全风险预警
|
|
71
46
|
- 自动生成升级建议
|
|
72
47
|
|
|
73
|
-
###
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
# 扫描路径:.agent/skills, ~/.agent/skills, .claude/skills, ~/.claude/skills
|
|
78
|
-
# ✅ 生成 AGENTS.md(与 openskills sync 格式相同)
|
|
79
|
-
# ✅ 额外生成 joySkills.lock(版本锁定)
|
|
80
|
-
|
|
81
|
-
# read 命令(按优先级读取 skill)
|
|
82
|
-
joySkills read rc-onboarding
|
|
83
|
-
# ✅ 路径查找优先级与 openskills read 一致
|
|
84
|
-
# ✅ 输出格式完全相同
|
|
85
|
-
```
|
|
48
|
+
### 🤝 100% 兼容现有生态
|
|
49
|
+
- 兼容 Claude Code / Cursor / Windsurf / Aider
|
|
50
|
+
- 不改变 `skills/` 目录结构
|
|
51
|
+
- 不改变 `SKILL.md` 文件格式
|
|
86
52
|
|
|
87
53
|
## 🚀 快速开始
|
|
88
54
|
|
|
89
|
-
###
|
|
55
|
+
### 安装
|
|
56
|
+
|
|
57
|
+
joySkills 支持**全局安装**和**项目级安装**两种方式:
|
|
90
58
|
|
|
91
59
|
```bash
|
|
92
|
-
#
|
|
60
|
+
# 全局安装
|
|
93
61
|
npm install -g joyskills-cli
|
|
62
|
+
joySkills --version
|
|
94
63
|
|
|
95
|
-
#
|
|
96
|
-
|
|
97
|
-
joySkills
|
|
98
|
-
|
|
99
|
-
# 3. 生成 AGENTS.md
|
|
100
|
-
joySkills sync
|
|
101
|
-
|
|
102
|
-
# 4. 查看已安装
|
|
103
|
-
joySkills list
|
|
64
|
+
# 或:项目级安装
|
|
65
|
+
npm install joyskills-cli
|
|
66
|
+
npx joySkills --version
|
|
104
67
|
```
|
|
105
68
|
|
|
106
|
-
###
|
|
107
|
-
|
|
108
|
-
**痛点**:
|
|
109
|
-
- 😓 内部 skill 群里发 zip,手动下载 + 解压
|
|
110
|
-
- 😓 新人 onboarding,问“哪些 skill 必须装”
|
|
111
|
-
- 😓 skill 更新后,通知所有人重新下载
|
|
69
|
+
### 5 分钟上手
|
|
112
70
|
|
|
113
|
-
**解决方案**:
|
|
114
71
|
```bash
|
|
115
|
-
# 1.
|
|
116
|
-
|
|
117
|
-
mkdir rc-onboarding rc-commit-lint
|
|
118
|
-
# 将 SKILL.md 放入对应目录
|
|
119
|
-
git init && git add . && git commit -m "init"
|
|
120
|
-
git remote add origin https://git.yourcompany.com/team-skills.git
|
|
121
|
-
git push
|
|
122
|
-
|
|
123
|
-
# 2. 团队成员配置(一次)
|
|
124
|
-
cat > .joyskillrc << 'EOF'
|
|
125
|
-
{
|
|
126
|
-
"registries": [{
|
|
127
|
-
"id": "team://your-team",
|
|
128
|
-
"url": "https://git.yourcompany.com/team-skills.git",
|
|
129
|
-
"type": "git"
|
|
130
|
-
}]
|
|
131
|
-
}
|
|
132
|
-
EOF
|
|
133
|
-
|
|
134
|
-
# 3. 安装 skill(像 npm 一样)
|
|
135
|
-
joySkills install team://your-team/rc-onboarding
|
|
136
|
-
joySkills install team://your-team/rc-commit-lint
|
|
137
|
-
joySkills sync
|
|
138
|
-
|
|
139
|
-
# 4. 团队同步(自动化)
|
|
140
|
-
git add AGENTS.md joySkills.lock .joyskillrc
|
|
141
|
-
git commit -m "setup team skills"
|
|
142
|
-
git push
|
|
143
|
-
|
|
144
|
-
# 5. 新成员加入(1 分钟)
|
|
145
|
-
git clone <project-repo>
|
|
146
|
-
joySkills install # 自动安装所有锁定版本
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
**效果对比**:
|
|
150
|
-
| 场景 | 之前 | 现在 |
|
|
151
|
-
|------|------|------|
|
|
152
|
-
| 新人 onboarding | 群里找 8 个 zip,手动装(30分钟) | `joySkills install`(1分钟) |
|
|
153
|
-
| skill 更新 | 群发通知 + 手动更新(15分钟) | `git pull && joySkills install`(1分钟) |
|
|
154
|
-
| 版本不一致 | 频繁出现,难排查 | joySkills.lock 锁定,不会出现 |
|
|
155
|
-
|
|
156
|
-
### 场景 3:从 OpenSkills 迁移
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
# 已经用 openskills 安装了很多 skills
|
|
160
|
-
openskills install skill-a
|
|
161
|
-
openskills install skill-b
|
|
162
|
-
|
|
163
|
-
# 切换到 joySkills(无需重装)
|
|
164
|
-
joySkills sync
|
|
165
|
-
# ✅ 自动识别已有 skills
|
|
166
|
-
# ✅ 生成 joySkills.lock
|
|
167
|
-
# ✅ 后续用 joySkills install 安装新 skill
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
## 📋 完整命令参考
|
|
72
|
+
# 1. 进入你的项目目录
|
|
73
|
+
cd your-project
|
|
171
74
|
|
|
172
|
-
|
|
75
|
+
# 2. 安装一个 skill
|
|
76
|
+
joySkills install web-search
|
|
77
|
+
# 或使用 npx(如果是项目级安装)
|
|
78
|
+
npx joySkills install web-search
|
|
173
79
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
joySkills sync
|
|
179
|
-
# ✅ 扫描 .agent/skills, ~/.agent/skills, .claude/skills, ~/.claude/skills
|
|
180
|
-
# ✅ 生成 AGENTS.md(OpenSkills 兼容格式)
|
|
181
|
-
# ✅ 生成 joySkills.lock(版本锁定)
|
|
182
|
-
# ✅ 版本一致性检查
|
|
183
|
-
```
|
|
80
|
+
# 3. 查看已安装的 skills
|
|
81
|
+
joySkills list
|
|
184
82
|
|
|
185
|
-
|
|
186
|
-
|
|
83
|
+
# 4. 检查状态
|
|
84
|
+
joySkills status
|
|
187
85
|
|
|
188
|
-
|
|
189
|
-
joySkills
|
|
190
|
-
# ✅ 路径查找优先级与 openskills 一致
|
|
191
|
-
# ✅ 输出格式完全相同
|
|
86
|
+
# 5. 审计安全性
|
|
87
|
+
joySkills audit
|
|
192
88
|
```
|
|
193
89
|
|
|
194
|
-
|
|
90
|
+
完成!你的 Claude Code / Cursor 等编辑器会自动识别 `skills/` 目录中的技能。
|
|
195
91
|
|
|
196
|
-
|
|
197
|
-
安装 skill(公开 + 团队 + 本地)
|
|
92
|
+
## 📋 完整命令参考
|
|
198
93
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
joySkills install anthropics/skills/pdf
|
|
94
|
+
### `joySkills list`
|
|
95
|
+
列出可用的 skills
|
|
202
96
|
|
|
203
|
-
|
|
204
|
-
|
|
97
|
+
**选项:**
|
|
98
|
+
- `-a, --all-versions` - 显示所有版本
|
|
99
|
+
- `-c, --category <category>` - 按分类过滤
|
|
100
|
+
- `-s, --search <query>` - 搜索 skill 名称或描述
|
|
101
|
+
- `-i, --installed` - 只显示已安装的 skills
|
|
102
|
+
- `-l, --local` - 只显示本地 skills
|
|
103
|
+
- `-r, --registry <name>` - 显示指定 registry 的 skills
|
|
205
104
|
|
|
206
|
-
|
|
207
|
-
|
|
105
|
+
### `joySkills install <skill>`
|
|
106
|
+
安装一个 skill
|
|
208
107
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
108
|
+
```bash
|
|
109
|
+
# 安装最新版本
|
|
110
|
+
joySkills install web-search
|
|
212
111
|
|
|
213
|
-
|
|
214
|
-
|
|
112
|
+
# 安装指定版本
|
|
113
|
+
joySkills install web-search@1.0.0
|
|
215
114
|
|
|
216
|
-
|
|
217
|
-
joySkills
|
|
218
|
-
joySkills list --installed # 只显示已安装
|
|
219
|
-
joySkills list --search "web" # 搜索
|
|
115
|
+
# 从指定 registry 安装
|
|
116
|
+
joySkills install web-search --registry my-team
|
|
220
117
|
```
|
|
221
118
|
|
|
222
|
-
|
|
119
|
+
### `joySkills remove <skill>`
|
|
223
120
|
删除已安装的 skill
|
|
224
121
|
|
|
225
122
|
```bash
|
|
226
|
-
joySkills remove
|
|
123
|
+
joySkills remove web-search
|
|
227
124
|
```
|
|
228
125
|
|
|
229
|
-
|
|
126
|
+
### `joySkills team <subcommand>`
|
|
230
127
|
管理团队 registry
|
|
231
128
|
|
|
232
129
|
```bash
|
|
130
|
+
# 添加团队 registry
|
|
233
131
|
joySkills team add my-team /path/to/registry
|
|
132
|
+
|
|
133
|
+
# 列出所有 registries
|
|
234
134
|
joySkills team list
|
|
135
|
+
|
|
136
|
+
# 删除 registry
|
|
235
137
|
joySkills team remove my-team
|
|
236
138
|
```
|
|
237
139
|
|
|
238
|
-
|
|
140
|
+
### `joySkills status`
|
|
239
141
|
显示当前项目的 skills 状态
|
|
240
142
|
|
|
241
143
|
```bash
|
|
242
144
|
joySkills status
|
|
243
145
|
```
|
|
244
146
|
|
|
245
|
-
|
|
147
|
+
### `joySkills audit`
|
|
246
148
|
审计已安装 skills 的安全性和弃用状态
|
|
247
149
|
|
|
248
|
-
|
|
150
|
+
```bash
|
|
151
|
+
joySkills audit
|
|
152
|
+
```
|
|
249
153
|
|
|
250
|
-
|
|
154
|
+
## 📖 核心概念
|
|
251
155
|
|
|
252
|
-
|
|
156
|
+
### Skill Registry(技能注册表)
|
|
253
157
|
|
|
254
|
-
|
|
255
|
-
```
|
|
256
|
-
team-skills/ # Git 仓库
|
|
257
|
-
├── registry.yaml # 版本配置(可选)
|
|
258
|
-
├── rc-onboarding/
|
|
259
|
-
│ ├── SKILL.md # 必须
|
|
260
|
-
│ ├── scripts/ # 可选:脚本
|
|
261
|
-
│ └── templates/ # 可选:模板
|
|
262
|
-
└── rc-commit-lint/
|
|
263
|
-
└── SKILL.md
|
|
264
|
-
```
|
|
158
|
+
Registry 是团队统一管理的 Skill 仓库,通常是一个 Git 仓库 + `registry.yaml` 索引文件:
|
|
265
159
|
|
|
266
|
-
**registry.yaml 示例**(可选,用于版本管理):
|
|
267
160
|
```yaml
|
|
268
161
|
registryVersion: 1
|
|
269
162
|
registryId: team://your-team
|
|
270
163
|
skills:
|
|
271
|
-
- id:
|
|
272
|
-
name: "
|
|
273
|
-
visibility:
|
|
164
|
+
- id: web-search
|
|
165
|
+
name: "Web 搜索"
|
|
166
|
+
visibility: public
|
|
274
167
|
versions:
|
|
275
168
|
- version: 1.2.0
|
|
276
|
-
state: approved
|
|
169
|
+
state: approved
|
|
277
170
|
recommended: true
|
|
278
|
-
- version: 1.1.0
|
|
279
|
-
state: deprecated
|
|
280
171
|
```
|
|
281
172
|
|
|
282
|
-
**使用场景**:
|
|
283
|
-
- ✅ 内部业务 skill(如 rc-onboarding、rc-commit-lint)
|
|
284
|
-
- ✅ 公司级通用 skill(如 code-review、test-helper)
|
|
285
|
-
- ✅ 项目级定制 skill(如 project-specific-tools)
|
|
286
|
-
|
|
287
173
|
### joySkills.lock(锁文件)
|
|
288
174
|
|
|
289
175
|
项目级锁文件,记录实际使用的 skill 版本:
|
|
@@ -340,8 +226,8 @@ joySkills/
|
|
|
340
226
|
|
|
341
227
|
```bash
|
|
342
228
|
# 克隆仓库
|
|
343
|
-
git clone https://
|
|
344
|
-
cd
|
|
229
|
+
git clone https://coding.jd.com/rc-ai/joyskill.git
|
|
230
|
+
cd joyskill
|
|
345
231
|
|
|
346
232
|
# 安装依赖
|
|
347
233
|
npm install
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "joyskills-cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"description": "Team-level skill governance compatible with open skill / Claude Skills",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -10,9 +10,7 @@
|
|
|
10
10
|
"build": "echo 'No build needed for JavaScript version'",
|
|
11
11
|
"start": "node src/index.js",
|
|
12
12
|
"test": "jest",
|
|
13
|
-
"dev": "node src/index.js"
|
|
14
|
-
"prepublishOnly": "npm run check-secrets",
|
|
15
|
-
"check-secrets": "! grep -rE 'jd\\.com|@jd\\.com|coding\\.jd' src/ README.md package.json spec/ || (echo '❌ 发现敏感信息,禁止发布!' && exit 1)"
|
|
13
|
+
"dev": "node src/index.js"
|
|
16
14
|
},
|
|
17
15
|
"keywords": [
|
|
18
16
|
"claude",
|
|
@@ -28,24 +26,35 @@
|
|
|
28
26
|
],
|
|
29
27
|
"author": "joySkills Team",
|
|
30
28
|
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/joyskills/joySkills.git"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/joyskills/joySkills#readme",
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/joyskills/joySkills/issues"
|
|
36
|
+
},
|
|
31
37
|
"dependencies": {
|
|
38
|
+
"@inquirer/prompts": "^8.3.0",
|
|
39
|
+
"chalk": "^5.6.2",
|
|
32
40
|
"commander": "^11.1.0",
|
|
41
|
+
"simple-git": "^3.32.3",
|
|
33
42
|
"yaml": "^2.3.4",
|
|
34
43
|
"zod": "^3.22.4"
|
|
35
44
|
},
|
|
36
45
|
"devDependencies": {
|
|
37
|
-
"@types/node": "^20.10.5",
|
|
38
46
|
"@types/jest": "^29.5.11",
|
|
39
|
-
"
|
|
47
|
+
"@types/node": "^20.10.5",
|
|
40
48
|
"jest": "^29.7.0",
|
|
41
49
|
"ts-jest": "^29.1.1",
|
|
42
|
-
"ts-node": "^10.9.2"
|
|
50
|
+
"ts-node": "^10.9.2",
|
|
51
|
+
"typescript": "^5.3.3"
|
|
43
52
|
},
|
|
53
|
+
"type": "module",
|
|
44
54
|
"files": [
|
|
45
|
-
"src/"
|
|
46
|
-
"spec/",
|
|
47
|
-
"README.md",
|
|
48
|
-
"LICENSE"
|
|
55
|
+
"src/"
|
|
49
56
|
],
|
|
50
|
-
"
|
|
57
|
+
"engines": {
|
|
58
|
+
"node": ">=18.0.0"
|
|
59
|
+
}
|
|
51
60
|
}
|