@birdie_moblie/plugin-marketplace-cli 1.1.0 → 1.3.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.
Files changed (68) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +73 -5
  3. package/dist/adapters/agent-plugins.d.ts +11 -0
  4. package/dist/adapters/agent-plugins.js +66 -0
  5. package/dist/adapters/agent-plugins.js.map +1 -0
  6. package/dist/adapters/claude.d.ts +16 -1
  7. package/dist/adapters/claude.js +82 -13
  8. package/dist/adapters/claude.js.map +1 -1
  9. package/dist/adapters/codex.d.ts +7 -0
  10. package/dist/adapters/codex.js +10 -14
  11. package/dist/adapters/codex.js.map +1 -1
  12. package/dist/adapters/marketplace-registration.d.ts +17 -0
  13. package/dist/adapters/marketplace-registration.js +367 -0
  14. package/dist/adapters/marketplace-registration.js.map +1 -0
  15. package/dist/adapters/openspec.d.ts +5 -1
  16. package/dist/adapters/openspec.js +15 -1
  17. package/dist/adapters/openspec.js.map +1 -1
  18. package/dist/application/marketplace-registration-contract.d.ts +51 -0
  19. package/dist/application/marketplace-registration-contract.js +11 -0
  20. package/dist/application/marketplace-registration-contract.js.map +1 -0
  21. package/dist/application/marketplace-registration.d.ts +20 -0
  22. package/dist/application/marketplace-registration.js +304 -0
  23. package/dist/application/marketplace-registration.js.map +1 -0
  24. package/dist/cli.d.ts +2 -1
  25. package/dist/cli.js +24 -4
  26. package/dist/cli.js.map +1 -1
  27. package/dist/commands/build.d.ts +1 -1
  28. package/dist/commands/build.js +26 -6
  29. package/dist/commands/build.js.map +1 -1
  30. package/dist/commands/index-gen.d.ts +10 -0
  31. package/dist/commands/index-gen.js +49 -19
  32. package/dist/commands/index-gen.js.map +1 -1
  33. package/dist/commands/init-repo.js +11 -2
  34. package/dist/commands/init-repo.js.map +1 -1
  35. package/dist/commands/init.js +17 -5
  36. package/dist/commands/init.js.map +1 -1
  37. package/dist/commands/install-repo.d.ts +20 -0
  38. package/dist/commands/install-repo.js +200 -0
  39. package/dist/commands/install-repo.js.map +1 -0
  40. package/dist/commands/release-local.d.ts +1 -0
  41. package/dist/commands/release-local.js +285 -7
  42. package/dist/commands/release-local.js.map +1 -1
  43. package/dist/commands/validate.js +173 -19
  44. package/dist/commands/validate.js.map +1 -1
  45. package/dist/core/errors.d.ts +5 -0
  46. package/dist/core/errors.js +12 -0
  47. package/dist/core/errors.js.map +1 -0
  48. package/dist/generated/skill-content.js +1 -1
  49. package/dist/generated/skill-content.js.map +1 -1
  50. package/dist/infrastructure/process-runner.d.ts +29 -0
  51. package/dist/infrastructure/process-runner.js +130 -0
  52. package/dist/infrastructure/process-runner.js.map +1 -0
  53. package/dist/infrastructure/vscode-user-settings.d.ts +42 -0
  54. package/dist/infrastructure/vscode-user-settings.js +509 -0
  55. package/dist/infrastructure/vscode-user-settings.js.map +1 -0
  56. package/dist/schema/agent-plugins.d.ts +221 -0
  57. package/dist/schema/agent-plugins.js +155 -0
  58. package/dist/schema/agent-plugins.js.map +1 -0
  59. package/dist/schema/plugin-yaml.d.ts +23 -3
  60. package/dist/schema/plugin-yaml.js +65 -18
  61. package/dist/schema/plugin-yaml.js.map +1 -1
  62. package/dist/utils/helpers.d.ts +1 -0
  63. package/dist/utils/helpers.js +1 -0
  64. package/dist/utils/helpers.js.map +1 -1
  65. package/dist/validation/agent-plugins.d.ts +3 -0
  66. package/dist/validation/agent-plugins.js +418 -0
  67. package/dist/validation/agent-plugins.js.map +1 -0
  68. package/package.json +9 -5
@@ -0,0 +1,304 @@
1
+ import { existsSync, lstatSync, realpathSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { isAbsolute, resolve, sep } from 'node:path';
4
+ import { pathToFileURL } from 'node:url';
5
+ import { getMarketplaceRegistrationAdapter, MARKETPLACE_REGISTRATION_ADAPTERS, } from '../adapters/marketplace-registration.js';
6
+ import { CommandError } from '../core/errors.js';
7
+ import { AGENT_TARGET_IDS, isAgentTargetId, } from './marketplace-registration-contract.js';
8
+ const GITHUB_SHORTHAND = /^([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)$/;
9
+ const SCP_SSH_URL = /^[A-Za-z0-9._-]+@[A-Za-z0-9.-]+:[^\s:][^\s]*$/;
10
+ const TERMINAL_CONTROL_CHARACTERS = /[\u0000-\u001f\u007f-\u009f]/u;
11
+ function assertNoTerminalControlCharacters(value, label) {
12
+ if (TERMINAL_CONTROL_CHARACTERS.test(value)) {
13
+ throw new CommandError(`${label}不能包含 C0、C1 或 DEL 控制字符。`);
14
+ }
15
+ }
16
+ function assertNoEncodedTerminalControlCharacters(value, label) {
17
+ let decoded;
18
+ try {
19
+ decoded = decodeURIComponent(value);
20
+ }
21
+ catch {
22
+ throw new CommandError(`${label}包含无效的百分号编码。`);
23
+ }
24
+ assertNoTerminalControlCharacters(decoded, `解码后的${label}`);
25
+ }
26
+ function appendPathWithoutNormalizing(baseDir, relativePath) {
27
+ return `${baseDir}${baseDir.endsWith(sep) ? '' : sep}${relativePath}`;
28
+ }
29
+ function expandHomePath(value, homeDir) {
30
+ if (value === '~') {
31
+ return resolve(homeDir);
32
+ }
33
+ if (value.startsWith('~/') || value.startsWith('~\\')) {
34
+ return appendPathWithoutNormalizing(resolve(homeDir), value.slice(2));
35
+ }
36
+ return value;
37
+ }
38
+ function looksLikeLocalPath(value) {
39
+ return (value === '.' ||
40
+ value === '..' ||
41
+ value === '~' ||
42
+ value.startsWith('./') ||
43
+ value.startsWith('../') ||
44
+ value.startsWith('~/') ||
45
+ value.startsWith('.\\') ||
46
+ value.startsWith('..\\') ||
47
+ value.startsWith('~\\') ||
48
+ isAbsolute(value) ||
49
+ /^[A-Za-z]:[\\/]/.test(value));
50
+ }
51
+ function normalizeLocalSource(input, candidatePath) {
52
+ const stat = lstatSync(candidatePath);
53
+ if (!stat.isDirectory() && !stat.isSymbolicLink()) {
54
+ throw new CommandError(`Marketplace 本地来源不是目录: ${candidatePath}`);
55
+ }
56
+ const localPath = realpathSync(candidatePath);
57
+ assertNoTerminalControlCharacters(localPath, '解析后的 Marketplace 本地路径');
58
+ if (!lstatSync(localPath).isDirectory()) {
59
+ throw new CommandError(`Marketplace 本地来源不是目录: ${candidatePath}`);
60
+ }
61
+ return {
62
+ kind: 'local',
63
+ input,
64
+ displayValue: localPath,
65
+ clientValue: localPath,
66
+ vscodeValue: pathToFileURL(localPath).href,
67
+ localPath,
68
+ };
69
+ }
70
+ function normalizeHttpsSource(input, parsed) {
71
+ if (parsed.protocol !== 'https:') {
72
+ throw new CommandError(`Git URL 只接受 HTTPS 或 SSH: ${parsed.protocol}`);
73
+ }
74
+ if (parsed.username || parsed.password) {
75
+ throw new CommandError('Git URL 不能包含内嵌凭据;请使用客户端已有的认证配置。');
76
+ }
77
+ if (!parsed.hostname || parsed.pathname.split('/').filter(Boolean).length < 2) {
78
+ throw new CommandError('HTTPS Git URL 必须包含主机、owner 与 repository 路径。');
79
+ }
80
+ if (parsed.search || parsed.hash) {
81
+ throw new CommandError('Git URL 不能包含 query 或 fragment。');
82
+ }
83
+ return {
84
+ kind: 'git',
85
+ input,
86
+ displayValue: input,
87
+ clientValue: input,
88
+ vscodeValue: input,
89
+ };
90
+ }
91
+ function normalizeSshSource(input, parsed) {
92
+ if (parsed.password) {
93
+ throw new CommandError('SSH Git URL 不能包含内嵌密码。');
94
+ }
95
+ if (!parsed.hostname || parsed.pathname.split('/').filter(Boolean).length < 2) {
96
+ throw new CommandError('SSH Git URL 必须包含主机、owner 与 repository 路径。');
97
+ }
98
+ if (parsed.search || parsed.hash) {
99
+ throw new CommandError('SSH Git URL 不能包含 query 或 fragment。');
100
+ }
101
+ return {
102
+ kind: 'git',
103
+ input,
104
+ displayValue: input,
105
+ clientValue: input,
106
+ vscodeValue: input,
107
+ };
108
+ }
109
+ export function normalizeMarketplaceSource(sourceInput, options = {}) {
110
+ assertNoTerminalControlCharacters(sourceInput, 'Marketplace 来源');
111
+ if (sourceInput.length === 0 || sourceInput !== sourceInput.trim()) {
112
+ throw new CommandError('Marketplace 来源不能为空,也不能包含首尾空白。');
113
+ }
114
+ if (sourceInput.startsWith('-')) {
115
+ throw new CommandError('Marketplace 来源不能以 - 开头。');
116
+ }
117
+ const baseDir = resolve(options.baseDir ?? process.env.INIT_CWD ?? process.cwd());
118
+ const expanded = expandHomePath(sourceInput, options.homeDir ?? homedir());
119
+ const localCandidate = isAbsolute(expanded)
120
+ ? expanded
121
+ : appendPathWithoutNormalizing(baseDir, expanded);
122
+ assertNoTerminalControlCharacters(localCandidate, '解析后的 Marketplace 本地路径');
123
+ if (existsSync(localCandidate)) {
124
+ return normalizeLocalSource(sourceInput, localCandidate);
125
+ }
126
+ if (looksLikeLocalPath(sourceInput)) {
127
+ throw new CommandError(`Marketplace 本地路径不存在: ${localCandidate}`);
128
+ }
129
+ const shorthand = GITHUB_SHORTHAND.exec(sourceInput);
130
+ if (shorthand) {
131
+ if (shorthand[1] === '.' || shorthand[1] === '..' || shorthand[2] === '.' || shorthand[2] === '..') {
132
+ throw new CommandError('GitHub owner/repo 的 owner 与 repository 不能是 . 或 ..。');
133
+ }
134
+ return {
135
+ kind: 'git',
136
+ input: sourceInput,
137
+ displayValue: sourceInput,
138
+ clientValue: sourceInput,
139
+ vscodeValue: sourceInput,
140
+ };
141
+ }
142
+ if (SCP_SSH_URL.test(sourceInput)) {
143
+ assertNoEncodedTerminalControlCharacters(sourceInput, 'SCP SSH Git URL');
144
+ return {
145
+ kind: 'git',
146
+ input: sourceInput,
147
+ displayValue: sourceInput,
148
+ clientValue: sourceInput,
149
+ vscodeValue: sourceInput,
150
+ };
151
+ }
152
+ if (sourceInput.includes('://')) {
153
+ assertNoEncodedTerminalControlCharacters(sourceInput, 'Marketplace Git URL');
154
+ let parsed;
155
+ try {
156
+ parsed = new URL(sourceInput);
157
+ }
158
+ catch {
159
+ throw new CommandError('Marketplace Git URL 格式无效。');
160
+ }
161
+ if (parsed.protocol === 'ssh:') {
162
+ return normalizeSshSource(sourceInput, parsed);
163
+ }
164
+ return normalizeHttpsSource(sourceInput, parsed);
165
+ }
166
+ throw new CommandError('无法识别来源;请传入已存在的本地目录、owner/repo、HTTPS Git URL 或 SSH Git URL。');
167
+ }
168
+ export function normalizeTargetIds(values) {
169
+ const requested = new Set();
170
+ for (const value of values) {
171
+ if (!isAgentTargetId(value)) {
172
+ throw new CommandError(`未知 agent: ${value}。可选值: ${AGENT_TARGET_IDS.join(', ')}`);
173
+ }
174
+ requested.add(value);
175
+ }
176
+ const normalized = AGENT_TARGET_IDS.filter((id) => requested.has(id));
177
+ if (normalized.length === 0) {
178
+ throw new CommandError('至少选择一个 agent。');
179
+ }
180
+ return normalized;
181
+ }
182
+ export async function inspectMarketplaceRegistration(sourceInput, options = {}) {
183
+ const source = normalizeMarketplaceSource(sourceInput, options);
184
+ const targetIds = normalizeTargetIds(options.targetIds ?? AGENT_TARGET_IDS);
185
+ const selected = new Set(targetIds);
186
+ const targets = [];
187
+ let interrupted = false;
188
+ for (const adapter of MARKETPLACE_REGISTRATION_ADAPTERS) {
189
+ if (!selected.has(adapter.id)) {
190
+ continue;
191
+ }
192
+ if (!interrupted && options.runtime?.signal?.aborted) {
193
+ targets.push({
194
+ id: adapter.id,
195
+ label: adapter.label,
196
+ status: 'interrupted',
197
+ message: '因用户中断未执行能力探测或注册。',
198
+ recovery: '确认客户端状态后重新运行命令。',
199
+ });
200
+ interrupted = true;
201
+ continue;
202
+ }
203
+ if (interrupted) {
204
+ targets.push({
205
+ id: adapter.id,
206
+ label: adapter.label,
207
+ status: 'interrupted',
208
+ message: '因前序目标中断未执行能力探测或注册。',
209
+ recovery: '确认中断目标的客户端状态后重新运行命令。',
210
+ });
211
+ continue;
212
+ }
213
+ const inspection = await adapter.inspect(source, options.runtime);
214
+ targets.push(inspection);
215
+ if (inspection.status === 'interrupted') {
216
+ interrupted = true;
217
+ }
218
+ }
219
+ return { source, targets };
220
+ }
221
+ function resultFromInspection(target) {
222
+ return {
223
+ id: target.id,
224
+ label: target.label,
225
+ status: target.status === 'ready' ? 'failed' : target.status,
226
+ message: target.message,
227
+ recovery: target.recovery,
228
+ ...(target.invocation ? { invocation: target.invocation } : {}),
229
+ };
230
+ }
231
+ function interruptedBeforeRegistrationResult(target, message) {
232
+ return {
233
+ id: target.id,
234
+ label: target.label,
235
+ status: 'interrupted',
236
+ message,
237
+ recovery: '确认中断目标的客户端状态后重新运行命令。',
238
+ ...(target.invocation ? { invocation: target.invocation } : {}),
239
+ };
240
+ }
241
+ export function marketplaceRegistrationExitCode(results) {
242
+ if (results.some((result) => result.status === 'interrupted')) {
243
+ return 130;
244
+ }
245
+ const completed = results.filter((result) => result.status === 'completed').length;
246
+ if (completed === results.length && results.length > 0) {
247
+ return 0;
248
+ }
249
+ if (completed > 0) {
250
+ return 2;
251
+ }
252
+ return 1;
253
+ }
254
+ export async function executeMarketplaceRegistration(inspection, options = {}) {
255
+ const preflightInterruptedIndex = inspection.targets.findIndex((target) => target.status === 'interrupted');
256
+ if (preflightInterruptedIndex >= 0) {
257
+ const results = inspection.targets.map((target, index) => {
258
+ if (index < preflightInterruptedIndex && target.status === 'ready') {
259
+ return interruptedBeforeRegistrationResult(target, `因能力探测阶段中断未执行注册。预检状态:${target.message}`);
260
+ }
261
+ return resultFromInspection(target);
262
+ });
263
+ results.forEach((result) => options.onTargetResult?.(result));
264
+ return {
265
+ source: inspection.source,
266
+ results,
267
+ exitCode: 130,
268
+ };
269
+ }
270
+ const results = [];
271
+ for (const [index, target] of inspection.targets.entries()) {
272
+ if (options.runtime?.signal?.aborted) {
273
+ for (const remaining of inspection.targets.slice(index)) {
274
+ const skipped = remaining.status === 'ready'
275
+ ? interruptedBeforeRegistrationResult(remaining, `因用户中断未执行注册。预检状态:${remaining.message}`)
276
+ : resultFromInspection(remaining);
277
+ results.push(skipped);
278
+ options.onTargetResult?.(skipped);
279
+ }
280
+ break;
281
+ }
282
+ options.onTargetStart?.(target);
283
+ const adapter = getMarketplaceRegistrationAdapter(target.id);
284
+ const result = await adapter.execute(inspection.source, target, options.runtime);
285
+ results.push(result);
286
+ options.onTargetResult?.(result);
287
+ if (result.status === 'interrupted') {
288
+ for (const remaining of inspection.targets.slice(index + 1)) {
289
+ const skipped = remaining.status === 'ready'
290
+ ? interruptedBeforeRegistrationResult(remaining, `因前序目标中断未执行注册。预检状态:${remaining.message}`)
291
+ : resultFromInspection(remaining);
292
+ results.push(skipped);
293
+ options.onTargetResult?.(skipped);
294
+ }
295
+ break;
296
+ }
297
+ }
298
+ return {
299
+ source: inspection.source,
300
+ results,
301
+ exitCode: marketplaceRegistrationExitCode(results),
302
+ };
303
+ }
304
+ //# sourceMappingURL=marketplace-registration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-registration.js","sourceRoot":"","sources":["../../src/application/marketplace-registration.ts"],"names":[],"mappings":"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"}
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] 生成双平台 manifest
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] 生成双平台 manifest
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('管理兼容 Claude Code 和 Codex 的 plugin marketplace 仓库')
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]', '显示指定命令的帮助')
@@ -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 生成双平台 manifest')
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.parse();
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":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * build 命令 — 从 plugin.yaml 生成双平台 manifest
2
+ * build 命令 — 从 plugin.yaml 生成 Agent Plugins 与平台 manifest
3
3
  *
4
4
  * 用法:mp build [name] 或 mp build --all
5
5
  */
@@ -1,17 +1,34 @@
1
1
  /**
2
- * build 命令 — 从 plugin.yaml 生成双平台 manifest
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
- import { generateOpenSpec } from '../adapters/openspec.js';
12
- function buildOne(context, name) {
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) {
13
15
  const pluginDir = join(context.pluginsDir, name);
14
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);
15
32
  generateClaude(config, pluginDir);
16
33
  generateCodex(config, pluginDir);
17
34
  generateOpenSpec(config, pluginDir);
@@ -24,16 +41,19 @@ export function runBuild(name, options) {
24
41
  console.error(chalk.red('✗ 请指定插件名或使用 --all'));
25
42
  process.exit(1);
26
43
  }
27
- console.log(chalk.blue(`⟳ 构建 ${names.length} 个插件的平台 manifest...\n`));
44
+ console.log(chalk.blue(`⟳ 构建 ${names.length} 个插件的 Agent Plugins 与平台 manifest...\n`));
45
+ const targets = [];
28
46
  for (const n of names) {
29
47
  try {
30
- buildOne(context, n);
48
+ targets.push(loadBuildTarget(context, n));
31
49
  }
32
50
  catch (err) {
33
51
  console.error(chalk.red(` ✗ ${n}: ${err.message}`));
34
52
  process.exit(1);
35
53
  }
36
54
  }
55
+ for (const target of targets)
56
+ buildOne(target);
37
57
  console.log(chalk.green(`\n✓ 构建完成`));
38
58
  }
39
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,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"}
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 {};
@@ -26,19 +26,10 @@ function listComponentLabels(config) {
26
26
  labels.push('Hook');
27
27
  return labels;
28
28
  }
29
- export function runIndexGen(options = {}) {
30
- console.log(chalk.blue('⟳ 生成 marketplace 索引...\n'));
31
- const context = resolveRepoContext(options.root);
32
- const plugins = loadAllPlugins(context);
33
- const marketplace = loadMarketplaceMetadata(context);
34
- if (plugins.length === 0) {
35
- console.log(chalk.yellow(' ⚠ 没有找到插件'));
36
- return;
37
- }
29
+ export function buildClientMarketplaceIndexes(plugins, marketplace) {
38
30
  const marketplaceDisplayName = toTitleCase(marketplace.name);
39
31
  const ownerName = marketplace.organization || marketplaceDisplayName;
40
- // ── Claude Code marketplace ──
41
- const claudeMarketplace = {
32
+ const claude = {
42
33
  name: marketplace.name,
43
34
  owner: {
44
35
  name: ownerName,
@@ -58,22 +49,61 @@ export function runIndexGen(options = {}) {
58
49
  ...(config.components.lsp?.length ? { lspServers: './.lsp.json' } : {}),
59
50
  })),
60
51
  };
61
- writeJson(join(context.rootDir, '.claude-plugin/marketplace.json'), claudeMarketplace);
62
- console.log(chalk.green(' ✓ .claude-plugin/marketplace.json (Claude Code)'));
63
- // ── Codex marketplace ──
64
- const codexEntries = plugins.map(({ name, config }) => buildMarketplaceEntry(config, `./plugins/${name}`));
65
- const codexMarketplace = {
52
+ const codex = {
66
53
  name: marketplace.name,
67
54
  interface: {
68
55
  displayName: marketplaceDisplayName,
69
56
  },
70
- plugins: codexEntries,
57
+ plugins: plugins.map(({ name, config }) => buildMarketplaceEntry(config, `./plugins/${name}`)),
71
58
  };
72
- writeJson(join(context.rootDir, '.agents/plugins/marketplace.json'), codexMarketplace);
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
+ })),
76
+ };
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);
73
100
  console.log(chalk.green(' ✓ .agents/plugins/marketplace.json (Codex)'));
74
101
  // ── 根目录兼容镜像 ──
75
- writeJson(join(context.rootDir, 'marketplace.json'), codexMarketplace);
102
+ writeJson(join(context.rootDir, 'marketplace.json'), indexes.codex);
76
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)'));
77
107
  // ── OpenSpec source adapter sidecar 索引 ──
78
108
  const openSpecEntries = plugins
79
109
  .map(({ name, dir, config }) => buildOpenSpecSourceAdapterIndexEntry(config, dir, `./plugins/${name}`))
@@ -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;AAC7D,OAAO,EACL,qCAAqC,EACrC,oCAAoC,GAErC,MAAM,yBAAyB,CAAC;AAEjC,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,SAAS,mBAAmB,CAAC,MAAmG;IAC9H,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,OAAO,MAAM,CAAC;AAChB,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;YACrD,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,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,2CAA2C;IAC3C,MAAM,eAAe,GAAG,OAAO;SAC5B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAC7B,oCAAoC,CAAC,MAAM,EAAE,GAAG,EAAE,aAAa,IAAI,EAAE,CAAC,CACvE;SACA,MAAM,CAAC,CAAC,KAAK,EAA4C,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAC/E,qCAAqC,CAAC,eAAe,CAAC,CAAC;IAEvD,MAAM,sBAAsB,GAAG;QAC7B,aAAa,EAAE,6BAA6B;QAC5C,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE;QAC1C,OAAO,EAAE,eAAe;KACzB,CAAC;IAEF,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,uCAAuC,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAClG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC;IAEjF,eAAe;IACf,MAAM,UAAU,GAAG,OAAO;SACvB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,OAAO,OAAO,IAAI,QAAQ,MAAM,CAAC,OAAO,IAAI,SAAS,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;IACjF,CAAC,CAAC;SACD,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"}
1
+ {"version":3,"file":"index-gen.js","sourceRoot":"","sources":["../../src/commands/index-gen.ts"],"names":[],"mappings":"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"}