{"record":{"id":"fa5cd7abd51d1df8","repo":"microsoft/aspire","slug":"aspire-skills-bundle-manifest-must-specify-supports","errorCode":null,"errorMessage":"Aspire skills bundle manifest must specify supports.aspireCli.","messagePattern":"Aspire skills bundle manifest must specify supports\\.aspireCli\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Cli/Agents/AspireSkills/AspireSkillsBundleProvider.cs","lineNumber":635,"sourceCode":"            if (!string.IsNullOrEmpty(targetFileDirectory))\n            {\n                Directory.CreateDirectory(targetFileDirectory);\n            }\n\n            File.Copy(sourceFile, targetFile, overwrite: true);\n        }\n    }\n\n    private static void ValidateCompatibility(SkillBundleSupports? supports, string currentCliVersion, string currentSdkVersion)\n    {\n        if (supports is null)\n        {\n            throw new InvalidOperationException(\"Aspire skills bundle manifest must specify supported Aspire versions.\");\n        }\n\n        if (string.IsNullOrWhiteSpace(supports.AspireCli))\n        {\n            throw new InvalidOperationException(\"Aspire skills bundle manifest must specify supports.aspireCli.\");\n        }\n\n        if (!IsVersionInRange(currentCliVersion, supports.AspireCli))\n        {\n            throw new InvalidOperationException(string.Format(\n                CultureInfo.InvariantCulture,\n                \"Aspire skills bundle supports Aspire CLI versions '{0}', but the current CLI version is '{1}'.\",\n                supports.AspireCli,\n                currentCliVersion));\n        }\n\n        if (!string.IsNullOrWhiteSpace(supports.AspireSdk) &&\n            !IsVersionInRange(currentSdkVersion, supports.AspireSdk))\n        {\n            throw new InvalidOperationException(string.Format(\n                CultureInfo.InvariantCulture,\n                \"Aspire skills bundle supports Aspire SDK versions '{0}', but the current SDK version is '{1}'.\",\n                supports.AspireSdk,","sourceCodeStart":617,"sourceCodeEnd":653,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Cli/Agents/AspireSkills/AspireSkillsBundleProvider.cs#L617-L653","documentation":"Even when a supports object exists, ValidateCompatibility requires the supports.aspireCli field to be a non-empty version range string. A missing, null, or whitespace-only aspireCli value throws this error because CLI compatibility cannot be evaluated without it.","triggerScenarios":"skill-manifest.json contains supports but omits aspireCli or sets it to \"\"/null; triggered from CreateBundle during bundle installation.","commonSituations":"Authors filling in supports.aspireSdk but forgetting aspireCli, JSON serialization dropping an empty field, or hand-editing the manifest and deleting the value.","solutions":["Set supports.aspireCli to a valid semver range such as \">=9.0.0\" in skill-manifest.json","Republish the bundle with the corrected manifest","Pick a different bundle whose manifest declares CLI support"],"exampleFix":"// before\n\"supports\": { \"aspireSdk\": \">=9.0.0\" }\n// after\n\"supports\": { \"aspireCli\": \">=9.4.0\", \"aspireSdk\": \">=9.0.0\" }","handlingStrategy":"validation","validationCode":"if (string.IsNullOrWhiteSpace(manifest.Supports.AspireCli))\n    throw new InvalidOperationException(\"skill-manifest.json supports.aspireCli must be a non-empty version range.\");","typeGuard":"bool HasCliRange(SkillBundleSupports? s) => !string.IsNullOrWhiteSpace(s?.AspireCli);","tryCatchPattern":"try\n{\n    await installer.InstallAsync(bundleRef);\n}\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"must specify supports.aspireCli\"))\n{\n    logger.LogError(ex, \"Bundle manifest is missing supports.aspireCli; fix the manifest and republish.\");\n}","preventionTips":["Always set supports.aspireCli alongside any supports.aspireSdk value","Add a schema/lint step that rejects manifests with empty supports fields","Treat aspireCli as required in your bundle authoring templates"],"tags":["cli","skills-bundle","manifest-validation","versioning"],"backgroundTag":"missing-required-config-field","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}