@millstone/synapse-cli 0.1.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.
Files changed (103) hide show
  1. package/README.md +135 -0
  2. package/bin/synapse.js +3 -0
  3. package/dist/commands/eject.d.ts +19 -0
  4. package/dist/commands/eject.d.ts.map +1 -0
  5. package/dist/commands/eject.js +146 -0
  6. package/dist/commands/eject.js.map +1 -0
  7. package/dist/commands/fetch-reference.d.ts +19 -0
  8. package/dist/commands/fetch-reference.d.ts.map +1 -0
  9. package/dist/commands/fetch-reference.js +93 -0
  10. package/dist/commands/fetch-reference.js.map +1 -0
  11. package/dist/commands/format.d.ts +26 -0
  12. package/dist/commands/format.d.ts.map +1 -0
  13. package/dist/commands/format.js +126 -0
  14. package/dist/commands/format.js.map +1 -0
  15. package/dist/commands/generate-pdf.d.ts +19 -0
  16. package/dist/commands/generate-pdf.d.ts.map +1 -0
  17. package/dist/commands/generate-pdf.js +140 -0
  18. package/dist/commands/generate-pdf.js.map +1 -0
  19. package/dist/commands/index.d.ts +17 -0
  20. package/dist/commands/index.d.ts.map +1 -0
  21. package/dist/commands/index.js +26 -0
  22. package/dist/commands/index.js.map +1 -0
  23. package/dist/commands/init.d.ts +58 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +234 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/migrate.d.ts +29 -0
  28. package/dist/commands/migrate.d.ts.map +1 -0
  29. package/dist/commands/migrate.js +297 -0
  30. package/dist/commands/migrate.js.map +1 -0
  31. package/dist/commands/scaffold.d.ts +24 -0
  32. package/dist/commands/scaffold.d.ts.map +1 -0
  33. package/dist/commands/scaffold.js +244 -0
  34. package/dist/commands/scaffold.js.map +1 -0
  35. package/dist/commands/update.d.ts +25 -0
  36. package/dist/commands/update.d.ts.map +1 -0
  37. package/dist/commands/update.js +253 -0
  38. package/dist/commands/update.js.map +1 -0
  39. package/dist/commands/validate.d.ts +37 -0
  40. package/dist/commands/validate.d.ts.map +1 -0
  41. package/dist/commands/validate.js +526 -0
  42. package/dist/commands/validate.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +277 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/lib/bodyRules.d.ts +70 -0
  48. package/dist/lib/bodyRules.d.ts.map +1 -0
  49. package/dist/lib/bodyRules.js +711 -0
  50. package/dist/lib/bodyRules.js.map +1 -0
  51. package/dist/lib/config.d.ts +49 -0
  52. package/dist/lib/config.d.ts.map +1 -0
  53. package/dist/lib/config.js +91 -0
  54. package/dist/lib/config.js.map +1 -0
  55. package/dist/lib/git.d.ts +99 -0
  56. package/dist/lib/git.d.ts.map +1 -0
  57. package/dist/lib/git.js +266 -0
  58. package/dist/lib/git.js.map +1 -0
  59. package/dist/lib/graph.d.ts +6 -0
  60. package/dist/lib/graph.d.ts.map +1 -0
  61. package/dist/lib/graph.js +6 -0
  62. package/dist/lib/graph.js.map +1 -0
  63. package/dist/lib/homepage.d.ts +10 -0
  64. package/dist/lib/homepage.d.ts.map +1 -0
  65. package/dist/lib/homepage.js +172 -0
  66. package/dist/lib/homepage.js.map +1 -0
  67. package/dist/lib/markdown.d.ts +107 -0
  68. package/dist/lib/markdown.d.ts.map +1 -0
  69. package/dist/lib/markdown.js +318 -0
  70. package/dist/lib/markdown.js.map +1 -0
  71. package/dist/lib/mode-detection.d.ts +10 -0
  72. package/dist/lib/mode-detection.d.ts.map +1 -0
  73. package/dist/lib/mode-detection.js +29 -0
  74. package/dist/lib/mode-detection.js.map +1 -0
  75. package/dist/lib/naming.d.ts +47 -0
  76. package/dist/lib/naming.d.ts.map +1 -0
  77. package/dist/lib/naming.js +403 -0
  78. package/dist/lib/naming.js.map +1 -0
  79. package/dist/lib/schemas.d.ts +38 -0
  80. package/dist/lib/schemas.d.ts.map +1 -0
  81. package/dist/lib/schemas.js +248 -0
  82. package/dist/lib/schemas.js.map +1 -0
  83. package/dist/lib/templateLint.d.ts +21 -0
  84. package/dist/lib/templateLint.d.ts.map +1 -0
  85. package/dist/lib/templateLint.js +243 -0
  86. package/dist/lib/templateLint.js.map +1 -0
  87. package/dist/lib/templates.d.ts +53 -0
  88. package/dist/lib/templates.d.ts.map +1 -0
  89. package/dist/lib/templates.js +128 -0
  90. package/dist/lib/templates.js.map +1 -0
  91. package/dist/lib/tracking.d.ts +52 -0
  92. package/dist/lib/tracking.d.ts.map +1 -0
  93. package/dist/lib/tracking.js +135 -0
  94. package/dist/lib/tracking.js.map +1 -0
  95. package/dist/lib/types.generated.d.ts +54 -0
  96. package/dist/lib/types.generated.d.ts.map +1 -0
  97. package/dist/lib/types.generated.js +144 -0
  98. package/dist/lib/types.generated.js.map +1 -0
  99. package/dist/lib/validate-plugins.d.ts +22 -0
  100. package/dist/lib/validate-plugins.d.ts.map +1 -0
  101. package/dist/lib/validate-plugins.js +851 -0
  102. package/dist/lib/validate-plugins.js.map +1 -0
  103. package/package.json +85 -0
@@ -0,0 +1,526 @@
1
+ import fsExtra from "fs-extra";
2
+ const fs = fsExtra;
3
+ import * as path from "path";
4
+ import glob from "fast-glob";
5
+ import { loadSchema, validateFrontmatter } from "../lib/schemas.js";
6
+ import { validateNaming } from "../lib/naming.js";
7
+ import { parseDocument, extractWikilinks, validateWikilinkExists, } from "../lib/markdown.js";
8
+ import { isDocType } from "../lib/types.generated.js";
9
+ import { loadBodyRules, validateBody } from "../lib/bodyRules.js";
10
+ import { validatePluginMarketplace } from "../lib/validate-plugins.js";
11
+ /**
12
+ * Validates that content directories don't have duplicate numeric prefixes
13
+ */
14
+ async function validateDirectoryPrefixes(contentDir) {
15
+ const issues = [];
16
+ try {
17
+ const entries = await fs.readdir(contentDir, { withFileTypes: true });
18
+ const directories = entries.filter((e) => e.isDirectory());
19
+ // Extract numeric prefixes from directory names
20
+ const prefixMap = new Map();
21
+ for (const dir of directories) {
22
+ const match = dir.name.match(/^(\d+)_/);
23
+ if (match) {
24
+ const prefix = match[1];
25
+ if (!prefixMap.has(prefix)) {
26
+ prefixMap.set(prefix, []);
27
+ }
28
+ prefixMap.get(prefix).push(dir.name);
29
+ }
30
+ }
31
+ // Check for duplicates
32
+ for (const [prefix, dirs] of prefixMap.entries()) {
33
+ if (dirs.length > 1) {
34
+ issues.push({
35
+ type: "error",
36
+ code: "DUPLICATE_PREFIX",
37
+ message: `Multiple directories with prefix ${prefix}_: ${dirs.join(", ")}. Each directory must have a unique numeric prefix.`,
38
+ });
39
+ }
40
+ }
41
+ }
42
+ catch (error) {
43
+ // Ignore errors reading directory
44
+ }
45
+ return issues;
46
+ }
47
+ /**
48
+ * Validates cross-link rules for different document types
49
+ */
50
+ function validateCrossLinks(frontmatter, body, filePath, existingFiles) {
51
+ const issues = [];
52
+ const docType = frontmatter.type;
53
+ if (!docType || !isDocType(docType)) {
54
+ return issues;
55
+ }
56
+ // Extract wikilinks from body
57
+ const wikilinks = extractWikilinks(body);
58
+ // Validate that all wikilinks point to existing documents
59
+ for (const link of wikilinks) {
60
+ if (!validateWikilinkExists(link, existingFiles)) {
61
+ issues.push({
62
+ type: "error",
63
+ code: "BROKEN_LINK",
64
+ message: `Referenced document does not exist: [[${link}]]`,
65
+ file: filePath,
66
+ });
67
+ }
68
+ }
69
+ // Validate cross-link rules based on document type
70
+ switch (docType) {
71
+ case "process":
72
+ // Process documents must reference at least one standard
73
+ if (!frontmatter.related_standards ||
74
+ !Array.isArray(frontmatter.related_standards) ||
75
+ frontmatter.related_standards.length === 0) {
76
+ issues.push({
77
+ type: "error",
78
+ code: "MISSING_REQUIRED_LINK",
79
+ message: "Process documents must reference at least one standard",
80
+ file: filePath,
81
+ field: "related_standards",
82
+ });
83
+ }
84
+ else {
85
+ // Validate that referenced standards exist
86
+ for (const standard of frontmatter.related_standards) {
87
+ const standardLink = extractWikilinks(standard)[0];
88
+ if (standardLink &&
89
+ !validateWikilinkExists(standardLink, existingFiles)) {
90
+ issues.push({
91
+ type: "error",
92
+ code: "BROKEN_LINK",
93
+ message: `Referenced standard does not exist: ${standard}`,
94
+ file: filePath,
95
+ field: "related_standards",
96
+ });
97
+ }
98
+ }
99
+ }
100
+ break;
101
+ case "sop":
102
+ // SOP must reference a parent process
103
+ if (!frontmatter.related_process ||
104
+ typeof frontmatter.related_process !== "string" ||
105
+ frontmatter.related_process.trim() === "") {
106
+ issues.push({
107
+ type: "error",
108
+ code: "MISSING_REQUIRED_LINK",
109
+ message: "SOP must reference a parent process",
110
+ file: filePath,
111
+ field: "related_process",
112
+ });
113
+ }
114
+ else {
115
+ // Validate that referenced process exists
116
+ const processLink = extractWikilinks(frontmatter.related_process)[0];
117
+ if (processLink &&
118
+ !validateWikilinkExists(processLink, existingFiles)) {
119
+ issues.push({
120
+ type: "error",
121
+ code: "BROKEN_LINK",
122
+ message: `Referenced process does not exist: ${frontmatter.related_process}`,
123
+ file: filePath,
124
+ field: "related_process",
125
+ });
126
+ }
127
+ }
128
+ break;
129
+ case "runbook":
130
+ // Runbook must reference a system/service (in body under ## Service section)
131
+ const serviceMatch = body.match(/##\s+Service\s*\n+([^\n#]+)/);
132
+ const serviceContent = serviceMatch ? serviceMatch[1].trim() : "";
133
+ const serviceLinks = extractWikilinks(serviceContent);
134
+ if (!serviceContent || serviceLinks.length === 0) {
135
+ issues.push({
136
+ type: "error",
137
+ code: "MISSING_REQUIRED_LINK",
138
+ message: "Runbook must reference a system/service",
139
+ file: filePath,
140
+ field: "service",
141
+ });
142
+ }
143
+ else {
144
+ // Validate that referenced service exists
145
+ for (const serviceLink of serviceLinks) {
146
+ if (!validateWikilinkExists(serviceLink, existingFiles)) {
147
+ issues.push({
148
+ type: "error",
149
+ code: "BROKEN_LINK",
150
+ message: `Referenced service does not exist: [[${serviceLink}]]`,
151
+ file: filePath,
152
+ field: "service",
153
+ });
154
+ }
155
+ }
156
+ }
157
+ break;
158
+ }
159
+ return issues;
160
+ }
161
+ /**
162
+ * Validates a single document
163
+ */
164
+ async function validateDocument(filePath, contentDir, schemaDir, existingFiles, bodyRules, // BodyRules type from bodyRules.ts
165
+ strict = true) {
166
+ const issues = [];
167
+ try {
168
+ // Read file content
169
+ const content = await fs.readFile(filePath, "utf-8");
170
+ const parsed = parseDocument(content);
171
+ // Check for YAML parse errors
172
+ if (parsed.error) {
173
+ issues.push({
174
+ type: "error",
175
+ code: "YAML_PARSE_ERROR",
176
+ message: `Invalid YAML in frontmatter: ${parsed.error}`,
177
+ file: filePath,
178
+ });
179
+ return issues; // Can't continue validation without valid frontmatter
180
+ }
181
+ const { frontmatter, body } = parsed;
182
+ // Get document type
183
+ const docType = frontmatter.type;
184
+ if (!docType || !isDocType(docType)) {
185
+ issues.push({
186
+ type: "error",
187
+ code: "INVALID_DOC_TYPE",
188
+ message: `Invalid or missing document type: ${docType}`,
189
+ file: filePath,
190
+ field: "type",
191
+ });
192
+ return issues;
193
+ }
194
+ // Load and validate against schema
195
+ const schema = await loadSchema(docType, schemaDir);
196
+ const schemaValidation = validateFrontmatter(frontmatter, schema);
197
+ if (!schemaValidation.valid && schemaValidation.errors) {
198
+ for (const error of schemaValidation.errors) {
199
+ issues.push({
200
+ type: "error",
201
+ code: "SCHEMA_VALIDATION_ERROR",
202
+ message: `Schema validation: ${error.path} ${error.message}`,
203
+ file: filePath,
204
+ field: error.path || undefined,
205
+ });
206
+ }
207
+ }
208
+ // Validate body structure (AST-based validation)
209
+ if (bodyRules) {
210
+ const relativePath = path.relative(contentDir, filePath);
211
+ const bodyIssues = validateBody(body, bodyRules, docType, relativePath);
212
+ // Map body validation issues to include file path
213
+ issues.push(...bodyIssues.map((issue) => ({
214
+ ...issue,
215
+ file: filePath,
216
+ })));
217
+ }
218
+ // Validate naming conventions
219
+ const relativePath = path.relative(contentDir, filePath);
220
+ const projectRoot = path.resolve(contentDir, '..');
221
+ const namingIssues = validateNaming(relativePath, frontmatter, strict, projectRoot);
222
+ issues.push(...namingIssues.map((issue) => ({
223
+ ...issue,
224
+ file: filePath,
225
+ })));
226
+ // Validate cross-links
227
+ const crossLinkIssues = validateCrossLinks(frontmatter, body, filePath, existingFiles);
228
+ issues.push(...crossLinkIssues);
229
+ }
230
+ catch (error) {
231
+ issues.push({
232
+ type: "error",
233
+ code: "VALIDATION_FAILED",
234
+ message: `Failed to validate file: ${error}`,
235
+ file: filePath,
236
+ });
237
+ }
238
+ return issues;
239
+ }
240
+ /**
241
+ * Main validation function
242
+ */
243
+ export async function validate(options) {
244
+ // Better directory resolution that works from any location
245
+ let contentDir = options.contentDir;
246
+ if (!contentDir) {
247
+ // Try to find content directory relative to cwd
248
+ const cwdContent = path.resolve(process.cwd(), "content");
249
+ const parentContent = path.resolve(process.cwd(), "../content");
250
+ const grandparentContent = path.resolve(process.cwd(), "../../content");
251
+ if (await fs.pathExists(cwdContent)) {
252
+ contentDir = cwdContent;
253
+ }
254
+ else if (await fs.pathExists(parentContent)) {
255
+ contentDir = parentContent;
256
+ }
257
+ else if (await fs.pathExists(grandparentContent)) {
258
+ contentDir = grandparentContent;
259
+ }
260
+ else {
261
+ // Default fallback
262
+ contentDir = cwdContent;
263
+ }
264
+ }
265
+ else {
266
+ // Resolve the provided path
267
+ contentDir = path.resolve(process.cwd(), contentDir);
268
+ }
269
+ // Schema dir should be at project root, not inside content
270
+ const projectRoot = path.resolve(contentDir, '..');
271
+ const schemaDir = options.schemaDir || path.resolve(projectRoot, "schemas/frontmatter");
272
+ const pattern = options.pattern || "**/*.md";
273
+ const strict = options.strict !== undefined ? options.strict : true; // Default to strict mode
274
+ const allIssues = [];
275
+ let filesValidated = 0;
276
+ try {
277
+ // Load body validation rules
278
+ let bodyRules = null;
279
+ try {
280
+ bodyRules = await loadBodyRules();
281
+ }
282
+ catch (error) {
283
+ // Body rules are optional - if they don't exist, skip body validation
284
+ console.warn('Warning: Body rules not found, skipping body validation');
285
+ }
286
+ // Validate directory structure first
287
+ const directoryIssues = await validateDirectoryPrefixes(contentDir);
288
+ allIssues.push(...directoryIssues);
289
+ // Get all markdown files to validate
290
+ const files = await glob(pattern, {
291
+ cwd: contentDir,
292
+ absolute: true,
293
+ ignore: [
294
+ "**/node_modules/**",
295
+ "**/.git/**",
296
+ "**/templates/**",
297
+ "index.md",
298
+ ],
299
+ });
300
+ // Build set of ALL existing files in the vault for cross-reference validation
301
+ // This needs to include files from the entire content root, not just the validation directory
302
+ const existingFiles = new Set();
303
+ // Find the root content directory (go up from contentDir until we find the base)
304
+ let rootContentDir = contentDir;
305
+ const pathParts = contentDir.split(path.sep);
306
+ for (let i = pathParts.length - 1; i >= 0; i--) {
307
+ if (pathParts[i] === "content") {
308
+ rootContentDir = pathParts.slice(0, i + 1).join(path.sep);
309
+ break;
310
+ }
311
+ }
312
+ // Get ALL markdown files from the root for link validation
313
+ const allVaultFiles = await glob("**/*.md", {
314
+ cwd: rootContentDir,
315
+ absolute: true,
316
+ ignore: [
317
+ "**/node_modules/**",
318
+ "**/.git/**",
319
+ "**/templates/**",
320
+ "index.md",
321
+ ],
322
+ });
323
+ // Add all vault files to the set for cross-reference checking
324
+ for (const file of allVaultFiles) {
325
+ const relativePath = path.relative(rootContentDir, file);
326
+ existingFiles.add(relativePath);
327
+ existingFiles.add(path.basename(file));
328
+ existingFiles.add(path.basename(file, ".md"));
329
+ }
330
+ // Validate each file
331
+ for (const file of files) {
332
+ const issues = await validateDocument(file, rootContentDir, // Use root content dir for proper relative paths
333
+ schemaDir, existingFiles, bodyRules, strict);
334
+ allIssues.push(...issues);
335
+ filesValidated++;
336
+ }
337
+ // Check for duplicate titles across all documents
338
+ const titleMap = new Map();
339
+ for (const file of files) {
340
+ try {
341
+ const content = await fs.readFile(file, "utf-8");
342
+ const { frontmatter } = parseDocument(content);
343
+ if (frontmatter.title && frontmatter.type) {
344
+ // Create a normalized key for comparison
345
+ const normalizedTitle = frontmatter.title
346
+ .toLowerCase()
347
+ .replace(/[^\w\s-]/g, "")
348
+ .replace(/\s+/g, "-")
349
+ .replace(/-+/g, "-")
350
+ .trim();
351
+ // Group by type and normalized title
352
+ const key = `${frontmatter.type}:${normalizedTitle}`;
353
+ if (!titleMap.has(key)) {
354
+ titleMap.set(key, []);
355
+ }
356
+ titleMap.get(key).push(path.relative(contentDir, file));
357
+ }
358
+ }
359
+ catch (error) {
360
+ // Skip files that can't be parsed for duplicate detection
361
+ }
362
+ }
363
+ // Report duplicates (excluding examples as they're expected to have similar titles)
364
+ for (const [key, paths] of titleMap.entries()) {
365
+ const nonExamplePaths = paths.filter((p) => !p.includes("00_Guides/Examples/"));
366
+ if (nonExamplePaths.length > 1) {
367
+ const [type, title] = key.split(":", 2);
368
+ allIssues.push({
369
+ type: "warning",
370
+ code: "DUPLICATE_TITLE",
371
+ message: `Multiple ${type} documents with similar title may cause confusion: ${nonExamplePaths.join(", ")}`,
372
+ file: "", // No specific file, it's a cross-file issue
373
+ });
374
+ }
375
+ }
376
+ // Validate plugins if marketplace manifest exists
377
+ const marketplacePath = path.join(projectRoot, '.claude-plugin/marketplace.json');
378
+ if (await fs.pathExists(marketplacePath)) {
379
+ try {
380
+ const pluginSchemaDir = path.join(projectRoot, 'schemas/plugins');
381
+ const pluginResult = await validatePluginMarketplace(projectRoot, pluginSchemaDir);
382
+ // Merge plugin issues into main validation
383
+ allIssues.push(...pluginResult.issues);
384
+ }
385
+ catch (error) {
386
+ allIssues.push({
387
+ type: "error",
388
+ code: "PLUGIN_VALIDATION_FAILED",
389
+ message: `Plugin validation failed: ${error}`,
390
+ });
391
+ }
392
+ }
393
+ return {
394
+ success: allIssues.filter((i) => i.type === "error").length === 0,
395
+ issues: allIssues,
396
+ filesValidated,
397
+ };
398
+ }
399
+ catch (error) {
400
+ return {
401
+ success: false,
402
+ issues: [
403
+ {
404
+ type: "error",
405
+ code: "VALIDATION_FAILED",
406
+ message: `Validation failed: ${error}`,
407
+ },
408
+ ],
409
+ filesValidated,
410
+ };
411
+ }
412
+ }
413
+ /**
414
+ * CLI handler for validate command
415
+ */
416
+ export async function validateCommand(args) {
417
+ // Handle special case where dir is '.' - treat as current directory
418
+ let contentDir = args.dir;
419
+ if (contentDir === ".") {
420
+ contentDir = process.cwd();
421
+ }
422
+ // Determine project root for plugin validation
423
+ let projectRoot = process.cwd();
424
+ if (contentDir) {
425
+ projectRoot = path.resolve(contentDir, '..');
426
+ }
427
+ const result = await validate({
428
+ contentDir: contentDir,
429
+ schemaDir: args.schema, // Updated to use args.schema
430
+ pattern: args.pattern,
431
+ strict: args.strict, // Will default to true if not specified
432
+ });
433
+ // Get plugin validation results if marketplace exists
434
+ let pluginResult = null;
435
+ const marketplacePath = path.join(projectRoot, '.claude-plugin/marketplace.json');
436
+ if (await fs.pathExists(marketplacePath)) {
437
+ try {
438
+ const pluginSchemaDir = path.join(projectRoot, 'schemas/plugins');
439
+ pluginResult = await validatePluginMarketplace(projectRoot, pluginSchemaDir);
440
+ }
441
+ catch (error) {
442
+ // Error already captured in main validation
443
+ }
444
+ }
445
+ const errors = result.issues.filter((i) => i.type === "error");
446
+ const warnings = result.issues.filter((i) => i.type === "warning");
447
+ // Handle different output formats
448
+ if (args.format === "json") {
449
+ // Count files with errors (not total errors)
450
+ const filesWithErrors = new Set(errors.map((e) => e.file).filter((f) => f))
451
+ .size;
452
+ const validFiles = result.filesValidated - filesWithErrors;
453
+ // Output JSON format
454
+ const jsonOutput = {
455
+ errors: errors,
456
+ warnings: warnings,
457
+ summary: {
458
+ total: result.filesValidated,
459
+ valid: validFiles,
460
+ errors: errors.length,
461
+ warnings: warnings.length,
462
+ },
463
+ };
464
+ console.log(JSON.stringify(jsonOutput, null, 2));
465
+ }
466
+ else if (args.format === "compact") {
467
+ // Compact format - one line per issue
468
+ for (const error of errors) {
469
+ console.log(`[E] ${error.file || "global"}: ${error.message}`);
470
+ }
471
+ for (const warning of warnings) {
472
+ console.log(`[W] ${warning.file || "global"}: ${warning.message}`);
473
+ }
474
+ }
475
+ else if (!args.quiet) {
476
+ // Default pretty format
477
+ console.log(`\nValidated ${result.filesValidated} files\n`);
478
+ // Show plugin validation summary if plugins were validated
479
+ if (pluginResult) {
480
+ console.log('Plugin validation:');
481
+ console.log(` Plugins validated: ${pluginResult.pluginsValidated}`);
482
+ const { componentsValidated } = pluginResult;
483
+ if (componentsValidated.commands > 0) {
484
+ console.log(` Commands: ${componentsValidated.commands}`);
485
+ }
486
+ if (componentsValidated.agents > 0) {
487
+ console.log(` Agents: ${componentsValidated.agents}`);
488
+ }
489
+ if (componentsValidated.skills > 0) {
490
+ console.log(` Skills: ${componentsValidated.skills}`);
491
+ }
492
+ if (componentsValidated.hooks > 0) {
493
+ console.log(` Hooks: ${componentsValidated.hooks}`);
494
+ }
495
+ if (componentsValidated.mcpServers > 0) {
496
+ console.log(` MCP servers: ${componentsValidated.mcpServers}`);
497
+ }
498
+ console.log();
499
+ }
500
+ if (errors.length > 0) {
501
+ console.log(`❌ ${errors.length} errors:`);
502
+ for (const error of errors) {
503
+ console.log(` - ${error.file ? path.basename(error.file) + ": " : ""}${error.message}`);
504
+ }
505
+ console.log();
506
+ }
507
+ if (warnings.length > 0) {
508
+ console.log(`⚠️ ${warnings.length} warnings:`);
509
+ for (const warning of warnings) {
510
+ console.log(` - ${warning.file ? path.basename(warning.file) + ": " : ""}${warning.message}`);
511
+ }
512
+ console.log();
513
+ }
514
+ if (result.success) {
515
+ console.log("✅ All validations passed!");
516
+ }
517
+ else {
518
+ console.log("❌ Validation failed");
519
+ }
520
+ }
521
+ // Exit with error code if validation failed
522
+ if (!result.success) {
523
+ process.exit(1);
524
+ }
525
+ }
526
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}