@birdie_moblie/plugin-marketplace-cli 1.1.0 → 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 +40 -0
- package/README.md +73 -5
- 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 +16 -1
- package/dist/adapters/claude.js +82 -13
- 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/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 +24 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/build.d.ts +1 -1
- package/dist/commands/build.js +26 -6
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/index-gen.d.ts +10 -0
- package/dist/commands/index-gen.js +49 -19
- 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.js +17 -5
- 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 +285 -7
- package/dist/commands/release-local.js.map +1 -1
- package/dist/commands/validate.js +173 -19
- 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 +23 -3
- package/dist/schema/plugin-yaml.js +65 -18
- 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 +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]
|
|
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]', '显示指定命令的帮助')
|
|
@@ -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":";AAEA;;;;;;;;;;;GAWG;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,KAAK,MAAM,OAAO,CAAC;AAC1B,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;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,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,uEAAuE,CAAC;KACpF,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,iDAAiD,CAAC;KAC9D,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;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CACL,iBAAiB,EACjB,sDAAsD,EACtD,CAAC,KAAa,EAAE,QAAkB,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,EAC3D,EAAE,CACH;KACA,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;KAC9C,MAAM,CACL,KAAK,EACH,MAAc,EACd,OAA0C,EAC1C,EAAE;IACF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACrC,CAAC,CACF,CAAC;AAEJ,IAAI,CAAC;IACH,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC"}
|
package/dist/commands/build.d.ts
CHANGED
package/dist/commands/build.js
CHANGED
|
@@ -1,17 +1,34 @@
|
|
|
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
|
-
import { generateOpenSpec } from '../adapters/openspec.js';
|
|
12
|
-
|
|
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}
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
57
|
+
plugins: plugins.map(({ name, config }) => buildMarketplaceEntry(config, `./plugins/${name}`)),
|
|
71
58
|
};
|
|
72
|
-
|
|
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'),
|
|
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,
|
|
1
|
+
{"version":3,"file":"index-gen.js","sourceRoot":"","sources":["../../src/commands/index-gen.ts"],"names":[],"mappings":"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"}
|