mewkit 1.11.1 → 1.12.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/dist/commands/build-plugin.d.ts +8 -0
- package/dist/commands/build-plugin.d.ts.map +1 -0
- package/dist/commands/build-plugin.js +48 -0
- package/dist/commands/build-plugin.js.map +1 -0
- package/dist/commands/doctor-checks.d.ts +9 -0
- package/dist/commands/doctor-checks.d.ts.map +1 -1
- package/dist/commands/doctor-checks.js +42 -0
- package/dist/commands/doctor-checks.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +2 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/index-command.d.ts.map +1 -1
- package/dist/commands/index-command.js +2 -1
- package/dist/commands/index-command.js.map +1 -1
- package/dist/commands/validate.d.ts +3 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +9 -0
- package/dist/commands/validate.js.map +1 -1
- package/dist/core/check-plugin-manifests.d.ts +10 -0
- package/dist/core/check-plugin-manifests.d.ts.map +1 -0
- package/dist/core/check-plugin-manifests.js +150 -0
- package/dist/core/check-plugin-manifests.js.map +1 -0
- package/dist/core/derived-index.d.ts +5 -3
- package/dist/core/derived-index.d.ts.map +1 -1
- package/dist/core/derived-index.js +35 -10
- package/dist/core/derived-index.js.map +1 -1
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +5 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/plugin-agent-refs.d.ts +22 -0
- package/dist/core/plugin-agent-refs.d.ts.map +1 -0
- package/dist/core/plugin-agent-refs.js +87 -0
- package/dist/core/plugin-agent-refs.js.map +1 -0
- package/dist/core/plugin-hooks.d.ts +15 -0
- package/dist/core/plugin-hooks.d.ts.map +1 -0
- package/dist/core/plugin-hooks.js +58 -0
- package/dist/core/plugin-hooks.js.map +1 -0
- package/dist/core/plugin-manifest.d.ts +289 -0
- package/dist/core/plugin-manifest.d.ts.map +1 -0
- package/dist/core/plugin-manifest.js +125 -0
- package/dist/core/plugin-manifest.js.map +1 -0
- package/dist/core/plugin-payload.d.ts +26 -0
- package/dist/core/plugin-payload.d.ts.map +1 -0
- package/dist/core/plugin-payload.js +138 -0
- package/dist/core/plugin-payload.js.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/wiki/application/ports.d.ts +111 -0
- package/dist/wiki/application/ports.d.ts.map +1 -0
- package/dist/wiki/application/ports.js +33 -0
- package/dist/wiki/application/ports.js.map +1 -0
- package/dist/wiki/application/queries.d.ts +5 -0
- package/dist/wiki/application/queries.d.ts.map +1 -0
- package/dist/wiki/application/queries.js +10 -0
- package/dist/wiki/application/queries.js.map +1 -0
- package/dist/wiki/application/research.d.ts +16 -0
- package/dist/wiki/application/research.d.ts.map +1 -0
- package/dist/wiki/application/research.js +48 -0
- package/dist/wiki/application/research.js.map +1 -0
- package/dist/wiki/application/service.d.ts +27 -0
- package/dist/wiki/application/service.d.ts.map +1 -0
- package/dist/wiki/application/service.js +153 -0
- package/dist/wiki/application/service.js.map +1 -0
- package/dist/wiki/domain/index.d.ts +5 -0
- package/dist/wiki/domain/index.d.ts.map +1 -0
- package/dist/wiki/domain/index.js +6 -0
- package/dist/wiki/domain/index.js.map +1 -0
- package/dist/wiki/domain/invariants.d.ts +28 -0
- package/dist/wiki/domain/invariants.d.ts.map +1 -0
- package/dist/wiki/domain/invariants.js +84 -0
- package/dist/wiki/domain/invariants.js.map +1 -0
- package/dist/wiki/domain/salience.d.ts +11 -0
- package/dist/wiki/domain/salience.d.ts.map +1 -0
- package/dist/wiki/domain/salience.js +40 -0
- package/dist/wiki/domain/salience.js.map +1 -0
- package/dist/wiki/domain/types.d.ts +151 -0
- package/dist/wiki/domain/types.d.ts.map +1 -0
- package/dist/wiki/domain/types.js +27 -0
- package/dist/wiki/domain/types.js.map +1 -0
- package/dist/wiki/domain/write-decision.d.ts +25 -0
- package/dist/wiki/domain/write-decision.d.ts.map +1 -0
- package/dist/wiki/domain/write-decision.js +71 -0
- package/dist/wiki/domain/write-decision.js.map +1 -0
- package/dist/wiki/infrastructure/fetcher-adapter.d.ts +45 -0
- package/dist/wiki/infrastructure/fetcher-adapter.d.ts.map +1 -0
- package/dist/wiki/infrastructure/fetcher-adapter.js +99 -0
- package/dist/wiki/infrastructure/fetcher-adapter.js.map +1 -0
- package/dist/wiki/infrastructure/inventory-adapter.d.ts +13 -0
- package/dist/wiki/infrastructure/inventory-adapter.d.ts.map +1 -0
- package/dist/wiki/infrastructure/inventory-adapter.js +46 -0
- package/dist/wiki/infrastructure/inventory-adapter.js.map +1 -0
- package/dist/wiki/infrastructure/markdown-repository.d.ts +23 -0
- package/dist/wiki/infrastructure/markdown-repository.d.ts.map +1 -0
- package/dist/wiki/infrastructure/markdown-repository.js +168 -0
- package/dist/wiki/infrastructure/markdown-repository.js.map +1 -0
- package/dist/wiki/infrastructure/scan-patterns.d.ts +20 -0
- package/dist/wiki/infrastructure/scan-patterns.d.ts.map +1 -0
- package/dist/wiki/infrastructure/scan-patterns.js +106 -0
- package/dist/wiki/infrastructure/scan-patterns.js.map +1 -0
- package/dist/wiki/infrastructure/scanner-adapter.d.ts +10 -0
- package/dist/wiki/infrastructure/scanner-adapter.d.ts.map +1 -0
- package/dist/wiki/infrastructure/scanner-adapter.js +147 -0
- package/dist/wiki/infrastructure/scanner-adapter.js.map +1 -0
- package/dist/wiki/infrastructure/sqlite-index.d.ts +9 -0
- package/dist/wiki/infrastructure/sqlite-index.d.ts.map +1 -0
- package/dist/wiki/infrastructure/sqlite-index.js +36 -0
- package/dist/wiki/infrastructure/sqlite-index.js.map +1 -0
- package/dist/wiki/infrastructure/trace-adapter.d.ts +7 -0
- package/dist/wiki/infrastructure/trace-adapter.d.ts.map +1 -0
- package/dist/wiki/infrastructure/trace-adapter.js +42 -0
- package/dist/wiki/infrastructure/trace-adapter.js.map +1 -0
- package/dist/wiki/infrastructure/wiki-ingest.d.ts +14 -0
- package/dist/wiki/infrastructure/wiki-ingest.d.ts.map +1 -0
- package/dist/wiki/infrastructure/wiki-ingest.js +138 -0
- package/dist/wiki/infrastructure/wiki-ingest.js.map +1 -0
- package/dist/wiki/infrastructure/wiki-query.d.ts +15 -0
- package/dist/wiki/infrastructure/wiki-query.d.ts.map +1 -0
- package/dist/wiki/infrastructure/wiki-query.js +46 -0
- package/dist/wiki/infrastructure/wiki-query.js.map +1 -0
- package/dist/wiki/infrastructure/wiki-schema.d.ts +3 -0
- package/dist/wiki/infrastructure/wiki-schema.d.ts.map +1 -0
- package/dist/wiki/infrastructure/wiki-schema.js +43 -0
- package/dist/wiki/infrastructure/wiki-schema.js.map +1 -0
- package/dist/wiki/interface/cli.d.ts +7 -0
- package/dist/wiki/interface/cli.d.ts.map +1 -0
- package/dist/wiki/interface/cli.js +160 -0
- package/dist/wiki/interface/cli.js.map +1 -0
- package/dist/wiki/render.d.ts +3 -0
- package/dist/wiki/render.d.ts.map +1 -0
- package/dist/wiki/render.js +58 -0
- package/dist/wiki/render.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Plugin identity shared by every manifest. */
|
|
3
|
+
export declare const PLUGIN_NAME = "mk";
|
|
4
|
+
export interface PluginIdentity {
|
|
5
|
+
/** Plugin name; defaults to `mk`. The runtime prefixes agents/skills with it. */
|
|
6
|
+
name?: string;
|
|
7
|
+
/** Release version (root package.json version at release time). */
|
|
8
|
+
version: string;
|
|
9
|
+
description: string;
|
|
10
|
+
author?: {
|
|
11
|
+
name: string;
|
|
12
|
+
email?: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare const ClaudePluginJsonSchema: z.ZodObject<{
|
|
16
|
+
$schema: z.ZodOptional<z.ZodString>;
|
|
17
|
+
name: z.ZodString;
|
|
18
|
+
version: z.ZodString;
|
|
19
|
+
description: z.ZodString;
|
|
20
|
+
author: z.ZodOptional<z.ZodObject<{
|
|
21
|
+
name: z.ZodString;
|
|
22
|
+
email: z.ZodOptional<z.ZodString>;
|
|
23
|
+
}, "strip", z.ZodTypeAny, {
|
|
24
|
+
name: string;
|
|
25
|
+
email?: string | undefined;
|
|
26
|
+
}, {
|
|
27
|
+
name: string;
|
|
28
|
+
email?: string | undefined;
|
|
29
|
+
}>>;
|
|
30
|
+
skills: z.ZodArray<z.ZodString, "many">;
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
32
|
+
skills: string[];
|
|
33
|
+
version: string;
|
|
34
|
+
name: string;
|
|
35
|
+
description: string;
|
|
36
|
+
$schema?: string | undefined;
|
|
37
|
+
author?: {
|
|
38
|
+
name: string;
|
|
39
|
+
email?: string | undefined;
|
|
40
|
+
} | undefined;
|
|
41
|
+
}, {
|
|
42
|
+
skills: string[];
|
|
43
|
+
version: string;
|
|
44
|
+
name: string;
|
|
45
|
+
description: string;
|
|
46
|
+
$schema?: string | undefined;
|
|
47
|
+
author?: {
|
|
48
|
+
name: string;
|
|
49
|
+
email?: string | undefined;
|
|
50
|
+
} | undefined;
|
|
51
|
+
}>;
|
|
52
|
+
export type ClaudePluginJson = z.infer<typeof ClaudePluginJsonSchema>;
|
|
53
|
+
export declare function buildClaudePluginJson(id: PluginIdentity): ClaudePluginJson;
|
|
54
|
+
export interface ClaudeMarketplaceOptions extends PluginIdentity {
|
|
55
|
+
marketplaceName: string;
|
|
56
|
+
owner: {
|
|
57
|
+
name: string;
|
|
58
|
+
email?: string;
|
|
59
|
+
url?: string;
|
|
60
|
+
};
|
|
61
|
+
/** Plugin source path relative to the marketplace root (e.g. `./` or `./mk`). */
|
|
62
|
+
source: string;
|
|
63
|
+
}
|
|
64
|
+
export declare const ClaudeMarketplaceJsonSchema: z.ZodObject<{
|
|
65
|
+
$schema: z.ZodOptional<z.ZodString>;
|
|
66
|
+
name: z.ZodString;
|
|
67
|
+
owner: z.ZodObject<{
|
|
68
|
+
name: z.ZodString;
|
|
69
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
70
|
+
name: z.ZodString;
|
|
71
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
72
|
+
name: z.ZodString;
|
|
73
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
74
|
+
plugins: z.ZodArray<z.ZodObject<{
|
|
75
|
+
name: z.ZodString;
|
|
76
|
+
source: z.ZodString;
|
|
77
|
+
description: z.ZodOptional<z.ZodString>;
|
|
78
|
+
}, "strip", z.ZodTypeAny, {
|
|
79
|
+
name: string;
|
|
80
|
+
source: string;
|
|
81
|
+
description?: string | undefined;
|
|
82
|
+
}, {
|
|
83
|
+
name: string;
|
|
84
|
+
source: string;
|
|
85
|
+
description?: string | undefined;
|
|
86
|
+
}>, "many">;
|
|
87
|
+
}, "strip", z.ZodTypeAny, {
|
|
88
|
+
owner: {
|
|
89
|
+
name: string;
|
|
90
|
+
} & {
|
|
91
|
+
[k: string]: unknown;
|
|
92
|
+
};
|
|
93
|
+
name: string;
|
|
94
|
+
plugins: {
|
|
95
|
+
name: string;
|
|
96
|
+
source: string;
|
|
97
|
+
description?: string | undefined;
|
|
98
|
+
}[];
|
|
99
|
+
$schema?: string | undefined;
|
|
100
|
+
}, {
|
|
101
|
+
owner: {
|
|
102
|
+
name: string;
|
|
103
|
+
} & {
|
|
104
|
+
[k: string]: unknown;
|
|
105
|
+
};
|
|
106
|
+
name: string;
|
|
107
|
+
plugins: {
|
|
108
|
+
name: string;
|
|
109
|
+
source: string;
|
|
110
|
+
description?: string | undefined;
|
|
111
|
+
}[];
|
|
112
|
+
$schema?: string | undefined;
|
|
113
|
+
}>;
|
|
114
|
+
export type ClaudeMarketplaceJson = z.infer<typeof ClaudeMarketplaceJsonSchema>;
|
|
115
|
+
export declare function buildClaudeMarketplaceJson(opts: ClaudeMarketplaceOptions): ClaudeMarketplaceJson;
|
|
116
|
+
export declare const CodexPluginJsonSchema: z.ZodObject<{
|
|
117
|
+
name: z.ZodString;
|
|
118
|
+
version: z.ZodString;
|
|
119
|
+
description: z.ZodString;
|
|
120
|
+
author: z.ZodOptional<z.ZodObject<{
|
|
121
|
+
name: z.ZodString;
|
|
122
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
123
|
+
name: z.ZodString;
|
|
124
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
125
|
+
name: z.ZodString;
|
|
126
|
+
}, z.ZodTypeAny, "passthrough">>>;
|
|
127
|
+
skills: z.ZodString;
|
|
128
|
+
interface: z.ZodObject<{
|
|
129
|
+
displayName: z.ZodString;
|
|
130
|
+
shortDescription: z.ZodString;
|
|
131
|
+
longDescription: z.ZodString;
|
|
132
|
+
developerName: z.ZodString;
|
|
133
|
+
category: z.ZodString;
|
|
134
|
+
capabilities: z.ZodArray<z.ZodString, "many">;
|
|
135
|
+
defaultPrompt: z.ZodString;
|
|
136
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
137
|
+
displayName: z.ZodString;
|
|
138
|
+
shortDescription: z.ZodString;
|
|
139
|
+
longDescription: z.ZodString;
|
|
140
|
+
developerName: z.ZodString;
|
|
141
|
+
category: z.ZodString;
|
|
142
|
+
capabilities: z.ZodArray<z.ZodString, "many">;
|
|
143
|
+
defaultPrompt: z.ZodString;
|
|
144
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
145
|
+
displayName: z.ZodString;
|
|
146
|
+
shortDescription: z.ZodString;
|
|
147
|
+
longDescription: z.ZodString;
|
|
148
|
+
developerName: z.ZodString;
|
|
149
|
+
category: z.ZodString;
|
|
150
|
+
capabilities: z.ZodArray<z.ZodString, "many">;
|
|
151
|
+
defaultPrompt: z.ZodString;
|
|
152
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
153
|
+
}, "strip", z.ZodTypeAny, {
|
|
154
|
+
skills: string;
|
|
155
|
+
version: string;
|
|
156
|
+
name: string;
|
|
157
|
+
description: string;
|
|
158
|
+
interface: {
|
|
159
|
+
displayName: string;
|
|
160
|
+
shortDescription: string;
|
|
161
|
+
longDescription: string;
|
|
162
|
+
developerName: string;
|
|
163
|
+
category: string;
|
|
164
|
+
capabilities: string[];
|
|
165
|
+
defaultPrompt: string;
|
|
166
|
+
} & {
|
|
167
|
+
[k: string]: unknown;
|
|
168
|
+
};
|
|
169
|
+
author?: z.objectOutputType<{
|
|
170
|
+
name: z.ZodString;
|
|
171
|
+
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
172
|
+
}, {
|
|
173
|
+
skills: string;
|
|
174
|
+
version: string;
|
|
175
|
+
name: string;
|
|
176
|
+
description: string;
|
|
177
|
+
interface: {
|
|
178
|
+
displayName: string;
|
|
179
|
+
shortDescription: string;
|
|
180
|
+
longDescription: string;
|
|
181
|
+
developerName: string;
|
|
182
|
+
category: string;
|
|
183
|
+
capabilities: string[];
|
|
184
|
+
defaultPrompt: string;
|
|
185
|
+
} & {
|
|
186
|
+
[k: string]: unknown;
|
|
187
|
+
};
|
|
188
|
+
author?: z.objectInputType<{
|
|
189
|
+
name: z.ZodString;
|
|
190
|
+
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
191
|
+
}>;
|
|
192
|
+
export type CodexPluginJson = z.infer<typeof CodexPluginJsonSchema>;
|
|
193
|
+
export interface CodexPluginOptions extends PluginIdentity {
|
|
194
|
+
displayName?: string;
|
|
195
|
+
category?: string;
|
|
196
|
+
}
|
|
197
|
+
export declare function buildCodexPluginJson(opts: CodexPluginOptions): CodexPluginJson;
|
|
198
|
+
export declare const CodexMarketplaceJsonSchema: z.ZodObject<{
|
|
199
|
+
name: z.ZodString;
|
|
200
|
+
interface: z.ZodObject<{
|
|
201
|
+
displayName: z.ZodString;
|
|
202
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
203
|
+
displayName: z.ZodString;
|
|
204
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
205
|
+
displayName: z.ZodString;
|
|
206
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
207
|
+
plugins: z.ZodArray<z.ZodObject<{
|
|
208
|
+
name: z.ZodString;
|
|
209
|
+
source: z.ZodObject<{
|
|
210
|
+
source: z.ZodString;
|
|
211
|
+
path: z.ZodOptional<z.ZodString>;
|
|
212
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
213
|
+
source: z.ZodString;
|
|
214
|
+
path: z.ZodOptional<z.ZodString>;
|
|
215
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
216
|
+
source: z.ZodString;
|
|
217
|
+
path: z.ZodOptional<z.ZodString>;
|
|
218
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
219
|
+
policy: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
220
|
+
category: z.ZodOptional<z.ZodString>;
|
|
221
|
+
}, "strip", z.ZodTypeAny, {
|
|
222
|
+
name: string;
|
|
223
|
+
source: {
|
|
224
|
+
source: string;
|
|
225
|
+
path?: string | undefined;
|
|
226
|
+
} & {
|
|
227
|
+
[k: string]: unknown;
|
|
228
|
+
};
|
|
229
|
+
category?: string | undefined;
|
|
230
|
+
policy?: Record<string, string> | undefined;
|
|
231
|
+
}, {
|
|
232
|
+
name: string;
|
|
233
|
+
source: {
|
|
234
|
+
source: string;
|
|
235
|
+
path?: string | undefined;
|
|
236
|
+
} & {
|
|
237
|
+
[k: string]: unknown;
|
|
238
|
+
};
|
|
239
|
+
category?: string | undefined;
|
|
240
|
+
policy?: Record<string, string> | undefined;
|
|
241
|
+
}>, "many">;
|
|
242
|
+
}, "strip", z.ZodTypeAny, {
|
|
243
|
+
name: string;
|
|
244
|
+
plugins: {
|
|
245
|
+
name: string;
|
|
246
|
+
source: {
|
|
247
|
+
source: string;
|
|
248
|
+
path?: string | undefined;
|
|
249
|
+
} & {
|
|
250
|
+
[k: string]: unknown;
|
|
251
|
+
};
|
|
252
|
+
category?: string | undefined;
|
|
253
|
+
policy?: Record<string, string> | undefined;
|
|
254
|
+
}[];
|
|
255
|
+
interface: {
|
|
256
|
+
displayName: string;
|
|
257
|
+
} & {
|
|
258
|
+
[k: string]: unknown;
|
|
259
|
+
};
|
|
260
|
+
}, {
|
|
261
|
+
name: string;
|
|
262
|
+
plugins: {
|
|
263
|
+
name: string;
|
|
264
|
+
source: {
|
|
265
|
+
source: string;
|
|
266
|
+
path?: string | undefined;
|
|
267
|
+
} & {
|
|
268
|
+
[k: string]: unknown;
|
|
269
|
+
};
|
|
270
|
+
category?: string | undefined;
|
|
271
|
+
policy?: Record<string, string> | undefined;
|
|
272
|
+
}[];
|
|
273
|
+
interface: {
|
|
274
|
+
displayName: string;
|
|
275
|
+
} & {
|
|
276
|
+
[k: string]: unknown;
|
|
277
|
+
};
|
|
278
|
+
}>;
|
|
279
|
+
export type CodexMarketplaceJson = z.infer<typeof CodexMarketplaceJsonSchema>;
|
|
280
|
+
export interface CodexMarketplaceOptions {
|
|
281
|
+
name?: string;
|
|
282
|
+
marketplaceName: string;
|
|
283
|
+
marketplaceDisplayName?: string;
|
|
284
|
+
/** Plugin source path relative to the marketplace/repo root. */
|
|
285
|
+
sourcePath: string;
|
|
286
|
+
category?: string;
|
|
287
|
+
}
|
|
288
|
+
export declare function buildCodexMarketplaceJson(opts: CodexMarketplaceOptions): CodexMarketplaceJson;
|
|
289
|
+
//# sourceMappingURL=plugin-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-manifest.d.ts","sourceRoot":"","sources":["../../src/core/plugin-manifest.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,gDAAgD;AAChD,eAAO,MAAM,WAAW,OAAO,CAAC;AAEhC,MAAM,WAAW,cAAc;IAC9B,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAMD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,cAAc,GAAG,gBAAgB,CAW1E;AAED,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC/D,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAatC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,wBAAwB,GAAG,qBAAqB,CAShG;AAMD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,eAAe,CAmB9E;AAED,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAarC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,MAAM,WAAW,uBAAuB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,oBAAoB,CAa7F"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// Pure builders + schemas for the generated plugin manifests.
|
|
2
|
+
//
|
|
3
|
+
// Two runtimes, two manifest shapes — both verified against the live CLIs
|
|
4
|
+
// (`claude plugin init` and the Codex `plugin-creator` scaffold):
|
|
5
|
+
// - Claude Code: `.claude-plugin/plugin.json` + `.claude-plugin/marketplace.json`
|
|
6
|
+
// - Codex: `.codex-plugin/plugin.json` + `.agents/plugins/marketplace.json`
|
|
7
|
+
// The version is the SINGLE source of truth (root package version at release),
|
|
8
|
+
// staged into the release commit so the manifest version never lags the release.
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
/** Plugin identity shared by every manifest. */
|
|
11
|
+
export const PLUGIN_NAME = "mk";
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Claude Code
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
export const ClaudePluginJsonSchema = z.object({
|
|
16
|
+
$schema: z.string().optional(),
|
|
17
|
+
name: z.string(),
|
|
18
|
+
version: z.string(),
|
|
19
|
+
description: z.string(),
|
|
20
|
+
author: z.object({ name: z.string(), email: z.string().optional() }).optional(),
|
|
21
|
+
skills: z.array(z.string()),
|
|
22
|
+
});
|
|
23
|
+
export function buildClaudePluginJson(id) {
|
|
24
|
+
return {
|
|
25
|
+
$schema: "https://anthropic.com/claude-code/plugin.schema.json",
|
|
26
|
+
name: id.name ?? PLUGIN_NAME,
|
|
27
|
+
version: id.version,
|
|
28
|
+
description: id.description,
|
|
29
|
+
...(id.author ? { author: id.author } : {}),
|
|
30
|
+
// Plugin root holds the transformed `.claude` payload; skills auto-discover
|
|
31
|
+
// from the `skills/` subtree, agents from `agents/`.
|
|
32
|
+
skills: ["./skills"],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export const ClaudeMarketplaceJsonSchema = z.object({
|
|
36
|
+
$schema: z.string().optional(),
|
|
37
|
+
name: z.string(),
|
|
38
|
+
owner: z.object({ name: z.string() }).passthrough(),
|
|
39
|
+
plugins: z
|
|
40
|
+
.array(z.object({
|
|
41
|
+
name: z.string(),
|
|
42
|
+
source: z.string(),
|
|
43
|
+
description: z.string().optional(),
|
|
44
|
+
}))
|
|
45
|
+
.min(1),
|
|
46
|
+
});
|
|
47
|
+
export function buildClaudeMarketplaceJson(opts) {
|
|
48
|
+
return {
|
|
49
|
+
$schema: "https://anthropic.com/claude-code/marketplace.schema.json",
|
|
50
|
+
name: opts.marketplaceName,
|
|
51
|
+
owner: opts.owner,
|
|
52
|
+
plugins: [
|
|
53
|
+
{ name: opts.name ?? PLUGIN_NAME, source: opts.source, description: opts.description },
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Codex
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
export const CodexPluginJsonSchema = z.object({
|
|
61
|
+
name: z.string(),
|
|
62
|
+
version: z.string(),
|
|
63
|
+
description: z.string(),
|
|
64
|
+
author: z.object({ name: z.string() }).passthrough().optional(),
|
|
65
|
+
// Codex `skills` is a STRING path (not an array, unlike Claude).
|
|
66
|
+
skills: z.string(),
|
|
67
|
+
interface: z
|
|
68
|
+
.object({
|
|
69
|
+
displayName: z.string(),
|
|
70
|
+
shortDescription: z.string(),
|
|
71
|
+
longDescription: z.string(),
|
|
72
|
+
developerName: z.string(),
|
|
73
|
+
category: z.string(),
|
|
74
|
+
capabilities: z.array(z.string()),
|
|
75
|
+
defaultPrompt: z.string(),
|
|
76
|
+
})
|
|
77
|
+
.passthrough(),
|
|
78
|
+
});
|
|
79
|
+
export function buildCodexPluginJson(opts) {
|
|
80
|
+
const name = opts.name ?? PLUGIN_NAME;
|
|
81
|
+
const display = opts.displayName ?? "MeowKit";
|
|
82
|
+
return {
|
|
83
|
+
name,
|
|
84
|
+
version: opts.version,
|
|
85
|
+
description: opts.description,
|
|
86
|
+
...(opts.author ? { author: { name: opts.author.name } } : {}),
|
|
87
|
+
skills: "./skills/",
|
|
88
|
+
interface: {
|
|
89
|
+
displayName: display,
|
|
90
|
+
shortDescription: `Use ${display} in Codex.`,
|
|
91
|
+
longDescription: opts.description,
|
|
92
|
+
developerName: opts.author?.name ?? "MeowKit",
|
|
93
|
+
category: opts.category ?? "Productivity",
|
|
94
|
+
capabilities: [],
|
|
95
|
+
defaultPrompt: `Help me use ${display}.`,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export const CodexMarketplaceJsonSchema = z.object({
|
|
100
|
+
name: z.string(),
|
|
101
|
+
interface: z.object({ displayName: z.string() }).passthrough(),
|
|
102
|
+
plugins: z
|
|
103
|
+
.array(z.object({
|
|
104
|
+
name: z.string(),
|
|
105
|
+
source: z.object({ source: z.string(), path: z.string().optional() }).passthrough(),
|
|
106
|
+
policy: z.record(z.string()).optional(),
|
|
107
|
+
category: z.string().optional(),
|
|
108
|
+
}))
|
|
109
|
+
.min(1),
|
|
110
|
+
});
|
|
111
|
+
export function buildCodexMarketplaceJson(opts) {
|
|
112
|
+
return {
|
|
113
|
+
name: opts.marketplaceName,
|
|
114
|
+
interface: { displayName: opts.marketplaceDisplayName ?? opts.marketplaceName },
|
|
115
|
+
plugins: [
|
|
116
|
+
{
|
|
117
|
+
name: opts.name ?? PLUGIN_NAME,
|
|
118
|
+
source: { source: "local", path: opts.sourcePath },
|
|
119
|
+
policy: { installation: "AVAILABLE", authentication: "ON_INSTALL" },
|
|
120
|
+
category: opts.category ?? "Productivity",
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=plugin-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-manifest.js","sourceRoot":"","sources":["../../src/core/plugin-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type PluginIdentity } from "./plugin-manifest.js";
|
|
2
|
+
export interface GeneratePayloadOptions extends PluginIdentity {
|
|
3
|
+
/** Path to the canonical `.claude` source directory. */
|
|
4
|
+
sourceDir: string;
|
|
5
|
+
/** Path to the plugin root to (re)generate. */
|
|
6
|
+
outDir: string;
|
|
7
|
+
/** Agent names to namespace; defaults to the names found in `sourceDir/agents`. */
|
|
8
|
+
agentNames?: Set<string>;
|
|
9
|
+
}
|
|
10
|
+
export interface GeneratePayloadResult {
|
|
11
|
+
filesScanned: number;
|
|
12
|
+
refsRewritten: number;
|
|
13
|
+
loopDirRenamed: boolean;
|
|
14
|
+
/** Non-agent `.md` files dropped from `agents/` (e.g. index files). */
|
|
15
|
+
nonAgentsPruned: number;
|
|
16
|
+
/** True when a plugin `hooks/hooks.json` was generated from settings.json. */
|
|
17
|
+
hooksGenerated: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build the plugin payload at `outDir`. Idempotent: clears and regenerates.
|
|
21
|
+
* Returns counts for verification.
|
|
22
|
+
*/
|
|
23
|
+
export declare function generatePluginPayload(opts: GeneratePayloadOptions): GeneratePayloadResult;
|
|
24
|
+
/** Relative payload paths of the two generated plugin manifests (for callers). */
|
|
25
|
+
export declare function pluginManifestPaths(outDir: string): string[];
|
|
26
|
+
//# sourceMappingURL=plugin-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-payload.d.ts","sourceRoot":"","sources":["../../src/core/plugin-payload.ts"],"names":[],"mappings":"AAqBA,OAAO,EAIN,KAAK,cAAc,EACnB,MAAM,sBAAsB,CAAC;AAuB9B,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC7D,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,uEAAuE;IACvE,eAAe,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,cAAc,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,qBAAqB,CAyDzF;AA4CD,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAK5D"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// Generate the plugin payload from the canonical `.claude` source tree.
|
|
2
|
+
//
|
|
3
|
+
// The shipped source keeps bare agent names + bare references so the flat-copy
|
|
4
|
+
// install (`mewkit init`) keeps working unchanged. This builder produces the
|
|
5
|
+
// plugin variant: a transformed copy of `.claude` at the plugin root, with kit
|
|
6
|
+
// agent references namespaced to `<plugin>:<agent>` and the one skill dir whose
|
|
7
|
+
// name diverges from its slug (`mk-loop`) renamed so the plugin's
|
|
8
|
+
// directory-derived slash command resolves to `/mk:loop`.
|
|
9
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
10
|
+
import { extname, join, relative } from "node:path";
|
|
11
|
+
import { buildClaudePluginJson, buildCodexPluginJson, PLUGIN_NAME, } from "./plugin-manifest.js";
|
|
12
|
+
import { collectAgentNames, rewriteAgentRefs } from "./plugin-agent-refs.js";
|
|
13
|
+
import { buildPluginHooks, readSettingsHooks } from "./plugin-hooks.js";
|
|
14
|
+
/** File extensions whose contents are scanned for agent references. */
|
|
15
|
+
const TEXT_EXTENSIONS = new Set([
|
|
16
|
+
".md",
|
|
17
|
+
".json",
|
|
18
|
+
".sh",
|
|
19
|
+
".cjs",
|
|
20
|
+
".mjs",
|
|
21
|
+
".js",
|
|
22
|
+
".ts",
|
|
23
|
+
".py",
|
|
24
|
+
".txt",
|
|
25
|
+
".yaml",
|
|
26
|
+
".yml",
|
|
27
|
+
]);
|
|
28
|
+
/** Top-level `.claude` entries excluded from the plugin payload (runtime state). */
|
|
29
|
+
const EXCLUDED_DIRS = new Set(["session-state", "memory", "logs"]);
|
|
30
|
+
const EXCLUDED_FILES = new Set(["metadata.json", ".env"]);
|
|
31
|
+
/**
|
|
32
|
+
* Build the plugin payload at `outDir`. Idempotent: clears and regenerates.
|
|
33
|
+
* Returns counts for verification.
|
|
34
|
+
*/
|
|
35
|
+
export function generatePluginPayload(opts) {
|
|
36
|
+
const pluginName = opts.name ?? PLUGIN_NAME;
|
|
37
|
+
const agentNames = opts.agentNames ?? collectAgentNames(join(opts.sourceDir, "agents"));
|
|
38
|
+
if (existsSync(opts.outDir))
|
|
39
|
+
rmSync(opts.outDir, { recursive: true, force: true });
|
|
40
|
+
mkdirSync(opts.outDir, { recursive: true });
|
|
41
|
+
// Copy every non-excluded top-level entry of the source tree.
|
|
42
|
+
for (const entry of readdirSync(opts.sourceDir)) {
|
|
43
|
+
if (EXCLUDED_DIRS.has(entry) || EXCLUDED_FILES.has(entry))
|
|
44
|
+
continue;
|
|
45
|
+
const src = join(opts.sourceDir, entry);
|
|
46
|
+
const dest = join(opts.outDir, entry);
|
|
47
|
+
if (statSync(src).isDirectory() && entry === "skills") {
|
|
48
|
+
copySkills(src, dest);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
cpSync(src, dest, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Rename the one skill dir whose name diverges from its slug.
|
|
55
|
+
let loopDirRenamed = false;
|
|
56
|
+
const mkLoop = join(opts.outDir, "skills", "mk-loop");
|
|
57
|
+
if (existsSync(mkLoop)) {
|
|
58
|
+
renameSync(mkLoop, join(opts.outDir, "skills", "loop"));
|
|
59
|
+
loopDirRenamed = true;
|
|
60
|
+
}
|
|
61
|
+
// Drop non-agent `.md` files from `agents/` (index files have no `name:`),
|
|
62
|
+
// so the plugin registry does not register them as agents.
|
|
63
|
+
const nonAgentsPruned = pruneNonAgents(join(opts.outDir, "agents"));
|
|
64
|
+
// Translate flat-copy hook wiring (settings.json) into plugin hooks.json.
|
|
65
|
+
const settingsHooks = readSettingsHooks(join(opts.sourceDir, "settings.json"));
|
|
66
|
+
const hooksGenerated = settingsHooks !== null;
|
|
67
|
+
if (settingsHooks) {
|
|
68
|
+
writeManifest(join(opts.outDir, "hooks", "hooks.json"), buildPluginHooks(settingsHooks));
|
|
69
|
+
}
|
|
70
|
+
// Rewrite kit agent references across every text file in the payload.
|
|
71
|
+
let filesScanned = 0;
|
|
72
|
+
let refsRewritten = 0;
|
|
73
|
+
for (const file of walkFiles(opts.outDir)) {
|
|
74
|
+
if (!TEXT_EXTENSIONS.has(extname(file).toLowerCase()))
|
|
75
|
+
continue;
|
|
76
|
+
filesScanned += 1;
|
|
77
|
+
const original = readFileSync(file, "utf-8");
|
|
78
|
+
const { content, count } = rewriteAgentRefs(original, agentNames, pluginName);
|
|
79
|
+
if (count > 0) {
|
|
80
|
+
writeFileSync(file, content);
|
|
81
|
+
refsRewritten += count;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Write both runtime plugin manifests into the plugin root.
|
|
85
|
+
writeManifest(join(opts.outDir, ".claude-plugin", "plugin.json"), buildClaudePluginJson(opts));
|
|
86
|
+
writeManifest(join(opts.outDir, ".codex-plugin", "plugin.json"), buildCodexPluginJson(opts));
|
|
87
|
+
return { filesScanned, refsRewritten, loopDirRenamed, nonAgentsPruned, hooksGenerated };
|
|
88
|
+
}
|
|
89
|
+
/** Remove `.md` files in `agents/` that lack a `name:` frontmatter (not agents). */
|
|
90
|
+
function pruneNonAgents(agentsDir) {
|
|
91
|
+
if (!existsSync(agentsDir))
|
|
92
|
+
return 0;
|
|
93
|
+
let pruned = 0;
|
|
94
|
+
for (const entry of readdirSync(agentsDir)) {
|
|
95
|
+
if (!entry.endsWith(".md"))
|
|
96
|
+
continue;
|
|
97
|
+
const file = join(agentsDir, entry);
|
|
98
|
+
if (!/^name:/m.test(readFileSync(file, "utf-8"))) {
|
|
99
|
+
unlinkSync(file);
|
|
100
|
+
pruned += 1;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return pruned;
|
|
104
|
+
}
|
|
105
|
+
/** Copy the skills tree but drop the bundled Python virtualenv. */
|
|
106
|
+
function copySkills(srcSkills, destSkills) {
|
|
107
|
+
mkdirSync(destSkills, { recursive: true });
|
|
108
|
+
for (const entry of readdirSync(srcSkills)) {
|
|
109
|
+
if (entry === ".venv")
|
|
110
|
+
continue;
|
|
111
|
+
cpSync(join(srcSkills, entry), join(destSkills, entry), { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Yield every file path under a directory, recursively. */
|
|
115
|
+
function* walkFiles(dir) {
|
|
116
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
117
|
+
const full = join(dir, entry.name);
|
|
118
|
+
if (entry.isDirectory()) {
|
|
119
|
+
yield* walkFiles(full);
|
|
120
|
+
}
|
|
121
|
+
else if (entry.isFile()) {
|
|
122
|
+
yield full;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** Deterministic, pretty-printed JSON write with a trailing newline. */
|
|
127
|
+
function writeManifest(path, value) {
|
|
128
|
+
mkdirSync(join(path, ".."), { recursive: true });
|
|
129
|
+
writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`);
|
|
130
|
+
}
|
|
131
|
+
/** Relative payload paths of the two generated plugin manifests (for callers). */
|
|
132
|
+
export function pluginManifestPaths(outDir) {
|
|
133
|
+
return [
|
|
134
|
+
relative(process.cwd(), join(outDir, ".claude-plugin", "plugin.json")),
|
|
135
|
+
relative(process.cwd(), join(outDir, ".codex-plugin", "plugin.json")),
|
|
136
|
+
];
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=plugin-payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-payload.js","sourceRoot":"","sources":["../../src/core/plugin-payload.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -21,6 +21,7 @@ import { trace } from "./commands/trace.js";
|
|
|
21
21
|
// (experimental), so a static import would load SQLite + emit its warning on EVERY command.
|
|
22
22
|
import { pack } from "./commands/pack.js";
|
|
23
23
|
import { providersCommand } from "./commands/providers.js";
|
|
24
|
+
import { buildPlugin } from "./commands/build-plugin.js";
|
|
24
25
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
25
26
|
const pkgJson = JSON.parse(fs.readFileSync(join(__dirname, "..", "package.json"), "utf-8"));
|
|
26
27
|
const VERSION = pkgJson.version;
|
|
@@ -49,6 +50,7 @@ ${pc.bold("Commands:")}
|
|
|
49
50
|
${pc.green("index")} Build/refresh the opt-in derived SQLite index over the append logs
|
|
50
51
|
${pc.green("query")} Read-only aggregate queries over the derived index
|
|
51
52
|
${pc.green("pack")} Manage install packs (list, add, remove)
|
|
53
|
+
${pc.green("build-plugin")} Generate the native plugin distribution (plugin/ + marketplaces)
|
|
52
54
|
|
|
53
55
|
${pc.bold("Options:")}
|
|
54
56
|
--help, -h Show help
|
|
@@ -220,6 +222,12 @@ async function main() {
|
|
|
220
222
|
substrate: args.substrate,
|
|
221
223
|
packs: args.packs,
|
|
222
224
|
rules: args.rules,
|
|
225
|
+
plugin: args.plugin,
|
|
226
|
+
});
|
|
227
|
+
break;
|
|
228
|
+
case "build-plugin":
|
|
229
|
+
await buildPlugin({
|
|
230
|
+
json: args.json,
|
|
223
231
|
});
|
|
224
232
|
break;
|
|
225
233
|
case "pack":
|
|
@@ -270,6 +278,15 @@ async function main() {
|
|
|
270
278
|
queryCommand({ json: args.json });
|
|
271
279
|
break;
|
|
272
280
|
}
|
|
281
|
+
case "wiki": {
|
|
282
|
+
const { wikiCommand } = await import("./wiki/interface/cli.js");
|
|
283
|
+
await wikiCommand({
|
|
284
|
+
subcommand: args._[1],
|
|
285
|
+
rest: args._.slice(2).map(String),
|
|
286
|
+
flags: args,
|
|
287
|
+
});
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
273
290
|
case "budget": {
|
|
274
291
|
// `budget context` routes to the per-profile context estimator (positional,
|
|
275
292
|
// not a flag — minimist parses it as args._[1]).
|