@birdie_moblie/plugin-marketplace-cli 1.0.1 → 1.3.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 +68 -0
- package/README.md +103 -6
- package/dist/adapters/agent-plugins.d.ts +11 -0
- package/dist/adapters/agent-plugins.js +66 -0
- package/dist/adapters/agent-plugins.js.map +1 -0
- package/dist/adapters/claude.d.ts +32 -1
- package/dist/adapters/claude.js +119 -14
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/codex.d.ts +7 -0
- package/dist/adapters/codex.js +10 -14
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/marketplace-registration.d.ts +17 -0
- package/dist/adapters/marketplace-registration.js +367 -0
- package/dist/adapters/marketplace-registration.js.map +1 -0
- 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/application/marketplace-registration-contract.d.ts +51 -0
- package/dist/application/marketplace-registration-contract.js +11 -0
- package/dist/application/marketplace-registration-contract.js.map +1 -0
- package/dist/application/marketplace-registration.d.ts +20 -0
- package/dist/application/marketplace-registration.js +304 -0
- package/dist/application/marketplace-registration.js.map +1 -0
- package/dist/cli.d.ts +2 -1
- package/dist/cli.js +25 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/build.d.ts +1 -1
- package/dist/commands/build.js +27 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/index-gen.d.ts +10 -0
- package/dist/commands/index-gen.js +81 -20
- package/dist/commands/index-gen.js.map +1 -1
- package/dist/commands/init-repo.js +11 -2
- package/dist/commands/init-repo.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.js +61 -9
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install-repo.d.ts +20 -0
- package/dist/commands/install-repo.js +200 -0
- package/dist/commands/install-repo.js.map +1 -0
- package/dist/commands/release-local.d.ts +1 -0
- package/dist/commands/release-local.js +310 -7
- package/dist/commands/release-local.js.map +1 -1
- package/dist/commands/validate.js +399 -16
- package/dist/commands/validate.js.map +1 -1
- package/dist/core/errors.d.ts +5 -0
- package/dist/core/errors.js +12 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/generated/skill-content.js +1 -1
- package/dist/generated/skill-content.js.map +1 -1
- package/dist/infrastructure/process-runner.d.ts +29 -0
- package/dist/infrastructure/process-runner.js +130 -0
- package/dist/infrastructure/process-runner.js.map +1 -0
- package/dist/infrastructure/vscode-user-settings.d.ts +42 -0
- package/dist/infrastructure/vscode-user-settings.js +509 -0
- package/dist/infrastructure/vscode-user-settings.js.map +1 -0
- package/dist/schema/agent-plugins.d.ts +221 -0
- package/dist/schema/agent-plugins.js +155 -0
- package/dist/schema/agent-plugins.js.map +1 -0
- package/dist/schema/plugin-yaml.d.ts +37 -3
- package/dist/schema/plugin-yaml.js +89 -4
- package/dist/schema/plugin-yaml.js.map +1 -1
- package/dist/utils/helpers.d.ts +1 -0
- package/dist/utils/helpers.js +1 -0
- package/dist/utils/helpers.js.map +1 -1
- package/dist/validation/agent-plugins.d.ts +3 -0
- package/dist/validation/agent-plugins.js +418 -0
- package/dist/validation/agent-plugins.js.map +1 -0
- package/package.json +14 -5
package/dist/cli.d.ts
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* plugin-marketplace init-repo [name] 创建新插件仓库
|
|
7
7
|
* plugin-marketplace init <name> 创建新插件
|
|
8
8
|
* plugin-marketplace validate [name] 验证插件格式
|
|
9
|
-
* plugin-marketplace build [name]
|
|
9
|
+
* plugin-marketplace build [name] 生成 Agent Plugins 与平台 manifest
|
|
10
10
|
* plugin-marketplace index 生成 marketplace 索引
|
|
11
11
|
* plugin-marketplace release-local 组装本地发布包
|
|
12
|
+
* plugin-marketplace install-repo 注册已就绪的 marketplace 到客户端
|
|
12
13
|
*/
|
|
13
14
|
export {};
|
package/dist/cli.js
CHANGED
|
@@ -6,13 +6,15 @@
|
|
|
6
6
|
* plugin-marketplace init-repo [name] 创建新插件仓库
|
|
7
7
|
* plugin-marketplace init <name> 创建新插件
|
|
8
8
|
* plugin-marketplace validate [name] 验证插件格式
|
|
9
|
-
* plugin-marketplace build [name]
|
|
9
|
+
* plugin-marketplace build [name] 生成 Agent Plugins 与平台 manifest
|
|
10
10
|
* plugin-marketplace index 生成 marketplace 索引
|
|
11
11
|
* plugin-marketplace release-local 组装本地发布包
|
|
12
|
+
* plugin-marketplace install-repo 注册已就绪的 marketplace 到客户端
|
|
12
13
|
*/
|
|
13
14
|
import { readFileSync } from 'node:fs';
|
|
14
15
|
import { dirname, join } from 'node:path';
|
|
15
16
|
import { fileURLToPath } from 'node:url';
|
|
17
|
+
import chalk from 'chalk';
|
|
16
18
|
import { Command } from 'commander';
|
|
17
19
|
import { runInitRepo } from './commands/init-repo.js';
|
|
18
20
|
import { runInit } from './commands/init.js';
|
|
@@ -20,6 +22,8 @@ import { runValidate } from './commands/validate.js';
|
|
|
20
22
|
import { runBuild } from './commands/build.js';
|
|
21
23
|
import { runIndexGen } from './commands/index-gen.js';
|
|
22
24
|
import { runReleaseLocal } from './commands/release-local.js';
|
|
25
|
+
import { runInstallRepo } from './commands/install-repo.js';
|
|
26
|
+
import { isCommandError } from './core/errors.js';
|
|
23
27
|
const program = new Command();
|
|
24
28
|
function rootOption() {
|
|
25
29
|
return program.opts().root;
|
|
@@ -60,7 +64,7 @@ function formatOptionDescription(option) {
|
|
|
60
64
|
}
|
|
61
65
|
program
|
|
62
66
|
.name('plugin-marketplace')
|
|
63
|
-
.description('
|
|
67
|
+
.description('管理 Agent Plugins 1.0、Claude Code、Codex 和 Cursor plugin marketplace 仓库')
|
|
64
68
|
.version(readPackageVersion(), '-V, --version', '显示版本号')
|
|
65
69
|
.helpOption('-h, --help', '显示帮助')
|
|
66
70
|
.addHelpCommand('help [command]', '显示指定命令的帮助')
|
|
@@ -78,7 +82,7 @@ program
|
|
|
78
82
|
program
|
|
79
83
|
.command('init <name>')
|
|
80
84
|
.description('创建新插件骨架')
|
|
81
|
-
.option('-t, --type <type>', '插件类型: skill, mcp, hook', 'skill')
|
|
85
|
+
.option('-t, --type <type>', '插件类型: skill, mcp, lsp, hook', 'skill')
|
|
82
86
|
.action((name, options) => runInit(name, { ...options, root: rootOption() }));
|
|
83
87
|
program
|
|
84
88
|
.command('validate [name]')
|
|
@@ -87,7 +91,7 @@ program
|
|
|
87
91
|
.action((name, options) => runValidate(name, { ...options, root: rootOption() }));
|
|
88
92
|
program
|
|
89
93
|
.command('build [name]')
|
|
90
|
-
.description('从 plugin.yaml
|
|
94
|
+
.description('从 plugin.yaml 生成 Agent Plugins 1.0 与平台 manifest')
|
|
91
95
|
.option('-a, --all', '构建所有插件')
|
|
92
96
|
.action((name, options) => runBuild(name, { ...options, root: rootOption() }));
|
|
93
97
|
program
|
|
@@ -98,5 +102,21 @@ program
|
|
|
98
102
|
.command('release-local')
|
|
99
103
|
.description('组装本地发布包')
|
|
100
104
|
.action(() => runReleaseLocal({ root: rootOption() }));
|
|
101
|
-
program
|
|
105
|
+
program
|
|
106
|
+
.command('install-repo <source>')
|
|
107
|
+
.description('把已就绪的 marketplace 注册到所选 agent(不安装具体插件)')
|
|
108
|
+
.option('--agent <agent>', '目标 agent,可重复: claude, codex, copilot, vscode, cursor', (value, previous) => [...previous, value], [])
|
|
109
|
+
.option('--all', '选择全部五个 agent(Cursor 仍需手工处理)')
|
|
110
|
+
.action(async (source, options) => {
|
|
111
|
+
const result = await runInstallRepo(source, options);
|
|
112
|
+
process.exitCode = result.exitCode;
|
|
113
|
+
});
|
|
114
|
+
try {
|
|
115
|
+
await program.parseAsync();
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
119
|
+
console.error(chalk.red(`✗ ${message}`));
|
|
120
|
+
process.exit(isCommandError(err) ? err.exitCode : 1);
|
|
121
|
+
}
|
|
102
122
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/build.d.ts
CHANGED
package/dist/commands/build.js
CHANGED
|
@@ -1,18 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* build 命令 — 从 plugin.yaml
|
|
2
|
+
* build 命令 — 从 plugin.yaml 生成 Agent Plugins 与平台 manifest
|
|
3
3
|
*
|
|
4
4
|
* 用法:mp build [name] 或 mp build --all
|
|
5
5
|
*/
|
|
6
6
|
import { join } from 'node:path';
|
|
7
7
|
import chalk from 'chalk';
|
|
8
8
|
import { loadPluginYaml, listPluginNames, resolveRepoContext, } from '../utils/helpers.js';
|
|
9
|
-
import { generateClaude } from '../adapters/claude.js';
|
|
9
|
+
import { buildHooksConfig, buildLspConfig, buildMcpConfig, generateClaude, } from '../adapters/claude.js';
|
|
10
10
|
import { generateCodex } from '../adapters/codex.js';
|
|
11
|
-
|
|
11
|
+
import { buildOpenSpecManifest, generateOpenSpec } from '../adapters/openspec.js';
|
|
12
|
+
import { generateAgentPlugin } from '../adapters/agent-plugins.js';
|
|
13
|
+
import { collectAgentPluginSourceErrors } from '../validation/agent-plugins.js';
|
|
14
|
+
function loadBuildTarget(context, name) {
|
|
12
15
|
const pluginDir = join(context.pluginsDir, name);
|
|
13
16
|
const config = loadPluginYaml(pluginDir);
|
|
17
|
+
const agentPluginErrors = collectAgentPluginSourceErrors(pluginDir, config);
|
|
18
|
+
if (agentPluginErrors.length > 0) {
|
|
19
|
+
throw new Error(`Agent Plugins 源契约校验失败:\n${agentPluginErrors.map((error) => ` - ${error}`).join('\n')}`);
|
|
20
|
+
}
|
|
21
|
+
// Run every adapter's pure derivation before any selected plugin is written.
|
|
22
|
+
// This keeps build --all from partially updating earlier plugins when a
|
|
23
|
+
// later source file has an invalid platform-specific contract.
|
|
24
|
+
buildHooksConfig(config);
|
|
25
|
+
buildMcpConfig(config);
|
|
26
|
+
buildLspConfig(config);
|
|
27
|
+
buildOpenSpecManifest(config, pluginDir);
|
|
28
|
+
return { name, pluginDir, config };
|
|
29
|
+
}
|
|
30
|
+
function buildOne({ name, pluginDir, config }) {
|
|
31
|
+
generateAgentPlugin(config, pluginDir);
|
|
14
32
|
generateClaude(config, pluginDir);
|
|
15
33
|
generateCodex(config, pluginDir);
|
|
34
|
+
generateOpenSpec(config, pluginDir);
|
|
16
35
|
console.log(chalk.green(` ✓ ${name}`));
|
|
17
36
|
}
|
|
18
37
|
export function runBuild(name, options) {
|
|
@@ -22,16 +41,19 @@ export function runBuild(name, options) {
|
|
|
22
41
|
console.error(chalk.red('✗ 请指定插件名或使用 --all'));
|
|
23
42
|
process.exit(1);
|
|
24
43
|
}
|
|
25
|
-
console.log(chalk.blue(`⟳ 构建 ${names.length}
|
|
44
|
+
console.log(chalk.blue(`⟳ 构建 ${names.length} 个插件的 Agent Plugins 与平台 manifest...\n`));
|
|
45
|
+
const targets = [];
|
|
26
46
|
for (const n of names) {
|
|
27
47
|
try {
|
|
28
|
-
|
|
48
|
+
targets.push(loadBuildTarget(context, n));
|
|
29
49
|
}
|
|
30
50
|
catch (err) {
|
|
31
51
|
console.error(chalk.red(` ✗ ${n}: ${err.message}`));
|
|
32
52
|
process.exit(1);
|
|
33
53
|
}
|
|
34
54
|
}
|
|
55
|
+
for (const target of targets)
|
|
56
|
+
buildOne(target);
|
|
35
57
|
console.log(chalk.green(`\n✓ 构建完成`));
|
|
36
58
|
}
|
|
37
59
|
//# sourceMappingURL=build.js.map
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
* Claude Code: 生成 .claude-plugin/marketplace.json
|
|
5
5
|
* Codex: 生成 .agents/plugins/marketplace.json,并保留根 marketplace.json 兼容镜像
|
|
6
6
|
*/
|
|
7
|
+
import { type MarketplaceMetadata, type PluginRepoContext, loadAllPlugins } from '../utils/helpers.js';
|
|
8
|
+
type LoadedPlugins = ReturnType<typeof loadAllPlugins>;
|
|
9
|
+
export interface ClientMarketplaceIndexes {
|
|
10
|
+
claude: Record<string, unknown>;
|
|
11
|
+
codex: Record<string, unknown>;
|
|
12
|
+
cursor: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export declare function buildClientMarketplaceIndexes(plugins: LoadedPlugins, marketplace: MarketplaceMetadata): ClientMarketplaceIndexes;
|
|
15
|
+
export declare function buildClientMarketplaceIndexesForContext(context: PluginRepoContext): ClientMarketplaceIndexes;
|
|
7
16
|
export declare function runIndexGen(options?: {
|
|
8
17
|
root?: string;
|
|
9
18
|
}): void;
|
|
19
|
+
export {};
|
|
@@ -9,23 +9,27 @@ 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
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
+
}
|
|
29
|
+
export function buildClientMarketplaceIndexes(plugins, marketplace) {
|
|
25
30
|
const marketplaceDisplayName = toTitleCase(marketplace.name);
|
|
26
31
|
const ownerName = marketplace.organization || marketplaceDisplayName;
|
|
27
|
-
|
|
28
|
-
const claudeMarketplace = {
|
|
32
|
+
const claude = {
|
|
29
33
|
name: marketplace.name,
|
|
30
34
|
owner: {
|
|
31
35
|
name: ownerName,
|
|
@@ -42,27 +46,84 @@ export function runIndexGen(options = {}) {
|
|
|
42
46
|
},
|
|
43
47
|
...(config.category ? { category: config.category } : {}),
|
|
44
48
|
...(config.tags?.length ? { tags: config.tags } : {}),
|
|
49
|
+
...(config.components.lsp?.length ? { lspServers: './.lsp.json' } : {}),
|
|
45
50
|
})),
|
|
46
51
|
};
|
|
47
|
-
|
|
48
|
-
console.log(chalk.green(' ✓ .claude-plugin/marketplace.json (Claude Code)'));
|
|
49
|
-
// ── Codex marketplace ──
|
|
50
|
-
const codexEntries = plugins.map(({ name, config }) => buildMarketplaceEntry(config, `./plugins/${name}`));
|
|
51
|
-
const codexMarketplace = {
|
|
52
|
+
const codex = {
|
|
52
53
|
name: marketplace.name,
|
|
53
54
|
interface: {
|
|
54
55
|
displayName: marketplaceDisplayName,
|
|
55
56
|
},
|
|
56
|
-
plugins:
|
|
57
|
+
plugins: plugins.map(({ name, config }) => buildMarketplaceEntry(config, `./plugins/${name}`)),
|
|
58
|
+
};
|
|
59
|
+
const cursor = {
|
|
60
|
+
name: marketplace.name,
|
|
61
|
+
displayName: marketplaceDisplayName,
|
|
62
|
+
owner: {
|
|
63
|
+
name: ownerName,
|
|
64
|
+
},
|
|
65
|
+
metadata: {
|
|
66
|
+
...(marketplace.description ? { description: marketplace.description } : {}),
|
|
67
|
+
version: marketplace.version || '1.0.0',
|
|
68
|
+
pluginRoot: 'plugins',
|
|
69
|
+
},
|
|
70
|
+
plugins: plugins.map(({ name, config }) => ({
|
|
71
|
+
name: config.name,
|
|
72
|
+
source: name,
|
|
73
|
+
description: config.description,
|
|
74
|
+
version: config.version,
|
|
75
|
+
})),
|
|
57
76
|
};
|
|
58
|
-
|
|
77
|
+
return { claude, codex, cursor };
|
|
78
|
+
}
|
|
79
|
+
export function buildClientMarketplaceIndexesForContext(context) {
|
|
80
|
+
return buildClientMarketplaceIndexes(loadAllPlugins(context), loadMarketplaceMetadata(context));
|
|
81
|
+
}
|
|
82
|
+
export function runIndexGen(options = {}) {
|
|
83
|
+
console.log(chalk.blue('⟳ 生成 marketplace 索引...\n'));
|
|
84
|
+
const context = resolveRepoContext(options.root);
|
|
85
|
+
const plugins = loadAllPlugins(context);
|
|
86
|
+
const marketplace = loadMarketplaceMetadata(context);
|
|
87
|
+
if (plugins.length === 0) {
|
|
88
|
+
console.log(chalk.yellow(' ⚠ 没有找到插件'));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const indexes = buildClientMarketplaceIndexes(plugins, marketplace);
|
|
92
|
+
// ── Claude Code marketplace ──
|
|
93
|
+
writeJson(join(context.rootDir, '.claude-plugin/marketplace.json'), indexes.claude);
|
|
94
|
+
console.log(chalk.green(' ✓ .claude-plugin/marketplace.json (Claude Code)'));
|
|
95
|
+
// ── GitHub Copilot / VS Code canonical marketplace mirror ──
|
|
96
|
+
writeJson(join(context.rootDir, '.github/plugin/marketplace.json'), indexes.claude);
|
|
97
|
+
console.log(chalk.green(' ✓ .github/plugin/marketplace.json (GitHub Copilot / VS Code)'));
|
|
98
|
+
// ── Codex marketplace ──
|
|
99
|
+
writeJson(join(context.rootDir, '.agents/plugins/marketplace.json'), indexes.codex);
|
|
59
100
|
console.log(chalk.green(' ✓ .agents/plugins/marketplace.json (Codex)'));
|
|
60
101
|
// ── 根目录兼容镜像 ──
|
|
61
|
-
writeJson(join(context.rootDir, 'marketplace.json'),
|
|
102
|
+
writeJson(join(context.rootDir, 'marketplace.json'), indexes.codex);
|
|
62
103
|
console.log(chalk.green(' ✓ marketplace.json (兼容镜像)'));
|
|
104
|
+
// ── Cursor team marketplace ──
|
|
105
|
+
writeJson(join(context.rootDir, '.cursor-plugin/marketplace.json'), indexes.cursor);
|
|
106
|
+
console.log(chalk.green(' ✓ .cursor-plugin/marketplace.json (Cursor)'));
|
|
107
|
+
// ── OpenSpec source adapter sidecar 索引 ──
|
|
108
|
+
const openSpecEntries = plugins
|
|
109
|
+
.map(({ name, dir, config }) => buildOpenSpecSourceAdapterIndexEntry(config, dir, `./plugins/${name}`))
|
|
110
|
+
.filter((entry) => entry !== null);
|
|
111
|
+
assertUniqueOpenSpecAdapterOperations(openSpecEntries);
|
|
112
|
+
const openSpecSourceAdapters = {
|
|
113
|
+
schemaVersion: 'openspec.source-adapters.v1',
|
|
114
|
+
name: marketplace.name,
|
|
115
|
+
description: marketplace.description || '',
|
|
116
|
+
plugins: openSpecEntries,
|
|
117
|
+
};
|
|
118
|
+
writeJson(join(context.rootDir, '.openspec-plugin/source-adapters.json'), openSpecSourceAdapters);
|
|
119
|
+
console.log(chalk.green(' ✓ .openspec-plugin/source-adapters.json (OpenSpec)'));
|
|
63
120
|
// ── 人类可读目录 ──
|
|
64
121
|
const pluginList = plugins
|
|
65
|
-
.map(({ name, config }) =>
|
|
122
|
+
.map(({ name, config }) => {
|
|
123
|
+
const labels = listComponentLabels(config);
|
|
124
|
+
const labelText = labels.length ? ` [${labels.join(', ')}]` : '';
|
|
125
|
+
return `- **${name}** (v${config.version})${labelText}: ${config.description}`;
|
|
126
|
+
})
|
|
66
127
|
.join('\n');
|
|
67
128
|
const catalogMd = `# 插件目录\n\n${pluginList}\n\n_由 CLI 自动生成,请勿手动编辑。_\n`;
|
|
68
129
|
writeFileSync(join(context.pluginsDir, 'CATALOG.md'), catalogMd);
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"index-gen.js","sourceRoot":"","sources":["../../src/commands/index-gen.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ const DEFAULT_SCRIPTS = {
|
|
|
14
14
|
'build:plugins': `${CLI_RUNNER} build --all`,
|
|
15
15
|
'build:index': `${CLI_RUNNER} index`,
|
|
16
16
|
'build:all': 'npm run build:plugins && npm run build:index',
|
|
17
|
-
'ci:local': 'npm run
|
|
17
|
+
'ci:local': 'npm run build:all && npm run validate:plugins',
|
|
18
18
|
'release:local': `npm run ci:local && ${CLI_RUNNER} release-local`,
|
|
19
19
|
};
|
|
20
20
|
function marketplaceYaml(name, organization) {
|
|
@@ -23,6 +23,7 @@ function marketplaceYaml(name, organization) {
|
|
|
23
23
|
name: ${name}
|
|
24
24
|
description: "${toTitleCase(name)} 插件市场"
|
|
25
25
|
organization: "${organization}"
|
|
26
|
+
version: "1.0.0"
|
|
26
27
|
|
|
27
28
|
categories:
|
|
28
29
|
- id: tooling
|
|
@@ -42,10 +43,16 @@ categories:
|
|
|
42
43
|
description: "其他插件"
|
|
43
44
|
|
|
44
45
|
platforms:
|
|
46
|
+
- name: "Agent Plugins"
|
|
47
|
+
manifest: "plugin.json"
|
|
45
48
|
- name: "Claude Code"
|
|
46
49
|
manifest: ".claude-plugin/plugin.json"
|
|
47
50
|
- name: "Codex"
|
|
48
51
|
manifest: ".codex-plugin/plugin.json"
|
|
52
|
+
- name: "GitHub Copilot / VS Code"
|
|
53
|
+
manifest: "plugin.json"
|
|
54
|
+
- name: "Cursor"
|
|
55
|
+
manifest: "plugin.json"
|
|
49
56
|
`;
|
|
50
57
|
}
|
|
51
58
|
function readPackageJson(path) {
|
|
@@ -85,13 +92,15 @@ function ensureReadme(rootDir, name) {
|
|
|
85
92
|
|
|
86
93
|
这是一个由 \`${CLI_PACKAGE}\` 维护的 plugin marketplace 仓库。
|
|
87
94
|
|
|
95
|
+
每个 \`plugins/<name>/\` 在 build 后都会包含 Agent Plugins 1.0 根 \`plugin.json\`,并继续生成 Claude Code / Codex 平台 manifest。
|
|
96
|
+
|
|
88
97
|
## 常用流程
|
|
89
98
|
|
|
90
99
|
\`\`\`bash
|
|
91
100
|
npx ${CLI_PACKAGE} init my-plugin
|
|
92
|
-
npx ${CLI_PACKAGE} validate --all
|
|
93
101
|
npx ${CLI_PACKAGE} build --all
|
|
94
102
|
npx ${CLI_PACKAGE} index
|
|
103
|
+
npx ${CLI_PACKAGE} validate --all
|
|
95
104
|
\`\`\`
|
|
96
105
|
`;
|
|
97
106
|
writeFileSync(readmePath, readme);
|
|
@@ -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,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
|
|
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"
|
|
@@ -43,16 +67,36 @@ components:`;
|
|
|
43
67
|
description: "TODO: 填写 skill 描述"
|
|
44
68
|
mcp:
|
|
45
69
|
- name: ${name}-server
|
|
70
|
+
type: stdio
|
|
46
71
|
command: npx
|
|
47
72
|
args: ["-y", "${name}-server"]
|
|
48
73
|
description: "TODO: 填写 MCP server 描述"
|
|
74
|
+
`;
|
|
75
|
+
case 'lsp':
|
|
76
|
+
return `${base}
|
|
77
|
+
skills:
|
|
78
|
+
- name: ${name}
|
|
79
|
+
path: skills/${name}
|
|
80
|
+
description: "Use semantic language server support"
|
|
81
|
+
lsp:
|
|
82
|
+
- name: ${name}
|
|
83
|
+
command: ${name}
|
|
84
|
+
extensionToLanguage:
|
|
85
|
+
".example": example
|
|
86
|
+
startupTimeout: 30000
|
|
87
|
+
maxRestarts: 3
|
|
88
|
+
diagnostics: true
|
|
49
89
|
`;
|
|
50
90
|
case 'hook':
|
|
51
91
|
return `${base}
|
|
52
92
|
hooks:
|
|
53
93
|
- event: PreToolUse
|
|
54
|
-
|
|
55
|
-
|
|
94
|
+
matcher: "Write|Edit"
|
|
95
|
+
type: command
|
|
96
|
+
script: hooks/check.py
|
|
97
|
+
interpreter: python3
|
|
98
|
+
timeoutSeconds: 10
|
|
99
|
+
statusMessage: "正在运行插件检查"
|
|
56
100
|
`;
|
|
57
101
|
default: // skill
|
|
58
102
|
return `${base}
|
|
@@ -77,25 +121,33 @@ export function runInit(name, options) {
|
|
|
77
121
|
// plugin.yaml
|
|
78
122
|
writeFileSync(join(pluginDir, 'plugin.yaml'), PLUGIN_YAML_TEMPLATE(name, type));
|
|
79
123
|
// 根据类型创建组件
|
|
80
|
-
if (type === 'skill' || type === 'mcp') {
|
|
124
|
+
if (type === 'skill' || type === 'mcp' || type === 'lsp') {
|
|
81
125
|
const skillDir = join(pluginDir, 'skills', name);
|
|
82
126
|
mkdirSync(skillDir, { recursive: true });
|
|
83
|
-
|
|
127
|
+
const template = type === 'lsp' ? LSP_SKILL_TEMPLATE : SKILL_TEMPLATE;
|
|
128
|
+
writeFileSync(join(skillDir, 'SKILL.md'), template.replaceAll('{{SKILL_NAME}}', name));
|
|
84
129
|
}
|
|
85
130
|
if (type === 'hook') {
|
|
86
131
|
const hooksDir = join(pluginDir, 'hooks');
|
|
87
|
-
const hookPath = join(hooksDir, 'check.
|
|
132
|
+
const hookPath = join(hooksDir, 'check.py');
|
|
88
133
|
mkdirSync(hooksDir, { recursive: true });
|
|
89
|
-
writeFileSync(hookPath, '#!/bin/
|
|
134
|
+
writeFileSync(hookPath, '#!/usr/bin/env python3\n' +
|
|
135
|
+
'"""Lifecycle hook command. JSON is provided on stdin."""\n\n' +
|
|
136
|
+
'import json\n' +
|
|
137
|
+
'import sys\n\n' +
|
|
138
|
+
'payload = json.load(sys.stdin)\n' +
|
|
139
|
+
'# TODO: inspect payload and return exit code 2 to block the action.\n' +
|
|
140
|
+
'_ = payload\n' +
|
|
141
|
+
'raise SystemExit(0)\n');
|
|
90
142
|
chmodSync(hookPath, 0o755);
|
|
91
143
|
}
|
|
92
144
|
console.log(chalk.green(`✓ 插件创建成功: plugins/${name}/`));
|
|
93
145
|
console.log(chalk.gray(` → 编辑 plugin.yaml 完善配置`));
|
|
94
|
-
if (type === 'skill' || type === 'mcp') {
|
|
146
|
+
if (type === 'skill' || type === 'mcp' || type === 'lsp') {
|
|
95
147
|
console.log(chalk.gray(` → 编辑 skills/${name}/SKILL.md 编写指令`));
|
|
96
148
|
}
|
|
97
149
|
if (type === 'hook') {
|
|
98
|
-
console.log(chalk.gray(` → 编辑 hooks/check.
|
|
150
|
+
console.log(chalk.gray(` → 编辑 hooks/check.py 实现 stdin JSON 检查逻辑`));
|
|
99
151
|
}
|
|
100
152
|
}
|
|
101
153
|
//# sourceMappingURL=init.js.map
|
|
@@ -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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { MarketplaceRegistrationRuntime } from '../adapters/marketplace-registration.js';
|
|
2
|
+
import { type AgentTargetId, type MarketplaceRegistrationReport } from '../application/marketplace-registration-contract.js';
|
|
3
|
+
export interface InstallRepoOptions {
|
|
4
|
+
readonly agent?: readonly string[];
|
|
5
|
+
readonly all?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface InstallRepoCommandDependencies {
|
|
8
|
+
readonly runtime?: MarketplaceRegistrationRuntime;
|
|
9
|
+
readonly baseDir?: string;
|
|
10
|
+
readonly homeDir?: string;
|
|
11
|
+
readonly interactive?: boolean;
|
|
12
|
+
readonly readSelection?: (signal: AbortSignal) => Promise<string | undefined>;
|
|
13
|
+
readonly write?: (text: string) => void;
|
|
14
|
+
}
|
|
15
|
+
export interface InstallRepoCommandResult {
|
|
16
|
+
readonly exitCode: 0 | 1 | 2 | 130;
|
|
17
|
+
readonly report?: MarketplaceRegistrationReport;
|
|
18
|
+
}
|
|
19
|
+
export declare function parseTargetSelection(input: string, availableTargetIds: readonly AgentTargetId[], defaultTargetIds: readonly AgentTargetId[]): AgentTargetId[];
|
|
20
|
+
export declare function runInstallRepo(source: string, options: InstallRepoOptions, dependencies?: InstallRepoCommandDependencies): Promise<InstallRepoCommandResult>;
|