@birdie_moblie/plugin-marketplace-cli 1.0.0 → 1.0.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.md +49 -22
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +48 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/index-gen.js +2 -2
- package/dist/commands/index-gen.js.map +1 -1
- package/dist/commands/init-repo.d.ts +1 -0
- package/dist/commands/init-repo.js +64 -28
- package/dist/commands/init-repo.js.map +1 -1
- package/dist/generated/skill-content.d.ts +1 -0
- package/dist/generated/skill-content.js +4 -0
- package/dist/generated/skill-content.js.map +1 -0
- package/package.json +7 -4
package/README.md
CHANGED
|
@@ -1,33 +1,35 @@
|
|
|
1
1
|
# @birdie_moblie/plugin-marketplace-cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
这是用于维护 Claude Code / Codex plugin marketplace 仓库的 CLI。它负责创建插件骨架、验证 `plugin.yaml`、生成平台 manifest、更新 marketplace 索引,并打出本地发布包。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 使用公网 CLI
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
8
|
+
npx @birdie_moblie/plugin-marketplace-cli --help
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## 常用命令
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
plugin-marketplace init-repo [name] --organization "
|
|
15
|
-
plugin-marketplace init <plugin-name> --type <skill|mcp|hook>
|
|
16
|
-
plugin-marketplace validate [plugin-name] --all
|
|
17
|
-
plugin-marketplace build [plugin-name] --all
|
|
18
|
-
plugin-marketplace index
|
|
19
|
-
plugin-marketplace release-local
|
|
14
|
+
npx @birdie_moblie/plugin-marketplace-cli init-repo [name] --organization "团队名" [--no-skill]
|
|
15
|
+
npx @birdie_moblie/plugin-marketplace-cli init <plugin-name> --type <skill|mcp|hook>
|
|
16
|
+
npx @birdie_moblie/plugin-marketplace-cli validate [plugin-name] --all
|
|
17
|
+
npx @birdie_moblie/plugin-marketplace-cli build [plugin-name] --all
|
|
18
|
+
npx @birdie_moblie/plugin-marketplace-cli index
|
|
19
|
+
npx @birdie_moblie/plugin-marketplace-cli release-local
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
从其他目录操作指定仓库时,使用 `--root <dir>`:
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
plugin-marketplace --root /path/to/repo validate --all
|
|
25
|
+
npx @birdie_moblie/plugin-marketplace-cli --root /path/to/repo validate --all
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
不传 `--root` 时,CLI 会从当前工作目录向上查找 `marketplace.yaml`。除 `init-repo` 外,找不到 `marketplace.yaml` 会直接报错并提示先初始化仓库。
|
|
29
|
+
|
|
30
|
+
如果已经本地或全局安装该 npm 包,也可以直接使用 `plugin-marketplace` bin 运行同一组命令。
|
|
29
31
|
|
|
30
|
-
##
|
|
32
|
+
## 插件仓库结构
|
|
31
33
|
|
|
32
34
|
```text
|
|
33
35
|
.
|
|
@@ -36,12 +38,14 @@ Without `--root`, the CLI searches upward from the current working directory for
|
|
|
36
38
|
│ └── my-plugin/
|
|
37
39
|
│ ├── plugin.yaml
|
|
38
40
|
│ └── skills/
|
|
41
|
+
├── .agents/skills/marketplace-maintainer/SKILL.md
|
|
42
|
+
├── .claude/skills/marketplace-maintainer/SKILL.md
|
|
39
43
|
├── .claude-plugin/marketplace.json
|
|
40
44
|
├── .agents/plugins/marketplace.json
|
|
41
45
|
└── marketplace.json
|
|
42
46
|
```
|
|
43
47
|
|
|
44
|
-
`plugin.yaml`
|
|
48
|
+
每个插件以 `plugin.yaml` 为唯一来源。仓库本身要作为 marketplace 源使用时,以下生成物需要随源码一起提交:
|
|
45
49
|
|
|
46
50
|
- `.claude-plugin/marketplace.json`
|
|
47
51
|
- `.agents/plugins/marketplace.json`
|
|
@@ -52,20 +56,43 @@ Without `--root`, the CLI searches upward from the current working directory for
|
|
|
52
56
|
- `marketplace.json`
|
|
53
57
|
- `plugins/CATALOG.md`
|
|
54
58
|
|
|
55
|
-
##
|
|
59
|
+
## 推荐脚本
|
|
56
60
|
|
|
57
|
-
`plugin-marketplace init-repo`
|
|
61
|
+
`plugin-marketplace init-repo` 会给新仓库写入一组 npm scripts,并默认注入 `marketplace-maintainer`
|
|
62
|
+
SKILL 到 `.agents/skills/` 和 `.claude/skills/`,方便维护者继续创建、验证和发布插件。如需只生成基础仓库结构,可传 `--no-skill`。这些 scripts 默认调用公网 `npx`,不要求先执行 `npm install`:
|
|
58
63
|
|
|
59
64
|
```json
|
|
60
65
|
{
|
|
61
66
|
"scripts": {
|
|
62
|
-
"mp": "plugin-marketplace",
|
|
63
|
-
"validate:plugins": "plugin-marketplace validate --all",
|
|
64
|
-
"build:plugins": "plugin-marketplace build --all",
|
|
65
|
-
"build:index": "plugin-marketplace index",
|
|
67
|
+
"mp": "npx @birdie_moblie/plugin-marketplace-cli",
|
|
68
|
+
"validate:plugins": "npx @birdie_moblie/plugin-marketplace-cli validate --all",
|
|
69
|
+
"build:plugins": "npx @birdie_moblie/plugin-marketplace-cli build --all",
|
|
70
|
+
"build:index": "npx @birdie_moblie/plugin-marketplace-cli index",
|
|
66
71
|
"build:all": "npm run build:plugins && npm run build:index",
|
|
67
72
|
"ci:local": "npm run validate:plugins && npm run build:all",
|
|
68
|
-
"release:local": "npm run ci:local && plugin-marketplace release-local"
|
|
73
|
+
"release:local": "npm run ci:local && npx @birdie_moblie/plugin-marketplace-cli release-local"
|
|
69
74
|
}
|
|
70
75
|
}
|
|
71
76
|
```
|
|
77
|
+
|
|
78
|
+
如果某个仓库需要固定 CLI 版本,或希望离线维护插件目录,可以手动把 CLI 加为 devDependency:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npm install --save-dev @birdie_moblie/plugin-marketplace-cli
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## 维护 CLI 源码
|
|
85
|
+
|
|
86
|
+
只有需要修改、测试或重新发布 `@birdie_moblie/plugin-marketplace-cli` 时才进入 `tools/`:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
cd tools
|
|
90
|
+
npm install
|
|
91
|
+
npm run build
|
|
92
|
+
npm run mp -- --root .. validate --all
|
|
93
|
+
npm run mp -- --root .. build --all
|
|
94
|
+
npm run mp -- --root .. index
|
|
95
|
+
npm pack --dry-run
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
仓库根目录使用的是已发布 CLI 包。根目录 scripts 用于维护当前插件目录,不用于验证 `tools/` 里尚未发布的源码改动。
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* plugin-marketplace CLI —
|
|
3
|
+
* plugin-marketplace CLI — 插件市场管理工具
|
|
4
4
|
*
|
|
5
5
|
* 命令:
|
|
6
6
|
* plugin-marketplace init-repo [name] 创建新插件仓库
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
* plugin-marketplace index 生成 marketplace 索引
|
|
11
11
|
* plugin-marketplace release-local 组装本地发布包
|
|
12
12
|
*/
|
|
13
|
+
import { readFileSync } from 'node:fs';
|
|
14
|
+
import { dirname, join } from 'node:path';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
13
16
|
import { Command } from 'commander';
|
|
14
17
|
import { runInitRepo } from './commands/init-repo.js';
|
|
15
18
|
import { runInit } from './commands/init.js';
|
|
@@ -21,15 +24,56 @@ const program = new Command();
|
|
|
21
24
|
function rootOption() {
|
|
22
25
|
return program.opts().root;
|
|
23
26
|
}
|
|
27
|
+
function readPackageVersion() {
|
|
28
|
+
const packagePath = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
|
|
29
|
+
const raw = readFileSync(packagePath, 'utf-8');
|
|
30
|
+
const parsed = JSON.parse(raw);
|
|
31
|
+
return parsed.version || '0.0.0';
|
|
32
|
+
}
|
|
33
|
+
const helpTitleMap = {
|
|
34
|
+
'Usage:': '用法:',
|
|
35
|
+
'Arguments:': '参数:',
|
|
36
|
+
'Options:': '选项:',
|
|
37
|
+
'Global Options:': '全局选项:',
|
|
38
|
+
'Commands:': '命令:',
|
|
39
|
+
};
|
|
40
|
+
function formatOptionDescription(option) {
|
|
41
|
+
const extraInfo = [];
|
|
42
|
+
if (option.argChoices) {
|
|
43
|
+
extraInfo.push(`可选值: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);
|
|
44
|
+
}
|
|
45
|
+
if (option.defaultValue !== undefined) {
|
|
46
|
+
const showDefault = option.required ||
|
|
47
|
+
option.optional ||
|
|
48
|
+
(option.isBoolean() && typeof option.defaultValue === 'boolean');
|
|
49
|
+
if (showDefault) {
|
|
50
|
+
extraInfo.push(`默认值: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (option.presetArg !== undefined && option.optional) {
|
|
54
|
+
extraInfo.push(`预设值: ${JSON.stringify(option.presetArg)}`);
|
|
55
|
+
}
|
|
56
|
+
if (option.envVar !== undefined) {
|
|
57
|
+
extraInfo.push(`环境变量: ${option.envVar}`);
|
|
58
|
+
}
|
|
59
|
+
return extraInfo.length > 0 ? `${option.description} (${extraInfo.join(', ')})` : option.description;
|
|
60
|
+
}
|
|
24
61
|
program
|
|
25
62
|
.name('plugin-marketplace')
|
|
26
|
-
.description('
|
|
27
|
-
.version('
|
|
63
|
+
.description('管理兼容 Claude Code 和 Codex 的 plugin marketplace 仓库')
|
|
64
|
+
.version(readPackageVersion(), '-V, --version', '显示版本号')
|
|
65
|
+
.helpOption('-h, --help', '显示帮助')
|
|
66
|
+
.addHelpCommand('help [command]', '显示指定命令的帮助')
|
|
67
|
+
.configureHelp({
|
|
68
|
+
optionDescription: formatOptionDescription,
|
|
69
|
+
styleTitle: (title) => helpTitleMap[title] || title,
|
|
70
|
+
})
|
|
28
71
|
.option('--root <dir>', '插件仓库根目录;默认从当前目录向上查找 marketplace.yaml');
|
|
29
72
|
program
|
|
30
73
|
.command('init-repo [name]')
|
|
31
74
|
.description('创建新的 plugin marketplace 仓库')
|
|
32
|
-
.option('--organization <name>', '
|
|
75
|
+
.option('--organization <name>', 'marketplace 所属组织名称')
|
|
76
|
+
.option('--no-skill', '跳过注入 marketplace-maintainer SKILL')
|
|
33
77
|
.action((name, options) => runInitRepo(name, { ...options, root: rootOption() }));
|
|
34
78
|
program
|
|
35
79
|
.command('init <name>')
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,12 +59,12 @@ export function runIndexGen(options = {}) {
|
|
|
59
59
|
console.log(chalk.green(' ✓ .agents/plugins/marketplace.json (Codex)'));
|
|
60
60
|
// ── 根目录兼容镜像 ──
|
|
61
61
|
writeJson(join(context.rootDir, 'marketplace.json'), codexMarketplace);
|
|
62
|
-
console.log(chalk.green(' ✓ marketplace.json (
|
|
62
|
+
console.log(chalk.green(' ✓ marketplace.json (兼容镜像)'));
|
|
63
63
|
// ── 人类可读目录 ──
|
|
64
64
|
const pluginList = plugins
|
|
65
65
|
.map(({ name, config }) => `- **${name}** (v${config.version}): ${config.description}`)
|
|
66
66
|
.join('\n');
|
|
67
|
-
const catalogMd = `#
|
|
67
|
+
const catalogMd = `# 插件目录\n\n${pluginList}\n\n_由 CLI 自动生成,请勿手动编辑。_\n`;
|
|
68
68
|
writeFileSync(join(context.pluginsDir, 'CATALOG.md'), catalogMd);
|
|
69
69
|
console.log(chalk.green(' ✓ plugins/CATALOG.md'));
|
|
70
70
|
console.log(chalk.green(`\n✓ 索引生成完成 (${plugins.length} 个插件)`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-gen.js","sourceRoot":"","sources":["../../src/commands/index-gen.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index-gen.js","sourceRoot":"","sources":["../../src/commands/index-gen.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,SAAS,SAAS,CAAC,IAAY,EAAE,KAAc;IAC7C,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAA6B,EAAE;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAErD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,MAAM,sBAAsB,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,IAAI,sBAAsB,CAAC;IAErE,gCAAgC;IAChC,MAAM,iBAAiB,GAAG;QACxB,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;SAChB;QACD,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,aAAa,IAAI,EAAE;YAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE;gBACN,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;gBACxB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D;YACD,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC,CAAC;KACJ,CAAC;IAEF,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,iCAAiC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAE9E,0BAA0B;IAC1B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CACpD,qBAAqB,CAAC,MAAM,EAAE,aAAa,IAAI,EAAE,CAAC,CACnD,CAAC;IAEF,MAAM,gBAAgB,GAAG;QACvB,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,SAAS,EAAE;YACT,WAAW,EAAE,sBAAsB;SACpC;QACD,OAAO,EAAE,YAAY;KACtB,CAAC;IAEF,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,kCAAkC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;IAEzE,gBAAgB;IAChB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAExD,eAAe;IACf,MAAM,UAAU,GAAG,OAAO;SACvB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,OAAO,IAAI,QAAQ,MAAM,CAAC,OAAO,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;SACtF,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,SAAS,GAAG,aAAa,UAAU,4BAA4B,CAAC;IACtE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -2,42 +2,44 @@
|
|
|
2
2
|
* init-repo 命令 — 创建新的 plugin marketplace 仓库
|
|
3
3
|
*/
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
5
|
-
import { basename, join } from 'node:path';
|
|
5
|
+
import { basename, join, relative } from 'node:path';
|
|
6
6
|
import chalk from 'chalk';
|
|
7
7
|
import { resolveInvocationPath, toTitleCase } from '../utils/helpers.js';
|
|
8
|
+
import { MARKETPLACE_MAINTAINER_SKILL } from '../generated/skill-content.js';
|
|
8
9
|
const CLI_PACKAGE = '@birdie_moblie/plugin-marketplace-cli';
|
|
10
|
+
const CLI_RUNNER = `npx ${CLI_PACKAGE}`;
|
|
9
11
|
const DEFAULT_SCRIPTS = {
|
|
10
|
-
mp:
|
|
11
|
-
'validate:plugins':
|
|
12
|
-
'build:plugins':
|
|
13
|
-
'build:index':
|
|
12
|
+
mp: CLI_RUNNER,
|
|
13
|
+
'validate:plugins': `${CLI_RUNNER} validate --all`,
|
|
14
|
+
'build:plugins': `${CLI_RUNNER} build --all`,
|
|
15
|
+
'build:index': `${CLI_RUNNER} index`,
|
|
14
16
|
'build:all': 'npm run build:plugins && npm run build:index',
|
|
15
17
|
'ci:local': 'npm run validate:plugins && npm run build:all',
|
|
16
|
-
'release:local':
|
|
18
|
+
'release:local': `npm run ci:local && ${CLI_RUNNER} release-local`,
|
|
17
19
|
};
|
|
18
20
|
function marketplaceYaml(name, organization) {
|
|
19
|
-
return `# Marketplace
|
|
21
|
+
return `# Marketplace 元数据
|
|
20
22
|
|
|
21
23
|
name: ${name}
|
|
22
|
-
description: "${toTitleCase(name)}
|
|
24
|
+
description: "${toTitleCase(name)} 插件市场"
|
|
23
25
|
organization: "${organization}"
|
|
24
26
|
|
|
25
27
|
categories:
|
|
26
28
|
- id: tooling
|
|
27
|
-
label: "
|
|
28
|
-
description: "
|
|
29
|
+
label: "工具"
|
|
30
|
+
description: "开发工具和脚手架"
|
|
29
31
|
- id: integration
|
|
30
|
-
label: "
|
|
31
|
-
description: "
|
|
32
|
+
label: "集成"
|
|
33
|
+
description: "第三方服务连接器"
|
|
32
34
|
- id: quality
|
|
33
|
-
label: "
|
|
34
|
-
description: "
|
|
35
|
+
label: "质量"
|
|
36
|
+
description: "质量检查和审查工作流"
|
|
35
37
|
- id: workflow
|
|
36
|
-
label: "
|
|
37
|
-
description: "
|
|
38
|
+
label: "工作流"
|
|
39
|
+
description: "自动化工作流"
|
|
38
40
|
- id: general
|
|
39
|
-
label: "
|
|
40
|
-
description: "
|
|
41
|
+
label: "通用"
|
|
42
|
+
description: "其他插件"
|
|
41
43
|
|
|
42
44
|
platforms:
|
|
43
45
|
- name: "Claude Code"
|
|
@@ -70,8 +72,8 @@ function ensurePackageJson(rootDir, name) {
|
|
|
70
72
|
packageJson.devDependencies = {
|
|
71
73
|
...(packageJson.devDependencies || {}),
|
|
72
74
|
};
|
|
73
|
-
if (
|
|
74
|
-
packageJson.devDependencies
|
|
75
|
+
if (Object.keys(packageJson.devDependencies).length === 0) {
|
|
76
|
+
delete packageJson.devDependencies;
|
|
75
77
|
}
|
|
76
78
|
writeFileSync(packagePath, JSON.stringify(packageJson, null, 2) + '\n');
|
|
77
79
|
}
|
|
@@ -81,19 +83,37 @@ function ensureReadme(rootDir, name) {
|
|
|
81
83
|
return;
|
|
82
84
|
const readme = `# ${toTitleCase(name)}
|
|
83
85
|
|
|
84
|
-
|
|
86
|
+
这是一个由 \`${CLI_PACKAGE}\` 维护的 plugin marketplace 仓库。
|
|
85
87
|
|
|
86
|
-
##
|
|
88
|
+
## 常用流程
|
|
87
89
|
|
|
88
90
|
\`\`\`bash
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
npx ${CLI_PACKAGE} init my-plugin
|
|
92
|
+
npx ${CLI_PACKAGE} validate --all
|
|
93
|
+
npx ${CLI_PACKAGE} build --all
|
|
94
|
+
npx ${CLI_PACKAGE} index
|
|
93
95
|
\`\`\`
|
|
94
96
|
`;
|
|
95
97
|
writeFileSync(readmePath, readme);
|
|
96
98
|
}
|
|
99
|
+
function injectSkill(rootDir) {
|
|
100
|
+
const targets = [
|
|
101
|
+
join(rootDir, '.agents', 'skills', 'marketplace-maintainer'),
|
|
102
|
+
join(rootDir, '.claude', 'skills', 'marketplace-maintainer'),
|
|
103
|
+
];
|
|
104
|
+
const result = { written: [], skipped: [] };
|
|
105
|
+
for (const dir of targets) {
|
|
106
|
+
const skillPath = join(dir, 'SKILL.md');
|
|
107
|
+
if (existsSync(skillPath)) {
|
|
108
|
+
result.skipped.push(skillPath);
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
mkdirSync(dir, { recursive: true });
|
|
112
|
+
writeFileSync(skillPath, MARKETPLACE_MAINTAINER_SKILL);
|
|
113
|
+
result.written.push(skillPath);
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
97
117
|
export function runInitRepo(name, options) {
|
|
98
118
|
const rootDir = options.root ? resolveInvocationPath(options.root) : resolveInvocationPath('.');
|
|
99
119
|
const marketplaceName = name || basename(rootDir);
|
|
@@ -109,8 +129,24 @@ export function runInitRepo(name, options) {
|
|
|
109
129
|
writeFileSync(marketplacePath, marketplaceYaml(marketplaceName, organization));
|
|
110
130
|
ensurePackageJson(rootDir, marketplaceName);
|
|
111
131
|
ensureReadme(rootDir, marketplaceName);
|
|
132
|
+
const shouldInjectSkill = options.skill !== false;
|
|
133
|
+
if (shouldInjectSkill) {
|
|
134
|
+
const result = injectSkill(rootDir);
|
|
135
|
+
if (result.written.length > 0) {
|
|
136
|
+
console.log(chalk.green('✓ 已注入 marketplace-maintainer SKILL'));
|
|
137
|
+
for (const path of result.written) {
|
|
138
|
+
console.log(chalk.gray(` → ${relative(rootDir, path)}`));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (result.skipped.length > 0) {
|
|
142
|
+
console.log(chalk.yellow('! marketplace-maintainer SKILL 已存在,保留现有文件'));
|
|
143
|
+
for (const path of result.skipped) {
|
|
144
|
+
console.log(chalk.gray(` → ${relative(rootDir, path)}`));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
112
148
|
console.log(chalk.green(`✓ 仓库初始化完成: ${rootDir}`));
|
|
113
|
-
console.log(chalk.gray(
|
|
114
|
-
console.log(chalk.gray(
|
|
149
|
+
console.log(chalk.gray(` → npx ${CLI_PACKAGE} init my-plugin`));
|
|
150
|
+
console.log(chalk.gray(` → npx ${CLI_PACKAGE} validate --all`));
|
|
115
151
|
}
|
|
116
152
|
//# sourceMappingURL=init-repo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-repo.js","sourceRoot":"","sources":["../../src/commands/init-repo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init-repo.js","sourceRoot":"","sources":["../../src/commands/init-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const MARKETPLACE_MAINTAINER_SKILL: string;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// 此文件由 scripts/generate-skill.ts 自动生成,请勿手动编辑
|
|
2
|
+
// 源头: plugins/marketplace-maintainer/skills/marketplace-maintainer/SKILL.md
|
|
3
|
+
export const MARKETPLACE_MAINTAINER_SKILL = "---\nname: marketplace-maintainer\ndescription: \"帮助团队在 plugin marketplace 插件目录中创建、验证和发布插件\"\nargument-hint: \"<plugin-name>\"\n---\n\n# Marketplace 维护助手\n\n此 skill 指导你在 plugin marketplace 插件目录仓库中创建、验证和发布插件。\n\n## 触发条件\n\n当用户需要以下操作时激活此 skill:\n- 创建一个新的 marketplace 插件\n- 验证现有插件的格式\n- 构建插件的平台兼容层\n- 更新 marketplace 索引\n\n## 前置准备\n\n1. 确认当前工作目录位于包含 `marketplace.yaml` 的 plugin marketplace 仓库内,或命令显式传入 `--root <dir>`\n2. 使用远程 marketplace / 插件时不需要 `npm install`\n3. 普通插件目录维护优先使用 `npx @birdie_moblie/plugin-marketplace-cli ...`\n4. 只有需要本地固定 CLI 版本或维护 CLI 源码时,才运行对应目录的 `npm install`\n\n## 创建新插件流程\n\n### 步骤 1:使用 CLI 创建骨架\n\n```bash\nnpx @birdie_moblie/plugin-marketplace-cli init <plugin-name> --type <skill|mcp|hook>\n```\n\n如果仓库已经配置了本地 `mp` script,也可以使用:\n\n```bash\nnpm run mp -- init <plugin-name> --type <skill|mcp|hook>\n```\n\n- `skill`:纯提示指令型插件(默认)\n- `mcp`:包含 MCP Server 配置的插件\n- `hook`:包含事件驱动脚本的插件\n\n### 步骤 2:编辑 plugin.yaml\n\n打开 `plugins/<plugin-name>/plugin.yaml`,完善以下必填字段:\n\n```yaml\nname: <plugin-name> # kebab-case,与目录名一致\nversion: \"0.1.0\" # semver 格式\ndescription: \"描述这个插件的功能\" # 支持中文\nauthor:\n name: \"团队名\"\n\ncategory: <类别> # tooling / integration / workflow / quality\ntags: [标签1, 标签2]\n\ncomponents:\n skills: # 至少一种组件类型\n - name: <skill-name>\n path: skills/<skill-name>\n description: \"skill 描述\"\n```\n\n### 步骤 3:编写 SKILL.md(如果是 skill 类型)\n\n编辑 `plugins/<plugin-name>/skills/<skill-name>/SKILL.md`:\n\n- 使用 YAML frontmatter 定义 `name` 和 `description`\n- 在 markdown 正文中编写 agent 执行指令\n- 指令应清晰、步骤化、可执行\n\n### 步骤 4:验证\n\n```bash\nnpx @birdie_moblie/plugin-marketplace-cli validate <plugin-name>\n```\n\n确保没有错误。常见检查项:\n- plugin.yaml schema 合法\n- 引用的 skill/hook 文件存在\n- name 与目录名一致\n\n### 步骤 5:构建双平台 manifest\n\n```bash\nnpx @birdie_moblie/plugin-marketplace-cli build <plugin-name>\n```\n\n这会自动生成:\n- `.claude-plugin/plugin.json` — Claude Code 兼容\n- `.codex-plugin/plugin.json` — Codex 兼容\n- `.mcp.json`(如有 MCP 组件)\n- `hooks/hooks.json`(如有 Hook 组件)\n\n### 步骤 6:更新索引\n\n```bash\nnpx @birdie_moblie/plugin-marketplace-cli index\n```\n\n这会更新:\n- `.claude-plugin/marketplace.json` — Claude Code 官方 marketplace manifest\n- `.agents/plugins/marketplace.json` — Codex 官方 repo marketplace manifest\n- `marketplace.json` — 根目录兼容镜像\n- `plugins/CATALOG.md` — 人类可读的插件目录\n\n### 步骤 7:提交\n\n将所有变更提交并发起 Merge Request。CI 会自动验证格式。\n\n需要创建一个全新的 plugin marketplace 仓库时,使用:\n\n```bash\nnpx @birdie_moblie/plugin-marketplace-cli init-repo <marketplace-name> --organization \"<团队名>\"\n```\n\n`init-repo` 会创建 `marketplace.yaml`、`plugins/`、最小 README,并为 `package.json` 补齐推荐 scripts。默认还会把本 SKILL 写入 `.agents/skills/` 和 `.claude/skills/`,让新仓库开箱即用地具备插件维护指引;如需跳过可传 `--no-skill`。生成的 scripts 默认使用 `npx @birdie_moblie/plugin-marketplace-cli`,新仓库不需要先 `npm install` 才能继续创建或验证插件。\n\n## plugin.yaml 完整字段参考\n\n```yaml\nname: string # 必填,kebab-case\nversion: string # 必填,semver\ndescription: string # 必填,支持中文\nauthor:\n name: string # 必填\n email: string # 可选\n url: string # 可选\n\ncategory: string # 可选,用于分类\ntags: string[] # 可选,用于搜索\n\ncomponents:\n skills: # Skill 组件列表\n - name: string\n path: string # 相对于插件根目录\n description: string\n argument-hint: string # 可选,slash command 参数提示\n\n mcp: # MCP Server 组件列表\n - name: string\n command: string # 启动命令\n args: string[] # 命令参数\n env: object # 环境变量\n description: string\n\n hooks: # Hook 组件列表\n - event: string # 事件名(PreToolUse, PostToolUse 等)\n pattern: string # 工具名匹配模式\n command: string # 脚本路径\n timeout: number # 超时(毫秒)\n\nplatform: # 可选的平台特有覆盖\n codex:\n interface:\n displayName: string\n shortDescription: string\n longDescription: string\n category: string\n developerName: string\n```\n";
|
|
4
|
+
//# sourceMappingURL=skill-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-content.js","sourceRoot":"","sources":["../../src/generated/skill-content.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,4EAA4E;AAE5E,MAAM,CAAC,MAAM,4BAA4B,GAAW,83HAA83H,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@birdie_moblie/plugin-marketplace-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "维护 Claude Code 和 Codex plugin marketplace 仓库的 CLI",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"bin": {
|
|
@@ -13,9 +13,12 @@
|
|
|
13
13
|
"README.md"
|
|
14
14
|
],
|
|
15
15
|
"scripts": {
|
|
16
|
-
"clean": "rm -rf dist tsconfig.tsbuildinfo",
|
|
17
|
-
"
|
|
16
|
+
"clean": "rm -rf dist src/generated tsconfig.tsbuildinfo",
|
|
17
|
+
"generate:skill": "tsx scripts/generate-skill.ts",
|
|
18
|
+
"build": "npm run clean && npm run generate:skill && tsc && chmod +x dist/cli.js",
|
|
19
|
+
"premp": "npm run generate:skill",
|
|
18
20
|
"mp": "tsx src/cli.ts",
|
|
21
|
+
"predev": "npm run generate:skill",
|
|
19
22
|
"dev": "tsx watch src/cli.ts"
|
|
20
23
|
},
|
|
21
24
|
"dependencies": {
|