itismyskillmarket 1.0.10

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.
@@ -0,0 +1,54 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ release:
5
+ types: [created]
6
+ workflow_dispatch:
7
+ inputs:
8
+ version:
9
+ description: 'Version to publish (e.g., 1.0.6)'
10
+ required: true
11
+ type: string
12
+
13
+ jobs:
14
+ publish:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: Checkout
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Update version
21
+ if: github.event_name == 'workflow_dispatch'
22
+ run: |
23
+ npm version ${{ github.event.inputs.version }} --no-git-tag-version
24
+
25
+ - name: Setup Node
26
+ uses: actions/setup-node@v4
27
+ with:
28
+ node-version: '20'
29
+ registry-url: 'https://registry.npmjs.org'
30
+
31
+ - name: Install dependencies
32
+ run: npm install
33
+
34
+ - name: Build
35
+ run: npm run build
36
+
37
+ - name: Publish to npm
38
+ run: npm publish --access=public
39
+ env:
40
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
41
+
42
+ release:
43
+ needs: publish
44
+ if: github.event_name == 'workflow_dispatch'
45
+ runs-on: ubuntu-latest
46
+ permissions:
47
+ contents: write
48
+ steps:
49
+ - name: Create GitHub Release
50
+ uses: softprops/action-gh-release@v2
51
+ with:
52
+ tag_name: v${{ github.event.inputs.version }}
53
+ name: Release v${{ github.event.inputs.version }}
54
+ generate_release_notes: true
@@ -0,0 +1,70 @@
1
+ name: Publish Skill
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ skill_name:
7
+ description: 'Skill name (from skills/ directory)'
8
+ required: true
9
+ type: string
10
+ version:
11
+ description: 'Version (optional, defaults to patch)'
12
+ required: false
13
+ type: string
14
+ default: ''
15
+
16
+ jobs:
17
+ publish:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - name: Checkout
21
+ uses: actions/checkout@v4
22
+
23
+ - name: Debug inputs
24
+ run: |
25
+ echo "skill_name input: '${{ github.event.inputs.skill_name }}'"
26
+ echo "version input: '${{ github.event.inputs.version }}'"
27
+ ls -la skills/
28
+
29
+ - name: Validate skill exists
30
+ run: |
31
+ SKILL_NAME="${{ github.event.inputs.skill_name }}"
32
+ echo "Skill name: $SKILL_NAME"
33
+ if [ -z "$SKILL_NAME" ]; then
34
+ echo "Error: skill_name is empty!"
35
+ exit 1
36
+ fi
37
+ if [ ! -d "skills/$SKILL_NAME" ]; then
38
+ echo "Error: Skill '$SKILL_NAME' not found in skills/ directory"
39
+ ls -la skills/
40
+ exit 1
41
+ fi
42
+ echo "Skill directory contents:"
43
+ ls -la "skills/$SKILL_NAME/"
44
+
45
+ - name: Setup Node
46
+ uses: actions/setup-node@v4
47
+ with:
48
+ node-version: '20'
49
+ registry-url: 'https://registry.npmjs.org'
50
+
51
+ - name: Install dependencies
52
+ run: |
53
+ cd "skills/${{ github.event.inputs.skill_name }}"
54
+ npm install
55
+
56
+ - name: Update version
57
+ run: |
58
+ cd "skills/${{ github.event.inputs.skill_name }}"
59
+ if [ -n "${{ github.event.inputs.version }}" ]; then
60
+ npm version ${{ github.event.inputs.version }} --no-git-tag-version
61
+ else
62
+ npm version minor --no-git-tag-version
63
+ fi
64
+
65
+ - name: Publish to npm
66
+ run: |
67
+ cd "skills/${{ github.event.inputs.skill_name }}"
68
+ npm publish --access=public
69
+ env:
70
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/DEVELOPMENT.md ADDED
@@ -0,0 +1,376 @@
1
+ # SkillMarket 开发记录
2
+
3
+ **开发日期**: 2026-04-01
4
+ **开发者**: Sisyphus (Sisyphus Agent)
5
+ **项目状态**: v1.0.0 完成
6
+
7
+ ---
8
+
9
+ ## 1. 项目概述
10
+
11
+ ### 1.1 项目目标
12
+ 创建一个跨平台 npm CLI 工具 `skillmarket`,用于管理 AI 编程工具(Cursor / VSCode / Codex / OpenCode / Claude Code / Antigravity)的 skills。
13
+
14
+ ### 1.2 核心功能
15
+ - 查看 npm registry 上可用的 skills 列表
16
+ - 查看 skill 的详细介绍
17
+ - 安装 / 更新 / 卸载 skills
18
+ - 多平台适配(软链接机制)
19
+
20
+ ### 1.3 技术栈
21
+ | 组件 | 选型 | 理由 |
22
+ |------|------|------|
23
+ | 语言 | TypeScript | 类型安全,便于维护 |
24
+ | 构建 | tsup | 快速,输出 CJS/ESM |
25
+ | CLI 解析 | commander | 轻量,成熟 |
26
+ | 文件操作 | fs-extra | Promise 化的文件系统操作 |
27
+ | 兼容性 | Node.js 18+ | 软链接、crypto 等特性 |
28
+
29
+ ---
30
+
31
+ ## 2. 目录结构
32
+
33
+ ```
34
+ skillmarket/
35
+ ├── package.json # npm 包配置
36
+ ├── tsconfig.json # TypeScript 配置
37
+ ├── tsup.config.ts # 构建配置
38
+ ├── README.md # 使用文档
39
+ ├── .gitignore
40
+ ├── dist/ # 编译输出
41
+ └── src/
42
+ ├── index.ts # CLI 入口 (shebang)
43
+ ├── cli.ts # 命令解析入口
44
+ ├── constants.ts # 常量定义 (平台、目录名)
45
+ ├── types.ts # 类型定义
46
+ ├── commands/
47
+ │ ├── ls.ts # skm ls - 列出 skills
48
+ │ ├── info.ts # skm info - 查看详情
49
+ │ ├── install.ts # skm install - 安装
50
+ │ ├── update.ts # skm update - 更新
51
+ │ ├── uninstall.ts # skm uninstall - 卸载
52
+ │ ├── sync.ts # skm sync - 同步软链接
53
+ │ ├── registry.ts # 本地注册表管理
54
+ │ └── npm.ts # npm registry HTTP 查询
55
+ └── utils/
56
+ ├── dirs.ts # 目录路径工具
57
+ └── platform.ts # 平台检测
58
+ ```
59
+
60
+ ---
61
+
62
+ ## 3. Git 提交历史
63
+
64
+ | Commit | 描述 |
65
+ |--------|------|
66
+ | `f6bcd20` | docs: add design and implementation plan |
67
+ | `8e94de5` | chore: project initialization with TypeScript and tsup |
68
+ | `4aec3ea` | feat: add directory structure and types |
69
+ | `b02f886` | feat: add help command with usage examples |
70
+ | `db403be` | feat: add --ls command with registry support |
71
+ | `b8332fd` | feat: add npm registry query support |
72
+ | `628e3a7` | feat: add --info command for skill details |
73
+ | `64beb65` | feat: add --install command with npm download |
74
+ | `cf8fbc0` | feat: add --sync for platform link management |
75
+ | `db66526` | feat: add --update and --uninstall commands |
76
+ | `bafb3e8` | docs: add README and finalize package.json |
77
+
78
+ **Release Tag**: `v1.0.0`
79
+
80
+ ---
81
+
82
+ ## 4. 各模块详细说明
83
+
84
+ ### 4.1 入口和常量 (index.ts, constants.ts)
85
+
86
+ ```typescript
87
+ // src/index.ts
88
+ #!/usr/bin/env node
89
+ import './cli.js';
90
+ ```
91
+
92
+ ```typescript
93
+ // src/constants.ts
94
+ export const PLATFORMS = [
95
+ 'cursor', 'vscode', 'codex', 'opencode', 'claude', 'antigravity'
96
+ ] as const;
97
+
98
+ export const SUBDIRS = {
99
+ CACHE: 'cache',
100
+ SKILLS: 'skills',
101
+ PLATFORM_LINKS: 'platform-links'
102
+ } as const;
103
+
104
+ export const LATEST_LINK = 'latest';
105
+ export const REGISTRY_FILE = 'registry.json';
106
+ ```
107
+
108
+ ### 4.2 目录工具 (utils/dirs.ts)
109
+
110
+ 技能安装位置:`~/.skillmarket/`
111
+
112
+ ```typescript
113
+ getMarketHome() // ~/.skillmarket
114
+ getCacheDir() // ~/.skillmarket/cache
115
+ getSkillsDir() // ~/.skillmarket/skills
116
+ getPlatformLinksDir() // ~/.skillmarket/platform-links
117
+ getRegistryPath() // ~/.skillmarket/registry.json
118
+ ensureMarketDirs() // 创建所有必要目录
119
+ ```
120
+
121
+ ### 4.3 注册表管理 (commands/registry.ts)
122
+
123
+ 本地注册表存储已安装的 skills 信息:
124
+
125
+ ```typescript
126
+ interface RegistryData {
127
+ skills: Record<string, InstalledSkill>;
128
+ lastUpdated: string;
129
+ }
130
+
131
+ interface InstalledSkill {
132
+ id: string;
133
+ version: string;
134
+ installedAt: string;
135
+ platforms: string[];
136
+ }
137
+ ```
138
+
139
+ ### 4.4 npm 查询 (commands/npm.ts)
140
+
141
+ 使用原生 `https` 模块查询 npm registry:
142
+
143
+ ```typescript
144
+ fetchNpmPackage(packageName) // 获取包信息
145
+ searchSkillmarketPackages() // 搜索 @skillmarket/* 包
146
+ ```
147
+
148
+ ### 4.5 平台检测 (utils/platform.ts)
149
+
150
+ 通过环境变量检测当前平台:
151
+
152
+ ```typescript
153
+ detectPlatform() // OPENCODE, CURSOR, VSCODE, CLAUDE_CODE, ANTIGRAVITY
154
+ ```
155
+
156
+ ### 4.6 安装逻辑 (commands/install.ts)
157
+
158
+ 1. 查询 npm 获取最新版本
159
+ 2. `npm pack` 下载到 cache
160
+ 3. 解压并复制到 skills 目录
161
+ 4. 创建 `latest` 软链接
162
+ 5. 更新 registry.json
163
+
164
+ ### 4.7 软链接同步 (commands/sync.ts)
165
+
166
+ 为各平台创建适配层软链接:
167
+ ```
168
+ ~/.skillmarket/platform-links/
169
+ ├── cursor/skills/<skill-name> -> skills/<skill-name>/latest/cursor
170
+ ├── vscode/skills/<skill-name> -> skills/<skill-name>/latest/vscode
171
+ └── ...
172
+ ```
173
+
174
+ ---
175
+
176
+ ## 5. 命令设计
177
+
178
+ | 命令 | 说明 | 参数 |
179
+ |------|------|------|
180
+ | `skm ls` | 列出 npm 上可用的 skills | `--installed` `--updates` |
181
+ | `skm info <skill>` | 查看 skill 详情 | - |
182
+ | `skm install <skill>` | 安装 skill | `@version` `--all` |
183
+ | `skm update [skill]` | 更新 skill | `--all` |
184
+ | `skm uninstall <skill>` | 卸载 skill | - |
185
+ | `skm sync` | 同步平台软链接 | - |
186
+
187
+ ---
188
+
189
+ ## 6. 安装后目录结构
190
+
191
+ ```
192
+ ~/.skillmarket/
193
+ ├── registry.json # 安装记录
194
+ ├── cache/ # npm 包缓存
195
+ │ └── @skillmarket/
196
+ │ └── <skill>@<version>/
197
+ ├── skills/ # 安装的 skills
198
+ │ └── <skill>/
199
+ │ ├── latest -> <version>/ # 软链接
200
+ │ └── <version>/
201
+ │ ├── SKILL.md
202
+ │ ├── metadata.json
203
+ │ ├── cursor/
204
+ │ ├── vscode/
205
+ │ └── ...
206
+ └── platform-links/ # 平台适配层
207
+ ├── cursor/
208
+ │ └── skills/
209
+ │ └── <skill> -> ../../../skills/<skill>/latest/cursor
210
+ ├── vscode/
211
+ └── ...
212
+ ```
213
+
214
+ ---
215
+
216
+ ## 7. 遇到的问题和解决方案
217
+
218
+ ### 7.1 npm registry 查询问题
219
+ **问题**: npm API 返回数据格式不一致,404 时也返回 JSON
220
+ **解决**: 检查 `parsed.error` 字段,处理空数据情况
221
+
222
+ ### 7.2 Windows 软链接权限
223
+ **问题**: Windows 上创建 junction 可能失败
224
+ **解决**: 添加 try-catch 降级到目录复制
225
+
226
+ ### 7.3 Commander 选项处理
227
+ **问题**: `--info <skill-id>` 选项无法正确传递参数
228
+ **解决**: 改用 `program.command('info').argument('<skill-id>')` 子命令方式
229
+
230
+ ### 7.4 TypeScript 类型
231
+ **问题**: npm 返回的 `versions` 对象索引签名不完整
232
+ **解决**: 扩展 `NpmPackage` 接口包含 `skillmarket` 元数据
233
+
234
+ ---
235
+
236
+ ## 8. 开发过程
237
+
238
+ ### Phase 1: 需求澄清
239
+ 1. 包名确定为 `skillmarket`
240
+ 2. 使用统一目录 + 软链接方案
241
+ 3. 采用主动检测更新模式
242
+ 4. 统一结构 + 平台适配层
243
+
244
+ ### Phase 2: 设计文档
245
+ - 创建 `docs/plans/2026-04-01-skillmarket-design.md`
246
+ - 创建 `docs/plans/2026-04-01-skillmarket-implementation.md`
247
+
248
+ ### Phase 3: 编码实现
249
+ 按照 implementation plan 执行了 10 个 task:
250
+ 1. 项目初始化 (package.json, tsconfig, tsup)
251
+ 2. 目录结构和常量定义
252
+ 3. --help 命令实现
253
+ 4. --ls 命令基础实现
254
+ 5. npm registry 查询
255
+ 6. --info 命令实现
256
+ 7. --install 命令实现
257
+ 8. 软链接策略实现
258
+ 9. --update 和 --uninstall 实现
259
+ 10. README 和发布准备
260
+
261
+ ---
262
+
263
+ ## 9. 预留扩展
264
+
265
+ 以下功能在设计文档中预留接口,后续版本实现:
266
+
267
+ - [ ] `--search` - 搜索 skills
268
+ - [ ] `--publish` - 发布自己的 skill
269
+ - [ ] `--verify` - 验证 skill 完整性
270
+ - [ ] `--config` - 配置管理
271
+ - [ ] `--backup` / `--restore` - 备份与恢复
272
+ - [ ] `--proxy` - 代理/镜像支持
273
+ - [ ] `--theme` - 主题定制
274
+ - [ ] `--sync-server` - 远程同步
275
+
276
+ ---
277
+
278
+ ## 10. 使用示例
279
+
280
+ ```bash
281
+ # 全局安装
282
+ npm install -g skillmarket
283
+
284
+ # 或者直接使用
285
+ npx skillmarket --help
286
+
287
+ # 列出可用 skills
288
+ skm ls
289
+
290
+ # 查看 skill 详情
291
+ skm info brainstorming
292
+
293
+ # 安装 skill
294
+ skm install brainstorming
295
+
296
+ # 查看已安装
297
+ skm ls --installed
298
+
299
+ # 更新
300
+ skm update --all
301
+
302
+ # 同步平台链接
303
+ skm sync
304
+
305
+ # 卸载
306
+ skm uninstall brainstorming
307
+ ```
308
+
309
+ ---
310
+
311
+ ## 11. 下一步
312
+
313
+ 1. **发布到 npm**
314
+ ```bash
315
+ npm login
316
+ npm publish
317
+ ```
318
+
319
+ 2. **创建第一个 skill 包**
320
+ - 创建 `@skillmarket/brainstorming` 包
321
+ - 包含各平台适配文件
322
+
323
+ 3. **完善 npm search**
324
+ - 目前搜索基于 `keywords:skillmarket`
325
+ - 可考虑建立官方 skill 列表
326
+
327
+ 4. **Windows 兼容性测试**
328
+ - junction 链接测试
329
+ - 路径处理测试
330
+
331
+ ---
332
+
333
+ ## 12. 相关文档
334
+
335
+ - [设计文档](./docs/plans/2026-04-01-skillmarket-design.md)
336
+ - [实现计划](./docs/plans/2026-04-01-skillmarket-implementation.md)
337
+ - [用户文档](./README.md)
338
+
339
+ ---
340
+
341
+ ## 13. Skill 发布流程 (v1.0.1+)
342
+
343
+ ### 13.1 创建新 Skill
344
+
345
+ 在 `skills/` 目录下创建新 skill:
346
+
347
+ ```
348
+ skills/<skill-name>/
349
+ ├── package.json # 包含 skillmarket 元数据
350
+ ├── SKILL.md # 文档
351
+ ├── metadata.json # 额外元数据
352
+ └── index.js # 主入口(OpenCode 插件)
353
+ ```
354
+
355
+ ### 13.2 发布 Skill
356
+
357
+ **方式一:GitHub Actions(推荐)**
358
+ 1. 进入仓库 Actions 页面
359
+ 2. 选择 "Publish Skill" 工作流
360
+ 3. 点击 "Run workflow"
361
+ 4. 输入 skill 名称(如 `test-skill`)
362
+ 5. 可选:指定版本号
363
+
364
+ **方式二:本地发布**
365
+ ```bash
366
+ cd skills/<skill-name>
367
+ npm install
368
+ npm publish --access=public
369
+ ```
370
+
371
+ ### 13.3 用户安装
372
+
373
+ ```bash
374
+ skm install <skill-name>
375
+ skm info <skill-name>
376
+ ```
package/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # SkillMarket
2
+
3
+ Cross-platform skill manager for AI coding tools (Cursor, VSCode, Codex, OpenCode, Claude Code, Antigravity).
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g itismyskillmarket
9
+ ```
10
+
11
+ Or use directly:
12
+
13
+ ```bash
14
+ npx itismyskillmarket --help
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ```bash
20
+ # List available skills
21
+ skm ls
22
+
23
+ # Show installed skills
24
+ skm ls --installed
25
+
26
+ # View skill information
27
+ skm info brainstorming
28
+
29
+ # Install a skill
30
+ skm install brainstorming
31
+
32
+ # Update a specific skill
33
+ skm update brainstorming
34
+
35
+ # Update all skills
36
+ skm update --all
37
+
38
+ # Sync platform links
39
+ skm sync
40
+
41
+ # Uninstall a skill
42
+ skm uninstall brainstorming
43
+ ```
44
+
45
+ ## Development
46
+
47
+ ```bash
48
+ # Install dependencies
49
+ npm install
50
+
51
+ # Build project
52
+ npm run build
53
+
54
+ # Link for local testing
55
+ npm link
56
+ ```
57
+
58
+ ## Architecture
59
+
60
+ Skills are installed to `~/.skillmarket/` with the following structure:
61
+
62
+ ```
63
+ ~/.skillmarket/
64
+ ├── registry.json # Installed skills registry
65
+ ├── cache/ # npm package cache
66
+ ├── skills/ # Installed skills
67
+ │ └── <skill-name>/
68
+ │ ├── latest/ # Symlink to latest version
69
+ │ └── <version>/
70
+ └── platform-links/ # Platform-specific symlinks
71
+ ├── cursor/
72
+ ├── vscode/
73
+ └── ...
74
+ ```
75
+
76
+ ## Supported Platforms
77
+
78
+ - Cursor
79
+ - VSCode
80
+ - Codex
81
+ - OpenCode
82
+ - Claude Code
83
+ - Antigravity
84
+
85
+ ## License
86
+
87
+ MIT