diff --git a/eng/clean-materialized-plugins.mjs b/eng/clean-materialized-plugins.mjs index 0cd2b12a..9379d78a 100644 --- a/eng/clean-materialized-plugins.mjs +++ b/eng/clean-materialized-plugins.mjs @@ -42,6 +42,14 @@ export function restoreManifestFromMaterializedFiles(pluginPath) { let changed = false; for (const [field, spec] of Object.entries(MATERIALIZED_SPECS)) { + if (Array.isArray(plugin[field])) { + const sortedEntries = sortPluginEntries(plugin[field]); + if (!arraysEqual(plugin[field], sortedEntries)) { + plugin[field] = sortedEntries; + changed = true; + } + } + const materializedPath = path.join(pluginPath, spec.path); if (!fs.existsSync(materializedPath) || !fs.statSync(materializedPath).isDirectory()) { continue; @@ -132,6 +140,10 @@ function arraysEqual(left, right) { return left.every((value, index) => value === right[index]); } +function sortPluginEntries(entries) { + return [...entries].sort((left, right) => left.localeCompare(right)); +} + function toPosixPath(filePath) { return filePath.split(path.sep).join("/"); } @@ -165,7 +177,7 @@ function main() { } else { console.log(`✅ Removed ${total} materialized file(s) from plugins.`); if (manifestsUpdated > 0) { - console.log(`✅ Updated ${manifestsUpdated} plugin manifest(s) with folder trailing slashes.`); + console.log(`✅ Updated ${manifestsUpdated} plugin manifest(s) to restore and normalize spec entries.`); } } } diff --git a/eng/validate-plugins.mjs b/eng/validate-plugins.mjs index 946accab..42f64265 100755 --- a/eng/validate-plugins.mjs +++ b/eng/validate-plugins.mjs @@ -64,6 +64,18 @@ function validateKeywords(keywords) { return null; } +function arraysEqual(left, right) { + if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) { + return false; + } + + return left.every((value, index) => value === right[index]); +} + +function sortPluginEntries(entries) { + return [...entries].sort((left, right) => left.localeCompare(right)); +} + function validateSpecPaths(plugin) { const errors = []; const specs = { @@ -78,6 +90,9 @@ function validateSpecPaths(plugin) { errors.push(`${field} must be an array`); continue; } + if (!arraysEqual(arr, sortPluginEntries(arr))) { + errors.push(`${field} must be sorted alphabetically`); + } for (let i = 0; i < arr.length; i++) { const p = arr[i]; if (typeof p !== "string") { diff --git a/plugins/ai-team-orchestration/.github/plugin/plugin.json b/plugins/ai-team-orchestration/.github/plugin/plugin.json index 98ebe602..85d52d35 100644 --- a/plugins/ai-team-orchestration/.github/plugin/plugin.json +++ b/plugins/ai-team-orchestration/.github/plugin/plugin.json @@ -17,8 +17,8 @@ "repository": "https://github.com/github/awesome-copilot", "license": "MIT", "agents": [ - "./agents/ai-team-producer.md", "./agents/ai-team-dev.md", + "./agents/ai-team-producer.md", "./agents/ai-team-qa.md" ], "skills": [ diff --git a/plugins/awesome-copilot/.github/plugin/plugin.json b/plugins/awesome-copilot/.github/plugin/plugin.json index 3ebd4b48..87dd1b43 100644 --- a/plugins/awesome-copilot/.github/plugin/plugin.json +++ b/plugins/awesome-copilot/.github/plugin/plugin.json @@ -18,8 +18,8 @@ "./agents/meta-agentic-project-scaffold.md" ], "skills": [ - "./skills/suggest-awesome-github-copilot-skills/", + "./skills/suggest-awesome-github-copilot-agents/", "./skills/suggest-awesome-github-copilot-instructions/", - "./skills/suggest-awesome-github-copilot-agents/" + "./skills/suggest-awesome-github-copilot-skills/" ] } diff --git a/plugins/azure-cloud-development/.github/plugin/plugin.json b/plugins/azure-cloud-development/.github/plugin/plugin.json index 9d25bcb8..6f977684 100644 --- a/plugins/azure-cloud-development/.github/plugin/plugin.json +++ b/plugins/azure-cloud-development/.github/plugin/plugin.json @@ -18,18 +18,18 @@ "devops" ], "agents": [ + "./agents/azure-logic-apps-expert.md", "./agents/azure-principal-architect.md", "./agents/azure-saas-architect.md", - "./agents/azure-logic-apps-expert.md", "./agents/azure-verified-modules-bicep.md", "./agents/azure-verified-modules-terraform.md", - "./agents/terraform-azure-planning.md", - "./agents/terraform-azure-implement.md" + "./agents/terraform-azure-implement.md", + "./agents/terraform-azure-planning.md" ], "skills": [ - "./skills/azure-resource-health-diagnose/", "./skills/az-cost-optimize/", - "./skills/import-infrastructure-as-code/", - "./skills/azure-pricing/" + "./skills/azure-pricing/", + "./skills/azure-resource-health-diagnose/", + "./skills/import-infrastructure-as-code/" ] } diff --git a/plugins/cast-imaging/.github/plugin/plugin.json b/plugins/cast-imaging/.github/plugin/plugin.json index 77c36be5..2d8d22bd 100644 --- a/plugins/cast-imaging/.github/plugin/plugin.json +++ b/plugins/cast-imaging/.github/plugin/plugin.json @@ -16,8 +16,8 @@ "devops" ], "agents": [ - "./agents/cast-imaging-software-discovery.md", "./agents/cast-imaging-impact-analysis.md", + "./agents/cast-imaging-software-discovery.md", "./agents/cast-imaging-structural-quality-advisor.md" ] } diff --git a/plugins/context-engineering/.github/plugin/plugin.json b/plugins/context-engineering/.github/plugin/plugin.json index a6ed5c2f..a1f49a3c 100644 --- a/plugins/context-engineering/.github/plugin/plugin.json +++ b/plugins/context-engineering/.github/plugin/plugin.json @@ -19,7 +19,7 @@ ], "skills": [ "./skills/context-map/", - "./skills/what-context-needed/", - "./skills/refactor-plan/" + "./skills/refactor-plan/", + "./skills/what-context-needed/" ] } diff --git a/plugins/csharp-dotnet-development/.github/plugin/plugin.json b/plugins/csharp-dotnet-development/.github/plugin/plugin.json index 1ec31d36..819f96af 100644 --- a/plugins/csharp-dotnet-development/.github/plugin/plugin.json +++ b/plugins/csharp-dotnet-development/.github/plugin/plugin.json @@ -17,12 +17,12 @@ "./agents/expert-dotnet-software-engineer.md" ], "skills": [ - "./skills/csharp-async/", "./skills/aspnet-minimal-api-openapi/", - "./skills/csharp-xunit/", - "./skills/csharp-nunit/", + "./skills/csharp-async/", "./skills/csharp-mstest/", + "./skills/csharp-nunit/", "./skills/csharp-tunit/", + "./skills/csharp-xunit/", "./skills/dotnet-best-practices/", "./skills/dotnet-upgrade/" ] diff --git a/plugins/database-data-management/.github/plugin/plugin.json b/plugins/database-data-management/.github/plugin/plugin.json index 2477c840..4091e9f3 100644 --- a/plugins/database-data-management/.github/plugin/plugin.json +++ b/plugins/database-data-management/.github/plugin/plugin.json @@ -18,13 +18,13 @@ "data-management" ], "agents": [ - "./agents/postgresql-dba.md", - "./agents/ms-sql-dba.md" + "./agents/ms-sql-dba.md", + "./agents/postgresql-dba.md" ], "skills": [ - "./skills/sql-optimization/", - "./skills/sql-code-review/", + "./skills/postgresql-code-review/", "./skills/postgresql-optimization/", - "./skills/postgresql-code-review/" + "./skills/sql-code-review/", + "./skills/sql-optimization/" ] } diff --git a/plugins/dataverse-sdk-for-python/.github/plugin/plugin.json b/plugins/dataverse-sdk-for-python/.github/plugin/plugin.json index 4cac3979..b4ee7246 100644 --- a/plugins/dataverse-sdk-for-python/.github/plugin/plugin.json +++ b/plugins/dataverse-sdk-for-python/.github/plugin/plugin.json @@ -14,9 +14,9 @@ "sdk" ], "skills": [ - "./skills/dataverse-python-quickstart/", "./skills/dataverse-python-advanced-patterns/", "./skills/dataverse-python-production-code/", + "./skills/dataverse-python-quickstart/", "./skills/dataverse-python-usecase-builder/" ] } diff --git a/plugins/edge-ai-tasks/.github/plugin/plugin.json b/plugins/edge-ai-tasks/.github/plugin/plugin.json index 5479ee9d..85778680 100644 --- a/plugins/edge-ai-tasks/.github/plugin/plugin.json +++ b/plugins/edge-ai-tasks/.github/plugin/plugin.json @@ -15,7 +15,7 @@ "implementation" ], "agents": [ - "./agents/task-researcher.md", - "./agents/task-planner.md" + "./agents/task-planner.md", + "./agents/task-researcher.md" ] } diff --git a/plugins/flowstudio-power-automate/.github/plugin/plugin.json b/plugins/flowstudio-power-automate/.github/plugin/plugin.json index 7e9c2d39..9ed85753 100644 --- a/plugins/flowstudio-power-automate/.github/plugin/plugin.json +++ b/plugins/flowstudio-power-automate/.github/plugin/plugin.json @@ -19,10 +19,10 @@ "governance" ], "skills": [ - "./skills/flowstudio-power-automate-mcp/", - "./skills/flowstudio-power-automate-debug/", "./skills/flowstudio-power-automate-build/", - "./skills/flowstudio-power-automate-monitoring/", - "./skills/flowstudio-power-automate-governance/" + "./skills/flowstudio-power-automate-debug/", + "./skills/flowstudio-power-automate-governance/", + "./skills/flowstudio-power-automate-mcp/", + "./skills/flowstudio-power-automate-monitoring/" ] } diff --git a/plugins/frontend-web-dev/.github/plugin/plugin.json b/plugins/frontend-web-dev/.github/plugin/plugin.json index efc8b17b..866d18de 100644 --- a/plugins/frontend-web-dev/.github/plugin/plugin.json +++ b/plugins/frontend-web-dev/.github/plugin/plugin.json @@ -19,8 +19,8 @@ "vue" ], "agents": [ - "./agents/expert-react-frontend-engineer.md", - "./agents/electron-angular-native.md" + "./agents/electron-angular-native.md", + "./agents/expert-react-frontend-engineer.md" ], "skills": [ "./skills/playwright-explore-website/", diff --git a/plugins/gem-team/.github/plugin/plugin.json b/plugins/gem-team/.github/plugin/plugin.json index 439ab195..a0a8f854 100644 --- a/plugins/gem-team/.github/plugin/plugin.json +++ b/plugins/gem-team/.github/plugin/plugin.json @@ -1,20 +1,20 @@ { "agents": [ - "./agents/gem-orchestrator.md", - "./agents/gem-researcher.md", - "./agents/gem-planner.md", - "./agents/gem-implementer.md", "./agents/gem-browser-tester.md", - "./agents/gem-devops.md", - "./agents/gem-reviewer.md", - "./agents/gem-documentation-writer.md", - "./agents/gem-debugger.md", - "./agents/gem-critic.md", "./agents/gem-code-simplifier.md", - "./agents/gem-designer.md", - "./agents/gem-implementer-mobile.md", + "./agents/gem-critic.md", + "./agents/gem-debugger.md", "./agents/gem-designer-mobile.md", - "./agents/gem-mobile-tester.md" + "./agents/gem-designer.md", + "./agents/gem-devops.md", + "./agents/gem-documentation-writer.md", + "./agents/gem-implementer-mobile.md", + "./agents/gem-implementer.md", + "./agents/gem-mobile-tester.md", + "./agents/gem-orchestrator.md", + "./agents/gem-planner.md", + "./agents/gem-researcher.md", + "./agents/gem-reviewer.md" ], "author": { "email": "mubaidr@gmail.com", diff --git a/plugins/java-development/.github/plugin/plugin.json b/plugins/java-development/.github/plugin/plugin.json index ffd3da89..8f058c08 100644 --- a/plugins/java-development/.github/plugin/plugin.json +++ b/plugins/java-development/.github/plugin/plugin.json @@ -16,9 +16,9 @@ "javadoc" ], "skills": [ + "./skills/create-spring-boot-java-project/", "./skills/java-docs/", "./skills/java-junit/", - "./skills/java-springboot/", - "./skills/create-spring-boot-java-project/" + "./skills/java-springboot/" ] } diff --git a/plugins/mcp-m365-copilot/.github/plugin/plugin.json b/plugins/mcp-m365-copilot/.github/plugin/plugin.json index 01f010e9..4176d408 100644 --- a/plugins/mcp-m365-copilot/.github/plugin/plugin.json +++ b/plugins/mcp-m365-copilot/.github/plugin/plugin.json @@ -19,8 +19,8 @@ "./agents/mcp-m365-agent-expert.md" ], "skills": [ - "./skills/mcp-create-declarative-agent/", "./skills/mcp-create-adaptive-cards/", + "./skills/mcp-create-declarative-agent/", "./skills/mcp-deploy-manage-agents/" ] } diff --git a/plugins/partners/.github/plugin/plugin.json b/plugins/partners/.github/plugin/plugin.json index 72801efc..2725120b 100644 --- a/plugins/partners/.github/plugin/plugin.json +++ b/plugins/partners/.github/plugin/plugin.json @@ -23,6 +23,7 @@ "./agents/amplitude-experiment-implementation.md", "./agents/apify-integration-expert.md", "./agents/arm-migration.md", + "./agents/comet-opik.md", "./agents/diffblue-cover.md", "./agents/droid.md", "./agents/dynatrace-expert.md", @@ -36,9 +37,8 @@ "./agents/neon-migration-specialist.md", "./agents/neon-optimization-analyzer.md", "./agents/octopus-deploy-release-notes-mcp.md", - "./agents/stackhawk-security-onboarding.md", - "./agents/terraform.md", "./agents/pagerduty-incident-responder.md", - "./agents/comet-opik.md" + "./agents/stackhawk-security-onboarding.md", + "./agents/terraform.md" ] } diff --git a/plugins/polyglot-test-agent/.github/plugin/plugin.json b/plugins/polyglot-test-agent/.github/plugin/plugin.json index 09e2a22c..f3cb8442 100644 --- a/plugins/polyglot-test-agent/.github/plugin/plugin.json +++ b/plugins/polyglot-test-agent/.github/plugin/plugin.json @@ -20,14 +20,14 @@ "go" ], "agents": [ - "./agents/polyglot-test-generator.md", - "./agents/polyglot-test-researcher.md", - "./agents/polyglot-test-planner.md", - "./agents/polyglot-test-implementer.md", "./agents/polyglot-test-builder.md", - "./agents/polyglot-test-tester.md", "./agents/polyglot-test-fixer.md", - "./agents/polyglot-test-linter.md" + "./agents/polyglot-test-generator.md", + "./agents/polyglot-test-implementer.md", + "./agents/polyglot-test-linter.md", + "./agents/polyglot-test-planner.md", + "./agents/polyglot-test-researcher.md", + "./agents/polyglot-test-tester.md" ], "skills": [ "./skills/polyglot-test-agent/" diff --git a/plugins/power-platform-mcp-connector-development/.github/plugin/plugin.json b/plugins/power-platform-mcp-connector-development/.github/plugin/plugin.json index aec0c8f3..da2bd084 100644 --- a/plugins/power-platform-mcp-connector-development/.github/plugin/plugin.json +++ b/plugins/power-platform-mcp-connector-development/.github/plugin/plugin.json @@ -18,7 +18,7 @@ "./agents/power-platform-mcp-integration-expert.md" ], "skills": [ - "./skills/power-platform-mcp-connector-suite/", - "./skills/mcp-copilot-studio-server-generator/" + "./skills/mcp-copilot-studio-server-generator/", + "./skills/power-platform-mcp-connector-suite/" ] } diff --git a/plugins/project-planning/.github/plugin/plugin.json b/plugins/project-planning/.github/plugin/plugin.json index 1f9e4c5f..566e3c1d 100644 --- a/plugins/project-planning/.github/plugin/plugin.json +++ b/plugins/project-planning/.github/plugin/plugin.json @@ -18,22 +18,22 @@ "technical-spike" ], "agents": [ - "./agents/task-planner.md", - "./agents/task-researcher.md", - "./agents/planner.md", - "./agents/plan.md", - "./agents/prd.md", "./agents/implementation-plan.md", - "./agents/research-technical-spike.md" + "./agents/plan.md", + "./agents/planner.md", + "./agents/prd.md", + "./agents/research-technical-spike.md", + "./agents/task-planner.md", + "./agents/task-researcher.md" ], "skills": [ - "./skills/breakdown-feature-implementation/", - "./skills/breakdown-feature-prd/", "./skills/breakdown-epic-arch/", "./skills/breakdown-epic-pm/", - "./skills/create-implementation-plan/", - "./skills/update-implementation-plan/", + "./skills/breakdown-feature-implementation/", + "./skills/breakdown-feature-prd/", "./skills/create-github-issues-feature-from-implementation-plan/", - "./skills/create-technical-spike/" + "./skills/create-implementation-plan/", + "./skills/create-technical-spike/", + "./skills/update-implementation-plan/" ] } diff --git a/plugins/react18-upgrade/.github/plugin/plugin.json b/plugins/react18-upgrade/.github/plugin/plugin.json index 441b96e6..f123facb 100644 --- a/plugins/react18-upgrade/.github/plugin/plugin.json +++ b/plugins/react18-upgrade/.github/plugin/plugin.json @@ -16,12 +16,12 @@ }, "repository": "https://github.com/github/awesome-copilot", "license": "MIT", - "agents": [ + "agents": [ "./agents/react18-auditor.md", + "./agents/react18-batching-fixer.md", + "./agents/react18-class-surgeon.md", "./agents/react18-commander.md", "./agents/react18-dep-surgeon.md", - "./agents/react18-class-surgeon.md", - "./agents/react18-batching-fixer.md", "./agents/react18-test-guardian.md" ], "skills": [ diff --git a/plugins/rug-agentic-workflow/.github/plugin/plugin.json b/plugins/rug-agentic-workflow/.github/plugin/plugin.json index 7bdf0997..c826c446 100644 --- a/plugins/rug-agentic-workflow/.github/plugin/plugin.json +++ b/plugins/rug-agentic-workflow/.github/plugin/plugin.json @@ -15,8 +15,8 @@ "qa" ], "agents": [ + "./agents/qa-subagent.md", "./agents/rug-orchestrator.md", - "./agents/swe-subagent.md", - "./agents/qa-subagent.md" + "./agents/swe-subagent.md" ] } diff --git a/plugins/salesforce-development/.github/plugin/plugin.json b/plugins/salesforce-development/.github/plugin/plugin.json index f29a9c10..6ba38514 100644 --- a/plugins/salesforce-development/.github/plugin/plugin.json +++ b/plugins/salesforce-development/.github/plugin/plugin.json @@ -26,7 +26,7 @@ ], "skills": [ "./skills/salesforce-apex-quality/", - "./skills/salesforce-flow-design/", - "./skills/salesforce-component-standards/" + "./skills/salesforce-component-standards/", + "./skills/salesforce-flow-design/" ] } diff --git a/plugins/software-engineering-team/.github/plugin/plugin.json b/plugins/software-engineering-team/.github/plugin/plugin.json index 0228eac5..b680ade8 100644 --- a/plugins/software-engineering-team/.github/plugin/plugin.json +++ b/plugins/software-engineering-team/.github/plugin/plugin.json @@ -18,12 +18,12 @@ "ai-ethics" ], "agents": [ - "./agents/se-ux-ui-designer.md", - "./agents/se-technical-writer.md", "./agents/se-gitops-ci-specialist.md", "./agents/se-product-manager-advisor.md", "./agents/se-responsible-ai-code.md", + "./agents/se-security-reviewer.md", "./agents/se-system-architecture-reviewer.md", - "./agents/se-security-reviewer.md" + "./agents/se-technical-writer.md", + "./agents/se-ux-ui-designer.md" ] } diff --git a/plugins/testing-automation/.github/plugin/plugin.json b/plugins/testing-automation/.github/plugin/plugin.json index 3b325606..d25da6e1 100644 --- a/plugins/testing-automation/.github/plugin/plugin.json +++ b/plugins/testing-automation/.github/plugin/plugin.json @@ -18,16 +18,16 @@ "nunit" ], "agents": [ - "./agents/tdd-red.md", + "./agents/playwright-tester.md", "./agents/tdd-green.md", - "./agents/tdd-refactor.md", - "./agents/playwright-tester.md" + "./agents/tdd-red.md", + "./agents/tdd-refactor.md" ], "skills": [ - "./skills/playwright-explore-website/", - "./skills/playwright-generate-test/", + "./skills/ai-prompt-engineering-safety-review/", "./skills/csharp-nunit/", "./skills/java-junit/", - "./skills/ai-prompt-engineering-safety-review/" + "./skills/playwright-explore-website/", + "./skills/playwright-generate-test/" ] } diff --git a/plugins/typespec-m365-copilot/.github/plugin/plugin.json b/plugins/typespec-m365-copilot/.github/plugin/plugin.json index 58a030b4..670511a3 100644 --- a/plugins/typespec-m365-copilot/.github/plugin/plugin.json +++ b/plugins/typespec-m365-copilot/.github/plugin/plugin.json @@ -16,8 +16,8 @@ "microsoft-365" ], "skills": [ + "./skills/typespec-api-operations/", "./skills/typespec-create-agent/", - "./skills/typespec-create-api-plugin/", - "./skills/typespec-api-operations/" + "./skills/typespec-create-api-plugin/" ] }