transskill 0.3.1 → 0.4.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/README.zh.md CHANGED
@@ -1,319 +1,177 @@
1
1
  # TransSkill
2
2
 
3
- > **一次编写,全平台运行。**
4
-
5
- TransSkill 是一个跨 AI Agent 平台的技能格式转换工具。
6
- 无需为每个 Agent 手动重写技能——一条命令搞定。
3
+ > **一次编写,全平台运行。搜索、审计、安装 1,000+ 个技能。**
7
4
 
5
+ [![npm](https://img.shields.io/npm/v/transskill)](https://www.npmjs.com/package/transskill)
8
6
  [![English Docs](https://img.shields.io/badge/docs-English-blue)](README.md)
9
7
 
10
8
  ---
11
9
 
12
- ## 问题
13
-
14
- 每种 AI 编码 Agent 都有自己的技能格式:
15
- - Claude Code 用 SKILL.md
16
- - Cursor 用 .cursorrules
17
- - OpenClaw 用 AGENTS.md
18
- - MCP Server 用 JSON Schema
19
-
20
- 为一个平台写的技能,在另一个平台上无法直接使用。
10
+ ## ✨ TransSkill 的三大亮点
21
11
 
22
- ## 解决方案
23
-
24
- ```
25
- $ transskill convert .cursorrules --to skill.md
26
- $ transskill convert gh:user/weather-skill --to .cursorrules
27
- $ transskill convert ./my-skill/ --to .mdc --glob "**/*.ts"
28
- ```
12
+ ### 🗂️ 全站搜索 — 一键检索 1,115+ 个技能
29
13
 
30
- 一条命令,全平台通用。
31
-
32
- ---
33
-
34
- ## 安装
14
+ 不用再到处翻 GitHub 仓库了。TransSkill 自动集成 [awesome-agent-skills](https://github.com/VoltAgent/awesome-agent-skills) 生态,索引了 **1,115+ 个真实可用的 Agent 技能**,来自 **Anthropic、Stripe、Google Gemini、Vercel、Cloudflare、Angular、Supabase** 等官方团队。
35
15
 
36
16
  ```bash
37
- npm install -g transskill
38
- ```
39
-
40
- 或者直接运行:
17
+ # 交互式搜索 打字过滤,回车安装
18
+ npx transskill search
41
19
 
42
- ```bash
43
- npx transskill convert .cursorrules --to skill.md
20
+ # 命令行搜索
21
+ npx transskill search docx --json
22
+ npx transskill search python --tag linter
44
23
  ```
45
24
 
46
- ## 快速上手
47
-
48
- ```bash
49
- # SKILL.md → .cursorrules
50
- transskill convert my-skill.skill.md --to .cursorrules
25
+ 每个技能直接从**原始仓库**获取 — 不存副本,不会过时。
51
26
 
52
- # .cursorrules SKILL.md
53
- transskill convert .cursorrules --to skill.md
27
+ ### 🛡️ 安全审计 — 安装前自动扫描
54
28
 
55
- # .cursorrules → .mdc(带文件范围限定)
56
- transskill convert .cursorrules --to .mdc --glob "src/**/*.ts"
29
+ 安装任何技能之前,TransSkill 自动进行三层安全检查:
57
30
 
58
- # 完整 skill 目录 → Cursor 规则
59
- transskill convert ./weather-skill/ --to .cursorrules
31
+ | 级别 | 检测内容 |
32
+ |-------|----------|
33
+ | **L1 — 指令扫描** | `rm -rf`、`curl\|sh`、base64 混淆、提示注入 |
34
+ | **L2 — 权限扫描** | glob 范围过宽、危险 MCP 工具名 |
35
+ | **L3 — MCP 扫描** | 可疑服务器命令(`sudo`、`kill`、`rm`) |
60
36
 
61
- # GitHub 仓库 → 直接安装到 Claude Code
62
- transskill convert gh:user/weather-skill --to skill.md \
63
- --install-to ~/.claude/skills/
37
+ ```bash
38
+ # 审计任意技能文件
39
+ npx transskill audit ./skill.skill.md
64
40
 
65
- # 预览效果(不实际写入文件)
66
- transskill convert .cursorrules --to skill.md --dry-run
41
+ # 安装时自动审计(评分 < 90 会拦截)
42
+ npx transskill install python-linter
67
43
  ```
68
44
 
69
- ## 输入源
45
+ ### 🔄 格式转换 — 跨平台互通
70
46
 
71
- | 格式 | 示例 | 说明 |
72
- |------|------|------|
73
- | 本地文件 | `./rules.cursorrules` | 单文件转换 |
74
- | 本地目录 | `./weather-skill/` | 完整 skill 目录(含脚本和资源) |
75
- | GitHub 仓库 | `gh:user/repo` | 自动 clone + 转换 |
76
- | GitHub 子路径 | `gh:user/repo/path` | 仓库内特定子目录 |
77
- | GitHub URL | `https://github.com/user/repo` | 完整 URL 支持 |
47
+ 在所有主流 Agent 格式间自由转换,**无需手动重写**。
78
48
 
79
- ## 支持格式
49
+ ```bash
50
+ npx transskill convert .cursorrules --to skill.md
51
+ npx transskill convert gh:user/weather-skill --to .mdc
52
+ npx transskill convert ./my-skill/ --to .cursorrules --glob "src/**/*.ts"
53
+ ```
80
54
 
81
55
  | 格式 | 平台 | 输入 | 输出 |
82
- |------|------|:---:|:----:|
56
+ |--------|-----------|:----:|:----:|
83
57
  | SKILL.md | Claude Code, Codex CLI, OpenClaw, Cursor | ✅ | ✅ |
84
58
  | .cursorrules | Cursor IDE | ✅ | ✅ |
85
59
  | .mdc | Cursor 2.3+ | ✅ | ✅ |
86
- | MCP JSON | 任何 MCP 兼容客户端 | ✅ | — |
60
+ | MCP JSON | 任意 MCP 客户端 | ✅ | — |
87
61
  | SOUL.md | OpenClaw | ✅ | — |
88
62
 
89
- ## 命令
90
-
91
- ```bash
92
- # 转换技能格式
93
- transskill convert <input> --to <format> [options]
94
-
95
- # 列出所有支持的格式
96
- transskill list-formats
97
-
98
- # 验证技能文件或目录格式
99
- transskill validate <input>
63
+ ---
100
64
 
101
- # 安全审计技能文件或目录
102
- transskill audit <input> [options]
65
+ ## 安装
103
66
 
104
- # 查看所有选项
105
- transskill --help
67
+ ```bash
68
+ npm install -g transskill
69
+ # 或直接运行:
70
+ npx transskill --help
106
71
  ```
107
72
 
108
- ### convert 选项
109
-
110
- | 参数 | 说明 |
111
- |------|------|
112
- | `-t, --to <format>` | 目标格式(必填) |
113
- | `-o, --output <path>` | 输出目录(默认当前目录) |
114
- | `--install-to <path>` | 直接安装到 Agent 配置目录 |
115
- | `--glob <pattern>` | 文件匹配模式(.mdc 输出时使用) |
116
- | `--always-apply` | 总是加载该规则(.mdc 输出时使用) |
117
- | `--dry-run` | 预览模式,不写入文件 |
118
- | `-v, --verbose` | 显示详细转换报告 |
73
+ ## 命令
119
74
 
120
- ### audit 选项
75
+ ### 🔍 搜索与安装(市场)
121
76
 
122
- | 参数 | 说明 |
123
- |------|------|
124
- | `--format <type>` | 输出格式:`console` 或 `json`(默认 console) |
125
- | `--quiet` | 仅显示评分摘要 |
126
- | `--min-severity <level>` | 最低报告级别:`info`, `low`, `medium`, `high`, `critical`(默认 info) |
127
- | `--auditor <id>` | 仅运行指定的审计器(可重复使用) |
128
- | `-v, --verbose` | 显示详细发现 |
77
+ ```bash
78
+ # 交互式搜索 — 浏览 1,115+ 个技能
79
+ npx transskill search
129
80
 
130
- ## 工作原理
81
+ # JSON 输出(脚本/CI 用)
82
+ npx transskill search react --json
131
83
 
84
+ # 直接从市场安装 → 下载 → 审计 → 转换 → 写入
85
+ npx transskill install docx
86
+ npx transskill install python-linter --to .mdc
87
+ npx transskill install claude-api --to skill.md --dir ~/.claude/skills/
132
88
  ```
133
- 输入 (文件/目录/GitHub)
134
-
135
-
136
- InputResolver ──► Parser ──► Mapper ──► Renderer ──► 输出
137
- (本地/GitHub) (读取) (映射) (写入)
138
- ```
139
-
140
- TransSkill 采用管道架构:
141
-
142
- 1. **InputResolver** — 将输入(本地路径或 GitHub URL)解析为本地文件路径
143
- 2. **Parser** — 读取平台特有格式,转换为通用中间表示
144
- 3. **Mapper** — 在平台间映射字段,报告保留和丢失的信息
145
- 4. **Renderer** — 以目标平台格式输出结果
146
-
147
- ## 示例
148
89
 
149
- ### 转换本地文件
90
+ ### 🔄 转换
150
91
 
151
92
  ```bash
152
- $ cat .cursorrules
153
- # My TypeScript Rules
154
- Always use strict mode
155
- Prefer named exports
156
-
157
- $ transskill convert .cursorrules --to skill.md -o typescript-rule.md
158
- ✅ 转换完成
159
- 输出: ./typescript-rule.md
160
- ```
93
+ # 单文件
94
+ npx transskill convert .cursorrules --to skill.md
161
95
 
162
- ### GitHub 转换到 Cursor 规则
96
+ # GitHub 仓库
97
+ npx transskill convert gh:anthropics/skills/docx --to .cursorrules
163
98
 
164
- ```bash
165
- $ transskill convert gh:anthropics/skills/weather --to .cursorrules \
166
- --install-to .cursor/rules/
99
+ # 技能目录(含附属文件)
100
+ npx transskill convert ./skill-dir/ --to .cursorrules
167
101
 
168
- ⬇️ 正在克隆: gh:anthropics/skills
169
- 已安装: .cursor/rules/weather.cursorrules
102
+ # 预览转换损失
103
+ npx transskill diff .cursorrules --to skill.md
170
104
  ```
171
105
 
172
- ### 目录转换(含映射损失报告)
106
+ ### 🛡️ 审计
173
107
 
174
108
  ```bash
175
- $ transskill convert ./weather-skill/ --to .cursorrules
176
- 目录转换完成
177
- weather-skill/SKILL.md → weather-skill.cursorrules
178
- weather-skill/scripts/ → ./scripts/(已复制)
179
- weather-skill/references/ → ./references/(已复制)
180
- ⚠️ SKILL.md 中的脚本引用在 .cursorrules 中无法使用
109
+ npx transskill audit ./skill.skill.md
110
+ npx transskill audit ./skill-dir/ --format json --quiet
181
111
  ```
182
112
 
183
- ---
184
-
185
- ## 安全审计
186
-
187
- TransSkill 内置安全扫描器,可以在安装或使用技能文件之前分析其中的潜在安全风险。
113
+ ### 📤 发布
188
114
 
189
115
  ```bash
190
- # 快速扫描技能文件
191
- transskill audit my-skill.skill.md
192
-
193
- # JSON 格式输出,适合程序化处理
194
- transskill audit ./skill-dir/ --format json
195
-
196
- # 安静模式——仅显示评分
197
- transskill audit my-skill.skill.md --quiet
198
-
199
- # 仅显示高危及以上问题
200
- transskill audit .cursorrules --min-severity high
201
-
202
- # 仅运行指定审计器
203
- transskill audit mcp.json --auditor permission-scanner
204
- ```
205
-
206
- ### 审计级别
207
-
208
- 扫描器检查三个安全层级:
209
-
210
- | 级别 | 扫描器 | 检查内容 |
211
- |------|--------|----------|
212
- | **L1 — 指令扫描** | `instruction-scanner` | 危险 shell 命令(`rm -rf`、`sudo`、`curl|sh`)、提示注入模式、base64/hex 混淆、可疑 URL、远程代码执行 |
213
- | **L2 — 权限扫描** | `permission-scanner` | `.mdc` glob 范围过宽、`alwaysApply` 无范围限制、危险 MCP 工具名(shell/exec)、文件系统访问、网络访问、Claude `disableModelInvocation` 设置 |
214
- | **L3 — MCP 扫描** | `permission-scanner` | MCP 服务器命令(`rm`、`sudo`、`kill`)、可能被滥用的 MCP 工具能力 |
215
-
216
- > 注:L3 检查由同一個 PermissionScanner 处理,与 L2 在一次扫描中一并报告。
217
-
218
- ### 评分体系
219
-
220
- 审计引擎计算 0–100 的数值评分,对应 A–F 等级:
221
-
222
- | 等级 | 分数范围 | 含义 |
223
- |------|----------|------|
224
- | **A** | 90–100 | 优秀——几乎没有安全问题 |
225
- | **B** | 70–89 | 良好——存在少量低风险问题 |
226
- | **C** | 50–69 | 一般——存在中等风险,建议审查 |
227
- | **D** | 30–49 | 较差——存在显著风险,谨慎使用 |
228
- | **F** | 0–29 | 危险——存在严重风险,请勿直接使用 |
229
-
230
- 每条发现按严重程度扣分:
231
-
232
- | 严重程度 | 扣分 |
233
- |----------|------|
234
- | 🔴 严重(Critical) | −25 分 |
235
- | 🟠 高危(High) | −10 分 |
236
- | 🟡 中危(Medium) | −4 分 |
237
- | 🟢 低危(Low) | −1 分 |
238
- | ℹ️ 信息(Info) | 0 分 |
239
-
240
- ### 输出格式
241
-
242
- **控制台**(默认):带颜色标签、行号和上下文片段的可读报告。
116
+ # 提交技能链接到市场(自动 PR)
117
+ npx transskill publish ./my-skill/
243
118
 
119
+ # 批量发布目录下的所有技能
120
+ npx transskill publish-all ./skills/ --dry-run
244
121
  ```
245
- $ transskill audit my-skill.skill.md
246
-
247
- ╔══════════════════════════════════════════════╗
248
- ║ TransSkill Security Audit ║
249
- ║ 目标文件: my-skill.skill.md ║
250
- ╚══════════════════════════════════════════════╝
251
-
252
- 审计等级: L1 + L2 + L3
253
-
254
- 发现 (3 项):
255
122
 
256
- 🔴 严重 | L2-003b | MCP 服务器使用了危险命令: rm
257
- → ./my-skill.skill.md
258
-
259
- 🟠 高危 | L1-001 | 检测到危险命令: rm -rf /
260
- → ./my-skill.skill.md:24
261
- → run: rm -rf /tmp/cache
123
+ ---
262
124
 
263
- 🟡 中危 | L2-001b | alwaysApply 规则 globs 范围过宽
264
- → ./my-skill.skill.md
125
+ ## 工作原理
265
126
 
266
- 评分: 65/100 — C 级
267
- 3 项发现 (1 严重, 1 高危, 1 中危)
268
127
  ```
128
+ 输入 (文件/目录/GitHub/市场)
129
+
130
+
131
+ InputResolver ──► Parser ──► Mapper ──► Renderer ──► 输出
132
+ (本地/GitHub) (读取) (映射) (写入)
269
133
 
270
- **JSON**:适合 CI/CD 流水线和程序化处理。
271
-
272
- ```bash
273
- transskill audit ./skills/ --format json
134
+ 市场 ──► 搜索 ──► 安装 ──► 审计 ──► 转换 ──► 写入
135
+ (1,115+) (TUI/JSON) (自动)
274
136
  ```
275
137
 
276
- **安静模式**:一行摘要,适合快速检查。
138
+ TransSkill 的管道架构:
277
139
 
278
- ```bash
279
- transskill audit .cursorrules --quiet
280
- # 📊 C (65/100) 3 项发现 (1🔴 1🟠 1🟡)
281
- ```
140
+ 1. **InputResolver** — 解析本地/GitHub/市场来源
141
+ 2. **Parser** 读取 6 种格式为通用中间表示
142
+ 3. **Mapper**跨平台字段映射,报告保留和丢失的信息
143
+ 4. **Renderer** — 以目标格式输出
144
+ 5. **AuditEngine** — 全层级安全扫描
145
+ 6. **Marketplace** — 搜索、安装、发布
282
146
 
283
- ### CI/CD 集成
147
+ ---
284
148
 
285
- 结合 JSON 输出将审计结果集成到 CI 流水线:
149
+ ## 安全审计评分
286
150
 
287
- ```bash
288
- #!/bin/bash
289
- # 评分低于 B 级(70 分)则构建失败
290
- RESULT=$(transskill audit ./skills/ --format json)
291
- SCORE=$(echo $RESULT | jq '.score.total')
292
- if [ "$SCORE" -lt 70 ]; then
293
- echo "❌ 安全评分 $SCORE 低于阈值 (70)"
294
- exit 1
295
- fi
296
- echo "✅ 安全评分 $SCORE — 通过"
297
- ```
151
+ | 分数 | 等级 | 含义 |
152
+ |-------|-------|---------|
153
+ | 90–100 | **A** | 优秀 |
154
+ | 70–89 | **B** | 良好 — 少量低风险问题 |
155
+ | 50–69 | **C** | 一般 — 建议审查 |
156
+ | 30–49 | **D** | 较差 — 显著风险 |
157
+ | 0–29 | **F** | 危险 — 请勿使用 |
298
158
 
299
- ## 项目进度
159
+ ---
300
160
 
301
- **v0.2.1 — 活跃开发中。** 详见 [tasks.md](specs/tasks.md)。
161
+ ## 项目状态
302
162
 
303
- | 阶段 | 状态 |
304
- |------|------|
305
- | Phase 0: 项目脚手架 | ✅ 已完成 |
306
- | Phase 1: InputResolver + 类型定义 | ✅ 已完成 |
307
- | Phase 2: Parser 层 | ✅ 已完成 |
308
- | Phase 3: Mapper + Renderer | ✅ 已完成 |
309
- | Phase 4: CLI 完整管道 | ✅ 已完成 |
310
- | Phase 5: 测试覆盖 | ⬜ 进行中 |
311
- | Phase 6: CI + 发布 | ⬜ 待完成 |
312
- | Phase A: 安全审计 | ✅ 已完成 |
163
+ **v0.4.0** 活跃开发中。
313
164
 
314
- ## 贡献指南
165
+ | 功能 | 状态 |
166
+ |---------|--------|
167
+ | ✅ 格式转换(6 种格式) | 已完成 |
168
+ | ✅ 安全审计(L1–L3) | 已完成 |
169
+ | ✅ 市场搜索(1,115+ 个技能) | 已完成 |
170
+ | ✅ 安装(下载 → 审计 → 转换) | 已完成 |
171
+ | ✅ 发布(链接提交) | 已完成 |
172
+ | ⬜ 测试覆盖 | 进行中 |
315
173
 
316
- 详见 [CONTRIBUTING.md](CONTRIBUTING.md)。
174
+ ---
317
175
 
318
176
  ## 许可证
319
177
 
@@ -1,11 +1,7 @@
1
1
  /**
2
- * Publish-all command — batch publish all skills from a directory to the registry.
2
+ * Publish-all command — batch submit links for all skills in a directory.
3
3
  *
4
- * Scans a directory (e.g. anthropic-skills/skills/) for skill subdirectories,
5
- * adds default metadata if missing, and publishes each one.
6
- */
7
- /**
8
- * Publish all skills in a directory.
4
+ * v2: No file uploads, just adds link entries to registry.json.
9
5
  */
10
6
  export declare function publishAllSkills(dir: string, options: {
11
7
  force?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"publish-all.d.ts","sourceRoot":"","sources":["../../src/marketplace/publish-all.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmGH;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,OAAO,CAAC,IAAI,CAAC,CA8Ff"}
1
+ {"version":3,"file":"publish-all.d.ts","sourceRoot":"","sources":["../../src/marketplace/publish-all.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6EH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,OAAO,CAAC,IAAI,CAAC,CAuEf"}
@@ -1,8 +1,7 @@
1
1
  /**
2
- * Publish-all command — batch publish all skills from a directory to the registry.
2
+ * Publish-all command — batch submit links for all skills in a directory.
3
3
  *
4
- * Scans a directory (e.g. anthropic-skills/skills/) for skill subdirectories,
5
- * adds default metadata if missing, and publishes each one.
4
+ * v2: No file uploads, just adds link entries to registry.json.
6
5
  */
7
6
  import { readFileSync, existsSync, readdirSync, statSync, writeFileSync } from 'node:fs';
8
7
  import { join } from 'node:path';
@@ -11,9 +10,6 @@ import chalk from 'chalk';
11
10
  import matter from 'gray-matter';
12
11
  const REGISTRY_OWNER = 'ljk-777';
13
12
  const REGISTRY_REPO = 'transskill-registry';
14
- /**
15
- * Scan a directory for skill subdirectories.
16
- */
17
13
  function scanSkills(baseDir) {
18
14
  if (!existsSync(baseDir)) {
19
15
  log.error(`Directory not found: ${baseDir}`);
@@ -32,14 +28,8 @@ function scanSkills(baseDir) {
32
28
  const raw = readFileSync(skillMdPath, 'utf-8');
33
29
  const parsed = matter(raw);
34
30
  const fm = parsed.data;
35
- // Determine skill name
36
31
  const name = typeof fm.name === 'string' ? fm.name : entry;
37
- skills.push({
38
- name,
39
- dirPath: fullPath,
40
- skillMdPath,
41
- frontmatter: fm,
42
- });
32
+ skills.push({ name, dirPath: fullPath, skillMdPath, frontmatter: fm });
43
33
  }
44
34
  catch {
45
35
  log.warn(` Skipped ${entry}/SKILL.md (parse error)`);
@@ -47,9 +37,6 @@ function scanSkills(baseDir) {
47
37
  }
48
38
  return skills;
49
39
  }
50
- /**
51
- * Ensure required frontmatter fields exist.
52
- */
53
40
  function ensureFrontmatter(skill, defaultAuthor) {
54
41
  const fm = skill.frontmatter;
55
42
  let modified = false;
@@ -58,9 +45,7 @@ function ensureFrontmatter(skill, defaultAuthor) {
58
45
  return false;
59
46
  }
60
47
  if (!Array.isArray(fm.tags) || fm.tags.length === 0) {
61
- // Auto-generate tags from path name
62
- const autoTags = [skill.name.split('-')[0] || skill.name];
63
- fm.tags = autoTags;
48
+ fm.tags = [skill.name.split('-')[0] || skill.name];
64
49
  modified = true;
65
50
  }
66
51
  if (!fm.author || typeof fm.author !== 'string') {
@@ -71,7 +56,6 @@ function ensureFrontmatter(skill, defaultAuthor) {
71
56
  fm.version = '1.0.0';
72
57
  modified = true;
73
58
  }
74
- // Write back if modified
75
59
  if (modified) {
76
60
  const raw = readFileSync(skill.skillMdPath, 'utf-8');
77
61
  const parsed = matter(raw);
@@ -80,40 +64,33 @@ function ensureFrontmatter(skill, defaultAuthor) {
80
64
  }
81
65
  return true;
82
66
  }
83
- /**
84
- * Publish all skills in a directory.
85
- */
86
67
  export async function publishAllSkills(dir, options) {
87
68
  const baseDir = dir.startsWith('/') ? dir : join(process.cwd(), dir);
88
69
  const defaultAuthor = options.author || 'anthropic';
89
- intro(chalk.green('📤 TransSkill Batch Publish'));
90
- // Step 1: Scan for skills
70
+ intro(chalk.green('📤 TransSkill Batch Publish (v2 — links only)'));
91
71
  const spin = spinner();
92
72
  spin.start(`Scanning ${baseDir}…`);
93
73
  const skills = scanSkills(baseDir);
94
74
  spin.stop(`Found ${skills.length} skill(s)`);
95
75
  if (skills.length === 0) {
96
- log.info('No skills found (directories must contain SKILL.md)');
76
+ log.info('No skills found');
97
77
  outro('Done');
98
78
  return;
99
79
  }
100
- // List skills
101
80
  console.log('');
102
81
  for (const s of skills) {
103
82
  const hasTags = Array.isArray(s.frontmatter.tags) && s.frontmatter.tags.length > 0;
104
83
  const hasAuthor = typeof s.frontmatter.author === 'string';
105
- const isComplete = hasTags && hasAuthor;
106
- console.log(` ${isComplete ? chalk.green('✓') : chalk.yellow('~')} ${chalk.bold(s.name)}` +
107
- `${hasTags ? '' : chalk.gray(' [no tags]')}` +
108
- `${hasAuthor ? '' : chalk.gray(' [no author]')}`);
84
+ const ok = hasTags && hasAuthor;
85
+ console.log(` ${ok ? chalk.green('✓') : chalk.yellow('~')} ${chalk.bold(s.name)}` +
86
+ `${hasTags ? '' : chalk.gray(' [no tags]')}${hasAuthor ? '' : chalk.gray(' [no author]')}`);
109
87
  }
110
88
  console.log('');
111
- // Confirm
112
89
  if (!options.dryRun && !options.force) {
113
90
  const proceed = await confirm({
114
- message: `Publish ${skills.length} skill(s) to ${chalk.cyan(`${REGISTRY_OWNER}/${REGISTRY_REPO}`)}?`,
115
- active: 'Yes, publish all',
116
- inactive: 'No, cancel',
91
+ message: `Submit ${skills.length} link(s) to ${chalk.cyan(`${REGISTRY_OWNER}/${REGISTRY_REPO}`)}?`,
92
+ active: 'Yes',
93
+ inactive: 'No',
117
94
  initialValue: false,
118
95
  });
119
96
  if (!proceed) {
@@ -121,49 +98,33 @@ export async function publishAllSkills(dir, options) {
121
98
  return;
122
99
  }
123
100
  }
124
- // Step 2: Process each skill
125
101
  let succeeded = 0;
126
102
  let skipped = 0;
127
103
  let failed = 0;
128
104
  for (const skill of skills) {
129
105
  console.log('');
130
106
  console.log(chalk.cyan(`── ${skill.name} ──`));
131
- // Ensure frontmatter
132
107
  if (!ensureFrontmatter(skill, defaultAuthor)) {
133
108
  skipped++;
134
109
  continue;
135
110
  }
136
111
  if (options.dryRun) {
137
- console.log(` ${chalk.gray('→ would publish')}`);
112
+ console.log(` ${chalk.gray('→ would submit link to registry.json')}`);
138
113
  succeeded++;
139
114
  continue;
140
115
  }
141
- // Publish via the existing publish flow
142
116
  try {
143
- // Dynamic import to avoid circular dependency
144
117
  const { publishSkill } = await import('./publish.js');
145
- try {
146
- await publishSkill(skill.dirPath, {
147
- force: true,
148
- dryRun: false,
149
- });
150
- succeeded++;
151
- }
152
- catch (pErr) {
153
- // PublishError means messages already printed, just count as failure
154
- failed++;
155
- }
118
+ await publishSkill(skill.dirPath, { force: true, dryRun: false });
119
+ succeeded++;
156
120
  }
157
- catch (err) {
158
- const message = err instanceof Error ? err.message : String(err);
159
- log.error(` Failed: ${message}`);
121
+ catch {
160
122
  failed++;
161
123
  }
162
124
  }
163
- // Summary
164
125
  console.log('');
165
126
  console.log(chalk.gray('─'.repeat(40)));
166
- console.log(` ${chalk.green(`✓ ${succeeded} published`)}${skipped > 0 ? chalk.yellow(`, ${skipped} skipped`) : ''}${failed > 0 ? chalk.red(`, ${failed} failed`) : ''}`);
127
+ console.log(` ${chalk.green(`✓ ${succeeded} submitted`)}${skipped > 0 ? chalk.yellow(`, ${skipped} skipped`) : ''}${failed > 0 ? chalk.red(`, ${failed} failed`) : ''}`);
167
128
  outro('Batch publish complete');
168
129
  }
169
130
  //# sourceMappingURL=publish-all.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publish-all.js","sourceRoot":"","sources":["../../src/marketplace/publish-all.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish-all.js","sourceRoot":"","sources":["../../src/marketplace/publish-all.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,8 @@
1
1
  /**
2
- * Publish command — audit, fork, and PR a skill to the registry.
2
+ * Publish command — v2: lightweight link submission.
3
3
  *
4
- * Flow:
5
- * 1. Validate skill directory (SKILL.md + frontmatter)
6
- * 2. Parse + audit (mandatory, score >= 90 unless --force)
7
- * 3. GitHub API: fork → branch → upload SKILL.md → update registry.json → PR
4
+ * No more file uploads. Publishing a skill just adds a link entry
5
+ * to registry.json pointing to the original source.
8
6
  */
9
7
  /** Error thrown to abort publish (messages already printed via log/outro). */
10
8
  export declare class PublishError extends Error {
@@ -13,9 +11,13 @@ export declare class PublishError extends Error {
13
11
  export interface PublishOptions {
14
12
  force?: boolean;
15
13
  dryRun?: boolean;
14
+ /** Override source URL (default: GitHub path of the skill) */
15
+ sourceUrl?: string;
16
+ /** Override download URL (default: raw GitHub SKILL.md) */
17
+ downloadUrl?: string;
16
18
  }
17
19
  /**
18
- * Publish a skill directory to the registry.
20
+ * Publish a skill validate, then PR a link to the registry index.
19
21
  */
20
22
  export declare function publishSkill(skillPath: string, options: PublishOptions): Promise<void>;
21
23
  //# sourceMappingURL=publish.d.ts.map