@nimblebrain/mpak 0.0.1-beta.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.
- package/.env.example +13 -0
- package/CLAUDE.md +117 -0
- package/LICENSE +201 -0
- package/README.md +206 -0
- package/dist/commands/packages/pull.d.ts +11 -0
- package/dist/commands/packages/pull.d.ts.map +1 -0
- package/dist/commands/packages/pull.js +72 -0
- package/dist/commands/packages/pull.js.map +1 -0
- package/dist/commands/packages/search.d.ts +12 -0
- package/dist/commands/packages/search.d.ts.map +1 -0
- package/dist/commands/packages/search.js +63 -0
- package/dist/commands/packages/search.js.map +1 -0
- package/dist/commands/packages/show.d.ts +8 -0
- package/dist/commands/packages/show.d.ts.map +1 -0
- package/dist/commands/packages/show.js +121 -0
- package/dist/commands/packages/show.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api/registry-client.d.ts +63 -0
- package/dist/lib/api/registry-client.d.ts.map +1 -0
- package/dist/lib/api/registry-client.js +167 -0
- package/dist/lib/api/registry-client.js.map +1 -0
- package/dist/program.d.ts +8 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +69 -0
- package/dist/program.js.map +1 -0
- package/dist/utils/config-manager.d.ts +23 -0
- package/dist/utils/config-manager.d.ts.map +1 -0
- package/dist/utils/config-manager.js +65 -0
- package/dist/utils/config-manager.js.map +1 -0
- package/dist/utils/errors.d.ts +12 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +27 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/version.d.ts +5 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +19 -0
- package/dist/utils/version.js.map +1 -0
- package/eslint.config.js +63 -0
- package/package.json +48 -0
- package/src/commands/packages/pull.ts +96 -0
- package/src/commands/packages/search.ts +83 -0
- package/src/commands/packages/show.ts +138 -0
- package/src/index.ts +15 -0
- package/src/lib/api/registry-client.ts +223 -0
- package/src/lib/api/schema.d.ts +548 -0
- package/src/program.test.ts +24 -0
- package/src/program.ts +76 -0
- package/src/utils/config-manager.test.ts +60 -0
- package/src/utils/config-manager.ts +81 -0
- package/src/utils/errors.test.ts +25 -0
- package/src/utils/errors.ts +33 -0
- package/src/utils/version.test.ts +16 -0
- package/src/utils/version.ts +18 -0
- package/tsconfig.json +25 -0
- package/vitest.config.ts +13 -0
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was auto-generated by openapi-typescript.
|
|
3
|
+
* Do not make direct changes to the file.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export interface paths {
|
|
7
|
+
"/v1/bundles/search": {
|
|
8
|
+
parameters: {
|
|
9
|
+
query?: never;
|
|
10
|
+
header?: never;
|
|
11
|
+
path?: never;
|
|
12
|
+
cookie?: never;
|
|
13
|
+
};
|
|
14
|
+
/** @description Search for bundles */
|
|
15
|
+
get: {
|
|
16
|
+
parameters: {
|
|
17
|
+
query?: {
|
|
18
|
+
/** @description Search query */
|
|
19
|
+
q?: string;
|
|
20
|
+
/** @description Filter by server type */
|
|
21
|
+
type?: string;
|
|
22
|
+
sort?: "downloads" | "recent" | "name";
|
|
23
|
+
limit?: number;
|
|
24
|
+
offset?: number;
|
|
25
|
+
};
|
|
26
|
+
header?: never;
|
|
27
|
+
path?: never;
|
|
28
|
+
cookie?: never;
|
|
29
|
+
};
|
|
30
|
+
requestBody?: never;
|
|
31
|
+
responses: {
|
|
32
|
+
/** @description Default Response */
|
|
33
|
+
200: {
|
|
34
|
+
headers: {
|
|
35
|
+
[name: string]: unknown;
|
|
36
|
+
};
|
|
37
|
+
content: {
|
|
38
|
+
"application/json": {
|
|
39
|
+
bundles: {
|
|
40
|
+
name: string;
|
|
41
|
+
display_name?: string | null;
|
|
42
|
+
description?: string | null;
|
|
43
|
+
author?: {
|
|
44
|
+
name: string;
|
|
45
|
+
} | null;
|
|
46
|
+
latest_version: string;
|
|
47
|
+
icon?: string | null;
|
|
48
|
+
server_type?: string | null;
|
|
49
|
+
tools?: {
|
|
50
|
+
name: string;
|
|
51
|
+
description?: string;
|
|
52
|
+
}[];
|
|
53
|
+
downloads: number;
|
|
54
|
+
/** Format: date-time */
|
|
55
|
+
published_at: string;
|
|
56
|
+
verified: boolean;
|
|
57
|
+
provenance?: {
|
|
58
|
+
schema_version: string;
|
|
59
|
+
provider: string;
|
|
60
|
+
repository: string;
|
|
61
|
+
sha: string;
|
|
62
|
+
} | null;
|
|
63
|
+
}[];
|
|
64
|
+
total: number;
|
|
65
|
+
pagination: {
|
|
66
|
+
limit: number;
|
|
67
|
+
offset: number;
|
|
68
|
+
has_more: boolean;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
put?: never;
|
|
76
|
+
post?: never;
|
|
77
|
+
delete?: never;
|
|
78
|
+
options?: never;
|
|
79
|
+
head?: never;
|
|
80
|
+
patch?: never;
|
|
81
|
+
trace?: never;
|
|
82
|
+
};
|
|
83
|
+
"/v1/bundles/@{scope}/{package}": {
|
|
84
|
+
parameters: {
|
|
85
|
+
query?: never;
|
|
86
|
+
header?: never;
|
|
87
|
+
path?: never;
|
|
88
|
+
cookie?: never;
|
|
89
|
+
};
|
|
90
|
+
/** @description Get detailed bundle information */
|
|
91
|
+
get: {
|
|
92
|
+
parameters: {
|
|
93
|
+
query?: never;
|
|
94
|
+
header?: never;
|
|
95
|
+
path: {
|
|
96
|
+
scope: string;
|
|
97
|
+
package: string;
|
|
98
|
+
};
|
|
99
|
+
cookie?: never;
|
|
100
|
+
};
|
|
101
|
+
requestBody?: never;
|
|
102
|
+
responses: {
|
|
103
|
+
/** @description Default Response */
|
|
104
|
+
200: {
|
|
105
|
+
headers: {
|
|
106
|
+
[name: string]: unknown;
|
|
107
|
+
};
|
|
108
|
+
content: {
|
|
109
|
+
"application/json": {
|
|
110
|
+
name: string;
|
|
111
|
+
display_name?: string | null;
|
|
112
|
+
description?: string | null;
|
|
113
|
+
author?: {
|
|
114
|
+
name: string;
|
|
115
|
+
} | null;
|
|
116
|
+
latest_version: string;
|
|
117
|
+
icon?: string | null;
|
|
118
|
+
server_type?: string | null;
|
|
119
|
+
tools?: {
|
|
120
|
+
name: string;
|
|
121
|
+
description?: string;
|
|
122
|
+
}[];
|
|
123
|
+
downloads: number;
|
|
124
|
+
/** Format: date-time */
|
|
125
|
+
published_at: string;
|
|
126
|
+
verified: boolean;
|
|
127
|
+
homepage?: string | null;
|
|
128
|
+
license?: string | null;
|
|
129
|
+
github?: {
|
|
130
|
+
repo: string;
|
|
131
|
+
stars?: number | null;
|
|
132
|
+
forks?: number | null;
|
|
133
|
+
watchers?: number | null;
|
|
134
|
+
} | null;
|
|
135
|
+
provenance?: {
|
|
136
|
+
schema_version: string;
|
|
137
|
+
provider: string;
|
|
138
|
+
repository: string;
|
|
139
|
+
sha: string;
|
|
140
|
+
} | null;
|
|
141
|
+
versions: {
|
|
142
|
+
version: string;
|
|
143
|
+
/** Format: date-time */
|
|
144
|
+
published_at: string;
|
|
145
|
+
downloads: number;
|
|
146
|
+
}[];
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
put?: never;
|
|
153
|
+
post?: never;
|
|
154
|
+
delete?: never;
|
|
155
|
+
options?: never;
|
|
156
|
+
head?: never;
|
|
157
|
+
patch?: never;
|
|
158
|
+
trace?: never;
|
|
159
|
+
};
|
|
160
|
+
"/v1/bundles/@{scope}/{package}/index.json": {
|
|
161
|
+
parameters: {
|
|
162
|
+
query?: never;
|
|
163
|
+
header?: never;
|
|
164
|
+
path?: never;
|
|
165
|
+
cookie?: never;
|
|
166
|
+
};
|
|
167
|
+
/** @description Get multi-platform distribution index for a bundle (MCPB Index spec) */
|
|
168
|
+
get: {
|
|
169
|
+
parameters: {
|
|
170
|
+
query?: never;
|
|
171
|
+
header?: never;
|
|
172
|
+
path: {
|
|
173
|
+
scope: string;
|
|
174
|
+
package: string;
|
|
175
|
+
};
|
|
176
|
+
cookie?: never;
|
|
177
|
+
};
|
|
178
|
+
requestBody?: never;
|
|
179
|
+
responses: {
|
|
180
|
+
/** @description Default Response */
|
|
181
|
+
200: {
|
|
182
|
+
headers: {
|
|
183
|
+
[name: string]: unknown;
|
|
184
|
+
};
|
|
185
|
+
content: {
|
|
186
|
+
"application/json": {
|
|
187
|
+
index_version: string;
|
|
188
|
+
mimeType: string;
|
|
189
|
+
name: string;
|
|
190
|
+
version: string;
|
|
191
|
+
description?: string | null;
|
|
192
|
+
bundles: {
|
|
193
|
+
mimeType: string;
|
|
194
|
+
digest: string;
|
|
195
|
+
size: number;
|
|
196
|
+
platform: {
|
|
197
|
+
/** @description Operating system (darwin, linux, win32, any) */
|
|
198
|
+
os: string;
|
|
199
|
+
/** @description Architecture (x64, arm64, any) */
|
|
200
|
+
arch: string;
|
|
201
|
+
};
|
|
202
|
+
urls: string[];
|
|
203
|
+
}[];
|
|
204
|
+
annotations?: {
|
|
205
|
+
[key: string]: string;
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
put?: never;
|
|
213
|
+
post?: never;
|
|
214
|
+
delete?: never;
|
|
215
|
+
options?: never;
|
|
216
|
+
head?: never;
|
|
217
|
+
patch?: never;
|
|
218
|
+
trace?: never;
|
|
219
|
+
};
|
|
220
|
+
"/v1/bundles/@{scope}/{package}/versions": {
|
|
221
|
+
parameters: {
|
|
222
|
+
query?: never;
|
|
223
|
+
header?: never;
|
|
224
|
+
path?: never;
|
|
225
|
+
cookie?: never;
|
|
226
|
+
};
|
|
227
|
+
/** @description List all versions of a bundle */
|
|
228
|
+
get: {
|
|
229
|
+
parameters: {
|
|
230
|
+
query?: never;
|
|
231
|
+
header?: never;
|
|
232
|
+
path: {
|
|
233
|
+
scope: string;
|
|
234
|
+
package: string;
|
|
235
|
+
};
|
|
236
|
+
cookie?: never;
|
|
237
|
+
};
|
|
238
|
+
requestBody?: never;
|
|
239
|
+
responses: {
|
|
240
|
+
/** @description Default Response */
|
|
241
|
+
200: {
|
|
242
|
+
headers: {
|
|
243
|
+
[name: string]: unknown;
|
|
244
|
+
};
|
|
245
|
+
content: {
|
|
246
|
+
"application/json": {
|
|
247
|
+
name: string;
|
|
248
|
+
latest: string;
|
|
249
|
+
versions: {
|
|
250
|
+
version: string;
|
|
251
|
+
artifacts_count: number;
|
|
252
|
+
platforms: {
|
|
253
|
+
/** @description Operating system (darwin, linux, win32, any) */
|
|
254
|
+
os: string;
|
|
255
|
+
/** @description Architecture (x64, arm64, any) */
|
|
256
|
+
arch: string;
|
|
257
|
+
}[];
|
|
258
|
+
/** Format: date-time */
|
|
259
|
+
published_at: string;
|
|
260
|
+
downloads: number;
|
|
261
|
+
publish_method?: string | null;
|
|
262
|
+
provenance?: {
|
|
263
|
+
schema_version: string;
|
|
264
|
+
provider: string;
|
|
265
|
+
repository: string;
|
|
266
|
+
sha: string;
|
|
267
|
+
} | null;
|
|
268
|
+
}[];
|
|
269
|
+
};
|
|
270
|
+
};
|
|
271
|
+
};
|
|
272
|
+
};
|
|
273
|
+
};
|
|
274
|
+
put?: never;
|
|
275
|
+
post?: never;
|
|
276
|
+
delete?: never;
|
|
277
|
+
options?: never;
|
|
278
|
+
head?: never;
|
|
279
|
+
patch?: never;
|
|
280
|
+
trace?: never;
|
|
281
|
+
};
|
|
282
|
+
"/v1/bundles/@{scope}/{package}/versions/{version}": {
|
|
283
|
+
parameters: {
|
|
284
|
+
query?: never;
|
|
285
|
+
header?: never;
|
|
286
|
+
path?: never;
|
|
287
|
+
cookie?: never;
|
|
288
|
+
};
|
|
289
|
+
/** @description Get information about a specific version */
|
|
290
|
+
get: {
|
|
291
|
+
parameters: {
|
|
292
|
+
query?: never;
|
|
293
|
+
header?: never;
|
|
294
|
+
path: {
|
|
295
|
+
scope: string;
|
|
296
|
+
package: string;
|
|
297
|
+
version: string;
|
|
298
|
+
};
|
|
299
|
+
cookie?: never;
|
|
300
|
+
};
|
|
301
|
+
requestBody?: never;
|
|
302
|
+
responses: {
|
|
303
|
+
/** @description Default Response */
|
|
304
|
+
200: {
|
|
305
|
+
headers: {
|
|
306
|
+
[name: string]: unknown;
|
|
307
|
+
};
|
|
308
|
+
content: {
|
|
309
|
+
"application/json": {
|
|
310
|
+
name: string;
|
|
311
|
+
version: string;
|
|
312
|
+
/** Format: date-time */
|
|
313
|
+
published_at: string;
|
|
314
|
+
downloads: number;
|
|
315
|
+
artifacts: {
|
|
316
|
+
platform: {
|
|
317
|
+
/** @description Operating system (darwin, linux, win32, any) */
|
|
318
|
+
os: string;
|
|
319
|
+
/** @description Architecture (x64, arm64, any) */
|
|
320
|
+
arch: string;
|
|
321
|
+
};
|
|
322
|
+
digest: string;
|
|
323
|
+
size: number;
|
|
324
|
+
download_url: string;
|
|
325
|
+
source_url?: string;
|
|
326
|
+
}[];
|
|
327
|
+
manifest?: {
|
|
328
|
+
[key: string]: unknown;
|
|
329
|
+
};
|
|
330
|
+
release?: {
|
|
331
|
+
tag?: string;
|
|
332
|
+
url?: string;
|
|
333
|
+
} | null;
|
|
334
|
+
publish_method?: string | null;
|
|
335
|
+
provenance?: {
|
|
336
|
+
[key: string]: unknown;
|
|
337
|
+
} | null;
|
|
338
|
+
};
|
|
339
|
+
};
|
|
340
|
+
};
|
|
341
|
+
};
|
|
342
|
+
};
|
|
343
|
+
put?: never;
|
|
344
|
+
post?: never;
|
|
345
|
+
delete?: never;
|
|
346
|
+
options?: never;
|
|
347
|
+
head?: never;
|
|
348
|
+
patch?: never;
|
|
349
|
+
trace?: never;
|
|
350
|
+
};
|
|
351
|
+
"/v1/bundles/@{scope}/{package}/versions/{version}/download": {
|
|
352
|
+
parameters: {
|
|
353
|
+
query?: never;
|
|
354
|
+
header?: never;
|
|
355
|
+
path?: never;
|
|
356
|
+
cookie?: never;
|
|
357
|
+
};
|
|
358
|
+
/** @description Download a specific version of a bundle */
|
|
359
|
+
get: {
|
|
360
|
+
parameters: {
|
|
361
|
+
query?: {
|
|
362
|
+
/** @description Target OS (darwin, linux, win32, any) */
|
|
363
|
+
os?: string;
|
|
364
|
+
/** @description Target arch (x64, arm64, any) */
|
|
365
|
+
arch?: string;
|
|
366
|
+
};
|
|
367
|
+
header?: never;
|
|
368
|
+
path: {
|
|
369
|
+
scope: string;
|
|
370
|
+
package: string;
|
|
371
|
+
version: string;
|
|
372
|
+
};
|
|
373
|
+
cookie?: never;
|
|
374
|
+
};
|
|
375
|
+
requestBody?: never;
|
|
376
|
+
responses: {
|
|
377
|
+
/** @description Default Response */
|
|
378
|
+
200: {
|
|
379
|
+
headers: {
|
|
380
|
+
[name: string]: unknown;
|
|
381
|
+
};
|
|
382
|
+
content: {
|
|
383
|
+
"application/json": {
|
|
384
|
+
url: string;
|
|
385
|
+
bundle: {
|
|
386
|
+
name: string;
|
|
387
|
+
version: string;
|
|
388
|
+
platform: {
|
|
389
|
+
/** @description Operating system (darwin, linux, win32, any) */
|
|
390
|
+
os: string;
|
|
391
|
+
/** @description Architecture (x64, arm64, any) */
|
|
392
|
+
arch: string;
|
|
393
|
+
};
|
|
394
|
+
sha256: string;
|
|
395
|
+
size: number;
|
|
396
|
+
};
|
|
397
|
+
/** Format: date-time */
|
|
398
|
+
expires_at: string;
|
|
399
|
+
};
|
|
400
|
+
};
|
|
401
|
+
};
|
|
402
|
+
/** @description Redirect to download URL */
|
|
403
|
+
302: {
|
|
404
|
+
headers: {
|
|
405
|
+
[name: string]: unknown;
|
|
406
|
+
};
|
|
407
|
+
content?: never;
|
|
408
|
+
};
|
|
409
|
+
};
|
|
410
|
+
};
|
|
411
|
+
put?: never;
|
|
412
|
+
post?: never;
|
|
413
|
+
delete?: never;
|
|
414
|
+
options?: never;
|
|
415
|
+
head?: never;
|
|
416
|
+
patch?: never;
|
|
417
|
+
trace?: never;
|
|
418
|
+
};
|
|
419
|
+
"/v1/bundles/announce": {
|
|
420
|
+
parameters: {
|
|
421
|
+
query?: never;
|
|
422
|
+
header?: never;
|
|
423
|
+
path?: never;
|
|
424
|
+
cookie?: never;
|
|
425
|
+
};
|
|
426
|
+
get?: never;
|
|
427
|
+
put?: never;
|
|
428
|
+
/** @description Announce a new bundle version from a GitHub release (OIDC only) */
|
|
429
|
+
post: {
|
|
430
|
+
parameters: {
|
|
431
|
+
query?: never;
|
|
432
|
+
header?: never;
|
|
433
|
+
path?: never;
|
|
434
|
+
cookie?: never;
|
|
435
|
+
};
|
|
436
|
+
requestBody: {
|
|
437
|
+
content: {
|
|
438
|
+
"application/json": {
|
|
439
|
+
/** @description Package name (@scope/name) */
|
|
440
|
+
name: string;
|
|
441
|
+
/** @description Semantic version */
|
|
442
|
+
version: string;
|
|
443
|
+
/** @description Bundle manifest */
|
|
444
|
+
manifest: Record<string, never>;
|
|
445
|
+
/** @description GitHub release tag (e.g., v0.1.0) */
|
|
446
|
+
release_tag: string;
|
|
447
|
+
};
|
|
448
|
+
};
|
|
449
|
+
};
|
|
450
|
+
responses: {
|
|
451
|
+
/** @description Default Response */
|
|
452
|
+
200: {
|
|
453
|
+
headers: {
|
|
454
|
+
[name: string]: unknown;
|
|
455
|
+
};
|
|
456
|
+
content: {
|
|
457
|
+
"application/json": {
|
|
458
|
+
success: boolean;
|
|
459
|
+
bundle: {
|
|
460
|
+
name: string;
|
|
461
|
+
version: string;
|
|
462
|
+
artifacts_count: number;
|
|
463
|
+
};
|
|
464
|
+
release: {
|
|
465
|
+
tag: string;
|
|
466
|
+
url: string;
|
|
467
|
+
};
|
|
468
|
+
artifacts: {
|
|
469
|
+
platform: {
|
|
470
|
+
/** @description Operating system (darwin, linux, win32, any) */
|
|
471
|
+
os: string;
|
|
472
|
+
/** @description Architecture (x64, arm64, any) */
|
|
473
|
+
arch: string;
|
|
474
|
+
};
|
|
475
|
+
digest: string;
|
|
476
|
+
size: number;
|
|
477
|
+
url: string;
|
|
478
|
+
source_url: string;
|
|
479
|
+
}[];
|
|
480
|
+
provenance: {
|
|
481
|
+
schema_version: string;
|
|
482
|
+
provider: string;
|
|
483
|
+
repository: string;
|
|
484
|
+
sha: string;
|
|
485
|
+
} | null;
|
|
486
|
+
};
|
|
487
|
+
};
|
|
488
|
+
};
|
|
489
|
+
};
|
|
490
|
+
};
|
|
491
|
+
delete?: never;
|
|
492
|
+
options?: never;
|
|
493
|
+
head?: never;
|
|
494
|
+
patch?: never;
|
|
495
|
+
trace?: never;
|
|
496
|
+
};
|
|
497
|
+
"/health": {
|
|
498
|
+
parameters: {
|
|
499
|
+
query?: never;
|
|
500
|
+
header?: never;
|
|
501
|
+
path?: never;
|
|
502
|
+
cookie?: never;
|
|
503
|
+
};
|
|
504
|
+
/** @description Health check endpoint */
|
|
505
|
+
get: {
|
|
506
|
+
parameters: {
|
|
507
|
+
query?: never;
|
|
508
|
+
header?: never;
|
|
509
|
+
path?: never;
|
|
510
|
+
cookie?: never;
|
|
511
|
+
};
|
|
512
|
+
requestBody?: never;
|
|
513
|
+
responses: {
|
|
514
|
+
/** @description Default Response */
|
|
515
|
+
200: {
|
|
516
|
+
headers: {
|
|
517
|
+
[name: string]: unknown;
|
|
518
|
+
};
|
|
519
|
+
content: {
|
|
520
|
+
"application/json": {
|
|
521
|
+
status?: string;
|
|
522
|
+
/** Format: date-time */
|
|
523
|
+
timestamp?: string;
|
|
524
|
+
};
|
|
525
|
+
};
|
|
526
|
+
};
|
|
527
|
+
};
|
|
528
|
+
};
|
|
529
|
+
put?: never;
|
|
530
|
+
post?: never;
|
|
531
|
+
delete?: never;
|
|
532
|
+
options?: never;
|
|
533
|
+
head?: never;
|
|
534
|
+
patch?: never;
|
|
535
|
+
trace?: never;
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
export type webhooks = Record<string, never>;
|
|
539
|
+
export interface components {
|
|
540
|
+
schemas: never;
|
|
541
|
+
responses: never;
|
|
542
|
+
parameters: never;
|
|
543
|
+
requestBodies: never;
|
|
544
|
+
headers: never;
|
|
545
|
+
pathItems: never;
|
|
546
|
+
}
|
|
547
|
+
export type $defs = Record<string, never>;
|
|
548
|
+
export type operations = Record<string, never>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { createProgram } from './program.js';
|
|
3
|
+
|
|
4
|
+
describe('createProgram', () => {
|
|
5
|
+
it('should create a program with correct name', () => {
|
|
6
|
+
const program = createProgram();
|
|
7
|
+
expect(program.name()).toBe('mpak');
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it('should have a description', () => {
|
|
11
|
+
const program = createProgram();
|
|
12
|
+
expect(program.description()).toBe(
|
|
13
|
+
'CLI for downloading MCPB bundles from the package directory'
|
|
14
|
+
);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('should have version option', () => {
|
|
18
|
+
const program = createProgram();
|
|
19
|
+
const versionOption = program.options.find(
|
|
20
|
+
(opt) => opt.short === '-v' || opt.long === '--version'
|
|
21
|
+
);
|
|
22
|
+
expect(versionOption).toBeDefined();
|
|
23
|
+
});
|
|
24
|
+
});
|
package/src/program.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { getVersion } from './utils/version.js';
|
|
3
|
+
import { handleSearch } from './commands/packages/search.js';
|
|
4
|
+
import { handleShow } from './commands/packages/show.js';
|
|
5
|
+
import { handlePull } from './commands/packages/pull.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Creates and configures the CLI program
|
|
9
|
+
*
|
|
10
|
+
* MVP: Unauthenticated commands only (v1 API)
|
|
11
|
+
*/
|
|
12
|
+
export function createProgram(): Command {
|
|
13
|
+
const program = new Command();
|
|
14
|
+
|
|
15
|
+
program
|
|
16
|
+
.name('mpak')
|
|
17
|
+
.description('CLI for downloading MCPB bundles from the package directory')
|
|
18
|
+
.version(getVersion(), '-v, --version', 'Output the current version');
|
|
19
|
+
|
|
20
|
+
// Search command
|
|
21
|
+
program
|
|
22
|
+
.command('search <query>')
|
|
23
|
+
.description('Search public bundles')
|
|
24
|
+
.option('--type <type>', 'Filter by server type (node, python, binary)')
|
|
25
|
+
.option('--sort <field>', 'Sort by: downloads, recent, name')
|
|
26
|
+
.option('--limit <number>', 'Limit results', parseInt)
|
|
27
|
+
.option('--offset <number>', 'Pagination offset', parseInt)
|
|
28
|
+
.option('--json', 'Output as JSON')
|
|
29
|
+
.action(async (query, options) => {
|
|
30
|
+
await handleSearch(query, options);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Show command
|
|
34
|
+
program
|
|
35
|
+
.command('show <package>')
|
|
36
|
+
.description('Show detailed information about a bundle')
|
|
37
|
+
.option('--json', 'Output as JSON')
|
|
38
|
+
.action(async (packageName, options) => {
|
|
39
|
+
await handleShow(packageName, options);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Info command (alias for show)
|
|
43
|
+
program
|
|
44
|
+
.command('info <package>')
|
|
45
|
+
.description('Show detailed information about a bundle (alias for show)')
|
|
46
|
+
.option('--json', 'Output as JSON')
|
|
47
|
+
.action(async (packageName, options) => {
|
|
48
|
+
await handleShow(packageName, options);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Pull command
|
|
52
|
+
program
|
|
53
|
+
.command('pull <package>')
|
|
54
|
+
.description('Download a bundle from the registry (e.g., @scope/name or @scope/name@1.0.0)')
|
|
55
|
+
.option('-o, --output <path>', 'Output file path')
|
|
56
|
+
.option('--os <os>', 'Target OS (darwin, linux, win32)')
|
|
57
|
+
.option('--arch <arch>', 'Target architecture (x64, arm64)')
|
|
58
|
+
.option('--json', 'Output download info as JSON')
|
|
59
|
+
.action(async (packageSpec, options) => {
|
|
60
|
+
await handlePull(packageSpec, options);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// Install command (alias for pull)
|
|
64
|
+
program
|
|
65
|
+
.command('install <package>')
|
|
66
|
+
.description('Download a bundle from the registry (alias for pull)')
|
|
67
|
+
.option('-o, --output <path>', 'Output file path')
|
|
68
|
+
.option('--os <os>', 'Target OS (darwin, linux, win32)')
|
|
69
|
+
.option('--arch <arch>', 'Target architecture (x64, arm64)')
|
|
70
|
+
.option('--json', 'Output download info as JSON')
|
|
71
|
+
.action(async (packageSpec, options) => {
|
|
72
|
+
await handlePull(packageSpec, options);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
return program;
|
|
76
|
+
}
|