prpm 1.2.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +90 -862
  2. package/dist/index.js +23233 -65
  3. package/dist/schemas/agents-md.schema.json +24 -0
  4. package/dist/schemas/aider.schema.json +24 -0
  5. package/dist/schemas/canonical.schema.json +435 -0
  6. package/dist/schemas/claude-agent.schema.json +62 -0
  7. package/dist/schemas/claude-hook.schema.json +70 -0
  8. package/dist/schemas/claude-plugin.schema.json +122 -0
  9. package/dist/schemas/claude-skill.schema.json +51 -0
  10. package/dist/schemas/claude-slash-command.schema.json +77 -0
  11. package/dist/schemas/claude.schema.json +52 -0
  12. package/dist/schemas/continue.schema.json +98 -0
  13. package/dist/schemas/copilot.schema.json +76 -0
  14. package/dist/schemas/cursor-command.schema.json +27 -0
  15. package/dist/schemas/cursor-hooks.schema.json +59 -0
  16. package/dist/schemas/cursor.schema.json +74 -0
  17. package/dist/schemas/droid-hook.schema.json +103 -0
  18. package/dist/schemas/droid-skill.schema.json +46 -0
  19. package/dist/schemas/droid-slash-command.schema.json +53 -0
  20. package/dist/schemas/droid.schema.json +46 -0
  21. package/dist/schemas/format-registry.schema.json +99 -0
  22. package/dist/schemas/gemini-md.schema.json +24 -0
  23. package/dist/schemas/gemini.schema.json +30 -0
  24. package/dist/schemas/kiro-agent.schema.json +146 -0
  25. package/dist/schemas/kiro-hook.schema.json +120 -0
  26. package/dist/schemas/kiro-steering.schema.json +74 -0
  27. package/dist/schemas/mcp-server.schema.json +130 -0
  28. package/dist/schemas/opencode-slash-command.schema.json +60 -0
  29. package/dist/schemas/opencode.schema.json +111 -0
  30. package/dist/schemas/prpm-manifest.schema.json +733 -0
  31. package/dist/schemas/replit.schema.json +21 -0
  32. package/dist/schemas/ruler.schema.json +22 -0
  33. package/dist/schemas/trae.schema.json +24 -0
  34. package/dist/schemas/windsurf.schema.json +22 -0
  35. package/dist/schemas/zencoder.schema.json +51 -0
  36. package/package.json +20 -14
  37. package/schemas/prpm-manifest.schema.json +465 -39
  38. package/dist/__tests__/e2e/test-helpers.js +0 -150
  39. package/dist/commands/collections.js +0 -606
  40. package/dist/commands/index.js +0 -186
  41. package/dist/commands/info.js +0 -82
  42. package/dist/commands/install.js +0 -477
  43. package/dist/commands/list.js +0 -166
  44. package/dist/commands/login.js +0 -281
  45. package/dist/commands/outdated.js +0 -128
  46. package/dist/commands/popular.js +0 -27
  47. package/dist/commands/publish.js +0 -274
  48. package/dist/commands/schema.js +0 -37
  49. package/dist/commands/search.js +0 -404
  50. package/dist/commands/telemetry.js +0 -103
  51. package/dist/commands/trending.js +0 -76
  52. package/dist/commands/uninstall.js +0 -77
  53. package/dist/commands/update.js +0 -121
  54. package/dist/commands/upgrade.js +0 -121
  55. package/dist/commands/whoami.js +0 -75
  56. package/dist/core/claude-config.js +0 -91
  57. package/dist/core/cursor-config.js +0 -130
  58. package/dist/core/downloader.js +0 -64
  59. package/dist/core/filesystem.js +0 -124
  60. package/dist/core/lockfile.js +0 -239
  61. package/dist/core/marketplace-converter.js +0 -198
  62. package/dist/core/registry-client.js +0 -265
  63. package/dist/core/schema-validator.js +0 -74
  64. package/dist/core/telemetry.js +0 -175
  65. package/dist/core/user-config.js +0 -79
  66. package/dist/types/registry.js +0 -5
  67. package/dist/types.js +0 -5
@@ -0,0 +1,733 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://prpm.dev/schemas/manifest.json",
4
+ "title": "PRPM Package Manifest",
5
+ "description": "Schema for PRPM package manifest (prpm.json)",
6
+ "type": "object",
7
+ "required": [
8
+ "name",
9
+ "version",
10
+ "description",
11
+ "format"
12
+ ],
13
+ "properties": {
14
+ "name": {
15
+ "type": "string",
16
+ "description": "Package name in format: package-name or @scope/package-name",
17
+ "pattern": "^(@[a-z0-9-]+\\/)?[a-z0-9-]+$",
18
+ "minLength": 1,
19
+ "maxLength": 214,
20
+ "examples": [
21
+ "react-rules",
22
+ "@community/testing-skills",
23
+ "@company/cursor-rules"
24
+ ]
25
+ },
26
+ "version": {
27
+ "type": "string",
28
+ "description": "Semantic version (semver)",
29
+ "pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?(\\+[a-zA-Z0-9.-]+)?$",
30
+ "examples": [
31
+ "1.0.0",
32
+ "2.1.3",
33
+ "1.0.0-beta.1"
34
+ ]
35
+ },
36
+ "description": {
37
+ "type": "string",
38
+ "description": "Package description",
39
+ "minLength": 10,
40
+ "maxLength": 500
41
+ },
42
+ "format": {
43
+ "type": "string",
44
+ "description": "Package format - the AI tool/platform this package is for",
45
+ "enum": [
46
+ "cursor",
47
+ "claude",
48
+ "claude-plugin",
49
+ "continue",
50
+ "windsurf",
51
+ "copilot",
52
+ "kiro",
53
+ "agents.md",
54
+ "generic",
55
+ "mcp"
56
+ ]
57
+ },
58
+ "subtype": {
59
+ "type": "string",
60
+ "description": "Package subtype - the functional category (optional, defaults to 'rule')",
61
+ "enum": [
62
+ "rule",
63
+ "agent",
64
+ "skill",
65
+ "slash-command",
66
+ "prompt",
67
+ "workflow",
68
+ "tool",
69
+ "template",
70
+ "collection",
71
+ "chatmode",
72
+ "hook",
73
+ "plugin",
74
+ "server"
75
+ ]
76
+ },
77
+ "author": {
78
+ "description": "Package author",
79
+ "oneOf": [
80
+ {
81
+ "type": "string",
82
+ "examples": [
83
+ "John Doe",
84
+ "Jane Smith"
85
+ ]
86
+ },
87
+ {
88
+ "type": "object",
89
+ "required": [
90
+ "name"
91
+ ],
92
+ "properties": {
93
+ "name": {
94
+ "type": "string",
95
+ "description": "Author name"
96
+ },
97
+ "email": {
98
+ "type": "string",
99
+ "format": "email",
100
+ "description": "Author email"
101
+ },
102
+ "url": {
103
+ "type": "string",
104
+ "format": "uri",
105
+ "description": "Author URL"
106
+ }
107
+ }
108
+ }
109
+ ]
110
+ },
111
+ "license": {
112
+ "type": "string",
113
+ "description": "SPDX license identifier",
114
+ "examples": [
115
+ "MIT",
116
+ "Apache-2.0",
117
+ "GPL-3.0",
118
+ "BSD-3-Clause"
119
+ ]
120
+ },
121
+ "license_text": {
122
+ "type": "string",
123
+ "description": "Full text of the license file for proper attribution"
124
+ },
125
+ "license_url": {
126
+ "type": "string",
127
+ "format": "uri",
128
+ "description": "URL to the license file in the repository"
129
+ },
130
+ "repository": {
131
+ "type": "string",
132
+ "format": "uri",
133
+ "description": "Repository URL",
134
+ "examples": [
135
+ "https://github.com/username/repo"
136
+ ]
137
+ },
138
+ "homepage": {
139
+ "type": "string",
140
+ "format": "uri",
141
+ "description": "Package homepage URL"
142
+ },
143
+ "documentation": {
144
+ "type": "string",
145
+ "format": "uri",
146
+ "description": "Documentation URL"
147
+ },
148
+ "organization": {
149
+ "type": "string",
150
+ "description": "Organization name or ID to publish this package under. If not specified, publishes to personal account.",
151
+ "examples": [
152
+ "my-team",
153
+ "my-company"
154
+ ]
155
+ },
156
+ "private": {
157
+ "type": "boolean",
158
+ "description": "Whether the package is private. Private packages are only accessible to the owner/organization members. Defaults to false (public).",
159
+ "default": false
160
+ },
161
+ "scripts": {
162
+ "type": "object",
163
+ "description": "Lifecycle scripts that run during package operations. Only applies to multi-package manifests (prpm.json with packages array).",
164
+ "properties": {
165
+ "prepublishOnly": {
166
+ "type": "string",
167
+ "description": "Script to run before publishing (recommended - only runs on 'prpm publish')",
168
+ "examples": [
169
+ "npm run build",
170
+ "cd packages/hooks && npm run build",
171
+ "npm test && npm run build"
172
+ ]
173
+ },
174
+ "prepublish": {
175
+ "type": "string",
176
+ "description": "Script to run before publishing and on npm install (not recommended - use prepublishOnly instead)",
177
+ "examples": [
178
+ "npm run build"
179
+ ]
180
+ }
181
+ },
182
+ "additionalProperties": false
183
+ },
184
+ "tags": {
185
+ "type": "array",
186
+ "description": "Package tags for categorization",
187
+ "items": {
188
+ "type": "string"
189
+ },
190
+ "maxItems": 10,
191
+ "uniqueItems": true,
192
+ "examples": [
193
+ [
194
+ "productivity",
195
+ "coding"
196
+ ],
197
+ [
198
+ "testing",
199
+ "quality"
200
+ ]
201
+ ]
202
+ },
203
+ "keywords": {
204
+ "type": "array",
205
+ "description": "Search keywords",
206
+ "items": {
207
+ "type": "string"
208
+ },
209
+ "maxItems": 20,
210
+ "uniqueItems": true,
211
+ "examples": [
212
+ [
213
+ "ai",
214
+ "prompts",
215
+ "development"
216
+ ]
217
+ ]
218
+ },
219
+ "category": {
220
+ "type": "string",
221
+ "description": "Package category",
222
+ "examples": [
223
+ "development",
224
+ "productivity",
225
+ "testing"
226
+ ]
227
+ },
228
+ "files": {
229
+ "description": "Files to include in package. Can be simple paths or enhanced file objects with metadata.",
230
+ "oneOf": [
231
+ {
232
+ "type": "array",
233
+ "description": "Simple format: array of file paths",
234
+ "items": {
235
+ "type": "string"
236
+ },
237
+ "minItems": 1,
238
+ "examples": [
239
+ [
240
+ "skill.md",
241
+ "README.md"
242
+ ],
243
+ [
244
+ ".cursor/rules/react.mdc",
245
+ "LICENSE"
246
+ ]
247
+ ]
248
+ },
249
+ {
250
+ "type": "array",
251
+ "description": "Enhanced format: array of file objects with metadata",
252
+ "items": {
253
+ "type": "object",
254
+ "required": [
255
+ "path",
256
+ "format"
257
+ ],
258
+ "properties": {
259
+ "path": {
260
+ "type": "string",
261
+ "description": "Relative path to file",
262
+ "examples": [
263
+ ".claude/skills/tdd.md",
264
+ ".cursor/rules/react.mdc",
265
+ ".continue/rules/python.json"
266
+ ]
267
+ },
268
+ "format": {
269
+ "type": "string",
270
+ "description": "File format - the AI tool/platform this file is for",
271
+ "enum": [
272
+ "cursor",
273
+ "claude",
274
+ "claude-plugin",
275
+ "continue",
276
+ "windsurf",
277
+ "copilot",
278
+ "kiro",
279
+ "agents.md",
280
+ "generic",
281
+ "mcp"
282
+ ]
283
+ },
284
+ "subtype": {
285
+ "type": "string",
286
+ "description": "File subtype - the functional category",
287
+ "enum": [
288
+ "rule",
289
+ "agent",
290
+ "skill",
291
+ "slash-command",
292
+ "prompt",
293
+ "workflow",
294
+ "tool",
295
+ "template",
296
+ "collection",
297
+ "chatmode",
298
+ "hook",
299
+ "plugin",
300
+ "server"
301
+ ]
302
+ },
303
+ "name": {
304
+ "type": "string",
305
+ "description": "Display name for this file",
306
+ "examples": [
307
+ "React Rules",
308
+ "Test-Driven Development"
309
+ ]
310
+ },
311
+ "description": {
312
+ "type": "string",
313
+ "description": "Description of what this file does"
314
+ },
315
+ "tags": {
316
+ "type": "array",
317
+ "description": "File-specific tags",
318
+ "items": {
319
+ "type": "string"
320
+ },
321
+ "uniqueItems": true,
322
+ "examples": [
323
+ [
324
+ "react",
325
+ "typescript"
326
+ ],
327
+ [
328
+ "testing",
329
+ "tdd"
330
+ ]
331
+ ]
332
+ }
333
+ },
334
+ "additionalProperties": false
335
+ },
336
+ "minItems": 1
337
+ }
338
+ ]
339
+ },
340
+ "main": {
341
+ "type": "string",
342
+ "description": "Main entry file (for single-file packages)",
343
+ "examples": [
344
+ "index.md",
345
+ "skill.md"
346
+ ]
347
+ },
348
+ "dependencies": {
349
+ "type": "object",
350
+ "description": "Package dependencies",
351
+ "patternProperties": {
352
+ "^(@[a-z0-9-]+\\/)?[a-z0-9-]+$": {
353
+ "type": "string",
354
+ "pattern": "^(\\^|~)?\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?(\\+[a-zA-Z0-9.-]+)?$"
355
+ }
356
+ },
357
+ "additionalProperties": false,
358
+ "examples": [
359
+ {
360
+ "@pr-pm/utils": "^1.0.0",
361
+ "common-rules": "~2.1.0"
362
+ }
363
+ ]
364
+ },
365
+ "peerDependencies": {
366
+ "type": "object",
367
+ "description": "Peer dependencies (packages that should be installed alongside)",
368
+ "patternProperties": {
369
+ "^(@[a-z0-9-]+\\/)?[a-z0-9-]+$": {
370
+ "type": "string"
371
+ }
372
+ },
373
+ "additionalProperties": false
374
+ },
375
+ "engines": {
376
+ "type": "object",
377
+ "description": "Required engine versions",
378
+ "properties": {
379
+ "prpm": {
380
+ "type": "string",
381
+ "description": "Required PRPM version"
382
+ },
383
+ "node": {
384
+ "type": "string",
385
+ "description": "Required Node.js version"
386
+ }
387
+ },
388
+ "additionalProperties": false,
389
+ "examples": [
390
+ {
391
+ "prpm": ">=1.0.0",
392
+ "node": ">=18.0.0"
393
+ }
394
+ ]
395
+ },
396
+ "packages": {
397
+ "type": "array",
398
+ "description": "Array of packages to publish from a single manifest (multi-package publishing). Packages inherit top-level fields unless overridden.",
399
+ "items": {
400
+ "$ref": "#"
401
+ },
402
+ "minItems": 1
403
+ },
404
+ "collections": {
405
+ "type": "array",
406
+ "description": "Array of collections to publish. Collections bundle multiple packages together for easier installation.",
407
+ "items": {
408
+ "type": "object",
409
+ "required": ["id", "name", "description", "packages"],
410
+ "properties": {
411
+ "id": {
412
+ "type": "string",
413
+ "description": "Unique collection identifier (kebab-case)",
414
+ "pattern": "^[a-z0-9-]+$",
415
+ "minLength": 3,
416
+ "maxLength": 100,
417
+ "examples": ["nextjs-complete", "fullstack-setup", "react-essentials"]
418
+ },
419
+ "name": {
420
+ "type": "string",
421
+ "description": "Display name of the collection",
422
+ "minLength": 3,
423
+ "maxLength": 100,
424
+ "examples": ["Next.js Complete", "Full Stack Setup"]
425
+ },
426
+ "description": {
427
+ "type": "string",
428
+ "description": "What this collection provides",
429
+ "minLength": 10,
430
+ "maxLength": 500
431
+ },
432
+ "version": {
433
+ "type": "string",
434
+ "description": "Semantic version of the collection",
435
+ "pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9.-]+)?(\\+[a-zA-Z0-9.-]+)?$",
436
+ "examples": ["1.0.0", "2.1.0"]
437
+ },
438
+ "category": {
439
+ "type": "string",
440
+ "description": "Collection category",
441
+ "enum": ["development", "testing", "deployment", "data-science", "devops", "design", "documentation", "security", "performance", "general"],
442
+ "examples": ["development", "testing"]
443
+ },
444
+ "tags": {
445
+ "type": "array",
446
+ "description": "Tags for discoverability (kebab-case)",
447
+ "items": {
448
+ "type": "string",
449
+ "pattern": "^[a-z0-9-]+$"
450
+ },
451
+ "minItems": 1,
452
+ "maxItems": 10,
453
+ "examples": [["react", "typescript", "nextjs"], ["python", "data-science", "ml"]]
454
+ },
455
+ "icon": {
456
+ "type": "string",
457
+ "description": "Emoji or icon for the collection",
458
+ "maxLength": 10,
459
+ "examples": ["⚛️", "🚀", "📦"]
460
+ },
461
+ "packages": {
462
+ "type": "array",
463
+ "description": "Array of packages included in this collection",
464
+ "items": {
465
+ "type": "object",
466
+ "required": ["packageId"],
467
+ "properties": {
468
+ "packageId": {
469
+ "type": "string",
470
+ "description": "Package identifier to include",
471
+ "minLength": 1,
472
+ "examples": ["typescript-strict", "react-best-practices"]
473
+ },
474
+ "version": {
475
+ "type": "string",
476
+ "description": "Version range (semver) or 'latest'",
477
+ "examples": ["^1.0.0", "~2.1.0", "1.0.0", "latest"]
478
+ },
479
+ "required": {
480
+ "type": "boolean",
481
+ "description": "Whether this package is required (true) or optional (false)",
482
+ "default": true
483
+ },
484
+ "reason": {
485
+ "type": "string",
486
+ "description": "Explanation of why this package is included",
487
+ "maxLength": 200,
488
+ "examples": ["Enforces strict TypeScript type safety", "React component best practices"]
489
+ }
490
+ }
491
+ },
492
+ "minItems": 1
493
+ }
494
+ }
495
+ },
496
+ "minItems": 1
497
+ }
498
+ },
499
+ "additionalProperties": false,
500
+ "examples": [
501
+ {
502
+ "name": "@username/simple-package",
503
+ "version": "1.0.0",
504
+ "description": "A simple package with basic files",
505
+ "format": "claude", "subtype": "skill",
506
+ "author": "Your Name",
507
+ "license": "MIT",
508
+ "files": [
509
+ "skill.md",
510
+ "README.md"
511
+ ]
512
+ },
513
+ {
514
+ "name": "@company/team-package",
515
+ "version": "1.0.0",
516
+ "description": "A package published under organization account",
517
+ "format": "cursor",
518
+ "author": "Team Name",
519
+ "organization": "my-company",
520
+ "license": "MIT",
521
+ "files": [
522
+ ".cursor/rules/guidelines.mdc",
523
+ "README.md"
524
+ ]
525
+ },
526
+ {
527
+ "name": "@username/cursor-rules",
528
+ "version": "1.0.0",
529
+ "description": "Multiple Cursor rules for different languages",
530
+ "format": "cursor",
531
+ "author": {
532
+ "name": "Your Name",
533
+ "email": "you@example.com"
534
+ },
535
+ "license": "MIT",
536
+ "repository": "https://github.com/username/cursor-rules",
537
+ "tags": [
538
+ "cursor",
539
+ "rules",
540
+ "multi-language"
541
+ ],
542
+ "files": [
543
+ {
544
+ "path": ".cursor/rules/typescript.mdc",
545
+ "format": "cursor",
546
+ "name": "TypeScript Rules",
547
+ "tags": [
548
+ "typescript",
549
+ "frontend"
550
+ ]
551
+ },
552
+ {
553
+ "path": ".cursor/rules/python.mdc",
554
+ "format": "cursor",
555
+ "name": "Python Rules",
556
+ "tags": [
557
+ "python",
558
+ "backend"
559
+ ]
560
+ }
561
+ ]
562
+ },
563
+ {
564
+ "name": "@community/testing-suite",
565
+ "version": "2.0.0",
566
+ "description": "Complete testing suite with skills and agents",
567
+ "format": "generic", "subtype": "collection",
568
+ "author": "Community",
569
+ "license": "MIT",
570
+ "tags": [
571
+ "testing",
572
+ "quality"
573
+ ],
574
+ "files": [
575
+ {
576
+ "path": ".claude/skills/tdd.md",
577
+ "format": "claude", "subtype": "skill",
578
+ "name": "Test-Driven Development"
579
+ },
580
+ {
581
+ "path": ".claude/agents/test-generator.md",
582
+ "format": "claude", "subtype": "agent",
583
+ "name": "Test Generator"
584
+ }
585
+ ]
586
+ },
587
+ {
588
+ "name": "@username/copilot-instructions",
589
+ "version": "1.0.0",
590
+ "description": "GitHub Copilot instructions for API development",
591
+ "format": "copilot",
592
+ "author": "Your Name",
593
+ "license": "MIT",
594
+ "tags": [
595
+ "copilot",
596
+ "api",
597
+ "backend"
598
+ ],
599
+ "files": [
600
+ "api-guidelines.md"
601
+ ]
602
+ },
603
+ {
604
+ "name": "@username/kiro-steering",
605
+ "version": "1.0.0",
606
+ "description": "Kiro steering file for testing standards",
607
+ "format": "kiro",
608
+ "author": "Your Name",
609
+ "license": "MIT",
610
+ "tags": [
611
+ "kiro",
612
+ "testing",
613
+ "quality"
614
+ ],
615
+ "files": [
616
+ "testing.md"
617
+ ]
618
+ },
619
+ {
620
+ "name": "@username/windsurf-rules",
621
+ "version": "1.0.0",
622
+ "description": "Windsurf coding rules for React projects",
623
+ "format": "windsurf",
624
+ "author": "Your Name",
625
+ "license": "MIT",
626
+ "tags": [
627
+ "windsurf",
628
+ "react",
629
+ "frontend"
630
+ ],
631
+ "files": [
632
+ ".windsurfrules"
633
+ ]
634
+ },
635
+ {
636
+ "name": "@company/private-package",
637
+ "version": "1.0.0",
638
+ "description": "A private package only accessible to organization members",
639
+ "format": "claude",
640
+ "subtype": "skill",
641
+ "author": "Company Team",
642
+ "organization": "my-company",
643
+ "private": true,
644
+ "license": "Proprietary",
645
+ "files": [
646
+ "internal-skill.md",
647
+ "README.md"
648
+ ]
649
+ },
650
+ {
651
+ "name": "@username/multi-package-example",
652
+ "version": "1.0.0",
653
+ "description": "Multi-package manifest example",
654
+ "author": "Your Name",
655
+ "license": "MIT",
656
+ "repository": "https://github.com/username/multi-package",
657
+ "packages": [
658
+ {
659
+ "name": "@username/package-one",
660
+ "version": "1.0.0",
661
+ "description": "First package in the multi-package manifest",
662
+ "format": "claude",
663
+ "subtype": "skill",
664
+ "files": [
665
+ "package-one/SKILL.md"
666
+ ]
667
+ },
668
+ {
669
+ "name": "@username/package-two",
670
+ "version": "1.0.0",
671
+ "description": "Second package with different settings",
672
+ "format": "cursor",
673
+ "private": true,
674
+ "files": [
675
+ "package-two/.cursor/rules/main.mdc"
676
+ ]
677
+ }
678
+ ]
679
+ },
680
+ {
681
+ "name": "@username/multi-package-with-collection",
682
+ "version": "1.0.0",
683
+ "description": "Repository with both packages and a collection",
684
+ "author": "Your Name",
685
+ "license": "MIT",
686
+ "packages": [
687
+ {
688
+ "name": "typescript-rules",
689
+ "version": "1.0.0",
690
+ "description": "TypeScript coding standards",
691
+ "format": "cursor",
692
+ "subtype": "rule",
693
+ "tags": ["typescript", "cursor"],
694
+ "files": [".cursor/rules/typescript.mdc"]
695
+ },
696
+ {
697
+ "name": "react-patterns",
698
+ "version": "1.0.0",
699
+ "description": "React best practices",
700
+ "format": "claude",
701
+ "subtype": "skill",
702
+ "tags": ["react", "best-practices"],
703
+ "files": [".claude/skills/react-patterns/SKILL.md"]
704
+ }
705
+ ],
706
+ "collections": [
707
+ {
708
+ "id": "fullstack-setup",
709
+ "name": "Full Stack Setup",
710
+ "description": "Complete full-stack development setup with TypeScript and React",
711
+ "version": "1.0.0",
712
+ "category": "development",
713
+ "tags": ["typescript", "react", "fullstack"],
714
+ "icon": "🚀",
715
+ "packages": [
716
+ {
717
+ "packageId": "typescript-rules",
718
+ "version": "^1.0.0",
719
+ "required": true,
720
+ "reason": "TypeScript coding standards for the project"
721
+ },
722
+ {
723
+ "packageId": "react-patterns",
724
+ "version": "^1.0.0",
725
+ "required": true,
726
+ "reason": "React component best practices"
727
+ }
728
+ ]
729
+ }
730
+ ]
731
+ }
732
+ ]
733
+ }