@agents-inc/cli 0.74.7 → 0.74.8

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 (112) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{chunk-HA35FGPO.js → chunk-4Q2JLBCX.js} +2 -2
  3. package/dist/{chunk-RO6BG4ZW.js → chunk-7JVDZFJG.js} +3 -5
  4. package/dist/chunk-7JVDZFJG.js.map +1 -0
  5. package/dist/{chunk-TJBOCGLR.js → chunk-7SKGMV7P.js} +11 -11
  6. package/dist/{chunk-JB2QTE7M.js → chunk-7W226BOV.js} +5 -6
  7. package/dist/chunk-7W226BOV.js.map +1 -0
  8. package/dist/{chunk-STC7IEVI.js → chunk-BQW4ONJE.js} +2 -2
  9. package/dist/{chunk-6VIOO74O.js → chunk-CBYRFAUN.js} +1 -3
  10. package/dist/{chunk-6VIOO74O.js.map → chunk-CBYRFAUN.js.map} +1 -1
  11. package/dist/{chunk-GFTBHBRQ.js → chunk-E3MF6GGS.js} +14 -3
  12. package/dist/chunk-E3MF6GGS.js.map +1 -0
  13. package/dist/{chunk-BKTPEATV.js → chunk-F7LOH754.js} +2 -2
  14. package/dist/{chunk-UKYWXIDT.js → chunk-FVMYBN5K.js} +85 -68
  15. package/dist/chunk-FVMYBN5K.js.map +1 -0
  16. package/dist/{chunk-HIVZDWJC.js → chunk-GNA6IOQZ.js} +2 -2
  17. package/dist/{chunk-VMTZ5WC5.js → chunk-HJY4354Y.js} +2 -2
  18. package/dist/{chunk-MVYJVKVT.js → chunk-HT5KOOUQ.js} +2 -2
  19. package/dist/{chunk-RHAZARG3.js → chunk-KZG3EQSH.js} +5 -5
  20. package/dist/{chunk-KYULKBFC.js → chunk-NA6I5P5P.js} +2 -2
  21. package/dist/{chunk-CJSCCLT5.js → chunk-PN65K3LH.js} +2 -2
  22. package/dist/{chunk-MOWZ2FLG.js → chunk-Q53GBFTO.js} +2 -2
  23. package/dist/{chunk-2GD57LQE.js → chunk-RBR355UI.js} +5 -5
  24. package/dist/{chunk-FDIKV4ON.js → chunk-SM4FX2IU.js} +4 -88
  25. package/dist/chunk-SM4FX2IU.js.map +1 -0
  26. package/dist/{chunk-COZ75NET.js → chunk-TPXDHJDB.js} +2 -2
  27. package/dist/{chunk-2ZQKORJI.js → chunk-TUGXTCGX.js} +3 -3
  28. package/dist/{chunk-2MHSOPIU.js → chunk-UFKDY45I.js} +2 -2
  29. package/dist/{chunk-W3GHDONP.js → chunk-ULP3GGXG.js} +4 -4
  30. package/dist/{chunk-JZPQI7YI.js → chunk-X6LXHVA6.js} +2 -2
  31. package/dist/commands/build/plugins.js +2 -2
  32. package/dist/commands/build/stack.js +2 -2
  33. package/dist/commands/compile.js +2 -2
  34. package/dist/commands/config/index.js +2 -2
  35. package/dist/commands/config/path.js +1 -1
  36. package/dist/commands/config/show.js +2 -2
  37. package/dist/commands/diff.js +1 -1
  38. package/dist/commands/doctor.js +1 -1
  39. package/dist/commands/edit.js +47 -40
  40. package/dist/commands/edit.js.map +1 -1
  41. package/dist/commands/eject.js +1 -1
  42. package/dist/commands/import/skill.js +1 -1
  43. package/dist/commands/info.js +1 -1
  44. package/dist/commands/init.js +18 -18
  45. package/dist/commands/list.js +1 -1
  46. package/dist/commands/new/agent.js +2 -2
  47. package/dist/commands/new/marketplace.js +2 -2
  48. package/dist/commands/new/skill.js +2 -2
  49. package/dist/commands/outdated.js +1 -1
  50. package/dist/commands/search.js +3 -3
  51. package/dist/commands/uninstall.js +1 -1
  52. package/dist/commands/update.js +2 -2
  53. package/dist/commands/validate.js +62 -44
  54. package/dist/commands/validate.js.map +1 -1
  55. package/dist/components/skill-search/skill-search.js +2 -2
  56. package/dist/components/wizard/category-grid.js +2 -2
  57. package/dist/components/wizard/category-grid.test.js +4 -4
  58. package/dist/components/wizard/domain-selection.js +3 -3
  59. package/dist/components/wizard/help-modal.js +2 -2
  60. package/dist/components/wizard/search-modal.js +2 -2
  61. package/dist/components/wizard/search-modal.test.js +2 -2
  62. package/dist/components/wizard/source-grid.js +3 -3
  63. package/dist/components/wizard/source-grid.test.js +5 -5
  64. package/dist/components/wizard/stack-selection.js +3 -3
  65. package/dist/components/wizard/step-agents.js +3 -3
  66. package/dist/components/wizard/step-agents.test.js +3 -3
  67. package/dist/components/wizard/step-build.js +5 -5
  68. package/dist/components/wizard/step-build.test.js +5 -5
  69. package/dist/components/wizard/step-confirm.js +2 -2
  70. package/dist/components/wizard/step-confirm.test.js +4 -4
  71. package/dist/components/wizard/step-refine.js +2 -2
  72. package/dist/components/wizard/step-refine.test.js +2 -2
  73. package/dist/components/wizard/step-settings.js +3 -3
  74. package/dist/components/wizard/step-settings.test.js +6 -6
  75. package/dist/components/wizard/step-sources.js +6 -6
  76. package/dist/components/wizard/step-sources.test.js +6 -6
  77. package/dist/components/wizard/step-stack.js +5 -5
  78. package/dist/components/wizard/step-stack.test.js +5 -5
  79. package/dist/components/wizard/wizard-layout.js +5 -5
  80. package/dist/components/wizard/wizard.js +17 -17
  81. package/dist/hooks/init.js +18 -18
  82. package/dist/source-loader-X46F4X2B.js +23 -0
  83. package/dist/{source-manager-A3QLBYCU.js → source-manager-WG7HJHVW.js} +2 -2
  84. package/dist/stores/wizard-store.js +2 -2
  85. package/dist/stores/wizard-store.test.js +26 -5
  86. package/dist/stores/wizard-store.test.js.map +1 -1
  87. package/package.json +1 -1
  88. package/dist/chunk-FDIKV4ON.js.map +0 -1
  89. package/dist/chunk-GFTBHBRQ.js.map +0 -1
  90. package/dist/chunk-JB2QTE7M.js.map +0 -1
  91. package/dist/chunk-RO6BG4ZW.js.map +0 -1
  92. package/dist/chunk-UKYWXIDT.js.map +0 -1
  93. package/dist/source-loader-HQTTAMS7.js +0 -17
  94. /package/dist/{chunk-HA35FGPO.js.map → chunk-4Q2JLBCX.js.map} +0 -0
  95. /package/dist/{chunk-TJBOCGLR.js.map → chunk-7SKGMV7P.js.map} +0 -0
  96. /package/dist/{chunk-STC7IEVI.js.map → chunk-BQW4ONJE.js.map} +0 -0
  97. /package/dist/{chunk-BKTPEATV.js.map → chunk-F7LOH754.js.map} +0 -0
  98. /package/dist/{chunk-HIVZDWJC.js.map → chunk-GNA6IOQZ.js.map} +0 -0
  99. /package/dist/{chunk-VMTZ5WC5.js.map → chunk-HJY4354Y.js.map} +0 -0
  100. /package/dist/{chunk-MVYJVKVT.js.map → chunk-HT5KOOUQ.js.map} +0 -0
  101. /package/dist/{chunk-RHAZARG3.js.map → chunk-KZG3EQSH.js.map} +0 -0
  102. /package/dist/{chunk-KYULKBFC.js.map → chunk-NA6I5P5P.js.map} +0 -0
  103. /package/dist/{chunk-CJSCCLT5.js.map → chunk-PN65K3LH.js.map} +0 -0
  104. /package/dist/{chunk-MOWZ2FLG.js.map → chunk-Q53GBFTO.js.map} +0 -0
  105. /package/dist/{chunk-2GD57LQE.js.map → chunk-RBR355UI.js.map} +0 -0
  106. /package/dist/{chunk-COZ75NET.js.map → chunk-TPXDHJDB.js.map} +0 -0
  107. /package/dist/{chunk-2ZQKORJI.js.map → chunk-TUGXTCGX.js.map} +0 -0
  108. /package/dist/{chunk-2MHSOPIU.js.map → chunk-UFKDY45I.js.map} +0 -0
  109. /package/dist/{chunk-W3GHDONP.js.map → chunk-ULP3GGXG.js.map} +0 -0
  110. /package/dist/{chunk-JZPQI7YI.js.map → chunk-X6LXHVA6.js.map} +0 -0
  111. /package/dist/{source-loader-HQTTAMS7.js.map → source-loader-X46F4X2B.js.map} +0 -0
  112. /package/dist/{source-manager-A3QLBYCU.js.map → source-manager-WG7HJHVW.js.map} +0 -0
@@ -11,7 +11,7 @@ import {
11
11
  validateAllPlugins,
12
12
  validateAllSchemas,
13
13
  validatePlugin
14
- } from "../chunk-UKYWXIDT.js";
14
+ } from "../chunk-FVMYBN5K.js";
15
15
  import {
16
16
  parseFrontmatter
17
17
  } from "../chunk-RRBWNEG3.js";
@@ -55,6 +55,57 @@ import { parse as parseYaml } from "yaml";
55
55
  function isSnakeCase(key) {
56
56
  return /[a-z]_[a-z]/.test(key);
57
57
  }
58
+ function validateMetadataConventions(rawMetadata, validatedMetadata, relPath, dirName) {
59
+ const issues = [];
60
+ if (rawMetadata && typeof rawMetadata === "object" && !Array.isArray(rawMetadata)) {
61
+ for (const key of Object.keys(rawMetadata)) {
62
+ if (isSnakeCase(key)) {
63
+ issues.push({
64
+ severity: "error",
65
+ file: relPath,
66
+ message: `Key '${key}' uses snake_case \u2014 use camelCase instead`
67
+ });
68
+ }
69
+ }
70
+ }
71
+ if (validatedMetadata.displayName !== dirName) {
72
+ issues.push({
73
+ severity: "warning",
74
+ file: relPath,
75
+ message: `displayName '${validatedMetadata.displayName}' does not match directory name '${dirName}'`
76
+ });
77
+ }
78
+ if (validatedMetadata.category && !/^(web|api|cli|mobile|infra|meta|security|shared)-.+$/.test(validatedMetadata.category)) {
79
+ issues.push({
80
+ severity: "warning",
81
+ file: relPath,
82
+ message: `Category '${validatedMetadata.category}' does not follow domain-prefixed pattern (e.g., 'web-framework', 'api-database')`
83
+ });
84
+ }
85
+ return issues;
86
+ }
87
+ function validateSkillFilePairs(skillMdDirs, metadataDirs, skillsDir) {
88
+ const issues = [];
89
+ for (const dir of skillMdDirs) {
90
+ if (!metadataDirs.has(dir)) {
91
+ issues.push({
92
+ severity: "error",
93
+ file: path.join(skillsDir, dir),
94
+ message: `Missing ${STANDARD_FILES.METADATA_YAML} \u2014 skill directory has ${STANDARD_FILES.SKILL_MD} but no metadata`
95
+ });
96
+ }
97
+ }
98
+ for (const dir of metadataDirs) {
99
+ if (!skillMdDirs.has(dir)) {
100
+ issues.push({
101
+ severity: "error",
102
+ file: path.join(skillsDir, dir),
103
+ message: `Missing ${STANDARD_FILES.SKILL_MD} \u2014 skill directory has ${STANDARD_FILES.METADATA_YAML} but no SKILL.md`
104
+ });
105
+ }
106
+ }
107
+ return issues;
108
+ }
58
109
  async function validateSource(sourcePath) {
59
110
  const issues = [];
60
111
  const resolvedPath = path.isAbsolute(sourcePath) ? sourcePath : path.resolve(sourcePath);
@@ -81,24 +132,7 @@ async function validateSource(sourcePath) {
81
132
  const metadataFiles = await glob(`**/${STANDARD_FILES.METADATA_YAML}`, skillsDir);
82
133
  const skillMdDirs = new Set(skillMdFiles.map((f) => path.dirname(f)));
83
134
  const metadataDirs = new Set(metadataFiles.map((f) => path.dirname(f)));
84
- for (const dir of skillMdDirs) {
85
- if (!metadataDirs.has(dir)) {
86
- issues.push({
87
- severity: "error",
88
- file: path.join(skillsDir, dir),
89
- message: `Missing ${STANDARD_FILES.METADATA_YAML} \u2014 skill directory has ${STANDARD_FILES.SKILL_MD} but no metadata`
90
- });
91
- }
92
- }
93
- for (const dir of metadataDirs) {
94
- if (!skillMdDirs.has(dir)) {
95
- issues.push({
96
- severity: "error",
97
- file: path.join(skillsDir, dir),
98
- message: `Missing ${STANDARD_FILES.SKILL_MD} \u2014 skill directory has ${STANDARD_FILES.METADATA_YAML} but no SKILL.md`
99
- });
100
- }
101
- }
135
+ issues.push(...validateSkillFilePairs(skillMdDirs, metadataDirs, skillsDir));
102
136
  let skillCount = 0;
103
137
  for (const metadataFile of metadataFiles) {
104
138
  const metadataPath = path.join(skillsDir, metadataFile);
@@ -121,19 +155,16 @@ async function validateSource(sourcePath) {
121
155
  });
122
156
  continue;
123
157
  }
124
- if (rawMetadata && typeof rawMetadata === "object" && !Array.isArray(rawMetadata)) {
125
- for (const key of Object.keys(rawMetadata)) {
126
- if (isSnakeCase(key)) {
127
- issues.push({
128
- severity: "error",
129
- file: relPath,
130
- message: `Key '${key}' uses snake_case \u2014 use camelCase instead`
131
- });
132
- }
133
- }
134
- }
135
158
  const result = metadataValidationSchema.safeParse(rawMetadata);
136
159
  if (!result.success) {
160
+ issues.push(
161
+ ...validateMetadataConventions(
162
+ rawMetadata,
163
+ { displayName: "", category: "" },
164
+ relPath,
165
+ path.basename(skillDir)
166
+ ).filter((i) => i.message.includes("snake_case"))
167
+ );
137
168
  for (const issue of result.error.issues) {
138
169
  const fieldPath = issue.path.join(".");
139
170
  issues.push({
@@ -146,13 +177,7 @@ async function validateSource(sourcePath) {
146
177
  }
147
178
  const metadata = result.data;
148
179
  const dirName = path.basename(skillDir);
149
- if (metadata.displayName !== dirName) {
150
- issues.push({
151
- severity: "warning",
152
- file: relPath,
153
- message: `displayName '${metadata.displayName}' does not match directory name '${dirName}'`
154
- });
155
- }
180
+ issues.push(...validateMetadataConventions(rawMetadata, metadata, relPath, dirName));
156
181
  const skillMdContent = await readFile(skillMdPath);
157
182
  const frontmatter = parseFrontmatter(skillMdContent, skillMdPath);
158
183
  if (frontmatter) {
@@ -164,13 +189,6 @@ async function validateSource(sourcePath) {
164
189
  });
165
190
  }
166
191
  }
167
- if (metadata.category && !/^(web|api|cli|mobile|infra|meta|security|shared)-.+$/.test(metadata.category)) {
168
- issues.push({
169
- severity: "warning",
170
- file: relPath,
171
- message: `Category '${metadata.category}' does not follow domain-prefixed pattern (e.g., 'web-framework', 'api-database')`
172
- });
173
- }
174
192
  }
175
193
  try {
176
194
  await loadSkillsMatrixFromSource({ sourceFlag: resolvedPath, skipExtraSources: true });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/validate.ts","../../src/cli/lib/source-validator.ts"],"sourcesContent":["import { Args, Flags } from \"@oclif/core\";\nimport path from \"path\";\nimport { BaseCommand } from \"../base-command.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { ERROR_MESSAGES } from \"../utils/messages.js\";\nimport { validateAllSchemas, printValidationResults } from \"../lib/schema-validator.js\";\nimport {\n validatePlugin,\n validateAllPlugins,\n printPluginValidationResult,\n} from \"../lib/plugins/index.js\";\nimport { validateSource } from \"../lib/source-validator.js\";\nimport { setVerbose } from \"../utils/logger.js\";\n\nexport default class Validate extends BaseCommand {\n static summary =\n \"Validate YAML files against schemas, validate compiled plugins, or validate a skills source\";\n static description =\n \"Validates skill/agent YAML files against JSON schemas, validates compiled plugin structure and content, \" +\n \"or validates a skills source repository for metadata correctness. \" +\n \"Without arguments, validates all YAML files in the current directory against their schemas. \" +\n \"With --source, validates all skills in the source for schema compliance, cross-references, and conventions. \" +\n \"With a path argument or --plugins flag, validates plugin(s) instead.\";\n\n static examples = [\n {\n description: \"Validate all YAML schemas\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n {\n description: \"Validate a skills source repository\",\n command: \"<%= config.bin %> <%= command.id %> --source .\",\n },\n {\n description: \"Validate a remote skills source\",\n command: \"<%= config.bin %> <%= command.id %> --source github:acme-corp/skills\",\n },\n {\n description: \"Validate a specific plugin\",\n command: \"<%= config.bin %> <%= command.id %> ./path/to/plugin\",\n },\n {\n description: \"Validate all plugins in a directory\",\n command: \"<%= config.bin %> <%= command.id %> ./plugins --all\",\n },\n {\n description: \"Validate plugins with verbose output\",\n command: \"<%= config.bin %> <%= command.id %> --plugins --verbose\",\n },\n ];\n\n static args = {\n path: Args.string({\n description: \"Path to plugin or plugins directory to validate\",\n required: false,\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Enable verbose logging\",\n default: false,\n }),\n all: Flags.boolean({\n char: \"a\",\n description: \"Validate all plugins in directory\",\n default: false,\n }),\n plugins: Flags.boolean({\n char: \"p\",\n description: \"Validate plugins instead of schemas\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(Validate);\n\n if (flags.source) {\n setVerbose(flags.verbose);\n await this.validateSkillsSource(flags.source);\n } else if (args.path || flags.plugins) {\n await this.validatePlugins(args.path, flags.verbose, flags.all);\n } else {\n await this.validateSchemas();\n }\n }\n\n private async validateSchemas(): Promise<void> {\n this.log(\"\");\n this.log(\"Validating all schemas\");\n this.log(\"\");\n\n try {\n const result = await validateAllSchemas();\n\n const summary = result.valid\n ? `Done: ${result.summary.validFiles}/${result.summary.totalFiles} files valid`\n : `Done: ${result.summary.invalidFiles} invalid files`;\n\n this.log(summary);\n printValidationResults(result);\n\n if (!result.valid) {\n this.exit(EXIT_CODES.ERROR);\n }\n } catch (error) {\n const message = getErrorMessage(error);\n this.error(`${ERROR_MESSAGES.VALIDATION_FAILED}: ${message}`, { exit: EXIT_CODES.ERROR });\n }\n }\n\n private async validatePlugins(\n pluginPath: string | undefined,\n verbose: boolean,\n all: boolean,\n ): Promise<void> {\n const targetPath = pluginPath ? path.resolve(pluginPath) : process.cwd();\n\n if (all) {\n await this.validateAllPluginsInDirectory(targetPath, verbose);\n } else {\n await this.validateSinglePlugin(targetPath, verbose);\n }\n }\n\n private async validateAllPluginsInDirectory(targetPath: string, verbose: boolean): Promise<void> {\n this.log(\"\");\n this.log(`Validating all plugins in: ${targetPath}`);\n this.log(\"\");\n\n try {\n const result = await validateAllPlugins(targetPath);\n\n const summary = result.valid\n ? `Done: ${result.summary.valid}/${result.summary.total} plugins valid`\n : `Done: ${result.summary.invalid} invalid plugins`;\n\n this.log(summary);\n\n this.log(\"\");\n this.log(\" Plugin Validation Summary:\");\n this.log(\" -------------------------\");\n this.log(` Total plugins: ${result.summary.total}`);\n this.log(` Valid: ${result.summary.valid}`);\n this.log(` Invalid: ${result.summary.invalid}`);\n this.log(` With warnings: ${result.summary.withWarnings}`);\n\n for (const { name, result: pluginResult } of result.results) {\n printPluginValidationResult(name, pluginResult, verbose);\n }\n\n if (result.valid) {\n this.log(\"\");\n this.logSuccess(\"All plugins validated successfully\");\n this.log(\"\");\n } else {\n this.log(\"\");\n this.error(ERROR_MESSAGES.VALIDATION_FAILED, { exit: EXIT_CODES.ERROR });\n }\n } catch (error) {\n const message = getErrorMessage(error);\n this.error(`${ERROR_MESSAGES.VALIDATION_FAILED}: ${message}`, { exit: EXIT_CODES.ERROR });\n }\n }\n\n private async validateSinglePlugin(targetPath: string, _verbose: boolean): Promise<void> {\n this.log(\"\");\n this.log(`Validating plugin: ${targetPath}`);\n this.log(\"\");\n\n try {\n const result = await validatePlugin(targetPath);\n\n const summary = result.valid ? \"Done: Plugin is valid\" : \"Done: Plugin has errors\";\n\n this.log(summary);\n\n printPluginValidationResult(path.basename(targetPath), result, true);\n\n if (result.valid && result.warnings.length === 0) {\n this.log(\"\");\n this.logSuccess(\"Plugin validated successfully\");\n this.log(\"\");\n } else if (result.valid) {\n this.log(\"\");\n this.logWarning(\"Plugin valid with warnings\");\n this.log(\"\");\n } else {\n this.log(\"\");\n this.error(ERROR_MESSAGES.VALIDATION_FAILED, { exit: EXIT_CODES.ERROR });\n }\n } catch (error) {\n const message = getErrorMessage(error);\n this.error(`${ERROR_MESSAGES.VALIDATION_FAILED}: ${message}`, { exit: EXIT_CODES.ERROR });\n }\n }\n\n private async validateSkillsSource(source: string): Promise<void> {\n this.log(\"\");\n this.log(`Validating source: ${source}`);\n this.log(\"\");\n\n try {\n const result = await validateSource(source);\n\n this.log(`Checked ${result.skillCount} skill(s)`);\n this.log(\"\");\n\n for (const issue of result.issues) {\n const prefix = issue.severity === \"error\" ? \"ERROR\" : \"WARN\";\n this.log(` [${prefix}] ${issue.file}: ${issue.message}`);\n }\n\n if (result.issues.length > 0) {\n this.log(\"\");\n }\n\n this.log(`Result: ${result.errorCount} error(s), ${result.warningCount} warning(s)`);\n\n if (result.errorCount > 0) {\n this.log(\"\");\n this.error(ERROR_MESSAGES.VALIDATION_FAILED, { exit: EXIT_CODES.ERROR });\n } else if (result.warningCount > 0) {\n this.log(\"\");\n this.logWarning(\"Source valid with warnings\");\n this.log(\"\");\n } else {\n this.log(\"\");\n this.logSuccess(\"Source validated successfully\");\n this.log(\"\");\n }\n } catch (error) {\n const message = getErrorMessage(error);\n this.error(`${ERROR_MESSAGES.VALIDATION_FAILED}: ${message}`, { exit: EXIT_CODES.ERROR });\n }\n }\n}\n","import path from \"path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { glob, readFile, fileExists, directoryExists } from \"../utils/fs\";\nimport { verbose } from \"../utils/logger\";\nimport { SKILL_CATEGORIES_PATH, SKILLS_DIR_PATH, STANDARD_FILES } from \"../consts\";\nimport { metadataValidationSchema, SKILL_ID_PATTERN } from \"./schemas\";\nimport { parseFrontmatter } from \"./loading/loader\";\nimport { loadProjectSourceConfig } from \"./configuration\";\nimport { checkMatrixHealth } from \"./matrix\";\nimport { loadSkillsMatrixFromSource } from \"./loading/source-loader\";\nimport { matrix } from \"./matrix/matrix-provider\";\n\nexport type SourceValidationIssue = {\n severity: \"error\" | \"warning\";\n file: string;\n message: string;\n};\n\nexport type SourceValidationResult = {\n issues: SourceValidationIssue[];\n skillCount: number;\n errorCount: number;\n warningCount: number;\n};\n\n/** Checks if a key uses snake_case (has underscore between lowercase letters) */\nfunction isSnakeCase(key: string): boolean {\n return /[a-z]_[a-z]/.test(key);\n}\n\n/**\n * Validates a skills source repository for metadata correctness.\n *\n * Checks:\n * 1. Every metadata.yaml against the strict validation schema\n * 2. displayName format and directory name consistency\n * 3. category values against known domain-prefixed patterns\n * 4. Cross-references resolve to existing skill IDs (via checkMatrixHealth)\n * 5. camelCase key convention (no snake_case)\n * 7. Every skill directory has both SKILL.md and metadata.yaml\n */\nexport async function validateSource(sourcePath: string): Promise<SourceValidationResult> {\n const issues: SourceValidationIssue[] = [];\n\n const resolvedPath = path.isAbsolute(sourcePath) ? sourcePath : path.resolve(sourcePath);\n\n if (!(await directoryExists(resolvedPath))) {\n issues.push({\n severity: \"error\",\n file: resolvedPath,\n message: \"Source directory does not exist\",\n });\n return buildResult(issues, 0);\n }\n\n const sourceProjectConfig = await loadProjectSourceConfig(resolvedPath);\n const skillsDirRelPath = sourceProjectConfig?.skillsDir ?? SKILLS_DIR_PATH;\n const skillsDir = path.join(resolvedPath, skillsDirRelPath);\n\n if (!(await directoryExists(skillsDir))) {\n issues.push({\n severity: \"error\",\n file: skillsDir,\n message: \"Skills directory does not exist\",\n });\n return buildResult(issues, 0);\n }\n\n // Phase 1: Check every skill directory has both SKILL.md and metadata.yaml\n const skillMdFiles = await glob(`**/${STANDARD_FILES.SKILL_MD}`, skillsDir);\n const metadataFiles = await glob(`**/${STANDARD_FILES.METADATA_YAML}`, skillsDir);\n\n const skillMdDirs = new Set(skillMdFiles.map((f) => path.dirname(f)));\n const metadataDirs = new Set(metadataFiles.map((f) => path.dirname(f)));\n\n // Dirs with SKILL.md but no metadata.yaml\n for (const dir of skillMdDirs) {\n if (!metadataDirs.has(dir)) {\n issues.push({\n severity: \"error\",\n file: path.join(skillsDir, dir),\n message: `Missing ${STANDARD_FILES.METADATA_YAML} — skill directory has ${STANDARD_FILES.SKILL_MD} but no metadata`,\n });\n }\n }\n\n // Dirs with metadata.yaml but no SKILL.md\n for (const dir of metadataDirs) {\n if (!skillMdDirs.has(dir)) {\n issues.push({\n severity: \"error\",\n file: path.join(skillsDir, dir),\n message: `Missing ${STANDARD_FILES.SKILL_MD} — skill directory has ${STANDARD_FILES.METADATA_YAML} but no SKILL.md`,\n });\n }\n }\n\n // Phase 2: Validate each metadata.yaml against strict schema and conventions\n let skillCount = 0;\n for (const metadataFile of metadataFiles) {\n const metadataPath = path.join(skillsDir, metadataFile);\n const skillDir = path.dirname(metadataFile);\n const skillMdPath = path.join(skillsDir, skillDir, STANDARD_FILES.SKILL_MD);\n\n if (!(await fileExists(skillMdPath))) {\n // Already reported above\n continue;\n }\n\n skillCount++;\n const relPath = path.join(skillsDirRelPath, metadataFile);\n\n // Read and parse metadata.yaml\n let rawMetadata: unknown;\n try {\n const metadataContent = await readFile(metadataPath);\n rawMetadata = parseYaml(metadataContent);\n } catch (error) {\n issues.push({\n severity: \"error\",\n file: relPath,\n message: \"Failed to parse YAML\",\n });\n continue;\n }\n\n // Check for snake_case keys\n if (rawMetadata && typeof rawMetadata === \"object\" && !Array.isArray(rawMetadata)) {\n for (const key of Object.keys(rawMetadata as Record<string, unknown>)) {\n if (isSnakeCase(key)) {\n issues.push({\n severity: \"error\",\n file: relPath,\n message: `Key '${key}' uses snake_case — use camelCase instead`,\n });\n }\n }\n }\n\n // Validate against strict metadata schema\n const result = metadataValidationSchema.safeParse(rawMetadata);\n if (!result.success) {\n for (const issue of result.error.issues) {\n const fieldPath = issue.path.join(\".\");\n issues.push({\n severity: \"error\",\n file: relPath,\n message: `${fieldPath}: ${issue.message}`,\n });\n }\n continue;\n }\n\n const metadata = result.data;\n\n // Check displayName matches directory name\n const dirName = path.basename(skillDir);\n if (metadata.displayName !== dirName) {\n issues.push({\n severity: \"warning\",\n file: relPath,\n message: `displayName '${metadata.displayName}' does not match directory name '${dirName}'`,\n });\n }\n\n // Parse SKILL.md frontmatter and check name matches displayName\n const skillMdContent = await readFile(skillMdPath);\n const frontmatter = parseFrontmatter(skillMdContent, skillMdPath);\n if (frontmatter) {\n if (!SKILL_ID_PATTERN.test(frontmatter.name)) {\n issues.push({\n severity: \"warning\",\n file: path.join(skillsDirRelPath, skillDir, STANDARD_FILES.SKILL_MD),\n message: `SKILL.md name '${frontmatter.name}' does not match expected skill ID pattern (domain-category-name)`,\n });\n }\n }\n\n // Check category follows domain-prefixed pattern\n if (\n metadata.category &&\n !/^(web|api|cli|mobile|infra|meta|security|shared)-.+$/.test(metadata.category)\n ) {\n issues.push({\n severity: \"warning\",\n file: relPath,\n message: `Category '${metadata.category}' does not follow domain-prefixed pattern (e.g., 'web-framework', 'api-database')`,\n });\n }\n }\n\n // Phase 3: Cross-reference validation via matrix health check\n try {\n await loadSkillsMatrixFromSource({ sourceFlag: resolvedPath, skipExtraSources: true });\n const healthIssues = checkMatrixHealth(matrix);\n\n for (const healthIssue of healthIssues) {\n issues.push({\n severity: healthIssue.severity,\n file: SKILL_CATEGORIES_PATH,\n message: healthIssue.details,\n });\n }\n } catch (error) {\n issues.push({\n severity: \"warning\",\n file: SKILL_CATEGORIES_PATH,\n message: `Cross-reference validation skipped: failed to load categories/rules`,\n });\n }\n\n return buildResult(issues, skillCount);\n}\n\nfunction buildResult(issues: SourceValidationIssue[], skillCount: number): SourceValidationResult {\n const errorCount = issues.filter((i) => i.severity === \"error\").length;\n const warningCount = issues.filter((i) => i.severity === \"warning\").length;\n return { issues, skillCount, errorCount, warningCount };\n}\n"],"mappings":"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","names":["path","path"]}
1
+ {"version":3,"sources":["../../src/cli/commands/validate.ts","../../src/cli/lib/source-validator.ts"],"sourcesContent":["import { Args, Flags } from \"@oclif/core\";\nimport path from \"path\";\nimport { BaseCommand } from \"../base-command.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { ERROR_MESSAGES } from \"../utils/messages.js\";\nimport { validateAllSchemas, printValidationResults } from \"../lib/schema-validator.js\";\nimport {\n validatePlugin,\n validateAllPlugins,\n printPluginValidationResult,\n} from \"../lib/plugins/index.js\";\nimport { validateSource } from \"../lib/source-validator.js\";\nimport { setVerbose } from \"../utils/logger.js\";\n\nexport default class Validate extends BaseCommand {\n static summary =\n \"Validate YAML files against schemas, validate compiled plugins, or validate a skills source\";\n static description =\n \"Validates skill/agent YAML files against JSON schemas, validates compiled plugin structure and content, \" +\n \"or validates a skills source repository for metadata correctness. \" +\n \"Without arguments, validates all YAML files in the current directory against their schemas. \" +\n \"With --source, validates all skills in the source for schema compliance, cross-references, and conventions. \" +\n \"With a path argument or --plugins flag, validates plugin(s) instead.\";\n\n static examples = [\n {\n description: \"Validate all YAML schemas\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n {\n description: \"Validate a skills source repository\",\n command: \"<%= config.bin %> <%= command.id %> --source .\",\n },\n {\n description: \"Validate a remote skills source\",\n command: \"<%= config.bin %> <%= command.id %> --source github:acme-corp/skills\",\n },\n {\n description: \"Validate a specific plugin\",\n command: \"<%= config.bin %> <%= command.id %> ./path/to/plugin\",\n },\n {\n description: \"Validate all plugins in a directory\",\n command: \"<%= config.bin %> <%= command.id %> ./plugins --all\",\n },\n {\n description: \"Validate plugins with verbose output\",\n command: \"<%= config.bin %> <%= command.id %> --plugins --verbose\",\n },\n ];\n\n static args = {\n path: Args.string({\n description: \"Path to plugin or plugins directory to validate\",\n required: false,\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Enable verbose logging\",\n default: false,\n }),\n all: Flags.boolean({\n char: \"a\",\n description: \"Validate all plugins in directory\",\n default: false,\n }),\n plugins: Flags.boolean({\n char: \"p\",\n description: \"Validate plugins instead of schemas\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(Validate);\n\n if (flags.source) {\n setVerbose(flags.verbose);\n await this.validateSkillsSource(flags.source);\n } else if (args.path || flags.plugins) {\n await this.validatePlugins(args.path, flags.verbose, flags.all);\n } else {\n await this.validateSchemas();\n }\n }\n\n private async validateSchemas(): Promise<void> {\n this.log(\"\");\n this.log(\"Validating all schemas\");\n this.log(\"\");\n\n try {\n const result = await validateAllSchemas();\n\n const summary = result.valid\n ? `Done: ${result.summary.validFiles}/${result.summary.totalFiles} files valid`\n : `Done: ${result.summary.invalidFiles} invalid files`;\n\n this.log(summary);\n printValidationResults(result);\n\n if (!result.valid) {\n this.exit(EXIT_CODES.ERROR);\n }\n } catch (error) {\n const message = getErrorMessage(error);\n this.error(`${ERROR_MESSAGES.VALIDATION_FAILED}: ${message}`, { exit: EXIT_CODES.ERROR });\n }\n }\n\n private async validatePlugins(\n pluginPath: string | undefined,\n verbose: boolean,\n all: boolean,\n ): Promise<void> {\n const targetPath = pluginPath ? path.resolve(pluginPath) : process.cwd();\n\n if (all) {\n await this.validateAllPluginsInDirectory(targetPath, verbose);\n } else {\n await this.validateSinglePlugin(targetPath, verbose);\n }\n }\n\n private async validateAllPluginsInDirectory(targetPath: string, verbose: boolean): Promise<void> {\n this.log(\"\");\n this.log(`Validating all plugins in: ${targetPath}`);\n this.log(\"\");\n\n try {\n const result = await validateAllPlugins(targetPath);\n\n const summary = result.valid\n ? `Done: ${result.summary.valid}/${result.summary.total} plugins valid`\n : `Done: ${result.summary.invalid} invalid plugins`;\n\n this.log(summary);\n\n this.log(\"\");\n this.log(\" Plugin Validation Summary:\");\n this.log(\" -------------------------\");\n this.log(` Total plugins: ${result.summary.total}`);\n this.log(` Valid: ${result.summary.valid}`);\n this.log(` Invalid: ${result.summary.invalid}`);\n this.log(` With warnings: ${result.summary.withWarnings}`);\n\n for (const { name, result: pluginResult } of result.results) {\n printPluginValidationResult(name, pluginResult, verbose);\n }\n\n if (result.valid) {\n this.log(\"\");\n this.logSuccess(\"All plugins validated successfully\");\n this.log(\"\");\n } else {\n this.log(\"\");\n this.error(ERROR_MESSAGES.VALIDATION_FAILED, { exit: EXIT_CODES.ERROR });\n }\n } catch (error) {\n const message = getErrorMessage(error);\n this.error(`${ERROR_MESSAGES.VALIDATION_FAILED}: ${message}`, { exit: EXIT_CODES.ERROR });\n }\n }\n\n private async validateSinglePlugin(targetPath: string, _verbose: boolean): Promise<void> {\n this.log(\"\");\n this.log(`Validating plugin: ${targetPath}`);\n this.log(\"\");\n\n try {\n const result = await validatePlugin(targetPath);\n\n const summary = result.valid ? \"Done: Plugin is valid\" : \"Done: Plugin has errors\";\n\n this.log(summary);\n\n printPluginValidationResult(path.basename(targetPath), result, true);\n\n if (result.valid && result.warnings.length === 0) {\n this.log(\"\");\n this.logSuccess(\"Plugin validated successfully\");\n this.log(\"\");\n } else if (result.valid) {\n this.log(\"\");\n this.logWarning(\"Plugin valid with warnings\");\n this.log(\"\");\n } else {\n this.log(\"\");\n this.error(ERROR_MESSAGES.VALIDATION_FAILED, { exit: EXIT_CODES.ERROR });\n }\n } catch (error) {\n const message = getErrorMessage(error);\n this.error(`${ERROR_MESSAGES.VALIDATION_FAILED}: ${message}`, { exit: EXIT_CODES.ERROR });\n }\n }\n\n private async validateSkillsSource(source: string): Promise<void> {\n this.log(\"\");\n this.log(`Validating source: ${source}`);\n this.log(\"\");\n\n try {\n const result = await validateSource(source);\n\n this.log(`Checked ${result.skillCount} skill(s)`);\n this.log(\"\");\n\n for (const issue of result.issues) {\n const prefix = issue.severity === \"error\" ? \"ERROR\" : \"WARN\";\n this.log(` [${prefix}] ${issue.file}: ${issue.message}`);\n }\n\n if (result.issues.length > 0) {\n this.log(\"\");\n }\n\n this.log(`Result: ${result.errorCount} error(s), ${result.warningCount} warning(s)`);\n\n if (result.errorCount > 0) {\n this.log(\"\");\n this.error(ERROR_MESSAGES.VALIDATION_FAILED, { exit: EXIT_CODES.ERROR });\n } else if (result.warningCount > 0) {\n this.log(\"\");\n this.logWarning(\"Source valid with warnings\");\n this.log(\"\");\n } else {\n this.log(\"\");\n this.logSuccess(\"Source validated successfully\");\n this.log(\"\");\n }\n } catch (error) {\n const message = getErrorMessage(error);\n this.error(`${ERROR_MESSAGES.VALIDATION_FAILED}: ${message}`, { exit: EXIT_CODES.ERROR });\n }\n }\n}\n","import path from \"path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { glob, readFile, fileExists, directoryExists } from \"../utils/fs\";\nimport { verbose } from \"../utils/logger\";\nimport { SKILL_CATEGORIES_PATH, SKILLS_DIR_PATH, STANDARD_FILES } from \"../consts\";\nimport { metadataValidationSchema, SKILL_ID_PATTERN } from \"./schemas\";\nimport { parseFrontmatter } from \"./loading/loader\";\nimport { loadProjectSourceConfig } from \"./configuration\";\nimport { checkMatrixHealth } from \"./matrix\";\nimport { loadSkillsMatrixFromSource } from \"./loading/source-loader\";\nimport { matrix } from \"./matrix/matrix-provider\";\n\nexport type SourceValidationIssue = {\n severity: \"error\" | \"warning\";\n file: string;\n message: string;\n};\n\nexport type SourceValidationResult = {\n issues: SourceValidationIssue[];\n skillCount: number;\n errorCount: number;\n warningCount: number;\n};\n\n/** Checks if a key uses snake_case (has underscore between lowercase letters) */\nexport function isSnakeCase(key: string): boolean {\n return /[a-z]_[a-z]/.test(key);\n}\n\n/**\n * Validates metadata conventions (pure function, no I/O).\n *\n * Checks:\n * - snake_case keys (should be camelCase)\n * - displayName/directory name mismatch\n * - category follows domain-prefixed pattern\n */\nexport function validateMetadataConventions(\n rawMetadata: unknown,\n validatedMetadata: { displayName: string; category: string },\n relPath: string,\n dirName: string,\n): SourceValidationIssue[] {\n const issues: SourceValidationIssue[] = [];\n\n // Check for snake_case keys\n if (rawMetadata && typeof rawMetadata === \"object\" && !Array.isArray(rawMetadata)) {\n for (const key of Object.keys(rawMetadata as Record<string, unknown>)) {\n if (isSnakeCase(key)) {\n issues.push({\n severity: \"error\",\n file: relPath,\n message: `Key '${key}' uses snake_case — use camelCase instead`,\n });\n }\n }\n }\n\n // Check displayName matches directory name\n if (validatedMetadata.displayName !== dirName) {\n issues.push({\n severity: \"warning\",\n file: relPath,\n message: `displayName '${validatedMetadata.displayName}' does not match directory name '${dirName}'`,\n });\n }\n\n // Check category follows domain-prefixed pattern\n if (\n validatedMetadata.category &&\n !/^(web|api|cli|mobile|infra|meta|security|shared)-.+$/.test(validatedMetadata.category)\n ) {\n issues.push({\n severity: \"warning\",\n file: relPath,\n message: `Category '${validatedMetadata.category}' does not follow domain-prefixed pattern (e.g., 'web-framework', 'api-database')`,\n });\n }\n\n return issues;\n}\n\n/**\n * Finds missing SKILL.md / metadata.yaml pairs (pure function, no I/O).\n *\n * Returns issues for:\n * - Directories with SKILL.md but no metadata.yaml\n * - Directories with metadata.yaml but no SKILL.md\n */\nexport function validateSkillFilePairs(\n skillMdDirs: Set<string>,\n metadataDirs: Set<string>,\n skillsDir: string,\n): SourceValidationIssue[] {\n const issues: SourceValidationIssue[] = [];\n\n // Dirs with SKILL.md but no metadata.yaml\n for (const dir of skillMdDirs) {\n if (!metadataDirs.has(dir)) {\n issues.push({\n severity: \"error\",\n file: path.join(skillsDir, dir),\n message: `Missing ${STANDARD_FILES.METADATA_YAML} — skill directory has ${STANDARD_FILES.SKILL_MD} but no metadata`,\n });\n }\n }\n\n // Dirs with metadata.yaml but no SKILL.md\n for (const dir of metadataDirs) {\n if (!skillMdDirs.has(dir)) {\n issues.push({\n severity: \"error\",\n file: path.join(skillsDir, dir),\n message: `Missing ${STANDARD_FILES.SKILL_MD} — skill directory has ${STANDARD_FILES.METADATA_YAML} but no SKILL.md`,\n });\n }\n }\n\n return issues;\n}\n\n/**\n * Validates a skills source repository for metadata correctness.\n *\n * Checks:\n * 1. Every metadata.yaml against the strict validation schema\n * 2. displayName format and directory name consistency\n * 3. category values against known domain-prefixed patterns\n * 4. Cross-references resolve to existing skill IDs (via checkMatrixHealth)\n * 5. camelCase key convention (no snake_case)\n * 7. Every skill directory has both SKILL.md and metadata.yaml\n */\nexport async function validateSource(sourcePath: string): Promise<SourceValidationResult> {\n const issues: SourceValidationIssue[] = [];\n\n const resolvedPath = path.isAbsolute(sourcePath) ? sourcePath : path.resolve(sourcePath);\n\n if (!(await directoryExists(resolvedPath))) {\n issues.push({\n severity: \"error\",\n file: resolvedPath,\n message: \"Source directory does not exist\",\n });\n return buildResult(issues, 0);\n }\n\n const sourceProjectConfig = await loadProjectSourceConfig(resolvedPath);\n const skillsDirRelPath = sourceProjectConfig?.skillsDir ?? SKILLS_DIR_PATH;\n const skillsDir = path.join(resolvedPath, skillsDirRelPath);\n\n if (!(await directoryExists(skillsDir))) {\n issues.push({\n severity: \"error\",\n file: skillsDir,\n message: \"Skills directory does not exist\",\n });\n return buildResult(issues, 0);\n }\n\n // Phase 1: Check every skill directory has both SKILL.md and metadata.yaml\n const skillMdFiles = await glob(`**/${STANDARD_FILES.SKILL_MD}`, skillsDir);\n const metadataFiles = await glob(`**/${STANDARD_FILES.METADATA_YAML}`, skillsDir);\n\n const skillMdDirs = new Set(skillMdFiles.map((f) => path.dirname(f)));\n const metadataDirs = new Set(metadataFiles.map((f) => path.dirname(f)));\n\n issues.push(...validateSkillFilePairs(skillMdDirs, metadataDirs, skillsDir));\n\n // Phase 2: Validate each metadata.yaml against strict schema and conventions\n let skillCount = 0;\n for (const metadataFile of metadataFiles) {\n const metadataPath = path.join(skillsDir, metadataFile);\n const skillDir = path.dirname(metadataFile);\n const skillMdPath = path.join(skillsDir, skillDir, STANDARD_FILES.SKILL_MD);\n\n if (!(await fileExists(skillMdPath))) {\n // Already reported above\n continue;\n }\n\n skillCount++;\n const relPath = path.join(skillsDirRelPath, metadataFile);\n\n // Read and parse metadata.yaml\n let rawMetadata: unknown;\n try {\n const metadataContent = await readFile(metadataPath);\n rawMetadata = parseYaml(metadataContent);\n } catch (error) {\n issues.push({\n severity: \"error\",\n file: relPath,\n message: \"Failed to parse YAML\",\n });\n continue;\n }\n\n // Validate against strict metadata schema\n const result = metadataValidationSchema.safeParse(rawMetadata);\n if (!result.success) {\n // Check for snake_case keys even on schema failure (useful diagnostics)\n issues.push(\n ...validateMetadataConventions(\n rawMetadata,\n { displayName: \"\", category: \"\" },\n relPath,\n path.basename(skillDir),\n ).filter((i) => i.message.includes(\"snake_case\")),\n );\n\n for (const issue of result.error.issues) {\n const fieldPath = issue.path.join(\".\");\n issues.push({\n severity: \"error\",\n file: relPath,\n message: `${fieldPath}: ${issue.message}`,\n });\n }\n continue;\n }\n\n const metadata = result.data;\n const dirName = path.basename(skillDir);\n\n issues.push(...validateMetadataConventions(rawMetadata, metadata, relPath, dirName));\n\n // Parse SKILL.md frontmatter and check name matches displayName\n const skillMdContent = await readFile(skillMdPath);\n const frontmatter = parseFrontmatter(skillMdContent, skillMdPath);\n if (frontmatter) {\n if (!SKILL_ID_PATTERN.test(frontmatter.name)) {\n issues.push({\n severity: \"warning\",\n file: path.join(skillsDirRelPath, skillDir, STANDARD_FILES.SKILL_MD),\n message: `SKILL.md name '${frontmatter.name}' does not match expected skill ID pattern (domain-category-name)`,\n });\n }\n }\n }\n\n // Phase 3: Cross-reference validation via matrix health check\n try {\n await loadSkillsMatrixFromSource({ sourceFlag: resolvedPath, skipExtraSources: true });\n const healthIssues = checkMatrixHealth(matrix);\n\n for (const healthIssue of healthIssues) {\n issues.push({\n severity: healthIssue.severity,\n file: SKILL_CATEGORIES_PATH,\n message: healthIssue.details,\n });\n }\n } catch (error) {\n issues.push({\n severity: \"warning\",\n file: SKILL_CATEGORIES_PATH,\n message: `Cross-reference validation skipped: failed to load categories/rules`,\n });\n }\n\n return buildResult(issues, skillCount);\n}\n\nfunction buildResult(issues: SourceValidationIssue[], skillCount: number): SourceValidationResult {\n const errorCount = issues.filter((i) => i.severity === \"error\").length;\n const warningCount = issues.filter((i) => i.severity === \"warning\").length;\n return { issues, skillCount, errorCount, warningCount };\n}\n"],"mappings":"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","names":["path","path"]}
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SkillSearch
4
- } from "../../chunk-MVYJVKVT.js";
4
+ } from "../../chunk-HT5KOOUQ.js";
5
5
  import "../../chunk-T5DJCIUP.js";
6
6
  import "../../chunk-U3IGFMCY.js";
7
- import "../../chunk-6VIOO74O.js";
7
+ import "../../chunk-CBYRFAUN.js";
8
8
  import "../../chunk-EGMQ3SXN.js";
9
9
  import "../../chunk-DHET7RCE.js";
10
10
  export {
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CategoryGrid
4
- } from "../../chunk-JZPQI7YI.js";
4
+ } from "../../chunk-X6LXHVA6.js";
5
5
  import "../../chunk-GG4BSB6S.js";
6
6
  import "../../chunk-AUNBGZS4.js";
7
- import "../../chunk-6VIOO74O.js";
7
+ import "../../chunk-CBYRFAUN.js";
8
8
  import "../../chunk-NG2GGK6P.js";
9
9
  import "../../chunk-EGMQ3SXN.js";
10
10
  import "../../chunk-DHET7RCE.js";
@@ -27,12 +27,12 @@ import {
27
27
  } from "../../chunk-XY3XDVMI.js";
28
28
  import {
29
29
  CategoryGrid
30
- } from "../../chunk-JZPQI7YI.js";
30
+ } from "../../chunk-X6LXHVA6.js";
31
31
  import "../../chunk-GG4BSB6S.js";
32
32
  import "../../chunk-AUNBGZS4.js";
33
- import "../../chunk-GFTBHBRQ.js";
34
- import "../../chunk-6VIOO74O.js";
35
- import "../../chunk-UKYWXIDT.js";
33
+ import "../../chunk-E3MF6GGS.js";
34
+ import "../../chunk-CBYRFAUN.js";
35
+ import "../../chunk-FVMYBN5K.js";
36
36
  import "../../chunk-RRBWNEG3.js";
37
37
  import {
38
38
  BUILT_IN_MATRIX,
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  DomainSelection
4
- } from "../../chunk-VMTZ5WC5.js";
4
+ } from "../../chunk-HJY4354Y.js";
5
5
  import "../../chunk-LVNNP7T4.js";
6
6
  import "../../chunk-OV5UJWS5.js";
7
7
  import "../../chunk-XMLCXRTS.js";
8
8
  import "../../chunk-AQYAVLZK.js";
9
9
  import "../../chunk-AUNBGZS4.js";
10
- import "../../chunk-GFTBHBRQ.js";
11
- import "../../chunk-UKYWXIDT.js";
10
+ import "../../chunk-E3MF6GGS.js";
11
+ import "../../chunk-FVMYBN5K.js";
12
12
  import "../../chunk-RRBWNEG3.js";
13
13
  import "../../chunk-NG2GGK6P.js";
14
14
  import "../../chunk-4CRWKTNQ.js";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  HelpModal
4
- } from "../../chunk-KYULKBFC.js";
5
- import "../../chunk-6VIOO74O.js";
4
+ } from "../../chunk-NA6I5P5P.js";
5
+ import "../../chunk-CBYRFAUN.js";
6
6
  import "../../chunk-EGMQ3SXN.js";
7
7
  import "../../chunk-DHET7RCE.js";
8
8
  export {
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SearchModal
4
- } from "../../chunk-2MHSOPIU.js";
4
+ } from "../../chunk-UFKDY45I.js";
5
5
  import "../../chunk-WF5PMBIR.js";
6
6
  import "../../chunk-KUV24B5M.js";
7
- import "../../chunk-6VIOO74O.js";
7
+ import "../../chunk-CBYRFAUN.js";
8
8
  import "../../chunk-EGMQ3SXN.js";
9
9
  import "../../chunk-DHET7RCE.js";
10
10
  export {
@@ -20,10 +20,10 @@ import {
20
20
  } from "../../chunk-XY3XDVMI.js";
21
21
  import {
22
22
  SearchModal
23
- } from "../../chunk-2MHSOPIU.js";
23
+ } from "../../chunk-UFKDY45I.js";
24
24
  import "../../chunk-WF5PMBIR.js";
25
25
  import "../../chunk-KUV24B5M.js";
26
- import "../../chunk-6VIOO74O.js";
26
+ import "../../chunk-CBYRFAUN.js";
27
27
  import "../../chunk-EGMQ3SXN.js";
28
28
  import {
29
29
  init_esm_shims
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SourceGrid
4
- } from "../../chunk-COZ75NET.js";
4
+ } from "../../chunk-TPXDHJDB.js";
5
5
  import "../../chunk-7SOPVGDV.js";
6
- import "../../chunk-2MHSOPIU.js";
6
+ import "../../chunk-UFKDY45I.js";
7
7
  import "../../chunk-GG4BSB6S.js";
8
8
  import "../../chunk-AUNBGZS4.js";
9
9
  import "../../chunk-WF5PMBIR.js";
10
10
  import "../../chunk-KUV24B5M.js";
11
- import "../../chunk-6VIOO74O.js";
11
+ import "../../chunk-CBYRFAUN.js";
12
12
  import "../../chunk-NG2GGK6P.js";
13
13
  import "../../chunk-EGMQ3SXN.js";
14
14
  import "../../chunk-DHET7RCE.js";
@@ -32,16 +32,16 @@ import {
32
32
  } from "../../chunk-XY3XDVMI.js";
33
33
  import {
34
34
  SourceGrid
35
- } from "../../chunk-COZ75NET.js";
35
+ } from "../../chunk-TPXDHJDB.js";
36
36
  import "../../chunk-7SOPVGDV.js";
37
- import "../../chunk-2MHSOPIU.js";
37
+ import "../../chunk-UFKDY45I.js";
38
38
  import "../../chunk-GG4BSB6S.js";
39
39
  import "../../chunk-AUNBGZS4.js";
40
40
  import "../../chunk-WF5PMBIR.js";
41
41
  import "../../chunk-KUV24B5M.js";
42
- import "../../chunk-GFTBHBRQ.js";
43
- import "../../chunk-6VIOO74O.js";
44
- import "../../chunk-UKYWXIDT.js";
42
+ import "../../chunk-E3MF6GGS.js";
43
+ import "../../chunk-CBYRFAUN.js";
44
+ import "../../chunk-FVMYBN5K.js";
45
45
  import "../../chunk-RRBWNEG3.js";
46
46
  import {
47
47
  BUILT_IN_MATRIX,
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StackSelection
4
- } from "../../chunk-MOWZ2FLG.js";
4
+ } from "../../chunk-Q53GBFTO.js";
5
5
  import "../../chunk-MWGDG4QN.js";
6
6
  import "../../chunk-AUNBGZS4.js";
7
- import "../../chunk-GFTBHBRQ.js";
8
- import "../../chunk-UKYWXIDT.js";
7
+ import "../../chunk-E3MF6GGS.js";
8
+ import "../../chunk-FVMYBN5K.js";
9
9
  import "../../chunk-RRBWNEG3.js";
10
10
  import "../../chunk-NG2GGK6P.js";
11
11
  import "../../chunk-4CRWKTNQ.js";
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StepAgents
4
- } from "../../chunk-STC7IEVI.js";
4
+ } from "../../chunk-BQW4ONJE.js";
5
5
  import "../../chunk-K77I4XGL.js";
6
6
  import "../../chunk-LVNNP7T4.js";
7
7
  import "../../chunk-XMLCXRTS.js";
8
8
  import "../../chunk-AQYAVLZK.js";
9
9
  import "../../chunk-AUNBGZS4.js";
10
- import "../../chunk-GFTBHBRQ.js";
11
- import "../../chunk-UKYWXIDT.js";
10
+ import "../../chunk-E3MF6GGS.js";
11
+ import "../../chunk-FVMYBN5K.js";
12
12
  import "../../chunk-RRBWNEG3.js";
13
13
  import "../../chunk-NG2GGK6P.js";
14
14
  import "../../chunk-4CRWKTNQ.js";
@@ -25,7 +25,7 @@ import {
25
25
  } from "../../chunk-XY3XDVMI.js";
26
26
  import {
27
27
  StepAgents
28
- } from "../../chunk-STC7IEVI.js";
28
+ } from "../../chunk-BQW4ONJE.js";
29
29
  import "../../chunk-K77I4XGL.js";
30
30
  import "../../chunk-LVNNP7T4.js";
31
31
  import "../../chunk-XMLCXRTS.js";
@@ -33,8 +33,8 @@ import "../../chunk-AQYAVLZK.js";
33
33
  import "../../chunk-AUNBGZS4.js";
34
34
  import {
35
35
  useWizardStore
36
- } from "../../chunk-GFTBHBRQ.js";
37
- import "../../chunk-UKYWXIDT.js";
36
+ } from "../../chunk-E3MF6GGS.js";
37
+ import "../../chunk-FVMYBN5K.js";
38
38
  import "../../chunk-RRBWNEG3.js";
39
39
  import {
40
40
  initializeMatrix
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StepBuild
4
- } from "../../chunk-2GD57LQE.js";
4
+ } from "../../chunk-RBR355UI.js";
5
5
  import "../../chunk-K77I4XGL.js";
6
- import "../../chunk-JZPQI7YI.js";
6
+ import "../../chunk-X6LXHVA6.js";
7
7
  import "../../chunk-GG4BSB6S.js";
8
8
  import "../../chunk-LVNNP7T4.js";
9
9
  import "../../chunk-AQYAVLZK.js";
10
10
  import "../../chunk-AUNBGZS4.js";
11
- import "../../chunk-GFTBHBRQ.js";
12
- import "../../chunk-6VIOO74O.js";
13
- import "../../chunk-UKYWXIDT.js";
11
+ import "../../chunk-E3MF6GGS.js";
12
+ import "../../chunk-CBYRFAUN.js";
13
+ import "../../chunk-FVMYBN5K.js";
14
14
  import "../../chunk-RRBWNEG3.js";
15
15
  import "../../chunk-NG2GGK6P.js";
16
16
  import "../../chunk-4CRWKTNQ.js";
@@ -33,18 +33,18 @@ import {
33
33
  import {
34
34
  StepBuild,
35
35
  validateBuildStep
36
- } from "../../chunk-2GD57LQE.js";
36
+ } from "../../chunk-RBR355UI.js";
37
37
  import "../../chunk-K77I4XGL.js";
38
- import "../../chunk-JZPQI7YI.js";
38
+ import "../../chunk-X6LXHVA6.js";
39
39
  import "../../chunk-GG4BSB6S.js";
40
40
  import {
41
41
  orderDomains
42
42
  } from "../../chunk-LVNNP7T4.js";
43
43
  import "../../chunk-AQYAVLZK.js";
44
44
  import "../../chunk-AUNBGZS4.js";
45
- import "../../chunk-GFTBHBRQ.js";
46
- import "../../chunk-6VIOO74O.js";
47
- import "../../chunk-UKYWXIDT.js";
45
+ import "../../chunk-E3MF6GGS.js";
46
+ import "../../chunk-CBYRFAUN.js";
47
+ import "../../chunk-FVMYBN5K.js";
48
48
  import "../../chunk-RRBWNEG3.js";
49
49
  import {
50
50
  initializeMatrix
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StepConfirm
4
- } from "../../chunk-CJSCCLT5.js";
4
+ } from "../../chunk-PN65K3LH.js";
5
5
  import "../../chunk-LVNNP7T4.js";
6
6
  import "../../chunk-AQYAVLZK.js";
7
- import "../../chunk-6VIOO74O.js";
7
+ import "../../chunk-CBYRFAUN.js";
8
8
  import "../../chunk-NG2GGK6P.js";
9
9
  import "../../chunk-SRIH4U5Y.js";
10
10
  import "../../chunk-EGMQ3SXN.js";
@@ -20,12 +20,12 @@ import {
20
20
  } from "../../chunk-XY3XDVMI.js";
21
21
  import {
22
22
  StepConfirm
23
- } from "../../chunk-CJSCCLT5.js";
23
+ } from "../../chunk-PN65K3LH.js";
24
24
  import "../../chunk-LVNNP7T4.js";
25
25
  import "../../chunk-AQYAVLZK.js";
26
- import "../../chunk-GFTBHBRQ.js";
27
- import "../../chunk-6VIOO74O.js";
28
- import "../../chunk-UKYWXIDT.js";
26
+ import "../../chunk-E3MF6GGS.js";
27
+ import "../../chunk-CBYRFAUN.js";
28
+ import "../../chunk-FVMYBN5K.js";
29
29
  import "../../chunk-RRBWNEG3.js";
30
30
  import "../../chunk-NG2GGK6P.js";
31
31
  import "../../chunk-4CRWKTNQ.js";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StepRefine
4
- } from "../../chunk-BKTPEATV.js";
5
- import "../../chunk-6VIOO74O.js";
4
+ } from "../../chunk-F7LOH754.js";
5
+ import "../../chunk-CBYRFAUN.js";
6
6
  import "../../chunk-EGMQ3SXN.js";
7
7
  import "../../chunk-DHET7RCE.js";
8
8
  export {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StepRefine
4
- } from "../../chunk-BKTPEATV.js";
4
+ } from "../../chunk-F7LOH754.js";
5
5
  import {
6
6
  ARROW_DOWN,
7
7
  ARROW_UP,
@@ -21,7 +21,7 @@ import {
21
21
  it,
22
22
  vi
23
23
  } from "../../chunk-XY3XDVMI.js";
24
- import "../../chunk-6VIOO74O.js";
24
+ import "../../chunk-CBYRFAUN.js";
25
25
  import {
26
26
  DEFAULT_BRANDING
27
27
  } from "../../chunk-EGMQ3SXN.js";
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StepSettings
4
- } from "../../chunk-2ZQKORJI.js";
4
+ } from "../../chunk-TUGXTCGX.js";
5
5
  import "../../chunk-7SOPVGDV.js";
6
6
  import "../../chunk-XMLCXRTS.js";
7
7
  import "../../chunk-AQYAVLZK.js";
8
8
  import "../../chunk-AUNBGZS4.js";
9
9
  import "../../chunk-KUV24B5M.js";
10
10
  import "../../chunk-U3IGFMCY.js";
11
- import "../../chunk-6VIOO74O.js";
12
- import "../../chunk-UKYWXIDT.js";
11
+ import "../../chunk-CBYRFAUN.js";
12
+ import "../../chunk-FVMYBN5K.js";
13
13
  import "../../chunk-RRBWNEG3.js";
14
14
  import "../../chunk-NG2GGK6P.js";
15
15
  import "../../chunk-4CRWKTNQ.js";