@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 CHANGED
@@ -1,33 +1,35 @@
1
1
  # @birdie_moblie/plugin-marketplace-cli
2
2
 
3
- CLI for maintaining plugin marketplace repositories compatible with Claude Code and Codex.
3
+ 这是用于维护 Claude Code / Codex plugin marketplace 仓库的 CLI。它负责创建插件骨架、验证 `plugin.yaml`、生成平台 manifest、更新 marketplace 索引,并打出本地发布包。
4
4
 
5
- ## Install
5
+ ## 使用公网 CLI
6
6
 
7
7
  ```bash
8
- npm install --save-dev @birdie_moblie/plugin-marketplace-cli
8
+ npx @birdie_moblie/plugin-marketplace-cli --help
9
9
  ```
10
10
 
11
- ## Commands
11
+ ## 常用命令
12
12
 
13
13
  ```bash
14
- plugin-marketplace init-repo [name] --organization "Team Name"
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
- Use `--root <dir>` to operate on a marketplace repository from another directory:
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
- Without `--root`, the CLI searches upward from the current working directory for `marketplace.yaml`.
28
+ 不传 `--root` 时,CLI 会从当前工作目录向上查找 `marketplace.yaml`。除 `init-repo` 外,找不到 `marketplace.yaml` 会直接报错并提示先初始化仓库。
29
+
30
+ 如果已经本地或全局安装该 npm 包,也可以直接使用 `plugin-marketplace` bin 运行同一组命令。
29
31
 
30
- ## Repository Layout
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` is the source of truth for each plugin. Generated manifest files must be committed when the repository itself is used as a marketplace source:
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
- ## Suggested Scripts
59
+ ## 推荐脚本
56
60
 
57
- `plugin-marketplace init-repo` writes these scripts into new repositories:
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
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * plugin-marketplace CLI — Plugin Marketplace 管理工具
3
+ * plugin-marketplace CLI — 插件市场管理工具
4
4
  *
5
5
  * 命令:
6
6
  * plugin-marketplace init-repo [name] 创建新插件仓库
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * plugin-marketplace CLI — Plugin Marketplace 管理工具
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('Plugin Marketplace CLI — 管理兼容 Claude Code 和 Codex 的插件仓库')
27
- .version('1.0.0')
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>', 'Marketplace owner / organization 名称')
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;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,IAAI,EAAqB,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,oBAAoB,CAAC;KAC1B,WAAW,CAAC,yDAAyD,CAAC;KACtE,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,cAAc,EAAE,sCAAsC,CAAC,CAAC;AAElE,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,uBAAuB,EAAE,qCAAqC,CAAC;KACtE,MAAM,CAAC,CAAC,IAAwB,EAAE,OAAkC,EAAE,EAAE,CACvE,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CACtD,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,SAAS,CAAC;KACtB,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,OAAO,CAAC;KAC9D,MAAM,CAAC,CAAC,IAAY,EAAE,OAAyB,EAAE,EAAE,CAClD,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CAClD,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,QAAQ,CAAC;KACrB,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC;KAC7B,MAAM,CAAC,CAAC,IAAwB,EAAE,OAAyB,EAAE,EAAE,CAC9D,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CACtD,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC;KAC7B,MAAM,CAAC,CAAC,IAAwB,EAAE,OAAyB,EAAE,EAAE,CAC9D,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CACnD,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;AAErD,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,SAAS,CAAC;KACtB,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;AAEzD,OAAO,CAAC,KAAK,EAAE,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 (compatibility mirror)'));
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 = `# Plugin Catalog\n\n${pluginList}\n\n_Auto-generated. Do not edit manually._\n`;
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":"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,6CAA6C,CAAC,CAAC,CAAC;IAExE,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,uBAAuB,UAAU,+CAA+C,CAAC;IACnG,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"}
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"}
@@ -3,5 +3,6 @@
3
3
  */
4
4
  export declare function runInitRepo(name: string | undefined, options: {
5
5
  organization?: string;
6
+ skill?: boolean;
6
7
  root?: string;
7
8
  }): void;
@@ -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: 'plugin-marketplace',
11
- 'validate:plugins': 'plugin-marketplace validate --all',
12
- 'build:plugins': 'plugin-marketplace build --all',
13
- 'build:index': 'plugin-marketplace 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': 'npm run ci:local && plugin-marketplace release-local',
18
+ 'release:local': `npm run ci:local && ${CLI_RUNNER} release-local`,
17
19
  };
18
20
  function marketplaceYaml(name, organization) {
19
- return `# Marketplace metadata
21
+ return `# Marketplace 元数据
20
22
 
21
23
  name: ${name}
22
- description: "${toTitleCase(name)} plugin marketplace"
24
+ description: "${toTitleCase(name)} 插件市场"
23
25
  organization: "${organization}"
24
26
 
25
27
  categories:
26
28
  - id: tooling
27
- label: "Tooling"
28
- description: "Development tools and scaffolding"
29
+ label: "工具"
30
+ description: "开发工具和脚手架"
29
31
  - id: integration
30
- label: "Integration"
31
- description: "Third-party service connectors"
32
+ label: "集成"
33
+ description: "第三方服务连接器"
32
34
  - id: quality
33
- label: "Quality"
34
- description: "Quality checks and review workflows"
35
+ label: "质量"
36
+ description: "质量检查和审查工作流"
35
37
  - id: workflow
36
- label: "Workflow"
37
- description: "Automation workflows"
38
+ label: "工作流"
39
+ description: "自动化工作流"
38
40
  - id: general
39
- label: "General"
40
- description: "Other plugins"
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 (!packageJson.devDependencies[CLI_PACKAGE]) {
74
- packageJson.devDependencies[CLI_PACKAGE] = '^1.0.0';
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
- Plugin marketplace repository powered by \`${CLI_PACKAGE}\`.
86
+ 这是一个由 \`${CLI_PACKAGE}\` 维护的 plugin marketplace 仓库。
85
87
 
86
- ## Workflow
88
+ ## 常用流程
87
89
 
88
90
  \`\`\`bash
89
- npm install
90
- npm run mp -- init my-plugin
91
- npm run ci:local
92
- npm run release:local
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(' → npm install'));
114
- console.log(chalk.gray(' → npm run mp -- init my-plugin'));
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":"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"}
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,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAE7E,MAAM,WAAW,GAAG,uCAAuC,CAAC;AAC5D,MAAM,UAAU,GAAG,OAAO,WAAW,EAAE,CAAC;AAWxC,MAAM,eAAe,GAA2B;IAC9C,EAAE,EAAE,UAAU;IACd,kBAAkB,EAAE,GAAG,UAAU,iBAAiB;IAClD,eAAe,EAAE,GAAG,UAAU,cAAc;IAC5C,aAAa,EAAE,GAAG,UAAU,QAAQ;IACpC,WAAW,EAAE,8CAA8C;IAC3D,UAAU,EAAE,+CAA+C;IAC3D,eAAe,EAAE,uBAAuB,UAAU,gBAAgB;CACnE,CAAC;AAEF,SAAS,eAAe,CAAC,IAAY,EAAE,YAAoB;IACzD,OAAO;;QAED,IAAI;gBACI,WAAW,CAAC,IAAI,CAAC;iBAChB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;CAwB5B,CAAC;AACF,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IAC1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAqB,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,IAAY;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAClD,MAAM,WAAW,GAAgB,UAAU,CAAC,WAAW,CAAC;QACtD,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC;QAC9B,CAAC,CAAC;YACE,IAAI;YACJ,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,IAAI;SACd,CAAC;IAEN,WAAW,CAAC,OAAO,GAAG;QACpB,GAAG,eAAe;QAClB,GAAG,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC;KAC/B,CAAC;IAEF,WAAW,CAAC,eAAe,GAAG;QAC5B,GAAG,CAAC,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC;KACvC,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,WAAW,CAAC,eAAe,CAAC;IACrC,CAAC;IAED,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,IAAY;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC9C,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO;IAEnC,MAAM,MAAM,GAAG,KAAK,WAAW,CAAC,IAAI,CAAC;;UAE7B,WAAW;;;;;MAKf,WAAW;MACX,WAAW;MACX,WAAW;MACX,WAAW;;CAEhB,CAAC;IAEA,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAOD,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,OAAO,GAAG;QACd,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,wBAAwB,CAAC;QAC5D,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,wBAAwB,CAAC;KAC7D,CAAC;IACF,MAAM,MAAM,GAAsB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAE/D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,aAAa,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,IAAwB,EACxB,OAAkE;IAElE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAChG,MAAM,eAAe,GAAG,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,WAAW,CAAC,eAAe,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAE1D,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,eAAe,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,eAAe,EAAE,CAAC,CAAC,CAAC;IAE3E,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,aAAa,CAAC,eAAe,EAAE,eAAe,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC;IAC/E,iBAAiB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC5C,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAEvC,MAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC;IAClD,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAC/D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;YACvE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,iBAAiB,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,iBAAiB,CAAC,CAAC,CAAC;AACnE,CAAC"}
@@ -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.0",
3
+ "version": "1.0.1",
4
4
  "private": false,
5
- "description": "CLI for maintaining Claude Code and Codex plugin marketplace repositories",
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
- "build": "npm run clean && tsc",
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": {