@birdie_moblie/plugin-marketplace-cli 1.0.0 → 1.1.0
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/CHANGELOG.md +28 -0
- package/README.md +78 -22
- package/dist/adapters/claude.d.ts +17 -1
- package/dist/adapters/claude.js +37 -1
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/openspec.d.ts +66 -0
- package/dist/adapters/openspec.js +232 -0
- package/dist/adapters/openspec.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +49 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/build.js +2 -0
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/index-gen.js +34 -3
- 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/commands/init.d.ts +1 -1
- package/dist/commands/init.js +44 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/release-local.js +25 -0
- package/dist/commands/release-local.js.map +1 -1
- package/dist/commands/validate.js +232 -3
- package/dist/commands/validate.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/dist/schema/plugin-yaml.d.ts +14 -0
- package/dist/schema/plugin-yaml.js +38 -0
- package/dist/schema/plugin-yaml.js.map +1 -1
- package/package.json +13 -5
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,20 +24,61 @@ 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>')
|
|
36
80
|
.description('创建新插件骨架')
|
|
37
|
-
.option('-t, --type <type>', '插件类型: skill, mcp, hook', 'skill')
|
|
81
|
+
.option('-t, --type <type>', '插件类型: skill, mcp, lsp, hook', 'skill')
|
|
38
82
|
.action((name, options) => runInit(name, { ...options, root: rootOption() }));
|
|
39
83
|
program
|
|
40
84
|
.command('validate [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":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAe,MAAM,WAAW,CAAC;AACjD,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,SAAS,kBAAkB;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACxF,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;IACvD,OAAO,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC;AACnC,CAAC;AAED,MAAM,YAAY,GAA2B;IAC3C,QAAQ,EAAE,KAAK;IACf,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,KAAK;IACjB,iBAAiB,EAAE,OAAO;IAC1B,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,SAAS,uBAAuB,CAAC,MAAc;IAC7C,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,SAAS,CAAC,IAAI,CACZ,QAAQ,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,WAAW,GACf,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,QAAQ;YACf,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC;QACnE,IAAI,WAAW,EAAE,CAAC;YAChB,SAAS,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,uBAAuB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtD,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,SAAS,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;AACvG,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,oBAAoB,CAAC;KAC1B,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,kBAAkB,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC;KACvD,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC;KAChC,cAAc,CAAC,gBAAgB,EAAE,WAAW,CAAC;KAC7C,aAAa,CAAC;IACb,iBAAiB,EAAE,uBAAuB;IAC1C,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK;CACpD,CAAC;KACD,MAAM,CAAC,cAAc,EAAE,sCAAsC,CAAC,CAAC;AAElE,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,uBAAuB,EAAE,oBAAoB,CAAC;KACrD,MAAM,CAAC,YAAY,EAAE,mCAAmC,CAAC;KACzD,MAAM,CAAC,CAAC,IAAwB,EAAE,OAAkD,EAAE,EAAE,CACvF,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,6BAA6B,EAAE,OAAO,CAAC;KACnE,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"}
|
package/dist/commands/build.js
CHANGED
|
@@ -8,11 +8,13 @@ import chalk from 'chalk';
|
|
|
8
8
|
import { loadPluginYaml, listPluginNames, resolveRepoContext, } from '../utils/helpers.js';
|
|
9
9
|
import { generateClaude } from '../adapters/claude.js';
|
|
10
10
|
import { generateCodex } from '../adapters/codex.js';
|
|
11
|
+
import { generateOpenSpec } from '../adapters/openspec.js';
|
|
11
12
|
function buildOne(context, name) {
|
|
12
13
|
const pluginDir = join(context.pluginsDir, name);
|
|
13
14
|
const config = loadPluginYaml(pluginDir);
|
|
14
15
|
generateClaude(config, pluginDir);
|
|
15
16
|
generateCodex(config, pluginDir);
|
|
17
|
+
generateOpenSpec(config, pluginDir);
|
|
16
18
|
console.log(chalk.green(` ✓ ${name}`));
|
|
17
19
|
}
|
|
18
20
|
export function runBuild(name, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,cAAc,EACd,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,cAAc,EACd,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,SAAS,QAAQ,CAAC,OAA0B,EAAE,IAAY;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAEzC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,IAAwB,EACxB,OAAwC;IAExC,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,MAAM,uBAAuB,CAAC,CAAC,CAAC;IAErE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -9,10 +9,23 @@ import { join } from 'node:path';
|
|
|
9
9
|
import chalk from 'chalk';
|
|
10
10
|
import { loadAllPlugins, loadMarketplaceMetadata, resolveRepoContext, toTitleCase, } from '../utils/helpers.js';
|
|
11
11
|
import { buildMarketplaceEntry } from '../adapters/codex.js';
|
|
12
|
+
import { assertUniqueOpenSpecAdapterOperations, buildOpenSpecSourceAdapterIndexEntry, } from '../adapters/openspec.js';
|
|
12
13
|
function writeJson(path, value) {
|
|
13
14
|
mkdirSync(join(path, '..'), { recursive: true });
|
|
14
15
|
writeFileSync(path, JSON.stringify(value, null, 2) + '\n');
|
|
15
16
|
}
|
|
17
|
+
function listComponentLabels(config) {
|
|
18
|
+
const labels = [];
|
|
19
|
+
if (config.components.skills?.length)
|
|
20
|
+
labels.push('Skill');
|
|
21
|
+
if (config.components.mcp?.length)
|
|
22
|
+
labels.push('MCP');
|
|
23
|
+
if (config.components.lsp?.length)
|
|
24
|
+
labels.push('LSP');
|
|
25
|
+
if (config.components.hooks?.length)
|
|
26
|
+
labels.push('Hook');
|
|
27
|
+
return labels;
|
|
28
|
+
}
|
|
16
29
|
export function runIndexGen(options = {}) {
|
|
17
30
|
console.log(chalk.blue('⟳ 生成 marketplace 索引...\n'));
|
|
18
31
|
const context = resolveRepoContext(options.root);
|
|
@@ -42,6 +55,7 @@ export function runIndexGen(options = {}) {
|
|
|
42
55
|
},
|
|
43
56
|
...(config.category ? { category: config.category } : {}),
|
|
44
57
|
...(config.tags?.length ? { tags: config.tags } : {}),
|
|
58
|
+
...(config.components.lsp?.length ? { lspServers: './.lsp.json' } : {}),
|
|
45
59
|
})),
|
|
46
60
|
};
|
|
47
61
|
writeJson(join(context.rootDir, '.claude-plugin/marketplace.json'), claudeMarketplace);
|
|
@@ -59,12 +73,29 @@ export function runIndexGen(options = {}) {
|
|
|
59
73
|
console.log(chalk.green(' ✓ .agents/plugins/marketplace.json (Codex)'));
|
|
60
74
|
// ── 根目录兼容镜像 ──
|
|
61
75
|
writeJson(join(context.rootDir, 'marketplace.json'), codexMarketplace);
|
|
62
|
-
console.log(chalk.green(' ✓ marketplace.json (
|
|
76
|
+
console.log(chalk.green(' ✓ marketplace.json (兼容镜像)'));
|
|
77
|
+
// ── OpenSpec source adapter sidecar 索引 ──
|
|
78
|
+
const openSpecEntries = plugins
|
|
79
|
+
.map(({ name, dir, config }) => buildOpenSpecSourceAdapterIndexEntry(config, dir, `./plugins/${name}`))
|
|
80
|
+
.filter((entry) => entry !== null);
|
|
81
|
+
assertUniqueOpenSpecAdapterOperations(openSpecEntries);
|
|
82
|
+
const openSpecSourceAdapters = {
|
|
83
|
+
schemaVersion: 'openspec.source-adapters.v1',
|
|
84
|
+
name: marketplace.name,
|
|
85
|
+
description: marketplace.description || '',
|
|
86
|
+
plugins: openSpecEntries,
|
|
87
|
+
};
|
|
88
|
+
writeJson(join(context.rootDir, '.openspec-plugin/source-adapters.json'), openSpecSourceAdapters);
|
|
89
|
+
console.log(chalk.green(' ✓ .openspec-plugin/source-adapters.json (OpenSpec)'));
|
|
63
90
|
// ── 人类可读目录 ──
|
|
64
91
|
const pluginList = plugins
|
|
65
|
-
.map(({ name, config }) =>
|
|
92
|
+
.map(({ name, config }) => {
|
|
93
|
+
const labels = listComponentLabels(config);
|
|
94
|
+
const labelText = labels.length ? ` [${labels.join(', ')}]` : '';
|
|
95
|
+
return `- **${name}** (v${config.version})${labelText}: ${config.description}`;
|
|
96
|
+
})
|
|
66
97
|
.join('\n');
|
|
67
|
-
const catalogMd = `#
|
|
98
|
+
const catalogMd = `# 插件目录\n\n${pluginList}\n\n_由 CLI 自动生成,请勿手动编辑。_\n`;
|
|
68
99
|
writeFileSync(join(context.pluginsDir, 'CATALOG.md'), catalogMd);
|
|
69
100
|
console.log(chalk.green(' ✓ plugins/CATALOG.md'));
|
|
70
101
|
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;
|
|
1
|
+
{"version":3,"file":"index-gen.js","sourceRoot":"","sources":["../../src/commands/index-gen.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|
package/dist/commands/init.d.ts
CHANGED
package/dist/commands/init.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* init 命令 — 创建新插件骨架
|
|
3
3
|
*
|
|
4
|
-
* 用法:mp init <name> [--type skill|mcp|hook]
|
|
4
|
+
* 用法:mp init <name> [--type skill|mcp|lsp|hook]
|
|
5
5
|
*/
|
|
6
6
|
import { chmodSync, mkdirSync, writeFileSync, existsSync } from 'node:fs';
|
|
7
7
|
import { join } from 'node:path';
|
|
@@ -23,6 +23,30 @@ description: "TODO: 填写 skill 描述"
|
|
|
23
23
|
2. 第二步
|
|
24
24
|
3. 第三步
|
|
25
25
|
`;
|
|
26
|
+
const LSP_SKILL_TEMPLATE = `---
|
|
27
|
+
name: {{SKILL_NAME}}
|
|
28
|
+
description: "Use semantic language server support for code navigation, references, hover, and diagnostics."
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# {{SKILL_NAME}}
|
|
32
|
+
|
|
33
|
+
Use this plugin when the user asks for semantic code lookup in a project handled by this language server.
|
|
34
|
+
|
|
35
|
+
Platform boundary:
|
|
36
|
+
- Claude Code consumes the generated .lsp.json LSP config and can use native language server support.
|
|
37
|
+
- Codex receives this skill as strategy guidance only. Use MCP or other semantic tools if this plugin also provides them.
|
|
38
|
+
- If no semantic tool is available in Codex, fall back to repository and text-search tools.
|
|
39
|
+
|
|
40
|
+
Use semantic tools, when available, for:
|
|
41
|
+
- Workspace symbols
|
|
42
|
+
- Document symbols
|
|
43
|
+
- Go to definition
|
|
44
|
+
- Find references
|
|
45
|
+
- Hover/type information
|
|
46
|
+
- Diagnostics
|
|
47
|
+
|
|
48
|
+
Use text search when the user asks for literal text, comments, generated files, or cross-language repository structure.
|
|
49
|
+
`;
|
|
26
50
|
const PLUGIN_YAML_TEMPLATE = (name, type) => {
|
|
27
51
|
const base = `name: ${name}
|
|
28
52
|
version: "0.1.0"
|
|
@@ -46,6 +70,21 @@ components:`;
|
|
|
46
70
|
command: npx
|
|
47
71
|
args: ["-y", "${name}-server"]
|
|
48
72
|
description: "TODO: 填写 MCP server 描述"
|
|
73
|
+
`;
|
|
74
|
+
case 'lsp':
|
|
75
|
+
return `${base}
|
|
76
|
+
skills:
|
|
77
|
+
- name: ${name}
|
|
78
|
+
path: skills/${name}
|
|
79
|
+
description: "Use semantic language server support"
|
|
80
|
+
lsp:
|
|
81
|
+
- name: ${name}
|
|
82
|
+
command: ${name}
|
|
83
|
+
extensionToLanguage:
|
|
84
|
+
".example": example
|
|
85
|
+
startupTimeout: 30000
|
|
86
|
+
maxRestarts: 3
|
|
87
|
+
diagnostics: true
|
|
49
88
|
`;
|
|
50
89
|
case 'hook':
|
|
51
90
|
return `${base}
|
|
@@ -77,10 +116,11 @@ export function runInit(name, options) {
|
|
|
77
116
|
// plugin.yaml
|
|
78
117
|
writeFileSync(join(pluginDir, 'plugin.yaml'), PLUGIN_YAML_TEMPLATE(name, type));
|
|
79
118
|
// 根据类型创建组件
|
|
80
|
-
if (type === 'skill' || type === 'mcp') {
|
|
119
|
+
if (type === 'skill' || type === 'mcp' || type === 'lsp') {
|
|
81
120
|
const skillDir = join(pluginDir, 'skills', name);
|
|
82
121
|
mkdirSync(skillDir, { recursive: true });
|
|
83
|
-
|
|
122
|
+
const template = type === 'lsp' ? LSP_SKILL_TEMPLATE : SKILL_TEMPLATE;
|
|
123
|
+
writeFileSync(join(skillDir, 'SKILL.md'), template.replaceAll('{{SKILL_NAME}}', name));
|
|
84
124
|
}
|
|
85
125
|
if (type === 'hook') {
|
|
86
126
|
const hooksDir = join(pluginDir, 'hooks');
|
|
@@ -91,7 +131,7 @@ export function runInit(name, options) {
|
|
|
91
131
|
}
|
|
92
132
|
console.log(chalk.green(`✓ 插件创建成功: plugins/${name}/`));
|
|
93
133
|
console.log(chalk.gray(` → 编辑 plugin.yaml 完善配置`));
|
|
94
|
-
if (type === 'skill' || type === 'mcp') {
|
|
134
|
+
if (type === 'skill' || type === 'mcp' || type === 'lsp') {
|
|
95
135
|
console.log(chalk.gray(` → 编辑 skills/${name}/SKILL.md 编写指令`));
|
|
96
136
|
}
|
|
97
137
|
if (type === 'hook') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;CAetB,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE;IAClE,MAAM,IAAI,GAAG,SAAS,IAAI;;;;;;;;;YAShB,CAAC;IAEX,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK;YACR,OAAO,GAAG,IAAI;;cAEN,IAAI;qBACG,IAAI;;;cAGX,IAAI;;sBAEI,IAAI;;CAEzB,CAAC;QACE,KAAK,MAAM;YACT,OAAO,GAAG,IAAI;;;;;CAKnB,CAAC;QACE,SAAS,QAAQ;YACf,OAAO,GAAG,IAAI;;cAEN,IAAI;qBACG,IAAI;;CAExB,CAAC;IACA,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,OAAwC;IAC5E,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAEjD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC;IAEzD,SAAS;IACT,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,cAAc;IACd,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAEhF,WAAW;IACX,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { cpSync, existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
|
8
8
|
import { join } from 'node:path';
|
|
9
9
|
import chalk from 'chalk';
|
|
10
10
|
import { loadAllPlugins, loadMarketplaceMetadata, resolveRepoContext, } from '../utils/helpers.js';
|
|
11
|
+
import { loadOpenSpecAdapters } from '../adapters/openspec.js';
|
|
11
12
|
function assertExists(path, label) {
|
|
12
13
|
if (!existsSync(path)) {
|
|
13
14
|
throw new Error(`${label} 不存在,请先运行 npm run ci:local`);
|
|
@@ -19,6 +20,18 @@ function copyDirectory(from, to) {
|
|
|
19
20
|
filter: (src) => !src.endsWith('.DS_Store'),
|
|
20
21
|
});
|
|
21
22
|
}
|
|
23
|
+
function listComponentLabels(config) {
|
|
24
|
+
const labels = [];
|
|
25
|
+
if (config.components.skills?.length)
|
|
26
|
+
labels.push('Skill');
|
|
27
|
+
if (config.components.mcp?.length)
|
|
28
|
+
labels.push('MCP');
|
|
29
|
+
if (config.components.lsp?.length)
|
|
30
|
+
labels.push('LSP');
|
|
31
|
+
if (config.components.hooks?.length)
|
|
32
|
+
labels.push('Hook');
|
|
33
|
+
return labels;
|
|
34
|
+
}
|
|
22
35
|
function writeReleaseReadme(releaseDir, marketplaceName, pluginCount) {
|
|
23
36
|
const readme = `# ${marketplaceName} 本地发布包
|
|
24
37
|
|
|
@@ -27,8 +40,10 @@ function writeReleaseReadme(releaseDir, marketplaceName, pluginCount) {
|
|
|
27
40
|
## 内容
|
|
28
41
|
|
|
29
42
|
- \`plugins/\`: 插件源文件以及生成后的 Claude Code / Codex manifest
|
|
43
|
+
- 插件内 \`.lsp.json\`: Claude Code LSP server 配置(仅 LSP 插件)
|
|
30
44
|
- \`.claude-plugin/marketplace.json\`: Claude Code marketplace manifest
|
|
31
45
|
- \`.agents/plugins/marketplace.json\`: Codex repo marketplace manifest
|
|
46
|
+
- \`.openspec-plugin/source-adapters.json\`: OpenSpec source adapter sidecar 索引
|
|
32
47
|
- \`marketplace.json\`: 根目录兼容镜像
|
|
33
48
|
- \`marketplace.yaml\`: marketplace 元数据
|
|
34
49
|
- \`release-manifest.json\`: 本次发布包的元信息
|
|
@@ -60,6 +75,7 @@ export function runReleaseLocal(options = {}) {
|
|
|
60
75
|
const releaseDir = join(context.distDir, 'release');
|
|
61
76
|
assertExists(join(context.rootDir, '.claude-plugin/marketplace.json'), 'Claude marketplace manifest');
|
|
62
77
|
assertExists(join(context.rootDir, '.agents/plugins/marketplace.json'), 'Codex marketplace manifest');
|
|
78
|
+
assertExists(join(context.rootDir, '.openspec-plugin/source-adapters.json'), 'OpenSpec source adapter sidecar 索引');
|
|
63
79
|
assertExists(join(context.rootDir, 'marketplace.json'), 'marketplace.json');
|
|
64
80
|
assertExists(context.marketplaceYamlPath, 'marketplace.yaml');
|
|
65
81
|
assertExists(join(context.pluginsDir, 'CATALOG.md'), 'plugins/CATALOG.md');
|
|
@@ -69,15 +85,22 @@ export function runReleaseLocal(options = {}) {
|
|
|
69
85
|
if (config.components.mcp?.length) {
|
|
70
86
|
assertExists(join(dir, '.mcp.json'), `${name} MCP 配置`);
|
|
71
87
|
}
|
|
88
|
+
if (config.components.lsp?.length) {
|
|
89
|
+
assertExists(join(dir, '.lsp.json'), `${name} LSP 配置`);
|
|
90
|
+
}
|
|
72
91
|
if (config.components.hooks?.length) {
|
|
73
92
|
assertExists(join(dir, 'hooks/hooks.json'), `${name} hooks 配置`);
|
|
74
93
|
}
|
|
94
|
+
if (loadOpenSpecAdapters(dir).length) {
|
|
95
|
+
assertExists(join(dir, '.openspec-plugin/plugin.json'), `${name} OpenSpec sidecar`);
|
|
96
|
+
}
|
|
75
97
|
}
|
|
76
98
|
rmSync(releaseDir, { recursive: true, force: true });
|
|
77
99
|
mkdirSync(releaseDir, { recursive: true });
|
|
78
100
|
copyDirectory(context.pluginsDir, join(releaseDir, 'plugins'));
|
|
79
101
|
copyDirectory(join(context.rootDir, '.claude-plugin'), join(releaseDir, '.claude-plugin'));
|
|
80
102
|
copyDirectory(join(context.rootDir, '.agents'), join(releaseDir, '.agents'));
|
|
103
|
+
copyDirectory(join(context.rootDir, '.openspec-plugin'), join(releaseDir, '.openspec-plugin'));
|
|
81
104
|
cpSync(join(context.rootDir, 'marketplace.json'), join(releaseDir, 'marketplace.json'));
|
|
82
105
|
cpSync(context.marketplaceYamlPath, join(releaseDir, 'marketplace.yaml'));
|
|
83
106
|
const manifest = {
|
|
@@ -87,11 +110,13 @@ export function runReleaseLocal(options = {}) {
|
|
|
87
110
|
name,
|
|
88
111
|
version: config.version,
|
|
89
112
|
category: config.category || 'general',
|
|
113
|
+
components: listComponentLabels(config),
|
|
90
114
|
})),
|
|
91
115
|
artifacts: {
|
|
92
116
|
plugins: 'plugins/',
|
|
93
117
|
claudeMarketplace: '.claude-plugin/marketplace.json',
|
|
94
118
|
codexMarketplace: '.agents/plugins/marketplace.json',
|
|
119
|
+
openSpecSourceAdapters: '.openspec-plugin/source-adapters.json',
|
|
95
120
|
marketplaceMirror: 'marketplace.json',
|
|
96
121
|
marketplaceMetadata: 'marketplace.yaml',
|
|
97
122
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-local.js","sourceRoot":"","sources":["../../src/commands/release-local.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"release-local.js","sourceRoot":"","sources":["../../src/commands/release-local.ts"],"names":[],"mappings":"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"}
|