joyskills-cli 0.1.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 joySkills Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,256 @@
1
+ # joySkills - 新一代团队 Skill 治理平台
2
+
3
+ > 在协议层兼容 open skill / Claude Skills,在能力层扩展企业级治理能力
4
+
5
+ [![npm version](https://badge.fury.io/js/joyskills-cli.svg)](https://www.npmjs.com/package/joyskills-cli)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ **🔗 Links:** [npm Package](https://www.npmjs.com/package/joyskills-cli) | [Git Repository](https://github.com/your-org/joyskills-cli)
9
+
10
+ ## 💡 为什么需要 joySkills?
11
+
12
+ 在 AI 原生开发时代,**Skill**(技能)成为了比 function 更友好的能力抽象单元。然而当团队规模扩大,单纯的本地 skill 管理会遇到:
13
+
14
+ - ❌ **版本混乱**:不同项目使用不同版本的 skill,难以统一升级
15
+ - ❌ **安全风险**:无法及时发现和处理已废弃或有风险的 skill 版本
16
+ - ❌ **缺乏治理**:谁在用什么 skill?如何审批新版本?
17
+ - ❌ **协作困难**:团队成员各自维护 skill,无法共享和复用
18
+
19
+ joySkills 提供了一套**完整的团队级 Skill 治理方案**,同时保持与现有生态的 100% 兼容。
20
+
21
+ ## ✨ 核心特性
22
+
23
+ ### 📦 统一 Skill 源(Registry)
24
+ - 团队/组织级 Skill 仓库
25
+ - 基于 Git 的版本管理
26
+ - 支持私有部署和权限控制
27
+
28
+ ### 🔒 版本锁定(joySkills.lock)
29
+ - 项目级版本锁定,确保环境一致
30
+ - 自动记录安装历史
31
+ - 支持 semver 版本策略
32
+
33
+ ### ✅ 发布审批流程
34
+ - `draft` → `pending_review` → `approved` → `deprecated` → `archived`
35
+ - 完整的状态机管理
36
+ - CI/CD 友好
37
+
38
+ ### 🔐 权限与可见性
39
+ - `public` / `restricted` / `internal` 三级可见性
40
+ - 基于角色的访问控制(RBAC)
41
+ - 与 Git 权限无缝集成
42
+
43
+ ### 📊 使用追踪与审计
44
+ - 实时监控 skill 使用情况
45
+ - 安全风险预警
46
+ - 自动生成升级建议
47
+
48
+ ### 🤝 100% 兼容现有生态
49
+ - 兼容 Claude Code / Cursor / Windsurf / Aider
50
+ - 不改变 `skills/` 目录结构
51
+ - 不改变 `SKILL.md` 文件格式
52
+
53
+ ## 🚀 快速开始
54
+
55
+ ### 安装
56
+
57
+ joySkills 支持**全局安装**和**项目级安装**两种方式:
58
+
59
+ ```bash
60
+ # 全局安装
61
+ npm install -g joyskills-cli
62
+ joySkills --version
63
+
64
+ # 或:项目级安装
65
+ npm install joyskills-cli
66
+ npx joySkills --version
67
+ ```
68
+
69
+ ### 5 分钟上手
70
+
71
+ ```bash
72
+ # 1. 进入你的项目目录
73
+ cd your-project
74
+
75
+ # 2. 安装一个 skill
76
+ joySkills install web-search
77
+ # 或使用 npx(如果是项目级安装)
78
+ npx joySkills install web-search
79
+
80
+ # 3. 查看已安装的 skills
81
+ joySkills list
82
+
83
+ # 4. 检查状态
84
+ joySkills status
85
+
86
+ # 5. 审计安全性
87
+ joySkills audit
88
+ ```
89
+
90
+ 完成!你的 Claude Code / Cursor 等编辑器会自动识别 `skills/` 目录中的技能。
91
+
92
+ ## 📋 完整命令参考
93
+
94
+ ### `joySkills list`
95
+ 列出可用的 skills
96
+
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
104
+
105
+ ### `joySkills install <skill>`
106
+ 安装一个 skill
107
+
108
+ ```bash
109
+ # 安装最新版本
110
+ joySkills install web-search
111
+
112
+ # 安装指定版本
113
+ joySkills install web-search@1.0.0
114
+
115
+ # 从指定 registry 安装
116
+ joySkills install web-search --registry my-team
117
+ ```
118
+
119
+ ### `joySkills remove <skill>`
120
+ 删除已安装的 skill
121
+
122
+ ```bash
123
+ joySkills remove web-search
124
+ ```
125
+
126
+ ### `joySkills team <subcommand>`
127
+ 管理团队 registry
128
+
129
+ ```bash
130
+ # 添加团队 registry
131
+ joySkills team add my-team /path/to/registry
132
+
133
+ # 列出所有 registries
134
+ joySkills team list
135
+
136
+ # 删除 registry
137
+ joySkills team remove my-team
138
+ ```
139
+
140
+ ### `joySkills status`
141
+ 显示当前项目的 skills 状态
142
+
143
+ ```bash
144
+ joySkills status
145
+ ```
146
+
147
+ ### `joySkills audit`
148
+ 审计已安装 skills 的安全性和弃用状态
149
+
150
+ ```bash
151
+ joySkills audit
152
+ ```
153
+
154
+ ## 📖 核心概念
155
+
156
+ ### Skill Registry(技能注册表)
157
+
158
+ Registry 是团队统一管理的 Skill 仓库,通常是一个 Git 仓库 + `registry.yaml` 索引文件:
159
+
160
+ ```yaml
161
+ registryVersion: 1
162
+ registryId: team://your-team
163
+ skills:
164
+ - id: web-search
165
+ name: "Web 搜索"
166
+ visibility: public
167
+ versions:
168
+ - version: 1.2.0
169
+ state: approved
170
+ recommended: true
171
+ ```
172
+
173
+ ### joySkills.lock(锁文件)
174
+
175
+ 项目级锁文件,记录实际使用的 skill 版本:
176
+
177
+ ```yaml
178
+ lockVersion: 1
179
+ projectId: "your-project"
180
+ skills:
181
+ web-search:
182
+ version: 1.2.0
183
+ registry: team://your-team
184
+ installedAt: 2026-02-02T10:00:00Z
185
+ ```
186
+
187
+ ### 版本状态机
188
+
189
+ ```
190
+ draft → pending_review → approved → deprecated → archived
191
+ ↓ ↓ ↓ ↓ ↓
192
+ 开发中 待审核 可用 不推荐 归档
193
+ ```
194
+
195
+ ## 🏗️ 项目结构
196
+
197
+ ```
198
+ joySkills/
199
+ ├── src/
200
+ │ ├── index.js # CLI 入口点
201
+ │ ├── types.js # 类型定义
202
+ │ ├── registry.js # Registry 管理
203
+ │ ├── lockfile.js # 锁文件操作
204
+ │ ├── local.js # 本地 skill 管理
205
+ │ └── commands/ # CLI 命令
206
+ │ ├── list.js # 列出 skills
207
+ │ ├── install.js # 安装 skill
208
+ │ ├── remove.js # 删除 skill
209
+ │ ├── team.js # Registry 管理
210
+ │ ├── status.js # 状态检查
211
+ │ └── audit.js # 安全审计
212
+ ├── spec/ # 规范文档
213
+ │ ├── cli-spec.md # CLI 规范
214
+ │ ├── registry-spec.md # Registry 规范
215
+ │ └── lockfile-spec.md # 锁文件规范
216
+ ├── test/ # 测试文件
217
+ ├── .joyskill/ # 示例 registry
218
+ ├── package.json
219
+ ├── INSTALL.md
220
+ └── README.md
221
+ ```
222
+
223
+ ## 🤝 贡献指南
224
+
225
+ ### 开发环境搭建
226
+
227
+ ```bash
228
+ # 克隆仓库
229
+ git clone https://github.com/your-org/joyskills-cli.git
230
+ cd joyskills-cli
231
+
232
+ # 安装依赖
233
+ npm install
234
+
235
+ # 本地开发链接
236
+ npm link
237
+
238
+ # 测试命令
239
+ joySkills --version
240
+ joySkills list
241
+ ```
242
+
243
+ ### 运行测试
244
+
245
+ ```bash
246
+ # 运行 registry 测试
247
+ node test/test-registry.js
248
+
249
+ # 测试 CLI 命令
250
+ joySkills list --search "test"
251
+ joySkills list --category "utility"
252
+ ```
253
+
254
+ ## 📝 License
255
+
256
+ MIT © joySkills Team
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "joyskills-cli",
3
+ "version": "0.1.1",
4
+ "description": "Team-level skill governance compatible with open skill / Claude Skills",
5
+ "main": "src/index.js",
6
+ "bin": {
7
+ "joySkills": "src/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "echo 'No build needed for JavaScript version'",
11
+ "start": "node src/index.js",
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)"
16
+ },
17
+ "keywords": [
18
+ "claude",
19
+ "skills",
20
+ "agent",
21
+ "governance",
22
+ "team",
23
+ "registry",
24
+ "skill-management",
25
+ "openskills",
26
+ "claude-code",
27
+ "ai-skills"
28
+ ],
29
+ "author": "joySkills Team",
30
+ "license": "MIT",
31
+ "dependencies": {
32
+ "commander": "^11.1.0",
33
+ "yaml": "^2.3.4",
34
+ "zod": "^3.22.4"
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "^20.10.5",
38
+ "@types/jest": "^29.5.11",
39
+ "typescript": "^5.3.3",
40
+ "jest": "^29.7.0",
41
+ "ts-jest": "^29.1.1",
42
+ "ts-node": "^10.9.2"
43
+ },
44
+ "files": [
45
+ "src/",
46
+ "spec/",
47
+ "README.md",
48
+ "LICENSE"
49
+ ],
50
+ "type": "module"
51
+ }
@@ -0,0 +1,167 @@
1
+ ## joySkills CLI 规范草案
2
+
3
+ 本规范定义 joySkills 命令行接口(CLI)的主要命令及其语义,重点说明:
4
+
5
+ - 与 openskill 兼容的命令及行为。
6
+ - joySkills 新增的团队治理相关命令。
7
+
8
+ 实现可以使用任意技术栈,但应遵守本规范中定义的输入/输出语义与副作用约束。
9
+
10
+ ### 1. 命令分类概览
11
+
12
+ 1. **基础管理命令(兼容 openskill)**:
13
+ - `joySkills list`
14
+ - `joySkills install`
15
+ - `joySkills remove`
16
+ - `joySkills update` / `joySkills upgrade`
17
+ - `joySkills read`
18
+
19
+ 2. **团队 / Registry 管理命令(joySkills 扩展)**:
20
+ - `joySkills team add`
21
+ - `joySkills team sync`
22
+ - `joySkills team use`
23
+
24
+ 3. **版本与锁定相关命令(joySkills 扩展)**:
25
+ - `joySkills status`
26
+ - `joySkills audit`
27
+
28
+ 4. **发布与审批命令(joySkills 扩展)**:
29
+ - `joySkills publish`
30
+ - `joySkills approve`
31
+ - `joySkills deprecate`
32
+
33
+ ### 2. 基础管理命令(兼容 openskill)
34
+
35
+ #### 2.1 `joySkills list`
36
+
37
+ - **用途**:列出当前 workspace 可用的 Skills。
38
+ - **行为**:
39
+ - 聚合本地 `skills/` 目录和绑定 Registry 中的可用 Skill 信息。
40
+ - 默认仅展示每个 Skill 的名称、描述、当前推荐版本等。
41
+ - 典型选项:
42
+ - `--all-versions`:展示每个 Skill 的全部版本及状态。
43
+ - `--registry <name>`:仅查看指定 Registry 的 Skill 列表。
44
+
45
+ #### 2.2 `joySkills install <skill>[@version]`
46
+
47
+ - **用途**:安装某个 Skill 到当前项目的 `skills/` 目录。
48
+ - **行为**:
49
+ - 未指定版本:
50
+ - 从当前绑定的 Registry 中选择该 Skill 的“推荐版本”(`recommended == true` 且 `state == approved`)。
51
+ - 指定版本:
52
+ - 尝试从 Registry 中查找该版本,默认要求 `state == approved`。
53
+ - 安装成功后:
54
+ - 在 `skills/<name>/` 下写入具体文件;
55
+ - 更新 `joySkills.lock` 中对应条目。
56
+
57
+ #### 2.3 `joySkills remove <skill>`
58
+
59
+ - **用途**:从当前项目移除一个 Skill。
60
+ - **行为**:
61
+ - 删除 `skills/<name>/` 目录(或标记为已移除,具体细节由实现决定)。
62
+ - 更新 `joySkills.lock`,移除或标记该 Skill。
63
+
64
+ #### 2.4 `joySkills update` / `joySkills upgrade`
65
+
66
+ - **用途**:升级一个或多个 Skill 的版本。
67
+ - **行为**:
68
+ - 不带参数时:
69
+ - 根据团队策略检查所有已安装 Skills 是否有可用升级版本。
70
+ - 可以提示用户按交互方式选择要升级的 Targets。
71
+ - 指定 Skill 时:
72
+ - 根据策略(如仅 minor/patch)选择目标版本并执行安装,更新 lock。
73
+
74
+ #### 2.5 `joySkills read <skill>`
75
+
76
+ - **用途**:查看某个 Skill 的元信息与文档(例如 SKILL.md 内容)。
77
+ - **行为**:
78
+ - 从本地 `skills/` 目录或 Registry 中读取相关信息。
79
+ - 输出可读格式,便于在终端中快速了解 Skill 能力。
80
+
81
+ ### 3. 团队 / Registry 管理命令(joySkills 扩展)
82
+
83
+ #### 3.1 `joySkills team add <name> <git-url>`
84
+
85
+ - **用途**:在本地注册一个团队 Registry。
86
+ - **行为**:
87
+ - 将 `<name> -> <git-url>` 记录到 joySkills 的本地配置中。
88
+ - 首次执行时尝试 clone 对应仓库,并解析其中的 `registry.yaml`。
89
+
90
+ #### 3.2 `joySkills team sync [<name>]`
91
+
92
+ - **用途**:同步指定或全部已注册 Registry。
93
+ - **行为**:
94
+ - 执行 `git fetch/pull` 更新本地缓存。
95
+ - 重新解析 `registry.yaml`,更新本地索引。
96
+
97
+ #### 3.3 `joySkills team use <name>`
98
+
99
+ - **用途**:为当前 workspace 选择默认使用的团队 Registry。
100
+ - **行为**:
101
+ - 将所选 Registry ID 写入当前 workspace 配置或 `joySkills.lock` 的 `registryBindings` 中。
102
+ - 后续 `list/install/upgrade` 等命令将默认使用该 Registry。
103
+
104
+ ### 4. 版本与锁定相关命令
105
+
106
+ #### 4.1 `joySkills status`
107
+
108
+ - **用途**:查看当前项目所有 Skills 的版本状态。
109
+ - **行为**:
110
+ - 读取 `joySkills.lock` 与 Registry 索引,输出:
111
+ - Skill 名称。
112
+ - 当前版本号。
113
+ - 版本状态(approved/deprecated 等)。
114
+ - 是否存在可升级版本。
115
+
116
+ #### 4.2 `joySkills audit`
117
+
118
+ - **用途**:审计当前项目是否使用了已废弃或存在风险的 Skill 版本。
119
+ - **行为**:
120
+ - 对比 `joySkills.lock` 中版本与 Registry 索引中的状态。
121
+ - 输出:
122
+ - 所有使用 `deprecated` / 标记安全风险版本的 Skill。
123
+ - 推荐的升级目标版本(如有)。
124
+
125
+ ### 5. 发布与审批命令
126
+
127
+ #### 5.1 `joySkills publish <skill>@<version> --registry <name>`
128
+
129
+ - **用途**:将某个 Skill 版本发布到指定 Registry。
130
+ - **行为**(典型集成方式):
131
+ - 通常由 CI 在合并代码后调用:
132
+ - 校验代码仓库中存在对应的 `skills/<name>/` 与 SKILL.md。
133
+ - 更新 Registry 仓库中的 `registry.yaml`,新增该版本条目(初始 `state` 可以是 `pending_review` 或 `approved`)。
134
+
135
+ #### 5.2 `joySkills approve <skill>@<version> --registry <name>`
136
+
137
+ - **用途**:将某个版本标记为 `approved`,允许团队使用。
138
+ - **行为**:
139
+ - 校验调用者是否具备 `maintainer` 或以上权限。
140
+ - 更新 Registry 索引中对应版本的 `state` 与 `approvedBy/approvedAt`。
141
+
142
+ #### 5.3 `joySkills deprecate <skill>@<version> --registry <name>`
143
+
144
+ - **用途**:将某个版本标记为 `deprecated`。
145
+ - **行为**:
146
+ - 更新 Registry 索引中 `state = deprecated`。
147
+ - 可选:增加推荐替代版本信息,供 `audit` 与升级逻辑使用。
148
+
149
+ ### 6. 与 openskill 的兼容策略
150
+
151
+ - **命令级兼容**:
152
+ - joySkills 的基础管理命令(list/install/remove/update/read)应与 openskill 在语义上保持对齐,确保现有使用习惯不被破坏。
153
+
154
+ - **行为级兼容**:
155
+ - 对于仅使用本地 `skills/` 目录的场景:
156
+ - joySkills 可以退化为一个简单的本地管理工具,不依赖 Registry / lockfile。
157
+ - 对于已有 openskill 的项目:
158
+ - 只要 joySkills 保证生成的 `skills/` 目录与 openskill 一致,编辑器侧(Claude Code 等)就不需要做任何改动。
159
+
160
+ ### 7. 未来扩展
161
+
162
+ - 本规范聚焦 v1 所需的最小命令集合。
163
+ - 后续如需扩展(例如:
164
+ - 更多团队级配置命令;
165
+ - 与企业 IAM/审计系统对接;
166
+ - 交互式 TUI / Web UI;
167
+ ),应在保持现有命令语义稳定的前提下新增子命令或选项。
@@ -0,0 +1,108 @@
1
+ ## joySkills 锁文件(joySkills.lock)规范草案
2
+
3
+ 本规范定义 joySkills 在项目根目录使用的锁文件 `joySkills.lock`,用于记录当前项目实际使用的 Skills 版本与来源,以支持版本锁定、升级策略和审计能力。
4
+
5
+ ### 1. 概念与目标
6
+
7
+ - **joySkills.lock 是什么?**
8
+ - 一个声明式文件,描述“当前项目在实际使用哪些 `skill@version`、这些版本来自哪个 Registry、何时安装的”。
9
+ - 类似于包管理器中的 lockfile(如 `package-lock.json` / `yarn.lock`),但对象是 AI Skills。
10
+
11
+ - **设计目标**:
12
+ - 确保团队内不同成员 / 不同环境在同一项目中使用一致的 Skill 版本。
13
+ - 为审计工具提供稳定的数据源,用于构建 who-uses-what 视图。
14
+ - 在不破坏 open skill / openskill 行为的前提下引入版本锁定能力。
15
+
16
+ ### 2. 文件结构(示例)
17
+
18
+ 下面示例采用 YAML 表达,实际可根据技术栈选择 YAML/JSON 等格式,但字段语义应保持一致。
19
+
20
+ ```yaml
21
+ lockVersion: 1
22
+ projectId: "git@company:repo/path.git" # 可选,用于跨项目聚合
23
+ registryBindings:
24
+ - registryId: team://growth
25
+ alias: growth
26
+ - registryId: org://platform
27
+ alias: platform
28
+
29
+ skills:
30
+ pdf:
31
+ version: 1.2.0
32
+ registry: team://growth
33
+ installedAt: 2025-01-03T09:00:00Z
34
+ web-testing:
35
+ version: 0.9.1
36
+ registry: org://platform
37
+ installedAt: 2025-01-05T14:30:00Z
38
+ ```
39
+
40
+ ### 3. 字段语义
41
+
42
+ - **顶层字段**:
43
+ - `lockVersion`:
44
+ - 锁文件格式版本号,用于未来演进与迁移。
45
+ - `projectId`(可选):
46
+ - 项目标识,用于跨仓库聚合审计数据,推荐使用仓库地址或唯一 ID。
47
+ - `registryBindings[]`(可选):
48
+ - 当前项目绑定的 Registry 列表:
49
+ - `registryId`:Registry 的唯一标识,例如 `team://growth`。
50
+ - `alias`:本地别名,可用于 CLI 参数的简写。
51
+
52
+ - **`skills` 映射**:
53
+ - key:
54
+ - Skill 名称,通常与 `skills/<name>/` 目录名一致。
55
+ - value:
56
+ - `version`:该项目实际使用的版本号。
57
+ - `registry`:该版本来源的 Registry ID。
58
+ - `installedAt`:该版本安装或升级到当前状态的时间戳。
59
+
60
+ ### 4. CLI 行为约定
61
+
62
+ joySkills CLI 在读写 `joySkills.lock` 时应遵循以下约定:
63
+
64
+ - `joySkills install <skill>`:
65
+ - 未指定版本时:
66
+ - 根据当前绑定 Registry 的推荐版本策略选择一个 `approved` 版本。
67
+ - 安装成功后,在 `skills` 映射中写入或更新对应条目。
68
+ - 指定版本时:
69
+ - 安装指定版本(通常要求版本状态为 `approved` 或显式允许 `deprecated`),并写入 lock。
70
+
71
+ - `joySkills upgrade <skill>`:
72
+ - 根据团队策略(例如只允许 minor/patch 升级)与 Registry 索引选择目标版本。
73
+ - 完成安装后更新 `version` 和 `installedAt` 字段。
74
+
75
+ - `joySkills status`:
76
+ - 读取 `joySkills.lock` 中的 `skills` 映射,结合 Registry 索引输出:
77
+ - 当前 Skill 版本。
78
+ - 版本状态(approved/deprecated 等)。
79
+ - 是否有可用升级。
80
+
81
+ - `joySkills audit`:
82
+ - 读取 lockfile 与 Registry:
83
+ - 标记使用 `deprecated` 或被标记为安全风险的版本。
84
+ - 给出建议的升级目标(如果存在)。
85
+
86
+ ### 5. 生成与更新策略
87
+
88
+ - 锁文件应当由 joySkills CLI 自动生成与更新,避免手动编辑导致不一致。
89
+ - 当 `skills/` 目录发生变动(通过 joySkills 命令)时,必须同步更新 `joySkills.lock`:
90
+ - 新增 Skill:添加条目。
91
+ - 升级 Skill:更新版本号与时间戳。
92
+ - 移除 Skill:可以选择删除条目或标记为已移除(具体策略由实现决定)。
93
+
94
+ ### 6. 与 openskill / 现有行为的兼容
95
+
96
+ - 在没有 `joySkills.lock` 的项目中:
97
+ - joySkills 可以在首次安装时自动生成锁文件;
98
+ - 若仅使用 openskill,则该文件不存在,不影响其正常工作。
99
+
100
+ - 共存策略:
101
+ - 如果一个项目同时使用 openskill 和 joySkills:
102
+ - 由 joySkills 管理的安装/升级操作应保证与 openskill 期望的目录结构兼容;
103
+ - openskill 不需要理解 `joySkills.lock`,只要看到正确的 `skills/` 目录即可。
104
+
105
+ ### 7. 演进与迁移
106
+
107
+ - 锁文件格式演进时,通过提升 `lockVersion` 并提供迁移工具完成升级。
108
+ - 建议新增字段保持向后兼容,旧版本工具在遇到未知字段时应忽略之,而不是报错中止。